From e3884b27baf61fa8c9f5a628164bbf66c5adf3ea Mon Sep 17 00:00:00 2001 From: Krish Suchak Date: Fri, 5 Jun 2026 17:31:59 -0400 Subject: [PATCH 1/4] feat(policy): DSPX-2754 DynamicValueMapping protos + generated code Protocol-first half of the dynamic attribute value entitlement work: adds the DynamicValueMapping / DynamicValueResolver messages and DynamicValueOperatorEnum to objects.proto, and a dedicated DynamicValueMappingService (policy.dynamicvaluemapping), plus regenerated protocol/go and OpenAPI/gRPC docs. No service implementation here. This lands and releases protocol/go first so the consumer PR (#3568) can require the new version and pass per-module 'go mod tidy'. Refs: DSPX-2754, DSPX-3498 Signed-off-by: Krish Suchak --- docs/grpc/index.html | 6419 +++++++++-------- .../dynamic_value_mapping.openapi.yaml | 1454 ++++ docs/openapi/policy/objects.openapi.yaml | 77 + protocol/go/go.mod | 2 + .../dynamic_value_mapping.pb.go | 1312 ++++ .../dynamic_value_mapping_grpc.pb.go | 258 + .../dynamic_value_mapping.connect.go | 238 + protocol/go/policy/objects.pb.go | 1550 ++-- .../dynamic_value_mapping.proto | 173 + service/policy/objects.proto | 62 + 10 files changed, 8056 insertions(+), 3489 deletions(-) create mode 100644 docs/openapi/policy/dynamicvaluemapping/dynamic_value_mapping.openapi.yaml create mode 100644 protocol/go/policy/dynamicvaluemapping/dynamic_value_mapping.pb.go create mode 100644 protocol/go/policy/dynamicvaluemapping/dynamic_value_mapping_grpc.pb.go create mode 100644 protocol/go/policy/dynamicvaluemapping/dynamicvaluemappingconnect/dynamic_value_mapping.connect.go create mode 100644 service/policy/dynamicvaluemapping/dynamic_value_mapping.proto diff --git a/docs/grpc/index.html b/docs/grpc/index.html index c3c252a786..1df04177e0 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -241,6 +241,14 @@

Table of Contents

MConditionGroup +
  • + MDynamicValueMapping +
  • + +
  • + MDynamicValueResolver +
  • +
  • MKasKey
  • @@ -370,6 +378,10 @@

    Table of Contents

    EConditionBooleanTypeEnum +
  • + EDynamicValueOperatorEnum +
  • +
  • EKasPublicKeyAlgEnum
  • @@ -1071,6 +1083,200 @@

    Table of Contents

    +
  • + policy/subjectmapping/subject_mapping.proto + +
  • + + +
  • + policy/dynamicvaluemapping/dynamic_value_mapping.proto + +
  • + +
  • policy/kasregistry/key_access_server_registry.proto
      @@ -1858,249 +2064,118 @@

      Table of Contents

    • - policy/subjectmapping/subject_mapping.proto + policy/unsafe/unsafe.proto +
    • + + +
    • + wellknownconfiguration/wellknown_configuration.proto + -
    • - - -
    • - policy/unsafe/unsafe.proto - -
    • - - -
    • - wellknownconfiguration/wellknown_configuration.proto -
        - -
      • - MGetWellKnownConfigurationRequest -
      • - -
      • - MGetWellKnownConfigurationResponse -
      • - -
      • - MWellKnownConfig -
      • - -
      • - MWellKnownConfig.ConfigurationEntry + MWellKnownConfig.ConfigurationEntry
      • @@ -2712,6 +2787,106 @@

        ConditionGroup

        +

        DynamicValueMapping

        +

        Dynamic Value Mapping: a Policy assigning permitted action(s) to

        dynamically-requested values under an Attribute Definition. It raises entitlement

        authority from a concrete Attribute Value to the Attribute Definition: at decision time

        the value_resolver compares the requested resource value segment against the entity

        representation, avoiding pre-provisioning a value + subject mapping per discrete value.

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        idstring

        attribute_definitionAttribute

        the Attribute Definition whose values are entitled dynamically

        value_resolverDynamicValueResolver

        the dynamic resolver matched against the requested resource value segment

        subject_condition_setSubjectConditionSet

        optional static pre-gate on the entity, evaluated with normal SubjectConditionSet +semantics (no dynamic overload). When present, both the gate and the resolver must +pass for entitlement.

        actionsActionrepeated

        the actions permitted by subjects in this mapping

        namespaceNamespace

        the namespace containing this mapping

        metadatacommon.Metadata

        + + + + + +

        DynamicValueResolver

        +

        Definition Value Resolver: the dynamic half of a DynamicValueMapping. It

        resolves a selector against the entity representation and compares the result to the

        requested resource value segment using a DynamicValueOperatorEnum.

        + + + + + + + + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        subject_external_selector_valuestring

        a selector for a field value on a flattened Entity Representation (such as from +idP/LDAP), e.g. ".patientAssignments[]"

        operatorDynamicValueOperatorEnum

        the dynamic operator comparing the selector result to the resource value segment

        + + + + +

        KasKey

        @@ -4214,6 +4389,37 @@

        ConditionBooleanTypeEnum

        +

        DynamicValueOperatorEnum

        +

        Operators for dynamic, definition-level value entitlement. Unlike

        SubjectMappingOperatorEnum, whose right-hand operand is a static list authored into

        policy, a DynamicValueOperatorEnum's right-hand operand is the requested resource's

        attribute value segment, supplied at decision time. Each value is the inversion of its

        static SubjectMappingOperatorEnum counterpart.

        + + + + + + + + + + + + + + + + + + + + + + + + + +
        NameNumberDescription
        DYNAMIC_VALUE_OPERATOR_ENUM_UNSPECIFIED0

        DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN1

        true when the requested resource value segment equals one of the values resolved by +the selector against the entity representation (inversion of IN)

        DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN_CONTAINS2

        true when one of the selector-resolved entity values contains the requested resource +value segment as a substring (inversion of IN_CONTAINS)

        +

        KasPublicKeyAlgEnum

        @@ -9589,12 +9795,12 @@

        Methods with idempotency_level option

        -

        policy/kasregistry/key_access_server_registry.proto

        Top +

        policy/subjectmapping/subject_mapping.proto

        Top

        -

        ActivatePublicKeyRequest

        +

        CreateSubjectConditionSetRequest

        @@ -9605,32 +9811,22 @@

        ActivatePublicKeyRequest

        - + + + + + + + + - -
        idsubject_condition_setSubjectConditionSetCreate

        namespace_id string

        - - - - - -

        ActivatePublicKeyResponse

        -

        - - - - - - - - - - + + @@ -9642,8 +9838,8 @@

        ActivatePublicKeyResponse< -

        ChangeMappings

        -

        Simplified information about the resources that were rotated as part of the key rotation process.

        +

        CreateSubjectConditionSetResponse

        +

        FieldTypeLabelDescription
        keypolicy.Keynamespace_fqnstring

        @@ -9653,15 +9849,8 @@

        ChangeMappings

        - - - - - - - - - + + @@ -9673,7 +9862,7 @@

        ChangeMappings

        -

        CreateKeyAccessServerRequest

        +

        CreateSubjectMappingRequest

        @@ -9684,38 +9873,56 @@

        CreateKeyAccessServerRe

        - + - + - - + + + + + + + + + - + - - + + - + - + - + + + + + + + + - + @@ -9725,7 +9932,7 @@

        CreateKeyAccessServerRe -

        CreateKeyAccessServerResponse

        +

        CreateSubjectMappingResponse

        @@ -9736,8 +9943,8 @@

        CreateKeyAccessServerR

        - - + + @@ -9749,8 +9956,15 @@

        CreateKeyAccessServerR -

        CreateKeyRequest

        -

        Create a new asymmetric key for the specified Key Access Server (KAS)

        +

        DeleteAllUnmappedSubjectConditionSetsRequest

        +

        Prune any Subject Condition Sets not utilized within a Subject Mapping

        + + + + + +

        DeleteAllUnmappedSubjectConditionSetsResponse

        +

        idstring

        fqnstringsubject_condition_setpolicy.SubjectConditionSet

        uriattribute_value_id string

        Required

        Required +Attribute Value to be mapped to

        public_keypolicy.PublicKeyactionspolicy.Actionrepeated

        Required +The actions permitted by subjects in this mapping

        existing_subject_condition_set_idstring

        Deprecated

        Either of the following: +Reuse existing SubjectConditionSet (NOTE: prioritized over new_subject_condition_set)

        source_typepolicy.SourceTypenew_subject_condition_setSubjectConditionSetCreate

        Optional

        Create new SubjectConditionSet (NOTE: ignored if existing_subject_condition_set_id is provided)

        namenamespace_id string

        Optional

        Optional +Namespace ID or FQN for the subject mapping

        namespace_fqnstring

        metadata common.MetadataMutable

        Common metadata

        Optional

        key_access_serverpolicy.KeyAccessServersubject_mappingpolicy.SubjectMapping

        @@ -9760,84 +9974,34 @@

        CreateKeyRequest

        - - - - - - - - - - - - - - - - - - + + + + - - - - - +
        kas_idstring

        Required - -The unique identifier of the Key Access Server

        key_idstring

        Required - -A user-defined identifier for the key

        key_algorithmpolicy.Algorithm

        Required - -The algorithm to be used for the key

        subject_condition_setspolicy.SubjectConditionSetrepeated

        Only IDs of any deleted Subject Condition Set provided

        key_modepolicy.KeyMode

        Required +

        -The mode of the key (e.g., local or external)

        - - - - public_key_ctx - policy.PublicKeyCtx - -

        Required + -Context or additional data specific to the public key, based on the key provider implementation

        - - - - private_key_ctx - policy.PrivateKeyCtx - -

        Conditionally Required + + +

        DeleteSubjectConditionSetRequest

        +

        -Context or additional data specific to the private key, based on the key provider implementation

        - + + + + + + - + - - - - - - - - - - - - - - - + @@ -9847,8 +10011,8 @@

        CreateKeyRequest

        -

        CreateKeyResponse

        -

        Response to a CreateKeyRequest, containing the created asymmetric key

        +

        DeleteSubjectConditionSetResponse

        +

        FieldTypeLabelDescription
        provider_config_idid string

        Optional - -Configuration ID for the key provider, if applicable

        legacybool

        Optional - -Whether the key is a legacy key

        metadatacommon.MetadataMutable

        Common metadata - -Mutable metadata for the key

        Required

        @@ -9858,10 +10022,10 @@

        CreateKeyResponse

        - - + + - + @@ -9871,7 +10035,7 @@

        CreateKeyResponse

        -

        CreatePublicKeyRequest

        +

        DeleteSubjectMappingRequest

        @@ -9882,26 +10046,12 @@

        CreatePublicKeyRequest

        - + - - - - - - - - - - - - - -
        kas_keypolicy.KasKeysubject_condition_setpolicy.SubjectConditionSet

        The created asymmetric key for a KAS.

        Only ID of deleted Subject Condition Set provided

        kas_idid string

        Required

        keypolicy.KasPublicKey

        Required

        metadatacommon.MetadataMutable

        Common metadata

        @@ -9909,7 +10059,7 @@

        CreatePublicKeyRequest

        -

        CreatePublicKeyResponse

        +

        DeleteSubjectMappingResponse

        @@ -9920,10 +10070,10 @@

        CreatePublicKeyResponse

        - key - policy.Key + subject_mapping + policy.SubjectMapping -

        +

        Only ID of the updated Subject Mapping provided

        @@ -9933,7 +10083,7 @@

        CreatePublicKeyResponse

        -

        DeactivatePublicKeyRequest

        +

        GetSubjectConditionSetRequest

        @@ -9947,7 +10097,7 @@

        DeactivatePublicKeyReques id string -

        +

        Required

        @@ -9957,7 +10107,7 @@

        DeactivatePublicKeyReques -

        DeactivatePublicKeyResponse

        +

        GetSubjectConditionSetResponse

        @@ -9968,12 +10118,19 @@

        DeactivatePublicKeyRespo - key - policy.Key + subject_condition_set + policy.SubjectConditionSet

        + + associated_subject_mappings + policy.SubjectMapping + repeated +

        contextualized Subject Mappings associated with this SubjectConditionSet

        + + @@ -9981,7 +10138,7 @@

        DeactivatePublicKeyRespo -

        DeleteKeyAccessServerRequest

        +

        GetSubjectMappingRequest

        @@ -10005,7 +10162,7 @@

        DeleteKeyAccessServerRe -

        DeleteKeyAccessServerResponse

        +

        GetSubjectMappingResponse

        @@ -10016,8 +10173,8 @@

        DeleteKeyAccessServerR - key_access_server - policy.KeyAccessServer + subject_mapping + policy.SubjectMapping

        @@ -10029,14 +10186,7 @@

        DeleteKeyAccessServerR -

        GetBaseKeyRequest

        -

        - - - - - -

        GetBaseKeyResponse

        +

        ListSubjectConditionSetsRequest

        @@ -10047,86 +10197,45 @@

        GetBaseKeyResponse

        - base_key - policy.SimpleKasKey + namespace_id + string -

        The current base key

        - - - - - - - - - -

        GetKeyAccessServerRequest

        -

        - - - - - - - - - - - - - + - + - + - - + + - + - - - - + + + +
        FieldTypeLabelDescription
        idstring

        Deprecated. Deprecated

        kas_idnamespace_fqn string

        option (buf.validate.oneof).required = true; // TODO: enable this when we remove the deprecated field

        namestringpaginationpolicy.PageRequest

        Optional

        uristring

        sortSubjectConditionSetsSortrepeated

        Optional - CONSTRAINT: max 1 item +Sort defaults: + - direction UNSPECIFIED defaults to DESC for the specified field + - field UNSPECIFIED defaults to created_at with the specified direction + - both UNSPECIFIED or sort omitted defaults to created_at DESC

        - - -

        Fields with deprecated option

        - - - - - - - - - - - - - - - -
        NameOption
        id

        true

        - - -

        GetKeyAccessServerResponse

        +

        ListSubjectConditionSetsResponse

        @@ -10137,8 +10246,15 @@

        GetKeyAccessServerRespons - key_access_server - policy.KeyAccessServer + subject_condition_sets + policy.SubjectConditionSet + repeated +

        + + + + pagination + policy.PageResponse

        @@ -10150,8 +10266,8 @@

        GetKeyAccessServerRespons -

        GetKeyRequest

        -

        Retrieve an existing asymmetric key from the Key Management System

        +

        ListSubjectMappingsRequest

        +

        @@ -10161,19 +10277,37 @@

        GetKeyRequest

        - + - + - - + + + + + + + + + + + + + + + +
        idnamespace_id string

        The unique identifier of the key to retrieve

        keyKasKeyIdentifiernamespace_fqnstring

        paginationpolicy.PageRequest

        Optional

        sortSubjectMappingsSortrepeated

        Optional - CONSTRAINT: max 1 item +Sort defaults: + - direction UNSPECIFIED defaults to DESC for the specified field + - field UNSPECIFIED defaults to created_at with the specified direction + - both UNSPECIFIED or sort omitted defaults to created_at DESC

        @@ -10181,8 +10315,8 @@

        GetKeyRequest

        -

        GetKeyResponse

        -

        Response to a GetKeyRequest, containing the requested asymmetric key

        +

        ListSubjectMappingsResponse

        +

        @@ -10192,10 +10326,17 @@

        GetKeyResponse

        - - + + + + + + + + + - + @@ -10205,8 +10346,8 @@

        GetKeyResponse

        -

        GetPublicKeyRequest

        -

        +

        MatchSubjectMappingsRequest

        +

        MatchSubjectMappingsRequest liberally returns a list of SubjectMappings based on the provided SubjectProperties.

        The SubjectMappings are returned if an external selector field matches.

        kas_keypolicy.KasKeysubject_mappingspolicy.SubjectMappingrepeated

        paginationpolicy.PageResponse

        The requested asymmetric key for a KAS.

        @@ -10216,9 +10357,9 @@

        GetPublicKeyRequest

        - - - + + + @@ -10229,7 +10370,7 @@

        GetPublicKeyRequest

        -

        GetPublicKeyResponse

        +

        MatchSubjectMappingsResponse

        @@ -10240,9 +10381,9 @@

        GetPublicKeyResponse

        - - - + + + @@ -10253,8 +10394,8 @@

        GetPublicKeyResponse

        -

        GrantedPolicyObject

        -

        Can be namespace, attribute definition, or value

        +

        SubjectConditionSetCreate

        +

        idstringsubject_propertiespolicy.SubjectPropertyrepeated

        keypolicy.Keysubject_mappingspolicy.SubjectMappingrepeated

        @@ -10264,17 +10405,18 @@

        GrantedPolicyObject

        - - - - + + + + - - + + - + @@ -10284,8 +10426,8 @@

        GrantedPolicyObject

        -

        KasKeyIdentifier

        -

        Nested message for specifying the active key using KAS ID and Key ID

        +

        SubjectConditionSetsSort

        +

        idstring

        subject_setspolicy.SubjectSetrepeated

        Required

        fqnstringmetadatacommon.MetadataMutable

        Optional +Common metadata

        @@ -10295,33 +10437,19 @@

        KasKeyIdentifier

        - - - - - - - - - + + - - + + - - - - - - -
        kas_idstring

        namestringfieldSortSubjectConditionSetsType

        uristringdirectionpolicy.SortDirection

        kidstring

        Required Key ID of the key in question

        @@ -10329,7 +10457,7 @@

        KasKeyIdentifier

        -

        KasKeysSort

        +

        SubjectMappingsSort

        @@ -10341,7 +10469,7 @@

        KasKeysSort

        field - SortKasKeysType + SortSubjectMappingsType

        @@ -10360,8 +10488,8 @@

        KasKeysSort

        -

        KeyAccessServerGrants

        -

        Deprecated

        +

        UpdateSubjectConditionSetRequest

        +

        @@ -10371,30 +10499,31 @@

        KeyAccessServerGrants

        - - + + - + - - + + - + - - - - + + + + - - - + + + @@ -10405,7 +10534,7 @@

        KeyAccessServerGrants

        -

        KeyAccessServersSort

        +

        UpdateSubjectConditionSetResponse

        @@ -10416,17 +10545,10 @@

        KeyAccessServersSort

        - - - - - - - - - + + - + @@ -10436,7 +10558,7 @@

        KeyAccessServersSort

        -

        KeyMapping

        +

        UpdateSubjectMappingRequest

        @@ -10447,38 +10569,659 @@

        KeyMapping

        - + - + - + - + - - + + - + - - + + + + + + + + + + + + + + +
        key_access_serverpolicy.KeyAccessServeridstring

        Required

        namespace_grantsGrantedPolicyObjectsubject_setspolicy.SubjectSet repeated

        Optional +If provided, replaces entire existing structure of Subject Sets, Condition Groups, & Conditions

        attribute_grantsGrantedPolicyObjectrepeated

        metadatacommon.MetadataMutable

        Common metadata

        value_grantsGrantedPolicyObjectrepeatedmetadata_update_behaviorcommon.MetadataUpdateEnum

        fieldSortKeyAccessServersType

        directionpolicy.SortDirectionsubject_condition_setpolicy.SubjectConditionSet

        Only ID of updated Subject Condition Set provided

        kidid string

        Required

        kas_urisubject_condition_set_id string

        Optional +Replaces the existing SubjectConditionSet id with a new one

        namespace_mappingsMappedPolicyObjectactionspolicy.Action repeated

        List of namespaces mapped to the key

        Optional +Replaces entire list of actions permitted by subjects

        attribute_mappingsMappedPolicyObjectmetadatacommon.MetadataMutable

        Common metadata

        metadata_update_behaviorcommon.MetadataUpdateEnum

        + + + + + +

        UpdateSubjectMappingResponse

        +

        + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        subject_mappingpolicy.SubjectMapping

        Only ID of the updated Subject Mapping provided

        + + + + + + + +

        SortSubjectConditionSetsType

        +

        + + + + + + + + + + + + + + + + + + + + + + + + + +
        NameNumberDescription
        SORT_SUBJECT_CONDITION_SETS_TYPE_UNSPECIFIED0

        SORT_SUBJECT_CONDITION_SETS_TYPE_CREATED_AT1

        SORT_SUBJECT_CONDITION_SETS_TYPE_UPDATED_AT2

        + +

        SortSubjectMappingsType

        +

        + + + + + + + + + + + + + + + + + + + + + + + + + +
        NameNumberDescription
        SORT_SUBJECT_MAPPINGS_TYPE_UNSPECIFIED0

        SORT_SUBJECT_MAPPINGS_TYPE_CREATED_AT1

        SORT_SUBJECT_MAPPINGS_TYPE_UPDATED_AT2

        + + + + + +

        SubjectMappingService

        +

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Method NameRequest TypeResponse TypeDescription
        MatchSubjectMappingsMatchSubjectMappingsRequestMatchSubjectMappingsResponse

        Find matching Subject Mappings for a given Subject

        ListSubjectMappingsListSubjectMappingsRequestListSubjectMappingsResponse

        GetSubjectMappingGetSubjectMappingRequestGetSubjectMappingResponse

        CreateSubjectMappingCreateSubjectMappingRequestCreateSubjectMappingResponse

        UpdateSubjectMappingUpdateSubjectMappingRequestUpdateSubjectMappingResponse

        DeleteSubjectMappingDeleteSubjectMappingRequestDeleteSubjectMappingResponse

        ListSubjectConditionSetsListSubjectConditionSetsRequestListSubjectConditionSetsResponse

        GetSubjectConditionSetGetSubjectConditionSetRequestGetSubjectConditionSetResponse

        CreateSubjectConditionSetCreateSubjectConditionSetRequestCreateSubjectConditionSetResponse

        UpdateSubjectConditionSetUpdateSubjectConditionSetRequestUpdateSubjectConditionSetResponse

        DeleteSubjectConditionSetDeleteSubjectConditionSetRequestDeleteSubjectConditionSetResponse

        DeleteAllUnmappedSubjectConditionSetsDeleteAllUnmappedSubjectConditionSetsRequestDeleteAllUnmappedSubjectConditionSetsResponse

        + + + + +

        Methods with idempotency_level option

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Method NameOption
        ListSubjectMappings

        NO_SIDE_EFFECTS

        GetSubjectMapping

        NO_SIDE_EFFECTS

        ListSubjectConditionSets

        NO_SIDE_EFFECTS

        GetSubjectConditionSet

        NO_SIDE_EFFECTS

        + + + + +
        +

        policy/dynamicvaluemapping/dynamic_value_mapping.proto

        Top +
        +

        + + +

        CreateDynamicValueMappingRequest

        +

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        attribute_definition_idstring

        attribute_definition_fqnstring

        value_resolverpolicy.DynamicValueResolver

        Required: the dynamic resolver comparing entity selector result to the resource value segment

        actionspolicy.Actionrepeated

        Required: actions permitted on a matched value

        existing_subject_condition_set_idstring

        Optional static pre-gate. Reuse an existing SubjectConditionSet (prioritized) ...

        new_subject_condition_setpolicy.subjectmapping.SubjectConditionSetCreate

        ... or create a new one (ignored if existing_subject_condition_set_id is provided)

        namespace_idstring

        Optional: namespace ID or FQN for the mapping

        namespace_fqnstring

        metadatacommon.MetadataMutable

        Optional

        + + + + + +

        CreateDynamicValueMappingResponse

        +

        + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        dynamic_value_mappingpolicy.DynamicValueMapping

        + + + + + +

        DeleteDynamicValueMappingRequest

        +

        + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        idstring

        Required

        + + + + + +

        DeleteDynamicValueMappingResponse

        +

        + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        dynamic_value_mappingpolicy.DynamicValueMapping

        Only ID of the deleted mapping provided

        + + + + + +

        DynamicValueMappingsSort

        +

        + + + + + + + + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        fieldSortDynamicValueMappingsType

        directionpolicy.SortDirection

        + + + + + +

        GetDynamicValueMappingRequest

        +

        + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        idstring

        Required

        + + + + + +

        GetDynamicValueMappingResponse

        +

        + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        dynamic_value_mappingpolicy.DynamicValueMapping

        + + + + + +

        ListDynamicValueMappingsRequest

        +

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + +
        FieldTypeLabelDescription
        namespace_idstring

        Optional +Namespace ID, or Attribute Definition ID to filter by

        attribute_definition_idstring

        paginationpolicy.PageRequest

        Optional

        sortDynamicValueMappingsSort repeated

        List of attribute definitions mapped to the key

        Optional - CONSTRAINT: max 1 item

        + + + + + +

        ListDynamicValueMappingsResponse

        +

        + + + + + + + + - - + + - + + + + + + + + + + + +
        FieldTypeLabelDescription
        value_mappingsMappedPolicyObjectdynamic_value_mappingspolicy.DynamicValueMapping repeated

        List of attribute values mapped to the key

        paginationpolicy.PageResponse

        + + + + + +

        UpdateDynamicValueMappingRequest

        +

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        idstring

        Required

        value_resolverpolicy.DynamicValueResolver

        Optional: replace the dynamic resolver

        subject_condition_set_idstring

        Optional: replace the static pre-gate SubjectConditionSet by id

        actionspolicy.Actionrepeated

        Optional: replace the entire list of actions

        metadatacommon.MetadataMutable

        Common metadata

        metadata_update_behaviorcommon.MetadataUpdateEnum

        + + + + + +

        UpdateDynamicValueMappingResponse

        +

        + + + + + + + + + + + + + @@ -10486,10 +11229,126 @@

        KeyMapping

        - + + + + +

        SortDynamicValueMappingsType

        +

        +
        FieldTypeLabelDescription
        dynamic_value_mappingpolicy.DynamicValueMapping

        + + + + + + + + + + + + + + + + + + + + + + + + +
        NameNumberDescription
        SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_UNSPECIFIED0

        SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_CREATED_AT1

        SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_UPDATED_AT2

        + + + + + +

        DynamicValueMappingService

        +

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Method NameRequest TypeResponse TypeDescription
        ListDynamicValueMappingsListDynamicValueMappingsRequestListDynamicValueMappingsResponse

        GetDynamicValueMappingGetDynamicValueMappingRequestGetDynamicValueMappingResponse

        CreateDynamicValueMappingCreateDynamicValueMappingRequestCreateDynamicValueMappingResponse

        UpdateDynamicValueMappingUpdateDynamicValueMappingRequestUpdateDynamicValueMappingResponse

        DeleteDynamicValueMappingDeleteDynamicValueMappingRequestDeleteDynamicValueMappingResponse

        + + + + +

        Methods with idempotency_level option

        + + + + + + + + + + + + + + + + + + + + +
        Method NameOption
        ListDynamicValueMappings

        NO_SIDE_EFFECTS

        GetDynamicValueMapping

        NO_SIDE_EFFECTS

        + + + + +
        +

        policy/kasregistry/key_access_server_registry.proto

        Top +
        +

        + -

        ListKeyAccessServerGrantsRequest

        -

        LIST of KAS Grants returns flat response of grants to all policy objects. It

        does not employ selectors for grants to specific policy objects or build the

        attribute tree relation. If grants to a known namespace, attribute, or value

        are needed, use the respective GET request to the specific policy object.

        +

        ActivatePublicKeyRequest

        +

        @@ -10499,40 +11358,10 @@

        ListKeyAccessServer

        - - - - - - - - - - - - - - - + - - - - - - - - + @@ -10542,8 +11371,8 @@

        ListKeyAccessServer -

        ListKeyAccessServerGrantsResponse

        -

        Deprecated

        +

        ActivatePublicKeyResponse

        +

        kas_idstring

        Optional -Filter LIST by ID of a registered Key Access Server. -If neither is provided, grants from all registered KASs to policy attribute -objects are returned.

        kas_uristring

        Optional -Filter LIST by URI of a registered Key Access Server. -If none is provided, grants from all registered KASs to policy attribute -objects are returned.

        kas_nameid string

        Optional -Filter LIST by name of a registered Key Access Server. -If none are provided, grants from all registered KASs to policy attribute -objects are returned.

        paginationpolicy.PageRequest

        Optional

        @@ -10553,15 +11382,8 @@

        ListKeyAccessServe

        - - - - - - - - - + + @@ -10570,32 +11392,11 @@

        ListKeyAccessServe

        grantsKeyAccessServerGrantsrepeated

        Deprecated.

        paginationpolicy.PageResponsekeypolicy.Key

        - - -

        Fields with deprecated option

        - - - - - - - - - - - - - - - -
        NameOption
        grants

        true

        - - -

        ListKeyAccessServersRequest

        -

        +

        ChangeMappings

        +

        Simplified information about the resources that were rotated as part of the key rotation process.

        @@ -10605,28 +11406,17 @@

        ListKeyAccessServersRequ

        - - + + - - - - - - - - + - - + + - + @@ -10636,7 +11426,7 @@

        ListKeyAccessServersRequ -

        ListKeyAccessServersResponse

        +

        CreateKeyAccessServerRequest

        @@ -10647,55 +11437,38 @@

        ListKeyAccessServersRes

        - - - - + + + + - - + + - + - -
        paginationpolicy.PageRequestidstring

        Optional

        sortKeyAccessServersSortrepeated

        Optional - CONSTRAINT: max 1 item -Sort defaults: - - direction UNSPECIFIED defaults to DESC for the specified field - - field UNSPECIFIED defaults to created_at with the specified direction - - both UNSPECIFIED or sort omitted defaults to created_at DESC

        searchpolicy.Searchfqnstring

        Optional

        key_access_serverspolicy.KeyAccessServerrepeated

        uristring

        Required

        paginationpolicy.PageResponsepublic_keypolicy.PublicKey

        Deprecated

        - - - - - -

        ListKeyMappingsRequest

        -

        - - - - - - - - - - + + - + - - + + - + - - + + - + @@ -10705,7 +11478,7 @@

        ListKeyMappingsRequest

        -

        ListKeyMappingsResponse

        +

        CreateKeyAccessServerResponse

        @@ -10716,17 +11489,10 @@

        ListKeyMappingsResponse

        - - - - - - - - - + + - + @@ -10736,8 +11502,8 @@

        ListKeyMappingsResponse

        -

        ListKeysRequest

        -

        List all asymmetric keys managed by a specific Key Access Server or with a given algorithm

        +

        CreateKeyRequest

        +

        Create a new asymmetric key for the specified Key Access Server (KAS)

        FieldTypeLabelDescription
        idstringsource_typepolicy.SourceType

        The unique identifier of the key to retrieve

        Optional

        keyKasKeyIdentifiernamestring

        Optional

        paginationpolicy.PageRequestmetadatacommon.MetadataMutable

        Pagination request for the list of keys

        Common metadata

        key_mappingsKeyMappingrepeated

        The list of key mappings

        paginationpolicy.PageResponsekey_access_serverpolicy.KeyAccessServer

        Pagination response for the list of keys

        @@ -10747,67 +11513,84 @@

        ListKeysRequest

        - - + + - + - + - + - - + + - + - - + + - + - - - - + + + +Context or additional data specific to the public key, based on the key provider implementation

        - - + + + + + + + + + +Configuration ID for the key provider, if applicable

        - - - - + + + + - - + + - + @@ -10817,8 +11600,8 @@

        ListKeysRequest

        -

        ListKeysResponse

        -

        Response to a ListKeysRequest, containing the list of asymmetric keys and pagination information

        +

        CreateKeyResponse

        +

        Response to a CreateKeyRequest, containing the created asymmetric key

        key_algorithmpolicy.Algorithmkas_idstring

        Filter keys by algorithm

        Required + +The unique identifier of the Key Access Server

        kas_idkey_id string

        Filter keys by the KAS ID

        Required + +A user-defined identifier for the key

        kas_namestringkey_algorithmpolicy.Algorithm

        Filter keys by the KAS name

        Required + +The algorithm to be used for the key

        kas_uristringkey_modepolicy.KeyMode

        Filter keys by the KAS URI

        Required + +The mode of the key (e.g., local or external)

        legacybooloptional

        Optional +

        public_key_ctxpolicy.PublicKeyCtx

        Required -Filter for legacy keys

        paginationpolicy.PageRequestprivate_key_ctxpolicy.PrivateKeyCtx

        Conditionally Required + +Context or additional data specific to the private key, based on the key provider implementation

        provider_config_idstring

        Optional -Pagination request for the list of keys

        sortKasKeysSortrepeated

        Optional - CONSTRAINT: max 1 item -Sort defaults: - - direction UNSPECIFIED defaults to DESC for the specified field - - field UNSPECIFIED defaults to created_at with the specified direction - - both UNSPECIFIED or sort omitted defaults to created_at DESC

        legacybool

        Optional + +Whether the key is a legacy key

        searchpolicy.Searchmetadatacommon.MetadataMutable

        Optional

        Common metadata + +Mutable metadata for the key

        @@ -10828,17 +11611,10 @@

        ListKeysResponse

        - + - - - - - - - - + @@ -10848,7 +11624,7 @@

        ListKeysResponse

        -

        ListPublicKeyMappingRequest

        +

        CreatePublicKeyRequest

        @@ -10862,35 +11638,21 @@

        ListPublicKeyMappingRequ

        - - - - - - - - - - - - - - - + - - + + - + - - + + - + @@ -10900,7 +11662,7 @@

        ListPublicKeyMappingRequ -

        ListPublicKeyMappingResponse

        +

        CreatePublicKeyResponse

        @@ -10911,15 +11673,8 @@

        ListPublicKeyMappingRes

        - - - - - - - - - + + @@ -10931,7 +11686,7 @@

        ListPublicKeyMappingRes -

        ListPublicKeyMappingResponse.Association

        +

        DeactivatePublicKeyRequest

        @@ -10948,13 +11703,6 @@

        ListPublicK

        - - - - - - -
        kas_keyskas_key policy.KasKeyrepeated

        The list of kas keys

        paginationpolicy.PageResponse

        Pagination response for the list of keys

        The created asymmetric key for a KAS.

        kas_id string

        Optional

        kas_namestring

        Optional

        kas_uristring

        Optional

        Required

        public_key_idstringkeypolicy.KasPublicKey

        Optional Public Key ID

        Required

        paginationpolicy.PageRequestmetadatacommon.MetadataMutable

        Optional

        Common metadata

        public_key_mappingsListPublicKeyMappingResponse.PublicKeyMappingrepeated

        paginationpolicy.PageResponsekeypolicy.Key

        fqnstring

        @@ -10962,7 +11710,7 @@

        ListPublicK -

        ListPublicKeyMappingResponse.PublicKey

        +

        DeactivatePublicKeyResponse

        @@ -10979,27 +11727,6 @@

        ListPublicKey

        - - values - ListPublicKeyMappingResponse.Association - repeated -

        - - - - definitions - ListPublicKeyMappingResponse.Association - repeated -

        - - - - namespaces - ListPublicKeyMappingResponse.Association - repeated -

        - - @@ -11007,7 +11734,7 @@

        ListPublicKey -

        ListPublicKeyMappingResponse.PublicKeyMapping

        +

        DeleteKeyAccessServerRequest

        @@ -11018,31 +11745,10 @@

        ListPu - kas_id - string - -

        - - - - kas_name - string - -

        - - - - kas_uri + id string -

        - - - - public_keys - ListPublicKeyMappingResponse.PublicKey - repeated -

        +

        Required

        @@ -11052,7 +11758,7 @@

        ListPu -

        ListPublicKeysRequest

        +

        DeleteKeyAccessServerResponse

        @@ -11063,31 +11769,10 @@

        ListPublicKeysRequest

        - kas_id - string - -

        Optional

        - - - - kas_name - string - -

        Optional

        - - - - kas_uri - string - -

        Optional

        - - - - pagination - policy.PageRequest + key_access_server + policy.KeyAccessServer -

        Optional

        +

        @@ -11097,38 +11782,14 @@

        ListPublicKeysRequest

        -

        ListPublicKeysResponse

        +

        GetBaseKeyRequest

        - - - - - - - - - - - - - - - - - - - - - -
        FieldTypeLabelDescription
        keyspolicy.Keyrepeated

        paginationpolicy.PageResponse

        - - -

        MappedPolicyObject

        +

        GetBaseKeyResponse

        @@ -11139,17 +11800,10 @@

        MappedPolicyObject

        - id - string - -

        The unique identifier of the policy object

        - - - - fqn - string + base_key + policy.SimpleKasKey -

        The fully qualified name of the policy object

        +

        The current base key

        @@ -11159,7 +11813,7 @@

        MappedPolicyObject

        -

        RotateKeyRequest

        +

        GetKeyAccessServerRequest

        @@ -11173,89 +11827,104 @@

        RotateKeyRequest

        id string -

        Current Active Key UUID

        +

        Deprecated. Deprecated

        - key - KasKeyIdentifier + kas_id + string -

        Alternative way to specify the active key using KAS ID and Key ID

        +

        option (buf.validate.oneof).required = true; // TODO: enable this when we remove the deprecated field

        - new_key - RotateKeyRequest.NewKey + name + string -

        Information about the new key to be rotated in

        +

        + + + + uri + string + +

        + + +

        Fields with deprecated option

        + + + + + + + + + + + + + + + +
        NameOption
        id

        true

        + + -

        RotateKeyRequest.NewKey

        -

        Nested message for specifying the new key details

        +

        GetKeyAccessServerResponse

        +

        - - - - - - - - - - - - - - - - - - - - - - - + + - - + + - + - - - - - - + +
        FieldTypeLabelDescription
        key_idstring

        Required

        algorithmpolicy.Algorithm

        Required

        key_modepolicy.KeyMode

        Required

        public_key_ctxpolicy.PublicKeyCtxkey_access_serverpolicy.KeyAccessServer

        Required

        private_key_ctxpolicy.PrivateKeyCtx

        Required

        + + + + + +

        GetKeyRequest

        +

        Retrieve an existing asymmetric key from the Key Management System

        + + + + + + + - + - + - - + + - + @@ -11265,8 +11934,8 @@

        RotateKeyRequest.NewKey

        -

        RotateKeyResponse

        -

        Response message for the RotateKey request

        +

        GetKeyResponse

        +

        Response to a GetKeyRequest, containing the requested asymmetric key

        FieldTypeLabelDescription
        provider_config_idid string

        Conditionally Required. - -Validation handled by message-level CEL

        The unique identifier of the key to retrieve

        metadatacommon.MetadataMutablekeyKasKeyIdentifier

        Common metadata fields

        @@ -11279,14 +11948,7 @@

        RotateKeyResponse

        - - - - - - - - + @@ -11296,8 +11958,8 @@

        RotateKeyResponse

        -

        RotatedResources

        -

        All resources that were rotated as part of the key rotation process

        +

        GetPublicKeyRequest

        +

        kas_key policy.KasKey

        The newly rotated Kas Key

        rotated_resourcesRotatedResources

        All resources that were rotated as part of the key rotation process

        The requested asymmetric key for a KAS.

        @@ -11307,30 +11969,33 @@

        RotatedResources

        - - + + - - - - - - - - - - - - - + +
        rotated_out_keypolicy.KasKeyidstring

        The old key that was rotated out

        attribute_definition_mappingsChangeMappingsrepeated

        attribute_value_mappingsChangeMappingsrepeated

        + + + + + +

        GetPublicKeyResponse

        +

        + + + + + + + - - - + + + @@ -11341,8 +12006,8 @@

        RotatedResources

        -

        SetBaseKeyRequest

        -

        Sets the specified key as the base key for the Key Access Server

        Note: The key must be active.

        +

        GrantedPolicyObject

        +

        Can be namespace, attribute definition, or value

        FieldTypeLabelDescription
        namespace_mappingsChangeMappingsrepeatedkeypolicy.Key

        @@ -11355,14 +12020,14 @@

        SetBaseKeyRequest

        - + - - + + - + @@ -11372,8 +12037,8 @@

        SetBaseKeyRequest

        -

        SetBaseKeyResponse

        -

        +

        KasKeyIdentifier

        +

        Nested message for specifying the active key using KAS ID and Key ID

        id string

        Current Key UUID tp be set as default

        keyKasKeyIdentifierfqnstring

        Alternative way to specify the key using KAS ID and Key ID

        @@ -11383,17 +12048,31 @@

        SetBaseKeyResponse

        - - + + - + - - + + - + + + + + + + + + + + + + + + @@ -11403,7 +12082,7 @@

        SetBaseKeyResponse

        -

        UpdateKeyAccessServerRequest

        +

        KasKeysSort

        @@ -11414,57 +12093,61 @@

        UpdateKeyAccessServerRe

        - - + + - + - - + + - + - - - - - - + +
        new_base_keypolicy.SimpleKasKeykas_idstring

        The key that was set as base

        previous_base_keypolicy.SimpleKasKeynamestring

        The previous base key, if any

        uristring

        kidstring

        Required Key ID of the key in question

        idstringfieldSortKasKeysType

        Required

        uristringdirectionpolicy.SortDirection

        Optional

        public_keypolicy.PublicKey

        Deprecated -Optional

        + + + + + +

        KeyAccessServerGrants

        +

        Deprecated

        + + + + + + + - - + + - + - - - - + + + + - - - - + + + + - - - + + + @@ -11475,7 +12158,7 @@

        UpdateKeyAccessServerRe -

        UpdateKeyAccessServerResponse

        +

        KeyAccessServersSort

        @@ -11486,8 +12169,15 @@

        UpdateKeyAccessServerR

        - - + + + + + + + + + @@ -11499,8 +12189,8 @@

        UpdateKeyAccessServerR -

        UpdateKeyRequest

        -

        Update an existing asymmetric key in the Key Management System

        +

        KeyMapping

        +

        FieldTypeLabelDescription
        source_typepolicy.SourceTypekey_access_serverpolicy.KeyAccessServer

        Optional -Using UNSPECIFIED will result in a successful update, -but will not actually update the underlying source. -You should not update KAS's from INTERNAL/EXTERNAL -to unspecified.

        namestring

        Optional

        namespace_grantsGrantedPolicyObjectrepeated

        metadatacommon.MetadataMutable

        Optional -Common metadata

        attribute_grantsGrantedPolicyObjectrepeated

        metadata_update_behaviorcommon.MetadataUpdateEnumvalue_grantsGrantedPolicyObjectrepeated

        key_access_serverpolicy.KeyAccessServerfieldSortKeyAccessServersType

        directionpolicy.SortDirection

        @@ -11510,29 +12200,38 @@

        UpdateKeyRequest

        - + - + - - + + - + + + + + + + + + + + + + + + - - - - + + + + @@ -11542,8 +12241,8 @@

        UpdateKeyRequest

        -

        UpdateKeyResponse

        -

        Response to an UpdateKeyRequest, containing the updated asymmetric key

        +

        ListKeyAccessServerGrantsRequest

        +

        LIST of KAS Grants returns flat response of grants to all policy objects. It

        does not employ selectors for grants to specific policy objects or build the

        attribute tree relation. If grants to a known namespace, attribute, or value

        are needed, use the respective GET request to the specific policy object.

        idkid string

        Required - -The unique identifier of the key to update

        metadatacommon.MetadataMutablekas_uristring

        Optional -Common metadata - -Mutable metadata for the key

        namespace_mappingsMappedPolicyObjectrepeated

        List of namespaces mapped to the key

        attribute_mappingsMappedPolicyObjectrepeated

        List of attribute definitions mapped to the key

        metadata_update_behaviorcommon.MetadataUpdateEnum

        The behavior for updating the metadata

        value_mappingsMappedPolicyObjectrepeated

        List of attribute values mapped to the key

        @@ -11553,49 +12252,40 @@

        UpdateKeyResponse

        - - + + - + - -
        kas_keypolicy.KasKeykas_idstring

        The updated kas key

        Optional +Filter LIST by ID of a registered Key Access Server. +If neither is provided, grants from all registered KASs to policy attribute +objects are returned.

        - - - - - -

        UpdatePublicKeyRequest

        -

        - - - - - - - - - + - + - - + + +Filter LIST by name of a registered Key Access Server. +If none are provided, grants from all registered KASs to policy attribute +objects are returned.

        - - + + - + @@ -11605,8 +12295,8 @@

        UpdatePublicKeyRequest

        -

        UpdatePublicKeyResponse

        -

        +

        ListKeyAccessServerGrantsResponse

        +

        Deprecated

        FieldTypeLabelDescription
        idkas_uri string

        Required

        Optional +Filter LIST by URI of a registered Key Access Server. +If none is provided, grants from all registered KASs to policy attribute +objects are returned.

        metadatacommon.MetadataMutablekas_namestring

        Optional -Common metadata

        metadata_update_behaviorcommon.MetadataUpdateEnumpaginationpolicy.PageRequest

        Optional

        @@ -11616,274 +12306,122 @@

        UpdatePublicKeyResponse

        - - - - + + + + - -
        keypolicy.Key

        grantsKeyAccessServerGrantsrepeated

        Deprecated.

        - - - - - - - -

        SortKasKeysType

        -

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        NameNumberDescription
        SORT_KAS_KEYS_TYPE_UNSPECIFIED0

        SORT_KAS_KEYS_TYPE_KEY_ID1

        SORT_KAS_KEYS_TYPE_CREATED_AT2

        SORT_KAS_KEYS_TYPE_UPDATED_AT3

        - -

        SortKeyAccessServersType

        -

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        NameNumberDescription
        SORT_KEY_ACCESS_SERVERS_TYPE_UNSPECIFIED0

        SORT_KEY_ACCESS_SERVERS_TYPE_NAME1

        SORT_KEY_ACCESS_SERVERS_TYPE_URI2

        SORT_KEY_ACCESS_SERVERS_TYPE_CREATED_AT3

        SORT_KEY_ACCESS_SERVERS_TYPE_UPDATED_AT4

        - - - - - -

        KeyAccessServerRegistryService

        -

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + +
        Method NameRequest TypeResponse TypeDescription
        ListKeyAccessServersListKeyAccessServersRequestListKeyAccessServersResponse

        GetKeyAccessServerGetKeyAccessServerRequestGetKeyAccessServerResponse

        CreateKeyAccessServerCreateKeyAccessServerRequestCreateKeyAccessServerResponse

        UpdateKeyAccessServerUpdateKeyAccessServerRequestUpdateKeyAccessServerResponse

        DeleteKeyAccessServerDeleteKeyAccessServerRequestDeleteKeyAccessServerResponse

        ListKeyAccessServerGrantsListKeyAccessServerGrantsRequestListKeyAccessServerGrantsResponse

        Deprecated

        CreateKeyCreateKeyRequestCreateKeyResponse

        KAS Key Management -Request to create a new key in the Key Access Service.

        GetKeyGetKeyRequestGetKeyResponse

        Request to retrieve a key from the Key Access Service.

        ListKeysListKeysRequestListKeysResponse

        Request to list keys in the Key Access Service.

        UpdateKeyUpdateKeyRequestUpdateKeyResponse

        Request to update a key in the Key Access Service.

        RotateKeyRotateKeyRequestRotateKeyResponse

        Request to rotate a key in the Key Access Service.

        SetBaseKeySetBaseKeyRequestSetBaseKeyResponse

        Request to set the default a default kas key.

        paginationpolicy.PageResponse

        + + - - GetBaseKey - GetBaseKeyRequest - GetBaseKeyResponse -

        Get Default kas keys

        - - - ListKeyMappings - ListKeyMappingsRequest - ListKeyMappingsResponse -

        Request to list key mappings in the Key Access Service.

        - +

        Fields with deprecated option

        + + + + + + + + + + + + + + + +
        NameOption
        grants

        true

        - - + - - -

        Methods with deprecated option

        - + +

        ListKeyAccessServersRequest

        +

        + + +
        - - - - + - - - - - - + + + + + + + + + + + + + + + + + + + + + +
        Method NameOption
        FieldTypeLabelDescription
        ListKeyAccessServerGrants

        true

        paginationpolicy.PageRequest

        Optional

        sortKeyAccessServersSortrepeated

        Optional - CONSTRAINT: max 1 item +Sort defaults: + - direction UNSPECIFIED defaults to DESC for the specified field + - field UNSPECIFIED defaults to created_at with the specified direction + - both UNSPECIFIED or sort omitted defaults to created_at DESC

        searchpolicy.Search

        Optional

        + + - - -

        Methods with idempotency_level option

        - + +

        ListKeyAccessServersResponse

        +

        + + +
        - - - - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + +
        Method NameOption
        FieldTypeLabelDescription
        ListKeyAccessServers

        NO_SIDE_EFFECTS

        GetKeyAccessServer

        NO_SIDE_EFFECTS

        ListKeyAccessServerGrants

        NO_SIDE_EFFECTS

        key_access_serverspolicy.KeyAccessServerrepeated

        paginationpolicy.PageResponse

        + - - - -
        -

        policy/keymanagement/key_management.proto

        Top -
        -

        + -

        CreateProviderConfigRequest

        -

        Provider Configuration Requests and Response Messages

        +

        ListKeyMappingsRequest

        +

        @@ -11893,34 +12431,24 @@

        CreateProviderConfigRe

        - + - - - - - - - - + - - + + - + - - + + - + @@ -11930,7 +12458,7 @@

        CreateProviderConfigRe -

        CreateProviderConfigResponse

        +

        ListKeyMappingsResponse

        @@ -11941,10 +12469,17 @@

        CreateProviderConfigR

        - - + + + + + + + + + - + @@ -11954,8 +12489,8 @@

        CreateProviderConfigR -

        DeleteProviderConfigRequest

        -

        In order to delete a provider configuration you must first delete all keys associated with the provider.

        +

        ListKeysRequest

        +

        List all asymmetric keys managed by a specific Key Access Server or with a given algorithm

        nameid string

        Required -The name of the key provider. (e.g. "AWS KMS Instance 1", "Google Cloud KMS Instance 2")

        config_jsonbytes

        Required -JSON configuration for the key provider. This is unique to individual key providers.

        The unique identifier of the key to retrieve

        managerstringkeyKasKeyIdentifier

        Required -The type of key manager (e.g. "aws", "gcp", "azure", "opentdf.io/basic")

        metadatacommon.MetadataMutablepaginationpolicy.PageRequest

        Common metadata

        Pagination request for the list of keys

        provider_configpolicy.KeyProviderConfigkey_mappingsKeyMappingrepeated

        The list of key mappings

        paginationpolicy.PageResponse

        Pagination response for the list of keys

        @@ -11965,10 +12500,67 @@

        DeleteProviderConfigRe

        - + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11978,8 +12570,8 @@

        DeleteProviderConfigRe -

        DeleteProviderConfigResponse

        -

        +

        ListKeysResponse

        +

        Response to a ListKeysRequest, containing the list of asymmetric keys and pagination information

        idkey_algorithmpolicy.Algorithm

        Filter keys by algorithm

        kas_id string

        Required

        Filter keys by the KAS ID

        kas_namestring

        Filter keys by the KAS name

        kas_uristring

        Filter keys by the KAS URI

        legacybooloptional

        Optional + +Filter for legacy keys

        paginationpolicy.PageRequest

        Optional + +Pagination request for the list of keys

        sortKasKeysSortrepeated

        Optional - CONSTRAINT: max 1 item +Sort defaults: + - direction UNSPECIFIED defaults to DESC for the specified field + - field UNSPECIFIED defaults to created_at with the specified direction + - both UNSPECIFIED or sort omitted defaults to created_at DESC

        searchpolicy.Search

        Optional

        @@ -11989,10 +12581,17 @@

        DeleteProviderConfigR

        - - + + + + + + + + + - + @@ -12002,7 +12601,7 @@

        DeleteProviderConfigR -

        GetProviderConfigRequest

        +

        ListPublicKeyMappingRequest

        @@ -12013,67 +12612,33 @@

        GetProviderConfigRequest<

        - + - + - + - + - + - + - -
        provider_configpolicy.KeyProviderConfigkas_keyspolicy.KasKeyrepeated

        The list of kas keys

        paginationpolicy.PageResponse

        Pagination response for the list of keys

        idkas_id string

        Optional

        namekas_name string

        Optional

        managerkas_uri string

        Optional - filter by manager type when searching by name

        Optional

        - - - - - -

        GetProviderConfigResponse

        -

        - - - - - - - - - - + + - + - -
        FieldTypeLabelDescription
        provider_configpolicy.KeyProviderConfigpublic_key_idstring

        Optional Public Key ID

        - - - - - -

        ListProviderConfigsRequest

        -

        - - - - - - - - @@ -12088,7 +12653,7 @@

        ListProviderConfigsRequ -

        ListProviderConfigsResponse

        +

        ListPublicKeyMappingResponse

        @@ -12099,8 +12664,8 @@

        ListProviderConfigsRes

        - - + + @@ -12119,7 +12684,7 @@

        ListProviderConfigsRes -

        UpdateProviderConfigRequest

        +

        ListPublicKeyMappingResponse.Association

        @@ -12133,42 +12698,13 @@

        UpdateProviderConfigRe

        - - - - - - - - - - - - - - - + - + - - - - - - - - - - - - - - @@ -12179,7 +12715,7 @@

        UpdateProviderConfigRe -

        UpdateProviderConfigResponse

        +

        ListPublicKeyMappingResponse.PublicKey

        @@ -12190,12 +12726,33 @@

        UpdateProviderConfigR

        - - + + + + + + + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        pagination policy.PageRequest
        provider_configspolicy.KeyProviderConfigpublic_key_mappingsListPublicKeyMappingResponse.PublicKeyMapping repeated

        id string

        Required

        namestring

        Optional

        config_jsonbytes

        Optional

        managerfqn string

        Optional

        metadatacommon.MetadataMutable

        Optional -Common metadata

        metadata_update_behaviorcommon.MetadataUpdateEnum

        provider_configpolicy.KeyProviderConfigkeypolicy.Key

        valuesListPublicKeyMappingResponse.Associationrepeated

        definitionsListPublicKeyMappingResponse.Associationrepeated

        namespacesListPublicKeyMappingResponse.Associationrepeated

        @@ -12203,70 +12760,8 @@

        UpdateProviderConfigR - - - - - - -

        KeyManagementService

        +

        ListPublicKeyMappingResponse.PublicKeyMapping

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Method NameRequest TypeResponse TypeDescription
        CreateProviderConfigCreateProviderConfigRequestCreateProviderConfigResponse

        Key Management -Provider Management

        GetProviderConfigGetProviderConfigRequestGetProviderConfigResponse

        ListProviderConfigsListProviderConfigsRequestListProviderConfigsResponse

        UpdateProviderConfigUpdateProviderConfigRequestUpdateProviderConfigResponse

        DeleteProviderConfigDeleteProviderConfigRequestDeleteProviderConfigResponse

        - - - - -
        -

        policy/namespaces/namespaces.proto

        Top -
        -

        - - -

        AssignKeyAccessServerToNamespaceRequest

        -

        Deprecated: utilize AssignPublicKeyToNamespaceRequest

        @@ -12276,36 +12771,33 @@

        AssignKeyAcce

        - - + + - -
        namespace_key_access_serverNamespaceKeyAccessServerkas_idstring

        - - - - - -

        AssignKeyAccessServerToNamespaceResponse

        -

        - - - - - - - + + + + + + - - + + + + + + + + +
        FieldTypeLabelDescription
        kas_namestring

        namespace_key_access_serverNamespaceKeyAccessServerkas_uristring

        public_keysListPublicKeyMappingResponse.PublicKeyrepeated

        @@ -12313,8 +12805,8 @@

        AssignKeyAcc -

        AssignPublicKeyToNamespaceRequest

        -

        Assign Key to Namespace

        +

        ListPublicKeysRequest

        +

        @@ -12324,10 +12816,31 @@

        AssignPublicKeyToNa

        - - + + + + + + + + + + + + + + + + + + + + + + + - + @@ -12337,7 +12850,7 @@

        AssignPublicKeyToNa -

        AssignPublicKeyToNamespaceResponse

        +

        ListPublicKeysResponse

        @@ -12348,8 +12861,15 @@

        AssignPublicKeyToN

        - - + + + + + + + + + @@ -12361,7 +12881,7 @@

        AssignPublicKeyToN -

        CreateNamespaceRequest

        +

        MappedPolicyObject

        @@ -12372,17 +12892,17 @@

        CreateNamespaceRequest

        - + - + - - + + - + @@ -12392,7 +12912,7 @@

        CreateNamespaceRequest

        -

        CreateNamespaceResponse

        +

        RotateKeyRequest

        @@ -12403,10 +12923,24 @@

        CreateNamespaceResponse

        - - + + - + + + + + + + + + + + + + + + @@ -12416,8 +12950,8 @@

        CreateNamespaceResponse

        -

        DeactivateNamespaceRequest

        -

        +

        RotateKeyRequest.NewKey

        +

        Nested message for specifying the new key details

        namespace_keyNamespaceKeykas_idstring

        Optional

        kas_namestring

        Optional

        kas_uristring

        Optional

        paginationpolicy.PageRequest

        Optional

        namespace_keyNamespaceKeykeyspolicy.Keyrepeated

        paginationpolicy.PageResponse

        nameid string

        Required

        The unique identifier of the policy object

        metadatacommon.MetadataMutablefqnstring

        Optional

        The fully qualified name of the policy object

        namespacepolicy.Namespaceidstring

        Current Active Key UUID

        keyKasKeyIdentifier

        Alternative way to specify the active key using KAS ID and Key ID

        new_keyRotateKeyRequest.NewKey

        Information about the new key to be rotated in

        @@ -12427,87 +12961,65 @@

        DeactivateNamespaceRequest

        - + - -
        idkey_id string

        Required

        - - - - - -

        DeactivateNamespaceResponse

        -

        - - - - - -

        GetNamespaceRequest

        -

        - - - - - - - + + + + + + - - + + - + - - + + - + - - + + - + - -
        FieldTypeLabelDescription
        algorithmpolicy.Algorithm

        Required

        idstringkey_modepolicy.KeyMode

        Deprecated. Deprecated

        Required

        namespace_idstringpublic_key_ctxpolicy.PublicKeyCtx

        option (buf.validate.oneof).required = true; // TODO: enable this when we remove the deprecated field

        Required

        fqnstringprivate_key_ctxpolicy.PrivateKeyCtx

        Required

        - - - - -

        Fields with deprecated option

        - - - - + + + + - - - - + + + + - -
        NameOptionprovider_config_idstring

        Conditionally Required. + +Validation handled by message-level CEL

        id

        true

        metadatacommon.MetadataMutable

        Common metadata fields

        - + + + -

        GetNamespaceResponse

        -

        +

        RotateKeyResponse

        +

        Response message for the RotateKey request

        @@ -12517,10 +13029,17 @@

        GetNamespaceResponse

        - - + + - + + + + + + + + @@ -12530,8 +13049,8 @@

        GetNamespaceResponse

        -

        ListNamespacesRequest

        -

        +

        RotatedResources

        +

        All resources that were rotated as part of the key rotation process

        namespacepolicy.Namespacekas_keypolicy.KasKey

        The newly rotated Kas Key

        rotated_resourcesRotatedResources

        All resources that were rotated as part of the key rotation process

        @@ -12541,36 +13060,31 @@

        ListNamespacesRequest

        - - + + - + - - - - + + + + - - + + - + - - - - + + + + @@ -12580,8 +13094,8 @@

        ListNamespacesRequest

        -

        ListNamespacesResponse

        -

        +

        SetBaseKeyRequest

        +

        Sets the specified key as the base key for the Key Access Server

        Note: The key must be active.

        statecommon.ActiveStateEnumrotated_out_keypolicy.KasKey

        Optional -ACTIVE by default when not specified

        The old key that was rotated out

        paginationpolicy.PageRequest

        Optional

        attribute_definition_mappingsChangeMappingsrepeated

        sortNamespacesSortattribute_value_mappingsChangeMappings repeated

        Optional - CONSTRAINT: max 1 item -Sort defaults: - - direction UNSPECIFIED defaults to DESC for the specified field - - field UNSPECIFIED defaults to created_at with the specified direction - - both UNSPECIFIED or sort omitted defaults to created_at DESC

        searchpolicy.Search

        Optional

        namespace_mappingsChangeMappingsrepeated

        @@ -12591,17 +13105,17 @@

        ListNamespacesResponse

        - - - - + + + + - - + + - + @@ -12611,7 +13125,7 @@

        ListNamespacesResponse

        -

        NamespaceKey

        +

        SetBaseKeyResponse

        @@ -12622,17 +13136,17 @@

        NamespaceKey

        - - + + - + - - + + - + @@ -12642,8 +13156,8 @@

        NamespaceKey

        -

        NamespaceKeyAccessServer

        -

        Deprecated

        +

        UpdateKeyAccessServerRequest

        +

        namespacespolicy.Namespacerepeated

        idstring

        Current Key UUID tp be set as default

        paginationpolicy.PageResponsekeyKasKeyIdentifier

        Alternative way to specify the key using KAS ID and Key ID

        namespace_idstringnew_base_keypolicy.SimpleKasKey

        Required

        The key that was set as base

        key_idstringprevious_base_keypolicy.SimpleKasKey

        Required (The id from the Asymmetric Key object)

        The previous base key, if any

        @@ -12653,46 +13167,56 @@

        NamespaceKeyAccessServer

        - + + + + + + + + - + + + + + + + + + + + + + + + - + - + - -
        namespace_ididstring

        Required

        uri string

        Required

        Optional

        public_keypolicy.PublicKey

        Deprecated +Optional

        source_typepolicy.SourceType

        Optional +Using UNSPECIFIED will result in a successful update, +but will not actually update the underlying source. +You should not update KAS's from INTERNAL/EXTERNAL +to unspecified.

        key_access_server_idname string

        Required

        Optional

        - - - - - -

        NamespacesSort

        -

        - - - - - - - - - - + + - + - - + + @@ -12704,8 +13228,8 @@

        NamespacesSort

        -

        RemoveKeyAccessServerFromNamespaceRequest

        -

        Deprecated: utilize RemovePublicKeyFromNamespaceRequest

        +

        UpdateKeyAccessServerResponse

        +

        FieldTypeLabelDescription
        fieldSortNamespacesTypemetadatacommon.MetadataMutable

        Optional +Common metadata

        directionpolicy.SortDirectionmetadata_update_behaviorcommon.MetadataUpdateEnum

        @@ -12715,8 +13239,8 @@

        RemoveKeyAc

        - - + + @@ -12728,8 +13252,8 @@

        RemoveKeyAc -

        RemoveKeyAccessServerFromNamespaceResponse

        -

        +

        UpdateKeyRequest

        +

        Update an existing asymmetric key in the Key Management System

        namespace_key_access_serverNamespaceKeyAccessServerkey_access_serverpolicy.KeyAccessServer

        @@ -12739,34 +13263,29 @@

        RemoveKeyA

        - - + + - + - -
        namespace_key_access_serverNamespaceKeyAccessServeridstring

        Required + +The unique identifier of the key to update

        - - - - - -

        RemovePublicKeyFromNamespaceRequest

        -

        + + metadata + common.MetadataMutable + +

        Optional +Common metadata - - - - - - +Mutable metadata for the key

        + - - + + - + @@ -12776,8 +13295,8 @@

        RemovePublicKeyFr -

        RemovePublicKeyFromNamespaceResponse

        -

        +

        UpdateKeyResponse

        +

        Response to an UpdateKeyRequest, containing the updated asymmetric key

        FieldTypeLabelDescription
        namespace_keyNamespaceKeymetadata_update_behaviorcommon.MetadataUpdateEnum

        The behavior for updating the metadata

        @@ -12787,10 +13306,10 @@

        RemovePublicKeyF

        - - + + - + @@ -12800,7 +13319,7 @@

        RemovePublicKeyF -

        UpdateNamespaceRequest

        +

        UpdatePublicKeyRequest

        @@ -12821,7 +13340,8 @@

        UpdateNamespaceRequest

        - + @@ -12838,7 +13358,7 @@

        UpdateNamespaceRequest

        -

        UpdateNamespaceResponse

        +

        UpdatePublicKeyResponse

        @@ -12849,8 +13369,8 @@

        UpdateNamespaceResponse

        - - + + @@ -12864,7 +13384,7 @@

        UpdateNamespaceResponse

        -

        SortNamespacesType

        +

        SortKasKeysType

        namespace_keyNamespaceKeykas_keypolicy.KasKey

        The updated kas key

        metadata common.MetadataMutable

        Optional

        Optional +Common metadata

        namespacepolicy.Namespacekeypolicy.Key

        @@ -12873,31 +13393,66 @@

        SortNamespacesType

        - + - + - + - + + + + + + +
        SORT_NAMESPACES_TYPE_UNSPECIFIEDSORT_KAS_KEYS_TYPE_UNSPECIFIED 0

        SORT_NAMESPACES_TYPE_NAMESORT_KAS_KEYS_TYPE_KEY_ID 1

        SORT_NAMESPACES_TYPE_FQNSORT_KAS_KEYS_TYPE_CREATED_AT 2

        SORT_NAMESPACES_TYPE_CREATED_ATSORT_KAS_KEYS_TYPE_UPDATED_AT3

        + +

        SortKeyAccessServersType

        +

        + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -12909,7 +13464,7 @@

        SortNamespacesType

        -

        NamespaceService

        +

        KeyAccessServerRegistryService

        NameNumberDescription
        SORT_KEY_ACCESS_SERVERS_TYPE_UNSPECIFIED0

        SORT_KEY_ACCESS_SERVERS_TYPE_NAME1

        SORT_KEY_ACCESS_SERVERS_TYPE_URI2

        SORT_KEY_ACCESS_SERVERS_TYPE_CREATED_AT 3

        SORT_NAMESPACES_TYPE_UPDATED_ATSORT_KEY_ACCESS_SERVERS_TYPE_UPDATED_AT 4

        @@ -12918,68 +13473,102 @@

        NamespaceService

        - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12999,12 +13588,7 @@

        Methods with deprecated option

        - - - - - - + @@ -13025,12 +13609,17 @@

        Methods with idempotency_level option

        - + - + + + + + + @@ -13041,13 +13630,13 @@

        Methods with idempotency_level option

        -

        policy/obligations/obligations.proto

        Top +

        policy/keymanagement/key_management.proto

        Top

        -

        AddObligationTriggerRequest

        -

        Obligation Triggers are owned by the namespace that owns the action and attribute value, which must

        be the same. In this way, a trigger can intentionally cross namespace boundaries: associating

        obligation values of a different namespace than the one that owns the action being taken or the attribute value.

        +

        CreateProviderConfigRequest

        +

        Provider Configuration Requests and Response Messages

        GetNamespaceGetNamespaceRequestGetNamespaceResponseListKeyAccessServersListKeyAccessServersRequestListKeyAccessServersResponse

        ListNamespacesListNamespacesRequestListNamespacesResponseGetKeyAccessServerGetKeyAccessServerRequestGetKeyAccessServerResponse

        CreateNamespaceCreateNamespaceRequestCreateNamespaceResponseCreateKeyAccessServerCreateKeyAccessServerRequestCreateKeyAccessServerResponse

        UpdateNamespaceUpdateNamespaceRequestUpdateNamespaceResponseUpdateKeyAccessServerUpdateKeyAccessServerRequestUpdateKeyAccessServerResponse

        DeactivateNamespaceDeactivateNamespaceRequestDeactivateNamespaceResponseDeleteKeyAccessServerDeleteKeyAccessServerRequestDeleteKeyAccessServerResponse

        AssignKeyAccessServerToNamespaceAssignKeyAccessServerToNamespaceRequestAssignKeyAccessServerToNamespaceResponse

        Deprecated: utilize AssignPublicKeyToNamespace

        ListKeyAccessServerGrantsListKeyAccessServerGrantsRequestListKeyAccessServerGrantsResponse

        Deprecated

        RemoveKeyAccessServerFromNamespaceRemoveKeyAccessServerFromNamespaceRequestRemoveKeyAccessServerFromNamespaceResponse

        Deprecated: utilize RemovePublicKeyFromNamespace

        CreateKeyCreateKeyRequestCreateKeyResponse

        KAS Key Management +Request to create a new key in the Key Access Service.

        AssignPublicKeyToNamespaceAssignPublicKeyToNamespaceRequestAssignPublicKeyToNamespaceResponse

        --------------------------------------* -Namespace <> Key RPCs ----------------------------------------

        GetKeyGetKeyRequestGetKeyResponse

        Request to retrieve a key from the Key Access Service.

        RemovePublicKeyFromNamespaceRemovePublicKeyFromNamespaceRequestRemovePublicKeyFromNamespaceResponse

        ListKeysListKeysRequestListKeysResponse

        Request to list keys in the Key Access Service.

        UpdateKeyUpdateKeyRequestUpdateKeyResponse

        Request to update a key in the Key Access Service.

        RotateKeyRotateKeyRequestRotateKeyResponse

        Request to rotate a key in the Key Access Service.

        SetBaseKeySetBaseKeyRequestSetBaseKeyResponse

        Request to set the default a default kas key.

        GetBaseKeyGetBaseKeyRequestGetBaseKeyResponse

        Get Default kas keys

        ListKeyMappingsListKeyMappingsRequestListKeyMappingsResponse

        Request to list key mappings in the Key Access Service.

        AssignKeyAccessServerToNamespace

        true

        RemoveKeyAccessServerFromNamespaceListKeyAccessServerGrants

        true

        GetNamespaceListKeyAccessServers

        NO_SIDE_EFFECTS

        ListNamespacesGetKeyAccessServer

        NO_SIDE_EFFECTS

        ListKeyAccessServerGrants

        NO_SIDE_EFFECTS

        @@ -13057,40 +13646,34 @@

        AddObligationTriggerRequ

        - - - - - - - - - + + - + - - + + - + - - + + - + - + @@ -13100,7 +13683,7 @@

        AddObligationTriggerRequ -

        AddObligationTriggerResponse

        +

        CreateProviderConfigResponse

        @@ -13111,8 +13694,8 @@

        AddObligationTriggerRes

        - - + + @@ -13124,8 +13707,8 @@

        AddObligationTriggerRes -

        CreateObligationRequest

        -

        +

        DeleteProviderConfigRequest

        +

        In order to delete a provider configuration you must first delete all keys associated with the provider.

        obligation_valuecommon.IdFqnIdentifier

        Required

        actioncommon.IdNameIdentifiernamestring

        Required

        Required +The name of the key provider. (e.g. "AWS KMS Instance 1", "Google Cloud KMS Instance 2")

        attribute_valuecommon.IdFqnIdentifierconfig_jsonbytes

        Required

        Required +JSON configuration for the key provider. This is unique to individual key providers.

        contextpolicy.RequestContextmanagerstring

        Optional -The request context for this obligation value policy decisioning.

        Required +The type of key manager (e.g. "aws", "gcp", "azure", "opentdf.io/basic")

        metadata common.MetadataMutable

        Optional -Common metadata

        Common metadata

        triggerpolicy.ObligationTriggerprovider_configpolicy.KeyProviderConfig

        @@ -13135,39 +13718,10 @@

        CreateObligationRequest

        - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - + @@ -13177,7 +13731,7 @@

        CreateObligationRequest

        -

        CreateObligationResponse

        +

        DeleteProviderConfigResponse

        @@ -13188,8 +13742,8 @@

        CreateObligationResponse

        - - + + @@ -13201,7 +13755,7 @@

        CreateObligationResponseCreateObligationValueRequest

        +

        GetProviderConfigRequest

        @@ -13212,40 +13766,48 @@

        CreateObligationValueRe

        - + - + - + - + - - - - - - + +
        namespace_idstring

        namespace_fqnstring

        namestring

        valuesid stringrepeated

        Optional

        metadatacommon.MetadataMutable

        Optional -Common metadata

        Required

        obligationpolicy.Obligationprovider_configpolicy.KeyProviderConfig

        obligation_idid string

        obligation_fqnname string

        valuemanager string

        Optional - filter by manager type when searching by name

        triggersValueTriggerRequestrepeated

        Optional -Combination of action and attribute_value that will trigger this obligation value policy decisioning.

        + + + + + +

        GetProviderConfigResponse

        +

        + + + + + + + - - + + - + @@ -13255,7 +13817,7 @@

        CreateObligationValueRe -

        CreateObligationValueResponse

        +

        ListProviderConfigsRequest

        @@ -13266,10 +13828,10 @@

        CreateObligationValueR

        - - + + - + @@ -13279,7 +13841,7 @@

        CreateObligationValueR -

        DeleteObligationRequest

        +

        ListProviderConfigsResponse

        @@ -13290,15 +13852,15 @@

        DeleteObligationRequest

        - - - + + + - - + + @@ -13310,7 +13872,7 @@

        DeleteObligationRequest

        -

        DeleteObligationResponse

        +

        UpdateProviderConfigRequest

        @@ -13321,8 +13883,44 @@

        DeleteObligationResponse

        - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13334,7 +13932,7 @@

        DeleteObligationResponseDeleteObligationValueRequest

        +

        UpdateProviderConfigResponse

        @@ -13345,15 +13943,8 @@

        DeleteObligationValueRe

        - - - - - - - - - + + @@ -13365,32 +13956,70 @@

        DeleteObligationValueRe -

        DeleteObligationValueResponse

        -

        - - -
        FieldTypeLabelDescription
        metadatacommon.MetadataMutableprovider_configpolicy.KeyProviderConfig

        Optional -Common metadata

        valuepolicy.ObligationValuepaginationpolicy.PageRequest

        Optional

        idstringprovider_configspolicy.KeyProviderConfigrepeated

        fqnstringpaginationpolicy.PageResponse

        obligationpolicy.Obligationidstring

        Required

        namestring

        Optional

        config_jsonbytes

        Optional

        managerstring

        Optional

        metadatacommon.MetadataMutable

        Optional +Common metadata

        metadata_update_behaviorcommon.MetadataUpdateEnum

        idstring

        fqnstringprovider_configpolicy.KeyProviderConfig

        - - - - - - - - - - - - - -
        FieldTypeLabelDescription
        valuepolicy.ObligationValue

        - - - -

        GetObligationRequest

        -

        + + + + +

        KeyManagementService

        +

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Method NameRequest TypeResponse TypeDescription
        CreateProviderConfigCreateProviderConfigRequestCreateProviderConfigResponse

        Key Management +Provider Management

        GetProviderConfigGetProviderConfigRequestGetProviderConfigResponse

        ListProviderConfigsListProviderConfigsRequestListProviderConfigsResponse

        UpdateProviderConfigUpdateProviderConfigRequestUpdateProviderConfigResponse

        DeleteProviderConfigDeleteProviderConfigRequestDeleteProviderConfigResponse

        + + + + +
        +

        policy/namespaces/namespaces.proto

        Top +
        +

        + + +

        AssignKeyAccessServerToNamespaceRequest

        +

        Deprecated: utilize AssignPublicKeyToNamespaceRequest

        @@ -13400,15 +14029,8 @@

        GetObligationRequest

        - - - - - - - - - + + @@ -13420,7 +14042,7 @@

        GetObligationRequest

        -

        GetObligationResponse

        +

        AssignKeyAccessServerToNamespaceResponse

        @@ -13431,8 +14053,8 @@

        GetObligationResponse

        - - + + @@ -13444,8 +14066,8 @@

        GetObligationResponse

        -

        GetObligationTriggerRequest

        -

        Triggers

        +

        AssignPublicKeyToNamespaceRequest

        +

        Assign Key to Namespace

        idstring

        fqnstringnamespace_key_access_serverNamespaceKeyAccessServer

        obligationpolicy.Obligationnamespace_key_access_serverNamespaceKeyAccessServer

        @@ -13455,10 +14077,10 @@

        GetObligationTriggerRequ

        - - + + - + @@ -13468,7 +14090,7 @@

        GetObligationTriggerRequ -

        GetObligationTriggerResponse

        +

        AssignPublicKeyToNamespaceResponse

        @@ -13479,8 +14101,8 @@

        GetObligationTriggerRes

        - - + + @@ -13492,8 +14114,8 @@

        GetObligationTriggerRes -

        GetObligationValueRequest

        -

        Values

        +

        CreateNamespaceRequest

        +

        idstringnamespace_keyNamespaceKey

        Required

        triggerpolicy.ObligationTriggernamespace_keyNamespaceKey

        @@ -13503,17 +14125,17 @@

        GetObligationValueRequest<

        - + - + - - + + - + @@ -13523,7 +14145,7 @@

        GetObligationValueRequest< -

        GetObligationValueResponse

        +

        CreateNamespaceResponse

        @@ -13534,8 +14156,8 @@

        GetObligationValueRespons

        - - + + @@ -13547,7 +14169,7 @@

        GetObligationValueRespons -

        GetObligationValuesByFQNsRequest

        +

        DeactivateNamespaceRequest

        @@ -13558,10 +14180,10 @@

        GetObligationValues

        - + - - + + @@ -13571,31 +14193,14 @@

        GetObligationValues -

        GetObligationValuesByFQNsResponse

        +

        DeactivateNamespaceResponse

        -
        idname string

        Required

        fqnstringmetadatacommon.MetadataMutable

        Optional

        valuepolicy.ObligationValuenamespacepolicy.Namespace

        fqnsid stringrepeated

        Required

        - - - - - - - - - - - - - -
        FieldTypeLabelDescription
        fqn_value_mapGetObligationValuesByFQNsResponse.FqnValueMapEntryrepeated

        - - -

        GetObligationValuesByFQNsResponse.FqnValueMapEntry

        +

        GetNamespaceRequest

        @@ -13606,40 +14211,23 @@

        G - key + id string -

        +

        Deprecated. Deprecated

        - value - policy.ObligationValue + namespace_id + string -

        +

        option (buf.validate.oneof).required = true; // TODO: enable this when we remove the deprecated field

        - - - - - - - -

        GetObligationsByFQNsRequest

        -

        - - - - - - - - - + - + @@ -13647,34 +14235,31 @@

        GetObligationsByFQNsRequ

        FieldTypeLabelDescription
        fqnsfqn stringrepeated

        - - - -

        GetObligationsByFQNsResponse

        -

        - - - - - - - + + +

        Fields with deprecated option

        +
        FieldTypeLabelDescription
        + + + + + + + - - - - + + - -
        NameOption
        fqn_obligation_mapGetObligationsByFQNsResponse.FqnObligationMapEntryrepeated

        id

        true

        - + + + -

        GetObligationsByFQNsResponse.FqnObligationMapEntry

        +

        GetNamespaceResponse

        @@ -13685,15 +14270,8 @@

        G - key - string - -

        - - - - value - policy.Obligation + namespace + policy.Namespace

        @@ -13705,7 +14283,7 @@

        G -

        ListObligationTriggersRequest

        +

        ListNamespacesRequest

        @@ -13716,22 +14294,34 @@

        ListObligationTriggers - namespace_id - string + state + common.ActiveStateEnum -

        +

        Optional +ACTIVE by default when not specified

        - namespace_fqn - string + pagination + policy.PageRequest -

        +

        Optional

        - pagination - policy.PageRequest + sort + NamespacesSort + repeated +

        Optional - CONSTRAINT: max 1 item +Sort defaults: + - direction UNSPECIFIED defaults to DESC for the specified field + - field UNSPECIFIED defaults to created_at with the specified direction + - both UNSPECIFIED or sort omitted defaults to created_at DESC

        + + + + search + policy.Search

        Optional

        @@ -13743,7 +14333,7 @@

        ListObligationTriggers -

        ListObligationTriggersResponse

        +

        ListNamespacesResponse

        @@ -13754,8 +14344,8 @@

        ListObligationTrigger - triggers - policy.ObligationTrigger + namespaces + policy.Namespace repeated

        @@ -13774,7 +14364,7 @@

        ListObligationTrigger -

        ListObligationsRequest

        +

        NamespaceKey

        @@ -13785,42 +14375,17 @@

        ListObligationsRequest

        - namespace_id - string - -

        - - - - namespace_fqn + namespace_id string -

        - - - - pagination - policy.PageRequest - -

        Optional

        - - - - sort - ObligationsSort - repeated -

        Optional - CONSTRAINT: max 1 item -Sort defaults: - - direction UNSPECIFIED defaults to DESC for the specified field - - field UNSPECIFIED defaults to created_at with the specified direction - - both UNSPECIFIED or sort omitted defaults to created_at DESC

        +

        Required

        - search - policy.Search + key_id + string -

        Optional

        +

        Required (The id from the Asymmetric Key object)

        @@ -13830,8 +14395,8 @@

        ListObligationsRequest

        -

        ListObligationsResponse

        -

        +

        NamespaceKeyAccessServer

        +

        Deprecated

        @@ -13841,17 +14406,17 @@

        ListObligationsResponse

        - - - - + + + + - - + + - + @@ -13861,7 +14426,7 @@

        ListObligationsResponse

        -

        ObligationsSort

        +

        NamespacesSort

        @@ -13873,7 +14438,7 @@

        ObligationsSort

        - + @@ -13892,8 +14457,8 @@

        ObligationsSort

        -

        RemoveObligationTriggerRequest

        -

        +

        RemoveKeyAccessServerFromNamespaceRequest

        +

        Deprecated: utilize RemovePublicKeyFromNamespaceRequest

        obligationspolicy.Obligationrepeated

        namespace_idstring

        Required

        paginationpolicy.PageResponsekey_access_server_idstring

        Required

        fieldSortObligationsTypeSortNamespacesType

        @@ -13903,10 +14468,10 @@

        RemoveObligationTrigg

        - - + + - + @@ -13916,7 +14481,7 @@

        RemoveObligationTrigg -

        RemoveObligationTriggerResponse

        +

        RemoveKeyAccessServerFromNamespaceResponse

        @@ -13927,8 +14492,8 @@

        RemoveObligationTrig

        - - + + @@ -13940,7 +14505,7 @@

        RemoveObligationTrig -

        UpdateObligationRequest

        +

        RemovePublicKeyFromNamespaceRequest

        @@ -13951,29 +14516,8 @@

        UpdateObligationRequest

        - - - - - - - - - - - - - - - - - - - - - - - + + @@ -13985,7 +14529,7 @@

        UpdateObligationRequest

        -

        UpdateObligationResponse

        +

        RemovePublicKeyFromNamespaceResponse

        @@ -13996,8 +14540,8 @@

        UpdateObligationResponse

        - - + + @@ -14009,7 +14553,7 @@

        UpdateObligationResponseUpdateObligationValueRequest

        +

        UpdateNamespaceRequest

        @@ -14026,27 +14570,11 @@

        UpdateObligationValueRe

        - - - - - - - - - - - - - - - + @@ -14063,7 +14591,7 @@

        UpdateObligationValueRe -

        UpdateObligationValueResponse

        +

        UpdateNamespaceResponse

        @@ -14074,8 +14602,8 @@

        UpdateObligationValueR

        - - + + @@ -14087,47 +14615,9 @@

        UpdateObligationValueR -

        ValueTriggerRequest

        -

        - - -
        idstringnamespace_key_access_serverNamespaceKeyAccessServer

        Required

        triggerpolicy.ObligationTriggernamespace_key_access_serverNamespaceKeyAccessServer

        idstring

        Required

        namestring

        Optional

        metadatacommon.MetadataMutable

        metadata_update_behaviorcommon.MetadataUpdateEnumnamespace_keyNamespaceKey

        obligationpolicy.Obligationnamespace_keyNamespaceKey

        Required

        valuestring

        Optional

        triggersValueTriggerRequestrepeated

        Optional -Obligation Triggers provided here will replace all existing records in the database.

        metadata common.MetadataMutable

        Optional -Common metadata

        Optional

        valuepolicy.ObligationValuenamespacepolicy.Namespace

        - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        FieldTypeLabelDescription
        actioncommon.IdNameIdentifier

        Required. The ID of the action that will trigger this obligation value policy decisioning.

        attribute_valuecommon.IdFqnIdentifier

        Required. The attribute value ID that will trigger this obligation value policy decisioning.

        contextpolicy.RequestContext

        Optional. The request context for this obligation value policy decisioning.

        - - - - - -

        SortObligationsType

        +

        SortNamespacesType

        @@ -14136,31 +14626,31 @@

        SortObligationsType

        - + - + - + - + - + @@ -14172,8 +14662,8 @@

        SortObligationsType

        -

        Service

        -

        Obligation Service

        /

        +

        NamespaceService

        +

        SORT_OBLIGATIONS_TYPE_UNSPECIFIEDSORT_NAMESPACES_TYPE_UNSPECIFIED 0

        SORT_OBLIGATIONS_TYPE_NAMESORT_NAMESPACES_TYPE_NAME 1

        SORT_OBLIGATIONS_TYPE_FQNSORT_NAMESPACES_TYPE_FQN 2

        SORT_OBLIGATIONS_TYPE_CREATED_ATSORT_NAMESPACES_TYPE_CREATED_AT 3

        SORT_OBLIGATIONS_TYPE_UPDATED_ATSORT_NAMESPACES_TYPE_UPDATED_AT 4

        @@ -14181,107 +14671,67 @@

        Service

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + @@ -14291,7 +14741,7 @@

        Service

        -

        Methods with idempotency_level option

        +

        Methods with deprecated option

        Method NameRequest TypeResponse TypeDescription
        ListObligationsListObligationsRequestListObligationsResponse

        GetObligationGetObligationRequestGetObligationResponse

        GetObligationsByFQNsGetObligationsByFQNsRequestGetObligationsByFQNsResponse

        CreateObligationCreateObligationRequestCreateObligationResponse

        UpdateObligationUpdateObligationRequestUpdateObligationResponse

        DeleteObligationDeleteObligationRequestDeleteObligationResponse

        GetObligationValueGetObligationValueRequestGetObligationValueResponseGetNamespaceGetNamespaceRequestGetNamespaceResponse

        GetObligationValuesByFQNsGetObligationValuesByFQNsRequestGetObligationValuesByFQNsResponseListNamespacesListNamespacesRequestListNamespacesResponse

        CreateObligationValueCreateObligationValueRequestCreateObligationValueResponseCreateNamespaceCreateNamespaceRequestCreateNamespaceResponse

        UpdateObligationValueUpdateObligationValueRequestUpdateObligationValueResponseUpdateNamespaceUpdateNamespaceRequestUpdateNamespaceResponse

        DeleteObligationValueDeleteObligationValueRequestDeleteObligationValueResponseDeactivateNamespaceDeactivateNamespaceRequestDeactivateNamespaceResponse

        GetObligationTriggerGetObligationTriggerRequestGetObligationTriggerResponse

        AssignKeyAccessServerToNamespaceAssignKeyAccessServerToNamespaceRequestAssignKeyAccessServerToNamespaceResponse

        Deprecated: utilize AssignPublicKeyToNamespace

        AddObligationTriggerAddObligationTriggerRequestAddObligationTriggerResponse

        RemoveKeyAccessServerFromNamespaceRemoveKeyAccessServerFromNamespaceRequestRemoveKeyAccessServerFromNamespaceResponse

        Deprecated: utilize RemovePublicKeyFromNamespace

        RemoveObligationTriggerRemoveObligationTriggerRequestRemoveObligationTriggerResponse

        AssignPublicKeyToNamespaceAssignPublicKeyToNamespaceRequestAssignPublicKeyToNamespaceResponse

        --------------------------------------* +Namespace <> Key RPCs +---------------------------------------

        ListObligationTriggersListObligationTriggersRequestListObligationTriggersResponseRemovePublicKeyFromNamespaceRemovePublicKeyFromNamespaceRequestRemovePublicKeyFromNamespaceResponse

        @@ -14302,37 +14752,38 @@

        Methods with idempotency_level option

        - - - - - - - - - - - - + + - - + + + +
        ListObligations

        NO_SIDE_EFFECTS

        GetObligation

        NO_SIDE_EFFECTS

        GetObligationsByFQNs

        NO_SIDE_EFFECTS

        AssignKeyAccessServerToNamespace

        true

        GetObligationValue

        NO_SIDE_EFFECTS

        RemoveKeyAccessServerFromNamespace

        true

        + + + + +

        Methods with idempotency_level option

        + + - - + + + + - + - + @@ -14343,12 +14794,66 @@

        Methods with idempotency_level option

        -

        policy/registeredresources/registered_resources.proto

        Top +

        policy/obligations/obligations.proto

        Top

        -

        ActionAttributeValue

        +

        AddObligationTriggerRequest

        +

        Obligation Triggers are owned by the namespace that owns the action and attribute value, which must

        be the same. In this way, a trigger can intentionally cross namespace boundaries: associating

        obligation values of a different namespace than the one that owns the action being taken or the attribute value.

        + + +
        GetObligationValuesByFQNs

        NO_SIDE_EFFECTS

        Method NameOption
        GetObligationTriggerGetNamespace

        NO_SIDE_EFFECTS

        ListObligationTriggersListNamespaces

        NO_SIDE_EFFECTS

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        obligation_valuecommon.IdFqnIdentifier

        Required

        actioncommon.IdNameIdentifier

        Required

        attribute_valuecommon.IdFqnIdentifier

        Required

        contextpolicy.RequestContext

        Optional +The request context for this obligation value policy decisioning.

        metadatacommon.MetadataMutable

        Optional +Common metadata

        + + + + + +

        AddObligationTriggerResponse

        @@ -14359,29 +14864,85 @@

        ActionAttributeValue - action_id + trigger + policy.ObligationTrigger + +

        + + + + + + + + + +

        CreateObligationRequest

        +

        + + + + + + + + + + - + - + - + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        namespace_id string

        action_namenamespace_fqn string

        attribute_value_idname string

        attribute_value_fqnvalues stringrepeated

        Optional

        metadatacommon.MetadataMutable

        Optional +Common metadata

        + + + + + +

        CreateObligationResponse

        +

        + + + + + + + + + + + @@ -14393,7 +14954,7 @@

        ActionAttributeValueCreateRegisteredResourceRequest

        +

        CreateObligationValueRequest

        @@ -14404,43 +14965,97 @@

        CreateRegist

        - + - + - + + + + + + + + + + + + + + + +Combination of action and attribute_value that will trigger this obligation value policy decisioning.

        + + + + + + + + + + +
        FieldTypeLabelDescription
        obligationpolicy.Obligation

        nameobligation_id string

        Required

        valuesobligation_fqnstring

        value string

        triggersValueTriggerRequest repeated

        Optional -Registered Resource Values (when provided) must be alphanumeric strings, allowing hyphens and underscores but not as the first or last character. -The stored value will be normalized to lower case.

        metadatacommon.MetadataMutable

        Optional +Common metadata

        + + + + + +

        CreateObligationValueResponse

        +

        + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        valuepolicy.ObligationValue

        + + + + + +

        DeleteObligationRequest

        +

        + + + + + + + + - + - + - - - - - - -
        FieldTypeLabelDescription
        namespace_idid string

        namespace_fqnfqn string

        metadatacommon.MetadataMutable

        Optional -Common metadata

        @@ -14448,7 +15063,7 @@

        CreateRegist -

        CreateRegisteredResourceResponse

        +

        DeleteObligationResponse

        @@ -14459,8 +15074,8 @@

        CreateRegis - resource - policy.RegisteredResource + obligation + policy.Obligation

        @@ -14472,7 +15087,7 @@

        CreateRegis -

        CreateRegisteredResourceValueRequest

        +

        DeleteObligationValueRequest

        @@ -14483,34 +15098,17 @@

        CreateR - resource_id + id string -

        Required

        +

        - value + fqn string -

        Required

        - - - - action_attribute_values - ActionAttributeValue - repeated -

        Optional -The associated Action <> AttributeValue combinations to be utilized in authorization/entitlement decisioning -(i.e. action read -> attribute value https://example.com/attr/department/value/marketing)

        - - - - metadata - common.MetadataMutable - -

        Optional -Common metadata

        +

        @@ -14520,7 +15118,7 @@

        CreateR -

        CreateRegisteredResourceValueResponse

        +

        DeleteObligationValueResponse

        @@ -14532,7 +15130,7 @@

        Create value - policy.RegisteredResourceValue + policy.ObligationValue

        @@ -14544,7 +15142,7 @@

        Create -

        DeleteRegisteredResourceRequest

        +

        GetObligationRequest

        @@ -14558,7 +15156,14 @@

        DeleteRegist id string -

        Required

        +

        + + + + fqn + string + +

        @@ -14568,7 +15173,7 @@

        DeleteRegist -

        DeleteRegisteredResourceResponse

        +

        GetObligationResponse

        @@ -14579,8 +15184,8 @@

        DeleteRegis - resource - policy.RegisteredResource + obligation + policy.Obligation

        @@ -14592,8 +15197,8 @@

        DeleteRegis -

        DeleteRegisteredResourceValueRequest

        -

        +

        GetObligationTriggerRequest

        +

        Triggers

        @@ -14616,7 +15221,7 @@

        DeleteR -

        DeleteRegisteredResourceValueResponse

        +

        GetObligationTriggerResponse

        @@ -14627,8 +15232,8 @@

        Delete

        - - + + @@ -14640,8 +15245,8 @@

        Delete -

        GetRegisteredResourceRequest

        -

        +

        GetObligationValueRequest

        +

        Values

        valuepolicy.RegisteredResourceValuetriggerpolicy.ObligationTrigger

        @@ -14658,21 +15263,7 @@

        GetRegisteredRe

        - - - - - - - - - - - - - - - + @@ -14685,7 +15276,7 @@

        GetRegisteredRe -

        GetRegisteredResourceResponse

        +

        GetObligationValueResponse

        @@ -14696,8 +15287,8 @@

        GetRegisteredR

        - - + + @@ -14709,7 +15300,7 @@

        GetRegisteredR -

        GetRegisteredResourceValueRequest

        +

        GetObligationValuesByFQNsRequest

        @@ -14720,16 +15311,33 @@

        GetRegiste

        - + - + + +
        namestring

        namespace_fqnstring

        namespace_idfqn string

        resourcepolicy.RegisteredResourcevaluepolicy.ObligationValue

        idfqns stringrepeated

        + + + + + +

        GetObligationValuesByFQNsResponse

        +

        + + + + + + + + - - - + + + @@ -14740,7 +15348,7 @@

        GetRegiste -

        GetRegisteredResourceValueResponse

        +

        GetObligationValuesByFQNsResponse.FqnValueMapEntry

        @@ -14750,9 +15358,16 @@

        GetRegist

        + + + + + + + - + @@ -14764,7 +15379,7 @@

        GetRegist -

        GetRegisteredResourceValuesByFQNsRequest

        +

        GetObligationsByFQNsRequest

        @@ -14778,7 +15393,7 @@

        Get

        - + @@ -14788,7 +15403,7 @@

        Get -

        GetRegisteredResourceValuesByFQNsResponse

        +

        GetObligationsByFQNsResponse

        @@ -14799,8 +15414,8 @@

        Ge

        - - + + @@ -14812,7 +15427,7 @@

        Ge -

        GetRegisteredResourceValuesByFQNsResponse.FqnValueMapEntry

        +

        GetObligationsByFQNsResponse.FqnObligationMapEntry

        @@ -14831,7 +15446,7 @@

        policy.RegisteredResourceValue +

        @@ -14843,7 +15458,7 @@

        ListRegisteredResourceValuesRequest

        +

        ListObligationTriggersRequest

        @@ -14854,10 +15469,17 @@

        ListRegi

        - + - + + + + + + + + @@ -14874,7 +15496,7 @@

        ListRegi -

        ListRegisteredResourceValuesResponse

        +

        ListObligationTriggersResponse

        @@ -14885,8 +15507,8 @@

        ListReg

        - - + + @@ -14905,7 +15527,7 @@

        ListReg -

        ListRegisteredResourcesRequest

        +

        ListObligationsRequest

        @@ -14938,7 +15560,7 @@

        ListRegistere

        - + - - + + @@ -14992,7 +15614,7 @@

        ListRegister -

        RegisteredResourcesSort

        +

        ObligationsSort

        @@ -15004,7 +15626,7 @@

        RegisteredResourcesS

        - + @@ -15023,7 +15645,55 @@

        RegisteredResourcesS -

        UpdateRegisteredResourceRequest

        +

        RemoveObligationTriggerRequest

        +

        + + +
        FieldTypeLabelDescription
        fqnstringfqn_value_mapGetObligationValuesByFQNsResponse.FqnValueMapEntryrepeated

        keystring

        valuepolicy.RegisteredResourceValuepolicy.ObligationValue

        fqns string repeated

        Required

        fqn_value_mapGetRegisteredResourceValuesByFQNsResponse.FqnValueMapEntryfqn_obligation_mapGetObligationsByFQNsResponse.FqnObligationMapEntry repeated

        policy.Obligation

        resource_idnamespace_id string

        Optional

        namespace_fqnstring

        valuespolicy.RegisteredResourceValuetriggerspolicy.ObligationTrigger repeated

        sortRegisteredResourcesSortObligationsSort repeated

        Optional - CONSTRAINT: max 1 item Sort defaults: @@ -14961,7 +15583,7 @@

        ListRegistere -

        ListRegisteredResourcesResponse

        +

        ListObligationsResponse

        @@ -14972,8 +15594,8 @@

        ListRegister

        resourcespolicy.RegisteredResourceobligationspolicy.Obligation repeated

        fieldSortRegisteredResourcesTypeSortObligationsType

        + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        idstring

        Required

        + + + + + +

        RemoveObligationTriggerResponse

        +

        + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        triggerpolicy.ObligationTrigger

        + + + + + +

        UpdateObligationRequest

        @@ -15051,8 +15721,7 @@

        UpdateRegist metadata common.MetadataMutable -

        Optional -Common metadata

        +

        @@ -15069,7 +15738,7 @@

        UpdateRegist -

        UpdateRegisteredResourceResponse

        +

        UpdateObligationResponse

        @@ -15080,8 +15749,8 @@

        UpdateRegis - resource - policy.RegisteredResource + obligation + policy.Obligation

        @@ -15093,7 +15762,7 @@

        UpdateRegis -

        UpdateRegisteredResourceValueRequest

        +

        UpdateObligationValueRequest

        @@ -15118,11 +15787,11 @@

        UpdateR - action_attribute_values - ActionAttributeValue + triggers + ValueTriggerRequest repeated

        Optional -Action Attribute Values provided here will replace all existing records in the database. To delete all action attribute values, set this field to an empty list.

        +Obligation Triggers provided here will replace all existing records in the database.

        @@ -15147,7 +15816,7 @@

        UpdateR -

        UpdateRegisteredResourceValueResponse

        +

        UpdateObligationValueResponse

        @@ -15159,7 +15828,7 @@

        Update value - policy.RegisteredResourceValue + policy.ObligationValue

        @@ -15171,9 +15840,47 @@

        Update +

        ValueTriggerRequest

        +

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        actioncommon.IdNameIdentifier

        Required. The ID of the action that will trigger this obligation value policy decisioning.

        attribute_valuecommon.IdFqnIdentifier

        Required. The attribute value ID that will trigger this obligation value policy decisioning.

        contextpolicy.RequestContext

        Optional. The request context for this obligation value policy decisioning.

        + + + + + -

        SortRegisteredResourcesType

        +

        SortObligationsType

        @@ -15182,29 +15889,35 @@

        SortRegisteredRe

        - + - + - + - + + + + + + +
        SORT_REGISTERED_RESOURCES_TYPE_UNSPECIFIEDSORT_OBLIGATIONS_TYPE_UNSPECIFIED 0

        SORT_REGISTERED_RESOURCES_TYPE_NAMESORT_OBLIGATIONS_TYPE_NAME 1

        SORT_REGISTERED_RESOURCES_TYPE_CREATED_ATSORT_OBLIGATIONS_TYPE_FQN 2

        SORT_REGISTERED_RESOURCES_TYPE_UPDATED_ATSORT_OBLIGATIONS_TYPE_CREATED_AT 3

        SORT_OBLIGATIONS_TYPE_UPDATED_AT4

        @@ -15212,8 +15925,8 @@

        SortRegisteredRe -

        RegisteredResourcesService

        -

        Registered Resources

        +

        Service

        +

        Obligation Service

        /

        @@ -15221,95 +15934,219 @@

        RegisteredResourc

        - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Method NameRequest TypeResponse TypeDescription
        CreateRegisteredResourceCreateRegisteredResourceRequestCreateRegisteredResourceResponseListObligationsListObligationsRequestListObligationsResponse

        GetRegisteredResourceGetRegisteredResourceRequestGetRegisteredResourceResponseGetObligationGetObligationRequestGetObligationResponse

        ListRegisteredResourcesListRegisteredResourcesRequestListRegisteredResourcesResponseGetObligationsByFQNsGetObligationsByFQNsRequestGetObligationsByFQNsResponse

        UpdateRegisteredResourceUpdateRegisteredResourceRequestUpdateRegisteredResourceResponseCreateObligationCreateObligationRequestCreateObligationResponse

        DeleteRegisteredResourceDeleteRegisteredResourceRequestDeleteRegisteredResourceResponseUpdateObligationUpdateObligationRequestUpdateObligationResponse

        CreateRegisteredResourceValueCreateRegisteredResourceValueRequestCreateRegisteredResourceValueResponseDeleteObligationDeleteObligationRequestDeleteObligationResponse

        GetRegisteredResourceValueGetRegisteredResourceValueRequestGetRegisteredResourceValueResponseGetObligationValueGetObligationValueRequestGetObligationValueResponse

        GetRegisteredResourceValuesByFQNsGetRegisteredResourceValuesByFQNsRequestGetRegisteredResourceValuesByFQNsResponseGetObligationValuesByFQNsGetObligationValuesByFQNsRequestGetObligationValuesByFQNsResponse

        ListRegisteredResourceValuesListRegisteredResourceValuesRequestListRegisteredResourceValuesResponseCreateObligationValueCreateObligationValueRequestCreateObligationValueResponse

        UpdateRegisteredResourceValueUpdateRegisteredResourceValueRequestUpdateRegisteredResourceValueResponseUpdateObligationValueUpdateObligationValueRequestUpdateObligationValueResponse

        DeleteRegisteredResourceValueDeleteRegisteredResourceValueRequestDeleteRegisteredResourceValueResponseDeleteObligationValueDeleteObligationValueRequestDeleteObligationValueResponse

        GetObligationTriggerGetObligationTriggerRequestGetObligationTriggerResponse

        AddObligationTriggerAddObligationTriggerRequestAddObligationTriggerResponse

        RemoveObligationTriggerRemoveObligationTriggerRequestRemoveObligationTriggerResponse

        ListObligationTriggersListObligationTriggersRequestListObligationTriggersResponse

        - - - -
        -

        policy/resourcemapping/resource_mapping.proto

        Top -
        -

        + + + +

        Methods with idempotency_level option

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Method NameOption
        ListObligations

        NO_SIDE_EFFECTS

        GetObligation

        NO_SIDE_EFFECTS

        GetObligationsByFQNs

        NO_SIDE_EFFECTS

        GetObligationValue

        NO_SIDE_EFFECTS

        GetObligationValuesByFQNs

        NO_SIDE_EFFECTS

        GetObligationTrigger

        NO_SIDE_EFFECTS

        ListObligationTriggers

        NO_SIDE_EFFECTS

        + + + + +
        +

        policy/registeredresources/registered_resources.proto

        Top +
        +

        + + +

        ActionAttributeValue

        +

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        action_idstring

        action_namestring

        attribute_value_idstring

        attribute_value_fqnstring

        + + + -

        CreateResourceMappingGroupRequest

        +

        CreateRegisteredResourceRequest

        @@ -15320,31 +16157,41 @@

        CreateResource - namespace_id + name string -

        +

        Required

        - namespace_fqn + values + string + repeated +

        Optional +Registered Resource Values (when provided) must be alphanumeric strings, allowing hyphens and underscores but not as the first or last character. +The stored value will be normalized to lower case.

        + + + + namespace_id string

        - name + namespace_fqn string -

        Required

        +

        metadata common.MetadataMutable -

        Common metadata

        +

        Optional +Common metadata

        @@ -15354,7 +16201,7 @@

        CreateResource -

        CreateResourceMappingGroupResponse

        +

        CreateRegisteredResourceResponse

        @@ -15365,8 +16212,8 @@

        CreateResourc - resource_mapping_group - policy.ResourceMappingGroup + resource + policy.RegisteredResource

        @@ -15378,7 +16225,7 @@

        CreateResourc -

        CreateResourceMappingRequest

        +

        CreateRegisteredResourceValueRequest

        @@ -15389,48 +16236,34 @@

        CreateResourceMappi - attribute_value_id + resource_id string

        Required

        - terms - string - repeated -

        Required

        - - - - group_id - string - -

        Optional

        - - - - namespace_id + value string -

        Optional -The namespace that owns this resource mapping. If a group_id is provided, -this must match the group's namespace (and may be omitted to inherit it).

        +

        Required

        - namespace_fqn - string - + action_attribute_values + ActionAttributeValue + repeated

        Optional -Alternative to namespace_id; the FQN of the owning namespace.

        +The associated Action <> AttributeValue combinations to be utilized in authorization/entitlement decisioning +(i.e. action read -> attribute value https://example.com/attr/department/value/marketing)

        metadata common.MetadataMutable -

        Optional

        +

        Optional +Common metadata

        @@ -15440,7 +16273,7 @@

        CreateResourceMappi -

        CreateResourceMappingResponse

        +

        CreateRegisteredResourceValueResponse

        @@ -15451,8 +16284,8 @@

        CreateResourceMapp - resource_mapping - policy.ResourceMapping + value + policy.RegisteredResourceValue

        @@ -15464,7 +16297,7 @@

        CreateResourceMapp -

        DeleteResourceMappingGroupRequest

        +

        DeleteRegisteredResourceRequest

        @@ -15488,7 +16321,7 @@

        DeleteResource -

        DeleteResourceMappingGroupResponse

        +

        DeleteRegisteredResourceResponse

        @@ -15499,8 +16332,8 @@

        DeleteResourc - resource_mapping_group - policy.ResourceMappingGroup + resource + policy.RegisteredResource

        @@ -15512,7 +16345,7 @@

        DeleteResourc -

        DeleteResourceMappingRequest

        +

        DeleteRegisteredResourceValueRequest

        @@ -15536,7 +16369,7 @@

        DeleteResourceMappi -

        DeleteResourceMappingResponse

        +

        DeleteRegisteredResourceValueResponse

        @@ -15547,8 +16380,8 @@

        DeleteResourceMapp - resource_mapping - policy.ResourceMapping + value + policy.RegisteredResourceValue

        @@ -15560,7 +16393,7 @@

        DeleteResourceMapp -

        GetResourceMappingGroupRequest

        +

        GetRegisteredResourceRequest

        @@ -15574,7 +16407,28 @@

        GetResourceMappin id string -

        Required

        +

        + + + + name + string + +

        + + + + namespace_fqn + string + +

        + + + + namespace_id + string + +

        @@ -15584,7 +16438,7 @@

        GetResourceMappin -

        GetResourceMappingGroupResponse

        +

        GetRegisteredResourceResponse

        @@ -15595,8 +16449,8 @@

        GetResourceMappi - resource_mapping_group - policy.ResourceMappingGroup + resource + policy.RegisteredResource

        @@ -15608,7 +16462,7 @@

        GetResourceMappi -

        GetResourceMappingRequest

        +

        GetRegisteredResourceValueRequest

        @@ -15622,7 +16476,14 @@

        GetResourceMappingRequ id string -

        Required

        +

        + + + + fqn + string + +

        @@ -15632,7 +16493,7 @@

        GetResourceMappingRequ -

        GetResourceMappingResponse

        +

        GetRegisteredResourceValueResponse

        @@ -15643,8 +16504,8 @@

        GetResourceMappingRes - resource_mapping - policy.ResourceMapping + value + policy.RegisteredResourceValue

        @@ -15656,7 +16517,7 @@

        GetResourceMappingRes -

        ListResourceMappingGroupsRequest

        +

        GetRegisteredResourceValuesByFQNsRequest

        @@ -15667,24 +16528,10 @@

        ListResourceMap - namespace_id - string - -

        Optional

        - - - - namespace_fqn + fqns string - -

        Optional

        - - - - pagination - policy.PageRequest - -

        Optional

        + repeated +

        Required

        @@ -15694,7 +16541,7 @@

        ListResourceMap -

        ListResourceMappingGroupsResponse

        +

        GetRegisteredResourceValuesByFQNsResponse

        @@ -15705,19 +16552,12 @@

        ListResourceMa - resource_mapping_groups - policy.ResourceMappingGroup + fqn_value_map + GetRegisteredResourceValuesByFQNsResponse.FqnValueMapEntry repeated

        - - pagination - policy.PageResponse - -

        - - @@ -15725,7 +16565,7 @@

        ListResourceMa -

        ListResourceMappingsByGroupFqnsRequest

        +

        GetRegisteredResourceValuesByFQNsResponse.FqnValueMapEntry

        @@ -15736,11 +16576,17 @@

        ListResou - fqns + key string - repeated -

        Required -Structure of the RM Group FQN is 'https://<namespace>/resm/<group name>'

        + +

        + + + + value + policy.RegisteredResourceValue + +

        @@ -15750,7 +16596,7 @@

        ListResou -

        ListResourceMappingsByGroupFqnsResponse

        +

        ListRegisteredResourceValuesRequest

        @@ -15761,10 +16607,17 @@

        ListReso - fqn_resource_mapping_groups - ListResourceMappingsByGroupFqnsResponse.FqnResourceMappingGroupsEntry - repeated -

        + resource_id + string + +

        Optional

        + + + + pagination + policy.PageRequest + +

        Optional

        @@ -15774,7 +16627,7 @@

        ListReso -

        ListResourceMappingsByGroupFqnsResponse.FqnResourceMappingGroupsEntry

        +

        ListRegisteredResourceValuesResponse

        @@ -15785,15 +16638,15 @@

        string - + values + policy.RegisteredResourceValue + repeated

        - value - ResourceMappingsByGroup + pagination + policy.PageResponse

        @@ -15805,7 +16658,7 @@

        ListResourceMappingsRequest

        +

        ListRegisteredResourcesRequest

        @@ -15816,31 +16669,40 @@

        ListResourceMappings - group_id + namespace_id string -

        Optional

        +

        - namespace_id + namespace_fqn string -

        Optional -Filter the list to resource mappings owned by this namespace.

        +

        - namespace_fqn - string + pagination + policy.PageRequest -

        Optional -Filter the list to resource mappings owned by this namespace.

        +

        Optional

        + + + + sort + RegisteredResourcesSort + repeated +

        Optional - CONSTRAINT: max 1 item +Sort defaults: + - direction UNSPECIFIED defaults to DESC for the specified field + - field UNSPECIFIED defaults to created_at with the specified direction + - both UNSPECIFIED or sort omitted defaults to created_at DESC

        - pagination - policy.PageRequest + search + policy.Search

        Optional

        @@ -15852,7 +16714,7 @@

        ListResourceMappings -

        ListResourceMappingsResponse

        +

        ListRegisteredResourcesResponse

        @@ -15863,8 +16725,8 @@

        ListResourceMapping - resource_mappings - policy.ResourceMapping + resources + policy.RegisteredResource repeated

        @@ -15883,7 +16745,7 @@

        ListResourceMapping -

        ResourceMappingsByGroup

        +

        RegisteredResourcesSort

        @@ -15894,16 +16756,16 @@

        ResourceMappingsByGroup< - group - policy.ResourceMappingGroup + field + SortRegisteredResourcesType

        - mappings - policy.ResourceMapping - repeated + direction + policy.SortDirection +

        @@ -15914,7 +16776,7 @@

        ResourceMappingsByGroup< -

        UpdateResourceMappingGroupRequest

        +

        UpdateRegisteredResourceRequest

        @@ -15931,20 +16793,6 @@

        UpdateResource

        Required

        - - namespace_id - string - -

        Optional

        - - - - namespace_fqn - string - -

        Optional

        - - name string @@ -15956,7 +16804,8 @@

        UpdateResource metadata common.MetadataMutable -

        Common metadata

        +

        Optional +Common metadata

        @@ -15973,7 +16822,7 @@

        UpdateResource -

        UpdateResourceMappingGroupResponse

        +

        UpdateRegisteredResourceResponse

        @@ -15984,8 +16833,8 @@

        UpdateResourc - resource_mapping_group - policy.ResourceMappingGroup + resource + policy.RegisteredResource

        @@ -15997,7 +16846,7 @@

        UpdateResourc -

        UpdateResourceMappingRequest

        +

        UpdateRegisteredResourceValueRequest

        @@ -16015,41 +16864,18 @@

        UpdateResourceMappi - attribute_value_id + value string

        Optional

        - terms - string + action_attribute_values + ActionAttributeValue repeated -

        Optional

        - - - - group_id - string - -

        Optional

        - - - - namespace_id - string - -

        Optional -The namespace that owns this resource mapping. If a group_id is set on the -mapping, this must match the group's namespace.

        - - - - namespace_fqn - string -

        Optional -Alternative to namespace_id; the FQN of the owning namespace.

        +Action Attribute Values provided here will replace all existing records in the database. To delete all action attribute values, set this field to an empty list.

        @@ -16057,7 +16883,7 @@

        UpdateResourceMappi common.MetadataMutable

        Optional -Common Metadata

        +Common metadata

        @@ -16074,7 +16900,7 @@

        UpdateResourceMappi -

        UpdateResourceMappingResponse

        +

        UpdateRegisteredResourceValueResponse

        @@ -16085,8 +16911,8 @@

        UpdateResourceMapp - resource_mapping - policy.ResourceMapping + value + policy.RegisteredResourceValue

        @@ -16100,149 +16926,143 @@

        UpdateResourceMapp - - - - -

        ResourceMappingService

        -

        Resource Mapping Groups

        +

        SortRegisteredResourcesType

        +

        - + - - - + + - - - + + - - - + + - - - + + - - - - - - + +
        Method NameRequest TypeResponse TypeDescription
        NameNumberDescription
        ListResourceMappingGroupsListResourceMappingGroupsRequestListResourceMappingGroupsResponseSORT_REGISTERED_RESOURCES_TYPE_UNSPECIFIED0

        GetResourceMappingGroupGetResourceMappingGroupRequestGetResourceMappingGroupResponseSORT_REGISTERED_RESOURCES_TYPE_NAME1

        CreateResourceMappingGroupCreateResourceMappingGroupRequestCreateResourceMappingGroupResponseSORT_REGISTERED_RESOURCES_TYPE_CREATED_AT2

        UpdateResourceMappingGroupUpdateResourceMappingGroupRequestUpdateResourceMappingGroupResponseSORT_REGISTERED_RESOURCES_TYPE_UPDATED_AT3

        DeleteResourceMappingGroupDeleteResourceMappingGroupRequestDeleteResourceMappingGroupResponse

        + + + + + +

        RegisteredResourcesService

        +

        Registered Resources

        + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - -
        Method NameRequest TypeResponse TypeDescription
        ListResourceMappingsListResourceMappingsRequestListResourceMappingsResponseCreateRegisteredResourceCreateRegisteredResourceRequestCreateRegisteredResourceResponse

        ListResourceMappingsByGroupFqnsListResourceMappingsByGroupFqnsRequestListResourceMappingsByGroupFqnsResponseGetRegisteredResourceGetRegisteredResourceRequestGetRegisteredResourceResponse

        GetResourceMappingGetResourceMappingRequestGetResourceMappingResponseListRegisteredResourcesListRegisteredResourcesRequestListRegisteredResourcesResponse

        CreateResourceMappingCreateResourceMappingRequestCreateResourceMappingResponseUpdateRegisteredResourceUpdateRegisteredResourceRequestUpdateRegisteredResourceResponse

        UpdateResourceMappingUpdateResourceMappingRequestUpdateResourceMappingResponseDeleteRegisteredResourceDeleteRegisteredResourceRequestDeleteRegisteredResourceResponse

        DeleteResourceMappingDeleteResourceMappingRequestDeleteResourceMappingResponseCreateRegisteredResourceValueCreateRegisteredResourceValueRequestCreateRegisteredResourceValueResponse

        - - - - -

        Methods with idempotency_level option

        - - - - - - - - - - - + + + + - - + + + + - - + + + + - - + + + + - - + + + + - -
        Method NameOption
        ListResourceMappingGroups

        NO_SIDE_EFFECTS

        GetRegisteredResourceValueGetRegisteredResourceValueRequestGetRegisteredResourceValueResponse

        GetResourceMappingGroup

        NO_SIDE_EFFECTS

        GetRegisteredResourceValuesByFQNsGetRegisteredResourceValuesByFQNsRequestGetRegisteredResourceValuesByFQNsResponse

        ListResourceMappings

        NO_SIDE_EFFECTS

        ListRegisteredResourceValuesListRegisteredResourceValuesRequestListRegisteredResourceValuesResponse

        ListResourceMappingsByGroupFqns

        NO_SIDE_EFFECTS

        UpdateRegisteredResourceValueUpdateRegisteredResourceValueRequestUpdateRegisteredResourceValueResponse

        GetResourceMapping

        NO_SIDE_EFFECTS

        DeleteRegisteredResourceValueDeleteRegisteredResourceValueRequestDeleteRegisteredResourceValueResponse

        - + + +
        -

        policy/subjectmapping/subject_mapping.proto

        Top +

        policy/resourcemapping/resource_mapping.proto

        Top

        -

        CreateSubjectConditionSetRequest

        +

        CreateResourceMappingGroupRequest

        @@ -16253,24 +17073,31 @@

        CreateSubjectCon - subject_condition_set - SubjectConditionSetCreate + namespace_id + string

        - namespace_id + namespace_fqn string

        - namespace_fqn + name string -

        +

        Required

        + + + + metadata + common.MetadataMutable + +

        Common metadata

        @@ -16280,7 +17107,7 @@

        CreateSubjectCon -

        CreateSubjectConditionSetResponse

        +

        CreateResourceMappingGroupResponse

        @@ -16291,8 +17118,8 @@

        CreateSubjectCo - subject_condition_set - policy.SubjectConditionSet + resource_mapping_group + policy.ResourceMappingGroup

        @@ -16304,7 +17131,7 @@

        CreateSubjectCo -

        CreateSubjectMappingRequest

        +

        CreateResourceMappingRequest

        @@ -16318,31 +17145,21 @@

        CreateSubjectMappingR attribute_value_id string -

        Required -Attribute Value to be mapped to

        +

        Required

        - actions - policy.Action + terms + string repeated -

        Required -The actions permitted by subjects in this mapping

        +

        Required

        - existing_subject_condition_set_id + group_id string -

        Either of the following: -Reuse existing SubjectConditionSet (NOTE: prioritized over new_subject_condition_set)

        - - - - new_subject_condition_set - SubjectConditionSetCreate - -

        Create new SubjectConditionSet (NOTE: ignored if existing_subject_condition_set_id is provided)

        +

        Optional

        @@ -16350,14 +17167,16 @@

        CreateSubjectMappingR string

        Optional -Namespace ID or FQN for the subject mapping

        +The namespace that owns this resource mapping. If a group_id is provided, +this must match the group's namespace (and may be omitted to inherit it).

        namespace_fqn string -

        +

        Optional +Alternative to namespace_id; the FQN of the owning namespace.

        @@ -16374,7 +17193,7 @@

        CreateSubjectMappingR -

        CreateSubjectMappingResponse

        +

        CreateResourceMappingResponse

        @@ -16385,8 +17204,8 @@

        CreateSubjectMapping - subject_mapping - policy.SubjectMapping + resource_mapping + policy.ResourceMapping

        @@ -16398,38 +17217,7 @@

        CreateSubjectMapping -

        DeleteAllUnmappedSubjectConditionSetsRequest

        -

        Prune any Subject Condition Sets not utilized within a Subject Mapping

        - - - - - -

        DeleteAllUnmappedSubjectConditionSetsResponse

        -

        - - - - - - - - - - - - - - - - -
        FieldTypeLabelDescription
        subject_condition_setspolicy.SubjectConditionSetrepeated

        Only IDs of any deleted Subject Condition Set provided

        - - - - - -

        DeleteSubjectConditionSetRequest

        +

        DeleteResourceMappingGroupRequest

        @@ -16453,7 +17241,7 @@

        DeleteSubjectCon -

        DeleteSubjectConditionSetResponse

        +

        DeleteResourceMappingGroupResponse

        @@ -16464,10 +17252,10 @@

        DeleteSubjectCo - subject_condition_set - policy.SubjectConditionSet + resource_mapping_group + policy.ResourceMappingGroup -

        Only ID of deleted Subject Condition Set provided

        +

        @@ -16477,7 +17265,7 @@

        DeleteSubjectCo -

        DeleteSubjectMappingRequest

        +

        DeleteResourceMappingRequest

        @@ -16501,7 +17289,7 @@

        DeleteSubjectMappingR -

        DeleteSubjectMappingResponse

        +

        DeleteResourceMappingResponse

        @@ -16512,10 +17300,10 @@

        DeleteSubjectMapping - subject_mapping - policy.SubjectMapping + resource_mapping + policy.ResourceMapping -

        Only ID of the updated Subject Mapping provided

        +

        @@ -16525,7 +17313,7 @@

        DeleteSubjectMapping -

        GetSubjectConditionSetRequest

        +

        GetResourceMappingGroupRequest

        @@ -16549,7 +17337,7 @@

        GetSubjectCondition -

        GetSubjectConditionSetResponse

        +

        GetResourceMappingGroupResponse

        @@ -16560,19 +17348,12 @@

        GetSubjectConditio - subject_condition_set - policy.SubjectConditionSet + resource_mapping_group + policy.ResourceMappingGroup

        - - associated_subject_mappings - policy.SubjectMapping - repeated -

        contextualized Subject Mappings associated with this SubjectConditionSet

        - - @@ -16580,7 +17361,7 @@

        GetSubjectConditio -

        GetSubjectMappingRequest

        +

        GetResourceMappingRequest

        @@ -16604,7 +17385,7 @@

        GetSubjectMappingRequest -

        GetSubjectMappingResponse

        +

        GetResourceMappingResponse

        @@ -16615,8 +17396,8 @@

        GetSubjectMappingRespon - subject_mapping - policy.SubjectMapping + resource_mapping + policy.ResourceMapping

        @@ -16628,7 +17409,7 @@

        GetSubjectMappingRespon -

        ListSubjectConditionSetsRequest

        +

        ListResourceMappingGroupsRequest

        @@ -16642,14 +17423,14 @@

        ListSubjectCondit namespace_id string -

        +

        Optional

        namespace_fqn string -

        +

        Optional

        @@ -16659,24 +17440,6 @@

        ListSubjectCondit

        Optional

        - - sort - SubjectConditionSetsSort - repeated -

        Optional - CONSTRAINT: max 1 item -Sort defaults: - - direction UNSPECIFIED defaults to DESC for the specified field - - field UNSPECIFIED defaults to created_at with the specified direction - - both UNSPECIFIED or sort omitted defaults to created_at DESC

        - - - - search - policy.Search - -

        Optional

        - - @@ -16684,7 +17447,7 @@

        ListSubjectCondit -

        ListSubjectConditionSetsResponse

        +

        ListResourceMappingGroupsResponse

        @@ -16695,8 +17458,8 @@

        ListSubjectCondi - subject_condition_sets - policy.SubjectConditionSet + resource_mapping_groups + policy.ResourceMappingGroup repeated

        @@ -16715,7 +17478,7 @@

        ListSubjectCondi -

        ListSubjectMappingsRequest

        +

        ListResourceMappingsByGroupFqnsRequest

        @@ -16726,42 +17489,11 @@

        ListSubjectMappingsReq - namespace_id - string - -

        - - - - namespace_fqn + fqns string - -

        - - - - pagination - policy.PageRequest - -

        Optional

        - - - - sort - SubjectMappingsSort repeated -

        Optional - CONSTRAINT: max 1 item -Sort defaults: - - direction UNSPECIFIED defaults to DESC for the specified field - - field UNSPECIFIED defaults to created_at with the specified direction - - both UNSPECIFIED or sort omitted defaults to created_at DESC

        - - - - search - policy.Search - -

        Optional

        +

        Required +Structure of the RM Group FQN is 'https://<namespace>/resm/<group name>'

        @@ -16771,7 +17503,7 @@

        ListSubjectMappingsReq -

        ListSubjectMappingsResponse

        +

        ListResourceMappingsByGroupFqnsResponse

        @@ -16782,19 +17514,12 @@

        ListSubjectMappingsRe - subject_mappings - policy.SubjectMapping + fqn_resource_mapping_groups + ListResourceMappingsByGroupFqnsResponse.FqnResourceMappingGroupsEntry repeated

        - - pagination - policy.PageResponse - -

        - - @@ -16802,8 +17527,8 @@

        ListSubjectMappingsRe -

        MatchSubjectMappingsRequest

        -

        MatchSubjectMappingsRequest liberally returns a list of SubjectMappings based on the provided SubjectProperties.

        The SubjectMappings are returned if an external selector field matches.

        +

        ListResourceMappingsByGroupFqnsResponse.FqnResourceMappingGroupsEntry

        +

        @@ -16813,33 +17538,16 @@

        MatchSubjectMappingsR

        - - - + + + - -
        subject_propertiespolicy.SubjectPropertyrepeatedkeystring

        - - - - - -

        MatchSubjectMappingsResponse

        -

        - - - - - - - - - - - + + + @@ -16850,7 +17558,7 @@

        MatchSubjectMappings -

        SubjectConditionSetCreate

        +

        ListResourceMappingsRequest

        @@ -16861,18 +17569,33 @@

        SubjectConditionSetCrea

        - - - - + + + + - - + + + + + + + + + + + + + + + + - + @@ -16882,7 +17605,7 @@

        SubjectConditionSetCrea -

        SubjectConditionSetsSort

        +

        ListResourceMappingsResponse

        @@ -16893,15 +17616,15 @@

        SubjectConditionSetsSort

        - - - + + + - - + + @@ -16913,7 +17636,7 @@

        SubjectConditionSetsSort -

        SubjectMappingsSort

        +

        ResourceMappingsByGroup

        @@ -16924,16 +17647,16 @@

        SubjectMappingsSort

        - - + + - - - + + + @@ -16944,7 +17667,7 @@

        SubjectMappingsSort

        -

        UpdateSubjectConditionSetRequest

        +

        UpdateResourceMappingGroupRequest

        @@ -16962,11 +17685,24 @@

        UpdateSubjectCon

        - - - - + + + + + + + + + + + + + + + + + + @@ -16990,7 +17726,7 @@

        UpdateSubjectCon -

        UpdateSubjectConditionSetResponse

        +

        UpdateResourceMappingGroupResponse

        @@ -17001,10 +17737,10 @@

        UpdateSubjectCo

        - - + + - + @@ -17014,7 +17750,7 @@

        UpdateSubjectCo -

        UpdateSubjectMappingRequest

        +

        UpdateResourceMappingRequest

        @@ -17032,26 +17768,49 @@

        UpdateSubjectMappingR

        - + - + - - + + + + + + + + + + + + + + + + +The namespace that owns this resource mapping. If a group_id is set on the +mapping, this must match the group's namespace.

        + + + + + + + - + @@ -17068,7 +17827,7 @@

        UpdateSubjectMappingR -

        UpdateSubjectMappingResponse

        +

        UpdateResourceMappingResponse

        @@ -17079,10 +17838,10 @@

        UpdateSubjectMapping

        - - + + - + @@ -17094,70 +17853,12 @@

        UpdateSubjectMapping -

        SortSubjectConditionSetsType

        -

        -
        FieldTypeLabelDescription
        subject_mappingspolicy.SubjectMappingrepeatedvalueResourceMappingsByGroup

        subject_setspolicy.SubjectSetrepeated

        Required

        group_idstring

        Optional

        metadatacommon.MetadataMutablenamespace_idstring

        Optional +Filter the list to resource mappings owned by this namespace.

        namespace_fqnstring

        Optional +Filter the list to resource mappings owned by this namespace.

        paginationpolicy.PageRequest

        Optional -Common metadata

        Optional

        fieldSortSubjectConditionSetsTyperesource_mappingspolicy.ResourceMappingrepeated

        directionpolicy.SortDirectionpaginationpolicy.PageResponse

        fieldSortSubjectMappingsTypegrouppolicy.ResourceMappingGroup

        directionpolicy.SortDirectionmappingspolicy.ResourceMappingrepeated

        subject_setspolicy.SubjectSetrepeated

        Optional -If provided, replaces entire existing structure of Subject Sets, Condition Groups, & Conditions

        namespace_idstring

        Optional

        namespace_fqnstring

        Optional

        namestring

        Optional

        subject_condition_setpolicy.SubjectConditionSetresource_mapping_grouppolicy.ResourceMappingGroup

        Only ID of updated Subject Condition Set provided

        subject_condition_set_idattribute_value_id string

        Optional -Replaces the existing SubjectConditionSet id with a new one

        Optional

        actionspolicy.Actiontermsstring repeated

        Optional

        group_idstring

        Optional

        namespace_idstring

        Optional -Replaces entire list of actions permitted by subjects

        namespace_fqnstring

        Optional +Alternative to namespace_id; the FQN of the owning namespace.

        metadata common.MetadataMutable

        Common metadata

        Optional +Common Metadata

        subject_mappingpolicy.SubjectMappingresource_mappingpolicy.ResourceMapping

        Only ID of the updated Subject Mapping provided

        - - - - - - - - - - - - - - - - - - - - - - - - -
        NameNumberDescription
        SORT_SUBJECT_CONDITION_SETS_TYPE_UNSPECIFIED0

        SORT_SUBJECT_CONDITION_SETS_TYPE_CREATED_AT1

        SORT_SUBJECT_CONDITION_SETS_TYPE_UPDATED_AT2

        - -

        SortSubjectMappingsType

        -

        - - - - - - - - - - - - - - - - - - - - - - - - - -
        NameNumberDescription
        SORT_SUBJECT_MAPPINGS_TYPE_UNSPECIFIED0

        SORT_SUBJECT_MAPPINGS_TYPE_CREATED_AT1

        SORT_SUBJECT_MAPPINGS_TYPE_UPDATED_AT2

        - -

        SubjectMappingService

        -

        +

        ResourceMappingService

        +

        Resource Mapping Groups

        @@ -17165,86 +17866,79 @@

        SubjectMappingService

        - - - - - - - - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + @@ -17265,22 +17959,27 @@

        Methods with idempotency_level option

        - + - + - + - + + + + + + diff --git a/docs/openapi/policy/dynamicvaluemapping/dynamic_value_mapping.openapi.yaml b/docs/openapi/policy/dynamicvaluemapping/dynamic_value_mapping.openapi.yaml new file mode 100644 index 0000000000..fd0fb63dc6 --- /dev/null +++ b/docs/openapi/policy/dynamicvaluemapping/dynamic_value_mapping.openapi.yaml @@ -0,0 +1,1454 @@ +openapi: 3.1.0 +info: + title: policy.dynamicvaluemapping +paths: + /policy.dynamicvaluemapping.DynamicValueMappingService/CreateDynamicValueMapping: + post: + tags: + - policy.dynamicvaluemapping.DynamicValueMappingService + summary: CreateDynamicValueMapping + operationId: policy.dynamicvaluemapping.DynamicValueMappingService.CreateDynamicValueMapping + parameters: + - name: Connect-Protocol-Version + in: header + required: true + schema: + $ref: '#/components/schemas/connect-protocol-version' + - name: Connect-Timeout-Ms + in: header + schema: + $ref: '#/components/schemas/connect-timeout-header' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/policy.dynamicvaluemapping.CreateDynamicValueMappingRequest' + required: true + responses: + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/connect.error' + "200": + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/policy.dynamicvaluemapping.CreateDynamicValueMappingResponse' + /policy.dynamicvaluemapping.DynamicValueMappingService/DeleteDynamicValueMapping: + post: + tags: + - policy.dynamicvaluemapping.DynamicValueMappingService + summary: DeleteDynamicValueMapping + operationId: policy.dynamicvaluemapping.DynamicValueMappingService.DeleteDynamicValueMapping + parameters: + - name: Connect-Protocol-Version + in: header + required: true + schema: + $ref: '#/components/schemas/connect-protocol-version' + - name: Connect-Timeout-Ms + in: header + schema: + $ref: '#/components/schemas/connect-timeout-header' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/policy.dynamicvaluemapping.DeleteDynamicValueMappingRequest' + required: true + responses: + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/connect.error' + "200": + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/policy.dynamicvaluemapping.DeleteDynamicValueMappingResponse' + /policy.dynamicvaluemapping.DynamicValueMappingService/GetDynamicValueMapping: + post: + tags: + - policy.dynamicvaluemapping.DynamicValueMappingService + summary: GetDynamicValueMapping + operationId: policy.dynamicvaluemapping.DynamicValueMappingService.GetDynamicValueMapping + parameters: + - name: Connect-Protocol-Version + in: header + required: true + schema: + $ref: '#/components/schemas/connect-protocol-version' + - name: Connect-Timeout-Ms + in: header + schema: + $ref: '#/components/schemas/connect-timeout-header' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/policy.dynamicvaluemapping.GetDynamicValueMappingRequest' + required: true + responses: + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/connect.error' + "200": + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/policy.dynamicvaluemapping.GetDynamicValueMappingResponse' + /policy.dynamicvaluemapping.DynamicValueMappingService/ListDynamicValueMappings: + post: + tags: + - policy.dynamicvaluemapping.DynamicValueMappingService + summary: ListDynamicValueMappings + operationId: policy.dynamicvaluemapping.DynamicValueMappingService.ListDynamicValueMappings + parameters: + - name: Connect-Protocol-Version + in: header + required: true + schema: + $ref: '#/components/schemas/connect-protocol-version' + - name: Connect-Timeout-Ms + in: header + schema: + $ref: '#/components/schemas/connect-timeout-header' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/policy.dynamicvaluemapping.ListDynamicValueMappingsRequest' + required: true + responses: + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/connect.error' + "200": + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/policy.dynamicvaluemapping.ListDynamicValueMappingsResponse' + /policy.dynamicvaluemapping.DynamicValueMappingService/UpdateDynamicValueMapping: + post: + tags: + - policy.dynamicvaluemapping.DynamicValueMappingService + summary: UpdateDynamicValueMapping + operationId: policy.dynamicvaluemapping.DynamicValueMappingService.UpdateDynamicValueMapping + parameters: + - name: Connect-Protocol-Version + in: header + required: true + schema: + $ref: '#/components/schemas/connect-protocol-version' + - name: Connect-Timeout-Ms + in: header + schema: + $ref: '#/components/schemas/connect-timeout-header' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/policy.dynamicvaluemapping.UpdateDynamicValueMappingRequest' + required: true + responses: + default: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/connect.error' + "200": + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/policy.dynamicvaluemapping.UpdateDynamicValueMappingResponse' +components: + schemas: + common.Metadata: + type: object + properties: + createdAt: + title: created_at + description: created_at set by server (entity who created will recorded in an audit event) + $ref: '#/components/schemas/google.protobuf.Timestamp' + updatedAt: + title: updated_at + description: updated_at set by server (entity who updated will recorded in an audit event) + $ref: '#/components/schemas/google.protobuf.Timestamp' + labels: + type: object + title: labels + additionalProperties: + type: string + title: value + description: optional short description + title: Metadata + additionalProperties: false + description: Struct to uniquely identify a resource with optional additional metadata + common.Metadata.LabelsEntry: + type: object + properties: + key: + type: string + title: key + value: + type: string + title: value + title: LabelsEntry + additionalProperties: false + common.MetadataMutable: + type: object + properties: + labels: + type: object + title: labels + additionalProperties: + type: string + title: value + description: optional labels + title: MetadataMutable + additionalProperties: false + common.MetadataMutable.LabelsEntry: + type: object + properties: + key: + type: string + title: key + value: + type: string + title: value + title: LabelsEntry + additionalProperties: false + common.MetadataUpdateEnum: + type: string + title: MetadataUpdateEnum + enum: + - METADATA_UPDATE_ENUM_UNSPECIFIED + - METADATA_UPDATE_ENUM_EXTEND + - METADATA_UPDATE_ENUM_REPLACE + connect-protocol-version: + type: number + title: Connect-Protocol-Version + enum: + - 1 + description: Define the version of the Connect protocol + const: 1 + connect-timeout-header: + type: number + title: Connect-Timeout-Ms + description: Define the timeout, in ms + connect.error: + type: object + properties: + code: + type: string + examples: + - not_found + enum: + - canceled + - unknown + - invalid_argument + - deadline_exceeded + - not_found + - already_exists + - permission_denied + - resource_exhausted + - failed_precondition + - aborted + - out_of_range + - unimplemented + - internal + - unavailable + - data_loss + - unauthenticated + description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. + message: + type: string + description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client. + details: + type: array + items: + $ref: '#/components/schemas/connect.error_details.Any' + description: A list of messages that carry the error details. There is no limit on the number of messages. + title: Connect Error + additionalProperties: true + description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation' + connect.error_details.Any: + type: object + properties: + type: + type: string + description: 'A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field.' + value: + type: string + format: binary + description: The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field. + debug: + oneOf: + - type: object + title: Any + additionalProperties: true + description: Detailed error information. + discriminator: + propertyName: type + title: Debug + description: Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic. + additionalProperties: true + description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details. + google.protobuf.BoolValue: + type: boolean + description: |- + Wrapper message for `bool`. + + The JSON representation for `BoolValue` is JSON `true` and `false`. + + Not recommended for use in new APIs, but still useful for legacy APIs and + has no plan to be removed. + google.protobuf.Timestamp: + type: string + examples: + - "2023-01-15T01:30:15.01Z" + - "2024-12-25T12:00:00Z" + format: date-time + description: |- + A Timestamp represents a point in time independent of any time zone or local + calendar, encoded as a count of seconds and fractions of seconds at + nanosecond resolution. The count is relative to an epoch at UTC midnight on + January 1, 1970, in the proleptic Gregorian calendar which extends the + Gregorian calendar backwards to year one. + + All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap + second table is needed for interpretation, using a [24-hour linear + smear](https://developers.google.com/time/smear). + + The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By + restricting to that range, we ensure that we can convert to and from [RFC + 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. + + # Examples + + Example 1: Compute Timestamp from POSIX `time()`. + + Timestamp timestamp; + timestamp.set_seconds(time(NULL)); + timestamp.set_nanos(0); + + Example 2: Compute Timestamp from POSIX `gettimeofday()`. + + struct timeval tv; + gettimeofday(&tv, NULL); + + Timestamp timestamp; + timestamp.set_seconds(tv.tv_sec); + timestamp.set_nanos(tv.tv_usec * 1000); + + Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. + + FILETIME ft; + GetSystemTimeAsFileTime(&ft); + UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; + + // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z + // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. + Timestamp timestamp; + timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); + timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); + + Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. + + long millis = System.currentTimeMillis(); + + Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) + .setNanos((int) ((millis % 1000) * 1000000)).build(); + + Example 5: Compute Timestamp from Java `Instant.now()`. + + Instant now = Instant.now(); + + Timestamp timestamp = + Timestamp.newBuilder().setSeconds(now.getEpochSecond()) + .setNanos(now.getNano()).build(); + + Example 6: Compute Timestamp from current time in Python. + + timestamp = Timestamp() + timestamp.GetCurrentTime() + + # JSON Mapping + + In JSON format, the Timestamp type is encoded as a string in the + [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the + format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" + where {year} is always expressed using four digits while {month}, {day}, + {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional + seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), + are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone + is required. A proto3 JSON serializer should always use UTC (as indicated by + "Z") when printing the Timestamp type and a proto3 JSON parser should be + able to accept both UTC and other timezones (as indicated by an offset). + + For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past + 01:30 UTC on January 15, 2017. + + In JavaScript, one can convert a Date object to this format using the + standard + [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) + method. In Python, a standard `datetime.datetime` object can be converted + to this format using + [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with + the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use + the Joda Time's [`ISODateTimeFormat.dateTime()`]( + http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime() + ) to obtain a formatter capable of generating timestamps in this format. + policy.Action: + type: object + allOf: + - properties: + id: + type: string + title: id + description: Generated uuid in database + name: + type: string + title: name + namespace: + title: namespace + description: Namespace context for this action + $ref: '#/components/schemas/policy.Namespace' + metadata: + title: metadata + $ref: '#/components/schemas/common.Metadata' + - oneOf: + - type: object + properties: + custom: + type: string + title: custom + description: Deprecated + title: custom + required: + - custom + - type: object + properties: + standard: + title: standard + description: Deprecated + $ref: '#/components/schemas/policy.Action.StandardAction' + title: standard + required: + - standard + title: Action + additionalProperties: false + description: An action an entity can take + policy.Action.StandardAction: + type: string + title: StandardAction + enum: + - STANDARD_ACTION_UNSPECIFIED + - STANDARD_ACTION_DECRYPT + - STANDARD_ACTION_TRANSMIT + policy.Algorithm: + type: string + title: Algorithm + enum: + - ALGORITHM_UNSPECIFIED + - ALGORITHM_RSA_2048 + - ALGORITHM_RSA_4096 + - ALGORITHM_EC_P256 + - ALGORITHM_EC_P384 + - ALGORITHM_EC_P521 + - ALGORITHM_HPQT_XWING + - ALGORITHM_HPQT_SECP256R1_MLKEM768 + - ALGORITHM_HPQT_SECP384R1_MLKEM1024 + description: Supported key algorithms. + policy.Attribute: + type: object + properties: + id: + type: string + title: id + namespace: + title: namespace + description: namespace of the attribute + $ref: '#/components/schemas/policy.Namespace' + name: + type: string + title: name + description: attribute name + rule: + title: rule + description: attribute rule enum + $ref: '#/components/schemas/policy.AttributeRuleTypeEnum' + values: + type: array + items: + $ref: '#/components/schemas/policy.Value' + title: values + grants: + type: array + items: + $ref: '#/components/schemas/policy.KeyAccessServer' + title: grants + description: Deprecated KAS grants for the attribute. Use kas_keys instead. + fqn: + type: string + title: fqn + active: + title: active + description: active by default until explicitly deactivated + $ref: '#/components/schemas/google.protobuf.BoolValue' + kasKeys: + type: array + items: + $ref: '#/components/schemas/policy.SimpleKasKey' + title: kas_keys + description: Keys associated with the attribute + allowTraversal: + title: allow_traversal + description: |- + Whether or not we will use the attribute definition during encryption + if the attribute value is missing. + $ref: '#/components/schemas/google.protobuf.BoolValue' + metadata: + title: metadata + description: Common metadata + $ref: '#/components/schemas/common.Metadata' + title: Attribute + required: + - rule + additionalProperties: false + policy.AttributeRuleTypeEnum: + type: string + title: AttributeRuleTypeEnum + enum: + - ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED + - ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF + - ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF + - ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY + policy.Condition: + type: object + properties: + subjectExternalSelectorValue: + type: string + title: subject_external_selector_value + description: |- + a selector for a field value on a flattened Entity Representation (such as + from idP/LDAP) + operator: + title: operator + description: the evaluation operator of relation + $ref: '#/components/schemas/policy.SubjectMappingOperatorEnum' + subjectExternalValues: + type: array + items: + type: string + title: subject_external_values + minItems: 1 + description: |- + list of comparison values for the result of applying the + subject_external_selector_value on a flattened Entity Representation + (Subject), evaluated by the operator + title: Condition + required: + - subjectExternalSelectorValue + - operator + additionalProperties: false + description: |- + * + A Condition defines a rule of + policy.ConditionBooleanTypeEnum: + type: string + title: ConditionBooleanTypeEnum + enum: + - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED + - CONDITION_BOOLEAN_TYPE_ENUM_AND + - CONDITION_BOOLEAN_TYPE_ENUM_OR + policy.ConditionGroup: + type: object + properties: + conditions: + type: array + items: + $ref: '#/components/schemas/policy.Condition' + title: conditions + minItems: 1 + booleanOperator: + title: boolean_operator + description: the boolean evaluation type across the conditions + $ref: '#/components/schemas/policy.ConditionBooleanTypeEnum' + title: ConditionGroup + required: + - booleanOperator + additionalProperties: false + description: A collection of Conditions evaluated by the boolean_operator provided + policy.DynamicValueMapping: + type: object + properties: + id: + type: string + title: id + attributeDefinition: + title: attribute_definition + description: the Attribute Definition whose values are entitled dynamically + $ref: '#/components/schemas/policy.Attribute' + valueResolver: + title: value_resolver + description: the dynamic resolver matched against the requested resource value segment + $ref: '#/components/schemas/policy.DynamicValueResolver' + subjectConditionSet: + title: subject_condition_set + description: |- + optional static pre-gate on the entity, evaluated with normal SubjectConditionSet + semantics (no dynamic overload). When present, both the gate and the resolver must + pass for entitlement. + $ref: '#/components/schemas/policy.SubjectConditionSet' + actions: + type: array + items: + $ref: '#/components/schemas/policy.Action' + title: actions + description: the actions permitted by subjects in this mapping + namespace: + title: namespace + description: the namespace containing this mapping + $ref: '#/components/schemas/policy.Namespace' + metadata: + title: metadata + $ref: '#/components/schemas/common.Metadata' + title: DynamicValueMapping + additionalProperties: false + description: |- + Dynamic Value Mapping: a Policy assigning permitted action(s) to + dynamically-requested values under an Attribute Definition. It raises entitlement + authority from a concrete Attribute Value to the Attribute Definition: at decision time + the value_resolver compares the requested resource value segment against the entity + representation, avoiding pre-provisioning a value + subject mapping per discrete value. + policy.DynamicValueOperatorEnum: + type: string + title: DynamicValueOperatorEnum + enum: + - DYNAMIC_VALUE_OPERATOR_ENUM_UNSPECIFIED + - DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN + - DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN_CONTAINS + description: |- + Operators for dynamic, definition-level value entitlement. Unlike + SubjectMappingOperatorEnum, whose right-hand operand is a static list authored into + policy, a DynamicValueOperatorEnum's right-hand operand is the requested resource's + attribute value segment, supplied at decision time. Each value is the inversion of its + static SubjectMappingOperatorEnum counterpart. + policy.DynamicValueResolver: + type: object + properties: + subjectExternalSelectorValue: + type: string + title: subject_external_selector_value + description: |- + a selector for a field value on a flattened Entity Representation (such as from + idP/LDAP), e.g. ".patientAssignments[]" + operator: + title: operator + description: the dynamic operator comparing the selector result to the resource value segment + $ref: '#/components/schemas/policy.DynamicValueOperatorEnum' + title: DynamicValueResolver + required: + - subjectExternalSelectorValue + - operator + additionalProperties: false + description: |- + Definition Value Resolver: the dynamic half of a DynamicValueMapping. It + resolves a selector against the entity representation and compares the result to the + requested resource value segment using a DynamicValueOperatorEnum. + policy.KasPublicKey: + type: object + properties: + pem: + type: string + title: pem + maxLength: 8192 + minLength: 1 + description: x509 ASN.1 content in PEM envelope, usually + kid: + type: string + title: kid + maxLength: 32 + minLength: 1 + description: A unique string identifier for this key + alg: + not: + enum: + - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED + title: alg + description: |- + A known algorithm type with any additional parameters encoded. + To start, these may be `rsa:2048` for RSA-based wrapping and + `ec:secp256r1` for EC-based wrapping, but more formats may be added as needed. + $ref: '#/components/schemas/policy.KasPublicKeyAlgEnum' + title: KasPublicKey + additionalProperties: false + description: |- + Deprecated + A KAS public key and some associated metadata for further identifcation + policy.KasPublicKeyAlgEnum: + type: string + title: KasPublicKeyAlgEnum + enum: + - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED + - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048 + - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096 + - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1 + - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1 + - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1 + - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING + - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768 + - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024 + policy.KasPublicKeySet: + type: object + properties: + keys: + type: array + items: + $ref: '#/components/schemas/policy.KasPublicKey' + title: keys + title: KasPublicKeySet + additionalProperties: false + description: |- + Deprecated + A list of known KAS public keys + policy.KeyAccessServer: + type: object + properties: + id: + type: string + title: id + uri: + type: string + title: uri + description: | + Address of a KAS instance + uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes. + publicKey: + title: public_key + description: 'Deprecated: KAS can have multiple key pairs' + $ref: '#/components/schemas/policy.PublicKey' + sourceType: + title: source_type + description: 'The source of the KAS: (INTERNAL, EXTERNAL)' + $ref: '#/components/schemas/policy.SourceType' + kasKeys: + type: array + items: + $ref: '#/components/schemas/policy.SimpleKasKey' + title: kas_keys + description: Kas keys associated with this KAS + name: + type: string + title: name + description: |- + Optional + Unique name of the KAS instance + metadata: + title: metadata + description: Common metadata + $ref: '#/components/schemas/common.Metadata' + title: KeyAccessServer + additionalProperties: false + description: Key Access Server Registry + policy.Namespace: + type: object + properties: + id: + type: string + title: id + description: generated uuid in database + name: + type: string + title: name + description: |- + used to partition Attribute Definitions, support by namespace AuthN and + enable federation + fqn: + type: string + title: fqn + active: + title: active + description: active by default until explicitly deactivated + $ref: '#/components/schemas/google.protobuf.BoolValue' + metadata: + title: metadata + $ref: '#/components/schemas/common.Metadata' + grants: + type: array + items: + $ref: '#/components/schemas/policy.KeyAccessServer' + title: grants + description: Deprecated KAS grants for the namespace. Use kas_keys instead. + kasKeys: + type: array + items: + $ref: '#/components/schemas/policy.SimpleKasKey' + title: kas_keys + description: Keys for the namespace + title: Namespace + additionalProperties: false + policy.Obligation: + type: object + properties: + id: + type: string + title: id + namespace: + title: namespace + $ref: '#/components/schemas/policy.Namespace' + name: + type: string + title: name + values: + type: array + items: + $ref: '#/components/schemas/policy.ObligationValue' + title: values + fqn: + type: string + title: fqn + metadata: + title: metadata + $ref: '#/components/schemas/common.Metadata' + title: Obligation + additionalProperties: false + policy.ObligationTrigger: + type: object + properties: + id: + type: string + title: id + obligationValue: + title: obligation_value + $ref: '#/components/schemas/policy.ObligationValue' + action: + title: action + $ref: '#/components/schemas/policy.Action' + attributeValue: + title: attribute_value + $ref: '#/components/schemas/policy.Value' + context: + type: array + items: + $ref: '#/components/schemas/policy.RequestContext' + title: context + namespace: + title: namespace + description: The source namespace for this trigger, derived from the attribute value and action. + $ref: '#/components/schemas/policy.Namespace' + metadata: + title: metadata + $ref: '#/components/schemas/common.Metadata' + title: ObligationTrigger + additionalProperties: false + policy.ObligationValue: + type: object + properties: + id: + type: string + title: id + obligation: + title: obligation + $ref: '#/components/schemas/policy.Obligation' + value: + type: string + title: value + triggers: + type: array + items: + $ref: '#/components/schemas/policy.ObligationTrigger' + title: triggers + fqn: + type: string + title: fqn + metadata: + title: metadata + $ref: '#/components/schemas/common.Metadata' + title: ObligationValue + additionalProperties: false + policy.PageRequest: + type: object + properties: + limit: + type: integer + title: limit + format: int32 + description: |- + Optional + Set to configured default limit if not provided + Maximum limit set in platform config and enforced by services + offset: + type: integer + title: offset + format: int32 + description: |- + Optional + Defaulted if not provided + title: PageRequest + additionalProperties: false + policy.PageResponse: + type: object + properties: + currentOffset: + type: integer + title: current_offset + format: int32 + description: Requested pagination offset + nextOffset: + type: integer + title: next_offset + format: int32 + description: |- + Calculated with request limit + offset or defaults + Empty when none remain after current page + total: + type: integer + title: total + format: int32 + description: Total count of entire list + title: PageResponse + additionalProperties: false + policy.PolicyEnforcementPoint: + type: object + properties: + clientId: + type: string + title: client_id + minLength: 1 + title: PolicyEnforcementPoint + additionalProperties: false + policy.PublicKey: + type: object + oneOf: + - type: object + properties: + cached: + title: cached + description: public key with additional information. Current preferred version + $ref: '#/components/schemas/policy.KasPublicKeySet' + title: cached + required: + - cached + - type: object + properties: + remote: + type: string + title: remote + description: | + kas public key url - optional since can also be retrieved via public key + uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes. + title: remote + required: + - remote + title: PublicKey + additionalProperties: false + description: Deprecated + policy.RequestContext: + type: object + properties: + pep: + title: pep + $ref: '#/components/schemas/policy.PolicyEnforcementPoint' + title: RequestContext + required: + - pep + additionalProperties: false + description: Holds the context needed for obligation fulfillment + policy.ResourceMapping: + type: object + properties: + id: + type: string + title: id + metadata: + title: metadata + $ref: '#/components/schemas/common.Metadata' + attributeValue: + title: attribute_value + $ref: '#/components/schemas/policy.Value' + terms: + type: array + items: + type: string + title: terms + group: + title: group + $ref: '#/components/schemas/policy.ResourceMappingGroup' + title: ResourceMapping + required: + - attributeValue + additionalProperties: false + description: |- + Resource Mappings (aka Access Control Resource Encodings aka ACRE) are + structures supporting the mapping of Resources and Attribute Values + policy.ResourceMappingGroup: + type: object + properties: + id: + type: string + title: id + namespaceId: + type: string + title: namespace_id + description: the namespace containing the group of resource mappings + name: + type: string + title: name + description: |- + the common name for the group of resource mappings, which must be unique + per namespace + fqn: + type: string + title: fqn + description: the fully qualified name of the resource mapping group + metadata: + title: metadata + description: Common metadata + $ref: '#/components/schemas/common.Metadata' + title: ResourceMappingGroup + required: + - namespaceId + - name + additionalProperties: false + description: |- + Resource Mapping Groups are namespaced collections of Resource Mappings + associated under a common group name. + policy.SimpleKasKey: + type: object + properties: + kasUri: + type: string + title: kas_uri + description: The URL of the Key Access Server + publicKey: + title: public_key + description: The public key of the Key that belongs to the KAS + $ref: '#/components/schemas/policy.SimpleKasPublicKey' + kasId: + type: string + title: kas_id + description: The ID of the Key Access Server + title: SimpleKasKey + additionalProperties: false + policy.SimpleKasPublicKey: + type: object + properties: + algorithm: + title: algorithm + $ref: '#/components/schemas/policy.Algorithm' + kid: + type: string + title: kid + pem: + type: string + title: pem + title: SimpleKasPublicKey + additionalProperties: false + policy.SortDirection: + type: string + title: SortDirection + enum: + - SORT_DIRECTION_UNSPECIFIED + - SORT_DIRECTION_ASC + - SORT_DIRECTION_DESC + description: |- + Sorting direction shared across list APIs. + When the 'sort' field is omitted or the chosen sort 'field' is UNSPECIFIED, + the endpoint's request message defines the default ordering; see the + specific List* request docs. + policy.SourceType: + type: string + title: SourceType + enum: + - SOURCE_TYPE_UNSPECIFIED + - SOURCE_TYPE_INTERNAL + - SOURCE_TYPE_EXTERNAL + description: |- + Describes whether this kas is managed by the organization or if they imported + the kas information from an external party. These two modes are necessary in order + to encrypt a tdf dek with an external parties kas public key. + policy.SubjectConditionSet: + type: object + properties: + id: + type: string + title: id + namespace: + title: namespace + description: |- + the namespace containing this subject condition set + possible this is empty in the case a subject condition set + has not been migrated to a namespace. + $ref: '#/components/schemas/policy.Namespace' + subjectSets: + type: array + items: + $ref: '#/components/schemas/policy.SubjectSet' + title: subject_sets + minItems: 1 + metadata: + title: metadata + $ref: '#/components/schemas/common.Metadata' + title: SubjectConditionSet + additionalProperties: false + description: |- + A container for multiple Subject Sets, each containing Condition Groups, each + containing Conditions. Multiple Subject Sets in a SubjectConditionSet are + evaluated with AND logic. As each Subject Mapping has only one Attribute + Value, the SubjectConditionSet is reusable across multiple Subject Mappings / + Attribute Values and is an independent unit. + policy.SubjectMapping: + type: object + properties: + id: + type: string + title: id + attributeValue: + title: attribute_value + description: 'the Attribute Value mapped to; aka: "The Entity Entitlement Attribute"' + $ref: '#/components/schemas/policy.Value' + subjectConditionSet: + title: subject_condition_set + description: the reusable SubjectConditionSet mapped to the given Attribute Value + $ref: '#/components/schemas/policy.SubjectConditionSet' + actions: + type: array + items: + $ref: '#/components/schemas/policy.Action' + title: actions + description: The actions permitted by subjects in this mapping + namespace: + title: namespace + description: |- + the namespace containing this subject mapping + possible this is empty. If so that means + the Subject Mapping has not been migrated to a namespace. + $ref: '#/components/schemas/policy.Namespace' + metadata: + title: metadata + $ref: '#/components/schemas/common.Metadata' + title: SubjectMapping + additionalProperties: false + description: |- + Subject Mapping: A Policy assigning Subject Set(s) to a permitted attribute + value + action(s) combination + policy.SubjectMappingOperatorEnum: + type: string + title: SubjectMappingOperatorEnum + enum: + - SUBJECT_MAPPING_OPERATOR_ENUM_UNSPECIFIED + - SUBJECT_MAPPING_OPERATOR_ENUM_IN + - SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN + - SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS + policy.SubjectSet: + type: object + properties: + conditionGroups: + type: array + items: + $ref: '#/components/schemas/policy.ConditionGroup' + title: condition_groups + minItems: 1 + description: multiple Condition Groups are evaluated with AND logic + title: SubjectSet + additionalProperties: false + description: A collection of Condition Groups + policy.Value: + type: object + properties: + id: + type: string + title: id + description: generated uuid in database + attribute: + title: attribute + $ref: '#/components/schemas/policy.Attribute' + value: + type: string + title: value + grants: + type: array + items: + $ref: '#/components/schemas/policy.KeyAccessServer' + title: grants + description: Deprecated KAS grants for the value. Use kas_keys instead. + fqn: + type: string + title: fqn + active: + title: active + description: active by default until explicitly deactivated + $ref: '#/components/schemas/google.protobuf.BoolValue' + subjectMappings: + type: array + items: + $ref: '#/components/schemas/policy.SubjectMapping' + title: subject_mappings + description: subject mapping + kasKeys: + type: array + items: + $ref: '#/components/schemas/policy.SimpleKasKey' + title: kas_keys + resourceMappings: + type: array + items: + $ref: '#/components/schemas/policy.ResourceMapping' + title: resource_mappings + obligations: + type: array + items: + $ref: '#/components/schemas/policy.Obligation' + title: obligations + metadata: + title: metadata + description: Common metadata + $ref: '#/components/schemas/common.Metadata' + title: Value + additionalProperties: false + policy.dynamicvaluemapping.CreateDynamicValueMappingRequest: + type: object + allOf: + - oneOf: + - required: + - attributeDefinitionId + - required: + - attributeDefinitionFqn + properties: + attributeDefinitionId: + type: string + title: attribute_definition_id + description: | + optional_uuid_format // Optional field must be a valid UUID + attributeDefinitionFqn: + type: string + title: attribute_definition_fqn + format: uri + valueResolver: + title: value_resolver + description: 'Required: the dynamic resolver comparing entity selector result to the resource value segment' + $ref: '#/components/schemas/policy.DynamicValueResolver' + actions: + type: array + items: + $ref: '#/components/schemas/policy.Action' + title: actions + minItems: 1 + description: | + Required: actions permitted on a matched value + action_name_or_id_not_empty // Action name or ID must not be empty if provided + existingSubjectConditionSetId: + type: string + title: existing_subject_condition_set_id + description: | + Optional static pre-gate. Reuse an existing SubjectConditionSet (prioritized) ... + optional_uuid_format // Optional field must be a valid UUID + newSubjectConditionSet: + title: new_subject_condition_set + description: '... or create a new one (ignored if existing_subject_condition_set_id is provided)' + $ref: '#/components/schemas/policy.subjectmapping.SubjectConditionSetCreate' + namespaceId: + type: string + title: namespace_id + description: | + Optional: namespace ID or FQN for the mapping + optional_uuid_format // Optional field must be a valid UUID + namespaceFqn: + type: string + title: namespace_fqn + format: uri + metadata: + title: metadata + description: Optional + $ref: '#/components/schemas/common.MetadataMutable' + title: CreateDynamicValueMappingRequest + required: + - valueResolver + additionalProperties: false + policy.dynamicvaluemapping.CreateDynamicValueMappingResponse: + type: object + properties: + dynamicValueMapping: + title: dynamic_value_mapping + $ref: '#/components/schemas/policy.DynamicValueMapping' + title: CreateDynamicValueMappingResponse + additionalProperties: false + policy.dynamicvaluemapping.DeleteDynamicValueMappingRequest: + type: object + properties: + id: + type: string + title: id + format: uuid + description: Required + title: DeleteDynamicValueMappingRequest + additionalProperties: false + policy.dynamicvaluemapping.DeleteDynamicValueMappingResponse: + type: object + properties: + dynamicValueMapping: + title: dynamic_value_mapping + description: Only ID of the deleted mapping provided + $ref: '#/components/schemas/policy.DynamicValueMapping' + title: DeleteDynamicValueMappingResponse + additionalProperties: false + policy.dynamicvaluemapping.DynamicValueMappingsSort: + type: object + properties: + field: + title: field + $ref: '#/components/schemas/policy.dynamicvaluemapping.SortDynamicValueMappingsType' + direction: + title: direction + $ref: '#/components/schemas/policy.SortDirection' + title: DynamicValueMappingsSort + additionalProperties: false + policy.dynamicvaluemapping.GetDynamicValueMappingRequest: + type: object + properties: + id: + type: string + title: id + format: uuid + description: Required + title: GetDynamicValueMappingRequest + additionalProperties: false + policy.dynamicvaluemapping.GetDynamicValueMappingResponse: + type: object + properties: + dynamicValueMapping: + title: dynamic_value_mapping + $ref: '#/components/schemas/policy.DynamicValueMapping' + title: GetDynamicValueMappingResponse + additionalProperties: false + policy.dynamicvaluemapping.ListDynamicValueMappingsRequest: + type: object + properties: + namespaceId: + type: string + title: namespace_id + description: | + Optional + Namespace ID, or Attribute Definition ID to filter by + optional_uuid_format // Optional field must be a valid UUID + attributeDefinitionId: + type: string + title: attribute_definition_id + description: | + optional_uuid_format // Optional field must be a valid UUID + pagination: + title: pagination + description: Optional + $ref: '#/components/schemas/policy.PageRequest' + sort: + type: array + items: + $ref: '#/components/schemas/policy.dynamicvaluemapping.DynamicValueMappingsSort' + title: sort + maxItems: 1 + description: 'Optional - CONSTRAINT: max 1 item' + title: ListDynamicValueMappingsRequest + additionalProperties: false + policy.dynamicvaluemapping.ListDynamicValueMappingsResponse: + type: object + properties: + dynamicValueMappings: + type: array + items: + $ref: '#/components/schemas/policy.DynamicValueMapping' + title: dynamic_value_mappings + pagination: + title: pagination + $ref: '#/components/schemas/policy.PageResponse' + title: ListDynamicValueMappingsResponse + additionalProperties: false + policy.dynamicvaluemapping.SortDynamicValueMappingsType: + type: string + title: SortDynamicValueMappingsType + enum: + - SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_UNSPECIFIED + - SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_CREATED_AT + - SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_UPDATED_AT + policy.dynamicvaluemapping.UpdateDynamicValueMappingRequest: + type: object + properties: + id: + type: string + title: id + format: uuid + description: Required + valueResolver: + title: value_resolver + description: 'Optional: replace the dynamic resolver' + $ref: '#/components/schemas/policy.DynamicValueResolver' + subjectConditionSetId: + type: string + title: subject_condition_set_id + description: | + Optional: replace the static pre-gate SubjectConditionSet by id + optional_uuid_format // Optional field must be a valid UUID + actions: + type: array + items: + $ref: '#/components/schemas/policy.Action' + title: actions + description: | + Optional: replace the entire list of actions + action_name_or_id_not_empty // Action name or ID must not be empty if provided + metadata: + title: metadata + description: Common metadata + $ref: '#/components/schemas/common.MetadataMutable' + metadataUpdateBehavior: + title: metadata_update_behavior + $ref: '#/components/schemas/common.MetadataUpdateEnum' + title: UpdateDynamicValueMappingRequest + additionalProperties: false + policy.dynamicvaluemapping.UpdateDynamicValueMappingResponse: + type: object + properties: + dynamicValueMapping: + title: dynamic_value_mapping + $ref: '#/components/schemas/policy.DynamicValueMapping' + title: UpdateDynamicValueMappingResponse + additionalProperties: false + policy.subjectmapping.SubjectConditionSetCreate: + type: object + properties: + subjectSets: + type: array + items: + $ref: '#/components/schemas/policy.SubjectSet' + title: subject_sets + minItems: 1 + description: Required + metadata: + title: metadata + description: |- + Optional + Common metadata + $ref: '#/components/schemas/common.MetadataMutable' + title: SubjectConditionSetCreate + additionalProperties: false +security: [] +tags: + - name: policy.dynamicvaluemapping.DynamicValueMappingService diff --git a/docs/openapi/policy/objects.openapi.yaml b/docs/openapi/policy/objects.openapi.yaml index 00630c5163..3e75b85f94 100644 --- a/docs/openapi/policy/objects.openapi.yaml +++ b/docs/openapi/policy/objects.openapi.yaml @@ -416,6 +416,83 @@ components: - booleanOperator additionalProperties: false description: A collection of Conditions evaluated by the boolean_operator provided + policy.DynamicValueMapping: + type: object + properties: + id: + type: string + title: id + attributeDefinition: + title: attribute_definition + description: the Attribute Definition whose values are entitled dynamically + $ref: '#/components/schemas/policy.Attribute' + valueResolver: + title: value_resolver + description: the dynamic resolver matched against the requested resource value segment + $ref: '#/components/schemas/policy.DynamicValueResolver' + subjectConditionSet: + title: subject_condition_set + description: |- + optional static pre-gate on the entity, evaluated with normal SubjectConditionSet + semantics (no dynamic overload). When present, both the gate and the resolver must + pass for entitlement. + $ref: '#/components/schemas/policy.SubjectConditionSet' + actions: + type: array + items: + $ref: '#/components/schemas/policy.Action' + title: actions + description: the actions permitted by subjects in this mapping + namespace: + title: namespace + description: the namespace containing this mapping + $ref: '#/components/schemas/policy.Namespace' + metadata: + title: metadata + $ref: '#/components/schemas/common.Metadata' + title: DynamicValueMapping + additionalProperties: false + description: |- + Dynamic Value Mapping: a Policy assigning permitted action(s) to + dynamically-requested values under an Attribute Definition. It raises entitlement + authority from a concrete Attribute Value to the Attribute Definition: at decision time + the value_resolver compares the requested resource value segment against the entity + representation, avoiding pre-provisioning a value + subject mapping per discrete value. + policy.DynamicValueOperatorEnum: + type: string + title: DynamicValueOperatorEnum + enum: + - DYNAMIC_VALUE_OPERATOR_ENUM_UNSPECIFIED + - DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN + - DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN_CONTAINS + description: |- + Operators for dynamic, definition-level value entitlement. Unlike + SubjectMappingOperatorEnum, whose right-hand operand is a static list authored into + policy, a DynamicValueOperatorEnum's right-hand operand is the requested resource's + attribute value segment, supplied at decision time. Each value is the inversion of its + static SubjectMappingOperatorEnum counterpart. + policy.DynamicValueResolver: + type: object + properties: + subjectExternalSelectorValue: + type: string + title: subject_external_selector_value + description: |- + a selector for a field value on a flattened Entity Representation (such as from + idP/LDAP), e.g. ".patientAssignments[]" + operator: + title: operator + description: the dynamic operator comparing the selector result to the resource value segment + $ref: '#/components/schemas/policy.DynamicValueOperatorEnum' + title: DynamicValueResolver + required: + - subjectExternalSelectorValue + - operator + additionalProperties: false + description: |- + Definition Value Resolver: the dynamic half of a DynamicValueMapping. It + resolves a selector against the entity representation and compares the result to the + requested resource value segment using a DynamicValueOperatorEnum. policy.KasKey: type: object properties: diff --git a/protocol/go/go.mod b/protocol/go/go.mod index fe119565e9..e2668a8e74 100644 --- a/protocol/go/go.mod +++ b/protocol/go/go.mod @@ -2,6 +2,8 @@ module github.com/opentdf/platform/protocol/go go 1.25.0 +toolchain go1.25.9 + require ( buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260415201107-50325440f8f2.1 connectrpc.com/connect v1.20.0 diff --git a/protocol/go/policy/dynamicvaluemapping/dynamic_value_mapping.pb.go b/protocol/go/policy/dynamicvaluemapping/dynamic_value_mapping.pb.go new file mode 100644 index 0000000000..5df7ef6b45 --- /dev/null +++ b/protocol/go/policy/dynamicvaluemapping/dynamic_value_mapping.pb.go @@ -0,0 +1,1312 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.33.0 +// protoc (unknown) +// source: policy/dynamicvaluemapping/dynamic_value_mapping.proto + +package dynamicvaluemapping + +import ( + _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" + common "github.com/opentdf/platform/protocol/go/common" + policy "github.com/opentdf/platform/protocol/go/policy" + subjectmapping "github.com/opentdf/platform/protocol/go/policy/subjectmapping" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type SortDynamicValueMappingsType int32 + +const ( + SortDynamicValueMappingsType_SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_UNSPECIFIED SortDynamicValueMappingsType = 0 + SortDynamicValueMappingsType_SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_CREATED_AT SortDynamicValueMappingsType = 1 + SortDynamicValueMappingsType_SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_UPDATED_AT SortDynamicValueMappingsType = 2 +) + +// Enum value maps for SortDynamicValueMappingsType. +var ( + SortDynamicValueMappingsType_name = map[int32]string{ + 0: "SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_UNSPECIFIED", + 1: "SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_CREATED_AT", + 2: "SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_UPDATED_AT", + } + SortDynamicValueMappingsType_value = map[string]int32{ + "SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_UNSPECIFIED": 0, + "SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_CREATED_AT": 1, + "SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_UPDATED_AT": 2, + } +) + +func (x SortDynamicValueMappingsType) Enum() *SortDynamicValueMappingsType { + p := new(SortDynamicValueMappingsType) + *p = x + return p +} + +func (x SortDynamicValueMappingsType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SortDynamicValueMappingsType) Descriptor() protoreflect.EnumDescriptor { + return file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_enumTypes[0].Descriptor() +} + +func (SortDynamicValueMappingsType) Type() protoreflect.EnumType { + return &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_enumTypes[0] +} + +func (x SortDynamicValueMappingsType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SortDynamicValueMappingsType.Descriptor instead. +func (SortDynamicValueMappingsType) EnumDescriptor() ([]byte, []int) { + return file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDescGZIP(), []int{0} +} + +type GetDynamicValueMappingRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Required + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *GetDynamicValueMappingRequest) Reset() { + *x = GetDynamicValueMappingRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetDynamicValueMappingRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetDynamicValueMappingRequest) ProtoMessage() {} + +func (x *GetDynamicValueMappingRequest) ProtoReflect() protoreflect.Message { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetDynamicValueMappingRequest.ProtoReflect.Descriptor instead. +func (*GetDynamicValueMappingRequest) Descriptor() ([]byte, []int) { + return file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDescGZIP(), []int{0} +} + +func (x *GetDynamicValueMappingRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +type GetDynamicValueMappingResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DynamicValueMapping *policy.DynamicValueMapping `protobuf:"bytes,1,opt,name=dynamic_value_mapping,json=dynamicValueMapping,proto3" json:"dynamic_value_mapping,omitempty"` +} + +func (x *GetDynamicValueMappingResponse) Reset() { + *x = GetDynamicValueMappingResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetDynamicValueMappingResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetDynamicValueMappingResponse) ProtoMessage() {} + +func (x *GetDynamicValueMappingResponse) ProtoReflect() protoreflect.Message { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetDynamicValueMappingResponse.ProtoReflect.Descriptor instead. +func (*GetDynamicValueMappingResponse) Descriptor() ([]byte, []int) { + return file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDescGZIP(), []int{1} +} + +func (x *GetDynamicValueMappingResponse) GetDynamicValueMapping() *policy.DynamicValueMapping { + if x != nil { + return x.DynamicValueMapping + } + return nil +} + +type DynamicValueMappingsSort struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Field SortDynamicValueMappingsType `protobuf:"varint,1,opt,name=field,proto3,enum=policy.dynamicvaluemapping.SortDynamicValueMappingsType" json:"field,omitempty"` + Direction policy.SortDirection `protobuf:"varint,2,opt,name=direction,proto3,enum=policy.SortDirection" json:"direction,omitempty"` +} + +func (x *DynamicValueMappingsSort) Reset() { + *x = DynamicValueMappingsSort{} + if protoimpl.UnsafeEnabled { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DynamicValueMappingsSort) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DynamicValueMappingsSort) ProtoMessage() {} + +func (x *DynamicValueMappingsSort) ProtoReflect() protoreflect.Message { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DynamicValueMappingsSort.ProtoReflect.Descriptor instead. +func (*DynamicValueMappingsSort) Descriptor() ([]byte, []int) { + return file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDescGZIP(), []int{2} +} + +func (x *DynamicValueMappingsSort) GetField() SortDynamicValueMappingsType { + if x != nil { + return x.Field + } + return SortDynamicValueMappingsType_SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_UNSPECIFIED +} + +func (x *DynamicValueMappingsSort) GetDirection() policy.SortDirection { + if x != nil { + return x.Direction + } + return policy.SortDirection(0) +} + +type ListDynamicValueMappingsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Optional + // Namespace ID, or Attribute Definition ID to filter by + NamespaceId string `protobuf:"bytes,1,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` + AttributeDefinitionId string `protobuf:"bytes,2,opt,name=attribute_definition_id,json=attributeDefinitionId,proto3" json:"attribute_definition_id,omitempty"` + // Optional + Pagination *policy.PageRequest `protobuf:"bytes,10,opt,name=pagination,proto3" json:"pagination,omitempty"` + // Optional - CONSTRAINT: max 1 item + Sort []*DynamicValueMappingsSort `protobuf:"bytes,11,rep,name=sort,proto3" json:"sort,omitempty"` +} + +func (x *ListDynamicValueMappingsRequest) Reset() { + *x = ListDynamicValueMappingsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListDynamicValueMappingsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListDynamicValueMappingsRequest) ProtoMessage() {} + +func (x *ListDynamicValueMappingsRequest) ProtoReflect() protoreflect.Message { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListDynamicValueMappingsRequest.ProtoReflect.Descriptor instead. +func (*ListDynamicValueMappingsRequest) Descriptor() ([]byte, []int) { + return file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDescGZIP(), []int{3} +} + +func (x *ListDynamicValueMappingsRequest) GetNamespaceId() string { + if x != nil { + return x.NamespaceId + } + return "" +} + +func (x *ListDynamicValueMappingsRequest) GetAttributeDefinitionId() string { + if x != nil { + return x.AttributeDefinitionId + } + return "" +} + +func (x *ListDynamicValueMappingsRequest) GetPagination() *policy.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +func (x *ListDynamicValueMappingsRequest) GetSort() []*DynamicValueMappingsSort { + if x != nil { + return x.Sort + } + return nil +} + +type ListDynamicValueMappingsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DynamicValueMappings []*policy.DynamicValueMapping `protobuf:"bytes,1,rep,name=dynamic_value_mappings,json=dynamicValueMappings,proto3" json:"dynamic_value_mappings,omitempty"` + Pagination *policy.PageResponse `protobuf:"bytes,10,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (x *ListDynamicValueMappingsResponse) Reset() { + *x = ListDynamicValueMappingsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListDynamicValueMappingsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListDynamicValueMappingsResponse) ProtoMessage() {} + +func (x *ListDynamicValueMappingsResponse) ProtoReflect() protoreflect.Message { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListDynamicValueMappingsResponse.ProtoReflect.Descriptor instead. +func (*ListDynamicValueMappingsResponse) Descriptor() ([]byte, []int) { + return file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDescGZIP(), []int{4} +} + +func (x *ListDynamicValueMappingsResponse) GetDynamicValueMappings() []*policy.DynamicValueMapping { + if x != nil { + return x.DynamicValueMappings + } + return nil +} + +func (x *ListDynamicValueMappingsResponse) GetPagination() *policy.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + +type CreateDynamicValueMappingRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AttributeDefinitionId string `protobuf:"bytes,1,opt,name=attribute_definition_id,json=attributeDefinitionId,proto3" json:"attribute_definition_id,omitempty"` + AttributeDefinitionFqn string `protobuf:"bytes,2,opt,name=attribute_definition_fqn,json=attributeDefinitionFqn,proto3" json:"attribute_definition_fqn,omitempty"` + // Required: the dynamic resolver comparing entity selector result to the resource value segment + ValueResolver *policy.DynamicValueResolver `protobuf:"bytes,3,opt,name=value_resolver,json=valueResolver,proto3" json:"value_resolver,omitempty"` + // Required: actions permitted on a matched value + Actions []*policy.Action `protobuf:"bytes,4,rep,name=actions,proto3" json:"actions,omitempty"` + // Optional static pre-gate. Reuse an existing SubjectConditionSet (prioritized) ... + ExistingSubjectConditionSetId string `protobuf:"bytes,5,opt,name=existing_subject_condition_set_id,json=existingSubjectConditionSetId,proto3" json:"existing_subject_condition_set_id,omitempty"` + // ... or create a new one (ignored if existing_subject_condition_set_id is provided) + NewSubjectConditionSet *subjectmapping.SubjectConditionSetCreate `protobuf:"bytes,6,opt,name=new_subject_condition_set,json=newSubjectConditionSet,proto3" json:"new_subject_condition_set,omitempty"` + // Optional: namespace ID or FQN for the mapping + NamespaceId string `protobuf:"bytes,7,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` + NamespaceFqn string `protobuf:"bytes,8,opt,name=namespace_fqn,json=namespaceFqn,proto3" json:"namespace_fqn,omitempty"` + // Optional + Metadata *common.MetadataMutable `protobuf:"bytes,100,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *CreateDynamicValueMappingRequest) Reset() { + *x = CreateDynamicValueMappingRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateDynamicValueMappingRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateDynamicValueMappingRequest) ProtoMessage() {} + +func (x *CreateDynamicValueMappingRequest) ProtoReflect() protoreflect.Message { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateDynamicValueMappingRequest.ProtoReflect.Descriptor instead. +func (*CreateDynamicValueMappingRequest) Descriptor() ([]byte, []int) { + return file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDescGZIP(), []int{5} +} + +func (x *CreateDynamicValueMappingRequest) GetAttributeDefinitionId() string { + if x != nil { + return x.AttributeDefinitionId + } + return "" +} + +func (x *CreateDynamicValueMappingRequest) GetAttributeDefinitionFqn() string { + if x != nil { + return x.AttributeDefinitionFqn + } + return "" +} + +func (x *CreateDynamicValueMappingRequest) GetValueResolver() *policy.DynamicValueResolver { + if x != nil { + return x.ValueResolver + } + return nil +} + +func (x *CreateDynamicValueMappingRequest) GetActions() []*policy.Action { + if x != nil { + return x.Actions + } + return nil +} + +func (x *CreateDynamicValueMappingRequest) GetExistingSubjectConditionSetId() string { + if x != nil { + return x.ExistingSubjectConditionSetId + } + return "" +} + +func (x *CreateDynamicValueMappingRequest) GetNewSubjectConditionSet() *subjectmapping.SubjectConditionSetCreate { + if x != nil { + return x.NewSubjectConditionSet + } + return nil +} + +func (x *CreateDynamicValueMappingRequest) GetNamespaceId() string { + if x != nil { + return x.NamespaceId + } + return "" +} + +func (x *CreateDynamicValueMappingRequest) GetNamespaceFqn() string { + if x != nil { + return x.NamespaceFqn + } + return "" +} + +func (x *CreateDynamicValueMappingRequest) GetMetadata() *common.MetadataMutable { + if x != nil { + return x.Metadata + } + return nil +} + +type CreateDynamicValueMappingResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DynamicValueMapping *policy.DynamicValueMapping `protobuf:"bytes,1,opt,name=dynamic_value_mapping,json=dynamicValueMapping,proto3" json:"dynamic_value_mapping,omitempty"` +} + +func (x *CreateDynamicValueMappingResponse) Reset() { + *x = CreateDynamicValueMappingResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateDynamicValueMappingResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateDynamicValueMappingResponse) ProtoMessage() {} + +func (x *CreateDynamicValueMappingResponse) ProtoReflect() protoreflect.Message { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateDynamicValueMappingResponse.ProtoReflect.Descriptor instead. +func (*CreateDynamicValueMappingResponse) Descriptor() ([]byte, []int) { + return file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDescGZIP(), []int{6} +} + +func (x *CreateDynamicValueMappingResponse) GetDynamicValueMapping() *policy.DynamicValueMapping { + if x != nil { + return x.DynamicValueMapping + } + return nil +} + +type UpdateDynamicValueMappingRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Required + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Optional: replace the dynamic resolver + ValueResolver *policy.DynamicValueResolver `protobuf:"bytes,2,opt,name=value_resolver,json=valueResolver,proto3" json:"value_resolver,omitempty"` + // Optional: replace the static pre-gate SubjectConditionSet by id + SubjectConditionSetId string `protobuf:"bytes,3,opt,name=subject_condition_set_id,json=subjectConditionSetId,proto3" json:"subject_condition_set_id,omitempty"` + // Optional: replace the entire list of actions + Actions []*policy.Action `protobuf:"bytes,4,rep,name=actions,proto3" json:"actions,omitempty"` + // 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"` +} + +func (x *UpdateDynamicValueMappingRequest) Reset() { + *x = UpdateDynamicValueMappingRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateDynamicValueMappingRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateDynamicValueMappingRequest) ProtoMessage() {} + +func (x *UpdateDynamicValueMappingRequest) ProtoReflect() protoreflect.Message { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateDynamicValueMappingRequest.ProtoReflect.Descriptor instead. +func (*UpdateDynamicValueMappingRequest) Descriptor() ([]byte, []int) { + return file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDescGZIP(), []int{7} +} + +func (x *UpdateDynamicValueMappingRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *UpdateDynamicValueMappingRequest) GetValueResolver() *policy.DynamicValueResolver { + if x != nil { + return x.ValueResolver + } + return nil +} + +func (x *UpdateDynamicValueMappingRequest) GetSubjectConditionSetId() string { + if x != nil { + return x.SubjectConditionSetId + } + return "" +} + +func (x *UpdateDynamicValueMappingRequest) GetActions() []*policy.Action { + if x != nil { + return x.Actions + } + return nil +} + +func (x *UpdateDynamicValueMappingRequest) GetMetadata() *common.MetadataMutable { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *UpdateDynamicValueMappingRequest) GetMetadataUpdateBehavior() common.MetadataUpdateEnum { + if x != nil { + return x.MetadataUpdateBehavior + } + return common.MetadataUpdateEnum(0) +} + +type UpdateDynamicValueMappingResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DynamicValueMapping *policy.DynamicValueMapping `protobuf:"bytes,1,opt,name=dynamic_value_mapping,json=dynamicValueMapping,proto3" json:"dynamic_value_mapping,omitempty"` +} + +func (x *UpdateDynamicValueMappingResponse) Reset() { + *x = UpdateDynamicValueMappingResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateDynamicValueMappingResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateDynamicValueMappingResponse) ProtoMessage() {} + +func (x *UpdateDynamicValueMappingResponse) ProtoReflect() protoreflect.Message { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateDynamicValueMappingResponse.ProtoReflect.Descriptor instead. +func (*UpdateDynamicValueMappingResponse) Descriptor() ([]byte, []int) { + return file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDescGZIP(), []int{8} +} + +func (x *UpdateDynamicValueMappingResponse) GetDynamicValueMapping() *policy.DynamicValueMapping { + if x != nil { + return x.DynamicValueMapping + } + return nil +} + +type DeleteDynamicValueMappingRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Required + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *DeleteDynamicValueMappingRequest) Reset() { + *x = DeleteDynamicValueMappingRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteDynamicValueMappingRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteDynamicValueMappingRequest) ProtoMessage() {} + +func (x *DeleteDynamicValueMappingRequest) ProtoReflect() protoreflect.Message { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteDynamicValueMappingRequest.ProtoReflect.Descriptor instead. +func (*DeleteDynamicValueMappingRequest) Descriptor() ([]byte, []int) { + return file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDescGZIP(), []int{9} +} + +func (x *DeleteDynamicValueMappingRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +type DeleteDynamicValueMappingResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Only ID of the deleted mapping provided + DynamicValueMapping *policy.DynamicValueMapping `protobuf:"bytes,1,opt,name=dynamic_value_mapping,json=dynamicValueMapping,proto3" json:"dynamic_value_mapping,omitempty"` +} + +func (x *DeleteDynamicValueMappingResponse) Reset() { + *x = DeleteDynamicValueMappingResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteDynamicValueMappingResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteDynamicValueMappingResponse) ProtoMessage() {} + +func (x *DeleteDynamicValueMappingResponse) ProtoReflect() protoreflect.Message { + mi := &file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteDynamicValueMappingResponse.ProtoReflect.Descriptor instead. +func (*DeleteDynamicValueMappingResponse) Descriptor() ([]byte, []int) { + return file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDescGZIP(), []int{10} +} + +func (x *DeleteDynamicValueMappingResponse) GetDynamicValueMapping() *policy.DynamicValueMapping { + if x != nil { + return x.DynamicValueMapping + } + return nil +} + +var File_policy_dynamicvaluemapping_dynamic_value_mapping_proto protoreflect.FileDescriptor + +var file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDesc = []byte{ + 0x0a, 0x36, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2f, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2f, 0x64, 0x79, 0x6e, + 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, + 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, + 0x70, 0x69, 0x6e, 0x67, 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, 0x1a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2f, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2e, 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, 0x2b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2f, 0x73, 0x75, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2f, 0x73, 0x75, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0x39, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 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, 0x71, 0x0a, 0x1e, + 0x47, 0x65, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, + 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, + 0x0a, 0x15, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, + 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x13, 0x64, 0x79, 0x6e, 0x61, + 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x22, + 0xb3, 0x01, 0x0a, 0x18, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x58, 0x0a, 0x05, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x79, 0x6e, + 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, + 0x73, 0x54, 0x79, 0x70, 0x65, 0x42, 0x08, 0xba, 0x48, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x3d, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x42, 0x08, 0xba, 0x48, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xf3, 0x04, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x79, + 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xd7, 0x01, 0x0a, 0x0c, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0xb3, 0x01, 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01, 0xab, 0x01, 0x0a, 0x14, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x12, 0x23, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, + 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, + 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, + 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, + 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, + 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, + 0x7b, 0x31, 0x32, 0x7d, 0x27, 0x29, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x49, 0x64, 0x12, 0xec, 0x01, 0x0a, 0x17, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xb3, 0x01, 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01, 0xab, 0x01, + 0x0a, 0x14, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x5f, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x23, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, + 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73, 0x69, 0x7a, + 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5b, 0x30, + 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, + 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, + 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, + 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, + 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x27, 0x29, 0x52, 0x15, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 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, 0x12, 0x52, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, + 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, + 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, + 0x6e, 0x67, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, + 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x42, 0x08, 0xba, 0x48, 0x05, + 0x92, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x22, 0xab, 0x01, 0x0a, 0x20, + 0x4c, 0x69, 0x73, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x51, 0x0a, 0x16, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, + 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x14, 0x64, + 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, + 0x6e, 0x67, 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, 0xc9, 0x0a, 0x0a, 0x20, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xec, + 0x01, 0x0a, 0x17, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0xb3, 0x01, 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01, 0xab, 0x01, 0x0a, 0x14, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x12, 0x23, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, + 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, + 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, + 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, + 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, + 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, + 0x7b, 0x31, 0x32, 0x7d, 0x27, 0x29, 0x52, 0x15, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x44, 0x0a, + 0x18, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x00, 0x88, 0x01, 0x01, 0x52, 0x16, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x46, 0x71, 0x6e, 0x12, 0x4b, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x72, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, + 0x01, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, + 0x12, 0xb8, 0x01, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x42, 0x8d, 0x01, 0xba, 0x48, 0x89, 0x01, 0xba, 0x01, 0x80, 0x01, 0x0a, 0x1b, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6f, 0x72, 0x5f, 0x69, 0x64, + 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2f, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x49, 0x44, 0x20, 0x6d, 0x75, + 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, + 0x69, 0x66, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x30, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x61, 0x6c, 0x6c, 0x28, 0x69, 0x74, 0x65, 0x6d, 0x2c, 0x20, 0x69, 0x74, 0x65, 0x6d, + 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x69, + 0x74, 0x65, 0x6d, 0x2e, 0x69, 0x64, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x29, 0x92, 0x01, 0x02, + 0x08, 0x01, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xfe, 0x01, 0x0a, 0x21, + 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0xb3, 0x01, 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01, + 0xab, 0x01, 0x0a, 0x14, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69, + 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x23, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, + 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73, + 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, + 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, + 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, + 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, + 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, + 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, + 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x27, 0x29, 0x52, 0x1d, 0x65, + 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x6b, 0x0a, 0x19, + 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x16, 0x6e, 0x65, 0x77, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0xd7, 0x01, 0x0a, 0x0c, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x42, 0xb3, 0x01, 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01, 0xab, 0x01, 0x0a, 0x14, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x12, 0x23, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, + 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, + 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, + 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, + 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, + 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, + 0x7b, 0x31, 0x32, 0x7d, 0x27, 0x29, 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, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, + 0x05, 0x10, 0x00, 0x88, 0x01, 0x01, 0x52, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x46, 0x71, 0x6e, 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, 0x3a, 0xba, 0x48, 0x37, 0x22, 0x35, + 0x0a, 0x17, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x0a, 0x18, 0x61, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x66, 0x71, 0x6e, 0x10, 0x01, 0x22, 0x74, 0x0a, 0x21, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, + 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, + 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x15, 0x64, 0x79, + 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, + 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, + 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x13, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x22, 0xc6, 0x05, 0x0a, 0x20, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 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, 0x43, 0x0a, 0x0e, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x44, 0x79, 0x6e, 0x61, + 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, + 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x12, + 0xed, 0x01, 0x0a, 0x18, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x42, 0xb3, 0x01, 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01, 0xab, 0x01, 0x0a, 0x14, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x12, 0x23, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, + 0x68, 0x69, 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5b, 0x30, 0x2d, 0x39, 0x61, + 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, + 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, + 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, + 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, + 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x27, 0x29, 0x52, 0x15, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, + 0xc7, 0x01, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x42, 0x9c, 0x01, 0xba, 0x48, 0x98, 0x01, 0xba, 0x01, 0x94, 0x01, 0x0a, 0x1b, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x5f, + 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x49, 0x44, 0x20, 0x6d, 0x75, 0x73, + 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x69, + 0x66, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x44, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x6c, 0x6c, 0x28, 0x69, 0x74, 0x65, 0x6d, 0x2c, 0x20, 0x69, + 0x74, 0x65, 0x6d, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, + 0x7c, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x2e, 0x69, 0x64, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x29, + 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 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, 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, 0x74, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x79, + 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x15, 0x64, 0x79, 0x6e, + 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, + 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, + 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x13, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x22, 0x3c, 0x0a, 0x20, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 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, 0x74, 0x0a, 0x21, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, + 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, + 0x15, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6d, + 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x13, 0x64, 0x79, 0x6e, 0x61, 0x6d, + 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2a, 0xb2, + 0x01, 0x0a, 0x1c, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x30, 0x0a, 0x2c, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, + 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x53, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x2f, 0x0a, 0x2b, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, + 0x43, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x53, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, + 0x10, 0x01, 0x12, 0x2f, 0x0a, 0x2b, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, + 0x49, 0x43, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, + 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, + 0x54, 0x10, 0x02, 0x32, 0xa7, 0x06, 0x0a, 0x1a, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x9a, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, + 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x12, + 0x3b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, + 0x70, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x79, + 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, + 0x94, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x39, 0x2e, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, + 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, + 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, + 0x6e, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x9a, 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, + 0x70, 0x69, 0x6e, 0x67, 0x12, 0x3c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, + 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, + 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x9a, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x79, + 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x12, 0x3c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, + 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x3d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, + 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x9a, 0x01, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, + 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x3c, + 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, + 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x87, 0x02, + 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, + 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, + 0x42, 0x18, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, + 0x70, 0x70, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x42, 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, 0x64, 0x79, 0x6e, + 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, + 0xa2, 0x02, 0x03, 0x50, 0x44, 0x58, 0xaa, 0x02, 0x1a, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, + 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, + 0x69, 0x6e, 0x67, 0xca, 0x02, 0x1a, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x44, 0x79, 0x6e, + 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, + 0xe2, 0x02, 0x26, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, + 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5c, 0x47, 0x50, + 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1b, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x3a, 0x3a, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDescOnce sync.Once + file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDescData = file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDesc +) + +func file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDescGZIP() []byte { + file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDescOnce.Do(func() { + file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDescData = protoimpl.X.CompressGZIP(file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDescData) + }) + return file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDescData +} + +var file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_goTypes = []interface{}{ + (SortDynamicValueMappingsType)(0), // 0: policy.dynamicvaluemapping.SortDynamicValueMappingsType + (*GetDynamicValueMappingRequest)(nil), // 1: policy.dynamicvaluemapping.GetDynamicValueMappingRequest + (*GetDynamicValueMappingResponse)(nil), // 2: policy.dynamicvaluemapping.GetDynamicValueMappingResponse + (*DynamicValueMappingsSort)(nil), // 3: policy.dynamicvaluemapping.DynamicValueMappingsSort + (*ListDynamicValueMappingsRequest)(nil), // 4: policy.dynamicvaluemapping.ListDynamicValueMappingsRequest + (*ListDynamicValueMappingsResponse)(nil), // 5: policy.dynamicvaluemapping.ListDynamicValueMappingsResponse + (*CreateDynamicValueMappingRequest)(nil), // 6: policy.dynamicvaluemapping.CreateDynamicValueMappingRequest + (*CreateDynamicValueMappingResponse)(nil), // 7: policy.dynamicvaluemapping.CreateDynamicValueMappingResponse + (*UpdateDynamicValueMappingRequest)(nil), // 8: policy.dynamicvaluemapping.UpdateDynamicValueMappingRequest + (*UpdateDynamicValueMappingResponse)(nil), // 9: policy.dynamicvaluemapping.UpdateDynamicValueMappingResponse + (*DeleteDynamicValueMappingRequest)(nil), // 10: policy.dynamicvaluemapping.DeleteDynamicValueMappingRequest + (*DeleteDynamicValueMappingResponse)(nil), // 11: policy.dynamicvaluemapping.DeleteDynamicValueMappingResponse + (*policy.DynamicValueMapping)(nil), // 12: policy.DynamicValueMapping + (policy.SortDirection)(0), // 13: policy.SortDirection + (*policy.PageRequest)(nil), // 14: policy.PageRequest + (*policy.PageResponse)(nil), // 15: policy.PageResponse + (*policy.DynamicValueResolver)(nil), // 16: policy.DynamicValueResolver + (*policy.Action)(nil), // 17: policy.Action + (*subjectmapping.SubjectConditionSetCreate)(nil), // 18: policy.subjectmapping.SubjectConditionSetCreate + (*common.MetadataMutable)(nil), // 19: common.MetadataMutable + (common.MetadataUpdateEnum)(0), // 20: common.MetadataUpdateEnum +} +var file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_depIdxs = []int32{ + 12, // 0: policy.dynamicvaluemapping.GetDynamicValueMappingResponse.dynamic_value_mapping:type_name -> policy.DynamicValueMapping + 0, // 1: policy.dynamicvaluemapping.DynamicValueMappingsSort.field:type_name -> policy.dynamicvaluemapping.SortDynamicValueMappingsType + 13, // 2: policy.dynamicvaluemapping.DynamicValueMappingsSort.direction:type_name -> policy.SortDirection + 14, // 3: policy.dynamicvaluemapping.ListDynamicValueMappingsRequest.pagination:type_name -> policy.PageRequest + 3, // 4: policy.dynamicvaluemapping.ListDynamicValueMappingsRequest.sort:type_name -> policy.dynamicvaluemapping.DynamicValueMappingsSort + 12, // 5: policy.dynamicvaluemapping.ListDynamicValueMappingsResponse.dynamic_value_mappings:type_name -> policy.DynamicValueMapping + 15, // 6: policy.dynamicvaluemapping.ListDynamicValueMappingsResponse.pagination:type_name -> policy.PageResponse + 16, // 7: policy.dynamicvaluemapping.CreateDynamicValueMappingRequest.value_resolver:type_name -> policy.DynamicValueResolver + 17, // 8: policy.dynamicvaluemapping.CreateDynamicValueMappingRequest.actions:type_name -> policy.Action + 18, // 9: policy.dynamicvaluemapping.CreateDynamicValueMappingRequest.new_subject_condition_set:type_name -> policy.subjectmapping.SubjectConditionSetCreate + 19, // 10: policy.dynamicvaluemapping.CreateDynamicValueMappingRequest.metadata:type_name -> common.MetadataMutable + 12, // 11: policy.dynamicvaluemapping.CreateDynamicValueMappingResponse.dynamic_value_mapping:type_name -> policy.DynamicValueMapping + 16, // 12: policy.dynamicvaluemapping.UpdateDynamicValueMappingRequest.value_resolver:type_name -> policy.DynamicValueResolver + 17, // 13: policy.dynamicvaluemapping.UpdateDynamicValueMappingRequest.actions:type_name -> policy.Action + 19, // 14: policy.dynamicvaluemapping.UpdateDynamicValueMappingRequest.metadata:type_name -> common.MetadataMutable + 20, // 15: policy.dynamicvaluemapping.UpdateDynamicValueMappingRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum + 12, // 16: policy.dynamicvaluemapping.UpdateDynamicValueMappingResponse.dynamic_value_mapping:type_name -> policy.DynamicValueMapping + 12, // 17: policy.dynamicvaluemapping.DeleteDynamicValueMappingResponse.dynamic_value_mapping:type_name -> policy.DynamicValueMapping + 4, // 18: policy.dynamicvaluemapping.DynamicValueMappingService.ListDynamicValueMappings:input_type -> policy.dynamicvaluemapping.ListDynamicValueMappingsRequest + 1, // 19: policy.dynamicvaluemapping.DynamicValueMappingService.GetDynamicValueMapping:input_type -> policy.dynamicvaluemapping.GetDynamicValueMappingRequest + 6, // 20: policy.dynamicvaluemapping.DynamicValueMappingService.CreateDynamicValueMapping:input_type -> policy.dynamicvaluemapping.CreateDynamicValueMappingRequest + 8, // 21: policy.dynamicvaluemapping.DynamicValueMappingService.UpdateDynamicValueMapping:input_type -> policy.dynamicvaluemapping.UpdateDynamicValueMappingRequest + 10, // 22: policy.dynamicvaluemapping.DynamicValueMappingService.DeleteDynamicValueMapping:input_type -> policy.dynamicvaluemapping.DeleteDynamicValueMappingRequest + 5, // 23: policy.dynamicvaluemapping.DynamicValueMappingService.ListDynamicValueMappings:output_type -> policy.dynamicvaluemapping.ListDynamicValueMappingsResponse + 2, // 24: policy.dynamicvaluemapping.DynamicValueMappingService.GetDynamicValueMapping:output_type -> policy.dynamicvaluemapping.GetDynamicValueMappingResponse + 7, // 25: policy.dynamicvaluemapping.DynamicValueMappingService.CreateDynamicValueMapping:output_type -> policy.dynamicvaluemapping.CreateDynamicValueMappingResponse + 9, // 26: policy.dynamicvaluemapping.DynamicValueMappingService.UpdateDynamicValueMapping:output_type -> policy.dynamicvaluemapping.UpdateDynamicValueMappingResponse + 11, // 27: policy.dynamicvaluemapping.DynamicValueMappingService.DeleteDynamicValueMapping:output_type -> policy.dynamicvaluemapping.DeleteDynamicValueMappingResponse + 23, // [23:28] is the sub-list for method output_type + 18, // [18:23] is the sub-list for method input_type + 18, // [18:18] is the sub-list for extension type_name + 18, // [18:18] is the sub-list for extension extendee + 0, // [0:18] is the sub-list for field type_name +} + +func init() { file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_init() } +func file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_init() { + if File_policy_dynamicvaluemapping_dynamic_value_mapping_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetDynamicValueMappingRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetDynamicValueMappingResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DynamicValueMappingsSort); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListDynamicValueMappingsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListDynamicValueMappingsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateDynamicValueMappingRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateDynamicValueMappingResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateDynamicValueMappingRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateDynamicValueMappingResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteDynamicValueMappingRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteDynamicValueMappingResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDesc, + NumEnums: 1, + NumMessages: 11, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_goTypes, + DependencyIndexes: file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_depIdxs, + EnumInfos: file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_enumTypes, + MessageInfos: file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_msgTypes, + }.Build() + File_policy_dynamicvaluemapping_dynamic_value_mapping_proto = out.File + file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDesc = nil + file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_goTypes = nil + file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_depIdxs = nil +} diff --git a/protocol/go/policy/dynamicvaluemapping/dynamic_value_mapping_grpc.pb.go b/protocol/go/policy/dynamicvaluemapping/dynamic_value_mapping_grpc.pb.go new file mode 100644 index 0000000000..513595f0ef --- /dev/null +++ b/protocol/go/policy/dynamicvaluemapping/dynamic_value_mapping_grpc.pb.go @@ -0,0 +1,258 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc (unknown) +// source: policy/dynamicvaluemapping/dynamic_value_mapping.proto + +package dynamicvaluemapping + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + DynamicValueMappingService_ListDynamicValueMappings_FullMethodName = "/policy.dynamicvaluemapping.DynamicValueMappingService/ListDynamicValueMappings" + DynamicValueMappingService_GetDynamicValueMapping_FullMethodName = "/policy.dynamicvaluemapping.DynamicValueMappingService/GetDynamicValueMapping" + DynamicValueMappingService_CreateDynamicValueMapping_FullMethodName = "/policy.dynamicvaluemapping.DynamicValueMappingService/CreateDynamicValueMapping" + DynamicValueMappingService_UpdateDynamicValueMapping_FullMethodName = "/policy.dynamicvaluemapping.DynamicValueMappingService/UpdateDynamicValueMapping" + DynamicValueMappingService_DeleteDynamicValueMapping_FullMethodName = "/policy.dynamicvaluemapping.DynamicValueMappingService/DeleteDynamicValueMapping" +) + +// DynamicValueMappingServiceClient is the client API for DynamicValueMappingService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type DynamicValueMappingServiceClient interface { + ListDynamicValueMappings(ctx context.Context, in *ListDynamicValueMappingsRequest, opts ...grpc.CallOption) (*ListDynamicValueMappingsResponse, error) + GetDynamicValueMapping(ctx context.Context, in *GetDynamicValueMappingRequest, opts ...grpc.CallOption) (*GetDynamicValueMappingResponse, error) + CreateDynamicValueMapping(ctx context.Context, in *CreateDynamicValueMappingRequest, opts ...grpc.CallOption) (*CreateDynamicValueMappingResponse, error) + UpdateDynamicValueMapping(ctx context.Context, in *UpdateDynamicValueMappingRequest, opts ...grpc.CallOption) (*UpdateDynamicValueMappingResponse, error) + DeleteDynamicValueMapping(ctx context.Context, in *DeleteDynamicValueMappingRequest, opts ...grpc.CallOption) (*DeleteDynamicValueMappingResponse, error) +} + +type dynamicValueMappingServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewDynamicValueMappingServiceClient(cc grpc.ClientConnInterface) DynamicValueMappingServiceClient { + return &dynamicValueMappingServiceClient{cc} +} + +func (c *dynamicValueMappingServiceClient) ListDynamicValueMappings(ctx context.Context, in *ListDynamicValueMappingsRequest, opts ...grpc.CallOption) (*ListDynamicValueMappingsResponse, error) { + out := new(ListDynamicValueMappingsResponse) + err := c.cc.Invoke(ctx, DynamicValueMappingService_ListDynamicValueMappings_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dynamicValueMappingServiceClient) GetDynamicValueMapping(ctx context.Context, in *GetDynamicValueMappingRequest, opts ...grpc.CallOption) (*GetDynamicValueMappingResponse, error) { + out := new(GetDynamicValueMappingResponse) + err := c.cc.Invoke(ctx, DynamicValueMappingService_GetDynamicValueMapping_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dynamicValueMappingServiceClient) CreateDynamicValueMapping(ctx context.Context, in *CreateDynamicValueMappingRequest, opts ...grpc.CallOption) (*CreateDynamicValueMappingResponse, error) { + out := new(CreateDynamicValueMappingResponse) + err := c.cc.Invoke(ctx, DynamicValueMappingService_CreateDynamicValueMapping_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dynamicValueMappingServiceClient) UpdateDynamicValueMapping(ctx context.Context, in *UpdateDynamicValueMappingRequest, opts ...grpc.CallOption) (*UpdateDynamicValueMappingResponse, error) { + out := new(UpdateDynamicValueMappingResponse) + err := c.cc.Invoke(ctx, DynamicValueMappingService_UpdateDynamicValueMapping_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dynamicValueMappingServiceClient) DeleteDynamicValueMapping(ctx context.Context, in *DeleteDynamicValueMappingRequest, opts ...grpc.CallOption) (*DeleteDynamicValueMappingResponse, error) { + out := new(DeleteDynamicValueMappingResponse) + err := c.cc.Invoke(ctx, DynamicValueMappingService_DeleteDynamicValueMapping_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// DynamicValueMappingServiceServer is the server API for DynamicValueMappingService service. +// All implementations must embed UnimplementedDynamicValueMappingServiceServer +// for forward compatibility +type DynamicValueMappingServiceServer interface { + ListDynamicValueMappings(context.Context, *ListDynamicValueMappingsRequest) (*ListDynamicValueMappingsResponse, error) + GetDynamicValueMapping(context.Context, *GetDynamicValueMappingRequest) (*GetDynamicValueMappingResponse, error) + CreateDynamicValueMapping(context.Context, *CreateDynamicValueMappingRequest) (*CreateDynamicValueMappingResponse, error) + UpdateDynamicValueMapping(context.Context, *UpdateDynamicValueMappingRequest) (*UpdateDynamicValueMappingResponse, error) + DeleteDynamicValueMapping(context.Context, *DeleteDynamicValueMappingRequest) (*DeleteDynamicValueMappingResponse, error) + mustEmbedUnimplementedDynamicValueMappingServiceServer() +} + +// UnimplementedDynamicValueMappingServiceServer must be embedded to have forward compatible implementations. +type UnimplementedDynamicValueMappingServiceServer struct { +} + +func (UnimplementedDynamicValueMappingServiceServer) ListDynamicValueMappings(context.Context, *ListDynamicValueMappingsRequest) (*ListDynamicValueMappingsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListDynamicValueMappings not implemented") +} +func (UnimplementedDynamicValueMappingServiceServer) GetDynamicValueMapping(context.Context, *GetDynamicValueMappingRequest) (*GetDynamicValueMappingResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDynamicValueMapping not implemented") +} +func (UnimplementedDynamicValueMappingServiceServer) CreateDynamicValueMapping(context.Context, *CreateDynamicValueMappingRequest) (*CreateDynamicValueMappingResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateDynamicValueMapping not implemented") +} +func (UnimplementedDynamicValueMappingServiceServer) UpdateDynamicValueMapping(context.Context, *UpdateDynamicValueMappingRequest) (*UpdateDynamicValueMappingResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateDynamicValueMapping not implemented") +} +func (UnimplementedDynamicValueMappingServiceServer) DeleteDynamicValueMapping(context.Context, *DeleteDynamicValueMappingRequest) (*DeleteDynamicValueMappingResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteDynamicValueMapping not implemented") +} +func (UnimplementedDynamicValueMappingServiceServer) mustEmbedUnimplementedDynamicValueMappingServiceServer() { +} + +// UnsafeDynamicValueMappingServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to DynamicValueMappingServiceServer will +// result in compilation errors. +type UnsafeDynamicValueMappingServiceServer interface { + mustEmbedUnimplementedDynamicValueMappingServiceServer() +} + +func RegisterDynamicValueMappingServiceServer(s grpc.ServiceRegistrar, srv DynamicValueMappingServiceServer) { + s.RegisterService(&DynamicValueMappingService_ServiceDesc, srv) +} + +func _DynamicValueMappingService_ListDynamicValueMappings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListDynamicValueMappingsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DynamicValueMappingServiceServer).ListDynamicValueMappings(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: DynamicValueMappingService_ListDynamicValueMappings_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DynamicValueMappingServiceServer).ListDynamicValueMappings(ctx, req.(*ListDynamicValueMappingsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DynamicValueMappingService_GetDynamicValueMapping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDynamicValueMappingRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DynamicValueMappingServiceServer).GetDynamicValueMapping(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: DynamicValueMappingService_GetDynamicValueMapping_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DynamicValueMappingServiceServer).GetDynamicValueMapping(ctx, req.(*GetDynamicValueMappingRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DynamicValueMappingService_CreateDynamicValueMapping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateDynamicValueMappingRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DynamicValueMappingServiceServer).CreateDynamicValueMapping(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: DynamicValueMappingService_CreateDynamicValueMapping_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DynamicValueMappingServiceServer).CreateDynamicValueMapping(ctx, req.(*CreateDynamicValueMappingRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DynamicValueMappingService_UpdateDynamicValueMapping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateDynamicValueMappingRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DynamicValueMappingServiceServer).UpdateDynamicValueMapping(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: DynamicValueMappingService_UpdateDynamicValueMapping_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DynamicValueMappingServiceServer).UpdateDynamicValueMapping(ctx, req.(*UpdateDynamicValueMappingRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DynamicValueMappingService_DeleteDynamicValueMapping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteDynamicValueMappingRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DynamicValueMappingServiceServer).DeleteDynamicValueMapping(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: DynamicValueMappingService_DeleteDynamicValueMapping_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DynamicValueMappingServiceServer).DeleteDynamicValueMapping(ctx, req.(*DeleteDynamicValueMappingRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// DynamicValueMappingService_ServiceDesc is the grpc.ServiceDesc for DynamicValueMappingService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var DynamicValueMappingService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "policy.dynamicvaluemapping.DynamicValueMappingService", + HandlerType: (*DynamicValueMappingServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListDynamicValueMappings", + Handler: _DynamicValueMappingService_ListDynamicValueMappings_Handler, + }, + { + MethodName: "GetDynamicValueMapping", + Handler: _DynamicValueMappingService_GetDynamicValueMapping_Handler, + }, + { + MethodName: "CreateDynamicValueMapping", + Handler: _DynamicValueMappingService_CreateDynamicValueMapping_Handler, + }, + { + MethodName: "UpdateDynamicValueMapping", + Handler: _DynamicValueMappingService_UpdateDynamicValueMapping_Handler, + }, + { + MethodName: "DeleteDynamicValueMapping", + Handler: _DynamicValueMappingService_DeleteDynamicValueMapping_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "policy/dynamicvaluemapping/dynamic_value_mapping.proto", +} diff --git a/protocol/go/policy/dynamicvaluemapping/dynamicvaluemappingconnect/dynamic_value_mapping.connect.go b/protocol/go/policy/dynamicvaluemapping/dynamicvaluemappingconnect/dynamic_value_mapping.connect.go new file mode 100644 index 0000000000..dfe90334f5 --- /dev/null +++ b/protocol/go/policy/dynamicvaluemapping/dynamicvaluemappingconnect/dynamic_value_mapping.connect.go @@ -0,0 +1,238 @@ +// Code generated by protoc-gen-connect-go. DO NOT EDIT. +// +// Source: policy/dynamicvaluemapping/dynamic_value_mapping.proto + +package dynamicvaluemappingconnect + +import ( + connect "connectrpc.com/connect" + context "context" + errors "errors" + dynamicvaluemapping "github.com/opentdf/platform/protocol/go/policy/dynamicvaluemapping" + http "net/http" + strings "strings" +) + +// This is a compile-time assertion to ensure that this generated file and the connect package are +// compatible. If you get a compiler error that this constant is not defined, this code was +// generated with a version of connect newer than the one compiled into your binary. You can fix the +// problem by either regenerating this code with an older version of connect or updating the connect +// version compiled into your binary. +const _ = connect.IsAtLeastVersion1_13_0 + +const ( + // DynamicValueMappingServiceName is the fully-qualified name of the DynamicValueMappingService + // service. + DynamicValueMappingServiceName = "policy.dynamicvaluemapping.DynamicValueMappingService" +) + +// These constants are the fully-qualified names of the RPCs defined in this package. They're +// exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route. +// +// Note that these are different from the fully-qualified method names used by +// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to +// reflection-formatted method names, remove the leading slash and convert the remaining slash to a +// period. +const ( + // DynamicValueMappingServiceListDynamicValueMappingsProcedure is the fully-qualified name of the + // DynamicValueMappingService's ListDynamicValueMappings RPC. + DynamicValueMappingServiceListDynamicValueMappingsProcedure = "/policy.dynamicvaluemapping.DynamicValueMappingService/ListDynamicValueMappings" + // DynamicValueMappingServiceGetDynamicValueMappingProcedure is the fully-qualified name of the + // DynamicValueMappingService's GetDynamicValueMapping RPC. + DynamicValueMappingServiceGetDynamicValueMappingProcedure = "/policy.dynamicvaluemapping.DynamicValueMappingService/GetDynamicValueMapping" + // DynamicValueMappingServiceCreateDynamicValueMappingProcedure is the fully-qualified name of the + // DynamicValueMappingService's CreateDynamicValueMapping RPC. + DynamicValueMappingServiceCreateDynamicValueMappingProcedure = "/policy.dynamicvaluemapping.DynamicValueMappingService/CreateDynamicValueMapping" + // DynamicValueMappingServiceUpdateDynamicValueMappingProcedure is the fully-qualified name of the + // DynamicValueMappingService's UpdateDynamicValueMapping RPC. + DynamicValueMappingServiceUpdateDynamicValueMappingProcedure = "/policy.dynamicvaluemapping.DynamicValueMappingService/UpdateDynamicValueMapping" + // DynamicValueMappingServiceDeleteDynamicValueMappingProcedure is the fully-qualified name of the + // DynamicValueMappingService's DeleteDynamicValueMapping RPC. + DynamicValueMappingServiceDeleteDynamicValueMappingProcedure = "/policy.dynamicvaluemapping.DynamicValueMappingService/DeleteDynamicValueMapping" +) + +// DynamicValueMappingServiceClient is a client for the +// policy.dynamicvaluemapping.DynamicValueMappingService service. +type DynamicValueMappingServiceClient interface { + ListDynamicValueMappings(context.Context, *connect.Request[dynamicvaluemapping.ListDynamicValueMappingsRequest]) (*connect.Response[dynamicvaluemapping.ListDynamicValueMappingsResponse], error) + GetDynamicValueMapping(context.Context, *connect.Request[dynamicvaluemapping.GetDynamicValueMappingRequest]) (*connect.Response[dynamicvaluemapping.GetDynamicValueMappingResponse], error) + CreateDynamicValueMapping(context.Context, *connect.Request[dynamicvaluemapping.CreateDynamicValueMappingRequest]) (*connect.Response[dynamicvaluemapping.CreateDynamicValueMappingResponse], error) + UpdateDynamicValueMapping(context.Context, *connect.Request[dynamicvaluemapping.UpdateDynamicValueMappingRequest]) (*connect.Response[dynamicvaluemapping.UpdateDynamicValueMappingResponse], error) + DeleteDynamicValueMapping(context.Context, *connect.Request[dynamicvaluemapping.DeleteDynamicValueMappingRequest]) (*connect.Response[dynamicvaluemapping.DeleteDynamicValueMappingResponse], error) +} + +// NewDynamicValueMappingServiceClient constructs a client for the +// policy.dynamicvaluemapping.DynamicValueMappingService service. By default, it uses the Connect +// protocol with the binary Protobuf Codec, asks for gzipped responses, and sends uncompressed +// requests. To use the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() or +// connect.WithGRPCWeb() options. +// +// The URL supplied here should be the base URL for the Connect or gRPC server (for example, +// http://api.acme.com or https://acme.com/grpc). +func NewDynamicValueMappingServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) DynamicValueMappingServiceClient { + baseURL = strings.TrimRight(baseURL, "/") + dynamicValueMappingServiceMethods := dynamicvaluemapping.File_policy_dynamicvaluemapping_dynamic_value_mapping_proto.Services().ByName("DynamicValueMappingService").Methods() + return &dynamicValueMappingServiceClient{ + listDynamicValueMappings: connect.NewClient[dynamicvaluemapping.ListDynamicValueMappingsRequest, dynamicvaluemapping.ListDynamicValueMappingsResponse]( + httpClient, + baseURL+DynamicValueMappingServiceListDynamicValueMappingsProcedure, + connect.WithSchema(dynamicValueMappingServiceMethods.ByName("ListDynamicValueMappings")), + connect.WithIdempotency(connect.IdempotencyNoSideEffects), + connect.WithClientOptions(opts...), + ), + getDynamicValueMapping: connect.NewClient[dynamicvaluemapping.GetDynamicValueMappingRequest, dynamicvaluemapping.GetDynamicValueMappingResponse]( + httpClient, + baseURL+DynamicValueMappingServiceGetDynamicValueMappingProcedure, + connect.WithSchema(dynamicValueMappingServiceMethods.ByName("GetDynamicValueMapping")), + connect.WithIdempotency(connect.IdempotencyNoSideEffects), + connect.WithClientOptions(opts...), + ), + createDynamicValueMapping: connect.NewClient[dynamicvaluemapping.CreateDynamicValueMappingRequest, dynamicvaluemapping.CreateDynamicValueMappingResponse]( + httpClient, + baseURL+DynamicValueMappingServiceCreateDynamicValueMappingProcedure, + connect.WithSchema(dynamicValueMappingServiceMethods.ByName("CreateDynamicValueMapping")), + connect.WithClientOptions(opts...), + ), + updateDynamicValueMapping: connect.NewClient[dynamicvaluemapping.UpdateDynamicValueMappingRequest, dynamicvaluemapping.UpdateDynamicValueMappingResponse]( + httpClient, + baseURL+DynamicValueMappingServiceUpdateDynamicValueMappingProcedure, + connect.WithSchema(dynamicValueMappingServiceMethods.ByName("UpdateDynamicValueMapping")), + connect.WithClientOptions(opts...), + ), + deleteDynamicValueMapping: connect.NewClient[dynamicvaluemapping.DeleteDynamicValueMappingRequest, dynamicvaluemapping.DeleteDynamicValueMappingResponse]( + httpClient, + baseURL+DynamicValueMappingServiceDeleteDynamicValueMappingProcedure, + connect.WithSchema(dynamicValueMappingServiceMethods.ByName("DeleteDynamicValueMapping")), + connect.WithClientOptions(opts...), + ), + } +} + +// dynamicValueMappingServiceClient implements DynamicValueMappingServiceClient. +type dynamicValueMappingServiceClient struct { + listDynamicValueMappings *connect.Client[dynamicvaluemapping.ListDynamicValueMappingsRequest, dynamicvaluemapping.ListDynamicValueMappingsResponse] + getDynamicValueMapping *connect.Client[dynamicvaluemapping.GetDynamicValueMappingRequest, dynamicvaluemapping.GetDynamicValueMappingResponse] + createDynamicValueMapping *connect.Client[dynamicvaluemapping.CreateDynamicValueMappingRequest, dynamicvaluemapping.CreateDynamicValueMappingResponse] + updateDynamicValueMapping *connect.Client[dynamicvaluemapping.UpdateDynamicValueMappingRequest, dynamicvaluemapping.UpdateDynamicValueMappingResponse] + deleteDynamicValueMapping *connect.Client[dynamicvaluemapping.DeleteDynamicValueMappingRequest, dynamicvaluemapping.DeleteDynamicValueMappingResponse] +} + +// ListDynamicValueMappings calls +// policy.dynamicvaluemapping.DynamicValueMappingService.ListDynamicValueMappings. +func (c *dynamicValueMappingServiceClient) ListDynamicValueMappings(ctx context.Context, req *connect.Request[dynamicvaluemapping.ListDynamicValueMappingsRequest]) (*connect.Response[dynamicvaluemapping.ListDynamicValueMappingsResponse], error) { + return c.listDynamicValueMappings.CallUnary(ctx, req) +} + +// GetDynamicValueMapping calls +// policy.dynamicvaluemapping.DynamicValueMappingService.GetDynamicValueMapping. +func (c *dynamicValueMappingServiceClient) GetDynamicValueMapping(ctx context.Context, req *connect.Request[dynamicvaluemapping.GetDynamicValueMappingRequest]) (*connect.Response[dynamicvaluemapping.GetDynamicValueMappingResponse], error) { + return c.getDynamicValueMapping.CallUnary(ctx, req) +} + +// CreateDynamicValueMapping calls +// policy.dynamicvaluemapping.DynamicValueMappingService.CreateDynamicValueMapping. +func (c *dynamicValueMappingServiceClient) CreateDynamicValueMapping(ctx context.Context, req *connect.Request[dynamicvaluemapping.CreateDynamicValueMappingRequest]) (*connect.Response[dynamicvaluemapping.CreateDynamicValueMappingResponse], error) { + return c.createDynamicValueMapping.CallUnary(ctx, req) +} + +// UpdateDynamicValueMapping calls +// policy.dynamicvaluemapping.DynamicValueMappingService.UpdateDynamicValueMapping. +func (c *dynamicValueMappingServiceClient) UpdateDynamicValueMapping(ctx context.Context, req *connect.Request[dynamicvaluemapping.UpdateDynamicValueMappingRequest]) (*connect.Response[dynamicvaluemapping.UpdateDynamicValueMappingResponse], error) { + return c.updateDynamicValueMapping.CallUnary(ctx, req) +} + +// DeleteDynamicValueMapping calls +// policy.dynamicvaluemapping.DynamicValueMappingService.DeleteDynamicValueMapping. +func (c *dynamicValueMappingServiceClient) DeleteDynamicValueMapping(ctx context.Context, req *connect.Request[dynamicvaluemapping.DeleteDynamicValueMappingRequest]) (*connect.Response[dynamicvaluemapping.DeleteDynamicValueMappingResponse], error) { + return c.deleteDynamicValueMapping.CallUnary(ctx, req) +} + +// DynamicValueMappingServiceHandler is an implementation of the +// policy.dynamicvaluemapping.DynamicValueMappingService service. +type DynamicValueMappingServiceHandler interface { + ListDynamicValueMappings(context.Context, *connect.Request[dynamicvaluemapping.ListDynamicValueMappingsRequest]) (*connect.Response[dynamicvaluemapping.ListDynamicValueMappingsResponse], error) + GetDynamicValueMapping(context.Context, *connect.Request[dynamicvaluemapping.GetDynamicValueMappingRequest]) (*connect.Response[dynamicvaluemapping.GetDynamicValueMappingResponse], error) + CreateDynamicValueMapping(context.Context, *connect.Request[dynamicvaluemapping.CreateDynamicValueMappingRequest]) (*connect.Response[dynamicvaluemapping.CreateDynamicValueMappingResponse], error) + UpdateDynamicValueMapping(context.Context, *connect.Request[dynamicvaluemapping.UpdateDynamicValueMappingRequest]) (*connect.Response[dynamicvaluemapping.UpdateDynamicValueMappingResponse], error) + DeleteDynamicValueMapping(context.Context, *connect.Request[dynamicvaluemapping.DeleteDynamicValueMappingRequest]) (*connect.Response[dynamicvaluemapping.DeleteDynamicValueMappingResponse], error) +} + +// NewDynamicValueMappingServiceHandler builds an HTTP handler from the service implementation. It +// returns the path on which to mount the handler and the handler itself. +// +// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf +// and JSON codecs. They also support gzip compression. +func NewDynamicValueMappingServiceHandler(svc DynamicValueMappingServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { + dynamicValueMappingServiceMethods := dynamicvaluemapping.File_policy_dynamicvaluemapping_dynamic_value_mapping_proto.Services().ByName("DynamicValueMappingService").Methods() + dynamicValueMappingServiceListDynamicValueMappingsHandler := connect.NewUnaryHandler( + DynamicValueMappingServiceListDynamicValueMappingsProcedure, + svc.ListDynamicValueMappings, + connect.WithSchema(dynamicValueMappingServiceMethods.ByName("ListDynamicValueMappings")), + connect.WithIdempotency(connect.IdempotencyNoSideEffects), + connect.WithHandlerOptions(opts...), + ) + dynamicValueMappingServiceGetDynamicValueMappingHandler := connect.NewUnaryHandler( + DynamicValueMappingServiceGetDynamicValueMappingProcedure, + svc.GetDynamicValueMapping, + connect.WithSchema(dynamicValueMappingServiceMethods.ByName("GetDynamicValueMapping")), + connect.WithIdempotency(connect.IdempotencyNoSideEffects), + connect.WithHandlerOptions(opts...), + ) + dynamicValueMappingServiceCreateDynamicValueMappingHandler := connect.NewUnaryHandler( + DynamicValueMappingServiceCreateDynamicValueMappingProcedure, + svc.CreateDynamicValueMapping, + connect.WithSchema(dynamicValueMappingServiceMethods.ByName("CreateDynamicValueMapping")), + connect.WithHandlerOptions(opts...), + ) + dynamicValueMappingServiceUpdateDynamicValueMappingHandler := connect.NewUnaryHandler( + DynamicValueMappingServiceUpdateDynamicValueMappingProcedure, + svc.UpdateDynamicValueMapping, + connect.WithSchema(dynamicValueMappingServiceMethods.ByName("UpdateDynamicValueMapping")), + connect.WithHandlerOptions(opts...), + ) + dynamicValueMappingServiceDeleteDynamicValueMappingHandler := connect.NewUnaryHandler( + DynamicValueMappingServiceDeleteDynamicValueMappingProcedure, + svc.DeleteDynamicValueMapping, + connect.WithSchema(dynamicValueMappingServiceMethods.ByName("DeleteDynamicValueMapping")), + connect.WithHandlerOptions(opts...), + ) + return "/policy.dynamicvaluemapping.DynamicValueMappingService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case DynamicValueMappingServiceListDynamicValueMappingsProcedure: + dynamicValueMappingServiceListDynamicValueMappingsHandler.ServeHTTP(w, r) + case DynamicValueMappingServiceGetDynamicValueMappingProcedure: + dynamicValueMappingServiceGetDynamicValueMappingHandler.ServeHTTP(w, r) + case DynamicValueMappingServiceCreateDynamicValueMappingProcedure: + dynamicValueMappingServiceCreateDynamicValueMappingHandler.ServeHTTP(w, r) + case DynamicValueMappingServiceUpdateDynamicValueMappingProcedure: + dynamicValueMappingServiceUpdateDynamicValueMappingHandler.ServeHTTP(w, r) + case DynamicValueMappingServiceDeleteDynamicValueMappingProcedure: + dynamicValueMappingServiceDeleteDynamicValueMappingHandler.ServeHTTP(w, r) + default: + http.NotFound(w, r) + } + }) +} + +// UnimplementedDynamicValueMappingServiceHandler returns CodeUnimplemented from all methods. +type UnimplementedDynamicValueMappingServiceHandler struct{} + +func (UnimplementedDynamicValueMappingServiceHandler) ListDynamicValueMappings(context.Context, *connect.Request[dynamicvaluemapping.ListDynamicValueMappingsRequest]) (*connect.Response[dynamicvaluemapping.ListDynamicValueMappingsResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("policy.dynamicvaluemapping.DynamicValueMappingService.ListDynamicValueMappings is not implemented")) +} + +func (UnimplementedDynamicValueMappingServiceHandler) GetDynamicValueMapping(context.Context, *connect.Request[dynamicvaluemapping.GetDynamicValueMappingRequest]) (*connect.Response[dynamicvaluemapping.GetDynamicValueMappingResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("policy.dynamicvaluemapping.DynamicValueMappingService.GetDynamicValueMapping is not implemented")) +} + +func (UnimplementedDynamicValueMappingServiceHandler) CreateDynamicValueMapping(context.Context, *connect.Request[dynamicvaluemapping.CreateDynamicValueMappingRequest]) (*connect.Response[dynamicvaluemapping.CreateDynamicValueMappingResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("policy.dynamicvaluemapping.DynamicValueMappingService.CreateDynamicValueMapping is not implemented")) +} + +func (UnimplementedDynamicValueMappingServiceHandler) UpdateDynamicValueMapping(context.Context, *connect.Request[dynamicvaluemapping.UpdateDynamicValueMappingRequest]) (*connect.Response[dynamicvaluemapping.UpdateDynamicValueMappingResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("policy.dynamicvaluemapping.DynamicValueMappingService.UpdateDynamicValueMapping is not implemented")) +} + +func (UnimplementedDynamicValueMappingServiceHandler) DeleteDynamicValueMapping(context.Context, *connect.Request[dynamicvaluemapping.DeleteDynamicValueMappingRequest]) (*connect.Response[dynamicvaluemapping.DeleteDynamicValueMappingResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("policy.dynamicvaluemapping.DynamicValueMappingService.DeleteDynamicValueMapping is not implemented")) +} diff --git a/protocol/go/policy/objects.pb.go b/protocol/go/policy/objects.pb.go index 1e386a7531..4d90965eda 100644 --- a/protocol/go/policy/objects.pb.go +++ b/protocol/go/policy/objects.pb.go @@ -180,6 +180,64 @@ func (ConditionBooleanTypeEnum) EnumDescriptor() ([]byte, []int) { return file_policy_objects_proto_rawDescGZIP(), []int{2} } +// Operators for dynamic, definition-level value entitlement. Unlike +// SubjectMappingOperatorEnum, whose right-hand operand is a static list authored into +// policy, a DynamicValueOperatorEnum's right-hand operand is the requested resource's +// attribute value segment, supplied at decision time. Each value is the inversion of its +// static SubjectMappingOperatorEnum counterpart. +type DynamicValueOperatorEnum int32 + +const ( + DynamicValueOperatorEnum_DYNAMIC_VALUE_OPERATOR_ENUM_UNSPECIFIED DynamicValueOperatorEnum = 0 + // true when the requested resource value segment equals one of the values resolved by + // the selector against the entity representation (inversion of IN) + DynamicValueOperatorEnum_DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN DynamicValueOperatorEnum = 1 + // true when one of the selector-resolved entity values contains the requested resource + // value segment as a substring (inversion of IN_CONTAINS) + DynamicValueOperatorEnum_DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN_CONTAINS DynamicValueOperatorEnum = 2 +) + +// Enum value maps for DynamicValueOperatorEnum. +var ( + DynamicValueOperatorEnum_name = map[int32]string{ + 0: "DYNAMIC_VALUE_OPERATOR_ENUM_UNSPECIFIED", + 1: "DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN", + 2: "DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN_CONTAINS", + } + DynamicValueOperatorEnum_value = map[string]int32{ + "DYNAMIC_VALUE_OPERATOR_ENUM_UNSPECIFIED": 0, + "DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN": 1, + "DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN_CONTAINS": 2, + } +) + +func (x DynamicValueOperatorEnum) Enum() *DynamicValueOperatorEnum { + p := new(DynamicValueOperatorEnum) + *p = x + return p +} + +func (x DynamicValueOperatorEnum) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (DynamicValueOperatorEnum) Descriptor() protoreflect.EnumDescriptor { + return file_policy_objects_proto_enumTypes[3].Descriptor() +} + +func (DynamicValueOperatorEnum) Type() protoreflect.EnumType { + return &file_policy_objects_proto_enumTypes[3] +} + +func (x DynamicValueOperatorEnum) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use DynamicValueOperatorEnum.Descriptor instead. +func (DynamicValueOperatorEnum) EnumDescriptor() ([]byte, []int) { + return file_policy_objects_proto_rawDescGZIP(), []int{3} +} + // Describes whether this kas is managed by the organization or if they imported // the kas information from an external party. These two modes are necessary in order // to encrypt a tdf dek with an external parties kas public key. @@ -218,11 +276,11 @@ func (x SourceType) String() string { } func (SourceType) Descriptor() protoreflect.EnumDescriptor { - return file_policy_objects_proto_enumTypes[3].Descriptor() + return file_policy_objects_proto_enumTypes[4].Descriptor() } func (SourceType) Type() protoreflect.EnumType { - return &file_policy_objects_proto_enumTypes[3] + return &file_policy_objects_proto_enumTypes[4] } func (x SourceType) Number() protoreflect.EnumNumber { @@ -231,7 +289,7 @@ func (x SourceType) Number() protoreflect.EnumNumber { // Deprecated: Use SourceType.Descriptor instead. func (SourceType) EnumDescriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{3} + return file_policy_objects_proto_rawDescGZIP(), []int{4} } type KasPublicKeyAlgEnum int32 @@ -285,11 +343,11 @@ func (x KasPublicKeyAlgEnum) String() string { } func (KasPublicKeyAlgEnum) Descriptor() protoreflect.EnumDescriptor { - return file_policy_objects_proto_enumTypes[4].Descriptor() + return file_policy_objects_proto_enumTypes[5].Descriptor() } func (KasPublicKeyAlgEnum) Type() protoreflect.EnumType { - return &file_policy_objects_proto_enumTypes[4] + return &file_policy_objects_proto_enumTypes[5] } func (x KasPublicKeyAlgEnum) Number() protoreflect.EnumNumber { @@ -298,7 +356,7 @@ func (x KasPublicKeyAlgEnum) Number() protoreflect.EnumNumber { // Deprecated: Use KasPublicKeyAlgEnum.Descriptor instead. func (KasPublicKeyAlgEnum) EnumDescriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{4} + return file_policy_objects_proto_rawDescGZIP(), []int{5} } // Supported key algorithms. @@ -353,11 +411,11 @@ func (x Algorithm) String() string { } func (Algorithm) Descriptor() protoreflect.EnumDescriptor { - return file_policy_objects_proto_enumTypes[5].Descriptor() + return file_policy_objects_proto_enumTypes[6].Descriptor() } func (Algorithm) Type() protoreflect.EnumType { - return &file_policy_objects_proto_enumTypes[5] + return &file_policy_objects_proto_enumTypes[6] } func (x Algorithm) Number() protoreflect.EnumNumber { @@ -366,7 +424,7 @@ func (x Algorithm) Number() protoreflect.EnumNumber { // Deprecated: Use Algorithm.Descriptor instead. func (Algorithm) EnumDescriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{5} + return file_policy_objects_proto_rawDescGZIP(), []int{6} } // The status of the key @@ -403,11 +461,11 @@ func (x KeyStatus) String() string { } func (KeyStatus) Descriptor() protoreflect.EnumDescriptor { - return file_policy_objects_proto_enumTypes[6].Descriptor() + return file_policy_objects_proto_enumTypes[7].Descriptor() } func (KeyStatus) Type() protoreflect.EnumType { - return &file_policy_objects_proto_enumTypes[6] + return &file_policy_objects_proto_enumTypes[7] } func (x KeyStatus) Number() protoreflect.EnumNumber { @@ -416,7 +474,7 @@ func (x KeyStatus) Number() protoreflect.EnumNumber { // Deprecated: Use KeyStatus.Descriptor instead. func (KeyStatus) EnumDescriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{6} + return file_policy_objects_proto_rawDescGZIP(), []int{7} } // Describes the management and operational mode of a cryptographic key. @@ -472,11 +530,11 @@ func (x KeyMode) String() string { } func (KeyMode) Descriptor() protoreflect.EnumDescriptor { - return file_policy_objects_proto_enumTypes[7].Descriptor() + return file_policy_objects_proto_enumTypes[8].Descriptor() } func (KeyMode) Type() protoreflect.EnumType { - return &file_policy_objects_proto_enumTypes[7] + return &file_policy_objects_proto_enumTypes[8] } func (x KeyMode) Number() protoreflect.EnumNumber { @@ -485,7 +543,7 @@ func (x KeyMode) Number() protoreflect.EnumNumber { // Deprecated: Use KeyMode.Descriptor instead. func (KeyMode) EnumDescriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{7} + return file_policy_objects_proto_rawDescGZIP(), []int{8} } type Action_StandardAction int32 @@ -525,11 +583,11 @@ func (x Action_StandardAction) String() string { } func (Action_StandardAction) Descriptor() protoreflect.EnumDescriptor { - return file_policy_objects_proto_enumTypes[8].Descriptor() + return file_policy_objects_proto_enumTypes[9].Descriptor() } func (Action_StandardAction) Type() protoreflect.EnumType { - return &file_policy_objects_proto_enumTypes[8] + return &file_policy_objects_proto_enumTypes[9] } func (x Action_StandardAction) Number() protoreflect.EnumNumber { @@ -1331,6 +1389,174 @@ func (x *SubjectMapping) GetMetadata() *common.Metadata { return nil } +// Definition Value Resolver: the dynamic half of a DynamicValueMapping. It +// resolves a selector against the entity representation and compares the result to the +// requested resource value segment using a DynamicValueOperatorEnum. +type DynamicValueResolver struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // a selector for a field value on a flattened Entity Representation (such as from + // idP/LDAP), e.g. ".patientAssignments[]" + SubjectExternalSelectorValue string `protobuf:"bytes,1,opt,name=subject_external_selector_value,json=subjectExternalSelectorValue,proto3" json:"subject_external_selector_value,omitempty"` + // the dynamic operator comparing the selector result to the resource value segment + Operator DynamicValueOperatorEnum `protobuf:"varint,2,opt,name=operator,proto3,enum=policy.DynamicValueOperatorEnum" json:"operator,omitempty"` +} + +func (x *DynamicValueResolver) Reset() { + *x = DynamicValueResolver{} + if protoimpl.UnsafeEnabled { + mi := &file_policy_objects_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DynamicValueResolver) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DynamicValueResolver) ProtoMessage() {} + +func (x *DynamicValueResolver) ProtoReflect() protoreflect.Message { + mi := &file_policy_objects_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DynamicValueResolver.ProtoReflect.Descriptor instead. +func (*DynamicValueResolver) Descriptor() ([]byte, []int) { + return file_policy_objects_proto_rawDescGZIP(), []int{8} +} + +func (x *DynamicValueResolver) GetSubjectExternalSelectorValue() string { + if x != nil { + return x.SubjectExternalSelectorValue + } + return "" +} + +func (x *DynamicValueResolver) GetOperator() DynamicValueOperatorEnum { + if x != nil { + return x.Operator + } + return DynamicValueOperatorEnum_DYNAMIC_VALUE_OPERATOR_ENUM_UNSPECIFIED +} + +// Dynamic Value Mapping: a Policy assigning permitted action(s) to +// dynamically-requested values under an Attribute Definition. It raises entitlement +// authority from a concrete Attribute Value to the Attribute Definition: at decision time +// the value_resolver compares the requested resource value segment against the entity +// representation, avoiding pre-provisioning a value + subject mapping per discrete value. +type DynamicValueMapping struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // the Attribute Definition whose values are entitled dynamically + AttributeDefinition *Attribute `protobuf:"bytes,2,opt,name=attribute_definition,json=attributeDefinition,proto3" json:"attribute_definition,omitempty"` + // the dynamic resolver matched against the requested resource value segment + ValueResolver *DynamicValueResolver `protobuf:"bytes,3,opt,name=value_resolver,json=valueResolver,proto3" json:"value_resolver,omitempty"` + // optional static pre-gate on the entity, evaluated with normal SubjectConditionSet + // semantics (no dynamic overload). When present, both the gate and the resolver must + // pass for entitlement. + SubjectConditionSet *SubjectConditionSet `protobuf:"bytes,4,opt,name=subject_condition_set,json=subjectConditionSet,proto3" json:"subject_condition_set,omitempty"` + // the actions permitted by subjects in this mapping + Actions []*Action `protobuf:"bytes,5,rep,name=actions,proto3" json:"actions,omitempty"` + // the namespace containing this mapping + Namespace *Namespace `protobuf:"bytes,6,opt,name=namespace,proto3" json:"namespace,omitempty"` + Metadata *common.Metadata `protobuf:"bytes,100,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *DynamicValueMapping) Reset() { + *x = DynamicValueMapping{} + if protoimpl.UnsafeEnabled { + mi := &file_policy_objects_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DynamicValueMapping) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DynamicValueMapping) ProtoMessage() {} + +func (x *DynamicValueMapping) ProtoReflect() protoreflect.Message { + mi := &file_policy_objects_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DynamicValueMapping.ProtoReflect.Descriptor instead. +func (*DynamicValueMapping) Descriptor() ([]byte, []int) { + return file_policy_objects_proto_rawDescGZIP(), []int{9} +} + +func (x *DynamicValueMapping) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *DynamicValueMapping) GetAttributeDefinition() *Attribute { + if x != nil { + return x.AttributeDefinition + } + return nil +} + +func (x *DynamicValueMapping) GetValueResolver() *DynamicValueResolver { + if x != nil { + return x.ValueResolver + } + return nil +} + +func (x *DynamicValueMapping) GetSubjectConditionSet() *SubjectConditionSet { + if x != nil { + return x.SubjectConditionSet + } + return nil +} + +func (x *DynamicValueMapping) GetActions() []*Action { + if x != nil { + return x.Actions + } + return nil +} + +func (x *DynamicValueMapping) GetNamespace() *Namespace { + if x != nil { + return x.Namespace + } + return nil +} + +func (x *DynamicValueMapping) GetMetadata() *common.Metadata { + if x != nil { + return x.Metadata + } + return nil +} + // * // A Condition defines a rule of @@ -1353,7 +1579,7 @@ type Condition struct { func (x *Condition) Reset() { *x = Condition{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[8] + mi := &file_policy_objects_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1366,7 +1592,7 @@ func (x *Condition) String() string { func (*Condition) ProtoMessage() {} func (x *Condition) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[8] + mi := &file_policy_objects_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1379,7 +1605,7 @@ func (x *Condition) ProtoReflect() protoreflect.Message { // Deprecated: Use Condition.ProtoReflect.Descriptor instead. func (*Condition) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{8} + return file_policy_objects_proto_rawDescGZIP(), []int{10} } func (x *Condition) GetSubjectExternalSelectorValue() string { @@ -1417,7 +1643,7 @@ type ConditionGroup struct { func (x *ConditionGroup) Reset() { *x = ConditionGroup{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[9] + mi := &file_policy_objects_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1430,7 +1656,7 @@ func (x *ConditionGroup) String() string { func (*ConditionGroup) ProtoMessage() {} func (x *ConditionGroup) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[9] + mi := &file_policy_objects_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1443,7 +1669,7 @@ func (x *ConditionGroup) ProtoReflect() protoreflect.Message { // Deprecated: Use ConditionGroup.ProtoReflect.Descriptor instead. func (*ConditionGroup) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{9} + return file_policy_objects_proto_rawDescGZIP(), []int{11} } func (x *ConditionGroup) GetConditions() []*Condition { @@ -1473,7 +1699,7 @@ type SubjectSet struct { func (x *SubjectSet) Reset() { *x = SubjectSet{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[10] + mi := &file_policy_objects_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1486,7 +1712,7 @@ func (x *SubjectSet) String() string { func (*SubjectSet) ProtoMessage() {} func (x *SubjectSet) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[10] + mi := &file_policy_objects_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1499,7 +1725,7 @@ func (x *SubjectSet) ProtoReflect() protoreflect.Message { // Deprecated: Use SubjectSet.ProtoReflect.Descriptor instead. func (*SubjectSet) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{10} + return file_policy_objects_proto_rawDescGZIP(), []int{12} } func (x *SubjectSet) GetConditionGroups() []*ConditionGroup { @@ -1531,7 +1757,7 @@ type SubjectConditionSet struct { func (x *SubjectConditionSet) Reset() { *x = SubjectConditionSet{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[11] + mi := &file_policy_objects_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1544,7 +1770,7 @@ func (x *SubjectConditionSet) String() string { func (*SubjectConditionSet) ProtoMessage() {} func (x *SubjectConditionSet) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[11] + mi := &file_policy_objects_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1557,7 +1783,7 @@ func (x *SubjectConditionSet) ProtoReflect() protoreflect.Message { // Deprecated: Use SubjectConditionSet.ProtoReflect.Descriptor instead. func (*SubjectConditionSet) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{11} + return file_policy_objects_proto_rawDescGZIP(), []int{13} } func (x *SubjectConditionSet) GetId() string { @@ -1610,7 +1836,7 @@ type SubjectProperty struct { func (x *SubjectProperty) Reset() { *x = SubjectProperty{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[12] + mi := &file_policy_objects_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1623,7 +1849,7 @@ func (x *SubjectProperty) String() string { func (*SubjectProperty) ProtoMessage() {} func (x *SubjectProperty) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[12] + mi := &file_policy_objects_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1636,7 +1862,7 @@ func (x *SubjectProperty) ProtoReflect() protoreflect.Message { // Deprecated: Use SubjectProperty.ProtoReflect.Descriptor instead. func (*SubjectProperty) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{12} + return file_policy_objects_proto_rawDescGZIP(), []int{14} } func (x *SubjectProperty) GetExternalSelectorValue() string { @@ -1675,7 +1901,7 @@ type ResourceMappingGroup struct { func (x *ResourceMappingGroup) Reset() { *x = ResourceMappingGroup{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[13] + mi := &file_policy_objects_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1688,7 +1914,7 @@ func (x *ResourceMappingGroup) String() string { func (*ResourceMappingGroup) ProtoMessage() {} func (x *ResourceMappingGroup) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[13] + mi := &file_policy_objects_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1701,7 +1927,7 @@ func (x *ResourceMappingGroup) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceMappingGroup.ProtoReflect.Descriptor instead. func (*ResourceMappingGroup) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{13} + return file_policy_objects_proto_rawDescGZIP(), []int{15} } func (x *ResourceMappingGroup) GetId() string { @@ -1751,16 +1977,12 @@ type ResourceMapping struct { AttributeValue *Value `protobuf:"bytes,3,opt,name=attribute_value,json=attributeValue,proto3" json:"attribute_value,omitempty"` Terms []string `protobuf:"bytes,4,rep,name=terms,proto3" json:"terms,omitempty"` Group *ResourceMappingGroup `protobuf:"bytes,5,opt,name=group,proto3" json:"group,omitempty"` - // The namespace that optionally owns this resource mapping. When the mapping - // belongs to a group, this matches the group's namespace. The mapped - // attribute value may belong to a different namespace. - Namespace *Namespace `protobuf:"bytes,6,opt,name=namespace,proto3" json:"namespace,omitempty"` } func (x *ResourceMapping) Reset() { *x = ResourceMapping{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[14] + mi := &file_policy_objects_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1773,7 +1995,7 @@ func (x *ResourceMapping) String() string { func (*ResourceMapping) ProtoMessage() {} func (x *ResourceMapping) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[14] + mi := &file_policy_objects_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1786,7 +2008,7 @@ func (x *ResourceMapping) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceMapping.ProtoReflect.Descriptor instead. func (*ResourceMapping) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{14} + return file_policy_objects_proto_rawDescGZIP(), []int{16} } func (x *ResourceMapping) GetId() string { @@ -1824,13 +2046,6 @@ func (x *ResourceMapping) GetGroup() *ResourceMappingGroup { return nil } -func (x *ResourceMapping) GetNamespace() *Namespace { - if x != nil { - return x.Namespace - } - return nil -} - // Key Access Server Registry type KeyAccessServer struct { state protoimpl.MessageState @@ -1856,7 +2071,7 @@ type KeyAccessServer struct { func (x *KeyAccessServer) Reset() { *x = KeyAccessServer{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[15] + mi := &file_policy_objects_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1869,7 +2084,7 @@ func (x *KeyAccessServer) String() string { func (*KeyAccessServer) ProtoMessage() {} func (x *KeyAccessServer) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[15] + mi := &file_policy_objects_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1882,7 +2097,7 @@ func (x *KeyAccessServer) ProtoReflect() protoreflect.Message { // Deprecated: Use KeyAccessServer.ProtoReflect.Descriptor instead. func (*KeyAccessServer) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{15} + return file_policy_objects_proto_rawDescGZIP(), []int{17} } func (x *KeyAccessServer) GetId() string { @@ -1952,7 +2167,7 @@ type Key struct { func (x *Key) Reset() { *x = Key{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[16] + mi := &file_policy_objects_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1965,7 +2180,7 @@ func (x *Key) String() string { func (*Key) ProtoMessage() {} func (x *Key) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[16] + mi := &file_policy_objects_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1978,7 +2193,7 @@ func (x *Key) ProtoReflect() protoreflect.Message { // Deprecated: Use Key.ProtoReflect.Descriptor instead. func (*Key) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{16} + return file_policy_objects_proto_rawDescGZIP(), []int{18} } func (x *Key) GetId() string { @@ -2043,7 +2258,7 @@ type KasPublicKey struct { func (x *KasPublicKey) Reset() { *x = KasPublicKey{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[17] + mi := &file_policy_objects_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2056,7 +2271,7 @@ func (x *KasPublicKey) String() string { func (*KasPublicKey) ProtoMessage() {} func (x *KasPublicKey) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[17] + mi := &file_policy_objects_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2069,7 +2284,7 @@ func (x *KasPublicKey) ProtoReflect() protoreflect.Message { // Deprecated: Use KasPublicKey.ProtoReflect.Descriptor instead. func (*KasPublicKey) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{17} + return file_policy_objects_proto_rawDescGZIP(), []int{19} } func (x *KasPublicKey) GetPem() string { @@ -2106,7 +2321,7 @@ type KasPublicKeySet struct { func (x *KasPublicKeySet) Reset() { *x = KasPublicKeySet{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[18] + mi := &file_policy_objects_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2119,7 +2334,7 @@ func (x *KasPublicKeySet) String() string { func (*KasPublicKeySet) ProtoMessage() {} func (x *KasPublicKeySet) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[18] + mi := &file_policy_objects_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2132,7 +2347,7 @@ func (x *KasPublicKeySet) ProtoReflect() protoreflect.Message { // Deprecated: Use KasPublicKeySet.ProtoReflect.Descriptor instead. func (*KasPublicKeySet) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{18} + return file_policy_objects_proto_rawDescGZIP(), []int{20} } func (x *KasPublicKeySet) GetKeys() []*KasPublicKey { @@ -2158,7 +2373,7 @@ type PublicKey struct { func (x *PublicKey) Reset() { *x = PublicKey{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[19] + mi := &file_policy_objects_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2171,7 +2386,7 @@ func (x *PublicKey) String() string { func (*PublicKey) ProtoMessage() {} func (x *PublicKey) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[19] + mi := &file_policy_objects_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2184,7 +2399,7 @@ func (x *PublicKey) ProtoReflect() protoreflect.Message { // Deprecated: Use PublicKey.ProtoReflect.Descriptor instead. func (*PublicKey) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{19} + return file_policy_objects_proto_rawDescGZIP(), []int{21} } func (m *PublicKey) GetPublicKey() isPublicKey_PublicKey { @@ -2242,7 +2457,7 @@ type RegisteredResource struct { func (x *RegisteredResource) Reset() { *x = RegisteredResource{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[20] + mi := &file_policy_objects_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2255,7 +2470,7 @@ func (x *RegisteredResource) String() string { func (*RegisteredResource) ProtoMessage() {} func (x *RegisteredResource) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[20] + mi := &file_policy_objects_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2268,7 +2483,7 @@ func (x *RegisteredResource) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisteredResource.ProtoReflect.Descriptor instead. func (*RegisteredResource) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{20} + return file_policy_objects_proto_rawDescGZIP(), []int{22} } func (x *RegisteredResource) GetId() string { @@ -2323,7 +2538,7 @@ type RegisteredResourceValue struct { func (x *RegisteredResourceValue) Reset() { *x = RegisteredResourceValue{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[21] + mi := &file_policy_objects_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2336,7 +2551,7 @@ func (x *RegisteredResourceValue) String() string { func (*RegisteredResourceValue) ProtoMessage() {} func (x *RegisteredResourceValue) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[21] + mi := &file_policy_objects_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2349,7 +2564,7 @@ func (x *RegisteredResourceValue) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisteredResourceValue.ProtoReflect.Descriptor instead. func (*RegisteredResourceValue) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{21} + return file_policy_objects_proto_rawDescGZIP(), []int{23} } func (x *RegisteredResourceValue) GetId() string { @@ -2405,7 +2620,7 @@ type PolicyEnforcementPoint struct { func (x *PolicyEnforcementPoint) Reset() { *x = PolicyEnforcementPoint{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[22] + mi := &file_policy_objects_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2418,7 +2633,7 @@ func (x *PolicyEnforcementPoint) String() string { func (*PolicyEnforcementPoint) ProtoMessage() {} func (x *PolicyEnforcementPoint) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[22] + mi := &file_policy_objects_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2431,7 +2646,7 @@ func (x *PolicyEnforcementPoint) ProtoReflect() protoreflect.Message { // Deprecated: Use PolicyEnforcementPoint.ProtoReflect.Descriptor instead. func (*PolicyEnforcementPoint) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{22} + return file_policy_objects_proto_rawDescGZIP(), []int{24} } func (x *PolicyEnforcementPoint) GetClientId() string { @@ -2453,7 +2668,7 @@ type RequestContext struct { func (x *RequestContext) Reset() { *x = RequestContext{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[23] + mi := &file_policy_objects_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2466,7 +2681,7 @@ func (x *RequestContext) String() string { func (*RequestContext) ProtoMessage() {} func (x *RequestContext) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[23] + mi := &file_policy_objects_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2479,7 +2694,7 @@ func (x *RequestContext) ProtoReflect() protoreflect.Message { // Deprecated: Use RequestContext.ProtoReflect.Descriptor instead. func (*RequestContext) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{23} + return file_policy_objects_proto_rawDescGZIP(), []int{25} } func (x *RequestContext) GetPep() *PolicyEnforcementPoint { @@ -2505,7 +2720,7 @@ type Obligation struct { func (x *Obligation) Reset() { *x = Obligation{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[24] + mi := &file_policy_objects_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2518,7 +2733,7 @@ func (x *Obligation) String() string { func (*Obligation) ProtoMessage() {} func (x *Obligation) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[24] + mi := &file_policy_objects_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2531,7 +2746,7 @@ func (x *Obligation) ProtoReflect() protoreflect.Message { // Deprecated: Use Obligation.ProtoReflect.Descriptor instead. func (*Obligation) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{24} + return file_policy_objects_proto_rawDescGZIP(), []int{26} } func (x *Obligation) GetId() string { @@ -2592,7 +2807,7 @@ type ObligationValue struct { func (x *ObligationValue) Reset() { *x = ObligationValue{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[25] + mi := &file_policy_objects_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2605,7 +2820,7 @@ func (x *ObligationValue) String() string { func (*ObligationValue) ProtoMessage() {} func (x *ObligationValue) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[25] + mi := &file_policy_objects_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2618,7 +2833,7 @@ func (x *ObligationValue) ProtoReflect() protoreflect.Message { // Deprecated: Use ObligationValue.ProtoReflect.Descriptor instead. func (*ObligationValue) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{25} + return file_policy_objects_proto_rawDescGZIP(), []int{27} } func (x *ObligationValue) GetId() string { @@ -2681,7 +2896,7 @@ type ObligationTrigger struct { func (x *ObligationTrigger) Reset() { *x = ObligationTrigger{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[26] + mi := &file_policy_objects_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2694,7 +2909,7 @@ func (x *ObligationTrigger) String() string { func (*ObligationTrigger) ProtoMessage() {} func (x *ObligationTrigger) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[26] + mi := &file_policy_objects_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2707,7 +2922,7 @@ func (x *ObligationTrigger) ProtoReflect() protoreflect.Message { // Deprecated: Use ObligationTrigger.ProtoReflect.Descriptor instead. func (*ObligationTrigger) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{26} + return file_policy_objects_proto_rawDescGZIP(), []int{28} } func (x *ObligationTrigger) GetId() string { @@ -2772,7 +2987,7 @@ type KasKey struct { func (x *KasKey) Reset() { *x = KasKey{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[27] + mi := &file_policy_objects_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2785,7 +3000,7 @@ func (x *KasKey) String() string { func (*KasKey) ProtoMessage() {} func (x *KasKey) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[27] + mi := &file_policy_objects_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2798,7 +3013,7 @@ func (x *KasKey) ProtoReflect() protoreflect.Message { // Deprecated: Use KasKey.ProtoReflect.Descriptor instead. func (*KasKey) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{27} + return file_policy_objects_proto_rawDescGZIP(), []int{29} } func (x *KasKey) GetKasId() string { @@ -2834,7 +3049,7 @@ type PublicKeyCtx struct { func (x *PublicKeyCtx) Reset() { *x = PublicKeyCtx{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[28] + mi := &file_policy_objects_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2847,7 +3062,7 @@ func (x *PublicKeyCtx) String() string { func (*PublicKeyCtx) ProtoMessage() {} func (x *PublicKeyCtx) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[28] + mi := &file_policy_objects_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2860,7 +3075,7 @@ func (x *PublicKeyCtx) ProtoReflect() protoreflect.Message { // Deprecated: Use PublicKeyCtx.ProtoReflect.Descriptor instead. func (*PublicKeyCtx) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{28} + return file_policy_objects_proto_rawDescGZIP(), []int{30} } func (x *PublicKeyCtx) GetPem() string { @@ -2884,7 +3099,7 @@ type PrivateKeyCtx struct { func (x *PrivateKeyCtx) Reset() { *x = PrivateKeyCtx{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[29] + mi := &file_policy_objects_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2897,7 +3112,7 @@ func (x *PrivateKeyCtx) String() string { func (*PrivateKeyCtx) ProtoMessage() {} func (x *PrivateKeyCtx) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[29] + mi := &file_policy_objects_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2910,7 +3125,7 @@ func (x *PrivateKeyCtx) ProtoReflect() protoreflect.Message { // Deprecated: Use PrivateKeyCtx.ProtoReflect.Descriptor instead. func (*PrivateKeyCtx) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{29} + return file_policy_objects_proto_rawDescGZIP(), []int{31} } func (x *PrivateKeyCtx) GetKeyId() string { @@ -2957,7 +3172,7 @@ type AsymmetricKey struct { func (x *AsymmetricKey) Reset() { *x = AsymmetricKey{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[30] + mi := &file_policy_objects_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2970,7 +3185,7 @@ func (x *AsymmetricKey) String() string { func (*AsymmetricKey) ProtoMessage() {} func (x *AsymmetricKey) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[30] + mi := &file_policy_objects_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2983,7 +3198,7 @@ func (x *AsymmetricKey) ProtoReflect() protoreflect.Message { // Deprecated: Use AsymmetricKey.ProtoReflect.Descriptor instead. func (*AsymmetricKey) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{30} + return file_policy_objects_proto_rawDescGZIP(), []int{32} } func (x *AsymmetricKey) GetId() string { @@ -3074,7 +3289,7 @@ type SymmetricKey struct { func (x *SymmetricKey) Reset() { *x = SymmetricKey{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[31] + mi := &file_policy_objects_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3087,7 +3302,7 @@ func (x *SymmetricKey) String() string { func (*SymmetricKey) ProtoMessage() {} func (x *SymmetricKey) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[31] + mi := &file_policy_objects_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3100,7 +3315,7 @@ func (x *SymmetricKey) ProtoReflect() protoreflect.Message { // Deprecated: Use SymmetricKey.ProtoReflect.Descriptor instead. func (*SymmetricKey) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{31} + return file_policy_objects_proto_rawDescGZIP(), []int{33} } func (x *SymmetricKey) GetId() string { @@ -3167,7 +3382,7 @@ type RegisteredResourceValue_ActionAttributeValue struct { func (x *RegisteredResourceValue_ActionAttributeValue) Reset() { *x = RegisteredResourceValue_ActionAttributeValue{} if protoimpl.UnsafeEnabled { - mi := &file_policy_objects_proto_msgTypes[32] + mi := &file_policy_objects_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3180,7 +3395,7 @@ func (x *RegisteredResourceValue_ActionAttributeValue) String() string { func (*RegisteredResourceValue_ActionAttributeValue) ProtoMessage() {} func (x *RegisteredResourceValue_ActionAttributeValue) ProtoReflect() protoreflect.Message { - mi := &file_policy_objects_proto_msgTypes[32] + mi := &file_policy_objects_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3193,7 +3408,7 @@ func (x *RegisteredResourceValue_ActionAttributeValue) ProtoReflect() protorefle // Deprecated: Use RegisteredResourceValue_ActionAttributeValue.ProtoReflect.Descriptor instead. func (*RegisteredResourceValue_ActionAttributeValue) Descriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{21, 0} + return file_policy_objects_proto_rawDescGZIP(), []int{23, 0} } func (x *RegisteredResourceValue_ActionAttributeValue) GetId() string { @@ -3378,6 +3593,42 @@ var file_policy_objects_proto_rawDesc = []byte{ 0x61, 0x63, 0x65, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 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, 0xb0, 0x01, 0x0a, + 0x14, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x1f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, + 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x1c, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x49, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, + 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, + 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, + 0x8a, 0x03, 0x0a, 0x13, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x44, 0x0a, 0x14, 0x61, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x13, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, + 0x0e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x44, + 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x76, 0x65, 0x72, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, + 0x65, 0x72, 0x12, 0x4f, 0x0a, 0x15, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x13, + 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x0a, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 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, 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, 0xe9, 0x01, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x1f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x73, @@ -3441,7 +3692,7 @@ var file_policy_objects_proto_rawDesc = []byte{ 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, 0x8a, 0x02, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x61, 0x74, 0x61, 0x22, 0xd9, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, @@ -3454,379 +3705,387 @@ var file_policy_objects_proto_rawDesc = []byte{ 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x70, - 0x69, 0x6e, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, - 0x2f, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 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, - 0x22, 0x85, 0x05, 0x0a, 0x0f, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x87, 0x03, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0xf4, 0x02, 0xba, 0x48, 0xf0, 0x02, 0xba, 0x01, 0xec, 0x02, 0x0a, 0x0a, 0x75, - 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xcf, 0x01, 0x55, 0x52, 0x49, 0x20, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, - 0x55, 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x27, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x27, 0x29, 0x20, - 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x64, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, - 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, - 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2c, - 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x68, 0x79, 0x70, - 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, - 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, 0x8b, 0x01, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3f, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, + 0x69, 0x6e, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, + 0x85, 0x05, 0x0a, 0x0f, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x87, 0x03, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0xf4, 0x02, 0xba, 0x48, 0xf0, 0x02, 0xba, 0x01, 0xec, 0x02, 0x0a, 0x0a, 0x75, 0x72, + 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xcf, 0x01, 0x55, 0x52, 0x49, 0x20, 0x6d, + 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, + 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x27, 0x68, 0x74, 0x74, 0x70, 0x73, + 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x27, 0x29, 0x20, 0x66, + 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x20, + 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x75, 0x73, + 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x64, 0x20, + 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, + 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2c, 0x20, + 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x68, 0x79, 0x70, 0x68, + 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, + 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x61, 0x6e, + 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, 0x8b, 0x01, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3f, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, + 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, + 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, + 0x29, 0x3f, 0x28, 0x5c, 0x5c, 0x2e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, - 0x5d, 0x29, 0x3f, 0x28, 0x5c, 0x5c, 0x2e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, + 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x3a, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x29, 0x3f, 0x28, + 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, 0x27, 0x29, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x30, 0x0a, + 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, + 0x33, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x6b, 0x61, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, + 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x52, 0x07, 0x6b, 0x61, + 0x73, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x14, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 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, 0x97, 0x02, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x37, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, + 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x77, 0x61, 0x73, 0x5f, + 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, + 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x77, 0x61, 0x73, 0x4d, 0x61, 0x70, + 0x70, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, + 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x03, 0x6b, 0x61, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, + 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x03, + 0x6b, 0x61, 0x73, 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, 0x84, 0x01, 0x0a, 0x0c, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, + 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x03, 0x70, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x40, 0x52, 0x03, 0x70, 0x65, 0x6d, + 0x12, 0x1b, 0x0a, 0x03, 0x6b, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0xba, + 0x48, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x03, 0x6b, 0x69, 0x64, 0x12, 0x39, 0x0a, + 0x03, 0x61, 0x6c, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, + 0x41, 0x6c, 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x82, 0x01, 0x04, 0x10, + 0x01, 0x20, 0x00, 0x52, 0x03, 0x61, 0x6c, 0x67, 0x22, 0x3b, 0x0a, 0x0f, 0x4b, 0x61, 0x73, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x6b, + 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, + 0x04, 0x6b, 0x65, 0x79, 0x73, 0x22, 0xe0, 0x03, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x4b, 0x65, 0x79, 0x12, 0x84, 0x03, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0xe9, 0x02, 0xba, 0x48, 0xe5, 0x02, 0xba, 0x01, 0xe1, 0x02, 0x0a, + 0x0a, 0x75, 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xcf, 0x01, 0x55, 0x52, + 0x49, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x20, 0x55, 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x27, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x27, + 0x29, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, + 0x6d, 0x75, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, + 0x6e, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, + 0x72, 0x2c, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x68, + 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, + 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2c, + 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, 0x80, 0x01, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, - 0x39, 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x3a, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x29, 0x3f, - 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, 0x27, 0x29, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x30, - 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, - 0x12, 0x33, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x6b, 0x61, 0x73, 0x5f, 0x6b, 0x65, 0x79, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x52, 0x07, 0x6b, - 0x61, 0x73, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x14, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 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, 0x97, 0x02, 0x0a, 0x03, 0x4b, 0x65, 0x79, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x37, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x77, 0x61, 0x73, - 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x77, 0x61, 0x73, 0x4d, 0x61, - 0x70, 0x70, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, - 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x03, 0x6b, 0x61, 0x73, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, - 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, - 0x03, 0x6b, 0x61, 0x73, 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, 0x84, 0x01, 0x0a, 0x0c, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x03, 0x70, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x40, 0x52, 0x03, 0x70, 0x65, - 0x6d, 0x12, 0x1b, 0x0a, 0x03, 0x6b, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, - 0xba, 0x48, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x03, 0x6b, 0x69, 0x64, 0x12, 0x39, - 0x0a, 0x03, 0x61, 0x6c, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x41, 0x6c, 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x82, 0x01, 0x04, - 0x10, 0x01, 0x20, 0x00, 0x52, 0x03, 0x61, 0x6c, 0x67, 0x22, 0x3b, 0x0a, 0x0f, 0x4b, 0x61, 0x73, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x04, - 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, - 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x22, 0xe0, 0x03, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x4b, 0x65, 0x79, 0x12, 0x84, 0x03, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0xe9, 0x02, 0xba, 0x48, 0xe5, 0x02, 0xba, 0x01, 0xe1, 0x02, - 0x0a, 0x0a, 0x75, 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xcf, 0x01, 0x55, - 0x52, 0x49, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x20, 0x55, 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x27, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x27, 0x29, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, - 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x65, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, - 0x65, 0x72, 0x2c, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, - 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, - 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, - 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, 0x80, - 0x01, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, + 0x39, 0x5d, 0x29, 0x3f, 0x28, 0x5c, 0x5c, 0x2e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, - 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x28, 0x5c, 0x5c, 0x2e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, - 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, - 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, - 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, 0x27, - 0x29, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x63, - 0x61, 0x63, 0x68, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x0c, - 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x4a, 0x04, 0x08, 0x02, - 0x10, 0x03, 0x52, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x22, 0xd0, 0x01, 0x0a, 0x12, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 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, 0x37, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x2f, 0x0a, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 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, 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, 0xdc, 0x03, 0x0a, - 0x17, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 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, 0x36, - 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x17, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 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, 0x1a, 0xb4, 0x01, 0x0a, 0x14, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x26, 0x0a, - 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 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, 0x03, 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, 0x2c, 0x0a, + 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, 0x27, 0x29, + 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x63, 0x61, + 0x63, 0x68, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, + 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x0c, 0x0a, + 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x4a, 0x04, 0x08, 0x02, 0x10, + 0x03, 0x52, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x22, 0xd0, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 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, 0x37, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 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, 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, 0x3e, 0x0a, 0x16, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 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, 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, 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, + 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xdc, 0x03, 0x0a, 0x17, + 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 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, 0x36, 0x0a, + 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, + 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x17, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, + 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 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, 0x1a, 0xb4, 0x01, 0x0a, 0x14, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x26, 0x0a, 0x06, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 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, 0x03, 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, 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, 0x3e, 0x0a, 0x16, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 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, 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, 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, 0xd8, 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, 0x2f, 0x0a, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0b, 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, 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, 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, 0xd8, 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, 0x2f, 0x0a, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0b, 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, 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, + 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, - 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, + 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, 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, + 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, 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, 0x9b, 0x03, 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, 0x12, 0x26, 0x0a, 0x22, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, - 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x50, 0x51, - 0x54, 0x5f, 0x58, 0x57, 0x49, 0x4e, 0x47, 0x10, 0x0a, 0x12, 0x33, 0x0a, 0x2f, 0x4b, 0x41, 0x53, + 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, 0xb6, 0x01, 0x0a, 0x18, 0x44, 0x79, 0x6e, 0x61, 0x6d, + 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x45, + 0x6e, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x27, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, 0x56, + 0x41, 0x4c, 0x55, 0x45, 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, 0x31, 0x0a, 0x2d, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, 0x56, 0x41, 0x4c, 0x55, + 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, + 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x49, + 0x4e, 0x10, 0x01, 0x12, 0x3a, 0x0a, 0x36, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, 0x56, + 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, + 0x55, 0x4d, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, + 0x45, 0x5f, 0x49, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 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, 0x9b, + 0x03, 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, 0x12, 0x26, 0x0a, 0x22, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, - 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x32, 0x35, - 0x36, 0x52, 0x31, 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x37, 0x36, 0x38, 0x10, 0x0b, 0x12, 0x34, - 0x0a, 0x30, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, - 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, - 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31, 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x31, 0x30, - 0x32, 0x34, 0x10, 0x0c, 0x2a, 0x84, 0x02, 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, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, - 0x48, 0x50, 0x51, 0x54, 0x5f, 0x58, 0x57, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x25, 0x0a, 0x21, - 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, - 0x45, 0x43, 0x50, 0x32, 0x35, 0x36, 0x52, 0x31, 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x37, 0x36, - 0x38, 0x10, 0x07, 0x12, 0x26, 0x0a, 0x22, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, - 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31, 0x5f, - 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x31, 0x30, 0x32, 0x34, 0x10, 0x08, 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, + 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x58, 0x57, 0x49, 0x4e, 0x47, 0x10, + 0x0a, 0x12, 0x33, 0x0a, 0x2f, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, + 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x50, 0x51, + 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x32, 0x35, 0x36, 0x52, 0x31, 0x5f, 0x4d, 0x4c, 0x4b, 0x45, + 0x4d, 0x37, 0x36, 0x38, 0x10, 0x0b, 0x12, 0x34, 0x0a, 0x30, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, + 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, + 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31, + 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x31, 0x30, 0x32, 0x34, 0x10, 0x0c, 0x2a, 0x84, 0x02, 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, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x4c, + 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x58, 0x57, 0x49, + 0x4e, 0x47, 0x10, 0x06, 0x12, 0x25, 0x0a, 0x21, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, + 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x32, 0x35, 0x36, 0x52, 0x31, + 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x37, 0x36, 0x38, 0x10, 0x07, 0x12, 0x26, 0x0a, 0x22, 0x41, + 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, 0x45, + 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31, 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x31, 0x30, 0x32, + 0x34, 0x10, 0x08, 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 ( @@ -3841,149 +4100,158 @@ func file_policy_objects_proto_rawDescGZIP() []byte { return file_policy_objects_proto_rawDescData } -var file_policy_objects_proto_enumTypes = make([]protoimpl.EnumInfo, 9) -var file_policy_objects_proto_msgTypes = make([]protoimpl.MessageInfo, 33) +var file_policy_objects_proto_enumTypes = make([]protoimpl.EnumInfo, 10) +var file_policy_objects_proto_msgTypes = make([]protoimpl.MessageInfo, 35) var file_policy_objects_proto_goTypes = []interface{}{ - (AttributeRuleTypeEnum)(0), // 0: policy.AttributeRuleTypeEnum - (SubjectMappingOperatorEnum)(0), // 1: policy.SubjectMappingOperatorEnum - (ConditionBooleanTypeEnum)(0), // 2: policy.ConditionBooleanTypeEnum - (SourceType)(0), // 3: policy.SourceType - (KasPublicKeyAlgEnum)(0), // 4: policy.KasPublicKeyAlgEnum - (Algorithm)(0), // 5: policy.Algorithm - (KeyStatus)(0), // 6: policy.KeyStatus - (KeyMode)(0), // 7: policy.KeyMode - (Action_StandardAction)(0), // 8: policy.Action.StandardAction - (*SimpleKasPublicKey)(nil), // 9: policy.SimpleKasPublicKey - (*SimpleKasKey)(nil), // 10: policy.SimpleKasKey - (*KeyProviderConfig)(nil), // 11: policy.KeyProviderConfig - (*Namespace)(nil), // 12: policy.Namespace - (*Attribute)(nil), // 13: policy.Attribute - (*Value)(nil), // 14: policy.Value - (*Action)(nil), // 15: policy.Action - (*SubjectMapping)(nil), // 16: policy.SubjectMapping - (*Condition)(nil), // 17: policy.Condition - (*ConditionGroup)(nil), // 18: policy.ConditionGroup - (*SubjectSet)(nil), // 19: policy.SubjectSet - (*SubjectConditionSet)(nil), // 20: policy.SubjectConditionSet - (*SubjectProperty)(nil), // 21: policy.SubjectProperty - (*ResourceMappingGroup)(nil), // 22: policy.ResourceMappingGroup - (*ResourceMapping)(nil), // 23: policy.ResourceMapping - (*KeyAccessServer)(nil), // 24: policy.KeyAccessServer - (*Key)(nil), // 25: policy.Key - (*KasPublicKey)(nil), // 26: policy.KasPublicKey - (*KasPublicKeySet)(nil), // 27: policy.KasPublicKeySet - (*PublicKey)(nil), // 28: policy.PublicKey - (*RegisteredResource)(nil), // 29: policy.RegisteredResource - (*RegisteredResourceValue)(nil), // 30: policy.RegisteredResourceValue - (*PolicyEnforcementPoint)(nil), // 31: policy.PolicyEnforcementPoint - (*RequestContext)(nil), // 32: policy.RequestContext - (*Obligation)(nil), // 33: policy.Obligation - (*ObligationValue)(nil), // 34: policy.ObligationValue - (*ObligationTrigger)(nil), // 35: policy.ObligationTrigger - (*KasKey)(nil), // 36: policy.KasKey - (*PublicKeyCtx)(nil), // 37: policy.PublicKeyCtx - (*PrivateKeyCtx)(nil), // 38: policy.PrivateKeyCtx - (*AsymmetricKey)(nil), // 39: policy.AsymmetricKey - (*SymmetricKey)(nil), // 40: policy.SymmetricKey - (*RegisteredResourceValue_ActionAttributeValue)(nil), // 41: policy.RegisteredResourceValue.ActionAttributeValue - (*common.Metadata)(nil), // 42: common.Metadata - (*wrapperspb.BoolValue)(nil), // 43: google.protobuf.BoolValue + (AttributeRuleTypeEnum)(0), // 0: policy.AttributeRuleTypeEnum + (SubjectMappingOperatorEnum)(0), // 1: policy.SubjectMappingOperatorEnum + (ConditionBooleanTypeEnum)(0), // 2: policy.ConditionBooleanTypeEnum + (DynamicValueOperatorEnum)(0), // 3: policy.DynamicValueOperatorEnum + (SourceType)(0), // 4: policy.SourceType + (KasPublicKeyAlgEnum)(0), // 5: policy.KasPublicKeyAlgEnum + (Algorithm)(0), // 6: policy.Algorithm + (KeyStatus)(0), // 7: policy.KeyStatus + (KeyMode)(0), // 8: policy.KeyMode + (Action_StandardAction)(0), // 9: policy.Action.StandardAction + (*SimpleKasPublicKey)(nil), // 10: policy.SimpleKasPublicKey + (*SimpleKasKey)(nil), // 11: policy.SimpleKasKey + (*KeyProviderConfig)(nil), // 12: policy.KeyProviderConfig + (*Namespace)(nil), // 13: policy.Namespace + (*Attribute)(nil), // 14: policy.Attribute + (*Value)(nil), // 15: policy.Value + (*Action)(nil), // 16: policy.Action + (*SubjectMapping)(nil), // 17: policy.SubjectMapping + (*DynamicValueResolver)(nil), // 18: policy.DynamicValueResolver + (*DynamicValueMapping)(nil), // 19: policy.DynamicValueMapping + (*Condition)(nil), // 20: policy.Condition + (*ConditionGroup)(nil), // 21: policy.ConditionGroup + (*SubjectSet)(nil), // 22: policy.SubjectSet + (*SubjectConditionSet)(nil), // 23: policy.SubjectConditionSet + (*SubjectProperty)(nil), // 24: policy.SubjectProperty + (*ResourceMappingGroup)(nil), // 25: policy.ResourceMappingGroup + (*ResourceMapping)(nil), // 26: policy.ResourceMapping + (*KeyAccessServer)(nil), // 27: policy.KeyAccessServer + (*Key)(nil), // 28: policy.Key + (*KasPublicKey)(nil), // 29: policy.KasPublicKey + (*KasPublicKeySet)(nil), // 30: policy.KasPublicKeySet + (*PublicKey)(nil), // 31: policy.PublicKey + (*RegisteredResource)(nil), // 32: policy.RegisteredResource + (*RegisteredResourceValue)(nil), // 33: policy.RegisteredResourceValue + (*PolicyEnforcementPoint)(nil), // 34: policy.PolicyEnforcementPoint + (*RequestContext)(nil), // 35: policy.RequestContext + (*Obligation)(nil), // 36: policy.Obligation + (*ObligationValue)(nil), // 37: policy.ObligationValue + (*ObligationTrigger)(nil), // 38: policy.ObligationTrigger + (*KasKey)(nil), // 39: policy.KasKey + (*PublicKeyCtx)(nil), // 40: policy.PublicKeyCtx + (*PrivateKeyCtx)(nil), // 41: policy.PrivateKeyCtx + (*AsymmetricKey)(nil), // 42: policy.AsymmetricKey + (*SymmetricKey)(nil), // 43: policy.SymmetricKey + (*RegisteredResourceValue_ActionAttributeValue)(nil), // 44: policy.RegisteredResourceValue.ActionAttributeValue + (*common.Metadata)(nil), // 45: common.Metadata + (*wrapperspb.BoolValue)(nil), // 46: google.protobuf.BoolValue } var file_policy_objects_proto_depIdxs = []int32{ - 5, // 0: policy.SimpleKasPublicKey.algorithm:type_name -> policy.Algorithm - 9, // 1: policy.SimpleKasKey.public_key:type_name -> policy.SimpleKasPublicKey - 42, // 2: policy.KeyProviderConfig.metadata:type_name -> common.Metadata - 43, // 3: policy.Namespace.active:type_name -> google.protobuf.BoolValue - 42, // 4: policy.Namespace.metadata:type_name -> common.Metadata - 24, // 5: policy.Namespace.grants:type_name -> policy.KeyAccessServer - 10, // 6: policy.Namespace.kas_keys:type_name -> policy.SimpleKasKey - 12, // 7: policy.Attribute.namespace:type_name -> policy.Namespace + 6, // 0: policy.SimpleKasPublicKey.algorithm:type_name -> policy.Algorithm + 10, // 1: policy.SimpleKasKey.public_key:type_name -> policy.SimpleKasPublicKey + 45, // 2: policy.KeyProviderConfig.metadata:type_name -> common.Metadata + 46, // 3: policy.Namespace.active:type_name -> google.protobuf.BoolValue + 45, // 4: policy.Namespace.metadata:type_name -> common.Metadata + 27, // 5: policy.Namespace.grants:type_name -> policy.KeyAccessServer + 11, // 6: policy.Namespace.kas_keys:type_name -> policy.SimpleKasKey + 13, // 7: policy.Attribute.namespace:type_name -> policy.Namespace 0, // 8: policy.Attribute.rule:type_name -> policy.AttributeRuleTypeEnum - 14, // 9: policy.Attribute.values:type_name -> policy.Value - 24, // 10: policy.Attribute.grants:type_name -> policy.KeyAccessServer - 43, // 11: policy.Attribute.active:type_name -> google.protobuf.BoolValue - 10, // 12: policy.Attribute.kas_keys:type_name -> policy.SimpleKasKey - 43, // 13: policy.Attribute.allow_traversal:type_name -> google.protobuf.BoolValue - 42, // 14: policy.Attribute.metadata:type_name -> common.Metadata - 13, // 15: policy.Value.attribute:type_name -> policy.Attribute - 24, // 16: policy.Value.grants:type_name -> policy.KeyAccessServer - 43, // 17: policy.Value.active:type_name -> google.protobuf.BoolValue - 16, // 18: policy.Value.subject_mappings:type_name -> policy.SubjectMapping - 10, // 19: policy.Value.kas_keys:type_name -> policy.SimpleKasKey - 23, // 20: policy.Value.resource_mappings:type_name -> policy.ResourceMapping - 33, // 21: policy.Value.obligations:type_name -> policy.Obligation - 42, // 22: policy.Value.metadata:type_name -> common.Metadata - 8, // 23: policy.Action.standard:type_name -> policy.Action.StandardAction - 12, // 24: policy.Action.namespace:type_name -> policy.Namespace - 42, // 25: policy.Action.metadata:type_name -> common.Metadata - 14, // 26: policy.SubjectMapping.attribute_value:type_name -> policy.Value - 20, // 27: policy.SubjectMapping.subject_condition_set:type_name -> policy.SubjectConditionSet - 15, // 28: policy.SubjectMapping.actions:type_name -> policy.Action - 12, // 29: policy.SubjectMapping.namespace:type_name -> policy.Namespace - 42, // 30: policy.SubjectMapping.metadata:type_name -> common.Metadata - 1, // 31: policy.Condition.operator:type_name -> policy.SubjectMappingOperatorEnum - 17, // 32: policy.ConditionGroup.conditions:type_name -> policy.Condition - 2, // 33: policy.ConditionGroup.boolean_operator:type_name -> policy.ConditionBooleanTypeEnum - 18, // 34: policy.SubjectSet.condition_groups:type_name -> policy.ConditionGroup - 12, // 35: policy.SubjectConditionSet.namespace:type_name -> policy.Namespace - 19, // 36: policy.SubjectConditionSet.subject_sets:type_name -> policy.SubjectSet - 42, // 37: policy.SubjectConditionSet.metadata:type_name -> common.Metadata - 42, // 38: policy.ResourceMappingGroup.metadata:type_name -> common.Metadata - 42, // 39: policy.ResourceMapping.metadata:type_name -> common.Metadata - 14, // 40: policy.ResourceMapping.attribute_value:type_name -> policy.Value - 22, // 41: policy.ResourceMapping.group:type_name -> policy.ResourceMappingGroup - 12, // 42: policy.ResourceMapping.namespace:type_name -> policy.Namespace - 28, // 43: policy.KeyAccessServer.public_key:type_name -> policy.PublicKey - 3, // 44: policy.KeyAccessServer.source_type:type_name -> policy.SourceType - 10, // 45: policy.KeyAccessServer.kas_keys:type_name -> policy.SimpleKasKey - 42, // 46: policy.KeyAccessServer.metadata:type_name -> common.Metadata - 43, // 47: policy.Key.is_active:type_name -> google.protobuf.BoolValue - 43, // 48: policy.Key.was_mapped:type_name -> google.protobuf.BoolValue - 26, // 49: policy.Key.public_key:type_name -> policy.KasPublicKey - 24, // 50: policy.Key.kas:type_name -> policy.KeyAccessServer - 42, // 51: policy.Key.metadata:type_name -> common.Metadata - 4, // 52: policy.KasPublicKey.alg:type_name -> policy.KasPublicKeyAlgEnum - 26, // 53: policy.KasPublicKeySet.keys:type_name -> policy.KasPublicKey - 27, // 54: policy.PublicKey.cached:type_name -> policy.KasPublicKeySet - 30, // 55: policy.RegisteredResource.values:type_name -> policy.RegisteredResourceValue - 12, // 56: policy.RegisteredResource.namespace:type_name -> policy.Namespace - 42, // 57: policy.RegisteredResource.metadata:type_name -> common.Metadata - 29, // 58: policy.RegisteredResourceValue.resource:type_name -> policy.RegisteredResource - 41, // 59: policy.RegisteredResourceValue.action_attribute_values:type_name -> policy.RegisteredResourceValue.ActionAttributeValue - 42, // 60: policy.RegisteredResourceValue.metadata:type_name -> common.Metadata - 31, // 61: policy.RequestContext.pep:type_name -> policy.PolicyEnforcementPoint - 12, // 62: policy.Obligation.namespace:type_name -> policy.Namespace - 34, // 63: policy.Obligation.values:type_name -> policy.ObligationValue - 42, // 64: policy.Obligation.metadata:type_name -> common.Metadata - 33, // 65: policy.ObligationValue.obligation:type_name -> policy.Obligation - 35, // 66: policy.ObligationValue.triggers:type_name -> policy.ObligationTrigger - 42, // 67: policy.ObligationValue.metadata:type_name -> common.Metadata - 34, // 68: policy.ObligationTrigger.obligation_value:type_name -> policy.ObligationValue - 15, // 69: policy.ObligationTrigger.action:type_name -> policy.Action - 14, // 70: policy.ObligationTrigger.attribute_value:type_name -> policy.Value - 32, // 71: policy.ObligationTrigger.context:type_name -> policy.RequestContext - 12, // 72: policy.ObligationTrigger.namespace:type_name -> policy.Namespace - 42, // 73: policy.ObligationTrigger.metadata:type_name -> common.Metadata - 39, // 74: policy.KasKey.key:type_name -> policy.AsymmetricKey - 5, // 75: policy.AsymmetricKey.key_algorithm:type_name -> policy.Algorithm - 6, // 76: policy.AsymmetricKey.key_status:type_name -> policy.KeyStatus - 7, // 77: policy.AsymmetricKey.key_mode:type_name -> policy.KeyMode - 37, // 78: policy.AsymmetricKey.public_key_ctx:type_name -> policy.PublicKeyCtx - 38, // 79: policy.AsymmetricKey.private_key_ctx:type_name -> policy.PrivateKeyCtx - 11, // 80: policy.AsymmetricKey.provider_config:type_name -> policy.KeyProviderConfig - 42, // 81: policy.AsymmetricKey.metadata:type_name -> common.Metadata - 6, // 82: policy.SymmetricKey.key_status:type_name -> policy.KeyStatus - 7, // 83: policy.SymmetricKey.key_mode:type_name -> policy.KeyMode - 11, // 84: policy.SymmetricKey.provider_config:type_name -> policy.KeyProviderConfig - 42, // 85: policy.SymmetricKey.metadata:type_name -> common.Metadata - 15, // 86: policy.RegisteredResourceValue.ActionAttributeValue.action:type_name -> policy.Action - 14, // 87: policy.RegisteredResourceValue.ActionAttributeValue.attribute_value:type_name -> policy.Value - 42, // 88: policy.RegisteredResourceValue.ActionAttributeValue.metadata:type_name -> common.Metadata - 89, // [89:89] is the sub-list for method output_type - 89, // [89:89] is the sub-list for method input_type - 89, // [89:89] is the sub-list for extension type_name - 89, // [89:89] is the sub-list for extension extendee - 0, // [0:89] is the sub-list for field type_name + 15, // 9: policy.Attribute.values:type_name -> policy.Value + 27, // 10: policy.Attribute.grants:type_name -> policy.KeyAccessServer + 46, // 11: policy.Attribute.active:type_name -> google.protobuf.BoolValue + 11, // 12: policy.Attribute.kas_keys:type_name -> policy.SimpleKasKey + 46, // 13: policy.Attribute.allow_traversal:type_name -> google.protobuf.BoolValue + 45, // 14: policy.Attribute.metadata:type_name -> common.Metadata + 14, // 15: policy.Value.attribute:type_name -> policy.Attribute + 27, // 16: policy.Value.grants:type_name -> policy.KeyAccessServer + 46, // 17: policy.Value.active:type_name -> google.protobuf.BoolValue + 17, // 18: policy.Value.subject_mappings:type_name -> policy.SubjectMapping + 11, // 19: policy.Value.kas_keys:type_name -> policy.SimpleKasKey + 26, // 20: policy.Value.resource_mappings:type_name -> policy.ResourceMapping + 36, // 21: policy.Value.obligations:type_name -> policy.Obligation + 45, // 22: policy.Value.metadata:type_name -> common.Metadata + 9, // 23: policy.Action.standard:type_name -> policy.Action.StandardAction + 13, // 24: policy.Action.namespace:type_name -> policy.Namespace + 45, // 25: policy.Action.metadata:type_name -> common.Metadata + 15, // 26: policy.SubjectMapping.attribute_value:type_name -> policy.Value + 23, // 27: policy.SubjectMapping.subject_condition_set:type_name -> policy.SubjectConditionSet + 16, // 28: policy.SubjectMapping.actions:type_name -> policy.Action + 13, // 29: policy.SubjectMapping.namespace:type_name -> policy.Namespace + 45, // 30: policy.SubjectMapping.metadata:type_name -> common.Metadata + 3, // 31: policy.DynamicValueResolver.operator:type_name -> policy.DynamicValueOperatorEnum + 14, // 32: policy.DynamicValueMapping.attribute_definition:type_name -> policy.Attribute + 18, // 33: policy.DynamicValueMapping.value_resolver:type_name -> policy.DynamicValueResolver + 23, // 34: policy.DynamicValueMapping.subject_condition_set:type_name -> policy.SubjectConditionSet + 16, // 35: policy.DynamicValueMapping.actions:type_name -> policy.Action + 13, // 36: policy.DynamicValueMapping.namespace:type_name -> policy.Namespace + 45, // 37: policy.DynamicValueMapping.metadata:type_name -> common.Metadata + 1, // 38: policy.Condition.operator:type_name -> policy.SubjectMappingOperatorEnum + 20, // 39: policy.ConditionGroup.conditions:type_name -> policy.Condition + 2, // 40: policy.ConditionGroup.boolean_operator:type_name -> policy.ConditionBooleanTypeEnum + 21, // 41: policy.SubjectSet.condition_groups:type_name -> policy.ConditionGroup + 13, // 42: policy.SubjectConditionSet.namespace:type_name -> policy.Namespace + 22, // 43: policy.SubjectConditionSet.subject_sets:type_name -> policy.SubjectSet + 45, // 44: policy.SubjectConditionSet.metadata:type_name -> common.Metadata + 45, // 45: policy.ResourceMappingGroup.metadata:type_name -> common.Metadata + 45, // 46: policy.ResourceMapping.metadata:type_name -> common.Metadata + 15, // 47: policy.ResourceMapping.attribute_value:type_name -> policy.Value + 25, // 48: policy.ResourceMapping.group:type_name -> policy.ResourceMappingGroup + 31, // 49: policy.KeyAccessServer.public_key:type_name -> policy.PublicKey + 4, // 50: policy.KeyAccessServer.source_type:type_name -> policy.SourceType + 11, // 51: policy.KeyAccessServer.kas_keys:type_name -> policy.SimpleKasKey + 45, // 52: policy.KeyAccessServer.metadata:type_name -> common.Metadata + 46, // 53: policy.Key.is_active:type_name -> google.protobuf.BoolValue + 46, // 54: policy.Key.was_mapped:type_name -> google.protobuf.BoolValue + 29, // 55: policy.Key.public_key:type_name -> policy.KasPublicKey + 27, // 56: policy.Key.kas:type_name -> policy.KeyAccessServer + 45, // 57: policy.Key.metadata:type_name -> common.Metadata + 5, // 58: policy.KasPublicKey.alg:type_name -> policy.KasPublicKeyAlgEnum + 29, // 59: policy.KasPublicKeySet.keys:type_name -> policy.KasPublicKey + 30, // 60: policy.PublicKey.cached:type_name -> policy.KasPublicKeySet + 33, // 61: policy.RegisteredResource.values:type_name -> policy.RegisteredResourceValue + 13, // 62: policy.RegisteredResource.namespace:type_name -> policy.Namespace + 45, // 63: policy.RegisteredResource.metadata:type_name -> common.Metadata + 32, // 64: policy.RegisteredResourceValue.resource:type_name -> policy.RegisteredResource + 44, // 65: policy.RegisteredResourceValue.action_attribute_values:type_name -> policy.RegisteredResourceValue.ActionAttributeValue + 45, // 66: policy.RegisteredResourceValue.metadata:type_name -> common.Metadata + 34, // 67: policy.RequestContext.pep:type_name -> policy.PolicyEnforcementPoint + 13, // 68: policy.Obligation.namespace:type_name -> policy.Namespace + 37, // 69: policy.Obligation.values:type_name -> policy.ObligationValue + 45, // 70: policy.Obligation.metadata:type_name -> common.Metadata + 36, // 71: policy.ObligationValue.obligation:type_name -> policy.Obligation + 38, // 72: policy.ObligationValue.triggers:type_name -> policy.ObligationTrigger + 45, // 73: policy.ObligationValue.metadata:type_name -> common.Metadata + 37, // 74: policy.ObligationTrigger.obligation_value:type_name -> policy.ObligationValue + 16, // 75: policy.ObligationTrigger.action:type_name -> policy.Action + 15, // 76: policy.ObligationTrigger.attribute_value:type_name -> policy.Value + 35, // 77: policy.ObligationTrigger.context:type_name -> policy.RequestContext + 13, // 78: policy.ObligationTrigger.namespace:type_name -> policy.Namespace + 45, // 79: policy.ObligationTrigger.metadata:type_name -> common.Metadata + 42, // 80: policy.KasKey.key:type_name -> policy.AsymmetricKey + 6, // 81: policy.AsymmetricKey.key_algorithm:type_name -> policy.Algorithm + 7, // 82: policy.AsymmetricKey.key_status:type_name -> policy.KeyStatus + 8, // 83: policy.AsymmetricKey.key_mode:type_name -> policy.KeyMode + 40, // 84: policy.AsymmetricKey.public_key_ctx:type_name -> policy.PublicKeyCtx + 41, // 85: policy.AsymmetricKey.private_key_ctx:type_name -> policy.PrivateKeyCtx + 12, // 86: policy.AsymmetricKey.provider_config:type_name -> policy.KeyProviderConfig + 45, // 87: policy.AsymmetricKey.metadata:type_name -> common.Metadata + 7, // 88: policy.SymmetricKey.key_status:type_name -> policy.KeyStatus + 8, // 89: policy.SymmetricKey.key_mode:type_name -> policy.KeyMode + 12, // 90: policy.SymmetricKey.provider_config:type_name -> policy.KeyProviderConfig + 45, // 91: policy.SymmetricKey.metadata:type_name -> common.Metadata + 16, // 92: policy.RegisteredResourceValue.ActionAttributeValue.action:type_name -> policy.Action + 15, // 93: policy.RegisteredResourceValue.ActionAttributeValue.attribute_value:type_name -> policy.Value + 45, // 94: policy.RegisteredResourceValue.ActionAttributeValue.metadata:type_name -> common.Metadata + 95, // [95:95] is the sub-list for method output_type + 95, // [95:95] is the sub-list for method input_type + 95, // [95:95] is the sub-list for extension type_name + 95, // [95:95] is the sub-list for extension extendee + 0, // [0:95] is the sub-list for field type_name } func init() { file_policy_objects_proto_init() } @@ -4089,7 +4357,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Condition); i { + switch v := v.(*DynamicValueResolver); i { case 0: return &v.state case 1: @@ -4101,7 +4369,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConditionGroup); i { + switch v := v.(*DynamicValueMapping); i { case 0: return &v.state case 1: @@ -4113,7 +4381,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubjectSet); i { + switch v := v.(*Condition); i { case 0: return &v.state case 1: @@ -4125,7 +4393,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubjectConditionSet); i { + switch v := v.(*ConditionGroup); i { case 0: return &v.state case 1: @@ -4137,7 +4405,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubjectProperty); i { + switch v := v.(*SubjectSet); i { case 0: return &v.state case 1: @@ -4149,7 +4417,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResourceMappingGroup); i { + switch v := v.(*SubjectConditionSet); i { case 0: return &v.state case 1: @@ -4161,7 +4429,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResourceMapping); i { + switch v := v.(*SubjectProperty); i { case 0: return &v.state case 1: @@ -4173,7 +4441,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KeyAccessServer); i { + switch v := v.(*ResourceMappingGroup); i { case 0: return &v.state case 1: @@ -4185,7 +4453,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Key); i { + switch v := v.(*ResourceMapping); i { case 0: return &v.state case 1: @@ -4197,7 +4465,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KasPublicKey); i { + switch v := v.(*KeyAccessServer); i { case 0: return &v.state case 1: @@ -4209,7 +4477,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KasPublicKeySet); i { + switch v := v.(*Key); i { case 0: return &v.state case 1: @@ -4221,7 +4489,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PublicKey); i { + switch v := v.(*KasPublicKey); i { case 0: return &v.state case 1: @@ -4233,7 +4501,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisteredResource); i { + switch v := v.(*KasPublicKeySet); i { case 0: return &v.state case 1: @@ -4245,7 +4513,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisteredResourceValue); i { + switch v := v.(*PublicKey); i { case 0: return &v.state case 1: @@ -4257,7 +4525,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PolicyEnforcementPoint); i { + switch v := v.(*RegisteredResource); i { case 0: return &v.state case 1: @@ -4269,7 +4537,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RequestContext); i { + switch v := v.(*RegisteredResourceValue); i { case 0: return &v.state case 1: @@ -4281,7 +4549,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Obligation); i { + switch v := v.(*PolicyEnforcementPoint); i { case 0: return &v.state case 1: @@ -4293,7 +4561,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ObligationValue); i { + switch v := v.(*RequestContext); i { case 0: return &v.state case 1: @@ -4305,7 +4573,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ObligationTrigger); i { + switch v := v.(*Obligation); i { case 0: return &v.state case 1: @@ -4317,7 +4585,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KasKey); i { + switch v := v.(*ObligationValue); i { case 0: return &v.state case 1: @@ -4329,7 +4597,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PublicKeyCtx); i { + switch v := v.(*ObligationTrigger); i { case 0: return &v.state case 1: @@ -4341,7 +4609,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PrivateKeyCtx); i { + switch v := v.(*KasKey); i { case 0: return &v.state case 1: @@ -4353,7 +4621,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AsymmetricKey); i { + switch v := v.(*PublicKeyCtx); i { case 0: return &v.state case 1: @@ -4365,7 +4633,7 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SymmetricKey); i { + switch v := v.(*PrivateKeyCtx); i { case 0: return &v.state case 1: @@ -4377,6 +4645,30 @@ func file_policy_objects_proto_init() { } } file_policy_objects_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AsymmetricKey); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policy_objects_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SymmetricKey); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policy_objects_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RegisteredResourceValue_ActionAttributeValue); i { case 0: return &v.state @@ -4393,7 +4685,7 @@ func file_policy_objects_proto_init() { (*Action_Standard)(nil), (*Action_Custom)(nil), } - file_policy_objects_proto_msgTypes[19].OneofWrappers = []interface{}{ + file_policy_objects_proto_msgTypes[21].OneofWrappers = []interface{}{ (*PublicKey_Remote)(nil), (*PublicKey_Cached)(nil), } @@ -4402,8 +4694,8 @@ func file_policy_objects_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_policy_objects_proto_rawDesc, - NumEnums: 9, - NumMessages: 33, + NumEnums: 10, + NumMessages: 35, NumExtensions: 0, NumServices: 0, }, diff --git a/service/policy/dynamicvaluemapping/dynamic_value_mapping.proto b/service/policy/dynamicvaluemapping/dynamic_value_mapping.proto new file mode 100644 index 0000000000..a16d3aedd4 --- /dev/null +++ b/service/policy/dynamicvaluemapping/dynamic_value_mapping.proto @@ -0,0 +1,173 @@ +syntax = "proto3"; + +package policy.dynamicvaluemapping; + +import "buf/validate/validate.proto"; +import "common/common.proto"; +import "policy/objects.proto"; +import "policy/selectors.proto"; +import "policy/subjectmapping/subject_mapping.proto"; + +/* + Dynamic Value Mapping CRUD operations + + A DynamicValueMapping raises entitlement authority from a concrete AttributeValue to the + AttributeDefinition: at decision time the value_resolver compares the requested resource + value segment against the entity representation, avoiding pre-provisioning a value + + subject mapping per discrete value. +*/ + +message GetDynamicValueMappingRequest { + // Required + string id = 1 [(buf.validate.field).string.uuid = true]; +} +message GetDynamicValueMappingResponse { + policy.DynamicValueMapping dynamic_value_mapping = 1; +} + +enum SortDynamicValueMappingsType { + SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_UNSPECIFIED = 0; + SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_CREATED_AT = 1; + SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_UPDATED_AT = 2; +} + +message DynamicValueMappingsSort { + SortDynamicValueMappingsType field = 1 [(buf.validate.field).enum.defined_only = true]; + policy.SortDirection direction = 2 [(buf.validate.field).enum.defined_only = true]; +} + +message ListDynamicValueMappingsRequest { + // Optional + // Namespace ID, or Attribute Definition ID to filter by + string namespace_id = 1 [(buf.validate.field).cel = { + id: "optional_uuid_format" + message: "Optional field must be a valid UUID" + expression: "size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')" + }]; + string attribute_definition_id = 2 [(buf.validate.field).cel = { + id: "optional_uuid_format" + message: "Optional field must be a valid UUID" + expression: "size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')" + }]; + + // Optional + policy.PageRequest pagination = 10; + + // Optional - CONSTRAINT: max 1 item + repeated DynamicValueMappingsSort sort = 11 [(buf.validate.field).repeated.max_items = 1]; +} +message ListDynamicValueMappingsResponse { + repeated policy.DynamicValueMapping dynamic_value_mappings = 1; + + policy.PageResponse pagination = 10; +} + +message CreateDynamicValueMappingRequest { + // Required: Attribute Definition ID or FQN to scope the mapping to + option (buf.validate.message).oneof = { + fields: ["attribute_definition_id", "attribute_definition_fqn"] + required: true + }; + string attribute_definition_id = 1 [(buf.validate.field).cel = { + id: "optional_uuid_format" + message: "Optional field must be a valid UUID" + expression: "size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')" + }]; + string attribute_definition_fqn = 2 [ + (buf.validate.field).string = { + min_len: 0 + uri: true + } + ]; + + // Required: the dynamic resolver comparing entity selector result to the resource value segment + policy.DynamicValueResolver value_resolver = 3 [(buf.validate.field).required = true]; + + // Required: actions permitted on a matched value + repeated policy.Action actions = 4 [ + (buf.validate.field).repeated.min_items = 1, + (buf.validate.field).cel = { + id: "action_name_or_id_not_empty" + message: "Action name or ID must not be empty if provided" + expression: "this.all(item, item.name != '' || item.id != '')" + } + ]; + + // Optional static pre-gate. Reuse an existing SubjectConditionSet (prioritized) ... + string existing_subject_condition_set_id = 5 [(buf.validate.field).cel = { + id: "optional_uuid_format" + message: "Optional field must be a valid UUID" + expression: "size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')" + }]; + // ... or create a new one (ignored if existing_subject_condition_set_id is provided) + policy.subjectmapping.SubjectConditionSetCreate new_subject_condition_set = 6; + + // Optional: namespace ID or FQN for the mapping + string namespace_id = 7 [(buf.validate.field).cel = { + id: "optional_uuid_format" + message: "Optional field must be a valid UUID" + expression: "size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')" + }]; + string namespace_fqn = 8 [ + (buf.validate.field).string = { + min_len: 0 + uri: true + } + ]; + + // Optional + common.MetadataMutable metadata = 100; +} +message CreateDynamicValueMappingResponse { + policy.DynamicValueMapping dynamic_value_mapping = 1; +} + +message UpdateDynamicValueMappingRequest { + // Required + string id = 1 [(buf.validate.field).string.uuid = true]; + + // Optional: replace the dynamic resolver + policy.DynamicValueResolver value_resolver = 2; + + // Optional: replace the static pre-gate SubjectConditionSet by id + string subject_condition_set_id = 3 [(buf.validate.field).cel = { + id: "optional_uuid_format" + message: "Optional field must be a valid UUID" + expression: "size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')" + }]; + + // Optional: replace the entire list of actions + repeated policy.Action actions = 4 [(buf.validate.field).cel = { + id: "action_name_or_id_not_empty" + message: "Action name or ID must not be empty if provided" + expression: "this.size() == 0 || this.all(item, item.name != '' || item.id != '')" + }]; + + // Common metadata + common.MetadataMutable metadata = 100; + common.MetadataUpdateEnum metadata_update_behavior = 101; +} +message UpdateDynamicValueMappingResponse { + policy.DynamicValueMapping dynamic_value_mapping = 1; +} + +message DeleteDynamicValueMappingRequest { + // Required + string id = 1 [(buf.validate.field).string.uuid = true]; +} +message DeleteDynamicValueMappingResponse { + // Only ID of the deleted mapping provided + policy.DynamicValueMapping dynamic_value_mapping = 1; +} + +service DynamicValueMappingService { + rpc ListDynamicValueMappings(ListDynamicValueMappingsRequest) returns (ListDynamicValueMappingsResponse) { + option idempotency_level = NO_SIDE_EFFECTS; + } + rpc GetDynamicValueMapping(GetDynamicValueMappingRequest) returns (GetDynamicValueMappingResponse) { + option idempotency_level = NO_SIDE_EFFECTS; + } + rpc CreateDynamicValueMapping(CreateDynamicValueMappingRequest) returns (CreateDynamicValueMappingResponse) {} + rpc UpdateDynamicValueMapping(UpdateDynamicValueMappingRequest) returns (UpdateDynamicValueMappingResponse) {} + rpc DeleteDynamicValueMapping(DeleteDynamicValueMappingRequest) returns (DeleteDynamicValueMappingResponse) {} +} diff --git a/service/policy/objects.proto b/service/policy/objects.proto index 2bf66902ae..7cb8c1f1ac 100644 --- a/service/policy/objects.proto +++ b/service/policy/objects.proto @@ -180,6 +180,21 @@ enum ConditionBooleanTypeEnum { CONDITION_BOOLEAN_TYPE_ENUM_OR = 2; } +// Operators for dynamic, definition-level value entitlement. Unlike +// SubjectMappingOperatorEnum, whose right-hand operand is a static list authored into +// policy, a DynamicValueOperatorEnum's right-hand operand is the requested resource's +// attribute value segment, supplied at decision time. Each value is the inversion of its +// static SubjectMappingOperatorEnum counterpart. +enum DynamicValueOperatorEnum { + DYNAMIC_VALUE_OPERATOR_ENUM_UNSPECIFIED = 0; + // true when the requested resource value segment equals one of the values resolved by + // the selector against the entity representation (inversion of IN) + DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN = 1; + // true when one of the selector-resolved entity values contains the requested resource + // value segment as a substring (inversion of IN_CONTAINS) + DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN_CONTAINS = 2; +} + /* Subject Mapping: A Policy assigning Subject Set(s) to a permitted attribute value + action(s) combination @@ -204,6 +219,53 @@ message SubjectMapping { common.Metadata metadata = 100; } +/* + Definition Value Resolver: the dynamic half of a DynamicValueMapping. It + resolves a selector against the entity representation and compares the result to the + requested resource value segment using a DynamicValueOperatorEnum. +*/ +message DynamicValueResolver { + // a selector for a field value on a flattened Entity Representation (such as from + // idP/LDAP), e.g. ".patientAssignments[]" + string subject_external_selector_value = 1 [(buf.validate.field).required = true]; + + // the dynamic operator comparing the selector result to the resource value segment + DynamicValueOperatorEnum operator = 2 [ + (buf.validate.field).enum.defined_only = true, + (buf.validate.field).required = true + ]; +} + +/* + Dynamic Value Mapping: a Policy assigning permitted action(s) to + dynamically-requested values under an Attribute Definition. It raises entitlement + authority from a concrete Attribute Value to the Attribute Definition: at decision time + the value_resolver compares the requested resource value segment against the entity + representation, avoiding pre-provisioning a value + subject mapping per discrete value. +*/ +message DynamicValueMapping { + string id = 1; + + // the Attribute Definition whose values are entitled dynamically + Attribute attribute_definition = 2; + + // the dynamic resolver matched against the requested resource value segment + DynamicValueResolver value_resolver = 3; + + // optional static pre-gate on the entity, evaluated with normal SubjectConditionSet + // semantics (no dynamic overload). When present, both the gate and the resolver must + // pass for entitlement. + SubjectConditionSet subject_condition_set = 4; + + // the actions permitted by subjects in this mapping + repeated Action actions = 5; + + // the namespace containing this mapping + Namespace namespace = 6; + + common.Metadata metadata = 100; +} + /** A Condition defines a rule of From 4fd5dfa1930f255a8d8b878fe8d5229c15013563 Mon Sep 17 00:00:00 2001 From: Krish Suchak Date: Thu, 11 Jun 2026 11:08:11 -0400 Subject: [PATCH 2/4] feat(policy): DSPX-2754 DynamicValueMapping protos + generated code Adds the DynamicValueMapping / DynamicValueResolver messages and DynamicValueOperatorEnum to objects.proto, and a dedicated DynamicValueMappingService (policy.dynamicvaluemapping), with regenerated protocol/go and OpenAPI/gRPC docs. Protocol-first half of DSPX-2754; the consumer implementation (service/sdk/db/PDP) is PR #3568. Includes review fixes: namespace oneof + min_len:1/uri + direct validation rules on CreateDynamicValueMappingRequest; per-field List filter comments; and a namespace_fqn filter (namespace_id|namespace_fqn oneof) on ListDynamicValueMappingsRequest. Refs: DSPX-2754, DSPX-3498 Signed-off-by: Krish Suchak --- docs/grpc/index.html | 6267 ++++++++--------- .../dynamic_value_mapping.openapi.yaml | 21 +- protocol/go/go.mod | 2 - .../dynamic_value_mapping.pb.go | 518 +- protocol/go/policy/objects.pb.go | 849 +-- .../dynamic_value_mapping.proto | 45 +- 6 files changed, 3496 insertions(+), 4206 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index 1df04177e0..3e4b1031dd 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -241,14 +241,6 @@

        Table of Contents

        MConditionGroup -
      • - MDynamicValueMapping -
      • - -
      • - MDynamicValueResolver -
      • -
      • MKasKey
      • @@ -378,10 +370,6 @@

        Table of Contents

        EConditionBooleanTypeEnum -
      • - EDynamicValueOperatorEnum -
      • -
      • EKasPublicKeyAlgEnum
      • @@ -1083,200 +1071,6 @@

        Table of Contents

        -
      • - policy/subjectmapping/subject_mapping.proto - -
      • - - -
      • - policy/dynamicvaluemapping/dynamic_value_mapping.proto - -
      • - -
      • policy/kasregistry/key_access_server_registry.proto
      • Method NameRequest TypeResponse TypeDescription
        MatchSubjectMappingsMatchSubjectMappingsRequestMatchSubjectMappingsResponse

        Find matching Subject Mappings for a given Subject

        ListSubjectMappingsListSubjectMappingsRequestListSubjectMappingsResponseListResourceMappingGroupsListResourceMappingGroupsRequestListResourceMappingGroupsResponse

        GetSubjectMappingGetSubjectMappingRequestGetSubjectMappingResponseGetResourceMappingGroupGetResourceMappingGroupRequestGetResourceMappingGroupResponse

        CreateSubjectMappingCreateSubjectMappingRequestCreateSubjectMappingResponseCreateResourceMappingGroupCreateResourceMappingGroupRequestCreateResourceMappingGroupResponse

        UpdateSubjectMappingUpdateSubjectMappingRequestUpdateSubjectMappingResponseUpdateResourceMappingGroupUpdateResourceMappingGroupRequestUpdateResourceMappingGroupResponse

        DeleteSubjectMappingDeleteSubjectMappingRequestDeleteSubjectMappingResponseDeleteResourceMappingGroupDeleteResourceMappingGroupRequestDeleteResourceMappingGroupResponse

        ListSubjectConditionSetsListSubjectConditionSetsRequestListSubjectConditionSetsResponseListResourceMappingsListResourceMappingsRequestListResourceMappingsResponse

        GetSubjectConditionSetGetSubjectConditionSetRequestGetSubjectConditionSetResponseListResourceMappingsByGroupFqnsListResourceMappingsByGroupFqnsRequestListResourceMappingsByGroupFqnsResponse

        CreateSubjectConditionSetCreateSubjectConditionSetRequestCreateSubjectConditionSetResponseGetResourceMappingGetResourceMappingRequestGetResourceMappingResponse

        UpdateSubjectConditionSetUpdateSubjectConditionSetRequestUpdateSubjectConditionSetResponseCreateResourceMappingCreateResourceMappingRequestCreateResourceMappingResponse

        DeleteSubjectConditionSetDeleteSubjectConditionSetRequestDeleteSubjectConditionSetResponseUpdateResourceMappingUpdateResourceMappingRequestUpdateResourceMappingResponse

        DeleteAllUnmappedSubjectConditionSetsDeleteAllUnmappedSubjectConditionSetsRequestDeleteAllUnmappedSubjectConditionSetsResponseDeleteResourceMappingDeleteResourceMappingRequestDeleteResourceMappingResponse

        ListSubjectMappingsListResourceMappingGroups

        NO_SIDE_EFFECTS

        GetSubjectMappingGetResourceMappingGroup

        NO_SIDE_EFFECTS

        ListSubjectConditionSetsListResourceMappings

        NO_SIDE_EFFECTS

        GetSubjectConditionSetListResourceMappingsByGroupFqns

        NO_SIDE_EFFECTS

        GetResourceMapping

        NO_SIDE_EFFECTS

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        FieldTypeLabelDescription
        idstring

        attribute_definitionAttribute

        the Attribute Definition whose values are entitled dynamically

        value_resolverDynamicValueResolver

        the dynamic resolver matched against the requested resource value segment

        subject_condition_setSubjectConditionSet

        optional static pre-gate on the entity, evaluated with normal SubjectConditionSet -semantics (no dynamic overload). When present, both the gate and the resolver must -pass for entitlement.

        actionsActionrepeated

        the actions permitted by subjects in this mapping

        namespaceNamespace

        the namespace containing this mapping

        metadatacommon.Metadata

        - - - - - -

        DynamicValueResolver

        -

        Definition Value Resolver: the dynamic half of a DynamicValueMapping. It

        resolves a selector against the entity representation and compares the result to the

        requested resource value segment using a DynamicValueOperatorEnum.

        - - - - - - - - - - - - - - - - - - - - - - - -
        FieldTypeLabelDescription
        subject_external_selector_valuestring

        a selector for a field value on a flattened Entity Representation (such as from -idP/LDAP), e.g. ".patientAssignments[]"

        operatorDynamicValueOperatorEnum

        the dynamic operator comparing the selector result to the resource value segment

        - - - - -

        KasKey

        @@ -4389,37 +4214,6 @@

        ConditionBooleanTypeEnum

        -

        DynamicValueOperatorEnum

        -

        Operators for dynamic, definition-level value entitlement. Unlike

        SubjectMappingOperatorEnum, whose right-hand operand is a static list authored into

        policy, a DynamicValueOperatorEnum's right-hand operand is the requested resource's

        attribute value segment, supplied at decision time. Each value is the inversion of its

        static SubjectMappingOperatorEnum counterpart.

        - - - - - - - - - - - - - - - - - - - - - - - - - -
        NameNumberDescription
        DYNAMIC_VALUE_OPERATOR_ENUM_UNSPECIFIED0

        DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN1

        true when the requested resource value segment equals one of the values resolved by -the selector against the entity representation (inversion of IN)

        DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN_CONTAINS2

        true when one of the selector-resolved entity values contains the requested resource -value segment as a substring (inversion of IN_CONTAINS)

        -

        KasPublicKeyAlgEnum

        @@ -9795,12 +9589,12 @@

        Methods with idempotency_level option

        -

        policy/subjectmapping/subject_mapping.proto

        Top +

        policy/kasregistry/key_access_server_registry.proto

        Top

        -

        CreateSubjectConditionSetRequest

        +

        ActivatePublicKeyRequest

        @@ -9811,21 +9605,7 @@

        CreateSubjectCon

        - - - - - - - - - - - - - - - + @@ -9838,7 +9618,7 @@

        CreateSubjectCon -

        CreateSubjectConditionSetResponse

        +

        ActivatePublicKeyResponse

        @@ -9849,8 +9629,8 @@

        CreateSubjectCo

        - - + + @@ -9862,8 +9642,8 @@

        CreateSubjectCo -

        CreateSubjectMappingRequest

        -

        +

        ChangeMappings

        +

        Simplified information about the resources that were rotated as part of the key rotation process.

        subject_condition_setSubjectConditionSetCreate

        namespace_idstring

        namespace_fqnid string

        subject_condition_setpolicy.SubjectConditionSetkeypolicy.Key

        @@ -9873,56 +9653,69 @@

        CreateSubjectMappingR

        - + - + - - - - + + + + + +
        attribute_value_idid string

        Required -Attribute Value to be mapped to

        actionspolicy.Actionrepeated

        Required -The actions permitted by subjects in this mapping

        fqnstring

        + + + + + +

        CreateKeyAccessServerRequest

        +

        + + + + + + + + - + - + - - + + - + - - + + - + - + - + - + @@ -9932,7 +9725,7 @@

        CreateSubjectMappingR -

        CreateSubjectMappingResponse

        +

        CreateKeyAccessServerResponse

        @@ -9943,8 +9736,8 @@

        CreateSubjectMapping

        - - + + @@ -9956,15 +9749,8 @@

        CreateSubjectMapping -

        DeleteAllUnmappedSubjectConditionSetsRequest

        -

        Prune any Subject Condition Sets not utilized within a Subject Mapping

        - - - - - -

        DeleteAllUnmappedSubjectConditionSetsResponse

        -

        +

        CreateKeyRequest

        +

        Create a new asymmetric key for the specified Key Access Server (KAS)

        FieldTypeLabelDescription
        existing_subject_condition_set_iduri string

        Either of the following: -Reuse existing SubjectConditionSet (NOTE: prioritized over new_subject_condition_set)

        Required

        new_subject_condition_setSubjectConditionSetCreatepublic_keypolicy.PublicKey

        Create new SubjectConditionSet (NOTE: ignored if existing_subject_condition_set_id is provided)

        Deprecated

        namespace_idstringsource_typepolicy.SourceType

        Optional -Namespace ID or FQN for the subject mapping

        Optional

        namespace_fqnname string

        Optional

        metadata common.MetadataMutable

        Optional

        Common metadata

        subject_mappingpolicy.SubjectMappingkey_access_serverpolicy.KeyAccessServer

        @@ -9974,34 +9760,84 @@

        Del

        - - - - + + + + - -
        subject_condition_setspolicy.SubjectConditionSetrepeated

        Only IDs of any deleted Subject Condition Set provided

        kas_idstring

        Required + +The unique identifier of the Key Access Server

        + + key_id + string + +

        Required - +A user-defined identifier for the key

        + + + + key_algorithm + policy.Algorithm + +

        Required - - -

        DeleteSubjectConditionSetRequest

        -

        +The algorithm to be used for the key

        + + + + key_mode + policy.KeyMode + +

        Required - - - - - - +The mode of the key (e.g., local or external)

        + - + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + @@ -10011,8 +9847,8 @@

        DeleteSubjectCon -

        DeleteSubjectConditionSetResponse

        -

        +

        CreateKeyResponse

        +

        Response to a CreateKeyRequest, containing the created asymmetric key

        FieldTypeLabelDescription
        idpublic_key_ctxpolicy.PublicKeyCtx

        Required + +Context or additional data specific to the public key, based on the key provider implementation

        private_key_ctxpolicy.PrivateKeyCtx

        Conditionally Required + +Context or additional data specific to the private key, based on the key provider implementation

        provider_config_id string

        Required

        Optional + +Configuration ID for the key provider, if applicable

        legacybool

        Optional + +Whether the key is a legacy key

        metadatacommon.MetadataMutable

        Common metadata + +Mutable metadata for the key

        @@ -10022,10 +9858,10 @@

        DeleteSubjectCo

        - - + + - + @@ -10035,7 +9871,7 @@

        DeleteSubjectCo -

        DeleteSubjectMappingRequest

        +

        CreatePublicKeyRequest

        @@ -10046,12 +9882,26 @@

        DeleteSubjectMappingR

        - + + + + + + + + + + + + + + +
        subject_condition_setpolicy.SubjectConditionSetkas_keypolicy.KasKey

        Only ID of deleted Subject Condition Set provided

        The created asymmetric key for a KAS.

        idkas_id string

        Required

        keypolicy.KasPublicKey

        Required

        metadatacommon.MetadataMutable

        Common metadata

        @@ -10059,7 +9909,7 @@

        DeleteSubjectMappingR -

        DeleteSubjectMappingResponse

        +

        CreatePublicKeyResponse

        @@ -10070,10 +9920,10 @@

        DeleteSubjectMapping - subject_mapping - policy.SubjectMapping + key + policy.Key -

        Only ID of the updated Subject Mapping provided

        +

        @@ -10083,7 +9933,7 @@

        DeleteSubjectMapping -

        GetSubjectConditionSetRequest

        +

        DeactivatePublicKeyRequest

        @@ -10097,7 +9947,7 @@

        GetSubjectCondition id string -

        Required

        +

        @@ -10107,7 +9957,7 @@

        GetSubjectCondition -

        GetSubjectConditionSetResponse

        +

        DeactivatePublicKeyResponse

        @@ -10118,19 +9968,12 @@

        GetSubjectConditio - subject_condition_set - policy.SubjectConditionSet + key + policy.Key

        - - associated_subject_mappings - policy.SubjectMapping - repeated -

        contextualized Subject Mappings associated with this SubjectConditionSet

        - - @@ -10138,7 +9981,7 @@

        GetSubjectConditio -

        GetSubjectMappingRequest

        +

        DeleteKeyAccessServerRequest

        @@ -10162,7 +10005,7 @@

        GetSubjectMappingRequest -

        GetSubjectMappingResponse

        +

        DeleteKeyAccessServerResponse

        @@ -10173,8 +10016,8 @@

        GetSubjectMappingRespon - subject_mapping - policy.SubjectMapping + key_access_server + policy.KeyAccessServer

        @@ -10186,7 +10029,14 @@

        GetSubjectMappingRespon -

        ListSubjectConditionSetsRequest

        +

        GetBaseKeyRequest

        +

        + + + + + +

        GetBaseKeyResponse

        @@ -10197,35 +10047,10 @@

        ListSubjectCondit - namespace_id - string - -

        - - - - namespace_fqn - string + base_key + policy.SimpleKasKey -

        - - - - pagination - policy.PageRequest - -

        Optional

        - - - - sort - SubjectConditionSetsSort - repeated -

        Optional - CONSTRAINT: max 1 item -Sort defaults: - - direction UNSPECIFIED defaults to DESC for the specified field - - field UNSPECIFIED defaults to created_at with the specified direction - - both UNSPECIFIED or sort omitted defaults to created_at DESC

        +

        The current base key

        @@ -10235,7 +10060,7 @@

        ListSubjectCondit -

        ListSubjectConditionSetsResponse

        +

        GetKeyAccessServerRequest

        @@ -10246,15 +10071,29 @@

        ListSubjectCondi - subject_condition_sets - policy.SubjectConditionSet - repeated + id + string + +

        Deprecated. Deprecated

        + + + + kas_id + string + +

        option (buf.validate.oneof).required = true; // TODO: enable this when we remove the deprecated field

        + + + + name + string +

        - pagination - policy.PageResponse + uri + string

        @@ -10263,10 +10102,31 @@

        ListSubjectCondi + + +

        Fields with deprecated option

        + + + + + + + + + + + + + + + +
        NameOption
        id

        true

        + + -

        ListSubjectMappingsRequest

        +

        GetKeyAccessServerResponse

        @@ -10277,35 +10137,41 @@

        ListSubjectMappingsReq - namespace_id - string + key_access_server + policy.KeyAccessServer

        + + + + + + + +

        GetKeyRequest

        +

        Retrieve an existing asymmetric key from the Key Management System

        + + + + + + + + - + - + - - + + - - - - - - - - + @@ -10315,8 +10181,8 @@

        ListSubjectMappingsReq -

        ListSubjectMappingsResponse

        -

        +

        GetKeyResponse

        +

        Response to a GetKeyRequest, containing the requested asymmetric key

        FieldTypeLabelDescription
        namespace_fqnid string

        The unique identifier of the key to retrieve

        paginationpolicy.PageRequestkeyKasKeyIdentifier

        Optional

        sortSubjectMappingsSortrepeated

        Optional - CONSTRAINT: max 1 item -Sort defaults: - - direction UNSPECIFIED defaults to DESC for the specified field - - field UNSPECIFIED defaults to created_at with the specified direction - - both UNSPECIFIED or sort omitted defaults to created_at DESC

        @@ -10326,17 +10192,10 @@

        ListSubjectMappingsRe

        - - - - - - - - - + + - + @@ -10346,8 +10205,8 @@

        ListSubjectMappingsRe -

        MatchSubjectMappingsRequest

        -

        MatchSubjectMappingsRequest liberally returns a list of SubjectMappings based on the provided SubjectProperties.

        The SubjectMappings are returned if an external selector field matches.

        +

        GetPublicKeyRequest

        +

        subject_mappingspolicy.SubjectMappingrepeated

        paginationpolicy.PageResponsekas_keypolicy.KasKey

        The requested asymmetric key for a KAS.

        @@ -10357,9 +10216,9 @@

        MatchSubjectMappingsR

        - - - + + + @@ -10370,7 +10229,7 @@

        MatchSubjectMappingsR -

        MatchSubjectMappingsResponse

        +

        GetPublicKeyResponse

        @@ -10381,9 +10240,9 @@

        MatchSubjectMappings

        - - - + + + @@ -10394,8 +10253,8 @@

        MatchSubjectMappings -

        SubjectConditionSetCreate

        -

        +

        GrantedPolicyObject

        +

        Can be namespace, attribute definition, or value

        subject_propertiespolicy.SubjectPropertyrepeatedidstring

        subject_mappingspolicy.SubjectMappingrepeatedkeypolicy.Key

        @@ -10405,18 +10264,17 @@

        SubjectConditionSetCrea

        - - - - + + + + - - + + - + @@ -10426,8 +10284,8 @@

        SubjectConditionSetCrea -

        SubjectConditionSetsSort

        -

        +

        KasKeyIdentifier

        +

        Nested message for specifying the active key using KAS ID and Key ID

        subject_setspolicy.SubjectSetrepeated

        Required

        idstring

        metadatacommon.MetadataMutablefqnstring

        Optional -Common metadata

        @@ -10437,19 +10295,33 @@

        SubjectConditionSetsSort

        - - + + - - + + + + + + + + + + + + + + + +
        fieldSortSubjectConditionSetsTypekas_idstring

        directionpolicy.SortDirectionnamestring

        uristring

        kidstring

        Required Key ID of the key in question

        @@ -10457,7 +10329,7 @@

        SubjectConditionSetsSort -

        SubjectMappingsSort

        +

        KasKeysSort

        @@ -10469,7 +10341,7 @@

        SubjectMappingsSort

        field - SortSubjectMappingsType + SortKasKeysType

        @@ -10488,8 +10360,8 @@

        SubjectMappingsSort

        -

        UpdateSubjectConditionSetRequest

        -

        +

        KeyAccessServerGrants

        +

        Deprecated

        @@ -10499,31 +10371,30 @@

        UpdateSubjectCon

        - - + + - + - - + + - + - - - - + + + + - - - + + + @@ -10534,7 +10405,7 @@

        UpdateSubjectCon -

        UpdateSubjectConditionSetResponse

        +

        KeyAccessServersSort

        @@ -10545,10 +10416,17 @@

        UpdateSubjectCo

        - - + + - + + + + + + + + @@ -10558,7 +10436,7 @@

        UpdateSubjectCo -

        UpdateSubjectMappingRequest

        +

        KeyMapping

        @@ -10569,451 +10447,38 @@

        UpdateSubjectMappingR

        - + - + - + - + - - + + - + - - - - - - - - - - - - - - -
        idstringkey_access_serverpolicy.KeyAccessServer

        Required

        subject_setspolicy.SubjectSetnamespace_grantsGrantedPolicyObject repeated

        Optional -If provided, replaces entire existing structure of Subject Sets, Condition Groups, & Conditions

        metadatacommon.MetadataMutable

        Common metadata

        attribute_grantsGrantedPolicyObjectrepeated

        metadata_update_behaviorcommon.MetadataUpdateEnumvalue_grantsGrantedPolicyObjectrepeated

        subject_condition_setpolicy.SubjectConditionSetfieldSortKeyAccessServersType

        Only ID of updated Subject Condition Set provided

        directionpolicy.SortDirection

        idkid string

        Required

        subject_condition_set_idkas_uri string

        Optional -Replaces the existing SubjectConditionSet id with a new one

        actionspolicy.Actionnamespace_mappingsMappedPolicyObject repeated

        Optional -Replaces entire list of actions permitted by subjects

        List of namespaces mapped to the key

        metadatacommon.MetadataMutable

        Common metadata

        metadata_update_behaviorcommon.MetadataUpdateEnum

        - - - - - -

        UpdateSubjectMappingResponse

        -

        - - - - - - - - - - - - - - - - -
        FieldTypeLabelDescription
        subject_mappingpolicy.SubjectMapping

        Only ID of the updated Subject Mapping provided

        - - - - - - - -

        SortSubjectConditionSetsType

        -

        - - - - - - - - - - - - - - - - - - - - - - - - - -
        NameNumberDescription
        SORT_SUBJECT_CONDITION_SETS_TYPE_UNSPECIFIED0

        SORT_SUBJECT_CONDITION_SETS_TYPE_CREATED_AT1

        SORT_SUBJECT_CONDITION_SETS_TYPE_UPDATED_AT2

        - -

        SortSubjectMappingsType

        -

        - - - - - - - - - - - - - - - - - - - - - - - - - -
        NameNumberDescription
        SORT_SUBJECT_MAPPINGS_TYPE_UNSPECIFIED0

        SORT_SUBJECT_MAPPINGS_TYPE_CREATED_AT1

        SORT_SUBJECT_MAPPINGS_TYPE_UPDATED_AT2

        - - - - - -

        SubjectMappingService

        -

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Method NameRequest TypeResponse TypeDescription
        MatchSubjectMappingsMatchSubjectMappingsRequestMatchSubjectMappingsResponse

        Find matching Subject Mappings for a given Subject

        ListSubjectMappingsListSubjectMappingsRequestListSubjectMappingsResponse

        GetSubjectMappingGetSubjectMappingRequestGetSubjectMappingResponse

        CreateSubjectMappingCreateSubjectMappingRequestCreateSubjectMappingResponse

        UpdateSubjectMappingUpdateSubjectMappingRequestUpdateSubjectMappingResponse

        DeleteSubjectMappingDeleteSubjectMappingRequestDeleteSubjectMappingResponse

        ListSubjectConditionSetsListSubjectConditionSetsRequestListSubjectConditionSetsResponse

        GetSubjectConditionSetGetSubjectConditionSetRequestGetSubjectConditionSetResponse

        CreateSubjectConditionSetCreateSubjectConditionSetRequestCreateSubjectConditionSetResponse

        UpdateSubjectConditionSetUpdateSubjectConditionSetRequestUpdateSubjectConditionSetResponse

        DeleteSubjectConditionSetDeleteSubjectConditionSetRequestDeleteSubjectConditionSetResponse

        DeleteAllUnmappedSubjectConditionSetsDeleteAllUnmappedSubjectConditionSetsRequestDeleteAllUnmappedSubjectConditionSetsResponse

        - - - - -

        Methods with idempotency_level option

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Method NameOption
        ListSubjectMappings

        NO_SIDE_EFFECTS

        GetSubjectMapping

        NO_SIDE_EFFECTS

        ListSubjectConditionSets

        NO_SIDE_EFFECTS

        GetSubjectConditionSet

        NO_SIDE_EFFECTS

        - - - - -
        -

        policy/dynamicvaluemapping/dynamic_value_mapping.proto

        Top -
        -

        - - -

        CreateDynamicValueMappingRequest

        -

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        FieldTypeLabelDescription
        attribute_definition_idstring

        attribute_definition_fqnstring

        value_resolverpolicy.DynamicValueResolver

        Required: the dynamic resolver comparing entity selector result to the resource value segment

        actionspolicy.Actionattribute_mappingsMappedPolicyObject repeated

        Required: actions permitted on a matched value

        existing_subject_condition_set_idstring

        Optional static pre-gate. Reuse an existing SubjectConditionSet (prioritized) ...

        new_subject_condition_setpolicy.subjectmapping.SubjectConditionSetCreate

        ... or create a new one (ignored if existing_subject_condition_set_id is provided)

        namespace_idstring

        Optional: namespace ID or FQN for the mapping

        namespace_fqnstring

        metadatacommon.MetadataMutable

        Optional

        - - - - - -

        CreateDynamicValueMappingResponse

        -

        - - - - - - - - - - - - - - - - -
        FieldTypeLabelDescription
        dynamic_value_mappingpolicy.DynamicValueMapping

        - - - - - -

        DeleteDynamicValueMappingRequest

        -

        - - - - - - - - - - - - - - - - -
        FieldTypeLabelDescription
        idstring

        Required

        - - - - - -

        DeleteDynamicValueMappingResponse

        -

        - - - - - - - - - - - - - - - - -
        FieldTypeLabelDescription
        dynamic_value_mappingpolicy.DynamicValueMapping

        Only ID of the deleted mapping provided

        - - - - - -

        DynamicValueMappingsSort

        -

        - - - - - - - - - - - - - + - - - - + + + + @@ -11023,8 +10488,8 @@

        DynamicValueMapping -

        GetDynamicValueMappingRequest

        -

        +

        ListKeyAccessServerGrantsRequest

        +

        LIST of KAS Grants returns flat response of grants to all policy objects. It

        does not employ selectors for grants to specific policy objects or build the

        attribute tree relation. If grants to a known namespace, attribute, or value

        are needed, use the respective GET request to the specific policy object.

        FieldTypeLabelDescription
        fieldSortDynamicValueMappingsType

        List of attribute definitions mapped to the key

        directionpolicy.SortDirection

        value_mappingsMappedPolicyObjectrepeated

        List of attribute values mapped to the key

        @@ -11034,66 +10499,33 @@

        GetDynamicValu

        - + - - - - -
        idkas_id string

        Required

        - - - - - -

        GetDynamicValueMappingResponse

        -

        - - - - - - - - - - - - - + - -
        FieldTypeLabelDescription
        dynamic_value_mappingpolicy.DynamicValueMapping

        Optional +Filter LIST by ID of a registered Key Access Server. +If neither is provided, grants from all registered KASs to policy attribute +objects are returned.

        - - - - - -

        ListDynamicValueMappingsRequest

        -

        - - - - - - - - - + +Filter LIST by URI of a registered Key Access Server. +If none is provided, grants from all registered KASs to policy attribute +objects are returned.

        - + - + @@ -11103,13 +10535,6 @@

        ListDynamicV

        - - - - - - -
        FieldTypeLabelDescription
        namespace_idkas_uri string

        Optional -Namespace ID, or Attribute Definition ID to filter by

        attribute_definition_idkas_name string

        Optional +Filter LIST by name of a registered Key Access Server. +If none are provided, grants from all registered KASs to policy attribute +objects are returned.

        Optional

        sortDynamicValueMappingsSortrepeated

        Optional - CONSTRAINT: max 1 item

        @@ -11117,8 +10542,8 @@

        ListDynamicV -

        ListDynamicValueMappingsResponse

        -

        +

        ListKeyAccessServerGrantsResponse

        +

        Deprecated

        @@ -11128,10 +10553,10 @@

        ListDynamic

        - - + + - + @@ -11145,69 +10570,31 @@

        ListDynamic

        dynamic_value_mappingspolicy.DynamicValueMappinggrantsKeyAccessServerGrants repeated

        Deprecated.

        + + +

        Fields with deprecated option

        + + + + + + + + + + + + + + + +
        NameOption
        grants

        true

        + + -

        UpdateDynamicValueMappingRequest

        -

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        FieldTypeLabelDescription
        idstring

        Required

        value_resolverpolicy.DynamicValueResolver

        Optional: replace the dynamic resolver

        subject_condition_set_idstring

        Optional: replace the static pre-gate SubjectConditionSet by id

        actionspolicy.Actionrepeated

        Optional: replace the entire list of actions

        metadatacommon.MetadataMutable

        Common metadata

        metadata_update_behaviorcommon.MetadataUpdateEnum

        - - - - - -

        UpdateDynamicValueMappingResponse

        +

        ListKeyAccessServersRequest

        @@ -11218,10 +10605,28 @@

        UpdateDyna - dynamic_value_mapping - policy.DynamicValueMapping + pagination + policy.PageRequest -

        +

        Optional

        + + + + sort + KeyAccessServersSort + repeated +

        Optional - CONSTRAINT: max 1 item +Sort defaults: + - direction UNSPECIFIED defaults to DESC for the specified field + - field UNSPECIFIED defaults to created_at with the specified direction + - both UNSPECIFIED or sort omitted defaults to created_at DESC

        + + + + search + policy.Search + +

        Optional

        @@ -11231,123 +10636,7 @@

        UpdateDyna - - -

        SortDynamicValueMappingsType

        -

        - - - - - - - - - - - - - - - - - - - - - - - - - -
        NameNumberDescription
        SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_UNSPECIFIED0

        SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_CREATED_AT1

        SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_UPDATED_AT2

        - - - - - -

        DynamicValueMappingService

        -

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Method NameRequest TypeResponse TypeDescription
        ListDynamicValueMappingsListDynamicValueMappingsRequestListDynamicValueMappingsResponse

        GetDynamicValueMappingGetDynamicValueMappingRequestGetDynamicValueMappingResponse

        CreateDynamicValueMappingCreateDynamicValueMappingRequestCreateDynamicValueMappingResponse

        UpdateDynamicValueMappingUpdateDynamicValueMappingRequestUpdateDynamicValueMappingResponse

        DeleteDynamicValueMappingDeleteDynamicValueMappingRequestDeleteDynamicValueMappingResponse

        - - - - -

        Methods with idempotency_level option

        - - - - - - - - - - - - - - - - - - - - -
        Method NameOption
        ListDynamicValueMappings

        NO_SIDE_EFFECTS

        GetDynamicValueMapping

        NO_SIDE_EFFECTS

        - - - - -
        -

        policy/kasregistry/key_access_server_registry.proto

        Top -
        -

        - - -

        ActivatePublicKeyRequest

        +

        ListKeyAccessServersResponse

        @@ -11358,8 +10647,15 @@

        ActivatePublicKeyRequest - id - string + key_access_servers + policy.KeyAccessServer + repeated +

        + + + + pagination + policy.PageResponse

        @@ -11371,7 +10667,7 @@

        ActivatePublicKeyRequestActivatePublicKeyResponse

        +

        ListKeyMappingsRequest

        @@ -11381,13 +10677,27 @@

        ActivatePublicKeyResponse< + + id + string + +

        The unique identifier of the key to retrieve

        + + key - policy.Key + KasKeyIdentifier

        + + pagination + policy.PageRequest + +

        Pagination request for the list of keys

        + + @@ -11395,8 +10705,8 @@

        ActivatePublicKeyResponse< -

        ChangeMappings

        -

        Simplified information about the resources that were rotated as part of the key rotation process.

        +

        ListKeyMappingsResponse

        +

        @@ -11406,17 +10716,17 @@

        ChangeMappings

        - - - - + + + + - - + + - + @@ -11426,8 +10736,8 @@

        ChangeMappings

        -

        CreateKeyAccessServerRequest

        -

        +

        ListKeysRequest

        +

        List all asymmetric keys managed by a specific Key Access Server or with a given algorithm

        idstring

        key_mappingsKeyMappingrepeated

        The list of key mappings

        fqnstringpaginationpolicy.PageResponse

        Pagination response for the list of keys

        @@ -11437,38 +10747,67 @@

        CreateKeyAccessServerRe

        - - + + - + - - + + - + - - + + - + - + - + - - + + + + + + + + + - + + + + + + + + + + + + + + + @@ -11478,8 +10817,8 @@

        CreateKeyAccessServerRe -

        CreateKeyAccessServerResponse

        -

        +

        ListKeysResponse

        +

        Response to a ListKeysRequest, containing the list of asymmetric keys and pagination information

        uristringkey_algorithmpolicy.Algorithm

        Required

        Filter keys by algorithm

        public_keypolicy.PublicKeykas_idstring

        Deprecated

        Filter keys by the KAS ID

        source_typepolicy.SourceTypekas_namestring

        Optional

        Filter keys by the KAS name

        namekas_uri string

        Optional

        Filter keys by the KAS URI

        metadatacommon.MetadataMutablelegacybooloptional

        Optional + +Filter for legacy keys

        paginationpolicy.PageRequest

        Common metadata

        Optional + +Pagination request for the list of keys

        sortKasKeysSortrepeated

        Optional - CONSTRAINT: max 1 item +Sort defaults: + - direction UNSPECIFIED defaults to DESC for the specified field + - field UNSPECIFIED defaults to created_at with the specified direction + - both UNSPECIFIED or sort omitted defaults to created_at DESC

        searchpolicy.Search

        Optional

        @@ -11489,10 +10828,17 @@

        CreateKeyAccessServerR

        - - + + + + + + + + + - + @@ -11502,8 +10848,8 @@

        CreateKeyAccessServerR -

        CreateKeyRequest

        -

        Create a new asymmetric key for the specified Key Access Server (KAS)

        +

        ListPublicKeyMappingRequest

        +

        key_access_serverpolicy.KeyAccessServerkas_keyspolicy.KasKeyrepeated

        The list of kas keys

        paginationpolicy.PageResponse

        Pagination response for the list of keys

        @@ -11516,81 +10862,35 @@

        CreateKeyRequest

        - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - - + + - + - - + + - + @@ -11600,8 +10900,8 @@

        CreateKeyRequest

        -

        CreateKeyResponse

        -

        Response to a CreateKeyRequest, containing the created asymmetric key

        +

        ListPublicKeyMappingResponse

        +

        kas_id string

        Required - -The unique identifier of the Key Access Server

        Optional

        key_idkas_name string

        Required - -A user-defined identifier for the key

        key_algorithmpolicy.Algorithm

        Required - -The algorithm to be used for the key

        key_modepolicy.KeyMode

        Required - -The mode of the key (e.g., local or external)

        public_key_ctxpolicy.PublicKeyCtx

        Required - -Context or additional data specific to the public key, based on the key provider implementation

        private_key_ctxpolicy.PrivateKeyCtx

        Conditionally Required - -Context or additional data specific to the private key, based on the key provider implementation

        Optional

        provider_config_idkas_uri string

        Optional - -Configuration ID for the key provider, if applicable

        Optional

        legacyboolpublic_key_idstring

        Optional - -Whether the key is a legacy key

        Optional Public Key ID

        metadatacommon.MetadataMutablepaginationpolicy.PageRequest

        Common metadata - -Mutable metadata for the key

        Optional

        @@ -11611,10 +10911,17 @@

        CreateKeyResponse

        - - + + + + + + + + + - + @@ -11624,7 +10931,7 @@

        CreateKeyResponse

        -

        CreatePublicKeyRequest

        +

        ListPublicKeyMappingResponse.Association

        @@ -11635,24 +10942,17 @@

        CreatePublicKeyRequest

        - + - - - - - - - - + - - + + - + @@ -11662,7 +10962,7 @@

        CreatePublicKeyRequest

        -

        CreatePublicKeyResponse

        +

        ListPublicKeyMappingResponse.PublicKey

        @@ -11679,6 +10979,27 @@

        CreatePublicKeyResponse

        + + + + + + + + + + + + + + + + + + + + +
        kas_keypolicy.KasKeypublic_key_mappingsListPublicKeyMappingResponse.PublicKeyMappingrepeated

        paginationpolicy.PageResponse

        The created asymmetric key for a KAS.

        kas_idid string

        Required

        keypolicy.KasPublicKey

        Required

        metadatacommon.MetadataMutablefqnstring

        Common metadata

        valuesListPublicKeyMappingResponse.Associationrepeated

        definitionsListPublicKeyMappingResponse.Associationrepeated

        namespacesListPublicKeyMappingResponse.Associationrepeated

        @@ -11686,7 +11007,7 @@

        CreatePublicKeyResponse

        -

        DeactivatePublicKeyRequest

        +

        ListPublicKeyMappingResponse.PublicKeyMapping

        @@ -11697,12 +11018,33 @@

        DeactivatePublicKeyReques - id + kas_id string

        + + kas_name + string + +

        + + + + kas_uri + string + +

        + + + + public_keys + ListPublicKeyMappingResponse.PublicKey + repeated +

        + + @@ -11710,7 +11052,7 @@

        DeactivatePublicKeyReques -

        DeactivatePublicKeyResponse

        +

        ListPublicKeysRequest

        @@ -11721,10 +11063,31 @@

        DeactivatePublicKeyRespo - key - policy.Key + kas_id + string -

        +

        Optional

        + + + + kas_name + string + +

        Optional

        + + + + kas_uri + string + +

        Optional

        + + + + pagination + policy.PageRequest + +

        Optional

        @@ -11734,7 +11097,7 @@

        DeactivatePublicKeyRespo -

        DeleteKeyAccessServerRequest

        +

        ListPublicKeysResponse

        @@ -11745,10 +11108,17 @@

        DeleteKeyAccessServerRe - id - string + keys + policy.Key + repeated +

        + + + + pagination + policy.PageResponse -

        Required

        +

        @@ -11758,7 +11128,7 @@

        DeleteKeyAccessServerRe -

        DeleteKeyAccessServerResponse

        +

        MappedPolicyObject

        @@ -11769,10 +11139,17 @@

        DeleteKeyAccessServerR - key_access_server - policy.KeyAccessServer + id + string -

        +

        The unique identifier of the policy object

        + + + + fqn + string + +

        The fully qualified name of the policy object

        @@ -11782,14 +11159,7 @@

        DeleteKeyAccessServerR -

        GetBaseKeyRequest

        -

        - - - - - -

        GetBaseKeyResponse

        +

        RotateKeyRequest

        @@ -11800,10 +11170,24 @@

        GetBaseKeyResponse

        - base_key - policy.SimpleKasKey + id + string -

        The current base key

        +

        Current Active Key UUID

        + + + + key + KasKeyIdentifier + +

        Alternative way to specify the active key using KAS ID and Key ID

        + + + + new_key + RotateKeyRequest.NewKey + +

        Information about the new key to be rotated in

        @@ -11813,8 +11197,8 @@

        GetBaseKeyResponse

        -

        GetKeyAccessServerRequest

        -

        +

        RotateKeyRequest.NewKey

        +

        Nested message for specifying the new key details

        @@ -11824,76 +11208,54 @@

        GetKeyAccessServerRequest<

        - + - + - - + + - + - - + + - + - - + + - + - -
        idkey_id string

        Deprecated. Deprecated

        Required

        kas_idstringalgorithmpolicy.Algorithm

        option (buf.validate.oneof).required = true; // TODO: enable this when we remove the deprecated field

        Required

        namestringkey_modepolicy.KeyMode

        Required

        uristringpublic_key_ctxpolicy.PublicKeyCtx

        Required

        - - - - -

        Fields with deprecated option

        - - - - + + + + - - - - - - - -
        NameOptionprivate_key_ctxpolicy.PrivateKeyCtx

        Required

        id

        true

        - - - - - -

        GetKeyAccessServerResponse

        -

        + provider_config_id + string + +

        Conditionally Required. - - - - - - +Validation handled by message-level CEL

        + - - + + - + @@ -11903,8 +11265,8 @@

        GetKeyAccessServerRespons -

        GetKeyRequest

        -

        Retrieve an existing asymmetric key from the Key Management System

        +

        RotateKeyResponse

        +

        Response message for the RotateKey request

        FieldTypeLabelDescription
        key_access_serverpolicy.KeyAccessServermetadatacommon.MetadataMutable

        Common metadata fields

        @@ -11914,17 +11276,17 @@

        GetKeyRequest

        - - + + - + - - + + - + @@ -11934,8 +11296,8 @@

        GetKeyRequest

        -

        GetKeyResponse

        -

        Response to a GetKeyRequest, containing the requested asymmetric key

        +

        RotatedResources

        +

        All resources that were rotated as part of the key rotation process

        idstringkas_keypolicy.KasKey

        The unique identifier of the key to retrieve

        The newly rotated Kas Key

        keyKasKeyIdentifierrotated_resourcesRotatedResources

        All resources that were rotated as part of the key rotation process

        @@ -11945,10 +11307,31 @@

        GetKeyResponse

        - + - + + + + + + + + + + + + + + + + + + + + + + @@ -11958,8 +11341,8 @@

        GetKeyResponse

        -

        GetPublicKeyRequest

        -

        +

        SetBaseKeyRequest

        +

        Sets the specified key as the base key for the Key Access Server

        Note: The key must be active.

        kas_keyrotated_out_key policy.KasKey

        The requested asymmetric key for a KAS.

        The old key that was rotated out

        attribute_definition_mappingsChangeMappingsrepeated

        attribute_value_mappingsChangeMappingsrepeated

        namespace_mappingsChangeMappingsrepeated

        @@ -11972,7 +11355,14 @@

        GetPublicKeyRequest

        - + + + + + + + + @@ -11982,7 +11372,7 @@

        GetPublicKeyRequest

        -

        GetPublicKeyResponse

        +

        SetBaseKeyResponse

        @@ -11993,10 +11383,17 @@

        GetPublicKeyResponse

        - - + + - + + + + + + + + @@ -12006,8 +11403,8 @@

        GetPublicKeyResponse

        -

        GrantedPolicyObject

        -

        Can be namespace, attribute definition, or value

        +

        UpdateKeyAccessServerRequest

        +

        id string

        Current Key UUID tp be set as default

        keyKasKeyIdentifier

        Alternative way to specify the key using KAS ID and Key ID

        keypolicy.Keynew_base_keypolicy.SimpleKasKey

        The key that was set as base

        previous_base_keypolicy.SimpleKasKey

        The previous base key, if any

        @@ -12020,13 +11417,54 @@

        GrantedPolicyObject

        - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12037,8 +11475,8 @@

        GrantedPolicyObject

        -

        KasKeyIdentifier

        -

        Nested message for specifying the active key using KAS ID and Key ID

        +

        UpdateKeyAccessServerResponse

        +

        id string

        Required

        fqnuristring

        Optional

        public_keypolicy.PublicKey

        Deprecated +Optional

        source_typepolicy.SourceType

        Optional +Using UNSPECIFIED will result in a successful update, +but will not actually update the underlying source. +You should not update KAS's from INTERNAL/EXTERNAL +to unspecified.

        name string

        Optional

        metadatacommon.MetadataMutable

        Optional +Common metadata

        metadata_update_behaviorcommon.MetadataUpdateEnum

        @@ -12048,31 +11486,53 @@

        KasKeyIdentifier

        - - + + + +
        kas_idstringkey_access_serverpolicy.KeyAccessServer

        + + + + + +

        UpdateKeyRequest

        +

        Update an existing asymmetric key in the Key Management System

        + + + + + + + + - + - + - - + + - + - - + + - + @@ -12082,8 +11542,8 @@

        KasKeyIdentifier

        -

        KasKeysSort

        -

        +

        UpdateKeyResponse

        +

        Response to an UpdateKeyRequest, containing the updated asymmetric key

        FieldTypeLabelDescription
        nameid string

        Required + +The unique identifier of the key to update

        uristringmetadatacommon.MetadataMutable

        Optional +Common metadata + +Mutable metadata for the key

        kidstringmetadata_update_behaviorcommon.MetadataUpdateEnum

        Required Key ID of the key in question

        The behavior for updating the metadata

        @@ -12093,17 +11553,10 @@

        KasKeysSort

        - - - - - - - - - + + - + @@ -12113,8 +11566,8 @@

        KasKeysSort

        -

        KeyAccessServerGrants

        -

        Deprecated

        +

        UpdatePublicKeyRequest

        +

        fieldSortKasKeysType

        directionpolicy.SortDirectionkas_keypolicy.KasKey

        The updated kas key

        @@ -12124,30 +11577,24 @@

        KeyAccessServerGrants

        - - + + - - - - - - - - + - - - - + + + + - - - + + + @@ -12158,7 +11605,7 @@

        KeyAccessServerGrants

        -

        KeyAccessServersSort

        +

        UpdatePublicKeyResponse

        @@ -12169,15 +11616,8 @@

        KeyAccessServersSort

        - - - - - - - - - + + @@ -12189,60 +11629,261 @@

        KeyAccessServersSort

        -

        KeyMapping

        + + +

        SortKasKeysType

        +

        +
        key_access_serverpolicy.KeyAccessServeridstring

        namespace_grantsGrantedPolicyObjectrepeated

        Required

        attribute_grantsGrantedPolicyObjectrepeated

        metadatacommon.MetadataMutable

        Optional +Common metadata

        value_grantsGrantedPolicyObjectrepeatedmetadata_update_behaviorcommon.MetadataUpdateEnum

        fieldSortKeyAccessServersType

        directionpolicy.SortDirectionkeypolicy.Key

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NameNumberDescription
        SORT_KAS_KEYS_TYPE_UNSPECIFIED0

        SORT_KAS_KEYS_TYPE_KEY_ID1

        SORT_KAS_KEYS_TYPE_CREATED_AT2

        SORT_KAS_KEYS_TYPE_UPDATED_AT3

        + +

        SortKeyAccessServersType

        +

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NameNumberDescription
        SORT_KEY_ACCESS_SERVERS_TYPE_UNSPECIFIED0

        SORT_KEY_ACCESS_SERVERS_TYPE_NAME1

        SORT_KEY_ACCESS_SERVERS_TYPE_URI2

        SORT_KEY_ACCESS_SERVERS_TYPE_CREATED_AT3

        SORT_KEY_ACCESS_SERVERS_TYPE_UPDATED_AT4

        + + + + + +

        KeyAccessServerRegistryService

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Method NameRequest TypeResponse TypeDescription
        ListKeyAccessServersListKeyAccessServersRequestListKeyAccessServersResponse

        GetKeyAccessServerGetKeyAccessServerRequestGetKeyAccessServerResponse

        CreateKeyAccessServerCreateKeyAccessServerRequestCreateKeyAccessServerResponse

        UpdateKeyAccessServerUpdateKeyAccessServerRequestUpdateKeyAccessServerResponse

        DeleteKeyAccessServerDeleteKeyAccessServerRequestDeleteKeyAccessServerResponse

        ListKeyAccessServerGrantsListKeyAccessServerGrantsRequestListKeyAccessServerGrantsResponse

        Deprecated

        CreateKeyCreateKeyRequestCreateKeyResponse

        KAS Key Management +Request to create a new key in the Key Access Service.

        GetKeyGetKeyRequestGetKeyResponse

        Request to retrieve a key from the Key Access Service.

        ListKeysListKeysRequestListKeysResponse

        Request to list keys in the Key Access Service.

        UpdateKeyUpdateKeyRequestUpdateKeyResponse

        Request to update a key in the Key Access Service.

        RotateKeyRotateKeyRequestRotateKeyResponse

        Request to rotate a key in the Key Access Service.

        SetBaseKeySetBaseKeyRequestSetBaseKeyResponse

        Request to set the default a default kas key.

        GetBaseKeyGetBaseKeyRequestGetBaseKeyResponse

        Get Default kas keys

        ListKeyMappingsListKeyMappingsRequestListKeyMappingsResponse

        Request to list key mappings in the Key Access Service.

        - + + +

        Methods with deprecated option

        +
        + + + + + + + + + + + + + + +
        Method NameOption
        ListKeyAccessServerGrants

        true

        + + + + +

        Methods with idempotency_level option

        + - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        Method NameOption
        kidstring

        kas_uristring

        namespace_mappingsMappedPolicyObjectrepeated

        List of namespaces mapped to the key

        attribute_mappingsMappedPolicyObjectrepeated

        List of attribute definitions mapped to the key

        value_mappingsMappedPolicyObjectrepeated

        List of attribute values mapped to the key

        ListKeyAccessServers

        NO_SIDE_EFFECTS

        GetKeyAccessServer

        NO_SIDE_EFFECTS

        ListKeyAccessServerGrants

        NO_SIDE_EFFECTS

        - - + -

        ListKeyAccessServerGrantsRequest

        -

        LIST of KAS Grants returns flat response of grants to all policy objects. It

        does not employ selectors for grants to specific policy objects or build the

        attribute tree relation. If grants to a known namespace, attribute, or value

        are needed, use the respective GET request to the specific policy object.

        +
        +

        policy/keymanagement/key_management.proto

        Top +
        +

        + + +

        CreateProviderConfigRequest

        +

        Provider Configuration Requests and Response Messages

        @@ -12252,40 +11893,34 @@

        ListKeyAccessServer

        - + - + - - + + - + - + - + - - + + - + @@ -12295,8 +11930,8 @@

        ListKeyAccessServer -

        ListKeyAccessServerGrantsResponse

        -

        Deprecated

        +

        CreateProviderConfigResponse

        +

        kas_idname string

        Optional -Filter LIST by ID of a registered Key Access Server. -If neither is provided, grants from all registered KASs to policy attribute -objects are returned.

        Required +The name of the key provider. (e.g. "AWS KMS Instance 1", "Google Cloud KMS Instance 2")

        kas_uristringconfig_jsonbytes

        Optional -Filter LIST by URI of a registered Key Access Server. -If none is provided, grants from all registered KASs to policy attribute -objects are returned.

        Required +JSON configuration for the key provider. This is unique to individual key providers.

        kas_namemanager string

        Optional -Filter LIST by name of a registered Key Access Server. -If none are provided, grants from all registered KASs to policy attribute -objects are returned.

        Required +The type of key manager (e.g. "aws", "gcp", "azure", "opentdf.io/basic")

        paginationpolicy.PageRequestmetadatacommon.MetadataMutable

        Optional

        Common metadata

        @@ -12306,15 +11941,8 @@

        ListKeyAccessServe

        - - - - - - - - - + + @@ -12323,32 +11951,11 @@

        ListKeyAccessServe

        grantsKeyAccessServerGrantsrepeated

        Deprecated.

        paginationpolicy.PageResponseprovider_configpolicy.KeyProviderConfig

        - - -

        Fields with deprecated option

        - - - - - - - - - - - - - - - -
        NameOption
        grants

        true

        - - -

        ListKeyAccessServersRequest

        -

        +

        DeleteProviderConfigRequest

        +

        In order to delete a provider configuration you must first delete all keys associated with the provider.

        @@ -12358,28 +11965,10 @@

        ListKeyAccessServersRequ

        - - - - - - - - - - - - - - - - + + - + @@ -12389,7 +11978,7 @@

        ListKeyAccessServersRequ -

        ListKeyAccessServersResponse

        +

        DeleteProviderConfigResponse

        @@ -12400,15 +11989,8 @@

        ListKeyAccessServersRes

        - - - - - - - - - + + @@ -12420,7 +12002,7 @@

        ListKeyAccessServersRes -

        ListKeyMappingsRequest

        +

        GetProviderConfigRequest

        @@ -12434,21 +12016,21 @@

        ListKeyMappingsRequest

        - + - - + + - - + + - + @@ -12458,7 +12040,7 @@

        ListKeyMappingsRequest

        -

        ListKeyMappingsResponse

        +

        GetProviderConfigResponse

        @@ -12469,97 +12051,33 @@

        ListKeyMappingsResponse

        - - - - - - - - - - - - - - -
        paginationpolicy.PageRequest

        Optional

        sortKeyAccessServersSortrepeated

        Optional - CONSTRAINT: max 1 item -Sort defaults: - - direction UNSPECIFIED defaults to DESC for the specified field - - field UNSPECIFIED defaults to created_at with the specified direction - - both UNSPECIFIED or sort omitted defaults to created_at DESC

        searchpolicy.Searchidstring

        Optional

        Required

        key_access_serverspolicy.KeyAccessServerrepeated

        paginationpolicy.PageResponseprovider_configpolicy.KeyProviderConfig

        id string

        The unique identifier of the key to retrieve

        keyKasKeyIdentifiernamestring

        paginationpolicy.PageRequestmanagerstring

        Pagination request for the list of keys

        Optional - filter by manager type when searching by name

        key_mappingsKeyMappingrepeated

        The list of key mappings

        paginationpolicy.PageResponse

        Pagination response for the list of keys

        - - - - - -

        ListKeysRequest

        -

        List all asymmetric keys managed by a specific Key Access Server or with a given algorithm

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - +
        FieldTypeLabelDescription
        key_algorithmpolicy.Algorithm

        Filter keys by algorithm

        kas_idstring

        Filter keys by the KAS ID

        kas_namestring

        Filter keys by the KAS name

        kas_uristringprovider_configpolicy.KeyProviderConfig

        Filter keys by the KAS URI

        legacybooloptional

        Optional +

        -Filter for legacy keys

        - + + + + +

        ListProviderConfigsRequest

        +

        + + + + + + + - - - - - - - - - - - - - - @@ -12570,8 +12088,8 @@

        ListKeysRequest

        -

        ListKeysResponse

        -

        Response to a ListKeysRequest, containing the list of asymmetric keys and pagination information

        +

        ListProviderConfigsResponse

        +

        FieldTypeLabelDescription
        pagination policy.PageRequest

        Optional - -Pagination request for the list of keys

        sortKasKeysSortrepeated

        Optional - CONSTRAINT: max 1 item -Sort defaults: - - direction UNSPECIFIED defaults to DESC for the specified field - - field UNSPECIFIED defaults to created_at with the specified direction - - both UNSPECIFIED or sort omitted defaults to created_at DESC

        searchpolicy.Search

        Optional

        @@ -12581,17 +12099,17 @@

        ListKeysResponse

        - - + + - + - + @@ -12601,7 +12119,7 @@

        ListKeysResponse

        -

        ListPublicKeyMappingRequest

        +

        UpdateProviderConfigRequest

        @@ -12612,38 +12130,46 @@

        ListPublicKeyMappingRequ

        - + - + - + - - + + - + - + - - + + - + + + + + + + + @@ -12653,7 +12179,7 @@

        ListPublicKeyMappingRequ -

        ListPublicKeyMappingResponse

        +

        UpdateProviderConfigResponse

        @@ -12664,15 +12190,8 @@

        ListPublicKeyMappingRes

        - - - - - - - - - + + @@ -12684,8 +12203,70 @@

        ListPublicKeyMappingRes -

        ListPublicKeyMappingResponse.Association

        + + + + + + +

        KeyManagementService

        +
        kas_keyspolicy.KasKeyprovider_configspolicy.KeyProviderConfig repeated

        The list of kas keys

        pagination policy.PageResponse

        Pagination response for the list of keys

        kas_idid string

        Optional

        Required

        kas_namename string

        Optional

        kas_uristringconfig_jsonbytes

        Optional

        public_key_idmanager string

        Optional Public Key ID

        Optional

        paginationpolicy.PageRequestmetadatacommon.MetadataMutable

        Optional

        Optional +Common metadata

        metadata_update_behaviorcommon.MetadataUpdateEnum

        public_key_mappingsListPublicKeyMappingResponse.PublicKeyMappingrepeated

        paginationpolicy.PageResponseprovider_configpolicy.KeyProviderConfig

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Method NameRequest TypeResponse TypeDescription
        CreateProviderConfigCreateProviderConfigRequestCreateProviderConfigResponse

        Key Management +Provider Management

        GetProviderConfigGetProviderConfigRequestGetProviderConfigResponse

        ListProviderConfigsListProviderConfigsRequestListProviderConfigsResponse

        UpdateProviderConfigUpdateProviderConfigRequestUpdateProviderConfigResponse

        DeleteProviderConfigDeleteProviderConfigRequestDeleteProviderConfigResponse

        + + + + +
        +

        policy/namespaces/namespaces.proto

        Top +
        +

        + + +

        AssignKeyAccessServerToNamespaceRequest

        +

        Deprecated: utilize AssignPublicKeyToNamespaceRequest

        @@ -12695,15 +12276,8 @@

        ListPublicK

        - - - - - - - - - + + @@ -12715,7 +12289,7 @@

        ListPublicK -

        ListPublicKeyMappingResponse.PublicKey

        +

        AssignKeyAccessServerToNamespaceResponse

        @@ -12726,33 +12300,12 @@

        ListPublicKey

        - - + + - - - - - - - - - - - - - - - - - - - - -
        idstring

        fqnstringnamespace_key_access_serverNamespaceKeyAccessServer

        keypolicy.Keynamespace_key_access_serverNamespaceKeyAccessServer

        valuesListPublicKeyMappingResponse.Associationrepeated

        definitionsListPublicKeyMappingResponse.Associationrepeated

        namespacesListPublicKeyMappingResponse.Associationrepeated

        @@ -12760,8 +12313,8 @@

        ListPublicKey -

        ListPublicKeyMappingResponse.PublicKeyMapping

        -

        +

        AssignPublicKeyToNamespaceRequest

        +

        Assign Key to Namespace

        @@ -12771,33 +12324,12 @@

        ListPu

        - - - - - - - - - - - - - - - - + + - - - - - - -
        kas_idstring

        kas_namestring

        kas_uristringnamespace_keyNamespaceKey

        public_keysListPublicKeyMappingResponse.PublicKeyrepeated

        @@ -12805,7 +12337,7 @@

        ListPu -

        ListPublicKeysRequest

        +

        AssignPublicKeyToNamespaceResponse

        @@ -12816,31 +12348,10 @@

        ListPublicKeysRequest

        - kas_id - string - -

        Optional

        - - - - kas_name - string - -

        Optional

        - - - - kas_uri - string - -

        Optional

        - - - - pagination - policy.PageRequest + namespace_key + NamespaceKey -

        Optional

        +

        @@ -12850,7 +12361,7 @@

        ListPublicKeysRequest

        -

        ListPublicKeysResponse

        +

        CreateNamespaceRequest

        @@ -12861,17 +12372,17 @@

        ListPublicKeysResponse

        - keys - policy.Key - repeated -

        + name + string + +

        Required

        - pagination - policy.PageResponse + metadata + common.MetadataMutable -

        +

        Optional

        @@ -12881,7 +12392,7 @@

        ListPublicKeysResponse

        -

        MappedPolicyObject

        +

        CreateNamespaceResponse

        @@ -12892,17 +12403,10 @@

        MappedPolicyObject

        - id - string - -

        The unique identifier of the policy object

        - - - - fqn - string + namespace + policy.Namespace -

        The fully qualified name of the policy object

        +

        @@ -12912,7 +12416,7 @@

        MappedPolicyObject

        -

        RotateKeyRequest

        +

        DeactivateNamespaceRequest

        @@ -12926,21 +12430,7 @@

        RotateKeyRequest

        id string -

        Current Active Key UUID

        - - - - key - KasKeyIdentifier - -

        Alternative way to specify the active key using KAS ID and Key ID

        - - - - new_key - RotateKeyRequest.NewKey - -

        Information about the new key to be rotated in

        +

        Required

        @@ -12950,8 +12440,15 @@

        RotateKeyRequest

        -

        RotateKeyRequest.NewKey

        -

        Nested message for specifying the new key details

        +

        DeactivateNamespaceResponse

        +

        + + + + + +

        GetNamespaceRequest

        +

        @@ -12961,65 +12458,56 @@

        RotateKeyRequest.NewKey

        - + - - - - - - - - - - - - - - - + - - + + - + - - + + - + - - - - - +
        key_idid string

        Required

        algorithmpolicy.Algorithm

        Required

        key_modepolicy.KeyMode

        Required

        Deprecated. Deprecated

        public_key_ctxpolicy.PublicKeyCtxnamespace_idstring

        Required

        option (buf.validate.oneof).required = true; // TODO: enable this when we remove the deprecated field

        private_key_ctxpolicy.PrivateKeyCtxfqnstring

        Required

        provider_config_idstring

        Conditionally Required. +

        -Validation handled by message-level CEL

        + + + +

        Fields with deprecated option

        + + + + + + + - - - - + + - -
        NameOption
        metadatacommon.MetadataMutable

        Common metadata fields

        id

        true

        - + + + -

        RotateKeyResponse

        -

        Response message for the RotateKey request

        +

        GetNamespaceResponse

        +

        @@ -13029,17 +12517,10 @@

        RotateKeyResponse

        - - - - - - - - - + + - + @@ -13049,8 +12530,8 @@

        RotateKeyResponse

        -

        RotatedResources

        -

        All resources that were rotated as part of the key rotation process

        +

        ListNamespacesRequest

        +

        kas_keypolicy.KasKey

        The newly rotated Kas Key

        rotated_resourcesRotatedResourcesnamespacepolicy.Namespace

        All resources that were rotated as part of the key rotation process

        @@ -13060,31 +12541,36 @@

        RotatedResources

        - - + + - + - - - - + + + + - - + + - + - - - - + + + + @@ -13094,8 +12580,8 @@

        RotatedResources

        -

        SetBaseKeyRequest

        -

        Sets the specified key as the base key for the Key Access Server

        Note: The key must be active.

        +

        ListNamespacesResponse

        +

        rotated_out_keypolicy.KasKeystatecommon.ActiveStateEnum

        The old key that was rotated out

        Optional +ACTIVE by default when not specified

        attribute_definition_mappingsChangeMappingsrepeated

        paginationpolicy.PageRequest

        Optional

        attribute_value_mappingsChangeMappingssortNamespacesSort repeated

        Optional - CONSTRAINT: max 1 item +Sort defaults: + - direction UNSPECIFIED defaults to DESC for the specified field + - field UNSPECIFIED defaults to created_at with the specified direction + - both UNSPECIFIED or sort omitted defaults to created_at DESC

        namespace_mappingsChangeMappingsrepeated

        searchpolicy.Search

        Optional

        @@ -13105,17 +12591,17 @@

        SetBaseKeyRequest

        - - - - + + + + - - + + - + @@ -13125,7 +12611,7 @@

        SetBaseKeyRequest

        -

        SetBaseKeyResponse

        +

        NamespaceKey

        @@ -13136,17 +12622,17 @@

        SetBaseKeyResponse

        - - + + - + - - + + - + @@ -13156,8 +12642,8 @@

        SetBaseKeyResponse

        -

        UpdateKeyAccessServerRequest

        -

        +

        NamespaceKeyAccessServer

        +

        Deprecated

        idstring

        Current Key UUID tp be set as default

        namespacespolicy.Namespacerepeated

        keyKasKeyIdentifierpaginationpolicy.PageResponse

        Alternative way to specify the key using KAS ID and Key ID

        new_base_keypolicy.SimpleKasKeynamespace_idstring

        The key that was set as base

        Required

        previous_base_keypolicy.SimpleKasKeykey_idstring

        The previous base key, if any

        Required (The id from the Asymmetric Key object)

        @@ -13167,56 +12653,46 @@

        UpdateKeyAccessServerRe

        - + - + - - - - - - - - - - - - - - - + - - - - - - + +
        idnamespace_id string

        Required

        urikey_access_server_id string

        Optional

        public_keypolicy.PublicKey

        Deprecated -Optional

        source_typepolicy.SourceType

        Optional -Using UNSPECIFIED will result in a successful update, -but will not actually update the underlying source. -You should not update KAS's from INTERNAL/EXTERNAL -to unspecified.

        Required

        namestring

        Optional

        + + + + + +

        NamespacesSort

        +

        + + + + + + + - - + + - + - - + + @@ -13228,8 +12704,8 @@

        UpdateKeyAccessServerRe -

        UpdateKeyAccessServerResponse

        -

        +

        RemoveKeyAccessServerFromNamespaceRequest

        +

        Deprecated: utilize RemovePublicKeyFromNamespaceRequest

        FieldTypeLabelDescription
        metadatacommon.MetadataMutablefieldSortNamespacesType

        Optional -Common metadata

        metadata_update_behaviorcommon.MetadataUpdateEnumdirectionpolicy.SortDirection

        @@ -13239,8 +12715,8 @@

        UpdateKeyAccessServerR

        - - + + @@ -13252,8 +12728,8 @@

        UpdateKeyAccessServerR -

        UpdateKeyRequest

        -

        Update an existing asymmetric key in the Key Management System

        +

        RemoveKeyAccessServerFromNamespaceResponse

        +

        key_access_serverpolicy.KeyAccessServernamespace_key_access_serverNamespaceKeyAccessServer

        @@ -13263,29 +12739,34 @@

        UpdateKeyRequest

        - - + + - + - - - - - +
        idstringnamespace_key_access_serverNamespaceKeyAccessServer

        Required - -The unique identifier of the key to update

        metadatacommon.MetadataMutable

        Optional -Common metadata +

        -Mutable metadata for the key

        - + + + + +

        RemovePublicKeyFromNamespaceRequest

        +

        + + + + + + + - - + + - + @@ -13295,8 +12776,8 @@

        UpdateKeyRequest

        -

        UpdateKeyResponse

        -

        Response to an UpdateKeyRequest, containing the updated asymmetric key

        +

        RemovePublicKeyFromNamespaceResponse

        +

        FieldTypeLabelDescription
        metadata_update_behaviorcommon.MetadataUpdateEnumnamespace_keyNamespaceKey

        The behavior for updating the metadata

        @@ -13306,10 +12787,10 @@

        UpdateKeyResponse

        - - + + - + @@ -13319,7 +12800,7 @@

        UpdateKeyResponse

        -

        UpdatePublicKeyRequest

        +

        UpdateNamespaceRequest

        @@ -13340,8 +12821,7 @@

        UpdatePublicKeyRequest

        - + @@ -13358,7 +12838,7 @@

        UpdatePublicKeyRequest

        -

        UpdatePublicKeyResponse

        +

        UpdateNamespaceResponse

        @@ -13369,8 +12849,8 @@

        UpdatePublicKeyResponse

        - - + + @@ -13384,42 +12864,7 @@

        UpdatePublicKeyResponse

        -

        SortKasKeysType

        -

        -
        kas_keypolicy.KasKeynamespace_keyNamespaceKey

        The updated kas key

        metadata common.MetadataMutable

        Optional -Common metadata

        Optional

        keypolicy.Keynamespacepolicy.Namespace

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        NameNumberDescription
        SORT_KAS_KEYS_TYPE_UNSPECIFIED0

        SORT_KAS_KEYS_TYPE_KEY_ID1

        SORT_KAS_KEYS_TYPE_CREATED_AT2

        SORT_KAS_KEYS_TYPE_UPDATED_AT3

        - -

        SortKeyAccessServersType

        +

        SortNamespacesType

        @@ -13428,31 +12873,31 @@

        SortKeyAccessServersType

        - + - + - + - + - + @@ -13464,7 +12909,7 @@

        SortKeyAccessServersTypeKeyAccessServerRegistryService

        +

        NamespaceService

        SORT_KEY_ACCESS_SERVERS_TYPE_UNSPECIFIEDSORT_NAMESPACES_TYPE_UNSPECIFIED 0

        SORT_KEY_ACCESS_SERVERS_TYPE_NAMESORT_NAMESPACES_TYPE_NAME 1

        SORT_KEY_ACCESS_SERVERS_TYPE_URISORT_NAMESPACES_TYPE_FQN 2

        SORT_KEY_ACCESS_SERVERS_TYPE_CREATED_ATSORT_NAMESPACES_TYPE_CREATED_AT 3

        SORT_KEY_ACCESS_SERVERS_TYPE_UPDATED_ATSORT_NAMESPACES_TYPE_UPDATED_AT 4

        @@ -13473,102 +12918,68 @@

        KeyAccessServerRegist

        - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + @@ -13588,7 +12999,12 @@

        Methods with deprecated option

        - + + + + + + @@ -13609,17 +13025,12 @@

        Methods with idempotency_level option

        - - - - - - + - + @@ -13630,13 +13041,13 @@

        Methods with idempotency_level option

        -

        policy/keymanagement/key_management.proto

        Top +

        policy/obligations/obligations.proto

        Top

        -

        CreateProviderConfigRequest

        -

        Provider Configuration Requests and Response Messages

        +

        AddObligationTriggerRequest

        +

        Obligation Triggers are owned by the namespace that owns the action and attribute value, which must

        be the same. In this way, a trigger can intentionally cross namespace boundaries: associating

        obligation values of a different namespace than the one that owns the action being taken or the attribute value.

        ListKeyAccessServersListKeyAccessServersRequestListKeyAccessServersResponseGetNamespaceGetNamespaceRequestGetNamespaceResponse

        GetKeyAccessServerGetKeyAccessServerRequestGetKeyAccessServerResponseListNamespacesListNamespacesRequestListNamespacesResponse

        CreateKeyAccessServerCreateKeyAccessServerRequestCreateKeyAccessServerResponseCreateNamespaceCreateNamespaceRequestCreateNamespaceResponse

        UpdateKeyAccessServerUpdateKeyAccessServerRequestUpdateKeyAccessServerResponseUpdateNamespaceUpdateNamespaceRequestUpdateNamespaceResponse

        DeleteKeyAccessServerDeleteKeyAccessServerRequestDeleteKeyAccessServerResponseDeactivateNamespaceDeactivateNamespaceRequestDeactivateNamespaceResponse

        ListKeyAccessServerGrantsListKeyAccessServerGrantsRequestListKeyAccessServerGrantsResponse

        Deprecated

        CreateKeyCreateKeyRequestCreateKeyResponse

        KAS Key Management -Request to create a new key in the Key Access Service.

        GetKeyGetKeyRequestGetKeyResponse

        Request to retrieve a key from the Key Access Service.

        ListKeysListKeysRequestListKeysResponse

        Request to list keys in the Key Access Service.

        UpdateKeyUpdateKeyRequestUpdateKeyResponse

        Request to update a key in the Key Access Service.

        RotateKeyRotateKeyRequestRotateKeyResponse

        Request to rotate a key in the Key Access Service.

        AssignKeyAccessServerToNamespaceAssignKeyAccessServerToNamespaceRequestAssignKeyAccessServerToNamespaceResponse

        Deprecated: utilize AssignPublicKeyToNamespace

        SetBaseKeySetBaseKeyRequestSetBaseKeyResponse

        Request to set the default a default kas key.

        RemoveKeyAccessServerFromNamespaceRemoveKeyAccessServerFromNamespaceRequestRemoveKeyAccessServerFromNamespaceResponse

        Deprecated: utilize RemovePublicKeyFromNamespace

        GetBaseKeyGetBaseKeyRequestGetBaseKeyResponse

        Get Default kas keys

        AssignPublicKeyToNamespaceAssignPublicKeyToNamespaceRequestAssignPublicKeyToNamespaceResponse

        --------------------------------------* +Namespace <> Key RPCs +---------------------------------------

        ListKeyMappingsListKeyMappingsRequestListKeyMappingsResponse

        Request to list key mappings in the Key Access Service.

        RemovePublicKeyFromNamespaceRemovePublicKeyFromNamespaceRequestRemovePublicKeyFromNamespaceResponse

        ListKeyAccessServerGrantsAssignKeyAccessServerToNamespace

        true

        RemoveKeyAccessServerFromNamespace

        true

        ListKeyAccessServers

        NO_SIDE_EFFECTS

        GetKeyAccessServerGetNamespace

        NO_SIDE_EFFECTS

        ListKeyAccessServerGrantsListNamespaces

        NO_SIDE_EFFECTS

        @@ -13646,34 +13057,40 @@

        CreateProviderConfigRe

        - - + + - + - - + + - + - - + + - + + + + + + + + - + @@ -13683,7 +13100,7 @@

        CreateProviderConfigRe -

        CreateProviderConfigResponse

        +

        AddObligationTriggerResponse

        @@ -13694,8 +13111,8 @@

        CreateProviderConfigR

        - - + + @@ -13707,8 +13124,8 @@

        CreateProviderConfigR -

        DeleteProviderConfigRequest

        -

        In order to delete a provider configuration you must first delete all keys associated with the provider.

        +

        CreateObligationRequest

        +

        namestringobligation_valuecommon.IdFqnIdentifier

        Required -The name of the key provider. (e.g. "AWS KMS Instance 1", "Google Cloud KMS Instance 2")

        Required

        config_jsonbytesactioncommon.IdNameIdentifier

        Required -JSON configuration for the key provider. This is unique to individual key providers.

        Required

        managerstringattribute_valuecommon.IdFqnIdentifier

        Required -The type of key manager (e.g. "aws", "gcp", "azure", "opentdf.io/basic")

        Required

        contextpolicy.RequestContext

        Optional +The request context for this obligation value policy decisioning.

        metadata common.MetadataMutable

        Common metadata

        Optional +Common metadata

        provider_configpolicy.KeyProviderConfigtriggerpolicy.ObligationTrigger

        @@ -13718,10 +13135,39 @@

        DeleteProviderConfigRe

        - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13731,7 +13177,7 @@

        DeleteProviderConfigRe -

        DeleteProviderConfigResponse

        +

        CreateObligationResponse

        @@ -13742,8 +13188,8 @@

        DeleteProviderConfigR

        - - + + @@ -13755,7 +13201,7 @@

        DeleteProviderConfigR -

        GetProviderConfigRequest

        +

        CreateObligationValueRequest

        @@ -13766,48 +13212,40 @@

        GetProviderConfigRequest<

        - + - + - + - + - -
        idnamespace_id string

        Required

        namespace_fqnstring

        namestring

        valuesstringrepeated

        Optional

        metadatacommon.MetadataMutable

        Optional +Common metadata

        provider_configpolicy.KeyProviderConfigobligationpolicy.Obligation

        idobligation_id string

        nameobligation_fqn string

        managervalue string

        Optional - filter by manager type when searching by name

        - - - - - -

        GetProviderConfigResponse

        -

        - - - - - - - + + + + + + - - + + - + @@ -13817,7 +13255,7 @@

        GetProviderConfigRespons -

        ListProviderConfigsRequest

        +

        CreateObligationValueResponse

        @@ -13828,10 +13266,10 @@

        ListProviderConfigsRequ

        - - + + - + @@ -13841,7 +13279,7 @@

        ListProviderConfigsRequ -

        ListProviderConfigsResponse

        +

        DeleteObligationRequest

        @@ -13852,15 +13290,15 @@

        ListProviderConfigsRes

        - - - + + + - - + + @@ -13872,7 +13310,7 @@

        ListProviderConfigsRes -

        UpdateProviderConfigRequest

        +

        DeleteObligationResponse

        @@ -13883,44 +13321,8 @@

        UpdateProviderConfigRe

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -13932,7 +13334,7 @@

        UpdateProviderConfigRe -

        UpdateProviderConfigResponse

        +

        DeleteObligationValueRequest

        @@ -13943,83 +13345,52 @@

        UpdateProviderConfigR

        - - + + - -
        FieldTypeLabelDescription
        triggersValueTriggerRequestrepeated

        Optional +Combination of action and attribute_value that will trigger this obligation value policy decisioning.

        provider_configpolicy.KeyProviderConfigmetadatacommon.MetadataMutable

        Optional +Common metadata

        paginationpolicy.PageRequestvaluepolicy.ObligationValue

        Optional

        provider_configspolicy.KeyProviderConfigrepeatedidstring

        paginationpolicy.PageResponsefqnstring

        idstring

        Required

        namestring

        Optional

        config_jsonbytes

        Optional

        managerstring

        Optional

        metadatacommon.MetadataMutable

        Optional -Common metadata

        metadata_update_behaviorcommon.MetadataUpdateEnumobligationpolicy.Obligation

        provider_configpolicy.KeyProviderConfigidstring

        - - - - - - - - - - - -

        KeyManagementService

        -

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Method NameRequest TypeResponse TypeDescription
        CreateProviderConfigCreateProviderConfigRequestCreateProviderConfigResponse

        Key Management -Provider Management

        GetProviderConfigGetProviderConfigRequestGetProviderConfigResponse

        ListProviderConfigsListProviderConfigsRequestListProviderConfigsResponse

        UpdateProviderConfigUpdateProviderConfigRequestUpdateProviderConfigResponse

        DeleteProviderConfigDeleteProviderConfigRequestDeleteProviderConfigResponse

        + + fqn + string + +

        + + + + + + - -
        -

        policy/namespaces/namespaces.proto

        Top -
        -

        +

        DeleteObligationValueResponse

        +

        + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        valuepolicy.ObligationValue

        + + + -

        AssignKeyAccessServerToNamespaceRequest

        -

        Deprecated: utilize AssignPublicKeyToNamespaceRequest

        +

        GetObligationRequest

        +

        @@ -14029,8 +13400,15 @@

        AssignKeyAcce

        - - + + + + + + + + + @@ -14042,7 +13420,7 @@

        AssignKeyAcce -

        AssignKeyAccessServerToNamespaceResponse

        +

        GetObligationResponse

        @@ -14053,8 +13431,8 @@

        AssignKeyAcc

        - - + + @@ -14066,8 +13444,8 @@

        AssignKeyAcc -

        AssignPublicKeyToNamespaceRequest

        -

        Assign Key to Namespace

        +

        GetObligationTriggerRequest

        +

        Triggers

        namespace_key_access_serverNamespaceKeyAccessServeridstring

        fqnstring

        namespace_key_access_serverNamespaceKeyAccessServerobligationpolicy.Obligation

        @@ -14077,10 +13455,10 @@

        AssignPublicKeyToNa

        - - + + - + @@ -14090,7 +13468,7 @@

        AssignPublicKeyToNa -

        AssignPublicKeyToNamespaceResponse

        +

        GetObligationTriggerResponse

        @@ -14101,8 +13479,8 @@

        AssignPublicKeyToN

        - - + + @@ -14114,8 +13492,8 @@

        AssignPublicKeyToN -

        CreateNamespaceRequest

        -

        +

        GetObligationValueRequest

        +

        Values

        namespace_keyNamespaceKeyidstring

        Required

        namespace_keyNamespaceKeytriggerpolicy.ObligationTrigger

        @@ -14125,17 +13503,17 @@

        CreateNamespaceRequest

        - + - + - - + + - + @@ -14145,7 +13523,7 @@

        CreateNamespaceRequest

        -

        CreateNamespaceResponse

        +

        GetObligationValueResponse

        @@ -14156,8 +13534,8 @@

        CreateNamespaceResponse

        - - + + @@ -14169,7 +13547,7 @@

        CreateNamespaceResponse

        -

        DeactivateNamespaceRequest

        +

        GetObligationValuesByFQNsRequest

        @@ -14180,10 +13558,10 @@

        DeactivateNamespaceRequest

        - + - - + + @@ -14193,14 +13571,31 @@

        DeactivateNamespaceRequest -

        DeactivateNamespaceResponse

        +

        GetObligationValuesByFQNsResponse

        +
        nameid string

        Required

        metadatacommon.MetadataMutablefqnstring

        Optional

        namespacepolicy.Namespacevaluepolicy.ObligationValue

        idfqns string

        Required

        repeated

        + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        fqn_value_mapGetObligationValuesByFQNsResponse.FqnValueMapEntryrepeated

        + + -

        GetNamespaceRequest

        +

        GetObligationValuesByFQNsResponse.FqnValueMapEntry

        @@ -14211,23 +13606,40 @@

        GetNamespaceRequest

        - id + key string -

        Deprecated. Deprecated

        +

        - namespace_id - string + value + policy.ObligationValue -

        option (buf.validate.oneof).required = true; // TODO: enable this when we remove the deprecated field

        +

        + + + + + + + +

        GetObligationsByFQNsRequest

        +

        + + + + + + + + - + - + @@ -14235,31 +13647,34 @@

        GetNamespaceRequest

        FieldTypeLabelDescription
        fqnfqns stringrepeated

        - - -

        Fields with deprecated option

        - - - - - - - - + + + +

        GetObligationsByFQNsResponse

        +

        + + +
        NameOption
        + + + + - - + + + + - -
        FieldTypeLabelDescription
        id

        true

        fqn_obligation_mapGetObligationsByFQNsResponse.FqnObligationMapEntryrepeated

        - + + + -

        GetNamespaceResponse

        +

        GetObligationsByFQNsResponse.FqnObligationMapEntry

        @@ -14270,8 +13685,15 @@

        GetNamespaceResponse

        - namespace - policy.Namespace + key + string + +

        + + + + value + policy.Obligation

        @@ -14283,7 +13705,7 @@

        GetNamespaceResponse

        -

        ListNamespacesRequest

        +

        ListObligationTriggersRequest

        @@ -14294,34 +13716,22 @@

        ListNamespacesRequest

        - state - common.ActiveStateEnum + namespace_id + string -

        Optional -ACTIVE by default when not specified

        +

        - pagination - policy.PageRequest + namespace_fqn + string -

        Optional

        - - - - sort - NamespacesSort - repeated -

        Optional - CONSTRAINT: max 1 item -Sort defaults: - - direction UNSPECIFIED defaults to DESC for the specified field - - field UNSPECIFIED defaults to created_at with the specified direction - - both UNSPECIFIED or sort omitted defaults to created_at DESC

        +

        - search - policy.Search + pagination + policy.PageRequest

        Optional

        @@ -14333,7 +13743,7 @@

        ListNamespacesRequest

        -

        ListNamespacesResponse

        +

        ListObligationTriggersResponse

        @@ -14344,8 +13754,8 @@

        ListNamespacesResponse

        - namespaces - policy.Namespace + triggers + policy.ObligationTrigger repeated

        @@ -14364,7 +13774,7 @@

        ListNamespacesResponse

        -

        NamespaceKey

        +

        ListObligationsRequest

        @@ -14378,14 +13788,39 @@

        NamespaceKey

        namespace_id string -

        Required

        +

        + + + + namespace_fqn + string + +

        + + + + pagination + policy.PageRequest + +

        Optional

        + + + + sort + ObligationsSort + repeated +

        Optional - CONSTRAINT: max 1 item +Sort defaults: + - direction UNSPECIFIED defaults to DESC for the specified field + - field UNSPECIFIED defaults to created_at with the specified direction + - both UNSPECIFIED or sort omitted defaults to created_at DESC

        - key_id - string + search + policy.Search -

        Required (The id from the Asymmetric Key object)

        +

        Optional

        @@ -14395,8 +13830,8 @@

        NamespaceKey

        -

        NamespaceKeyAccessServer

        -

        Deprecated

        +

        ListObligationsResponse

        +

        @@ -14406,17 +13841,17 @@

        NamespaceKeyAccessServer

        - - - - + + + + - - + + - + @@ -14426,7 +13861,7 @@

        NamespaceKeyAccessServer

        NamespacesSort +

        ObligationsSort

        @@ -14438,7 +13873,7 @@

        NamespacesSort

        - + @@ -14457,8 +13892,8 @@

        NamespacesSort

        -

        RemoveKeyAccessServerFromNamespaceRequest

        -

        Deprecated: utilize RemovePublicKeyFromNamespaceRequest

        +

        RemoveObligationTriggerRequest

        +

        namespace_idstring

        Required

        obligationspolicy.Obligationrepeated

        key_access_server_idstringpaginationpolicy.PageResponse

        Required

        fieldSortNamespacesTypeSortObligationsType

        @@ -14468,10 +13903,10 @@

        RemoveKeyAc

        - - + + - + @@ -14481,7 +13916,7 @@

        RemoveKeyAc -

        RemoveKeyAccessServerFromNamespaceResponse

        +

        RemoveObligationTriggerResponse

        @@ -14492,8 +13927,8 @@

        RemoveKeyA

        - - + + @@ -14505,7 +13940,7 @@

        RemoveKeyA -

        RemovePublicKeyFromNamespaceRequest

        +

        UpdateObligationRequest

        @@ -14516,8 +13951,29 @@

        RemovePublicKeyFr

        - - + + + + + + + + + + + + + + + + + + + + + + + @@ -14529,7 +13985,7 @@

        RemovePublicKeyFr -

        RemovePublicKeyFromNamespaceResponse

        +

        UpdateObligationResponse

        @@ -14540,8 +13996,8 @@

        RemovePublicKeyF

        - - + + @@ -14553,7 +14009,7 @@

        RemovePublicKeyF -

        UpdateNamespaceRequest

        +

        UpdateObligationValueRequest

        @@ -14570,11 +14026,27 @@

        UpdateNamespaceRequest

        + + + + + + + + + + + + + + - + @@ -14591,7 +14063,7 @@

        UpdateNamespaceRequest

        -

        UpdateNamespaceResponse

        +

        UpdateObligationValueResponse

        @@ -14602,8 +14074,8 @@

        UpdateNamespaceResponse

        - - + + @@ -14615,9 +14087,47 @@

        UpdateNamespaceResponse

        +

        ValueTriggerRequest

        +

        + + +
        namespace_key_access_serverNamespaceKeyAccessServeridstring

        Required

        namespace_key_access_serverNamespaceKeyAccessServertriggerpolicy.ObligationTrigger

        namespace_keyNamespaceKeyidstring

        Required

        namestring

        Optional

        metadatacommon.MetadataMutable

        metadata_update_behaviorcommon.MetadataUpdateEnum

        namespace_keyNamespaceKeyobligationpolicy.Obligation

        Required

        valuestring

        Optional

        triggersValueTriggerRequestrepeated

        Optional +Obligation Triggers provided here will replace all existing records in the database.

        metadata common.MetadataMutable

        Optional

        Optional +Common metadata

        namespacepolicy.Namespacevaluepolicy.ObligationValue

        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        actioncommon.IdNameIdentifier

        Required. The ID of the action that will trigger this obligation value policy decisioning.

        attribute_valuecommon.IdFqnIdentifier

        Required. The attribute value ID that will trigger this obligation value policy decisioning.

        contextpolicy.RequestContext

        Optional. The request context for this obligation value policy decisioning.

        + + + + + -

        SortNamespacesType

        +

        SortObligationsType

        @@ -14626,31 +14136,31 @@

        SortNamespacesType

        - + - + - + - + - + @@ -14662,8 +14172,8 @@

        SortNamespacesType

        -

        NamespaceService

        -

        +

        Service

        +

        Obligation Service

        /

        SORT_NAMESPACES_TYPE_UNSPECIFIEDSORT_OBLIGATIONS_TYPE_UNSPECIFIED 0

        SORT_NAMESPACES_TYPE_NAMESORT_OBLIGATIONS_TYPE_NAME 1

        SORT_NAMESPACES_TYPE_FQNSORT_OBLIGATIONS_TYPE_FQN 2

        SORT_NAMESPACES_TYPE_CREATED_ATSORT_OBLIGATIONS_TYPE_CREATED_AT 3

        SORT_NAMESPACES_TYPE_UPDATED_ATSORT_OBLIGATIONS_TYPE_UPDATED_AT 4

        @@ -14671,67 +14181,107 @@

        NamespaceService

        - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + @@ -14741,7 +14291,7 @@

        NamespaceService

        -

        Methods with deprecated option

        +

        Methods with idempotency_level option

        Method NameRequest TypeResponse TypeDescription
        GetNamespaceGetNamespaceRequestGetNamespaceResponseListObligationsListObligationsRequestListObligationsResponse

        ListNamespacesListNamespacesRequestListNamespacesResponseGetObligationGetObligationRequestGetObligationResponse

        CreateNamespaceCreateNamespaceRequestCreateNamespaceResponseGetObligationsByFQNsGetObligationsByFQNsRequestGetObligationsByFQNsResponse

        UpdateNamespaceUpdateNamespaceRequestUpdateNamespaceResponseCreateObligationCreateObligationRequestCreateObligationResponse

        DeactivateNamespaceDeactivateNamespaceRequestDeactivateNamespaceResponseUpdateObligationUpdateObligationRequestUpdateObligationResponse

        AssignKeyAccessServerToNamespaceAssignKeyAccessServerToNamespaceRequestAssignKeyAccessServerToNamespaceResponse

        Deprecated: utilize AssignPublicKeyToNamespace

        DeleteObligationDeleteObligationRequestDeleteObligationResponse

        RemoveKeyAccessServerFromNamespaceRemoveKeyAccessServerFromNamespaceRequestRemoveKeyAccessServerFromNamespaceResponse

        Deprecated: utilize RemovePublicKeyFromNamespace

        GetObligationValueGetObligationValueRequestGetObligationValueResponse

        AssignPublicKeyToNamespaceAssignPublicKeyToNamespaceRequestAssignPublicKeyToNamespaceResponse

        --------------------------------------* -Namespace <> Key RPCs ----------------------------------------

        GetObligationValuesByFQNsGetObligationValuesByFQNsRequestGetObligationValuesByFQNsResponse

        CreateObligationValueCreateObligationValueRequestCreateObligationValueResponse

        UpdateObligationValueUpdateObligationValueRequestUpdateObligationValueResponse

        DeleteObligationValueDeleteObligationValueRequestDeleteObligationValueResponse

        GetObligationTriggerGetObligationTriggerRequestGetObligationTriggerResponse

        AddObligationTriggerAddObligationTriggerRequestAddObligationTriggerResponse

        RemoveObligationTriggerRemoveObligationTriggerRequestRemoveObligationTriggerResponse

        RemovePublicKeyFromNamespaceRemovePublicKeyFromNamespaceRequestRemovePublicKeyFromNamespaceResponseListObligationTriggersListObligationTriggersRequestListObligationTriggersResponse

        @@ -14752,38 +14302,37 @@

        Methods with deprecated option

        - - + + - - + + - -
        AssignKeyAccessServerToNamespace

        true

        ListObligations

        NO_SIDE_EFFECTS

        RemoveKeyAccessServerFromNamespace

        true

        GetObligation

        NO_SIDE_EFFECTS

        - - - - -

        Methods with idempotency_level option

        - - - - + + - - - + - + + + + + + + + + + + @@ -14794,90 +14343,12 @@

        Methods with idempotency_level option

        -

        policy/obligations/obligations.proto

        Top +

        policy/registeredresources/registered_resources.proto

        Top

        -

        AddObligationTriggerRequest

        -

        Obligation Triggers are owned by the namespace that owns the action and attribute value, which must

        be the same. In this way, a trigger can intentionally cross namespace boundaries: associating

        obligation values of a different namespace than the one that owns the action being taken or the attribute value.

        - - -
        Method NameOptionGetObligationsByFQNs

        NO_SIDE_EFFECTS

        GetNamespaceGetObligationValue

        NO_SIDE_EFFECTS

        ListNamespacesGetObligationValuesByFQNs

        NO_SIDE_EFFECTS

        GetObligationTrigger

        NO_SIDE_EFFECTS

        ListObligationTriggers

        NO_SIDE_EFFECTS

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        FieldTypeLabelDescription
        obligation_valuecommon.IdFqnIdentifier

        Required

        actioncommon.IdNameIdentifier

        Required

        attribute_valuecommon.IdFqnIdentifier

        Required

        contextpolicy.RequestContext

        Optional -The request context for this obligation value policy decisioning.

        metadatacommon.MetadataMutable

        Optional -Common metadata

        - - - - - -

        AddObligationTriggerResponse

        -

        - - - - - - - - - - - - - - - - -
        FieldTypeLabelDescription
        triggerpolicy.ObligationTrigger

        - - - - - -

        CreateObligationRequest

        +

        ActionAttributeValue

        @@ -14888,39 +14359,31 @@

        CreateObligationRequest

        - namespace_id + action_id string

        - namespace_fqn + action_name string

        - name + attribute_value_id string

        - values + attribute_value_fqn string - repeated -

        Optional

        - - - - metadata - common.MetadataMutable -

        Optional -Common metadata

        +

        @@ -14930,7 +14393,7 @@

        CreateObligationRequest

        -

        CreateObligationResponse

        +

        CreateRegisteredResourceRequest

        @@ -14941,58 +14404,35 @@

        CreateObligationResponse - obligation - policy.Obligation + name + string -

        +

        Required

        - - - - - - - -

        CreateObligationValueRequest

        -

        - - - - - - - - - + - - + + - + - + - - - - - - - @@ -15008,7 +14448,7 @@

        CreateObligationValueRe -

        CreateObligationValueResponse

        +

        CreateRegisteredResourceResponse

        @@ -15019,8 +14459,8 @@

        CreateObligationValueR

        - - + + @@ -15032,7 +14472,7 @@

        CreateObligationValueR -

        DeleteObligationRequest

        +

        CreateRegisteredResourceValueRequest

        @@ -15043,72 +14483,34 @@

        DeleteObligationRequest

        - + - + - + - - - - -
        FieldTypeLabelDescription
        obligation_idvalues string

        repeated

        Optional +Registered Resource Values (when provided) must be alphanumeric strings, allowing hyphens and underscores but not as the first or last character. +The stored value will be normalized to lower case.

        obligation_fqnnamespace_id string

        valuenamespace_fqn string

        triggersValueTriggerRequestrepeated

        Optional -Combination of action and attribute_value that will trigger this obligation value policy decisioning.

        metadata common.MetadataMutable
        valuepolicy.ObligationValueresourcepolicy.RegisteredResource

        idresource_id string

        Required

        fqnvalue string

        - - - - - -

        DeleteObligationResponse

        -

        - - - - - - - - - - - - - + - -
        FieldTypeLabelDescription
        obligationpolicy.Obligation

        Required

        - - - - - -

        DeleteObligationValueRequest

        -

        - - - - - - - - - - - - + + + + - - + + - + @@ -15118,7 +14520,7 @@

        DeleteObligationValueRe -

        DeleteObligationValueResponse

        +

        CreateRegisteredResourceValueResponse

        @@ -15130,7 +14532,7 @@

        DeleteObligationValueR

        - + @@ -15142,7 +14544,7 @@

        DeleteObligationValueR -

        GetObligationRequest

        +

        DeleteRegisteredResourceRequest

        @@ -15156,14 +14558,7 @@

        GetObligationRequest

        - - - - - - - - + @@ -15173,7 +14568,7 @@

        GetObligationRequest

        -

        GetObligationResponse

        +

        DeleteRegisteredResourceResponse

        @@ -15184,8 +14579,8 @@

        GetObligationResponse

        - - + + @@ -15197,8 +14592,8 @@

        GetObligationResponse

        -

        GetObligationTriggerRequest

        -

        Triggers

        +

        DeleteRegisteredResourceValueRequest

        +

        FieldTypeLabelDescription
        idstring

        action_attribute_valuesActionAttributeValuerepeated

        Optional +The associated Action <> AttributeValue combinations to be utilized in authorization/entitlement decisioning +(i.e. action read -> attribute value https://example.com/attr/department/value/marketing)

        fqnstringmetadatacommon.MetadataMutable

        Optional +Common metadata

        valuepolicy.ObligationValuepolicy.RegisteredResourceValue

        id string

        fqnstring

        Required

        obligationpolicy.Obligationresourcepolicy.RegisteredResource

        @@ -15221,7 +14616,7 @@

        GetObligationTriggerRequ -

        GetObligationTriggerResponse

        +

        DeleteRegisteredResourceValueResponse

        @@ -15232,8 +14627,8 @@

        GetObligationTriggerRes

        - - + + @@ -15245,8 +14640,8 @@

        GetObligationTriggerRes -

        GetObligationValueRequest

        -

        Values

        +

        GetRegisteredResourceRequest

        +

        triggerpolicy.ObligationTriggervaluepolicy.RegisteredResourceValue

        @@ -15263,32 +14658,22 @@

        GetObligationValueRequest<

        - + - -
        fqnname string

        - - - - - -

        GetObligationValueResponse

        -

        - - - - - - - + + + + + + - - + + @@ -15300,7 +14685,7 @@

        GetObligationValueRespons -

        GetObligationValuesByFQNsRequest

        +

        GetRegisteredResourceResponse

        @@ -15311,9 +14696,9 @@

        GetObligationValues

        - - - + + + @@ -15324,7 +14709,7 @@

        GetObligationValues -

        GetObligationValuesByFQNsResponse

        +

        GetRegisteredResourceValueRequest

        @@ -15335,9 +14720,16 @@

        GetObligationValue

        - - - + + + + + + + + + + @@ -15348,7 +14740,7 @@

        GetObligationValue -

        GetObligationValuesByFQNsResponse.FqnValueMapEntry

        +

        GetRegisteredResourceValueResponse

        @@ -15358,16 +14750,9 @@

        G

        - - - - - - - - + @@ -15379,7 +14764,7 @@

        G -

        GetObligationsByFQNsRequest

        +

        GetRegisteredResourceValuesByFQNsRequest

        @@ -15393,7 +14778,7 @@

        GetObligationsByFQNsRequ

        - + @@ -15403,7 +14788,7 @@

        GetObligationsByFQNsRequ -

        GetObligationsByFQNsResponse

        +

        GetRegisteredResourceValuesByFQNsResponse

        @@ -15414,8 +14799,8 @@

        GetObligationsByFQNsRes

        - - + + @@ -15427,7 +14812,7 @@

        GetObligationsByFQNsRes -

        GetObligationsByFQNsResponse.FqnObligationMapEntry

        +

        GetRegisteredResourceValuesByFQNsResponse.FqnValueMapEntry

        @@ -15446,7 +14831,7 @@

        G

        - + @@ -15458,7 +14843,7 @@

        G -

        ListObligationTriggersRequest

        +

        ListRegisteredResourceValuesRequest

        @@ -15469,17 +14854,10 @@

        ListObligationTriggers

        - - - - - - - - + - + @@ -15496,7 +14874,7 @@

        ListObligationTriggers -

        ListObligationTriggersResponse

        +

        ListRegisteredResourceValuesResponse

        @@ -15507,8 +14885,8 @@

        ListObligationTrigger

        - - + + @@ -15527,7 +14905,7 @@

        ListObligationTrigger -

        ListObligationsRequest

        +

        ListRegisteredResourcesRequest

        @@ -15560,7 +14938,7 @@

        ListObligationsRequest

        - + - - + + @@ -15614,7 +14992,7 @@

        ListObligationsResponse

        -

        ObligationsSort

        +

        RegisteredResourcesSort

        @@ -15626,7 +15004,7 @@

        ObligationsSort

        - + @@ -15645,55 +15023,7 @@

        ObligationsSort

        -

        RemoveObligationTriggerRequest

        -

        - - -
        FieldTypeLabelDescription
        namespace_fqnstring

        valuepolicy.ObligationValuenamespace_idstring

        fqnsstringrepeatedresourcepolicy.RegisteredResource

        fqn_value_mapGetObligationValuesByFQNsResponse.FqnValueMapEntryrepeatedidstring

        fqnstring

        keystring

        valuepolicy.ObligationValuepolicy.RegisteredResourceValue

        fqns string repeated

        Required

        fqn_obligation_mapGetObligationsByFQNsResponse.FqnObligationMapEntryfqn_value_mapGetRegisteredResourceValuesByFQNsResponse.FqnValueMapEntry repeated

        valuepolicy.Obligationpolicy.RegisteredResourceValue

        namespace_idstring

        namespace_fqnresource_id string

        Optional

        triggerspolicy.ObligationTriggervaluespolicy.RegisteredResourceValue repeated

        sortObligationsSortRegisteredResourcesSort repeated

        Optional - CONSTRAINT: max 1 item Sort defaults: @@ -15583,7 +14961,7 @@

        ListObligationsRequest

        -

        ListObligationsResponse

        +

        ListRegisteredResourcesResponse

        @@ -15594,8 +14972,8 @@

        ListObligationsResponse

        obligationspolicy.Obligationresourcespolicy.RegisteredResource repeated

        fieldSortObligationsTypeSortRegisteredResourcesType

        - - - - - - - - - - - - - -
        FieldTypeLabelDescription
        idstring

        Required

        - - - - - -

        RemoveObligationTriggerResponse

        -

        - - - - - - - - - - - - - - - - -
        FieldTypeLabelDescription
        triggerpolicy.ObligationTrigger

        - - - - - -

        UpdateObligationRequest

        +

        UpdateRegisteredResourceRequest

        @@ -15721,7 +15051,8 @@

        UpdateObligationRequest

        metadata common.MetadataMutable -

        +

        Optional +Common metadata

        @@ -15738,7 +15069,7 @@

        UpdateObligationRequest

        -

        UpdateObligationResponse

        +

        UpdateRegisteredResourceResponse

        @@ -15749,8 +15080,8 @@

        UpdateObligationResponse - obligation - policy.Obligation + resource + policy.RegisteredResource

        @@ -15762,7 +15093,7 @@

        UpdateObligationResponseUpdateObligationValueRequest

        +

        UpdateRegisteredResourceValueRequest

        @@ -15787,48 +15118,24 @@

        UpdateObligationValueRe - triggers - ValueTriggerRequest + action_attribute_values + ActionAttributeValue repeated

        Optional -Obligation Triggers provided here will replace all existing records in the database.

        - - - - metadata - common.MetadataMutable - -

        Optional -Common metadata

        - - - - metadata_update_behavior - common.MetadataUpdateEnum - -

        +Action Attribute Values provided here will replace all existing records in the database. To delete all action attribute values, set this field to an empty list.

        - - - - - - - -

        UpdateObligationValueResponse

        -

        - - - - - - - - - - + + + + + + + + + @@ -15840,7 +15147,7 @@

        UpdateObligationValueR -

        ValueTriggerRequest

        +

        UpdateRegisteredResourceValueResponse

        @@ -15851,24 +15158,10 @@

        ValueTriggerRequest

        - - - - - - - - - - - - - - - - + + - + @@ -15880,7 +15173,7 @@

        ValueTriggerRequest

        -

        SortObligationsType

        +

        SortRegisteredResourcesType

        FieldTypeLabelDescription
        valuepolicy.ObligationValuemetadatacommon.MetadataMutable

        Optional +Common metadata

        metadata_update_behaviorcommon.MetadataUpdateEnum

        actioncommon.IdNameIdentifier

        Required. The ID of the action that will trigger this obligation value policy decisioning.

        attribute_valuecommon.IdFqnIdentifier

        Required. The attribute value ID that will trigger this obligation value policy decisioning.

        contextpolicy.RequestContextvaluepolicy.RegisteredResourceValue

        Optional. The request context for this obligation value policy decisioning.

        @@ -15889,35 +15182,29 @@

        SortObligationsType

        - + - + - + - + - - - - - -
        SORT_OBLIGATIONS_TYPE_UNSPECIFIEDSORT_REGISTERED_RESOURCES_TYPE_UNSPECIFIED 0

        SORT_OBLIGATIONS_TYPE_NAMESORT_REGISTERED_RESOURCES_TYPE_NAME 1

        SORT_OBLIGATIONS_TYPE_FQNSORT_REGISTERED_RESOURCES_TYPE_CREATED_AT 2

        SORT_OBLIGATIONS_TYPE_CREATED_ATSORT_REGISTERED_RESOURCES_TYPE_UPDATED_AT 3

        SORT_OBLIGATIONS_TYPE_UPDATED_AT4

        @@ -15925,8 +15212,8 @@

        SortObligationsType

        -

        Service

        -

        Obligation Service

        /

        +

        RegisteredResourcesService

        +

        Registered Resources

        @@ -15934,219 +15221,95 @@

        Service

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - -
        Method NameRequest TypeResponse TypeDescription
        ListObligationsListObligationsRequestListObligationsResponse

        GetObligationGetObligationRequestGetObligationResponse

        GetObligationsByFQNsGetObligationsByFQNsRequestGetObligationsByFQNsResponse

        CreateObligationCreateObligationRequestCreateObligationResponse

        UpdateObligationUpdateObligationRequestUpdateObligationResponse

        DeleteObligationDeleteObligationRequestDeleteObligationResponse

        GetObligationValueGetObligationValueRequestGetObligationValueResponseCreateRegisteredResourceCreateRegisteredResourceRequestCreateRegisteredResourceResponse

        GetObligationValuesByFQNsGetObligationValuesByFQNsRequestGetObligationValuesByFQNsResponseGetRegisteredResourceGetRegisteredResourceRequestGetRegisteredResourceResponse

        CreateObligationValueCreateObligationValueRequestCreateObligationValueResponseListRegisteredResourcesListRegisteredResourcesRequestListRegisteredResourcesResponse

        UpdateObligationValueUpdateObligationValueRequestUpdateObligationValueResponseUpdateRegisteredResourceUpdateRegisteredResourceRequestUpdateRegisteredResourceResponse

        DeleteObligationValueDeleteObligationValueRequestDeleteObligationValueResponseDeleteRegisteredResourceDeleteRegisteredResourceRequestDeleteRegisteredResourceResponse

        GetObligationTriggerGetObligationTriggerRequestGetObligationTriggerResponseCreateRegisteredResourceValueCreateRegisteredResourceValueRequestCreateRegisteredResourceValueResponse

        AddObligationTriggerAddObligationTriggerRequestAddObligationTriggerResponseGetRegisteredResourceValueGetRegisteredResourceValueRequestGetRegisteredResourceValueResponse

        RemoveObligationTriggerRemoveObligationTriggerRequestRemoveObligationTriggerResponseGetRegisteredResourceValuesByFQNsGetRegisteredResourceValuesByFQNsRequestGetRegisteredResourceValuesByFQNsResponse

        ListObligationTriggersListObligationTriggersRequestListObligationTriggersResponseListRegisteredResourceValuesListRegisteredResourceValuesRequestListRegisteredResourceValuesResponse

        - - - - -

        Methods with idempotency_level option

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Method NameOption
        ListObligations

        NO_SIDE_EFFECTS

        GetObligation

        NO_SIDE_EFFECTS

        GetObligationsByFQNs

        NO_SIDE_EFFECTS

        GetObligationValue

        NO_SIDE_EFFECTS

        GetObligationValuesByFQNs

        NO_SIDE_EFFECTS

        GetObligationTrigger

        NO_SIDE_EFFECTS

        ListObligationTriggers

        NO_SIDE_EFFECTS

        - - - - -
        -

        policy/registeredresources/registered_resources.proto

        Top -
        -

        - - -

        ActionAttributeValue

        -

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        FieldTypeLabelDescription
        action_idstring

        action_namestring

        attribute_value_idstring

        attribute_value_fqnstring

        - - + + + UpdateRegisteredResourceValue + UpdateRegisteredResourceValueRequest + UpdateRegisteredResourceValueResponse +

        + + + + DeleteRegisteredResourceValue + DeleteRegisteredResourceValueRequest + DeleteRegisteredResourceValueResponse +

        + + + + + -

        CreateRegisteredResourceRequest

        +
        +

        policy/resourcemapping/resource_mapping.proto

        Top +
        +

        + + +

        CreateResourceMappingGroupRequest

        @@ -16157,41 +15320,31 @@

        CreateRegist - name + namespace_id string -

        Required

        - - - - values - string - repeated -

        Optional -Registered Resource Values (when provided) must be alphanumeric strings, allowing hyphens and underscores but not as the first or last character. -The stored value will be normalized to lower case.

        +

        - namespace_id + namespace_fqn string

        - namespace_fqn + name string -

        +

        Required

        metadata common.MetadataMutable -

        Optional -Common metadata

        +

        Common metadata

        @@ -16201,7 +15354,7 @@

        CreateRegist -

        CreateRegisteredResourceResponse

        +

        CreateResourceMappingGroupResponse

        @@ -16212,8 +15365,8 @@

        CreateRegis - resource - policy.RegisteredResource + resource_mapping_group + policy.ResourceMappingGroup

        @@ -16225,7 +15378,7 @@

        CreateRegis -

        CreateRegisteredResourceValueRequest

        +

        CreateResourceMappingRequest

        @@ -16236,34 +15389,48 @@

        CreateR - resource_id + attribute_value_id string

        Required

        - value + terms string - + repeated

        Required

        - action_attribute_values - ActionAttributeValue - repeated + group_id + string + +

        Optional

        + + + + namespace_id + string +

        Optional -The associated Action <> AttributeValue combinations to be utilized in authorization/entitlement decisioning -(i.e. action read -> attribute value https://example.com/attr/department/value/marketing)

        +The namespace that owns this resource mapping. If a group_id is provided, +this must match the group's namespace (and may be omitted to inherit it).

        + + + + namespace_fqn + string + +

        Optional +Alternative to namespace_id; the FQN of the owning namespace.

        metadata common.MetadataMutable -

        Optional -Common metadata

        +

        Optional

        @@ -16273,7 +15440,7 @@

        CreateR -

        CreateRegisteredResourceValueResponse

        +

        CreateResourceMappingResponse

        @@ -16284,8 +15451,8 @@

        Create - value - policy.RegisteredResourceValue + resource_mapping + policy.ResourceMapping

        @@ -16297,7 +15464,7 @@

        Create -

        DeleteRegisteredResourceRequest

        +

        DeleteResourceMappingGroupRequest

        @@ -16321,7 +15488,7 @@

        DeleteRegist -

        DeleteRegisteredResourceResponse

        +

        DeleteResourceMappingGroupResponse

        @@ -16332,8 +15499,8 @@

        DeleteRegis - resource - policy.RegisteredResource + resource_mapping_group + policy.ResourceMappingGroup

        @@ -16345,7 +15512,7 @@

        DeleteRegis -

        DeleteRegisteredResourceValueRequest

        +

        DeleteResourceMappingRequest

        @@ -16369,7 +15536,7 @@

        DeleteR -

        DeleteRegisteredResourceValueResponse

        +

        DeleteResourceMappingResponse

        @@ -16380,8 +15547,8 @@

        Delete - value - policy.RegisteredResourceValue + resource_mapping + policy.ResourceMapping

        @@ -16393,7 +15560,7 @@

        Delete -

        GetRegisteredResourceRequest

        +

        GetResourceMappingGroupRequest

        @@ -16407,28 +15574,7 @@

        GetRegisteredRe id string -

        - - - - name - string - -

        - - - - namespace_fqn - string - -

        - - - - namespace_id - string - -

        +

        Required

        @@ -16438,7 +15584,7 @@

        GetRegisteredRe -

        GetRegisteredResourceResponse

        +

        GetResourceMappingGroupResponse

        @@ -16449,8 +15595,8 @@

        GetRegisteredR - resource - policy.RegisteredResource + resource_mapping_group + policy.ResourceMappingGroup

        @@ -16462,7 +15608,7 @@

        GetRegisteredR -

        GetRegisteredResourceValueRequest

        +

        GetResourceMappingRequest

        @@ -16476,14 +15622,7 @@

        GetRegiste id string -

        - - - - fqn - string - -

        +

        Required

        @@ -16493,7 +15632,7 @@

        GetRegiste -

        GetRegisteredResourceValueResponse

        +

        GetResourceMappingResponse

        @@ -16504,8 +15643,8 @@

        GetRegist - value - policy.RegisteredResourceValue + resource_mapping + policy.ResourceMapping

        @@ -16517,7 +15656,7 @@

        GetRegist -

        GetRegisteredResourceValuesByFQNsRequest

        +

        ListResourceMappingGroupsRequest

        @@ -16528,10 +15667,24 @@

        Get - fqns + namespace_id string - repeated -

        Required

        + +

        Optional

        + + + + namespace_fqn + string + +

        Optional

        + + + + pagination + policy.PageRequest + +

        Optional

        @@ -16541,7 +15694,7 @@

        Get -

        GetRegisteredResourceValuesByFQNsResponse

        +

        ListResourceMappingGroupsResponse

        @@ -16552,12 +15705,19 @@

        Ge - fqn_value_map - GetRegisteredResourceValuesByFQNsResponse.FqnValueMapEntry + resource_mapping_groups + policy.ResourceMappingGroup repeated

        + + pagination + policy.PageResponse + +

        + + @@ -16565,7 +15725,7 @@

        Ge -

        GetRegisteredResourceValuesByFQNsResponse.FqnValueMapEntry

        +

        ListResourceMappingsByGroupFqnsRequest

        @@ -16576,17 +15736,11 @@

        string - -

        - - - - value - policy.RegisteredResourceValue - -

        + repeated +

        Required +Structure of the RM Group FQN is 'https://<namespace>/resm/<group name>'

        @@ -16596,7 +15750,7 @@

        ListRegisteredResourceValuesRequest

        +

        ListResourceMappingsByGroupFqnsResponse

        @@ -16607,17 +15761,10 @@

        ListRegi - resource_id - string - -

        Optional

        - - - - pagination - policy.PageRequest - -

        Optional

        + fqn_resource_mapping_groups + ListResourceMappingsByGroupFqnsResponse.FqnResourceMappingGroupsEntry + repeated +

        @@ -16627,7 +15774,7 @@

        ListRegi -

        ListRegisteredResourceValuesResponse

        +

        ListResourceMappingsByGroupFqnsResponse.FqnResourceMappingGroupsEntry

        @@ -16638,15 +15785,15 @@

        ListReg - values - policy.RegisteredResourceValue - repeated + key + string +

        - pagination - policy.PageResponse + value + ResourceMappingsByGroup

        @@ -16658,7 +15805,7 @@

        ListReg -

        ListRegisteredResourcesRequest

        +

        ListResourceMappingsRequest

        @@ -16669,40 +15816,31 @@

        ListRegistere - namespace_id + group_id string -

        +

        Optional

        - namespace_fqn + namespace_id string -

        - - - - pagination - policy.PageRequest - -

        Optional

        +

        Optional +Filter the list to resource mappings owned by this namespace.

        - sort - RegisteredResourcesSort - repeated -

        Optional - CONSTRAINT: max 1 item -Sort defaults: - - direction UNSPECIFIED defaults to DESC for the specified field - - field UNSPECIFIED defaults to created_at with the specified direction - - both UNSPECIFIED or sort omitted defaults to created_at DESC

        + namespace_fqn + string + +

        Optional +Filter the list to resource mappings owned by this namespace.

        - search - policy.Search + pagination + policy.PageRequest

        Optional

        @@ -16714,7 +15852,7 @@

        ListRegistere -

        ListRegisteredResourcesResponse

        +

        ListResourceMappingsResponse

        @@ -16725,8 +15863,8 @@

        ListRegister - resources - policy.RegisteredResource + resource_mappings + policy.ResourceMapping repeated

        @@ -16745,7 +15883,7 @@

        ListRegister -

        RegisteredResourcesSort

        +

        ResourceMappingsByGroup

        @@ -16756,16 +15894,16 @@

        RegisteredResourcesS - field - SortRegisteredResourcesType + group + policy.ResourceMappingGroup

        - direction - policy.SortDirection - + mappings + policy.ResourceMapping + repeated

        @@ -16776,7 +15914,7 @@

        RegisteredResourcesS -

        UpdateRegisteredResourceRequest

        +

        UpdateResourceMappingGroupRequest

        @@ -16793,6 +15931,20 @@

        UpdateRegist

        Required

        + + namespace_id + string + +

        Optional

        + + + + namespace_fqn + string + +

        Optional

        + + name string @@ -16804,8 +15956,7 @@

        UpdateRegist metadata common.MetadataMutable -

        Optional -Common metadata

        +

        Common metadata

        @@ -16822,7 +15973,7 @@

        UpdateRegist -

        UpdateRegisteredResourceResponse

        +

        UpdateResourceMappingGroupResponse

        @@ -16833,8 +15984,8 @@

        UpdateRegis - resource - policy.RegisteredResource + resource_mapping_group + policy.ResourceMappingGroup

        @@ -16846,7 +15997,7 @@

        UpdateRegis -

        UpdateRegisteredResourceValueRequest

        +

        UpdateResourceMappingRequest

        @@ -16864,18 +16015,41 @@

        UpdateR - value + attribute_value_id string

        Optional

        - action_attribute_values - ActionAttributeValue + terms + string repeated +

        Optional

        + + + + group_id + string + +

        Optional

        + + + + namespace_id + string +

        Optional -Action Attribute Values provided here will replace all existing records in the database. To delete all action attribute values, set this field to an empty list.

        +The namespace that owns this resource mapping. If a group_id is set on the +mapping, this must match the group's namespace.

        + + + + namespace_fqn + string + +

        Optional +Alternative to namespace_id; the FQN of the owning namespace.

        @@ -16883,7 +16057,7 @@

        UpdateR common.MetadataMutable

        Optional -Common metadata

        +Common Metadata

        @@ -16900,7 +16074,7 @@

        UpdateR -

        UpdateRegisteredResourceValueResponse

        +

        UpdateResourceMappingResponse

        @@ -16911,8 +16085,8 @@

        Update - value - policy.RegisteredResourceValue + resource_mapping + policy.ResourceMapping

        @@ -16926,143 +16100,149 @@

        Update -

        SortRegisteredResourcesType

        -

        + + + + +

        ResourceMappingService

        +

        Resource Mapping Groups

        - + - - + + + - - + + + - - + + + - - + + + - -
        NameNumberDescription
        Method NameRequest TypeResponse TypeDescription
        SORT_REGISTERED_RESOURCES_TYPE_UNSPECIFIED0ListResourceMappingGroupsListResourceMappingGroupsRequestListResourceMappingGroupsResponse

        SORT_REGISTERED_RESOURCES_TYPE_NAME1GetResourceMappingGroupGetResourceMappingGroupRequestGetResourceMappingGroupResponse

        SORT_REGISTERED_RESOURCES_TYPE_CREATED_AT2CreateResourceMappingGroupCreateResourceMappingGroupRequestCreateResourceMappingGroupResponse

        SORT_REGISTERED_RESOURCES_TYPE_UPDATED_AT3UpdateResourceMappingGroupUpdateResourceMappingGroupRequestUpdateResourceMappingGroupResponse

        - - - - - -

        RegisteredResourcesService

        -

        Registered Resources

        - - - - - - - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + + +
        Method NameRequest TypeResponse TypeDescription
        CreateRegisteredResourceCreateRegisteredResourceRequestCreateRegisteredResourceResponseDeleteResourceMappingGroupDeleteResourceMappingGroupRequestDeleteResourceMappingGroupResponse

        GetRegisteredResourceGetRegisteredResourceRequestGetRegisteredResourceResponseListResourceMappingsListResourceMappingsRequestListResourceMappingsResponse

        ListRegisteredResourcesListRegisteredResourcesRequestListRegisteredResourcesResponseListResourceMappingsByGroupFqnsListResourceMappingsByGroupFqnsRequestListResourceMappingsByGroupFqnsResponse

        UpdateRegisteredResourceUpdateRegisteredResourceRequestUpdateRegisteredResourceResponseGetResourceMappingGetResourceMappingRequestGetResourceMappingResponse

        DeleteRegisteredResourceDeleteRegisteredResourceRequestDeleteRegisteredResourceResponseCreateResourceMappingCreateResourceMappingRequestCreateResourceMappingResponse

        CreateRegisteredResourceValueCreateRegisteredResourceValueRequestCreateRegisteredResourceValueResponseUpdateResourceMappingUpdateResourceMappingRequestUpdateResourceMappingResponse

        GetRegisteredResourceValueGetRegisteredResourceValueRequestGetRegisteredResourceValueResponseDeleteResourceMappingDeleteResourceMappingRequestDeleteResourceMappingResponse

        + + + + +

        Methods with idempotency_level option

        + + + + + + + + + - - - - + + - - - - + + - - - - + + - - - - + + - -
        Method NameOption
        GetRegisteredResourceValuesByFQNsGetRegisteredResourceValuesByFQNsRequestGetRegisteredResourceValuesByFQNsResponse

        ListResourceMappingGroups

        NO_SIDE_EFFECTS

        ListRegisteredResourceValuesListRegisteredResourceValuesRequestListRegisteredResourceValuesResponse

        GetResourceMappingGroup

        NO_SIDE_EFFECTS

        UpdateRegisteredResourceValueUpdateRegisteredResourceValueRequestUpdateRegisteredResourceValueResponse

        ListResourceMappings

        NO_SIDE_EFFECTS

        DeleteRegisteredResourceValueDeleteRegisteredResourceValueRequestDeleteRegisteredResourceValueResponse

        ListResourceMappingsByGroupFqns

        NO_SIDE_EFFECTS

        - + + GetResourceMapping +

        NO_SIDE_EFFECTS

        + + + + +
        -

        policy/resourcemapping/resource_mapping.proto

        Top +

        policy/subjectmapping/subject_mapping.proto

        Top

        -

        CreateResourceMappingGroupRequest

        +

        CreateSubjectConditionSetRequest

        @@ -17073,31 +16253,24 @@

        CreateResource - namespace_id - string - -

        - - - - namespace_fqn - string + subject_condition_set + SubjectConditionSetCreate

        - name + namespace_id string -

        Required

        +

        - metadata - common.MetadataMutable + namespace_fqn + string -

        Common metadata

        +

        @@ -17107,7 +16280,7 @@

        CreateResource -

        CreateResourceMappingGroupResponse

        +

        CreateSubjectConditionSetResponse

        @@ -17118,8 +16291,8 @@

        CreateResourc - resource_mapping_group - policy.ResourceMappingGroup + subject_condition_set + policy.SubjectConditionSet

        @@ -17131,7 +16304,7 @@

        CreateResourc -

        CreateResourceMappingRequest

        +

        CreateSubjectMappingRequest

        @@ -17145,21 +16318,31 @@

        CreateResourceMappi attribute_value_id string -

        Required

        +

        Required +Attribute Value to be mapped to

        - terms - string + actions + policy.Action repeated -

        Required

        +

        Required +The actions permitted by subjects in this mapping

        - group_id + existing_subject_condition_set_id string -

        Optional

        +

        Either of the following: +Reuse existing SubjectConditionSet (NOTE: prioritized over new_subject_condition_set)

        + + + + new_subject_condition_set + SubjectConditionSetCreate + +

        Create new SubjectConditionSet (NOTE: ignored if existing_subject_condition_set_id is provided)

        @@ -17167,16 +16350,14 @@

        CreateResourceMappi string

        Optional -The namespace that owns this resource mapping. If a group_id is provided, -this must match the group's namespace (and may be omitted to inherit it).

        +Namespace ID or FQN for the subject mapping

        namespace_fqn string -

        Optional -Alternative to namespace_id; the FQN of the owning namespace.

        +

        @@ -17193,7 +16374,7 @@

        CreateResourceMappi -

        CreateResourceMappingResponse

        +

        CreateSubjectMappingResponse

        @@ -17204,8 +16385,8 @@

        CreateResourceMapp - resource_mapping - policy.ResourceMapping + subject_mapping + policy.SubjectMapping

        @@ -17217,7 +16398,38 @@

        CreateResourceMapp -

        DeleteResourceMappingGroupRequest

        +

        DeleteAllUnmappedSubjectConditionSetsRequest

        +

        Prune any Subject Condition Sets not utilized within a Subject Mapping

        + + + + + +

        DeleteAllUnmappedSubjectConditionSetsResponse

        +

        + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        subject_condition_setspolicy.SubjectConditionSetrepeated

        Only IDs of any deleted Subject Condition Set provided

        + + + + + +

        DeleteSubjectConditionSetRequest

        @@ -17241,7 +16453,7 @@

        DeleteResource -

        DeleteResourceMappingGroupResponse

        +

        DeleteSubjectConditionSetResponse

        @@ -17252,10 +16464,10 @@

        DeleteResourc - resource_mapping_group - policy.ResourceMappingGroup + subject_condition_set + policy.SubjectConditionSet -

        +

        Only ID of deleted Subject Condition Set provided

        @@ -17265,7 +16477,7 @@

        DeleteResourc -

        DeleteResourceMappingRequest

        +

        DeleteSubjectMappingRequest

        @@ -17289,7 +16501,7 @@

        DeleteResourceMappi -

        DeleteResourceMappingResponse

        +

        DeleteSubjectMappingResponse

        @@ -17300,10 +16512,10 @@

        DeleteResourceMapp - resource_mapping - policy.ResourceMapping + subject_mapping + policy.SubjectMapping -

        +

        Only ID of the updated Subject Mapping provided

        @@ -17313,7 +16525,7 @@

        DeleteResourceMapp -

        GetResourceMappingGroupRequest

        +

        GetSubjectConditionSetRequest

        @@ -17337,7 +16549,7 @@

        GetResourceMappin -

        GetResourceMappingGroupResponse

        +

        GetSubjectConditionSetResponse

        @@ -17348,12 +16560,19 @@

        GetResourceMappi - resource_mapping_group - policy.ResourceMappingGroup + subject_condition_set + policy.SubjectConditionSet

        + + associated_subject_mappings + policy.SubjectMapping + repeated +

        contextualized Subject Mappings associated with this SubjectConditionSet

        + + @@ -17361,7 +16580,7 @@

        GetResourceMappi -

        GetResourceMappingRequest

        +

        GetSubjectMappingRequest

        @@ -17385,7 +16604,7 @@

        GetResourceMappingRequ -

        GetResourceMappingResponse

        +

        GetSubjectMappingResponse

        @@ -17396,8 +16615,8 @@

        GetResourceMappingRes - resource_mapping - policy.ResourceMapping + subject_mapping + policy.SubjectMapping

        @@ -17409,7 +16628,7 @@

        GetResourceMappingRes -

        ListResourceMappingGroupsRequest

        +

        ListSubjectConditionSetsRequest

        @@ -17423,14 +16642,14 @@

        ListResourceMap namespace_id string -

        Optional

        +

        namespace_fqn string -

        Optional

        +

        @@ -17440,6 +16659,17 @@

        ListResourceMap

        Optional

        + + sort + SubjectConditionSetsSort + repeated +

        Optional - CONSTRAINT: max 1 item +Sort defaults: + - direction UNSPECIFIED defaults to DESC for the specified field + - field UNSPECIFIED defaults to created_at with the specified direction + - both UNSPECIFIED or sort omitted defaults to created_at DESC

        + + @@ -17447,7 +16677,7 @@

        ListResourceMap -

        ListResourceMappingGroupsResponse

        +

        ListSubjectConditionSetsResponse

        @@ -17458,8 +16688,8 @@

        ListResourceMa - resource_mapping_groups - policy.ResourceMappingGroup + subject_condition_sets + policy.SubjectConditionSet repeated

        @@ -17478,7 +16708,7 @@

        ListResourceMa -

        ListResourceMappingsByGroupFqnsRequest

        +

        ListSubjectMappingsRequest

        @@ -17489,11 +16719,35 @@

        ListResou - fqns + namespace_id + string + +

        + + + + namespace_fqn string + +

        + + + + pagination + policy.PageRequest + +

        Optional

        + + + + sort + SubjectMappingsSort repeated -

        Required -Structure of the RM Group FQN is 'https://<namespace>/resm/<group name>'

        +

        Optional - CONSTRAINT: max 1 item +Sort defaults: + - direction UNSPECIFIED defaults to DESC for the specified field + - field UNSPECIFIED defaults to created_at with the specified direction + - both UNSPECIFIED or sort omitted defaults to created_at DESC

        @@ -17503,7 +16757,7 @@

        ListResou -

        ListResourceMappingsByGroupFqnsResponse

        +

        ListSubjectMappingsResponse

        @@ -17514,12 +16768,19 @@

        ListReso - fqn_resource_mapping_groups - ListResourceMappingsByGroupFqnsResponse.FqnResourceMappingGroupsEntry + subject_mappings + policy.SubjectMapping repeated

        + + pagination + policy.PageResponse + +

        + + @@ -17527,8 +16788,8 @@

        ListReso -

        ListResourceMappingsByGroupFqnsResponse.FqnResourceMappingGroupsEntry

        -

        +

        MatchSubjectMappingsRequest

        +

        MatchSubjectMappingsRequest liberally returns a list of SubjectMappings based on the provided SubjectProperties.

        The SubjectMappings are returned if an external selector field matches.

        @@ -17538,16 +16799,9 @@

        string -

        - - - - - - - + + + @@ -17558,7 +16812,7 @@

        ListResourceMappingsRequest

        +

        MatchSubjectMappingsResponse

        @@ -17569,33 +16823,42 @@

        ListResourceMappings

        - - - - + + + + - - - - - - + +

        valueResourceMappingsByGroupsubject_propertiespolicy.SubjectPropertyrepeated

        group_idstring

        Optional

        subject_mappingspolicy.SubjectMappingrepeated

        namespace_idstring

        Optional -Filter the list to resource mappings owned by this namespace.

        + + + + + +

        SubjectConditionSetCreate

        +

        + + + + + + + - - - - + + + + - - + + - + @@ -17605,7 +16868,7 @@

        ListResourceMappings -

        ListResourceMappingsResponse

        +

        SubjectConditionSetsSort

        @@ -17616,15 +16879,15 @@

        ListResourceMapping

        - - - + + + - - + + @@ -17636,7 +16899,7 @@

        ListResourceMapping -

        ResourceMappingsByGroup

        +

        SubjectMappingsSort

        @@ -17647,16 +16910,16 @@

        ResourceMappingsByGroup<

        - - + + - - - + + + @@ -17667,7 +16930,7 @@

        ResourceMappingsByGroup< -

        UpdateResourceMappingGroupRequest

        +

        UpdateSubjectConditionSetRequest

        @@ -17685,24 +16948,11 @@

        UpdateResource

        - - - - - - - - - - - - - - - - - - + + + + @@ -17726,7 +16976,7 @@

        UpdateResource -

        UpdateResourceMappingGroupResponse

        +

        UpdateSubjectConditionSetResponse

        @@ -17737,10 +16987,10 @@

        UpdateResourc

        - - + + - + @@ -17750,7 +17000,7 @@

        UpdateResourc -

        UpdateResourceMappingRequest

        +

        UpdateSubjectMappingRequest

        @@ -17768,49 +17018,26 @@

        UpdateResourceMappi

        - - - - - - - - - - - - - - - - - - - - - - + +Replaces the existing SubjectConditionSet id with a new one

        - - - + + + +Replaces entire list of actions permitted by subjects

        - + @@ -17827,7 +17054,7 @@

        UpdateResourceMappi -

        UpdateResourceMappingResponse

        +

        UpdateSubjectMappingResponse

        @@ -17838,10 +17065,10 @@

        UpdateResourceMapp

        - - + + - + @@ -17853,12 +17080,70 @@

        UpdateResourceMapp +

        SortSubjectConditionSetsType

        +

        +
        FieldTypeLabelDescription
        namespace_fqnstring

        Optional -Filter the list to resource mappings owned by this namespace.

        subject_setspolicy.SubjectSetrepeated

        Required

        paginationpolicy.PageRequestmetadatacommon.MetadataMutable

        Optional

        Optional +Common metadata

        resource_mappingspolicy.ResourceMappingrepeatedfieldSortSubjectConditionSetsType

        paginationpolicy.PageResponsedirectionpolicy.SortDirection

        grouppolicy.ResourceMappingGroupfieldSortSubjectMappingsType

        mappingspolicy.ResourceMappingrepeateddirectionpolicy.SortDirection

        namespace_idstring

        Optional

        namespace_fqnstring

        Optional

        namestring

        Optional

        subject_setspolicy.SubjectSetrepeated

        Optional +If provided, replaces entire existing structure of Subject Sets, Condition Groups, & Conditions

        resource_mapping_grouppolicy.ResourceMappingGroupsubject_condition_setpolicy.SubjectConditionSet

        Only ID of updated Subject Condition Set provided

        attribute_value_idstring

        Optional

        termsstringrepeated

        Optional

        group_idstring

        Optional

        namespace_idsubject_condition_set_id string

        Optional -The namespace that owns this resource mapping. If a group_id is set on the -mapping, this must match the group's namespace.

        namespace_fqnstringactionspolicy.Actionrepeated

        Optional -Alternative to namespace_id; the FQN of the owning namespace.

        metadata common.MetadataMutable

        Optional -Common Metadata

        Common metadata

        resource_mappingpolicy.ResourceMappingsubject_mappingpolicy.SubjectMapping

        Only ID of the updated Subject Mapping provided

        + + + + + + + + + + + + + + + + + + + + + + + + +
        NameNumberDescription
        SORT_SUBJECT_CONDITION_SETS_TYPE_UNSPECIFIED0

        SORT_SUBJECT_CONDITION_SETS_TYPE_CREATED_AT1

        SORT_SUBJECT_CONDITION_SETS_TYPE_UPDATED_AT2

        + +

        SortSubjectMappingsType

        +

        + + + + + + + + + + + + + + + + + + + + + + + + + +
        NameNumberDescription
        SORT_SUBJECT_MAPPINGS_TYPE_UNSPECIFIED0

        SORT_SUBJECT_MAPPINGS_TYPE_CREATED_AT1

        SORT_SUBJECT_MAPPINGS_TYPE_UPDATED_AT2

        + -

        ResourceMappingService

        -

        Resource Mapping Groups

        +

        SubjectMappingService

        +

        @@ -17866,79 +17151,86 @@

        ResourceMappingService

        - - - + + + + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + @@ -17959,27 +17251,22 @@

        Methods with idempotency_level option

        - - - - - - + - + - + - + diff --git a/docs/openapi/policy/dynamicvaluemapping/dynamic_value_mapping.openapi.yaml b/docs/openapi/policy/dynamicvaluemapping/dynamic_value_mapping.openapi.yaml index fd0fb63dc6..c5030e41ca 100644 --- a/docs/openapi/policy/dynamicvaluemapping/dynamic_value_mapping.openapi.yaml +++ b/docs/openapi/policy/dynamicvaluemapping/dynamic_value_mapping.openapi.yaml @@ -1237,11 +1237,11 @@ components: attributeDefinitionId: type: string title: attribute_definition_id - description: | - optional_uuid_format // Optional field must be a valid UUID + format: uuid attributeDefinitionFqn: type: string title: attribute_definition_fqn + minLength: 1 format: uri valueResolver: title: value_resolver @@ -1269,12 +1269,12 @@ components: namespaceId: type: string title: namespace_id - description: | - Optional: namespace ID or FQN for the mapping - optional_uuid_format // Optional field must be a valid UUID + format: uuid + description: 'Optional: namespace ID or FQN for the mapping' namespaceFqn: type: string title: namespace_fqn + minLength: 1 format: uri metadata: title: metadata @@ -1346,14 +1346,17 @@ components: namespaceId: type: string title: namespace_id - description: | - Optional - Namespace ID, or Attribute Definition ID to filter by - optional_uuid_format // Optional field must be a valid UUID + format: uuid + namespaceFqn: + type: string + title: namespace_fqn + minLength: 1 + format: uri attributeDefinitionId: type: string title: attribute_definition_id description: | + Optional: Attribute Definition ID to filter by optional_uuid_format // Optional field must be a valid UUID pagination: title: pagination diff --git a/protocol/go/go.mod b/protocol/go/go.mod index e2668a8e74..fe119565e9 100644 --- a/protocol/go/go.mod +++ b/protocol/go/go.mod @@ -2,8 +2,6 @@ module github.com/opentdf/platform/protocol/go go 1.25.0 -toolchain go1.25.9 - require ( buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260415201107-50325440f8f2.1 connectrpc.com/connect v1.20.0 diff --git a/protocol/go/policy/dynamicvaluemapping/dynamic_value_mapping.pb.go b/protocol/go/policy/dynamicvaluemapping/dynamic_value_mapping.pb.go index 5df7ef6b45..054858e1c2 100644 --- a/protocol/go/policy/dynamicvaluemapping/dynamic_value_mapping.pb.go +++ b/protocol/go/policy/dynamicvaluemapping/dynamic_value_mapping.pb.go @@ -228,10 +228,10 @@ type ListDynamicValueMappingsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Optional - // Namespace ID, or Attribute Definition ID to filter by - NamespaceId string `protobuf:"bytes,1,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"` - AttributeDefinitionId string `protobuf:"bytes,2,opt,name=attribute_definition_id,json=attributeDefinitionId,proto3" json:"attribute_definition_id,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"` + // Optional: Attribute Definition ID to filter by + AttributeDefinitionId string `protobuf:"bytes,3,opt,name=attribute_definition_id,json=attributeDefinitionId,proto3" json:"attribute_definition_id,omitempty"` // Optional Pagination *policy.PageRequest `protobuf:"bytes,10,opt,name=pagination,proto3" json:"pagination,omitempty"` // Optional - CONSTRAINT: max 1 item @@ -277,6 +277,13 @@ func (x *ListDynamicValueMappingsRequest) GetNamespaceId() string { return "" } +func (x *ListDynamicValueMappingsRequest) GetNamespaceFqn() string { + if x != nil { + return x.NamespaceFqn + } + return "" +} + func (x *ListDynamicValueMappingsRequest) GetAttributeDefinitionId() string { if x != nil { return x.AttributeDefinitionId @@ -791,291 +798,266 @@ var file_policy_dynamicvaluemapping_dynamic_value_mapping_proto_rawDesc = []byte 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xba, 0x48, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xf3, 0x04, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x79, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9d, 0x04, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, - 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xd7, 0x01, 0x0a, 0x0c, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0xb3, 0x01, 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01, 0xab, 0x01, 0x0a, 0x14, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x12, 0x23, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, - 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, - 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, - 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, - 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, - 0x7b, 0x31, 0x32, 0x7d, 0x27, 0x29, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x49, 0x64, 0x12, 0xec, 0x01, 0x0a, 0x17, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xb3, 0x01, 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01, 0xab, 0x01, - 0x0a, 0x14, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x5f, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x23, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, - 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73, 0x69, 0x7a, - 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5b, 0x30, - 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, - 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, + 0x67, 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, 0xec, 0x01, 0x0a, 0x17, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0xb3, 0x01, 0xba, 0x48, 0xaf, 0x01, + 0xba, 0x01, 0xab, 0x01, 0x0a, 0x14, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, + 0x75, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x23, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, + 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, + 0x6e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, + 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, + 0x28, 0x27, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, + 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, + 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, + 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, + 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x27, 0x29, 0x52, + 0x15, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 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, 0x12, 0x52, 0x0a, 0x04, 0x73, + 0x6f, 0x72, 0x74, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, + 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x42, + 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 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, 0xab, 0x01, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x79, + 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x16, 0x64, 0x79, + 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, + 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x14, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 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, 0x90, 0x08, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x79, + 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x17, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, + 0xb0, 0x01, 0x01, 0x52, 0x15, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x44, 0x65, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x44, 0x0a, 0x18, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 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, 0x16, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x71, 0x6e, + 0x12, 0x4b, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, + 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, + 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0d, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x12, 0xb8, 0x01, + 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, + 0x8d, 0x01, 0xba, 0x48, 0x89, 0x01, 0xba, 0x01, 0x80, 0x01, 0x0a, 0x1b, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x6e, 0x6f, + 0x74, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x49, 0x44, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, + 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x69, 0x66, 0x20, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x30, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, + 0x6c, 0x6c, 0x28, 0x69, 0x74, 0x65, 0x6d, 0x2c, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x2e, 0x6e, 0x61, + 0x6d, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x69, 0x74, 0x65, 0x6d, + 0x2e, 0x69, 0x64, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x29, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, + 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xfe, 0x01, 0x0a, 0x21, 0x65, 0x78, 0x69, + 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x42, 0xb3, 0x01, 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01, 0xab, 0x01, 0x0a, + 0x14, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x5f, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x23, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73, 0x69, 0x7a, 0x65, + 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5b, 0x30, 0x2d, + 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, - 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x27, 0x29, 0x52, 0x15, 0x61, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 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, 0x12, 0x52, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, - 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, - 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, - 0x6e, 0x67, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, - 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x42, 0x08, 0xba, 0x48, 0x05, - 0x92, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x22, 0xab, 0x01, 0x0a, 0x20, - 0x4c, 0x69, 0x73, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x51, 0x0a, 0x16, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, - 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x14, 0x64, - 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, - 0x6e, 0x67, 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, 0xc9, 0x0a, 0x0a, 0x20, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xec, - 0x01, 0x0a, 0x17, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x66, - 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0xb3, 0x01, 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01, 0xab, 0x01, 0x0a, 0x14, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x12, 0x23, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, - 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, - 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, - 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, - 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, - 0x7b, 0x31, 0x32, 0x7d, 0x27, 0x29, 0x52, 0x15, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x44, 0x0a, - 0x18, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x00, 0x88, 0x01, 0x01, 0x52, 0x16, 0x61, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x46, 0x71, 0x6e, 0x12, 0x4b, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x72, 0x65, 0x73, - 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, - 0x01, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, - 0x12, 0xb8, 0x01, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x42, 0x8d, 0x01, 0xba, 0x48, 0x89, 0x01, 0xba, 0x01, 0x80, 0x01, 0x0a, 0x1b, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6f, 0x72, 0x5f, 0x69, 0x64, - 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2f, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x49, 0x44, 0x20, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, - 0x69, 0x66, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x30, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x61, 0x6c, 0x6c, 0x28, 0x69, 0x74, 0x65, 0x6d, 0x2c, 0x20, 0x69, 0x74, 0x65, 0x6d, - 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x69, - 0x74, 0x65, 0x6d, 0x2e, 0x69, 0x64, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x29, 0x92, 0x01, 0x02, - 0x08, 0x01, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xfe, 0x01, 0x0a, 0x21, - 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0xb3, 0x01, 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01, - 0xab, 0x01, 0x0a, 0x14, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69, - 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x23, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, - 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73, - 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, - 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, - 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, - 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, - 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, - 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, - 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x27, 0x29, 0x52, 0x1d, 0x65, - 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x6b, 0x0a, 0x19, - 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x30, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x52, 0x16, 0x6e, 0x65, 0x77, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0xd7, 0x01, 0x0a, 0x0c, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x42, 0xb3, 0x01, 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01, 0xab, 0x01, 0x0a, 0x14, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x12, 0x23, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, - 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, - 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, - 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, - 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, - 0x7b, 0x31, 0x32, 0x7d, 0x27, 0x29, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, + 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x27, 0x29, 0x52, 0x1d, 0x65, 0x78, 0x69, 0x73, + 0x74, 0x69, 0x6e, 0x67, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x6b, 0x0a, 0x19, 0x6e, 0x65, 0x77, + 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, + 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x16, + 0x6e, 0x65, 0x77, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x2b, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, 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, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, - 0x05, 0x10, 0x00, 0x88, 0x01, 0x01, 0x52, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x52, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x46, 0x71, 0x6e, 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, 0x3a, 0xba, 0x48, 0x37, 0x22, 0x35, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x5b, 0xba, 0x48, 0x58, 0x22, 0x35, 0x0a, 0x17, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x0a, 0x18, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x66, 0x71, 0x6e, 0x10, 0x01, 0x22, 0x74, 0x0a, 0x21, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, + 0x66, 0x71, 0x6e, 0x10, 0x01, 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, 0x74, 0x0a, 0x21, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x15, 0x64, + 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6d, 0x61, 0x70, + 0x70, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x13, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x22, 0xc6, 0x05, 0x0a, + 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 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, 0x43, 0x0a, 0x0e, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x44, 0x79, 0x6e, + 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, + 0x72, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, + 0x12, 0xed, 0x01, 0x0a, 0x18, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6e, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x42, 0xb3, 0x01, 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01, 0xab, 0x01, 0x0a, 0x14, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x5f, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x12, 0x23, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73, 0x69, 0x7a, 0x65, 0x28, + 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5b, 0x30, 0x2d, 0x39, + 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, + 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, + 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, + 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, + 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x27, 0x29, 0x52, 0x15, 0x73, 0x75, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x49, 0x64, + 0x12, 0xc7, 0x01, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x42, 0x9c, 0x01, 0xba, 0x48, 0x98, 0x01, 0xba, 0x01, 0x94, 0x01, 0x0a, 0x1b, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6f, 0x72, 0x5f, 0x69, 0x64, + 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2f, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x49, 0x44, 0x20, 0x6d, 0x75, + 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, + 0x69, 0x66, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x44, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x6c, 0x6c, 0x28, 0x69, 0x74, 0x65, 0x6d, 0x2c, 0x20, + 0x69, 0x74, 0x65, 0x6d, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x20, + 0x7c, 0x7c, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x2e, 0x69, 0x64, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, + 0x29, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 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, 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, 0x74, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x15, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x13, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x22, 0xc6, 0x05, 0x0a, 0x20, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 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, 0x43, 0x0a, 0x0e, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x44, 0x79, 0x6e, 0x61, - 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, - 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x12, - 0xed, 0x01, 0x0a, 0x18, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x42, 0xb3, 0x01, 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01, 0xab, 0x01, 0x0a, 0x14, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x12, 0x23, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, - 0x68, 0x69, 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5b, 0x30, 0x2d, 0x39, 0x61, - 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, - 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, - 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, - 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, - 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x27, 0x29, 0x52, 0x15, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, - 0xc7, 0x01, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x42, 0x9c, 0x01, 0xba, 0x48, 0x98, 0x01, 0xba, 0x01, 0x94, 0x01, 0x0a, 0x1b, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x5f, - 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x49, 0x44, 0x20, 0x6d, 0x75, 0x73, - 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x69, - 0x66, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x44, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x6c, 0x6c, 0x28, 0x69, 0x74, 0x65, 0x6d, 0x2c, 0x20, 0x69, - 0x74, 0x65, 0x6d, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, - 0x7c, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x2e, 0x69, 0x64, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x29, - 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 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, 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, 0x74, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x79, - 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x15, 0x64, 0x79, 0x6e, - 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, - 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, - 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x13, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x22, 0x3c, 0x0a, 0x20, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 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, 0x74, 0x0a, 0x21, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, - 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, - 0x15, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6d, - 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x13, 0x64, 0x79, 0x6e, 0x61, 0x6d, - 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2a, 0xb2, - 0x01, 0x0a, 0x1c, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x30, 0x0a, 0x2c, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, - 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x53, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x2f, 0x0a, 0x2b, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, - 0x43, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x53, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, - 0x10, 0x01, 0x12, 0x2f, 0x0a, 0x2b, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, + 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x22, 0x3c, 0x0a, 0x20, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 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, 0x74, 0x0a, 0x21, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, + 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, + 0x0a, 0x15, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, + 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x13, 0x64, 0x79, 0x6e, 0x61, + 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2a, + 0xb2, 0x01, 0x0a, 0x1c, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x30, 0x0a, 0x2c, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, + 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x53, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x2f, 0x0a, 0x2b, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, - 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, - 0x54, 0x10, 0x02, 0x32, 0xa7, 0x06, 0x0a, 0x1a, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x9a, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, - 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x12, - 0x3b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, - 0x70, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x79, - 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, - 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, - 0x94, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x39, 0x2e, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, - 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, + 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, + 0x54, 0x10, 0x01, 0x12, 0x2f, 0x0a, 0x2b, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x44, 0x59, 0x4e, 0x41, + 0x4d, 0x49, 0x43, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, + 0x47, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x5f, + 0x41, 0x54, 0x10, 0x02, 0x32, 0xa7, 0x06, 0x0a, 0x1a, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x9a, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x79, 0x6e, 0x61, + 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, + 0x12, 0x3b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, + 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, + 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, + 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, + 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, + 0x12, 0x94, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x39, 0x2e, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x79, 0x6e, 0x61, + 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, + 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, + 0x69, 0x6e, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x9a, 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, + 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x3c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, - 0x6e, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x9a, 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x6e, 0x67, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, + 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x9a, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, + 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, + 0x6e, 0x67, 0x12, 0x3c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, + 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x3d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, + 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x9a, 0x01, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, + 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, + 0x3c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, + 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, - 0x70, 0x69, 0x6e, 0x67, 0x12, 0x3c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, + 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x87, + 0x02, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, - 0x67, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, - 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x9a, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x79, - 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, - 0x67, 0x12, 0x3c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, - 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x3d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, - 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x9a, 0x01, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, - 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x3c, - 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, - 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x87, 0x02, - 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x79, 0x6e, - 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, - 0x42, 0x18, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, - 0x70, 0x70, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x42, 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, 0x64, 0x79, 0x6e, - 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, - 0xa2, 0x02, 0x03, 0x50, 0x44, 0x58, 0xaa, 0x02, 0x1a, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, - 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, - 0x69, 0x6e, 0x67, 0xca, 0x02, 0x1a, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x44, 0x79, 0x6e, - 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, - 0xe2, 0x02, 0x26, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, - 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5c, 0x47, 0x50, - 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1b, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x3a, 0x3a, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x67, 0x42, 0x18, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, + 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x42, 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, 0x64, 0x79, + 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0xa2, 0x02, 0x03, 0x50, 0x44, 0x58, 0xaa, 0x02, 0x1a, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, + 0x70, 0x69, 0x6e, 0x67, 0xca, 0x02, 0x1a, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x44, 0x79, + 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0xe2, 0x02, 0x26, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x44, 0x79, 0x6e, 0x61, 0x6d, + 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1b, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x3a, 0x3a, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/go/policy/objects.pb.go b/protocol/go/policy/objects.pb.go index 4d90965eda..f274344862 100644 --- a/protocol/go/policy/objects.pb.go +++ b/protocol/go/policy/objects.pb.go @@ -1977,6 +1977,10 @@ type ResourceMapping struct { AttributeValue *Value `protobuf:"bytes,3,opt,name=attribute_value,json=attributeValue,proto3" json:"attribute_value,omitempty"` Terms []string `protobuf:"bytes,4,rep,name=terms,proto3" json:"terms,omitempty"` Group *ResourceMappingGroup `protobuf:"bytes,5,opt,name=group,proto3" json:"group,omitempty"` + // The namespace that optionally owns this resource mapping. When the mapping + // belongs to a group, this matches the group's namespace. The mapped + // attribute value may belong to a different namespace. + Namespace *Namespace `protobuf:"bytes,6,opt,name=namespace,proto3" json:"namespace,omitempty"` } func (x *ResourceMapping) Reset() { @@ -2046,6 +2050,13 @@ func (x *ResourceMapping) GetGroup() *ResourceMappingGroup { return nil } +func (x *ResourceMapping) GetNamespace() *Namespace { + if x != nil { + return x.Namespace + } + return nil +} + // Key Access Server Registry type KeyAccessServer struct { state protoimpl.MessageState @@ -3692,7 +3703,7 @@ var file_policy_objects_proto_rawDesc = []byte{ 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, 0xd9, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x61, 0x74, 0x61, 0x22, 0x8a, 0x02, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, @@ -3705,387 +3716,390 @@ var file_policy_objects_proto_rawDesc = []byte{ 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x70, - 0x69, 0x6e, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, - 0x85, 0x05, 0x0a, 0x0f, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x87, 0x03, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0xf4, 0x02, 0xba, 0x48, 0xf0, 0x02, 0xba, 0x01, 0xec, 0x02, 0x0a, 0x0a, 0x75, 0x72, - 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xcf, 0x01, 0x55, 0x52, 0x49, 0x20, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, - 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x27, 0x68, 0x74, 0x74, 0x70, 0x73, - 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x27, 0x29, 0x20, 0x66, - 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x20, - 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x75, 0x73, - 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x64, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, - 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2c, 0x20, - 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x68, 0x79, 0x70, 0x68, - 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, - 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x61, 0x6e, - 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, 0x8b, 0x01, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3f, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, - 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, - 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, - 0x29, 0x3f, 0x28, 0x5c, 0x5c, 0x2e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, + 0x69, 0x6e, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, + 0x2f, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 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, + 0x22, 0x85, 0x05, 0x0a, 0x0f, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x87, 0x03, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0xf4, 0x02, 0xba, 0x48, 0xf0, 0x02, 0xba, 0x01, 0xec, 0x02, 0x0a, 0x0a, 0x75, + 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xcf, 0x01, 0x55, 0x52, 0x49, 0x20, + 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, + 0x55, 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x27, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x27, 0x29, 0x20, + 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x64, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, + 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x75, + 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x64, + 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, + 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2c, + 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x68, 0x79, 0x70, + 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x61, + 0x6e, 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, 0x8b, 0x01, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3f, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, - 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x3a, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x29, 0x3f, 0x28, - 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, 0x27, 0x29, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x30, 0x0a, - 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, - 0x33, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x6b, 0x61, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, - 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x52, 0x07, 0x6b, 0x61, - 0x73, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x14, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 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, 0x97, 0x02, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x37, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, - 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x77, 0x61, 0x73, 0x5f, - 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, - 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x77, 0x61, 0x73, 0x4d, 0x61, 0x70, - 0x70, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, - 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x03, 0x6b, 0x61, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, - 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x03, - 0x6b, 0x61, 0x73, 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, 0x84, 0x01, 0x0a, 0x0c, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, - 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x03, 0x70, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x40, 0x52, 0x03, 0x70, 0x65, 0x6d, - 0x12, 0x1b, 0x0a, 0x03, 0x6b, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0xba, - 0x48, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x03, 0x6b, 0x69, 0x64, 0x12, 0x39, 0x0a, - 0x03, 0x61, 0x6c, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, - 0x41, 0x6c, 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x82, 0x01, 0x04, 0x10, - 0x01, 0x20, 0x00, 0x52, 0x03, 0x61, 0x6c, 0x67, 0x22, 0x3b, 0x0a, 0x0f, 0x4b, 0x61, 0x73, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x6b, - 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, - 0x04, 0x6b, 0x65, 0x79, 0x73, 0x22, 0xe0, 0x03, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x4b, 0x65, 0x79, 0x12, 0x84, 0x03, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0xe9, 0x02, 0xba, 0x48, 0xe5, 0x02, 0xba, 0x01, 0xe1, 0x02, 0x0a, - 0x0a, 0x75, 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xcf, 0x01, 0x55, 0x52, - 0x49, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x20, 0x55, 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x27, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x27, - 0x29, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x64, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, - 0x6e, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, - 0x72, 0x2c, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x68, - 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, - 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2c, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, 0x80, 0x01, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, + 0x5d, 0x29, 0x3f, 0x28, 0x5c, 0x5c, 0x2e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, - 0x39, 0x5d, 0x29, 0x3f, 0x28, 0x5c, 0x5c, 0x2e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, + 0x39, 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x3a, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x29, 0x3f, + 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, 0x27, 0x29, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x30, + 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, + 0x12, 0x33, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x6b, 0x61, 0x73, 0x5f, 0x6b, 0x65, 0x79, + 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x52, 0x07, 0x6b, + 0x61, 0x73, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x14, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 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, 0x97, 0x02, 0x0a, 0x03, 0x4b, 0x65, 0x79, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x37, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x77, 0x61, 0x73, + 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x77, 0x61, 0x73, 0x4d, 0x61, + 0x70, 0x70, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, + 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x03, 0x6b, 0x61, 0x73, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, + 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, + 0x03, 0x6b, 0x61, 0x73, 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, 0x84, 0x01, 0x0a, 0x0c, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x03, 0x70, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x40, 0x52, 0x03, 0x70, 0x65, + 0x6d, 0x12, 0x1b, 0x0a, 0x03, 0x6b, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, + 0xba, 0x48, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x03, 0x6b, 0x69, 0x64, 0x12, 0x39, + 0x0a, 0x03, 0x61, 0x6c, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x41, 0x6c, 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x82, 0x01, 0x04, + 0x10, 0x01, 0x20, 0x00, 0x52, 0x03, 0x61, 0x6c, 0x67, 0x22, 0x3b, 0x0a, 0x0f, 0x4b, 0x61, 0x73, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x04, + 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, + 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x22, 0xe0, 0x03, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x4b, 0x65, 0x79, 0x12, 0x84, 0x03, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0xe9, 0x02, 0xba, 0x48, 0xe5, 0x02, 0xba, 0x01, 0xe1, 0x02, + 0x0a, 0x0a, 0x75, 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xcf, 0x01, 0x55, + 0x52, 0x49, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x20, 0x55, 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x27, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x27, 0x29, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, + 0x65, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, + 0x65, 0x72, 0x2c, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, + 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, + 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, + 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, 0x80, + 0x01, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, - 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, 0x27, 0x29, - 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x63, 0x61, - 0x63, 0x68, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, - 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x0c, 0x0a, - 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x4a, 0x04, 0x08, 0x02, 0x10, - 0x03, 0x52, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x22, 0xd0, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 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, 0x37, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x09, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 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, 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, 0xdc, 0x03, 0x0a, 0x17, - 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 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, 0x36, 0x0a, - 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, - 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x17, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, - 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 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, 0x1a, 0xb4, 0x01, 0x0a, 0x14, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x26, 0x0a, 0x06, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 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, 0x03, 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, 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, 0x3e, 0x0a, 0x16, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 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, 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, 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, 0xd8, 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, 0x2f, 0x0a, 0x09, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0b, 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, 0x2c, 0x0a, + 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x28, 0x5c, 0x5c, 0x2e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, + 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, + 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, + 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, 0x27, + 0x29, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x63, + 0x61, 0x63, 0x68, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x0c, + 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x4a, 0x04, 0x08, 0x02, + 0x10, 0x03, 0x52, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x22, 0xd0, 0x01, 0x0a, 0x12, 0x52, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 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, 0x37, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x2f, 0x0a, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 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, 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, 0xdc, 0x03, 0x0a, + 0x17, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 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, 0x36, + 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x17, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 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, 0x1a, 0xb4, 0x01, 0x0a, 0x14, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x26, 0x0a, + 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 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, 0x03, 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, 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, + 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x3e, 0x0a, 0x16, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 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, 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, 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, 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, + 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, 0xd8, 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, 0x2f, 0x0a, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0b, 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, 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, - 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, + 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, 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, + 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, 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, 0xb6, 0x01, 0x0a, 0x18, 0x44, 0x79, 0x6e, 0x61, 0x6d, - 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x45, - 0x6e, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x27, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, 0x56, - 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, + 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, 0xb6, 0x01, 0x0a, 0x18, 0x44, 0x79, 0x6e, 0x61, + 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x27, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, + 0x56, 0x41, 0x4c, 0x55, 0x45, 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, 0x31, 0x0a, 0x2d, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, 0x56, 0x41, 0x4c, + 0x55, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, + 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, + 0x49, 0x4e, 0x10, 0x01, 0x12, 0x3a, 0x0a, 0x36, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, + 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, + 0x4e, 0x55, 0x4d, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x56, 0x41, 0x4c, + 0x55, 0x45, 0x5f, 0x49, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 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, + 0x9b, 0x03, 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, 0x31, 0x0a, 0x2d, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, 0x56, 0x41, 0x4c, 0x55, - 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, - 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x49, - 0x4e, 0x10, 0x01, 0x12, 0x3a, 0x0a, 0x36, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, 0x56, - 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, - 0x55, 0x4d, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, - 0x45, 0x5f, 0x49, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 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, 0x9b, - 0x03, 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, + 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, 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, 0x12, 0x26, 0x0a, 0x22, 0x4b, 0x41, 0x53, - 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, - 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x58, 0x57, 0x49, 0x4e, 0x47, 0x10, - 0x0a, 0x12, 0x33, 0x0a, 0x2f, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, - 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x50, 0x51, - 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x32, 0x35, 0x36, 0x52, 0x31, 0x5f, 0x4d, 0x4c, 0x4b, 0x45, - 0x4d, 0x37, 0x36, 0x38, 0x10, 0x0b, 0x12, 0x34, 0x0a, 0x30, 0x4b, 0x41, 0x53, 0x5f, 0x50, 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, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31, - 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x31, 0x30, 0x32, 0x34, 0x10, 0x0c, 0x2a, 0x84, 0x02, 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, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x4c, - 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x58, 0x57, 0x49, - 0x4e, 0x47, 0x10, 0x06, 0x12, 0x25, 0x0a, 0x21, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, - 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x32, 0x35, 0x36, 0x52, 0x31, - 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x37, 0x36, 0x38, 0x10, 0x07, 0x12, 0x26, 0x0a, 0x22, 0x41, - 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, 0x45, - 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31, 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x31, 0x30, 0x32, - 0x34, 0x10, 0x08, 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, + 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, 0x12, 0x26, 0x0a, 0x22, 0x4b, 0x41, + 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, + 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x58, 0x57, 0x49, 0x4e, 0x47, + 0x10, 0x0a, 0x12, 0x33, 0x0a, 0x2f, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, + 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x50, + 0x51, 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x32, 0x35, 0x36, 0x52, 0x31, 0x5f, 0x4d, 0x4c, 0x4b, + 0x45, 0x4d, 0x37, 0x36, 0x38, 0x10, 0x0b, 0x12, 0x34, 0x0a, 0x30, 0x4b, 0x41, 0x53, 0x5f, 0x50, + 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, + 0x55, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, + 0x31, 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x31, 0x30, 0x32, 0x34, 0x10, 0x0c, 0x2a, 0x84, 0x02, + 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, 0x12, 0x18, 0x0a, 0x14, 0x41, + 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x58, 0x57, + 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x25, 0x0a, 0x21, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, + 0x48, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x32, 0x35, 0x36, 0x52, + 0x31, 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x37, 0x36, 0x38, 0x10, 0x07, 0x12, 0x26, 0x0a, 0x22, + 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, + 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31, 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x31, 0x30, + 0x32, 0x34, 0x10, 0x08, 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 ( @@ -4201,57 +4215,58 @@ var file_policy_objects_proto_depIdxs = []int32{ 45, // 46: policy.ResourceMapping.metadata:type_name -> common.Metadata 15, // 47: policy.ResourceMapping.attribute_value:type_name -> policy.Value 25, // 48: policy.ResourceMapping.group:type_name -> policy.ResourceMappingGroup - 31, // 49: policy.KeyAccessServer.public_key:type_name -> policy.PublicKey - 4, // 50: policy.KeyAccessServer.source_type:type_name -> policy.SourceType - 11, // 51: policy.KeyAccessServer.kas_keys:type_name -> policy.SimpleKasKey - 45, // 52: policy.KeyAccessServer.metadata:type_name -> common.Metadata - 46, // 53: policy.Key.is_active:type_name -> google.protobuf.BoolValue - 46, // 54: policy.Key.was_mapped:type_name -> google.protobuf.BoolValue - 29, // 55: policy.Key.public_key:type_name -> policy.KasPublicKey - 27, // 56: policy.Key.kas:type_name -> policy.KeyAccessServer - 45, // 57: policy.Key.metadata:type_name -> common.Metadata - 5, // 58: policy.KasPublicKey.alg:type_name -> policy.KasPublicKeyAlgEnum - 29, // 59: policy.KasPublicKeySet.keys:type_name -> policy.KasPublicKey - 30, // 60: policy.PublicKey.cached:type_name -> policy.KasPublicKeySet - 33, // 61: policy.RegisteredResource.values:type_name -> policy.RegisteredResourceValue - 13, // 62: policy.RegisteredResource.namespace:type_name -> policy.Namespace - 45, // 63: policy.RegisteredResource.metadata:type_name -> common.Metadata - 32, // 64: policy.RegisteredResourceValue.resource:type_name -> policy.RegisteredResource - 44, // 65: policy.RegisteredResourceValue.action_attribute_values:type_name -> policy.RegisteredResourceValue.ActionAttributeValue - 45, // 66: policy.RegisteredResourceValue.metadata:type_name -> common.Metadata - 34, // 67: policy.RequestContext.pep:type_name -> policy.PolicyEnforcementPoint - 13, // 68: policy.Obligation.namespace:type_name -> policy.Namespace - 37, // 69: policy.Obligation.values:type_name -> policy.ObligationValue - 45, // 70: policy.Obligation.metadata:type_name -> common.Metadata - 36, // 71: policy.ObligationValue.obligation:type_name -> policy.Obligation - 38, // 72: policy.ObligationValue.triggers:type_name -> policy.ObligationTrigger - 45, // 73: policy.ObligationValue.metadata:type_name -> common.Metadata - 37, // 74: policy.ObligationTrigger.obligation_value:type_name -> policy.ObligationValue - 16, // 75: policy.ObligationTrigger.action:type_name -> policy.Action - 15, // 76: policy.ObligationTrigger.attribute_value:type_name -> policy.Value - 35, // 77: policy.ObligationTrigger.context:type_name -> policy.RequestContext - 13, // 78: policy.ObligationTrigger.namespace:type_name -> policy.Namespace - 45, // 79: policy.ObligationTrigger.metadata:type_name -> common.Metadata - 42, // 80: policy.KasKey.key:type_name -> policy.AsymmetricKey - 6, // 81: policy.AsymmetricKey.key_algorithm:type_name -> policy.Algorithm - 7, // 82: policy.AsymmetricKey.key_status:type_name -> policy.KeyStatus - 8, // 83: policy.AsymmetricKey.key_mode:type_name -> policy.KeyMode - 40, // 84: policy.AsymmetricKey.public_key_ctx:type_name -> policy.PublicKeyCtx - 41, // 85: policy.AsymmetricKey.private_key_ctx:type_name -> policy.PrivateKeyCtx - 12, // 86: policy.AsymmetricKey.provider_config:type_name -> policy.KeyProviderConfig - 45, // 87: policy.AsymmetricKey.metadata:type_name -> common.Metadata - 7, // 88: policy.SymmetricKey.key_status:type_name -> policy.KeyStatus - 8, // 89: policy.SymmetricKey.key_mode:type_name -> policy.KeyMode - 12, // 90: policy.SymmetricKey.provider_config:type_name -> policy.KeyProviderConfig - 45, // 91: policy.SymmetricKey.metadata:type_name -> common.Metadata - 16, // 92: policy.RegisteredResourceValue.ActionAttributeValue.action:type_name -> policy.Action - 15, // 93: policy.RegisteredResourceValue.ActionAttributeValue.attribute_value:type_name -> policy.Value - 45, // 94: policy.RegisteredResourceValue.ActionAttributeValue.metadata:type_name -> common.Metadata - 95, // [95:95] is the sub-list for method output_type - 95, // [95:95] is the sub-list for method input_type - 95, // [95:95] is the sub-list for extension type_name - 95, // [95:95] is the sub-list for extension extendee - 0, // [0:95] is the sub-list for field type_name + 13, // 49: policy.ResourceMapping.namespace:type_name -> policy.Namespace + 31, // 50: policy.KeyAccessServer.public_key:type_name -> policy.PublicKey + 4, // 51: policy.KeyAccessServer.source_type:type_name -> policy.SourceType + 11, // 52: policy.KeyAccessServer.kas_keys:type_name -> policy.SimpleKasKey + 45, // 53: policy.KeyAccessServer.metadata:type_name -> common.Metadata + 46, // 54: policy.Key.is_active:type_name -> google.protobuf.BoolValue + 46, // 55: policy.Key.was_mapped:type_name -> google.protobuf.BoolValue + 29, // 56: policy.Key.public_key:type_name -> policy.KasPublicKey + 27, // 57: policy.Key.kas:type_name -> policy.KeyAccessServer + 45, // 58: policy.Key.metadata:type_name -> common.Metadata + 5, // 59: policy.KasPublicKey.alg:type_name -> policy.KasPublicKeyAlgEnum + 29, // 60: policy.KasPublicKeySet.keys:type_name -> policy.KasPublicKey + 30, // 61: policy.PublicKey.cached:type_name -> policy.KasPublicKeySet + 33, // 62: policy.RegisteredResource.values:type_name -> policy.RegisteredResourceValue + 13, // 63: policy.RegisteredResource.namespace:type_name -> policy.Namespace + 45, // 64: policy.RegisteredResource.metadata:type_name -> common.Metadata + 32, // 65: policy.RegisteredResourceValue.resource:type_name -> policy.RegisteredResource + 44, // 66: policy.RegisteredResourceValue.action_attribute_values:type_name -> policy.RegisteredResourceValue.ActionAttributeValue + 45, // 67: policy.RegisteredResourceValue.metadata:type_name -> common.Metadata + 34, // 68: policy.RequestContext.pep:type_name -> policy.PolicyEnforcementPoint + 13, // 69: policy.Obligation.namespace:type_name -> policy.Namespace + 37, // 70: policy.Obligation.values:type_name -> policy.ObligationValue + 45, // 71: policy.Obligation.metadata:type_name -> common.Metadata + 36, // 72: policy.ObligationValue.obligation:type_name -> policy.Obligation + 38, // 73: policy.ObligationValue.triggers:type_name -> policy.ObligationTrigger + 45, // 74: policy.ObligationValue.metadata:type_name -> common.Metadata + 37, // 75: policy.ObligationTrigger.obligation_value:type_name -> policy.ObligationValue + 16, // 76: policy.ObligationTrigger.action:type_name -> policy.Action + 15, // 77: policy.ObligationTrigger.attribute_value:type_name -> policy.Value + 35, // 78: policy.ObligationTrigger.context:type_name -> policy.RequestContext + 13, // 79: policy.ObligationTrigger.namespace:type_name -> policy.Namespace + 45, // 80: policy.ObligationTrigger.metadata:type_name -> common.Metadata + 42, // 81: policy.KasKey.key:type_name -> policy.AsymmetricKey + 6, // 82: policy.AsymmetricKey.key_algorithm:type_name -> policy.Algorithm + 7, // 83: policy.AsymmetricKey.key_status:type_name -> policy.KeyStatus + 8, // 84: policy.AsymmetricKey.key_mode:type_name -> policy.KeyMode + 40, // 85: policy.AsymmetricKey.public_key_ctx:type_name -> policy.PublicKeyCtx + 41, // 86: policy.AsymmetricKey.private_key_ctx:type_name -> policy.PrivateKeyCtx + 12, // 87: policy.AsymmetricKey.provider_config:type_name -> policy.KeyProviderConfig + 45, // 88: policy.AsymmetricKey.metadata:type_name -> common.Metadata + 7, // 89: policy.SymmetricKey.key_status:type_name -> policy.KeyStatus + 8, // 90: policy.SymmetricKey.key_mode:type_name -> policy.KeyMode + 12, // 91: policy.SymmetricKey.provider_config:type_name -> policy.KeyProviderConfig + 45, // 92: policy.SymmetricKey.metadata:type_name -> common.Metadata + 16, // 93: policy.RegisteredResourceValue.ActionAttributeValue.action:type_name -> policy.Action + 15, // 94: policy.RegisteredResourceValue.ActionAttributeValue.attribute_value:type_name -> policy.Value + 45, // 95: policy.RegisteredResourceValue.ActionAttributeValue.metadata:type_name -> common.Metadata + 96, // [96:96] is the sub-list for method output_type + 96, // [96:96] is the sub-list for method input_type + 96, // [96:96] is the sub-list for extension type_name + 96, // [96:96] is the sub-list for extension extendee + 0, // [0:96] is the sub-list for field type_name } func init() { file_policy_objects_proto_init() } diff --git a/service/policy/dynamicvaluemapping/dynamic_value_mapping.proto b/service/policy/dynamicvaluemapping/dynamic_value_mapping.proto index a16d3aedd4..5a2242bdb4 100644 --- a/service/policy/dynamicvaluemapping/dynamic_value_mapping.proto +++ b/service/policy/dynamicvaluemapping/dynamic_value_mapping.proto @@ -37,14 +37,21 @@ message DynamicValueMappingsSort { } message ListDynamicValueMappingsRequest { - // Optional - // Namespace ID, or Attribute Definition ID to filter by - string namespace_id = 1 [(buf.validate.field).cel = { - id: "optional_uuid_format" - message: "Optional field must be a valid UUID" - expression: "size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')" - }]; - string attribute_definition_id = 2 [(buf.validate.field).cel = { + // Optional: Namespace ID or FQN to filter by + 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: Attribute Definition ID to filter by + string attribute_definition_id = 3 [(buf.validate.field).cel = { id: "optional_uuid_format" message: "Optional field must be a valid UUID" expression: "size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')" @@ -68,14 +75,16 @@ message CreateDynamicValueMappingRequest { fields: ["attribute_definition_id", "attribute_definition_fqn"] required: true }; - string attribute_definition_id = 1 [(buf.validate.field).cel = { - id: "optional_uuid_format" - message: "Optional field must be a valid UUID" - expression: "size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')" - }]; + // Optional: Namespace ID or FQN to scope the mapping to + option (buf.validate.message).oneof = { + fields: ["namespace_id", "namespace_fqn"] + required: false + }; + + string attribute_definition_id = 1 [(buf.validate.field).string.uuid = true]; string attribute_definition_fqn = 2 [ (buf.validate.field).string = { - min_len: 0 + min_len: 1 uri: true } ]; @@ -103,14 +112,10 @@ message CreateDynamicValueMappingRequest { policy.subjectmapping.SubjectConditionSetCreate new_subject_condition_set = 6; // Optional: namespace ID or FQN for the mapping - string namespace_id = 7 [(buf.validate.field).cel = { - id: "optional_uuid_format" - message: "Optional field must be a valid UUID" - expression: "size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')" - }]; + string namespace_id = 7 [(buf.validate.field).string.uuid = true]; string namespace_fqn = 8 [ (buf.validate.field).string = { - min_len: 0 + min_len: 1 uri: true } ]; From f35eb6ebafdaaefbb43094ee2d2798d33314802e Mon Sep 17 00:00:00 2001 From: Krish Suchak Date: Mon, 15 Jun 2026 13:05:35 -0400 Subject: [PATCH 3/4] feat(policy): DSPX-2754 decompose subject mapping operators (#3335) Split the all-in-one SubjectMappingOperatorEnum into independent axes: ConditionComparisonOperatorEnum (EQUALS/CONTAINS/STARTS_WITH/ENDS_WITH) and ConditionQuantifierEnum (ANY/ALL/NONE), plus a case_insensitive flag on Condition. The legacy operator field is deprecated and retained so the service layer can normalize old payloads for backward compatibility. Apply the same comparison model to DynamicValueResolver (comparison + case_insensitive) and drop the unreleased DynamicValueOperatorEnum. The dynamic match is inherently existential over the selector-resolved entity values, so it carries no quantifier. This also removes the confusing "inversion" wording raised in review. Proto plus regenerated code and docs only. Normalization, evaluation, and cross-field validation land in the service PR #3568. Signed-off-by: Krish Suchak --- docs/grpc/index.html | 6281 ++++++++++------- .../policy/actions/actions.openapi.yaml | 40 +- .../policy/attributes/attributes.openapi.yaml | 40 +- .../dynamic_value_mapping.openapi.yaml | 581 +- docs/openapi/policy/objects.openapi.yaml | 76 +- .../obligations/obligations.openapi.yaml | 40 +- .../registered_resources.openapi.yaml | 40 +- .../resource_mapping.openapi.yaml | 40 +- .../subject_mapping.openapi.yaml | 40 +- .../openapi/policy/unsafe/unsafe.openapi.yaml | 40 +- protocol/go/internal/policy/enums.go | 24 + protocol/go/internal/policy/enums_test.go | 27 + protocol/go/policy/enums.gen.go | 24 + protocol/go/policy/objects.pb.go | 1489 ++-- service/policy/objects.proto | 67 +- 15 files changed, 5124 insertions(+), 3725 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index 3e4b1031dd..123da9884a 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -241,6 +241,14 @@

        Table of Contents

        MConditionGroup +
      • + MDynamicValueMapping +
      • + +
      • + MDynamicValueResolver +
      • +
      • MKasKey
      • @@ -370,6 +378,14 @@

        Table of Contents

        EConditionBooleanTypeEnum +
      • + EConditionComparisonOperatorEnum +
      • + +
      • + EConditionQuantifierEnum +
      • +
      • EKasPublicKeyAlgEnum
      • @@ -1071,6 +1087,200 @@

        Table of Contents

        +
      • + policy/subjectmapping/subject_mapping.proto + +
      • + + +
      • + policy/dynamicvaluemapping/dynamic_value_mapping.proto + +
      • + +
      • policy/kasregistry/key_access_server_registry.proto
      • - + @@ -2674,10 +2754,52 @@

        Condition

        (Subject), evaluated by the operator

        + + + + + + + + + + + + + + + + + + + + +
        Method NameRequest TypeResponse TypeDescription
        ListResourceMappingGroupsListResourceMappingGroupsRequestListResourceMappingGroupsResponseMatchSubjectMappingsMatchSubjectMappingsRequestMatchSubjectMappingsResponse

        Find matching Subject Mappings for a given Subject

        ListSubjectMappingsListSubjectMappingsRequestListSubjectMappingsResponse

        GetResourceMappingGroupGetResourceMappingGroupRequestGetResourceMappingGroupResponseGetSubjectMappingGetSubjectMappingRequestGetSubjectMappingResponse

        CreateResourceMappingGroupCreateResourceMappingGroupRequestCreateResourceMappingGroupResponseCreateSubjectMappingCreateSubjectMappingRequestCreateSubjectMappingResponse

        UpdateResourceMappingGroupUpdateResourceMappingGroupRequestUpdateResourceMappingGroupResponseUpdateSubjectMappingUpdateSubjectMappingRequestUpdateSubjectMappingResponse

        DeleteResourceMappingGroupDeleteResourceMappingGroupRequestDeleteResourceMappingGroupResponseDeleteSubjectMappingDeleteSubjectMappingRequestDeleteSubjectMappingResponse

        ListResourceMappingsListResourceMappingsRequestListResourceMappingsResponseListSubjectConditionSetsListSubjectConditionSetsRequestListSubjectConditionSetsResponse

        ListResourceMappingsByGroupFqnsListResourceMappingsByGroupFqnsRequestListResourceMappingsByGroupFqnsResponseGetSubjectConditionSetGetSubjectConditionSetRequestGetSubjectConditionSetResponse

        GetResourceMappingGetResourceMappingRequestGetResourceMappingResponseCreateSubjectConditionSetCreateSubjectConditionSetRequestCreateSubjectConditionSetResponse

        CreateResourceMappingCreateResourceMappingRequestCreateResourceMappingResponseUpdateSubjectConditionSetUpdateSubjectConditionSetRequestUpdateSubjectConditionSetResponse

        UpdateResourceMappingUpdateResourceMappingRequestUpdateResourceMappingResponseDeleteSubjectConditionSetDeleteSubjectConditionSetRequestDeleteSubjectConditionSetResponse

        DeleteResourceMappingDeleteResourceMappingRequestDeleteResourceMappingResponseDeleteAllUnmappedSubjectConditionSetsDeleteAllUnmappedSubjectConditionSetsRequestDeleteAllUnmappedSubjectConditionSetsResponse

        ListResourceMappingGroups

        NO_SIDE_EFFECTS

        GetResourceMappingGroupListSubjectMappings

        NO_SIDE_EFFECTS

        ListResourceMappingsGetSubjectMapping

        NO_SIDE_EFFECTS

        ListResourceMappingsByGroupFqnsListSubjectConditionSets

        NO_SIDE_EFFECTS

        GetResourceMappingGetSubjectConditionSet

        NO_SIDE_EFFECTS

        operator SubjectMappingOperatorEnum

        the evaluation operator of relation

        Deprecated. Deprecated: use comparison + quantifier (+ case_insensitive) instead. Normalized to the +decomposed fields in the service layer for backward compatibility.

        comparisonConditionComparisonOperatorEnum

        how each selector result is compared to subject_external_values entries

        quantifierConditionQuantifierEnum

        how matches are aggregated across subject_external_values

        case_insensitivebool

        when true, comparison is case-insensitive (default false = case-sensitive)

        + + +

        Fields with deprecated option

        + + + + + + + + + + + + + + + +
        NameOption
        operator

        true

        + + @@ -2712,8 +2834,8 @@

        ConditionGroup

        -

        KasKey

        -

        +

        DynamicValueMapping

        +

        Dynamic Value Mapping: a Policy assigning permitted action(s) to

        dynamically-requested values under an Attribute Definition. It raises entitlement

        authority from a concrete Attribute Value to the Attribute Definition: at decision time

        the value_resolver compares the requested resource value segment against the entity

        representation, avoiding pre-provisioning a value + subject mapping per discrete value.

        @@ -2723,22 +2845,52 @@

        KasKey

        - + - - + + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2750,8 +2902,8 @@

        KasKey

        -

        KasPublicKey

        -

        Deprecated

        A KAS public key and some associated metadata for further identifcation

        +

        DynamicValueResolver

        +

        Dynamic Value Resolver: the dynamic half of a DynamicValueMapping. It resolves a selector

        against the entity representation, then tests whether any resolved entity value matches the

        requested resource value segment under comparison. The match is inherently existential over

        the resolved entity values, so no quantifier is carried here.

        kas_idid string

        keyAsymmetricKeyattribute_definitionAttribute

        the Attribute Definition whose values are entitled dynamically

        kas_uristringvalue_resolverDynamicValueResolver

        the dynamic resolver matched against the requested resource value segment

        subject_condition_setSubjectConditionSet

        optional static pre-gate on the entity, evaluated with normal SubjectConditionSet +semantics (no dynamic overload). When present, both the gate and the resolver must +pass for entitlement.

        actionsActionrepeated

        the actions permitted by subjects in this mapping

        namespaceNamespace

        the namespace containing this mapping

        metadatacommon.Metadata

        @@ -2761,26 +2913,26 @@

        KasPublicKey

        - + - + - - + + - + - - + + - + @@ -2790,8 +2942,8 @@

        KasPublicKey

        -

        KasPublicKeySet

        -

        Deprecated

        A list of known KAS public keys

        +

        KasKey

        +

        pemsubject_external_selector_value string

        x509 ASN.1 content in PEM envelope, usually

        a selector for a field value on a flattened Entity Representation (such as from +idP/LDAP), e.g. ".patientAssignments[]"

        kidstringcomparisonConditionComparisonOperatorEnum

        A unique string identifier for this key

        how the requested resource value segment is compared against each value the selector +resolves from the entity representation

        algKasPublicKeyAlgEnumcase_insensitivebool

        A known algorithm type with any additional parameters encoded. -To start, these may be `rsa:2048` for RSA-based wrapping and -`ec:secp256r1` for EC-based wrapping, but more formats may be added as needed.

        when true, comparison is case-insensitive (default false = case-sensitive)

        @@ -2801,9 +2953,23 @@

        KasPublicKeySet

        - - - + + + + + + + + + + + + + + + + + @@ -2814,8 +2980,8 @@

        KasPublicKeySet

        -

        Key

        -

        +

        KasPublicKey

        +

        Deprecated

        A KAS public key and some associated metadata for further identifcation

        keysKasPublicKeyrepeatedkas_idstring

        keyAsymmetricKey

        kas_uristring

        @@ -2825,14 +2991,78 @@

        Key

        - + - + - + + + + + + + + + + + + + + +
        idpem string

        the database record ID, not the key ID (`kid`)

        x509 ASN.1 content in PEM envelope, usually

        is_activekidstring

        A unique string identifier for this key

        algKasPublicKeyAlgEnum

        A known algorithm type with any additional parameters encoded. +To start, these may be `rsa:2048` for RSA-based wrapping and +`ec:secp256r1` for EC-based wrapping, but more formats may be added as needed.

        + + + + + +

        KasPublicKeySet

        +

        Deprecated

        A list of known KAS public keys

        + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        keysKasPublicKeyrepeated

        + + + + + +

        Key

        +

        + + + + + + + + + + + + + + + + + @@ -4214,6 +4444,82 @@

        ConditionBooleanTypeEnum

        FieldTypeLabelDescription
        idstring

        the database record ID, not the key ID (`kid`)

        is_active google.protobuf.BoolValue

        +

        ConditionComparisonOperatorEnum

        +

        How a selector result is compared against a comparison value. Replaces the all-in-one

        SubjectMappingOperatorEnum by separating the comparison from the quantifier (see

        ConditionQuantifierEnum) and case sensitivity.

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NameNumberDescription
        CONDITION_COMPARISON_OPERATOR_ENUM_UNSPECIFIED0

        CONDITION_COMPARISON_OPERATOR_ENUM_EQUALS1

        exact string equality

        CONDITION_COMPARISON_OPERATOR_ENUM_CONTAINS2

        substring containment

        CONDITION_COMPARISON_OPERATOR_ENUM_STARTS_WITH3

        prefix match

        CONDITION_COMPARISON_OPERATOR_ENUM_ENDS_WITH4

        suffix match; the safe operator for domain matching (e.g. email domains)

        + +

        ConditionQuantifierEnum

        +

        How matches are aggregated across the comparison set (subject_external_values).

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NameNumberDescription
        CONDITION_QUANTIFIER_ENUM_UNSPECIFIED0

        CONDITION_QUANTIFIER_ENUM_ANY1

        at least one match (legacy IN behavior)

        CONDITION_QUANTIFIER_ENUM_ALL2

        every expected value matches

        CONDITION_QUANTIFIER_ENUM_NONE3

        no matches (legacy NOT_IN behavior)

        +

        KasPublicKeyAlgEnum

        @@ -9589,12 +9895,12 @@

        Methods with idempotency_level option

        -

        policy/kasregistry/key_access_server_registry.proto

        Top +

        policy/subjectmapping/subject_mapping.proto

        Top

        -

        ActivatePublicKeyRequest

        +

        CreateSubjectConditionSetRequest

        @@ -9605,7 +9911,21 @@

        ActivatePublicKeyRequest

        - + + + + + + + + + + + + + + + @@ -9618,7 +9938,7 @@

        ActivatePublicKeyRequestActivatePublicKeyResponse

        +

        CreateSubjectConditionSetResponse

        @@ -9629,8 +9949,8 @@

        ActivatePublicKeyResponse<

        - - + + @@ -9642,8 +9962,8 @@

        ActivatePublicKeyResponse< -

        ChangeMappings

        -

        Simplified information about the resources that were rotated as part of the key rotation process.

        +

        CreateSubjectMappingRequest

        +

        idsubject_condition_setSubjectConditionSetCreate

        namespace_idstring

        namespace_fqn string

        keypolicy.Keysubject_condition_setpolicy.SubjectConditionSet

        @@ -9653,69 +9973,56 @@

        ChangeMappings

        - + - + - - - - + + + + - -
        idattribute_value_id string

        Required +Attribute Value to be mapped to

        fqnstring

        actionspolicy.Actionrepeated

        Required +The actions permitted by subjects in this mapping

        - - - - - -

        CreateKeyAccessServerRequest

        -

        - - - - - - - - - + - + - - + + - + - - + + - + - + - + - + @@ -9725,7 +10032,7 @@

        CreateKeyAccessServerRe -

        CreateKeyAccessServerResponse

        +

        CreateSubjectMappingResponse

        @@ -9736,8 +10043,8 @@

        CreateKeyAccessServerR

        - - + + @@ -9749,8 +10056,15 @@

        CreateKeyAccessServerR -

        CreateKeyRequest

        -

        Create a new asymmetric key for the specified Key Access Server (KAS)

        +

        DeleteAllUnmappedSubjectConditionSetsRequest

        +

        Prune any Subject Condition Sets not utilized within a Subject Mapping

        + + + + + +

        DeleteAllUnmappedSubjectConditionSetsResponse

        +

        FieldTypeLabelDescription
        uriexisting_subject_condition_set_id string

        Required

        Either of the following: +Reuse existing SubjectConditionSet (NOTE: prioritized over new_subject_condition_set)

        public_keypolicy.PublicKeynew_subject_condition_setSubjectConditionSetCreate

        Deprecated

        Create new SubjectConditionSet (NOTE: ignored if existing_subject_condition_set_id is provided)

        source_typepolicy.SourceTypenamespace_idstring

        Optional

        Optional +Namespace ID or FQN for the subject mapping

        namenamespace_fqn string

        Optional

        metadata common.MetadataMutable

        Common metadata

        Optional

        key_access_serverpolicy.KeyAccessServersubject_mappingpolicy.SubjectMapping

        @@ -9760,84 +10074,34 @@

        CreateKeyRequest

        - - - - + + + + + +
        kas_idstring

        Required - -The unique identifier of the Key Access Server

        subject_condition_setspolicy.SubjectConditionSetrepeated

        Only IDs of any deleted Subject Condition Set provided

        + + + + + +

        DeleteSubjectConditionSetRequest

        +

        + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -9847,8 +10111,8 @@

        CreateKeyRequest

        -

        CreateKeyResponse

        -

        Response to a CreateKeyRequest, containing the created asymmetric key

        +

        DeleteSubjectConditionSetResponse

        +

        FieldTypeLabelDescription
        key_idid string

        Required - -A user-defined identifier for the key

        key_algorithmpolicy.Algorithm

        Required - -The algorithm to be used for the key

        key_modepolicy.KeyMode

        Required - -The mode of the key (e.g., local or external)

        public_key_ctxpolicy.PublicKeyCtx

        Required - -Context or additional data specific to the public key, based on the key provider implementation

        private_key_ctxpolicy.PrivateKeyCtx

        Conditionally Required - -Context or additional data specific to the private key, based on the key provider implementation

        provider_config_idstring

        Optional - -Configuration ID for the key provider, if applicable

        legacybool

        Optional - -Whether the key is a legacy key

        metadatacommon.MetadataMutable

        Common metadata - -Mutable metadata for the key

        Required

        @@ -9858,10 +10122,10 @@

        CreateKeyResponse

        - - + + - + @@ -9871,7 +10135,7 @@

        CreateKeyResponse

        -

        CreatePublicKeyRequest

        +

        DeleteSubjectMappingRequest

        @@ -9882,26 +10146,12 @@

        CreatePublicKeyRequest

        - + - - - - - - - - - - - - - -
        kas_keypolicy.KasKeysubject_condition_setpolicy.SubjectConditionSet

        The created asymmetric key for a KAS.

        Only ID of deleted Subject Condition Set provided

        kas_idid string

        Required

        keypolicy.KasPublicKey

        Required

        metadatacommon.MetadataMutable

        Common metadata

        @@ -9909,7 +10159,7 @@

        CreatePublicKeyRequest

        -

        CreatePublicKeyResponse

        +

        DeleteSubjectMappingResponse

        @@ -9920,10 +10170,10 @@

        CreatePublicKeyResponse

        - key - policy.Key + subject_mapping + policy.SubjectMapping -

        +

        Only ID of the updated Subject Mapping provided

        @@ -9933,7 +10183,7 @@

        CreatePublicKeyResponse

        -

        DeactivatePublicKeyRequest

        +

        GetSubjectConditionSetRequest

        @@ -9947,7 +10197,7 @@

        DeactivatePublicKeyReques id string -

        +

        Required

        @@ -9957,7 +10207,7 @@

        DeactivatePublicKeyReques -

        DeactivatePublicKeyResponse

        +

        GetSubjectConditionSetResponse

        @@ -9968,12 +10218,19 @@

        DeactivatePublicKeyRespo - key - policy.Key + subject_condition_set + policy.SubjectConditionSet

        + + associated_subject_mappings + policy.SubjectMapping + repeated +

        contextualized Subject Mappings associated with this SubjectConditionSet

        + + @@ -9981,7 +10238,7 @@

        DeactivatePublicKeyRespo -

        DeleteKeyAccessServerRequest

        +

        GetSubjectMappingRequest

        @@ -10005,7 +10262,7 @@

        DeleteKeyAccessServerRe -

        DeleteKeyAccessServerResponse

        +

        GetSubjectMappingResponse

        @@ -10016,8 +10273,8 @@

        DeleteKeyAccessServerR - key_access_server - policy.KeyAccessServer + subject_mapping + policy.SubjectMapping

        @@ -10029,14 +10286,7 @@

        DeleteKeyAccessServerR -

        GetBaseKeyRequest

        -

        - - - - - -

        GetBaseKeyResponse

        +

        ListSubjectConditionSetsRequest

        @@ -10047,86 +10297,52 @@

        GetBaseKeyResponse

        - base_key - policy.SimpleKasKey + namespace_id + string -

        The current base key

        +

        - - - - - - - -

        GetKeyAccessServerRequest

        -

        - - - - - - - - - + - + - - + + - + - - - - + + + + - - + + - +
        FieldTypeLabelDescription
        idnamespace_fqn string

        Deprecated. Deprecated

        kas_idstringpaginationpolicy.PageRequest

        option (buf.validate.oneof).required = true; // TODO: enable this when we remove the deprecated field

        Optional

        namestring

        sortSubjectConditionSetsSortrepeated

        Optional - CONSTRAINT: max 1 item +Sort defaults: + - direction UNSPECIFIED defaults to DESC for the specified field + - field UNSPECIFIED defaults to created_at with the specified direction + - both UNSPECIFIED or sort omitted defaults to created_at DESC

        uristringsearchpolicy.Search

        Optional

        - - -

        Fields with deprecated option

        - - - - - - - - - - - - - - - -
        NameOption
        id

        true

        - - -

        GetKeyAccessServerResponse

        +

        ListSubjectConditionSetsResponse

        @@ -10137,8 +10353,15 @@

        GetKeyAccessServerRespons - key_access_server - policy.KeyAccessServer + subject_condition_sets + policy.SubjectConditionSet + repeated +

        + + + + pagination + policy.PageResponse

        @@ -10150,8 +10373,8 @@

        GetKeyAccessServerRespons -

        GetKeyRequest

        -

        Retrieve an existing asymmetric key from the Key Management System

        +

        ListSubjectMappingsRequest

        +

        @@ -10161,19 +10384,44 @@

        GetKeyRequest

        - + - + - - + + + + + + + + + + + + + + + + + + + + + + +
        idnamespace_id string

        The unique identifier of the key to retrieve

        keyKasKeyIdentifiernamespace_fqnstring

        paginationpolicy.PageRequest

        Optional

        sortSubjectMappingsSortrepeated

        Optional - CONSTRAINT: max 1 item +Sort defaults: + - direction UNSPECIFIED defaults to DESC for the specified field + - field UNSPECIFIED defaults to created_at with the specified direction + - both UNSPECIFIED or sort omitted defaults to created_at DESC

        searchpolicy.Search

        Optional

        @@ -10181,8 +10429,8 @@

        GetKeyRequest

        -

        GetKeyResponse

        -

        Response to a GetKeyRequest, containing the requested asymmetric key

        +

        ListSubjectMappingsResponse

        +

        @@ -10192,10 +10440,17 @@

        GetKeyResponse

        - - + + + + + + + + + - + @@ -10205,8 +10460,8 @@

        GetKeyResponse

        -

        GetPublicKeyRequest

        -

        +

        MatchSubjectMappingsRequest

        +

        MatchSubjectMappingsRequest liberally returns a list of SubjectMappings based on the provided SubjectProperties.

        The SubjectMappings are returned if an external selector field matches.

        kas_keypolicy.KasKeysubject_mappingspolicy.SubjectMappingrepeated

        paginationpolicy.PageResponse

        The requested asymmetric key for a KAS.

        @@ -10216,9 +10471,9 @@

        GetPublicKeyRequest

        - - - + + + @@ -10229,7 +10484,7 @@

        GetPublicKeyRequest

        -

        GetPublicKeyResponse

        +

        MatchSubjectMappingsResponse

        @@ -10240,9 +10495,9 @@

        GetPublicKeyResponse

        - - - + + + @@ -10253,8 +10508,8 @@

        GetPublicKeyResponse

        -

        GrantedPolicyObject

        -

        Can be namespace, attribute definition, or value

        +

        SubjectConditionSetCreate

        +

        idstringsubject_propertiespolicy.SubjectPropertyrepeated

        keypolicy.Keysubject_mappingspolicy.SubjectMappingrepeated

        @@ -10264,17 +10519,18 @@

        GrantedPolicyObject

        - - - - + + + + - - + + - + @@ -10284,8 +10540,8 @@

        GrantedPolicyObject

        -

        KasKeyIdentifier

        -

        Nested message for specifying the active key using KAS ID and Key ID

        +

        SubjectConditionSetsSort

        +

        idstring

        subject_setspolicy.SubjectSetrepeated

        Required

        fqnstringmetadatacommon.MetadataMutable

        Optional +Common metadata

        @@ -10295,33 +10551,19 @@

        KasKeyIdentifier

        - - - - - - - - - + + - - + + - - - - - - -
        kas_idstring

        namestringfieldSortSubjectConditionSetsType

        uristringdirectionpolicy.SortDirection

        kidstring

        Required Key ID of the key in question

        @@ -10329,7 +10571,7 @@

        KasKeyIdentifier

        -

        KasKeysSort

        +

        SubjectMappingsSort

        @@ -10341,7 +10583,7 @@

        KasKeysSort

        field - SortKasKeysType + SortSubjectMappingsType

        @@ -10360,8 +10602,8 @@

        KasKeysSort

        -

        KeyAccessServerGrants

        -

        Deprecated

        +

        UpdateSubjectConditionSetRequest

        +

        @@ -10371,30 +10613,31 @@

        KeyAccessServerGrants

        - - + + - + - - + + - + - - - - + + + + - - - + + + @@ -10405,7 +10648,7 @@

        KeyAccessServerGrants

        -

        KeyAccessServersSort

        +

        UpdateSubjectConditionSetResponse

        @@ -10416,17 +10659,10 @@

        KeyAccessServersSort

        - - - - - - - - - + + - + @@ -10436,7 +10672,7 @@

        KeyAccessServersSort

        -

        KeyMapping

        +

        UpdateSubjectMappingRequest

        @@ -10447,92 +10683,40 @@

        KeyMapping

        - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + - -
        key_access_serverpolicy.KeyAccessServeridstring

        Required

        namespace_grantsGrantedPolicyObjectsubject_setspolicy.SubjectSet repeated

        Optional +If provided, replaces entire existing structure of Subject Sets, Condition Groups, & Conditions

        attribute_grantsGrantedPolicyObjectrepeated

        metadatacommon.MetadataMutable

        Common metadata

        value_grantsGrantedPolicyObjectrepeatedmetadata_update_behaviorcommon.MetadataUpdateEnum

        fieldSortKeyAccessServersType

        directionpolicy.SortDirectionsubject_condition_setpolicy.SubjectConditionSet

        Only ID of updated Subject Condition Set provided

        kidstring

        kas_uriid string

        namespace_mappingsMappedPolicyObjectrepeated

        List of namespaces mapped to the key

        attribute_mappingsMappedPolicyObjectrepeated

        List of attribute definitions mapped to the key

        value_mappingsMappedPolicyObjectrepeated

        List of attribute values mapped to the key

        Required

        - - - - - -

        ListKeyAccessServerGrantsRequest

        -

        LIST of KAS Grants returns flat response of grants to all policy objects. It

        does not employ selectors for grants to specific policy objects or build the

        attribute tree relation. If grants to a known namespace, attribute, or value

        are needed, use the respective GET request to the specific policy object.

        - - - - - - - - - + +Replaces the existing SubjectConditionSet id with a new one

        - - - + + + +Replaces entire list of actions permitted by subjects

        - - + + - + - - + + - + @@ -10542,8 +10726,8 @@

        ListKeyAccessServer -

        ListKeyAccessServerGrantsResponse

        -

        Deprecated

        +

        UpdateSubjectMappingResponse

        +

        FieldTypeLabelDescription
        kas_idsubject_condition_set_id string

        Optional -Filter LIST by ID of a registered Key Access Server. -If neither is provided, grants from all registered KASs to policy attribute -objects are returned.

        kas_uristringactionspolicy.Actionrepeated

        Optional -Filter LIST by URI of a registered Key Access Server. -If none is provided, grants from all registered KASs to policy attribute -objects are returned.

        kas_namestringmetadatacommon.MetadataMutable

        Optional -Filter LIST by name of a registered Key Access Server. -If none are provided, grants from all registered KASs to policy attribute -objects are returned.

        Common metadata

        paginationpolicy.PageRequestmetadata_update_behaviorcommon.MetadataUpdateEnum

        Optional

        @@ -10553,78 +10737,292 @@

        ListKeyAccessServe

        - - - - - - - - - + + - +
        grantsKeyAccessServerGrantsrepeated

        Deprecated.

        paginationpolicy.PageResponsesubject_mappingpolicy.SubjectMapping

        Only ID of the updated Subject Mapping provided

        - - -

        Fields with deprecated option

        - - - - - - - - - - - - - - - -
        NameOption
        grants

        true

        - - -

        ListKeyAccessServersRequest

        -

        - - - - - + +

        SortSubjectConditionSetsType

        +

        +
        FieldTypeLabelDescription
        + + + + + + + + + + + + + + + + + + + + + + + + +
        NameNumberDescription
        SORT_SUBJECT_CONDITION_SETS_TYPE_UNSPECIFIED0

        SORT_SUBJECT_CONDITION_SETS_TYPE_CREATED_AT1

        SORT_SUBJECT_CONDITION_SETS_TYPE_UPDATED_AT2

        + +

        SortSubjectMappingsType

        +

        + + + + + + + + + + + + + + + + + + + + + + + + + +
        NameNumberDescription
        SORT_SUBJECT_MAPPINGS_TYPE_UNSPECIFIED0

        SORT_SUBJECT_MAPPINGS_TYPE_CREATED_AT1

        SORT_SUBJECT_MAPPINGS_TYPE_UPDATED_AT2

        + + + + + +

        SubjectMappingService

        +

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Method NameRequest TypeResponse TypeDescription
        MatchSubjectMappingsMatchSubjectMappingsRequestMatchSubjectMappingsResponse

        Find matching Subject Mappings for a given Subject

        ListSubjectMappingsListSubjectMappingsRequestListSubjectMappingsResponse

        GetSubjectMappingGetSubjectMappingRequestGetSubjectMappingResponse

        CreateSubjectMappingCreateSubjectMappingRequestCreateSubjectMappingResponse

        UpdateSubjectMappingUpdateSubjectMappingRequestUpdateSubjectMappingResponse

        DeleteSubjectMappingDeleteSubjectMappingRequestDeleteSubjectMappingResponse

        ListSubjectConditionSetsListSubjectConditionSetsRequestListSubjectConditionSetsResponse

        GetSubjectConditionSetGetSubjectConditionSetRequestGetSubjectConditionSetResponse

        CreateSubjectConditionSetCreateSubjectConditionSetRequestCreateSubjectConditionSetResponse

        UpdateSubjectConditionSetUpdateSubjectConditionSetRequestUpdateSubjectConditionSetResponse

        DeleteSubjectConditionSetDeleteSubjectConditionSetRequestDeleteSubjectConditionSetResponse

        DeleteAllUnmappedSubjectConditionSetsDeleteAllUnmappedSubjectConditionSetsRequestDeleteAllUnmappedSubjectConditionSetsResponse

        + + + + +

        Methods with idempotency_level option

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Method NameOption
        ListSubjectMappings

        NO_SIDE_EFFECTS

        GetSubjectMapping

        NO_SIDE_EFFECTS

        ListSubjectConditionSets

        NO_SIDE_EFFECTS

        GetSubjectConditionSet

        NO_SIDE_EFFECTS

        + + + + +
        +

        policy/dynamicvaluemapping/dynamic_value_mapping.proto

        Top +
        +

        + + +

        CreateDynamicValueMappingRequest

        +

        + + + + + + - - + + - + - - + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + @@ -10636,7 +11034,7 @@

        ListKeyAccessServersRequ -

        ListKeyAccessServersResponse

        +

        CreateDynamicValueMappingResponse

        @@ -10647,15 +11045,8 @@

        ListKeyAccessServersRes

        - - - - - - - - - + + @@ -10667,7 +11058,7 @@

        ListKeyAccessServersRes -

        ListKeyMappingsRequest

        +

        DeleteDynamicValueMappingRequest

        @@ -10681,21 +11072,31 @@

        ListKeyMappingsRequest

        - + - - - - - - + +
        FieldTypeLabelDescription
        paginationpolicy.PageRequestattribute_definition_idstring

        Optional

        sortKeyAccessServersSortattribute_definition_fqnstring

        value_resolverpolicy.DynamicValueResolver

        Required: the dynamic resolver comparing entity selector result to the resource value segment

        actionspolicy.Action repeated

        Optional - CONSTRAINT: max 1 item -Sort defaults: - - direction UNSPECIFIED defaults to DESC for the specified field - - field UNSPECIFIED defaults to created_at with the specified direction - - both UNSPECIFIED or sort omitted defaults to created_at DESC

        Required: actions permitted on a matched value

        existing_subject_condition_set_idstring

        Optional static pre-gate. Reuse an existing SubjectConditionSet (prioritized) ...

        new_subject_condition_setpolicy.subjectmapping.SubjectConditionSetCreate

        ... or create a new one (ignored if existing_subject_condition_set_id is provided)

        namespace_idstring

        Optional: namespace ID or FQN for the mapping

        namespace_fqnstring

        searchpolicy.Searchmetadatacommon.MetadataMutable

        Optional

        key_access_serverspolicy.KeyAccessServerrepeated

        paginationpolicy.PageResponsedynamic_value_mappingpolicy.DynamicValueMapping

        id string

        The unique identifier of the key to retrieve

        Required

        keyKasKeyIdentifier

        + + + + + +

        DeleteDynamicValueMappingResponse

        +

        + + + + + + + - - + + - + @@ -10705,7 +11106,7 @@

        ListKeyMappingsRequest

        -

        ListKeyMappingsResponse

        +

        DynamicValueMappingsSort

        @@ -10716,17 +11117,17 @@

        ListKeyMappingsResponse

        - - - - + + + + - - + + - + @@ -10736,8 +11137,8 @@

        ListKeyMappingsResponse

        -

        ListKeysRequest

        -

        List all asymmetric keys managed by a specific Key Access Server or with a given algorithm

        +

        GetDynamicValueMappingRequest

        +

        FieldTypeLabelDescription
        paginationpolicy.PageRequestdynamic_value_mappingpolicy.DynamicValueMapping

        Pagination request for the list of keys

        Only ID of the deleted mapping provided

        key_mappingsKeyMappingrepeated

        The list of key mappings

        fieldSortDynamicValueMappingsType

        paginationpolicy.PageResponsedirectionpolicy.SortDirection

        Pagination response for the list of keys

        @@ -10747,67 +11148,86 @@

        ListKeysRequest

        - - + + - + + +
        key_algorithmpolicy.Algorithmidstring

        Filter keys by algorithm

        Required

        + + + + + +

        GetDynamicValueMappingResponse

        +

        + + + + + + + + - - + + - + + +
        FieldTypeLabelDescription
        kas_idstringdynamic_value_mappingpolicy.DynamicValueMapping

        Filter keys by the KAS ID

        + + + + + +

        ListDynamicValueMappingsRequest

        +

        + + + + + + + + - + - + - + - + - - - - + + + + - + - + - - - - - - - - + @@ -10817,8 +11237,8 @@

        ListKeysRequest

        -

        ListKeysResponse

        -

        Response to a ListKeysRequest, containing the list of asymmetric keys and pagination information

        +

        ListDynamicValueMappingsResponse

        +

        FieldTypeLabelDescription
        kas_namenamespace_id string

        Filter keys by the KAS name

        kas_urinamespace_fqn string

        Filter keys by the KAS URI

        legacybooloptional

        Optional - -Filter for legacy keys

        attribute_definition_idstring

        Optional: Attribute Definition ID to filter by

        pagination policy.PageRequest

        Optional - -Pagination request for the list of keys

        Optional

        sortKasKeysSortDynamicValueMappingsSort repeated

        Optional - CONSTRAINT: max 1 item -Sort defaults: - - direction UNSPECIFIED defaults to DESC for the specified field - - field UNSPECIFIED defaults to created_at with the specified direction - - both UNSPECIFIED or sort omitted defaults to created_at DESC

        searchpolicy.Search

        Optional

        Optional - CONSTRAINT: max 1 item

        @@ -10828,17 +11248,17 @@

        ListKeysResponse

        - - + + - + - + @@ -10848,7 +11268,7 @@

        ListKeysResponse

        -

        ListPublicKeyMappingRequest

        +

        UpdateDynamicValueMappingRequest

        @@ -10859,38 +11279,45 @@

        ListPublicKeyMappingRequ

        - + - + - - + + - + - + - + - - + + + + + + + + + - + - - + + - + @@ -10900,7 +11327,7 @@

        ListPublicKeyMappingRequ -

        ListPublicKeyMappingResponse

        +

        UpdateDynamicValueMappingResponse

        @@ -10911,27 +11338,136 @@

        ListPublicKeyMappingRes

        - - - - - - - - - + +
        kas_keyspolicy.KasKeydynamic_value_mappingspolicy.DynamicValueMapping repeated

        The list of kas keys

        pagination policy.PageResponse

        Pagination response for the list of keys

        kas_idid string

        Optional

        Required

        kas_namestringvalue_resolverpolicy.DynamicValueResolver

        Optional

        Optional: replace the dynamic resolver

        kas_urisubject_condition_set_id string

        Optional

        Optional: replace the static pre-gate SubjectConditionSet by id

        public_key_idstringactionspolicy.Actionrepeated

        Optional: replace the entire list of actions

        metadatacommon.MetadataMutable

        Optional Public Key ID

        Common metadata

        paginationpolicy.PageRequestmetadata_update_behaviorcommon.MetadataUpdateEnum

        Optional

        public_key_mappingsListPublicKeyMappingResponse.PublicKeyMappingrepeated

        paginationpolicy.PageResponsedynamic_value_mappingpolicy.DynamicValueMapping

        - + + + + + + + +

        SortDynamicValueMappingsType

        +

        + + + + + + + + + + + + + + + + + + + + + + + + + +
        NameNumberDescription
        SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_UNSPECIFIED0

        SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_CREATED_AT1

        SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_UPDATED_AT2

        + + + + + +

        DynamicValueMappingService

        +

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Method NameRequest TypeResponse TypeDescription
        ListDynamicValueMappingsListDynamicValueMappingsRequestListDynamicValueMappingsResponse

        GetDynamicValueMappingGetDynamicValueMappingRequestGetDynamicValueMappingResponse

        CreateDynamicValueMappingCreateDynamicValueMappingRequestCreateDynamicValueMappingResponse

        UpdateDynamicValueMappingUpdateDynamicValueMappingRequestUpdateDynamicValueMappingResponse

        DeleteDynamicValueMappingDeleteDynamicValueMappingRequestDeleteDynamicValueMappingResponse

        + + + + +

        Methods with idempotency_level option

        + + + + + + + + + + + + + + + + + + + + +
        Method NameOption
        ListDynamicValueMappings

        NO_SIDE_EFFECTS

        GetDynamicValueMapping

        NO_SIDE_EFFECTS

        - + -

        ListPublicKeyMappingResponse.Association

        +
        +

        policy/kasregistry/key_access_server_registry.proto

        Top +
        +

        + + +

        ActivatePublicKeyRequest

        @@ -10948,13 +11484,6 @@

        ListPublicK

        - - fqn - string - -

        - - @@ -10962,7 +11491,7 @@

        ListPublicK -

        ListPublicKeyMappingResponse.PublicKey

        +

        ActivatePublicKeyResponse

        @@ -10979,27 +11508,6 @@

        ListPublicKey

        - - values - ListPublicKeyMappingResponse.Association - repeated -

        - - - - definitions - ListPublicKeyMappingResponse.Association - repeated -

        - - - - namespaces - ListPublicKeyMappingResponse.Association - repeated -

        - - @@ -11007,8 +11515,8 @@

        ListPublicKey -

        ListPublicKeyMappingResponse.PublicKeyMapping

        -

        +

        ChangeMappings

        +

        Simplified information about the resources that were rotated as part of the key rotation process.

        @@ -11018,33 +11526,19 @@

        ListPu

        - - - - - - - - + - + - - - - - - -
        kas_idstring

        kas_nameid string

        kas_urifqn string

        public_keysListPublicKeyMappingResponse.PublicKeyrepeated

        @@ -11052,7 +11546,7 @@

        ListPu -

        ListPublicKeysRequest

        +

        CreateKeyAccessServerRequest

        @@ -11063,31 +11557,38 @@

        ListPublicKeysRequest

        - kas_id + uri string -

        Optional

        +

        Required

        - kas_name - string + public_key + policy.PublicKey + +

        Deprecated

        + + + + source_type + policy.SourceType

        Optional

        - kas_uri + name string

        Optional

        - pagination - policy.PageRequest + metadata + common.MetadataMutable -

        Optional

        +

        Common metadata

        @@ -11097,7 +11598,7 @@

        ListPublicKeysRequest

        -

        ListPublicKeysResponse

        +

        CreateKeyAccessServerResponse

        @@ -11108,15 +11609,8 @@

        ListPublicKeysResponse

        - keys - policy.Key - repeated -

        - - - - pagination - policy.PageResponse + key_access_server + policy.KeyAccessServer

        @@ -11128,8 +11622,8 @@

        ListPublicKeysResponse

        -

        MappedPolicyObject

        -

        +

        CreateKeyRequest

        +

        Create a new asymmetric key for the specified Key Access Server (KAS)

        @@ -11139,55 +11633,84 @@

        MappedPolicyObject

        - + - + - + - + - -
        idkas_id string

        The unique identifier of the policy object

        Required + +The unique identifier of the Key Access Server

        fqnkey_id string

        The fully qualified name of the policy object

        Required + +A user-defined identifier for the key

        + + key_algorithm + policy.Algorithm + +

        Required - +The algorithm to be used for the key

        + + + + key_mode + policy.KeyMode + +

        Required - - -

        RotateKeyRequest

        -

        +The mode of the key (e.g., local or external)

        + + + + public_key_ctx + policy.PublicKeyCtx + +

        Required - - - - - - +Context or additional data specific to the public key, based on the key provider implementation

        + - + + + + + + + + - + - - + + - + - - + + - + @@ -11197,8 +11720,8 @@

        RotateKeyRequest

        -

        RotateKeyRequest.NewKey

        -

        Nested message for specifying the new key details

        +

        CreateKeyResponse

        +

        Response to a CreateKeyRequest, containing the created asymmetric key

        FieldTypeLabelDescription
        idprivate_key_ctxpolicy.PrivateKeyCtx

        Conditionally Required + +Context or additional data specific to the private key, based on the key provider implementation

        provider_config_id string

        Current Active Key UUID

        Optional + +Configuration ID for the key provider, if applicable

        keyKasKeyIdentifierlegacybool

        Alternative way to specify the active key using KAS ID and Key ID

        Optional + +Whether the key is a legacy key

        new_keyRotateKeyRequest.NewKeymetadatacommon.MetadataMutable

        Information about the new key to be rotated in

        Common metadata + +Mutable metadata for the key

        @@ -11208,54 +11731,48 @@

        RotateKeyRequest.NewKey

        - - - - - - - - - - - - - - - - + + - + - - - - - - + +
        key_idstring

        Required

        algorithmpolicy.Algorithm

        Required

        key_modepolicy.KeyModekas_keypolicy.KasKey

        Required

        The created asymmetric key for a KAS.

        public_key_ctxpolicy.PublicKeyCtx

        Required

        + + + + + +

        CreatePublicKeyRequest

        +

        + + + + + + + - - + + - - - - + + + + - + @@ -11265,8 +11782,8 @@

        RotateKeyRequest.NewKey

        -

        RotateKeyResponse

        -

        Response message for the RotateKey request

        +

        CreatePublicKeyResponse

        +

        FieldTypeLabelDescription
        private_key_ctxpolicy.PrivateKeyCtxkas_idstring

        Required

        provider_config_idstring

        Conditionally Required. - -Validation handled by message-level CEL

        keypolicy.KasPublicKey

        Required

        metadata common.MetadataMutable

        Common metadata fields

        Common metadata

        @@ -11276,17 +11793,10 @@

        RotateKeyResponse

        - - - - - - - - - + + - + @@ -11296,8 +11806,8 @@

        RotateKeyResponse

        -

        RotatedResources

        -

        All resources that were rotated as part of the key rotation process

        +

        DeactivatePublicKeyRequest

        +

        kas_keypolicy.KasKey

        The newly rotated Kas Key

        rotated_resourcesRotatedResourceskeypolicy.Key

        All resources that were rotated as part of the key rotation process

        @@ -11307,30 +11817,33 @@

        RotatedResources

        - - + + - - - - - - - - - - - - - + +
        rotated_out_keypolicy.KasKeyidstring

        The old key that was rotated out

        attribute_definition_mappingsChangeMappingsrepeated

        attribute_value_mappingsChangeMappingsrepeated

        + + + + + +

        DeactivatePublicKeyResponse

        +

        + + + + + + + - - - + + + @@ -11341,8 +11854,8 @@

        RotatedResources

        -

        SetBaseKeyRequest

        -

        Sets the specified key as the base key for the Key Access Server

        Note: The key must be active.

        +

        DeleteKeyAccessServerRequest

        +

        FieldTypeLabelDescription
        namespace_mappingsChangeMappingsrepeatedkeypolicy.Key

        @@ -11355,14 +11868,7 @@

        SetBaseKeyRequest

        - - - - - - - - + @@ -11372,7 +11878,7 @@

        SetBaseKeyRequest

        -

        SetBaseKeyResponse

        +

        DeleteKeyAccessServerResponse

        @@ -11383,17 +11889,41 @@

        SetBaseKeyResponse

        - - + + - + + +
        id string

        Current Key UUID tp be set as default

        keyKasKeyIdentifier

        Alternative way to specify the key using KAS ID and Key ID

        Required

        new_base_keypolicy.SimpleKasKeykey_access_serverpolicy.KeyAccessServer

        The key that was set as base

        + + + + + +

        GetBaseKeyRequest

        +

        + + + + + +

        GetBaseKeyResponse

        +

        + + + + + + + + - + - + @@ -11403,7 +11933,7 @@

        SetBaseKeyResponse

        -

        UpdateKeyAccessServerRequest

        +

        GetKeyAccessServerRequest

        @@ -11417,53 +11947,102 @@

        UpdateKeyAccessServerRe

        - + - + - + - - + + - + - - + + - + + + + +
        FieldTypeLabelDescription
        previous_base_keybase_key policy.SimpleKasKey

        The previous base key, if any

        The current base key

        id string

        Required

        Deprecated. Deprecated

        urikas_id string

        Optional

        option (buf.validate.oneof).required = true; // TODO: enable this when we remove the deprecated field

        public_keypolicy.PublicKeynamestring

        Deprecated -Optional

        source_typepolicy.SourceTypeuristring

        Optional -Using UNSPECIFIED will result in a successful update, -but will not actually update the underlying source. -You should not update KAS's from INTERNAL/EXTERNAL -to unspecified.

        + + + + +

        Fields with deprecated option

        + + + + + + + - - + + + + + +
        NameOption
        namestringid

        true

        + + + + + +

        GetKeyAccessServerResponse

        +

        + + + + + + + + + + + - + + +
        FieldTypeLabelDescription
        key_access_serverpolicy.KeyAccessServer

        Optional

        + + + + + +

        GetKeyRequest

        +

        Retrieve an existing asymmetric key from the Key Management System

        + + + + + + + + - - + + - + - - + + @@ -11475,8 +12054,8 @@

        UpdateKeyAccessServerRe -

        UpdateKeyAccessServerResponse

        -

        +

        GetKeyResponse

        +

        Response to a GetKeyRequest, containing the requested asymmetric key

        FieldTypeLabelDescription
        metadatacommon.MetadataMutableidstring

        Optional -Common metadata

        The unique identifier of the key to retrieve

        metadata_update_behaviorcommon.MetadataUpdateEnumkeyKasKeyIdentifier

        @@ -11486,10 +12065,10 @@

        UpdateKeyAccessServerR

        - - + + - + @@ -11499,8 +12078,8 @@

        UpdateKeyAccessServerR -

        UpdateKeyRequest

        -

        Update an existing asymmetric key in the Key Management System

        +

        GetPublicKeyRequest

        +

        key_access_serverpolicy.KeyAccessServerkas_keypolicy.KasKey

        The requested asymmetric key for a KAS.

        @@ -11513,26 +12092,31 @@

        UpdateKeyRequest

        - + - - - - - +
        id string

        Required - -The unique identifier of the key to update

        metadatacommon.MetadataMutable

        Optional -Common metadata +

        -Mutable metadata for the key

        - + + + + +

        GetPublicKeyResponse

        +

        + + + + + + + - - + + - + @@ -11542,8 +12126,8 @@

        UpdateKeyRequest

        -

        UpdateKeyResponse

        -

        Response to an UpdateKeyRequest, containing the updated asymmetric key

        +

        GrantedPolicyObject

        +

        Can be namespace, attribute definition, or value

        FieldTypeLabelDescription
        metadata_update_behaviorcommon.MetadataUpdateEnumkeypolicy.Key

        The behavior for updating the metadata

        @@ -11553,10 +12137,17 @@

        UpdateKeyResponse

        - - + + - + + + + + + + + @@ -11566,8 +12157,8 @@

        UpdateKeyResponse

        -

        UpdatePublicKeyRequest

        -

        +

        KasKeyIdentifier

        +

        Nested message for specifying the active key using KAS ID and Key ID

        kas_keypolicy.KasKeyidstring

        The updated kas key

        fqnstring

        @@ -11577,27 +12168,33 @@

        UpdatePublicKeyRequest

        - + - + - - + + - + - - + + + + + + + + +
        idkas_id string

        Required

        metadatacommon.MetadataMutablenamestring

        Optional -Common metadata

        metadata_update_behaviorcommon.MetadataUpdateEnumuristring

        kidstring

        Required Key ID of the key in question

        @@ -11605,7 +12202,7 @@

        UpdatePublicKeyRequest

        -

        UpdatePublicKeyResponse

        +

        KasKeysSort

        @@ -11616,8 +12213,15 @@

        UpdatePublicKeyResponse

        - key - policy.Key + field + SortKasKeysType + +

        + + + + direction + policy.SortDirection

        @@ -11629,261 +12233,136 @@

        UpdatePublicKeyResponse

        - - -

        SortKasKeysType

        -

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        NameNumberDescription
        SORT_KAS_KEYS_TYPE_UNSPECIFIED0

        SORT_KAS_KEYS_TYPE_KEY_ID1

        SORT_KAS_KEYS_TYPE_CREATED_AT2

        SORT_KAS_KEYS_TYPE_UPDATED_AT3

        - -

        SortKeyAccessServersType

        -

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        NameNumberDescription
        SORT_KEY_ACCESS_SERVERS_TYPE_UNSPECIFIED0

        SORT_KEY_ACCESS_SERVERS_TYPE_NAME1

        SORT_KEY_ACCESS_SERVERS_TYPE_URI2

        SORT_KEY_ACCESS_SERVERS_TYPE_CREATED_AT3

        SORT_KEY_ACCESS_SERVERS_TYPE_UPDATED_AT4

        - - - - - -

        KeyAccessServerRegistryService

        -

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Method NameRequest TypeResponse TypeDescription
        ListKeyAccessServersListKeyAccessServersRequestListKeyAccessServersResponse

        GetKeyAccessServerGetKeyAccessServerRequestGetKeyAccessServerResponse

        CreateKeyAccessServerCreateKeyAccessServerRequestCreateKeyAccessServerResponse

        UpdateKeyAccessServerUpdateKeyAccessServerRequestUpdateKeyAccessServerResponse

        DeleteKeyAccessServerDeleteKeyAccessServerRequestDeleteKeyAccessServerResponse

        ListKeyAccessServerGrantsListKeyAccessServerGrantsRequestListKeyAccessServerGrantsResponse

        Deprecated

        CreateKeyCreateKeyRequestCreateKeyResponse

        KAS Key Management -Request to create a new key in the Key Access Service.

        GetKeyGetKeyRequestGetKeyResponse

        Request to retrieve a key from the Key Access Service.

        ListKeysListKeysRequestListKeysResponse

        Request to list keys in the Key Access Service.

        UpdateKeyUpdateKeyRequestUpdateKeyResponse

        Request to update a key in the Key Access Service.

        RotateKeyRotateKeyRequestRotateKeyResponse

        Request to rotate a key in the Key Access Service.

        SetBaseKeySetBaseKeyRequestSetBaseKeyResponse

        Request to set the default a default kas key.

        GetBaseKeyGetBaseKeyRequestGetBaseKeyResponse

        Get Default kas keys

        ListKeyMappingsListKeyMappingsRequestListKeyMappingsResponse

        Request to list key mappings in the Key Access Service.

        - - - - -

        Methods with deprecated option

        - +

        KeyAccessServerGrants

        +

        Deprecated

        + + +
        - - - - + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Method NameOption
        FieldTypeLabelDescription
        ListKeyAccessServerGrants

        true

        key_access_serverpolicy.KeyAccessServer

        namespace_grantsGrantedPolicyObjectrepeated

        attribute_grantsGrantedPolicyObjectrepeated

        value_grantsGrantedPolicyObjectrepeated

        + + - - -

        Methods with idempotency_level option

        - + +

        KeyAccessServersSort

        +

        + + +
        - - - - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + +
        Method NameOption
        FieldTypeLabelDescription
        ListKeyAccessServers

        NO_SIDE_EFFECTS

        GetKeyAccessServer

        NO_SIDE_EFFECTS

        ListKeyAccessServerGrants

        NO_SIDE_EFFECTS

        fieldSortKeyAccessServersType

        directionpolicy.SortDirection

        + + - -
        -

        policy/keymanagement/key_management.proto

        Top -
        -

        +

        KeyMapping

        +

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        kidstring

        kas_uristring

        namespace_mappingsMappedPolicyObjectrepeated

        List of namespaces mapped to the key

        attribute_mappingsMappedPolicyObjectrepeated

        List of attribute definitions mapped to the key

        value_mappingsMappedPolicyObjectrepeated

        List of attribute values mapped to the key

        + + + -

        CreateProviderConfigRequest

        -

        Provider Configuration Requests and Response Messages

        +

        ListKeyAccessServerGrantsRequest

        +

        LIST of KAS Grants returns flat response of grants to all policy objects. It

        does not employ selectors for grants to specific policy objects or build the

        attribute tree relation. If grants to a known namespace, attribute, or value

        are needed, use the respective GET request to the specific policy object.

        @@ -11893,34 +12372,40 @@

        CreateProviderConfigRe

        - + - + - - + + - + - + - + - - + + - + @@ -11930,8 +12415,8 @@

        CreateProviderConfigRe -

        CreateProviderConfigResponse

        -

        +

        ListKeyAccessServerGrantsResponse

        +

        Deprecated

        namekas_id string

        Required -The name of the key provider. (e.g. "AWS KMS Instance 1", "Google Cloud KMS Instance 2")

        Optional +Filter LIST by ID of a registered Key Access Server. +If neither is provided, grants from all registered KASs to policy attribute +objects are returned.

        config_jsonbyteskas_uristring

        Required -JSON configuration for the key provider. This is unique to individual key providers.

        Optional +Filter LIST by URI of a registered Key Access Server. +If none is provided, grants from all registered KASs to policy attribute +objects are returned.

        managerkas_name string

        Required -The type of key manager (e.g. "aws", "gcp", "azure", "opentdf.io/basic")

        Optional +Filter LIST by name of a registered Key Access Server. +If none are provided, grants from all registered KASs to policy attribute +objects are returned.

        metadatacommon.MetadataMutablepaginationpolicy.PageRequest

        Common metadata

        Optional

        @@ -11941,8 +12426,15 @@

        CreateProviderConfigR

        - - + + + + + + + + + @@ -11951,11 +12443,32 @@

        CreateProviderConfigR

        provider_configpolicy.KeyProviderConfiggrantsKeyAccessServerGrantsrepeated

        Deprecated.

        paginationpolicy.PageResponse

        + + +

        Fields with deprecated option

        + + + + + + + + + + + + + + + +
        NameOption
        grants

        true

        + + -

        DeleteProviderConfigRequest

        -

        In order to delete a provider configuration you must first delete all keys associated with the provider.

        +

        ListKeyAccessServersRequest

        +

        @@ -11965,10 +12478,28 @@

        DeleteProviderConfigRe

        - - + + - + + + + + + + + + + + + + + + @@ -11978,7 +12509,7 @@

        DeleteProviderConfigRe -

        DeleteProviderConfigResponse

        +

        ListKeyAccessServersResponse

        @@ -11989,8 +12520,15 @@

        DeleteProviderConfigR

        - - + + + + + + + + + @@ -12002,7 +12540,7 @@

        DeleteProviderConfigR -

        GetProviderConfigRequest

        +

        ListKeyMappingsRequest

        @@ -12016,21 +12554,21 @@

        GetProviderConfigRequest<

        - + - - + + - - + + - + @@ -12040,7 +12578,7 @@

        GetProviderConfigRequest< -

        GetProviderConfigResponse

        +

        ListKeyMappingsResponse

        @@ -12051,10 +12589,17 @@

        GetProviderConfigRespons

        - - + + + + + + + + + - + @@ -12064,8 +12609,8 @@

        GetProviderConfigRespons -

        ListProviderConfigsRequest

        -

        +

        ListKeysRequest

        +

        List all asymmetric keys managed by a specific Key Access Server or with a given algorithm

        idstringpaginationpolicy.PageRequest

        Required

        Optional

        sortKeyAccessServersSortrepeated

        Optional - CONSTRAINT: max 1 item +Sort defaults: + - direction UNSPECIFIED defaults to DESC for the specified field + - field UNSPECIFIED defaults to created_at with the specified direction + - both UNSPECIFIED or sort omitted defaults to created_at DESC

        searchpolicy.Search

        Optional

        provider_configpolicy.KeyProviderConfigkey_access_serverspolicy.KeyAccessServerrepeated

        paginationpolicy.PageResponse

        id string

        The unique identifier of the key to retrieve

        namestringkeyKasKeyIdentifier

        managerstringpaginationpolicy.PageRequest

        Optional - filter by manager type when searching by name

        Pagination request for the list of keys

        provider_configpolicy.KeyProviderConfigkey_mappingsKeyMappingrepeated

        The list of key mappings

        paginationpolicy.PageResponse

        Pagination response for the list of keys

        @@ -12074,10 +12619,67 @@

        ListProviderConfigsRequ

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12088,8 +12690,8 @@

        ListProviderConfigsRequ -

        ListProviderConfigsResponse

        -

        +

        ListKeysResponse

        +

        Response to a ListKeysRequest, containing the list of asymmetric keys and pagination information

        key_algorithmpolicy.Algorithm

        Filter keys by algorithm

        kas_idstring

        Filter keys by the KAS ID

        kas_namestring

        Filter keys by the KAS name

        kas_uristring

        Filter keys by the KAS URI

        legacybooloptional

        Optional + +Filter for legacy keys

        pagination policy.PageRequest

        Optional + +Pagination request for the list of keys

        sortKasKeysSortrepeated

        Optional - CONSTRAINT: max 1 item +Sort defaults: + - direction UNSPECIFIED defaults to DESC for the specified field + - field UNSPECIFIED defaults to created_at with the specified direction + - both UNSPECIFIED or sort omitted defaults to created_at DESC

        searchpolicy.Search

        Optional

        @@ -12099,17 +12701,17 @@

        ListProviderConfigsRes

        - - + + - + - + @@ -12119,7 +12721,7 @@

        ListProviderConfigsRes -

        UpdateProviderConfigRequest

        +

        ListPublicKeyMappingRequest

        @@ -12130,44 +12732,67 @@

        UpdateProviderConfigRe

        - + - + - + - - + + - + - + - - + + - + + + + +
        provider_configspolicy.KeyProviderConfigkas_keyspolicy.KasKey repeated

        The list of kas keys

        pagination policy.PageResponse

        Pagination response for the list of keys

        idkas_id string

        Required

        Optional

        namekas_name string

        Optional

        config_jsonbyteskas_uristring

        Optional

        managerpublic_key_id string

        Optional

        Optional Public Key ID

        metadatacommon.MetadataMutablepaginationpolicy.PageRequest

        Optional -Common metadata

        Optional

        + + + + + +

        ListPublicKeyMappingResponse

        +

        + + + + + + + + + + + + + - - + + @@ -12179,7 +12804,7 @@

        UpdateProviderConfigRe -

        UpdateProviderConfigResponse

        +

        ListPublicKeyMappingResponse.Association

        @@ -12190,8 +12815,15 @@

        UpdateProviderConfigR

        - - + + + + + + + + + @@ -12203,70 +12835,8 @@

        UpdateProviderConfigR - - - - - - -

        KeyManagementService

        +

        ListPublicKeyMappingResponse.PublicKey

        -
        FieldTypeLabelDescription
        public_key_mappingsListPublicKeyMappingResponse.PublicKeyMappingrepeated

        metadata_update_behaviorcommon.MetadataUpdateEnumpaginationpolicy.PageResponse

        provider_configpolicy.KeyProviderConfigidstring

        fqnstring

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Method NameRequest TypeResponse TypeDescription
        CreateProviderConfigCreateProviderConfigRequestCreateProviderConfigResponse

        Key Management -Provider Management

        GetProviderConfigGetProviderConfigRequestGetProviderConfigResponse

        ListProviderConfigsListProviderConfigsRequestListProviderConfigsResponse

        UpdateProviderConfigUpdateProviderConfigRequestUpdateProviderConfigResponse

        DeleteProviderConfigDeleteProviderConfigRequestDeleteProviderConfigResponse

        - - - - -
        -

        policy/namespaces/namespaces.proto

        Top -
        -

        - - -

        AssignKeyAccessServerToNamespaceRequest

        -

        Deprecated: utilize AssignPublicKeyToNamespaceRequest

        @@ -12276,12 +12846,33 @@

        AssignKeyAcce

        - - + + + + + + + + + + + + + + + + + + + + + + +
        namespace_key_access_serverNamespaceKeyAccessServerkeypolicy.Key

        valuesListPublicKeyMappingResponse.Associationrepeated

        definitionsListPublicKeyMappingResponse.Associationrepeated

        namespacesListPublicKeyMappingResponse.Associationrepeated

        @@ -12289,7 +12880,7 @@

        AssignKeyAcce -

        AssignKeyAccessServerToNamespaceResponse

        +

        ListPublicKeyMappingResponse.PublicKeyMapping

        @@ -12300,36 +12891,33 @@

        AssignKeyAcc - namespace_key_access_server - NamespaceKeyAccessServer + kas_id + string

        - - - - - - - -

        AssignPublicKeyToNamespaceRequest

        -

        Assign Key to Namespace

        - - - - - - - + + + + + + - - + + + + + + + + +
        FieldTypeLabelDescription
        kas_namestring

        namespace_keyNamespaceKeykas_uristring

        public_keysListPublicKeyMappingResponse.PublicKeyrepeated

        @@ -12337,7 +12925,7 @@

        AssignPublicKeyToNa -

        AssignPublicKeyToNamespaceResponse

        +

        ListPublicKeysRequest

        @@ -12348,10 +12936,31 @@

        AssignPublicKeyToN - namespace_key - NamespaceKey + kas_id + string -

        +

        Optional

        + + + + kas_name + string + +

        Optional

        + + + + kas_uri + string + +

        Optional

        + + + + pagination + policy.PageRequest + +

        Optional

        @@ -12361,7 +12970,7 @@

        AssignPublicKeyToN -

        CreateNamespaceRequest

        +

        ListPublicKeysResponse

        @@ -12372,17 +12981,17 @@

        CreateNamespaceRequest

        - name - string - -

        Required

        + keys + policy.Key + repeated +

        - metadata - common.MetadataMutable + pagination + policy.PageResponse -

        Optional

        +

        @@ -12392,7 +13001,7 @@

        CreateNamespaceRequest

        -

        CreateNamespaceResponse

        +

        MappedPolicyObject

        @@ -12403,10 +13012,17 @@

        CreateNamespaceResponse

        - namespace - policy.Namespace + id + string -

        +

        The unique identifier of the policy object

        + + + + fqn + string + +

        The fully qualified name of the policy object

        @@ -12416,7 +13032,7 @@

        CreateNamespaceResponse

        -

        DeactivateNamespaceRequest

        +

        RotateKeyRequest

        @@ -12430,7 +13046,21 @@

        DeactivateNamespaceRequest id string -

        Required

        +

        Current Active Key UUID

        + + + + key + KasKeyIdentifier + +

        Alternative way to specify the active key using KAS ID and Key ID

        + + + + new_key + RotateKeyRequest.NewKey + +

        Information about the new key to be rotated in

        @@ -12440,15 +13070,8 @@

        DeactivateNamespaceRequest -

        DeactivateNamespaceResponse

        -

        - - - - - -

        GetNamespaceRequest

        -

        +

        RotateKeyRequest.NewKey

        +

        Nested message for specifying the new key details

        @@ -12458,69 +13081,54 @@

        GetNamespaceRequest

        - + - + - - + + - + - - + + - + - -
        idkey_id string

        Deprecated. Deprecated

        Required

        namespace_idstringalgorithmpolicy.Algorithm

        option (buf.validate.oneof).required = true; // TODO: enable this when we remove the deprecated field

        Required

        fqnstringkey_modepolicy.KeyMode

        Required

        - - - - -

        Fields with deprecated option

        - - - - + + + + - - - - + + + + - -
        NameOptionpublic_key_ctxpolicy.PublicKeyCtx

        Required

        id

        true

        private_key_ctxpolicy.PrivateKeyCtx

        Required

        - - - - - -

        GetNamespaceResponse

        -

        + + provider_config_id + string + +

        Conditionally Required. - - - - - - +Validation handled by message-level CEL

        + - - + + - + @@ -12530,8 +13138,8 @@

        GetNamespaceResponse

        -

        ListNamespacesRequest

        -

        +

        RotateKeyResponse

        +

        Response message for the RotateKey request

        FieldTypeLabelDescription
        namespacepolicy.Namespacemetadatacommon.MetadataMutable

        Common metadata fields

        @@ -12541,36 +13149,17 @@

        ListNamespacesRequest

        - - - - - - - - - + + - - - - - - - - + - - + + - + @@ -12580,8 +13169,8 @@

        ListNamespacesRequest

        -

        ListNamespacesResponse

        -

        +

        RotatedResources

        +

        All resources that were rotated as part of the key rotation process

        statecommon.ActiveStateEnum

        Optional -ACTIVE by default when not specified

        paginationpolicy.PageRequestkas_keypolicy.KasKey

        Optional

        sortNamespacesSortrepeated

        Optional - CONSTRAINT: max 1 item -Sort defaults: - - direction UNSPECIFIED defaults to DESC for the specified field - - field UNSPECIFIED defaults to created_at with the specified direction - - both UNSPECIFIED or sort omitted defaults to created_at DESC

        The newly rotated Kas Key

        searchpolicy.Searchrotated_resourcesRotatedResources

        Optional

        All resources that were rotated as part of the key rotation process

        @@ -12591,16 +13180,30 @@

        ListNamespacesResponse

        - - + + + + + + + + + + + + + + + + - - - + + + @@ -12611,8 +13214,8 @@

        ListNamespacesResponse

        -

        NamespaceKey

        -

        +

        SetBaseKeyRequest

        +

        Sets the specified key as the base key for the Key Access Server

        Note: The key must be active.

        namespacespolicy.Namespacerotated_out_keypolicy.KasKey

        The old key that was rotated out

        attribute_definition_mappingsChangeMappingsrepeated

        attribute_value_mappingsChangeMappings repeated

        paginationpolicy.PageResponsenamespace_mappingsChangeMappingsrepeated

        @@ -12622,17 +13225,17 @@

        NamespaceKey

        - + - + - - + + - + @@ -12642,8 +13245,8 @@

        NamespaceKey

        -

        NamespaceKeyAccessServer

        -

        Deprecated

        +

        SetBaseKeyResponse

        +

        namespace_idid string

        Required

        Current Key UUID tp be set as default

        key_idstringkeyKasKeyIdentifier

        Required (The id from the Asymmetric Key object)

        Alternative way to specify the key using KAS ID and Key ID

        @@ -12653,17 +13256,17 @@

        NamespaceKeyAccessServer

        - - + + - + - - + + - + @@ -12673,7 +13276,7 @@

        NamespaceKeyAccessServer

        NamespacesSort +

        UpdateKeyAccessServerRequest

        @@ -12684,39 +13287,56 @@

        NamespacesSort

        - - + + - + - - + + - + - -
        namespace_idstringnew_base_keypolicy.SimpleKasKey

        Required

        The key that was set as base

        key_access_server_idstringprevious_base_keypolicy.SimpleKasKey

        Required

        The previous base key, if any

        fieldSortNamespacesTypeidstring

        Required

        directionpolicy.SortDirectionuristring

        Optional

        - - - - - -

        RemoveKeyAccessServerFromNamespaceRequest

        -

        Deprecated: utilize RemovePublicKeyFromNamespaceRequest

        - - - - - - - + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + @@ -12728,7 +13348,7 @@

        RemoveKeyAc -

        RemoveKeyAccessServerFromNamespaceResponse

        +

        UpdateKeyAccessServerResponse

        @@ -12739,8 +13359,8 @@

        RemoveKeyA

        - - + + @@ -12752,8 +13372,8 @@

        RemoveKeyA -

        RemovePublicKeyFromNamespaceRequest

        -

        +

        UpdateKeyRequest

        +

        Update an existing asymmetric key in the Key Management System

        FieldTypeLabelDescription
        public_keypolicy.PublicKey

        Deprecated +Optional

        namespace_key_access_serverNamespaceKeyAccessServersource_typepolicy.SourceType

        Optional +Using UNSPECIFIED will result in a successful update, +but will not actually update the underlying source. +You should not update KAS's from INTERNAL/EXTERNAL +to unspecified.

        namestring

        Optional

        metadatacommon.MetadataMutable

        Optional +Common metadata

        metadata_update_behaviorcommon.MetadataUpdateEnum

        namespace_key_access_serverNamespaceKeyAccessServerkey_access_serverpolicy.KeyAccessServer

        @@ -12763,10 +13383,29 @@

        RemovePublicKeyFr

        - - + + - + + + + + + + + + + + + + + + @@ -12776,8 +13415,8 @@

        RemovePublicKeyFr -

        RemovePublicKeyFromNamespaceResponse

        -

        +

        UpdateKeyResponse

        +

        Response to an UpdateKeyRequest, containing the updated asymmetric key

        namespace_keyNamespaceKeyidstring

        Required + +The unique identifier of the key to update

        metadatacommon.MetadataMutable

        Optional +Common metadata + +Mutable metadata for the key

        metadata_update_behaviorcommon.MetadataUpdateEnum

        The behavior for updating the metadata

        @@ -12787,10 +13426,10 @@

        RemovePublicKeyF

        - - + + - + @@ -12800,7 +13439,7 @@

        RemovePublicKeyF -

        UpdateNamespaceRequest

        +

        UpdatePublicKeyRequest

        @@ -12821,7 +13460,8 @@

        UpdateNamespaceRequest

        - + @@ -12838,7 +13478,7 @@

        UpdateNamespaceRequest

        -

        UpdateNamespaceResponse

        +

        UpdatePublicKeyResponse

        @@ -12849,8 +13489,8 @@

        UpdateNamespaceResponse

        - - + + @@ -12864,7 +13504,7 @@

        UpdateNamespaceResponse

        -

        SortNamespacesType

        +

        SortKasKeysType

        namespace_keyNamespaceKeykas_keypolicy.KasKey

        The updated kas key

        metadata common.MetadataMutable

        Optional

        Optional +Common metadata

        namespacepolicy.Namespacekeypolicy.Key

        @@ -12873,31 +13513,66 @@

        SortNamespacesType

        - + - + - + - + + +
        SORT_NAMESPACES_TYPE_UNSPECIFIEDSORT_KAS_KEYS_TYPE_UNSPECIFIED 0

        SORT_NAMESPACES_TYPE_NAMESORT_KAS_KEYS_TYPE_KEY_ID 1

        SORT_NAMESPACES_TYPE_FQNSORT_KAS_KEYS_TYPE_CREATED_AT 2

        SORT_NAMESPACES_TYPE_CREATED_ATSORT_KAS_KEYS_TYPE_UPDATED_AT 3

        + +

        SortKeyAccessServersType

        +

        + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + @@ -12909,7 +13584,7 @@

        SortNamespacesType

        -

        NamespaceService

        +

        KeyAccessServerRegistryService

        NameNumberDescription
        SORT_KEY_ACCESS_SERVERS_TYPE_UNSPECIFIED0

        SORT_NAMESPACES_TYPE_UPDATED_ATSORT_KEY_ACCESS_SERVERS_TYPE_NAME1

        SORT_KEY_ACCESS_SERVERS_TYPE_URI2

        SORT_KEY_ACCESS_SERVERS_TYPE_CREATED_AT3

        SORT_KEY_ACCESS_SERVERS_TYPE_UPDATED_AT 4

        @@ -12918,68 +13593,102 @@

        NamespaceService

        - - - + + + - - - + + + - - - + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + @@ -12999,12 +13708,7 @@

        Methods with deprecated option

        - - - - - - + @@ -13025,12 +13729,17 @@

        Methods with idempotency_level option

        - + - + + + + + + @@ -13041,13 +13750,13 @@

        Methods with idempotency_level option

        -

        policy/obligations/obligations.proto

        Top +

        policy/keymanagement/key_management.proto

        Top

        -

        AddObligationTriggerRequest

        -

        Obligation Triggers are owned by the namespace that owns the action and attribute value, which must

        be the same. In this way, a trigger can intentionally cross namespace boundaries: associating

        obligation values of a different namespace than the one that owns the action being taken or the attribute value.

        +

        CreateProviderConfigRequest

        +

        Provider Configuration Requests and Response Messages

        GetNamespaceGetNamespaceRequestGetNamespaceResponseListKeyAccessServersListKeyAccessServersRequestListKeyAccessServersResponse

        ListNamespacesListNamespacesRequestListNamespacesResponseGetKeyAccessServerGetKeyAccessServerRequestGetKeyAccessServerResponse

        CreateNamespaceCreateNamespaceRequestCreateNamespaceResponseCreateKeyAccessServerCreateKeyAccessServerRequestCreateKeyAccessServerResponse

        UpdateKeyAccessServerUpdateKeyAccessServerRequestUpdateKeyAccessServerResponse

        DeleteKeyAccessServerDeleteKeyAccessServerRequestDeleteKeyAccessServerResponse

        UpdateNamespaceUpdateNamespaceRequestUpdateNamespaceResponse

        ListKeyAccessServerGrantsListKeyAccessServerGrantsRequestListKeyAccessServerGrantsResponse

        Deprecated

        CreateKeyCreateKeyRequestCreateKeyResponse

        KAS Key Management +Request to create a new key in the Key Access Service.

        GetKeyGetKeyRequestGetKeyResponse

        Request to retrieve a key from the Key Access Service.

        ListKeysListKeysRequestListKeysResponse

        Request to list keys in the Key Access Service.

        DeactivateNamespaceDeactivateNamespaceRequestDeactivateNamespaceResponse

        UpdateKeyUpdateKeyRequestUpdateKeyResponse

        Request to update a key in the Key Access Service.

        AssignKeyAccessServerToNamespaceAssignKeyAccessServerToNamespaceRequestAssignKeyAccessServerToNamespaceResponse

        Deprecated: utilize AssignPublicKeyToNamespace

        RotateKeyRotateKeyRequestRotateKeyResponse

        Request to rotate a key in the Key Access Service.

        RemoveKeyAccessServerFromNamespaceRemoveKeyAccessServerFromNamespaceRequestRemoveKeyAccessServerFromNamespaceResponse

        Deprecated: utilize RemovePublicKeyFromNamespace

        SetBaseKeySetBaseKeyRequestSetBaseKeyResponse

        Request to set the default a default kas key.

        AssignPublicKeyToNamespaceAssignPublicKeyToNamespaceRequestAssignPublicKeyToNamespaceResponse

        --------------------------------------* -Namespace <> Key RPCs ----------------------------------------

        GetBaseKeyGetBaseKeyRequestGetBaseKeyResponse

        Get Default kas keys

        RemovePublicKeyFromNamespaceRemovePublicKeyFromNamespaceRequestRemovePublicKeyFromNamespaceResponse

        ListKeyMappingsListKeyMappingsRequestListKeyMappingsResponse

        Request to list key mappings in the Key Access Service.

        AssignKeyAccessServerToNamespace

        true

        RemoveKeyAccessServerFromNamespaceListKeyAccessServerGrants

        true

        GetNamespaceListKeyAccessServers

        NO_SIDE_EFFECTS

        ListNamespacesGetKeyAccessServer

        NO_SIDE_EFFECTS

        ListKeyAccessServerGrants

        NO_SIDE_EFFECTS

        @@ -13057,40 +13766,34 @@

        AddObligationTriggerRequ

        - - - - - - - - - + + - + - - + + - + - - + + - + - + @@ -13100,7 +13803,7 @@

        AddObligationTriggerRequ -

        AddObligationTriggerResponse

        +

        CreateProviderConfigResponse

        @@ -13111,8 +13814,8 @@

        AddObligationTriggerRes

        - - + + @@ -13124,8 +13827,8 @@

        AddObligationTriggerRes -

        CreateObligationRequest

        -

        +

        DeleteProviderConfigRequest

        +

        In order to delete a provider configuration you must first delete all keys associated with the provider.

        obligation_valuecommon.IdFqnIdentifier

        Required

        actioncommon.IdNameIdentifiernamestring

        Required

        Required +The name of the key provider. (e.g. "AWS KMS Instance 1", "Google Cloud KMS Instance 2")

        attribute_valuecommon.IdFqnIdentifierconfig_jsonbytes

        Required

        Required +JSON configuration for the key provider. This is unique to individual key providers.

        contextpolicy.RequestContextmanagerstring

        Optional -The request context for this obligation value policy decisioning.

        Required +The type of key manager (e.g. "aws", "gcp", "azure", "opentdf.io/basic")

        metadata common.MetadataMutable

        Optional -Common metadata

        Common metadata

        triggerpolicy.ObligationTriggerprovider_configpolicy.KeyProviderConfig

        @@ -13135,39 +13838,10 @@

        CreateObligationRequest

        - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - + @@ -13177,7 +13851,7 @@

        CreateObligationRequest

        -

        CreateObligationResponse

        +

        DeleteProviderConfigResponse

        @@ -13188,8 +13862,8 @@

        CreateObligationResponse

        - - + + @@ -13201,7 +13875,7 @@

        CreateObligationResponseCreateObligationValueRequest

        +

        GetProviderConfigRequest

        @@ -13212,40 +13886,24 @@

        CreateObligationValueRe

        - + - + - + - - - - - - - - - - - - - - - + @@ -13255,7 +13913,7 @@

        CreateObligationValueRe -

        CreateObligationValueResponse

        +

        GetProviderConfigResponse

        @@ -13266,8 +13924,8 @@

        CreateObligationValueR

        - - + + @@ -13279,7 +13937,7 @@

        CreateObligationValueR -

        DeleteObligationRequest

        +

        ListProviderConfigsRequest

        @@ -13290,17 +13948,10 @@

        DeleteObligationRequest

        - - - - - - - - - + + - + @@ -13310,7 +13961,7 @@

        DeleteObligationRequest

        -

        DeleteObligationResponse

        +

        ListProviderConfigsResponse

        @@ -13321,8 +13972,15 @@

        DeleteObligationResponse

        - - + + + + + + + + + @@ -13334,7 +13992,7 @@

        DeleteObligationResponseDeleteObligationValueRequest

        +

        UpdateProviderConfigRequest

        @@ -13348,13 +14006,42 @@

        DeleteObligationValueRe

        - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13365,7 +14052,7 @@

        DeleteObligationValueRe -

        DeleteObligationValueResponse

        +

        UpdateProviderConfigResponse

        @@ -13376,8 +14063,8 @@

        DeleteObligationValueR

        - - + + @@ -13389,8 +14076,70 @@

        DeleteObligationValueR -

        GetObligationRequest

        + + + + + + +

        KeyManagementService

        +
        namespace_idstring

        namespace_fqnstring

        namestring

        valuesid stringrepeated

        Optional

        metadatacommon.MetadataMutable

        Optional -Common metadata

        Required

        obligationpolicy.Obligationprovider_configpolicy.KeyProviderConfig

        obligation_idid string

        obligation_fqnname string

        valuemanager string

        triggersValueTriggerRequestrepeated

        Optional -Combination of action and attribute_value that will trigger this obligation value policy decisioning.

        metadatacommon.MetadataMutable

        Optional -Common metadata

        Optional - filter by manager type when searching by name

        valuepolicy.ObligationValueprovider_configpolicy.KeyProviderConfig

        idstring

        fqnstringpaginationpolicy.PageRequest

        Optional

        obligationpolicy.Obligationprovider_configspolicy.KeyProviderConfigrepeated

        paginationpolicy.PageResponse

        id string

        Required

        fqnnamestring

        Optional

        config_jsonbytes

        Optional

        manager string

        Optional

        metadatacommon.MetadataMutable

        Optional +Common metadata

        metadata_update_behaviorcommon.MetadataUpdateEnum

        valuepolicy.ObligationValueprovider_configpolicy.KeyProviderConfig

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Method NameRequest TypeResponse TypeDescription
        CreateProviderConfigCreateProviderConfigRequestCreateProviderConfigResponse

        Key Management +Provider Management

        GetProviderConfigGetProviderConfigRequestGetProviderConfigResponse

        ListProviderConfigsListProviderConfigsRequestListProviderConfigsResponse

        UpdateProviderConfigUpdateProviderConfigRequestUpdateProviderConfigResponse

        DeleteProviderConfigDeleteProviderConfigRequestDeleteProviderConfigResponse

        + + + + +
        +

        policy/namespaces/namespaces.proto

        Top +
        +

        + + +

        AssignKeyAccessServerToNamespaceRequest

        +

        Deprecated: utilize AssignPublicKeyToNamespaceRequest

        @@ -13400,15 +14149,8 @@

        GetObligationRequest

        - - - - - - - - - + + @@ -13420,7 +14162,7 @@

        GetObligationRequest

        -

        GetObligationResponse

        +

        AssignKeyAccessServerToNamespaceResponse

        @@ -13431,8 +14173,8 @@

        GetObligationResponse

        - - + + @@ -13444,8 +14186,8 @@

        GetObligationResponse

        -

        GetObligationTriggerRequest

        -

        Triggers

        +

        AssignPublicKeyToNamespaceRequest

        +

        Assign Key to Namespace

        idstring

        fqnstringnamespace_key_access_serverNamespaceKeyAccessServer

        obligationpolicy.Obligationnamespace_key_access_serverNamespaceKeyAccessServer

        @@ -13455,10 +14197,10 @@

        GetObligationTriggerRequ

        - - + + - + @@ -13468,7 +14210,7 @@

        GetObligationTriggerRequ -

        GetObligationTriggerResponse

        +

        AssignPublicKeyToNamespaceResponse

        @@ -13479,8 +14221,8 @@

        GetObligationTriggerRes

        - - + + @@ -13492,8 +14234,8 @@

        GetObligationTriggerRes -

        GetObligationValueRequest

        -

        Values

        +

        CreateNamespaceRequest

        +

        idstringnamespace_keyNamespaceKey

        Required

        triggerpolicy.ObligationTriggernamespace_keyNamespaceKey

        @@ -13503,17 +14245,17 @@

        GetObligationValueRequest<

        - + - + - - + + - + @@ -13523,7 +14265,7 @@

        GetObligationValueRequest< -

        GetObligationValueResponse

        +

        CreateNamespaceResponse

        @@ -13534,8 +14276,8 @@

        GetObligationValueRespons

        - - + + @@ -13547,7 +14289,7 @@

        GetObligationValueRespons -

        GetObligationValuesByFQNsRequest

        +

        DeactivateNamespaceRequest

        @@ -13558,10 +14300,10 @@

        GetObligationValues

        - + - - + + @@ -13571,31 +14313,14 @@

        GetObligationValues -

        GetObligationValuesByFQNsResponse

        +

        DeactivateNamespaceResponse

        -
        idname string

        Required

        fqnstringmetadatacommon.MetadataMutable

        Optional

        valuepolicy.ObligationValuenamespacepolicy.Namespace

        fqnsid stringrepeated

        Required

        - - - - - - - - - - - - - -
        FieldTypeLabelDescription
        fqn_value_mapGetObligationValuesByFQNsResponse.FqnValueMapEntryrepeated

        - - -

        GetObligationValuesByFQNsResponse.FqnValueMapEntry

        +

        GetNamespaceRequest

        @@ -13606,40 +14331,23 @@

        G - key + id string -

        +

        Deprecated. Deprecated

        - value - policy.ObligationValue + namespace_id + string -

        +

        option (buf.validate.oneof).required = true; // TODO: enable this when we remove the deprecated field

        - - - - - - - -

        GetObligationsByFQNsRequest

        -

        - - - - - - - - - + - + @@ -13647,34 +14355,31 @@

        GetObligationsByFQNsRequ

        FieldTypeLabelDescription
        fqnsfqn stringrepeated

        - - - -

        GetObligationsByFQNsResponse

        -

        - - - - - - - + + +

        Fields with deprecated option

        +
        FieldTypeLabelDescription
        + + + + + + + - - - - + + - -
        NameOption
        fqn_obligation_mapGetObligationsByFQNsResponse.FqnObligationMapEntryrepeated

        id

        true

        - + + + -

        GetObligationsByFQNsResponse.FqnObligationMapEntry

        +

        GetNamespaceResponse

        @@ -13685,15 +14390,8 @@

        G - key - string - -

        - - - - value - policy.Obligation + namespace + policy.Namespace

        @@ -13705,7 +14403,7 @@

        G -

        ListObligationTriggersRequest

        +

        ListNamespacesRequest

        @@ -13716,22 +14414,34 @@

        ListObligationTriggers - namespace_id - string + state + common.ActiveStateEnum -

        +

        Optional +ACTIVE by default when not specified

        - namespace_fqn - string + pagination + policy.PageRequest -

        +

        Optional

        - pagination - policy.PageRequest + sort + NamespacesSort + repeated +

        Optional - CONSTRAINT: max 1 item +Sort defaults: + - direction UNSPECIFIED defaults to DESC for the specified field + - field UNSPECIFIED defaults to created_at with the specified direction + - both UNSPECIFIED or sort omitted defaults to created_at DESC

        + + + + search + policy.Search

        Optional

        @@ -13743,7 +14453,7 @@

        ListObligationTriggers -

        ListObligationTriggersResponse

        +

        ListNamespacesResponse

        @@ -13754,8 +14464,8 @@

        ListObligationTrigger - triggers - policy.ObligationTrigger + namespaces + policy.Namespace repeated

        @@ -13774,7 +14484,7 @@

        ListObligationTrigger -

        ListObligationsRequest

        +

        NamespaceKey

        @@ -13788,39 +14498,14 @@

        ListObligationsRequest

        namespace_id string -

        +

        Required

        - namespace_fqn + key_id string -

        - - - - pagination - policy.PageRequest - -

        Optional

        - - - - sort - ObligationsSort - repeated -

        Optional - CONSTRAINT: max 1 item -Sort defaults: - - direction UNSPECIFIED defaults to DESC for the specified field - - field UNSPECIFIED defaults to created_at with the specified direction - - both UNSPECIFIED or sort omitted defaults to created_at DESC

        - - - - search - policy.Search - -

        Optional

        +

        Required (The id from the Asymmetric Key object)

        @@ -13830,8 +14515,8 @@

        ListObligationsRequest

        -

        ListObligationsResponse

        -

        +

        NamespaceKeyAccessServer

        +

        Deprecated

        @@ -13841,17 +14526,17 @@

        ListObligationsResponse

        - - - - + + + + - - + + - + @@ -13861,7 +14546,7 @@

        ListObligationsResponse

        -

        ObligationsSort

        +

        NamespacesSort

        @@ -13873,7 +14558,7 @@

        ObligationsSort

        - + @@ -13892,8 +14577,8 @@

        ObligationsSort

        -

        RemoveObligationTriggerRequest

        -

        +

        RemoveKeyAccessServerFromNamespaceRequest

        +

        Deprecated: utilize RemovePublicKeyFromNamespaceRequest

        obligationspolicy.Obligationrepeated

        namespace_idstring

        Required

        paginationpolicy.PageResponsekey_access_server_idstring

        Required

        fieldSortObligationsTypeSortNamespacesType

        @@ -13903,10 +14588,10 @@

        RemoveObligationTrigg

        - - + + - + @@ -13916,7 +14601,7 @@

        RemoveObligationTrigg -

        RemoveObligationTriggerResponse

        +

        RemoveKeyAccessServerFromNamespaceResponse

        @@ -13927,8 +14612,8 @@

        RemoveObligationTrig

        - - + + @@ -13940,7 +14625,7 @@

        RemoveObligationTrig -

        UpdateObligationRequest

        +

        RemovePublicKeyFromNamespaceRequest

        @@ -13951,29 +14636,8 @@

        UpdateObligationRequest

        - - - - - - - - - - - - - - - - - - - - - - - + + @@ -13985,7 +14649,7 @@

        UpdateObligationRequest

        -

        UpdateObligationResponse

        +

        RemovePublicKeyFromNamespaceResponse

        @@ -13996,8 +14660,8 @@

        UpdateObligationResponse

        - - + + @@ -14009,7 +14673,7 @@

        UpdateObligationResponseUpdateObligationValueRequest

        +

        UpdateNamespaceRequest

        @@ -14026,27 +14690,11 @@

        UpdateObligationValueRe

        - - - - - - - - - - - - - - - + @@ -14063,7 +14711,7 @@

        UpdateObligationValueRe -

        UpdateObligationValueResponse

        +

        UpdateNamespaceResponse

        @@ -14074,8 +14722,8 @@

        UpdateObligationValueR

        - - + + @@ -14087,47 +14735,9 @@

        UpdateObligationValueR -

        ValueTriggerRequest

        -

        - - -
        idstringnamespace_key_access_serverNamespaceKeyAccessServer

        Required

        triggerpolicy.ObligationTriggernamespace_key_access_serverNamespaceKeyAccessServer

        idstring

        Required

        namestring

        Optional

        metadatacommon.MetadataMutable

        metadata_update_behaviorcommon.MetadataUpdateEnumnamespace_keyNamespaceKey

        obligationpolicy.Obligationnamespace_keyNamespaceKey

        Required

        valuestring

        Optional

        triggersValueTriggerRequestrepeated

        Optional -Obligation Triggers provided here will replace all existing records in the database.

        metadata common.MetadataMutable

        Optional -Common metadata

        Optional

        valuepolicy.ObligationValuenamespacepolicy.Namespace

        - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        FieldTypeLabelDescription
        actioncommon.IdNameIdentifier

        Required. The ID of the action that will trigger this obligation value policy decisioning.

        attribute_valuecommon.IdFqnIdentifier

        Required. The attribute value ID that will trigger this obligation value policy decisioning.

        contextpolicy.RequestContext

        Optional. The request context for this obligation value policy decisioning.

        - - - - - -

        SortObligationsType

        +

        SortNamespacesType

        @@ -14136,31 +14746,31 @@

        SortObligationsType

        - + - + - + - + - + @@ -14172,8 +14782,8 @@

        SortObligationsType

        -

        Service

        -

        Obligation Service

        /

        +

        NamespaceService

        +

        SORT_OBLIGATIONS_TYPE_UNSPECIFIEDSORT_NAMESPACES_TYPE_UNSPECIFIED 0

        SORT_OBLIGATIONS_TYPE_NAMESORT_NAMESPACES_TYPE_NAME 1

        SORT_OBLIGATIONS_TYPE_FQNSORT_NAMESPACES_TYPE_FQN 2

        SORT_OBLIGATIONS_TYPE_CREATED_ATSORT_NAMESPACES_TYPE_CREATED_AT 3

        SORT_OBLIGATIONS_TYPE_UPDATED_ATSORT_NAMESPACES_TYPE_UPDATED_AT 4

        @@ -14181,107 +14791,67 @@

        Service

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + @@ -14291,7 +14861,7 @@

        Service

        -

        Methods with idempotency_level option

        +

        Methods with deprecated option

        Method NameRequest TypeResponse TypeDescription
        ListObligationsListObligationsRequestListObligationsResponse

        GetObligationGetObligationRequestGetObligationResponse

        GetObligationsByFQNsGetObligationsByFQNsRequestGetObligationsByFQNsResponse

        CreateObligationCreateObligationRequestCreateObligationResponse

        UpdateObligationUpdateObligationRequestUpdateObligationResponse

        DeleteObligationDeleteObligationRequestDeleteObligationResponse

        GetObligationValueGetObligationValueRequestGetObligationValueResponseGetNamespaceGetNamespaceRequestGetNamespaceResponse

        GetObligationValuesByFQNsGetObligationValuesByFQNsRequestGetObligationValuesByFQNsResponseListNamespacesListNamespacesRequestListNamespacesResponse

        CreateObligationValueCreateObligationValueRequestCreateObligationValueResponseCreateNamespaceCreateNamespaceRequestCreateNamespaceResponse

        UpdateObligationValueUpdateObligationValueRequestUpdateObligationValueResponseUpdateNamespaceUpdateNamespaceRequestUpdateNamespaceResponse

        DeleteObligationValueDeleteObligationValueRequestDeleteObligationValueResponseDeactivateNamespaceDeactivateNamespaceRequestDeactivateNamespaceResponse

        GetObligationTriggerGetObligationTriggerRequestGetObligationTriggerResponse

        AssignKeyAccessServerToNamespaceAssignKeyAccessServerToNamespaceRequestAssignKeyAccessServerToNamespaceResponse

        Deprecated: utilize AssignPublicKeyToNamespace

        AddObligationTriggerAddObligationTriggerRequestAddObligationTriggerResponse

        RemoveKeyAccessServerFromNamespaceRemoveKeyAccessServerFromNamespaceRequestRemoveKeyAccessServerFromNamespaceResponse

        Deprecated: utilize RemovePublicKeyFromNamespace

        RemoveObligationTriggerRemoveObligationTriggerRequestRemoveObligationTriggerResponse

        AssignPublicKeyToNamespaceAssignPublicKeyToNamespaceRequestAssignPublicKeyToNamespaceResponse

        --------------------------------------* +Namespace <> Key RPCs +---------------------------------------

        ListObligationTriggersListObligationTriggersRequestListObligationTriggersResponseRemovePublicKeyFromNamespaceRemovePublicKeyFromNamespaceRequestRemovePublicKeyFromNamespaceResponse

        @@ -14302,37 +14872,38 @@

        Methods with idempotency_level option

        - - - - - - - - - - - - + + - - + + + +
        ListObligations

        NO_SIDE_EFFECTS

        GetObligation

        NO_SIDE_EFFECTS

        GetObligationsByFQNs

        NO_SIDE_EFFECTS

        AssignKeyAccessServerToNamespace

        true

        GetObligationValue

        NO_SIDE_EFFECTS

        RemoveKeyAccessServerFromNamespace

        true

        + + + + +

        Methods with idempotency_level option

        + + - - + + + + - + - + @@ -14343,12 +14914,66 @@

        Methods with idempotency_level option

        -

        policy/registeredresources/registered_resources.proto

        Top +

        policy/obligations/obligations.proto

        Top

        -

        ActionAttributeValue

        +

        AddObligationTriggerRequest

        +

        Obligation Triggers are owned by the namespace that owns the action and attribute value, which must

        be the same. In this way, a trigger can intentionally cross namespace boundaries: associating

        obligation values of a different namespace than the one that owns the action being taken or the attribute value.

        + + +
        GetObligationValuesByFQNs

        NO_SIDE_EFFECTS

        Method NameOption
        GetObligationTriggerGetNamespace

        NO_SIDE_EFFECTS

        ListObligationTriggersListNamespaces

        NO_SIDE_EFFECTS

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        obligation_valuecommon.IdFqnIdentifier

        Required

        actioncommon.IdNameIdentifier

        Required

        attribute_valuecommon.IdFqnIdentifier

        Required

        contextpolicy.RequestContext

        Optional +The request context for this obligation value policy decisioning.

        metadatacommon.MetadataMutable

        Optional +Common metadata

        + + + + + +

        AddObligationTriggerResponse

        @@ -14359,29 +14984,85 @@

        ActionAttributeValue - action_id + trigger + policy.ObligationTrigger + +

        + + + + + + + + + +

        CreateObligationRequest

        +

        + + + + + + + + + + - + - + - + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        namespace_id string

        action_namenamespace_fqn string

        attribute_value_idname string

        attribute_value_fqnvalues stringrepeated

        Optional

        metadatacommon.MetadataMutable

        Optional +Common metadata

        + + + + + +

        CreateObligationResponse

        +

        + + + + + + + + + + + @@ -14393,7 +15074,7 @@

        ActionAttributeValueCreateRegisteredResourceRequest

        +

        CreateObligationValueRequest

        @@ -14404,41 +15085,95 @@

        CreateRegist

        - + - + - + + + + + + + + + + + + + + + +Combination of action and attribute_value that will trigger this obligation value policy decisioning.

        - - + + + + + + + +
        FieldTypeLabelDescription
        obligationpolicy.Obligation

        nameobligation_id string

        Required

        valuesobligation_fqnstring

        value string

        triggersValueTriggerRequest repeated

        Optional -Registered Resource Values (when provided) must be alphanumeric strings, allowing hyphens and underscores but not as the first or last character. -The stored value will be normalized to lower case.

        namespace_idstringmetadatacommon.MetadataMutable

        Optional +Common metadata

        + + + + + +

        CreateObligationValueResponse

        +

        + + + + + + + + + + + + +
        FieldTypeLabelDescription
        valuepolicy.ObligationValue

        + + + + + +

        DeleteObligationRequest

        +

        + + + + + + + + - + - - + + - + @@ -14448,7 +15183,7 @@

        CreateRegist -

        CreateRegisteredResourceResponse

        +

        DeleteObligationResponse

        @@ -14459,8 +15194,8 @@

        CreateRegis

        - - + + @@ -14472,7 +15207,7 @@

        CreateRegis -

        CreateRegisteredResourceValueRequest

        +

        DeleteObligationValueRequest

        @@ -14483,34 +15218,17 @@

        CreateR

        - + - + - + - - - - - - - - - - - - - - - + @@ -14520,7 +15238,7 @@

        CreateR -

        CreateRegisteredResourceValueResponse

        +

        DeleteObligationValueResponse

        @@ -14532,7 +15250,7 @@

        Create

        - + @@ -14544,7 +15262,7 @@

        Create -

        DeleteRegisteredResourceRequest

        +

        GetObligationRequest

        @@ -14558,7 +15276,14 @@

        DeleteRegist

        - + + + + + + + + @@ -14568,7 +15293,7 @@

        DeleteRegist -

        DeleteRegisteredResourceResponse

        +

        GetObligationResponse

        @@ -14579,8 +15304,8 @@

        DeleteRegis

        - - + + @@ -14592,8 +15317,8 @@

        DeleteRegis -

        DeleteRegisteredResourceValueRequest

        -

        +

        GetObligationTriggerRequest

        +

        Triggers

        FieldTypeLabelDescription
        namespace_fqnid string

        metadatacommon.MetadataMutablefqnstring

        Optional -Common metadata

        resourcepolicy.RegisteredResourceobligationpolicy.Obligation

        resource_idid string

        Required

        valuefqn string

        Required

        action_attribute_valuesActionAttributeValuerepeated

        Optional -The associated Action <> AttributeValue combinations to be utilized in authorization/entitlement decisioning -(i.e. action read -> attribute value https://example.com/attr/department/value/marketing)

        metadatacommon.MetadataMutable

        Optional -Common metadata

        valuepolicy.RegisteredResourceValuepolicy.ObligationValue

        id string

        Required

        fqnstring

        resourcepolicy.RegisteredResourceobligationpolicy.Obligation

        @@ -14616,7 +15341,7 @@

        DeleteR -

        DeleteRegisteredResourceValueResponse

        +

        GetObligationTriggerResponse

        @@ -14627,8 +15352,8 @@

        Delete

        - - + + @@ -14640,8 +15365,8 @@

        Delete -

        GetRegisteredResourceRequest

        -

        +

        GetObligationValueRequest

        +

        Values

        valuepolicy.RegisteredResourceValuetriggerpolicy.ObligationTrigger

        @@ -14658,21 +15383,7 @@

        GetRegisteredRe

        - - - - - - - - - - - - - - - + @@ -14685,7 +15396,7 @@

        GetRegisteredRe -

        GetRegisteredResourceResponse

        +

        GetObligationValueResponse

        @@ -14696,8 +15407,8 @@

        GetRegisteredR

        - - + + @@ -14709,7 +15420,7 @@

        GetRegisteredR -

        GetRegisteredResourceValueRequest

        +

        GetObligationValuesByFQNsRequest

        @@ -14720,16 +15431,33 @@

        GetRegiste

        - + - + + +
        namestring

        namespace_fqnstring

        namespace_idfqn string

        resourcepolicy.RegisteredResourcevaluepolicy.ObligationValue

        idfqns stringrepeated

        + + + + + +

        GetObligationValuesByFQNsResponse

        +

        + + + + + + + + - - - + + + @@ -14740,7 +15468,7 @@

        GetRegiste -

        GetRegisteredResourceValueResponse

        +

        GetObligationValuesByFQNsResponse.FqnValueMapEntry

        @@ -14750,9 +15478,16 @@

        GetRegist

        + + + + + + + - + @@ -14764,7 +15499,7 @@

        GetRegist -

        GetRegisteredResourceValuesByFQNsRequest

        +

        GetObligationsByFQNsRequest

        @@ -14778,7 +15513,7 @@

        Get

        - + @@ -14788,7 +15523,7 @@

        Get -

        GetRegisteredResourceValuesByFQNsResponse

        +

        GetObligationsByFQNsResponse

        @@ -14799,8 +15534,8 @@

        Ge

        - - + + @@ -14812,7 +15547,7 @@

        Ge -

        GetRegisteredResourceValuesByFQNsResponse.FqnValueMapEntry

        +

        GetObligationsByFQNsResponse.FqnObligationMapEntry

        @@ -14831,7 +15566,7 @@

        policy.RegisteredResourceValue +

        @@ -14843,7 +15578,7 @@

        ListRegisteredResourceValuesRequest

        +

        ListObligationTriggersRequest

        @@ -14854,10 +15589,17 @@

        ListRegi

        - + - + + + + + + + + @@ -14874,7 +15616,7 @@

        ListRegi -

        ListRegisteredResourceValuesResponse

        +

        ListObligationTriggersResponse

        @@ -14885,8 +15627,8 @@

        ListReg

        - - + + @@ -14905,7 +15647,7 @@

        ListReg -

        ListRegisteredResourcesRequest

        +

        ListObligationsRequest

        @@ -14938,7 +15680,7 @@

        ListRegistere

        - + - - + + @@ -14992,7 +15734,7 @@

        ListRegister -

        RegisteredResourcesSort

        +

        ObligationsSort

        @@ -15004,7 +15746,7 @@

        RegisteredResourcesS

        - + @@ -15023,7 +15765,55 @@

        RegisteredResourcesS -

        UpdateRegisteredResourceRequest

        +

        RemoveObligationTriggerRequest

        +

        + + +
        FieldTypeLabelDescription
        fqnstringfqn_value_mapGetObligationValuesByFQNsResponse.FqnValueMapEntryrepeated

        keystring

        valuepolicy.RegisteredResourceValuepolicy.ObligationValue

        fqns string repeated

        Required

        fqn_value_mapGetRegisteredResourceValuesByFQNsResponse.FqnValueMapEntryfqn_obligation_mapGetObligationsByFQNsResponse.FqnObligationMapEntry repeated

        policy.Obligation

        resource_idnamespace_id string

        Optional

        namespace_fqnstring

        valuespolicy.RegisteredResourceValuetriggerspolicy.ObligationTrigger repeated

        sortRegisteredResourcesSortObligationsSort repeated

        Optional - CONSTRAINT: max 1 item Sort defaults: @@ -14961,7 +15703,7 @@

        ListRegistere -

        ListRegisteredResourcesResponse

        +

        ListObligationsResponse

        @@ -14972,8 +15714,8 @@

        ListRegister

        resourcespolicy.RegisteredResourceobligationspolicy.Obligation repeated

        fieldSortRegisteredResourcesTypeSortObligationsType

        + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        idstring

        Required

        + + + + + +

        RemoveObligationTriggerResponse

        +

        + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        triggerpolicy.ObligationTrigger

        + + + + + +

        UpdateObligationRequest

        @@ -15051,8 +15841,7 @@

        UpdateRegist metadata common.MetadataMutable -

        Optional -Common metadata

        +

        @@ -15069,7 +15858,7 @@

        UpdateRegist -

        UpdateRegisteredResourceResponse

        +

        UpdateObligationResponse

        @@ -15080,8 +15869,8 @@

        UpdateRegis - resource - policy.RegisteredResource + obligation + policy.Obligation

        @@ -15093,7 +15882,7 @@

        UpdateRegis -

        UpdateRegisteredResourceValueRequest

        +

        UpdateObligationValueRequest

        @@ -15118,11 +15907,11 @@

        UpdateR - action_attribute_values - ActionAttributeValue + triggers + ValueTriggerRequest repeated

        Optional -Action Attribute Values provided here will replace all existing records in the database. To delete all action attribute values, set this field to an empty list.

        +Obligation Triggers provided here will replace all existing records in the database.

        @@ -15147,7 +15936,7 @@

        UpdateR -

        UpdateRegisteredResourceValueResponse

        +

        UpdateObligationValueResponse

        @@ -15159,7 +15948,7 @@

        Update value - policy.RegisteredResourceValue + policy.ObligationValue

        @@ -15171,9 +15960,47 @@

        Update +

        ValueTriggerRequest

        +

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        actioncommon.IdNameIdentifier

        Required. The ID of the action that will trigger this obligation value policy decisioning.

        attribute_valuecommon.IdFqnIdentifier

        Required. The attribute value ID that will trigger this obligation value policy decisioning.

        contextpolicy.RequestContext

        Optional. The request context for this obligation value policy decisioning.

        + + + + + -

        SortRegisteredResourcesType

        +

        SortObligationsType

        @@ -15182,29 +16009,35 @@

        SortRegisteredRe

        - + - + - + - + + + + + + +
        SORT_REGISTERED_RESOURCES_TYPE_UNSPECIFIEDSORT_OBLIGATIONS_TYPE_UNSPECIFIED 0

        SORT_REGISTERED_RESOURCES_TYPE_NAMESORT_OBLIGATIONS_TYPE_NAME 1

        SORT_REGISTERED_RESOURCES_TYPE_CREATED_ATSORT_OBLIGATIONS_TYPE_FQN 2

        SORT_REGISTERED_RESOURCES_TYPE_UPDATED_ATSORT_OBLIGATIONS_TYPE_CREATED_AT 3

        SORT_OBLIGATIONS_TYPE_UPDATED_AT4

        @@ -15212,8 +16045,8 @@

        SortRegisteredRe -

        RegisteredResourcesService

        -

        Registered Resources

        +

        Service

        +

        Obligation Service

        /

        @@ -15221,95 +16054,219 @@

        RegisteredResourc

        - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Method NameRequest TypeResponse TypeDescription
        CreateRegisteredResourceCreateRegisteredResourceRequestCreateRegisteredResourceResponseListObligationsListObligationsRequestListObligationsResponse

        GetRegisteredResourceGetRegisteredResourceRequestGetRegisteredResourceResponseGetObligationGetObligationRequestGetObligationResponse

        ListRegisteredResourcesListRegisteredResourcesRequestListRegisteredResourcesResponseGetObligationsByFQNsGetObligationsByFQNsRequestGetObligationsByFQNsResponse

        UpdateRegisteredResourceUpdateRegisteredResourceRequestUpdateRegisteredResourceResponseCreateObligationCreateObligationRequestCreateObligationResponse

        DeleteRegisteredResourceDeleteRegisteredResourceRequestDeleteRegisteredResourceResponseUpdateObligationUpdateObligationRequestUpdateObligationResponse

        CreateRegisteredResourceValueCreateRegisteredResourceValueRequestCreateRegisteredResourceValueResponseDeleteObligationDeleteObligationRequestDeleteObligationResponse

        GetRegisteredResourceValueGetRegisteredResourceValueRequestGetRegisteredResourceValueResponseGetObligationValueGetObligationValueRequestGetObligationValueResponse

        GetRegisteredResourceValuesByFQNsGetRegisteredResourceValuesByFQNsRequestGetRegisteredResourceValuesByFQNsResponseGetObligationValuesByFQNsGetObligationValuesByFQNsRequestGetObligationValuesByFQNsResponse

        ListRegisteredResourceValuesListRegisteredResourceValuesRequestListRegisteredResourceValuesResponseCreateObligationValueCreateObligationValueRequestCreateObligationValueResponse

        UpdateRegisteredResourceValueUpdateRegisteredResourceValueRequestUpdateRegisteredResourceValueResponseUpdateObligationValueUpdateObligationValueRequestUpdateObligationValueResponse

        DeleteRegisteredResourceValueDeleteRegisteredResourceValueRequestDeleteRegisteredResourceValueResponseDeleteObligationValueDeleteObligationValueRequestDeleteObligationValueResponse

        GetObligationTriggerGetObligationTriggerRequestGetObligationTriggerResponse

        AddObligationTriggerAddObligationTriggerRequestAddObligationTriggerResponse

        RemoveObligationTriggerRemoveObligationTriggerRequestRemoveObligationTriggerResponse

        ListObligationTriggersListObligationTriggersRequestListObligationTriggersResponse

        - - - -
        -

        policy/resourcemapping/resource_mapping.proto

        Top -
        -

        + + + +

        Methods with idempotency_level option

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Method NameOption
        ListObligations

        NO_SIDE_EFFECTS

        GetObligation

        NO_SIDE_EFFECTS

        GetObligationsByFQNs

        NO_SIDE_EFFECTS

        GetObligationValue

        NO_SIDE_EFFECTS

        GetObligationValuesByFQNs

        NO_SIDE_EFFECTS

        GetObligationTrigger

        NO_SIDE_EFFECTS

        ListObligationTriggers

        NO_SIDE_EFFECTS

        + + + + +
        +

        policy/registeredresources/registered_resources.proto

        Top +
        +

        + + +

        ActionAttributeValue

        +

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        action_idstring

        action_namestring

        attribute_value_idstring

        attribute_value_fqnstring

        + + + -

        CreateResourceMappingGroupRequest

        +

        CreateRegisteredResourceRequest

        @@ -15320,31 +16277,41 @@

        CreateResource - namespace_id + name string -

        +

        Required

        - namespace_fqn + values + string + repeated +

        Optional +Registered Resource Values (when provided) must be alphanumeric strings, allowing hyphens and underscores but not as the first or last character. +The stored value will be normalized to lower case.

        + + + + namespace_id string

        - name + namespace_fqn string -

        Required

        +

        metadata common.MetadataMutable -

        Common metadata

        +

        Optional +Common metadata

        @@ -15354,7 +16321,7 @@

        CreateResource -

        CreateResourceMappingGroupResponse

        +

        CreateRegisteredResourceResponse

        @@ -15365,8 +16332,8 @@

        CreateResourc - resource_mapping_group - policy.ResourceMappingGroup + resource + policy.RegisteredResource

        @@ -15378,7 +16345,7 @@

        CreateResourc -

        CreateResourceMappingRequest

        +

        CreateRegisteredResourceValueRequest

        @@ -15389,48 +16356,34 @@

        CreateResourceMappi - attribute_value_id + resource_id string

        Required

        - terms - string - repeated -

        Required

        - - - - group_id - string - -

        Optional

        - - - - namespace_id + value string -

        Optional -The namespace that owns this resource mapping. If a group_id is provided, -this must match the group's namespace (and may be omitted to inherit it).

        +

        Required

        - namespace_fqn - string - + action_attribute_values + ActionAttributeValue + repeated

        Optional -Alternative to namespace_id; the FQN of the owning namespace.

        +The associated Action <> AttributeValue combinations to be utilized in authorization/entitlement decisioning +(i.e. action read -> attribute value https://example.com/attr/department/value/marketing)

        metadata common.MetadataMutable -

        Optional

        +

        Optional +Common metadata

        @@ -15440,7 +16393,7 @@

        CreateResourceMappi -

        CreateResourceMappingResponse

        +

        CreateRegisteredResourceValueResponse

        @@ -15451,8 +16404,8 @@

        CreateResourceMapp - resource_mapping - policy.ResourceMapping + value + policy.RegisteredResourceValue

        @@ -15464,7 +16417,7 @@

        CreateResourceMapp -

        DeleteResourceMappingGroupRequest

        +

        DeleteRegisteredResourceRequest

        @@ -15488,7 +16441,7 @@

        DeleteResource -

        DeleteResourceMappingGroupResponse

        +

        DeleteRegisteredResourceResponse

        @@ -15499,8 +16452,8 @@

        DeleteResourc - resource_mapping_group - policy.ResourceMappingGroup + resource + policy.RegisteredResource

        @@ -15512,7 +16465,7 @@

        DeleteResourc -

        DeleteResourceMappingRequest

        +

        DeleteRegisteredResourceValueRequest

        @@ -15536,7 +16489,7 @@

        DeleteResourceMappi -

        DeleteResourceMappingResponse

        +

        DeleteRegisteredResourceValueResponse

        @@ -15547,8 +16500,8 @@

        DeleteResourceMapp - resource_mapping - policy.ResourceMapping + value + policy.RegisteredResourceValue

        @@ -15560,7 +16513,7 @@

        DeleteResourceMapp -

        GetResourceMappingGroupRequest

        +

        GetRegisteredResourceRequest

        @@ -15574,7 +16527,28 @@

        GetResourceMappin id string -

        Required

        +

        + + + + name + string + +

        + + + + namespace_fqn + string + +

        + + + + namespace_id + string + +

        @@ -15584,7 +16558,7 @@

        GetResourceMappin -

        GetResourceMappingGroupResponse

        +

        GetRegisteredResourceResponse

        @@ -15595,8 +16569,8 @@

        GetResourceMappi - resource_mapping_group - policy.ResourceMappingGroup + resource + policy.RegisteredResource

        @@ -15608,7 +16582,7 @@

        GetResourceMappi -

        GetResourceMappingRequest

        +

        GetRegisteredResourceValueRequest

        @@ -15622,7 +16596,14 @@

        GetResourceMappingRequ id string -

        Required

        +

        + + + + fqn + string + +

        @@ -15632,7 +16613,7 @@

        GetResourceMappingRequ -

        GetResourceMappingResponse

        +

        GetRegisteredResourceValueResponse

        @@ -15643,8 +16624,8 @@

        GetResourceMappingRes - resource_mapping - policy.ResourceMapping + value + policy.RegisteredResourceValue

        @@ -15656,7 +16637,7 @@

        GetResourceMappingRes -

        ListResourceMappingGroupsRequest

        +

        GetRegisteredResourceValuesByFQNsRequest

        @@ -15667,24 +16648,10 @@

        ListResourceMap - namespace_id - string - -

        Optional

        - - - - namespace_fqn + fqns string - -

        Optional

        - - - - pagination - policy.PageRequest - -

        Optional

        + repeated +

        Required

        @@ -15694,7 +16661,7 @@

        ListResourceMap -

        ListResourceMappingGroupsResponse

        +

        GetRegisteredResourceValuesByFQNsResponse

        @@ -15705,19 +16672,12 @@

        ListResourceMa - resource_mapping_groups - policy.ResourceMappingGroup + fqn_value_map + GetRegisteredResourceValuesByFQNsResponse.FqnValueMapEntry repeated

        - - pagination - policy.PageResponse - -

        - - @@ -15725,7 +16685,7 @@

        ListResourceMa -

        ListResourceMappingsByGroupFqnsRequest

        +

        GetRegisteredResourceValuesByFQNsResponse.FqnValueMapEntry

        @@ -15736,11 +16696,17 @@

        ListResou - fqns + key string - repeated -

        Required -Structure of the RM Group FQN is 'https://<namespace>/resm/<group name>'

        + +

        + + + + value + policy.RegisteredResourceValue + +

        @@ -15750,7 +16716,7 @@

        ListResou -

        ListResourceMappingsByGroupFqnsResponse

        +

        ListRegisteredResourceValuesRequest

        @@ -15761,10 +16727,17 @@

        ListReso - fqn_resource_mapping_groups - ListResourceMappingsByGroupFqnsResponse.FqnResourceMappingGroupsEntry - repeated -

        + resource_id + string + +

        Optional

        + + + + pagination + policy.PageRequest + +

        Optional

        @@ -15774,7 +16747,7 @@

        ListReso -

        ListResourceMappingsByGroupFqnsResponse.FqnResourceMappingGroupsEntry

        +

        ListRegisteredResourceValuesResponse

        @@ -15785,15 +16758,15 @@

        string - + values + policy.RegisteredResourceValue + repeated

        - value - ResourceMappingsByGroup + pagination + policy.PageResponse

        @@ -15805,7 +16778,7 @@

        ListResourceMappingsRequest

        +

        ListRegisteredResourcesRequest

        @@ -15816,31 +16789,40 @@

        ListResourceMappings - group_id + namespace_id string -

        Optional

        +

        - namespace_id + namespace_fqn string -

        Optional -Filter the list to resource mappings owned by this namespace.

        +

        + + + + pagination + policy.PageRequest + +

        Optional

        - namespace_fqn - string - -

        Optional -Filter the list to resource mappings owned by this namespace.

        + sort + RegisteredResourcesSort + repeated +

        Optional - CONSTRAINT: max 1 item +Sort defaults: + - direction UNSPECIFIED defaults to DESC for the specified field + - field UNSPECIFIED defaults to created_at with the specified direction + - both UNSPECIFIED or sort omitted defaults to created_at DESC

        - pagination - policy.PageRequest + search + policy.Search

        Optional

        @@ -15852,7 +16834,7 @@

        ListResourceMappings -

        ListResourceMappingsResponse

        +

        ListRegisteredResourcesResponse

        @@ -15863,8 +16845,8 @@

        ListResourceMapping - resource_mappings - policy.ResourceMapping + resources + policy.RegisteredResource repeated

        @@ -15883,7 +16865,7 @@

        ListResourceMapping -

        ResourceMappingsByGroup

        +

        RegisteredResourcesSort

        @@ -15894,16 +16876,16 @@

        ResourceMappingsByGroup< - group - policy.ResourceMappingGroup + field + SortRegisteredResourcesType

        - mappings - policy.ResourceMapping - repeated + direction + policy.SortDirection +

        @@ -15914,7 +16896,7 @@

        ResourceMappingsByGroup< -

        UpdateResourceMappingGroupRequest

        +

        UpdateRegisteredResourceRequest

        @@ -15931,20 +16913,6 @@

        UpdateResource

        Required

        - - namespace_id - string - -

        Optional

        - - - - namespace_fqn - string - -

        Optional

        - - name string @@ -15956,7 +16924,8 @@

        UpdateResource metadata common.MetadataMutable -

        Common metadata

        +

        Optional +Common metadata

        @@ -15973,7 +16942,7 @@

        UpdateResource -

        UpdateResourceMappingGroupResponse

        +

        UpdateRegisteredResourceResponse

        @@ -15984,8 +16953,8 @@

        UpdateResourc - resource_mapping_group - policy.ResourceMappingGroup + resource + policy.RegisteredResource

        @@ -15997,7 +16966,7 @@

        UpdateResourc -

        UpdateResourceMappingRequest

        +

        UpdateRegisteredResourceValueRequest

        @@ -16015,41 +16984,18 @@

        UpdateResourceMappi - attribute_value_id + value string

        Optional

        - terms - string + action_attribute_values + ActionAttributeValue repeated -

        Optional

        - - - - group_id - string - -

        Optional

        - - - - namespace_id - string - -

        Optional -The namespace that owns this resource mapping. If a group_id is set on the -mapping, this must match the group's namespace.

        - - - - namespace_fqn - string -

        Optional -Alternative to namespace_id; the FQN of the owning namespace.

        +Action Attribute Values provided here will replace all existing records in the database. To delete all action attribute values, set this field to an empty list.

        @@ -16057,7 +17003,7 @@

        UpdateResourceMappi common.MetadataMutable

        Optional -Common Metadata

        +Common metadata

        @@ -16074,7 +17020,7 @@

        UpdateResourceMappi -

        UpdateResourceMappingResponse

        +

        UpdateRegisteredResourceValueResponse

        @@ -16085,8 +17031,8 @@

        UpdateResourceMapp - resource_mapping - policy.ResourceMapping + value + policy.RegisteredResourceValue

        @@ -16100,149 +17046,143 @@

        UpdateResourceMapp - - - - -

        ResourceMappingService

        -

        Resource Mapping Groups

        +

        SortRegisteredResourcesType

        +

        - + - - - + + - - - + + - - - + + - - - + + - - - - - - + +
        Method NameRequest TypeResponse TypeDescription
        NameNumberDescription
        ListResourceMappingGroupsListResourceMappingGroupsRequestListResourceMappingGroupsResponseSORT_REGISTERED_RESOURCES_TYPE_UNSPECIFIED0

        GetResourceMappingGroupGetResourceMappingGroupRequestGetResourceMappingGroupResponseSORT_REGISTERED_RESOURCES_TYPE_NAME1

        CreateResourceMappingGroupCreateResourceMappingGroupRequestCreateResourceMappingGroupResponseSORT_REGISTERED_RESOURCES_TYPE_CREATED_AT2

        UpdateResourceMappingGroupUpdateResourceMappingGroupRequestUpdateResourceMappingGroupResponseSORT_REGISTERED_RESOURCES_TYPE_UPDATED_AT3

        DeleteResourceMappingGroupDeleteResourceMappingGroupRequestDeleteResourceMappingGroupResponse

        + + + + + +

        RegisteredResourcesService

        +

        Registered Resources

        + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - -
        Method NameRequest TypeResponse TypeDescription
        ListResourceMappingsListResourceMappingsRequestListResourceMappingsResponseCreateRegisteredResourceCreateRegisteredResourceRequestCreateRegisteredResourceResponse

        ListResourceMappingsByGroupFqnsListResourceMappingsByGroupFqnsRequestListResourceMappingsByGroupFqnsResponseGetRegisteredResourceGetRegisteredResourceRequestGetRegisteredResourceResponse

        GetResourceMappingGetResourceMappingRequestGetResourceMappingResponseListRegisteredResourcesListRegisteredResourcesRequestListRegisteredResourcesResponse

        CreateResourceMappingCreateResourceMappingRequestCreateResourceMappingResponseUpdateRegisteredResourceUpdateRegisteredResourceRequestUpdateRegisteredResourceResponse

        UpdateResourceMappingUpdateResourceMappingRequestUpdateResourceMappingResponseDeleteRegisteredResourceDeleteRegisteredResourceRequestDeleteRegisteredResourceResponse

        DeleteResourceMappingDeleteResourceMappingRequestDeleteResourceMappingResponseCreateRegisteredResourceValueCreateRegisteredResourceValueRequestCreateRegisteredResourceValueResponse

        - - - - -

        Methods with idempotency_level option

        - - - - - - - - - - - + + + + - - + + + + - - + + + + - - + + + + - - + + + + - -
        Method NameOption
        ListResourceMappingGroups

        NO_SIDE_EFFECTS

        GetRegisteredResourceValueGetRegisteredResourceValueRequestGetRegisteredResourceValueResponse

        GetResourceMappingGroup

        NO_SIDE_EFFECTS

        GetRegisteredResourceValuesByFQNsGetRegisteredResourceValuesByFQNsRequestGetRegisteredResourceValuesByFQNsResponse

        ListResourceMappings

        NO_SIDE_EFFECTS

        ListRegisteredResourceValuesListRegisteredResourceValuesRequestListRegisteredResourceValuesResponse

        ListResourceMappingsByGroupFqns

        NO_SIDE_EFFECTS

        UpdateRegisteredResourceValueUpdateRegisteredResourceValueRequestUpdateRegisteredResourceValueResponse

        GetResourceMapping

        NO_SIDE_EFFECTS

        DeleteRegisteredResourceValueDeleteRegisteredResourceValueRequestDeleteRegisteredResourceValueResponse

        - + + +
        -

        policy/subjectmapping/subject_mapping.proto

        Top +

        policy/resourcemapping/resource_mapping.proto

        Top

        -

        CreateSubjectConditionSetRequest

        +

        CreateResourceMappingGroupRequest

        @@ -16253,24 +17193,31 @@

        CreateSubjectCon - subject_condition_set - SubjectConditionSetCreate + namespace_id + string + +

        + + + + namespace_fqn + string

        - namespace_id + name string -

        +

        Required

        - namespace_fqn - string + metadata + common.MetadataMutable -

        +

        Common metadata

        @@ -16280,7 +17227,7 @@

        CreateSubjectCon -

        CreateSubjectConditionSetResponse

        +

        CreateResourceMappingGroupResponse

        @@ -16291,8 +17238,8 @@

        CreateSubjectCo - subject_condition_set - policy.SubjectConditionSet + resource_mapping_group + policy.ResourceMappingGroup

        @@ -16304,7 +17251,7 @@

        CreateSubjectCo -

        CreateSubjectMappingRequest

        +

        CreateResourceMappingRequest

        @@ -16318,31 +17265,21 @@

        CreateSubjectMappingR attribute_value_id string -

        Required -Attribute Value to be mapped to

        +

        Required

        - actions - policy.Action + terms + string repeated -

        Required -The actions permitted by subjects in this mapping

        +

        Required

        - existing_subject_condition_set_id + group_id string -

        Either of the following: -Reuse existing SubjectConditionSet (NOTE: prioritized over new_subject_condition_set)

        - - - - new_subject_condition_set - SubjectConditionSetCreate - -

        Create new SubjectConditionSet (NOTE: ignored if existing_subject_condition_set_id is provided)

        +

        Optional

        @@ -16350,14 +17287,16 @@

        CreateSubjectMappingR string

        Optional -Namespace ID or FQN for the subject mapping

        +The namespace that owns this resource mapping. If a group_id is provided, +this must match the group's namespace (and may be omitted to inherit it).

        namespace_fqn string -

        +

        Optional +Alternative to namespace_id; the FQN of the owning namespace.

        @@ -16374,7 +17313,7 @@

        CreateSubjectMappingR -

        CreateSubjectMappingResponse

        +

        CreateResourceMappingResponse

        @@ -16385,8 +17324,8 @@

        CreateSubjectMapping - subject_mapping - policy.SubjectMapping + resource_mapping + policy.ResourceMapping

        @@ -16398,38 +17337,7 @@

        CreateSubjectMapping -

        DeleteAllUnmappedSubjectConditionSetsRequest

        -

        Prune any Subject Condition Sets not utilized within a Subject Mapping

        - - - - - -

        DeleteAllUnmappedSubjectConditionSetsResponse

        -

        - - - - - - - - - - - - - - - - -
        FieldTypeLabelDescription
        subject_condition_setspolicy.SubjectConditionSetrepeated

        Only IDs of any deleted Subject Condition Set provided

        - - - - - -

        DeleteSubjectConditionSetRequest

        +

        DeleteResourceMappingGroupRequest

        @@ -16453,7 +17361,7 @@

        DeleteSubjectCon -

        DeleteSubjectConditionSetResponse

        +

        DeleteResourceMappingGroupResponse

        @@ -16464,10 +17372,10 @@

        DeleteSubjectCo - subject_condition_set - policy.SubjectConditionSet + resource_mapping_group + policy.ResourceMappingGroup -

        Only ID of deleted Subject Condition Set provided

        +

        @@ -16477,7 +17385,7 @@

        DeleteSubjectCo -

        DeleteSubjectMappingRequest

        +

        DeleteResourceMappingRequest

        @@ -16501,7 +17409,7 @@

        DeleteSubjectMappingR -

        DeleteSubjectMappingResponse

        +

        DeleteResourceMappingResponse

        @@ -16512,10 +17420,10 @@

        DeleteSubjectMapping - subject_mapping - policy.SubjectMapping + resource_mapping + policy.ResourceMapping -

        Only ID of the updated Subject Mapping provided

        +

        @@ -16525,7 +17433,7 @@

        DeleteSubjectMapping -

        GetSubjectConditionSetRequest

        +

        GetResourceMappingGroupRequest

        @@ -16549,7 +17457,7 @@

        GetSubjectCondition -

        GetSubjectConditionSetResponse

        +

        GetResourceMappingGroupResponse

        @@ -16560,19 +17468,12 @@

        GetSubjectConditio - subject_condition_set - policy.SubjectConditionSet + resource_mapping_group + policy.ResourceMappingGroup

        - - associated_subject_mappings - policy.SubjectMapping - repeated -

        contextualized Subject Mappings associated with this SubjectConditionSet

        - - @@ -16580,7 +17481,7 @@

        GetSubjectConditio -

        GetSubjectMappingRequest

        +

        GetResourceMappingRequest

        @@ -16604,7 +17505,7 @@

        GetSubjectMappingRequest -

        GetSubjectMappingResponse

        +

        GetResourceMappingResponse

        @@ -16615,8 +17516,8 @@

        GetSubjectMappingRespon - subject_mapping - policy.SubjectMapping + resource_mapping + policy.ResourceMapping

        @@ -16628,7 +17529,7 @@

        GetSubjectMappingRespon -

        ListSubjectConditionSetsRequest

        +

        ListResourceMappingGroupsRequest

        @@ -16642,14 +17543,14 @@

        ListSubjectCondit namespace_id string -

        +

        Optional

        namespace_fqn string -

        +

        Optional

        @@ -16659,17 +17560,6 @@

        ListSubjectCondit

        Optional

        - - sort - SubjectConditionSetsSort - repeated -

        Optional - CONSTRAINT: max 1 item -Sort defaults: - - direction UNSPECIFIED defaults to DESC for the specified field - - field UNSPECIFIED defaults to created_at with the specified direction - - both UNSPECIFIED or sort omitted defaults to created_at DESC

        - - @@ -16677,7 +17567,7 @@

        ListSubjectCondit -

        ListSubjectConditionSetsResponse

        +

        ListResourceMappingGroupsResponse

        @@ -16688,8 +17578,8 @@

        ListSubjectCondi - subject_condition_sets - policy.SubjectConditionSet + resource_mapping_groups + policy.ResourceMappingGroup repeated

        @@ -16708,7 +17598,7 @@

        ListSubjectCondi -

        ListSubjectMappingsRequest

        +

        ListResourceMappingsByGroupFqnsRequest

        @@ -16719,35 +17609,11 @@

        ListSubjectMappingsReq - namespace_id - string - -

        - - - - namespace_fqn + fqns string - -

        - - - - pagination - policy.PageRequest - -

        Optional

        - - - - sort - SubjectMappingsSort repeated -

        Optional - CONSTRAINT: max 1 item -Sort defaults: - - direction UNSPECIFIED defaults to DESC for the specified field - - field UNSPECIFIED defaults to created_at with the specified direction - - both UNSPECIFIED or sort omitted defaults to created_at DESC

        +

        Required +Structure of the RM Group FQN is 'https://<namespace>/resm/<group name>'

        @@ -16757,7 +17623,7 @@

        ListSubjectMappingsReq -

        ListSubjectMappingsResponse

        +

        ListResourceMappingsByGroupFqnsResponse

        @@ -16768,19 +17634,12 @@

        ListSubjectMappingsRe - subject_mappings - policy.SubjectMapping + fqn_resource_mapping_groups + ListResourceMappingsByGroupFqnsResponse.FqnResourceMappingGroupsEntry repeated

        - - pagination - policy.PageResponse - -

        - - @@ -16788,8 +17647,8 @@

        ListSubjectMappingsRe -

        MatchSubjectMappingsRequest

        -

        MatchSubjectMappingsRequest liberally returns a list of SubjectMappings based on the provided SubjectProperties.

        The SubjectMappings are returned if an external selector field matches.

        +

        ListResourceMappingsByGroupFqnsResponse.FqnResourceMappingGroupsEntry

        +

        @@ -16799,33 +17658,16 @@

        MatchSubjectMappingsR

        - - - + + + - -
        subject_propertiespolicy.SubjectPropertyrepeatedkeystring

        - - - - - -

        MatchSubjectMappingsResponse

        -

        - - - - - - - - - - - + + + @@ -16836,7 +17678,7 @@

        MatchSubjectMappings -

        SubjectConditionSetCreate

        +

        ListResourceMappingsRequest

        @@ -16847,18 +17689,33 @@

        SubjectConditionSetCrea

        - - - - + + + + - - + + + + + + + + + + + + + + + + - + @@ -16868,7 +17725,7 @@

        SubjectConditionSetCrea -

        SubjectConditionSetsSort

        +

        ListResourceMappingsResponse

        @@ -16879,15 +17736,15 @@

        SubjectConditionSetsSort

        - - - + + + - - + + @@ -16899,7 +17756,7 @@

        SubjectConditionSetsSort -

        SubjectMappingsSort

        +

        ResourceMappingsByGroup

        @@ -16910,16 +17767,16 @@

        SubjectMappingsSort

        - - + + - - - + + + @@ -16930,7 +17787,7 @@

        SubjectMappingsSort

        -

        UpdateSubjectConditionSetRequest

        +

        UpdateResourceMappingGroupRequest

        @@ -16948,11 +17805,24 @@

        UpdateSubjectCon

        - - - - + + + + + + + + + + + + + + + + + + @@ -16976,7 +17846,7 @@

        UpdateSubjectCon -

        UpdateSubjectConditionSetResponse

        +

        UpdateResourceMappingGroupResponse

        @@ -16987,10 +17857,10 @@

        UpdateSubjectCo

        - - + + - + @@ -17000,7 +17870,7 @@

        UpdateSubjectCo -

        UpdateSubjectMappingRequest

        +

        UpdateResourceMappingRequest

        @@ -17018,26 +17888,49 @@

        UpdateSubjectMappingR

        - + - + - - + + + + + + + + + + + + + + + + +The namespace that owns this resource mapping. If a group_id is set on the +mapping, this must match the group's namespace.

        + + + + + + + - + @@ -17054,7 +17947,7 @@

        UpdateSubjectMappingR -

        UpdateSubjectMappingResponse

        +

        UpdateResourceMappingResponse

        @@ -17065,10 +17958,10 @@

        UpdateSubjectMapping

        - - + + - + @@ -17080,70 +17973,12 @@

        UpdateSubjectMapping -

        SortSubjectConditionSetsType

        -

        -
        FieldTypeLabelDescription
        subject_mappingspolicy.SubjectMappingrepeatedvalueResourceMappingsByGroup

        subject_setspolicy.SubjectSetrepeated

        Required

        group_idstring

        Optional

        metadatacommon.MetadataMutablenamespace_idstring

        Optional +Filter the list to resource mappings owned by this namespace.

        namespace_fqnstring

        Optional +Filter the list to resource mappings owned by this namespace.

        paginationpolicy.PageRequest

        Optional -Common metadata

        Optional

        fieldSortSubjectConditionSetsTyperesource_mappingspolicy.ResourceMappingrepeated

        directionpolicy.SortDirectionpaginationpolicy.PageResponse

        fieldSortSubjectMappingsTypegrouppolicy.ResourceMappingGroup

        directionpolicy.SortDirectionmappingspolicy.ResourceMappingrepeated

        subject_setspolicy.SubjectSetrepeated

        Optional -If provided, replaces entire existing structure of Subject Sets, Condition Groups, & Conditions

        namespace_idstring

        Optional

        namespace_fqnstring

        Optional

        namestring

        Optional

        subject_condition_setpolicy.SubjectConditionSetresource_mapping_grouppolicy.ResourceMappingGroup

        Only ID of updated Subject Condition Set provided

        subject_condition_set_idattribute_value_id string

        Optional -Replaces the existing SubjectConditionSet id with a new one

        Optional

        actionspolicy.Actiontermsstring repeated

        Optional

        group_idstring

        Optional

        namespace_idstring

        Optional -Replaces entire list of actions permitted by subjects

        namespace_fqnstring

        Optional +Alternative to namespace_id; the FQN of the owning namespace.

        metadata common.MetadataMutable

        Common metadata

        Optional +Common Metadata

        subject_mappingpolicy.SubjectMappingresource_mappingpolicy.ResourceMapping

        Only ID of the updated Subject Mapping provided

        - - - - - - - - - - - - - - - - - - - - - - - - -
        NameNumberDescription
        SORT_SUBJECT_CONDITION_SETS_TYPE_UNSPECIFIED0

        SORT_SUBJECT_CONDITION_SETS_TYPE_CREATED_AT1

        SORT_SUBJECT_CONDITION_SETS_TYPE_UPDATED_AT2

        - -

        SortSubjectMappingsType

        -

        - - - - - - - - - - - - - - - - - - - - - - - - - -
        NameNumberDescription
        SORT_SUBJECT_MAPPINGS_TYPE_UNSPECIFIED0

        SORT_SUBJECT_MAPPINGS_TYPE_CREATED_AT1

        SORT_SUBJECT_MAPPINGS_TYPE_UPDATED_AT2

        - -

        SubjectMappingService

        -

        +

        ResourceMappingService

        +

        Resource Mapping Groups

        @@ -17151,86 +17986,79 @@

        SubjectMappingService

        - - - - - - - - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + @@ -17251,22 +18079,27 @@

        Methods with idempotency_level option

        - + - + - + - + + + + + + diff --git a/docs/openapi/policy/actions/actions.openapi.yaml b/docs/openapi/policy/actions/actions.openapi.yaml index da57657292..26eb70634f 100644 --- a/docs/openapi/policy/actions/actions.openapi.yaml +++ b/docs/openapi/policy/actions/actions.openapi.yaml @@ -222,6 +222,28 @@ components: - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED - CONDITION_BOOLEAN_TYPE_ENUM_AND - CONDITION_BOOLEAN_TYPE_ENUM_OR + policy.ConditionComparisonOperatorEnum: + type: string + title: ConditionComparisonOperatorEnum + enum: + - CONDITION_COMPARISON_OPERATOR_ENUM_UNSPECIFIED + - CONDITION_COMPARISON_OPERATOR_ENUM_EQUALS + - CONDITION_COMPARISON_OPERATOR_ENUM_CONTAINS + - CONDITION_COMPARISON_OPERATOR_ENUM_STARTS_WITH + - CONDITION_COMPARISON_OPERATOR_ENUM_ENDS_WITH + description: |- + How a selector result is compared against a comparison value. Replaces the all-in-one + SubjectMappingOperatorEnum by separating the comparison from the quantifier (see + ConditionQuantifierEnum) and case sensitivity. + policy.ConditionQuantifierEnum: + type: string + title: ConditionQuantifierEnum + enum: + - CONDITION_QUANTIFIER_ENUM_UNSPECIFIED + - CONDITION_QUANTIFIER_ENUM_ANY + - CONDITION_QUANTIFIER_ENUM_ALL + - CONDITION_QUANTIFIER_ENUM_NONE + description: How matches are aggregated across the comparison set (subject_external_values). policy.KasPublicKeyAlgEnum: type: string title: KasPublicKeyAlgEnum @@ -518,7 +540,10 @@ components: from idP/LDAP) operator: title: operator - description: the evaluation operator of relation + description: |- + Deprecated: use comparison + quantifier (+ case_insensitive) instead. Normalized to the + decomposed fields in the service layer for backward compatibility. + deprecated: true $ref: '#/components/schemas/policy.SubjectMappingOperatorEnum' subjectExternalValues: type: array @@ -531,10 +556,21 @@ components: list of comparison values for the result of applying the subject_external_selector_value on a flattened Entity Representation (Subject), evaluated by the operator + comparison: + title: comparison + description: how each selector result is compared to subject_external_values entries + $ref: '#/components/schemas/policy.ConditionComparisonOperatorEnum' + quantifier: + title: quantifier + description: how matches are aggregated across subject_external_values + $ref: '#/components/schemas/policy.ConditionQuantifierEnum' + caseInsensitive: + type: boolean + title: case_insensitive + description: when true, comparison is case-insensitive (default false = case-sensitive) title: Condition required: - subjectExternalSelectorValue - - operator additionalProperties: false description: |- * diff --git a/docs/openapi/policy/attributes/attributes.openapi.yaml b/docs/openapi/policy/attributes/attributes.openapi.yaml index cbdde67a8c..f8ce5b2bab 100644 --- a/docs/openapi/policy/attributes/attributes.openapi.yaml +++ b/docs/openapi/policy/attributes/attributes.openapi.yaml @@ -741,6 +741,28 @@ components: - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED - CONDITION_BOOLEAN_TYPE_ENUM_AND - CONDITION_BOOLEAN_TYPE_ENUM_OR + policy.ConditionComparisonOperatorEnum: + type: string + title: ConditionComparisonOperatorEnum + enum: + - CONDITION_COMPARISON_OPERATOR_ENUM_UNSPECIFIED + - CONDITION_COMPARISON_OPERATOR_ENUM_EQUALS + - CONDITION_COMPARISON_OPERATOR_ENUM_CONTAINS + - CONDITION_COMPARISON_OPERATOR_ENUM_STARTS_WITH + - CONDITION_COMPARISON_OPERATOR_ENUM_ENDS_WITH + description: |- + How a selector result is compared against a comparison value. Replaces the all-in-one + SubjectMappingOperatorEnum by separating the comparison from the quantifier (see + ConditionQuantifierEnum) and case sensitivity. + policy.ConditionQuantifierEnum: + type: string + title: ConditionQuantifierEnum + enum: + - CONDITION_QUANTIFIER_ENUM_UNSPECIFIED + - CONDITION_QUANTIFIER_ENUM_ANY + - CONDITION_QUANTIFIER_ENUM_ALL + - CONDITION_QUANTIFIER_ENUM_NONE + description: How matches are aggregated across the comparison set (subject_external_values). policy.KasPublicKeyAlgEnum: type: string title: KasPublicKeyAlgEnum @@ -1091,7 +1113,10 @@ components: from idP/LDAP) operator: title: operator - description: the evaluation operator of relation + description: |- + Deprecated: use comparison + quantifier (+ case_insensitive) instead. Normalized to the + decomposed fields in the service layer for backward compatibility. + deprecated: true $ref: '#/components/schemas/policy.SubjectMappingOperatorEnum' subjectExternalValues: type: array @@ -1104,10 +1129,21 @@ components: list of comparison values for the result of applying the subject_external_selector_value on a flattened Entity Representation (Subject), evaluated by the operator + comparison: + title: comparison + description: how each selector result is compared to subject_external_values entries + $ref: '#/components/schemas/policy.ConditionComparisonOperatorEnum' + quantifier: + title: quantifier + description: how matches are aggregated across subject_external_values + $ref: '#/components/schemas/policy.ConditionQuantifierEnum' + caseInsensitive: + type: boolean + title: case_insensitive + description: when true, comparison is case-insensitive (default false = case-sensitive) title: Condition required: - subjectExternalSelectorValue - - operator additionalProperties: false description: |- * diff --git a/docs/openapi/policy/dynamicvaluemapping/dynamic_value_mapping.openapi.yaml b/docs/openapi/policy/dynamicvaluemapping/dynamic_value_mapping.openapi.yaml index c5030e41ca..6bdb48ddf9 100644 --- a/docs/openapi/policy/dynamicvaluemapping/dynamic_value_mapping.openapi.yaml +++ b/docs/openapi/policy/dynamicvaluemapping/dynamic_value_mapping.openapi.yaml @@ -2,12 +2,12 @@ openapi: 3.1.0 info: title: policy.dynamicvaluemapping paths: - /policy.dynamicvaluemapping.DynamicValueMappingService/CreateDynamicValueMapping: + /policy.dynamicvaluemapping.DynamicValueMappingService/ListDynamicValueMappings: post: tags: - policy.dynamicvaluemapping.DynamicValueMappingService - summary: CreateDynamicValueMapping - operationId: policy.dynamicvaluemapping.DynamicValueMappingService.CreateDynamicValueMapping + summary: ListDynamicValueMappings + operationId: policy.dynamicvaluemapping.DynamicValueMappingService.ListDynamicValueMappings parameters: - name: Connect-Protocol-Version in: header @@ -22,7 +22,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/policy.dynamicvaluemapping.CreateDynamicValueMappingRequest' + $ref: '#/components/schemas/policy.dynamicvaluemapping.ListDynamicValueMappingsRequest' required: true responses: default: @@ -36,13 +36,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/policy.dynamicvaluemapping.CreateDynamicValueMappingResponse' - /policy.dynamicvaluemapping.DynamicValueMappingService/DeleteDynamicValueMapping: + $ref: '#/components/schemas/policy.dynamicvaluemapping.ListDynamicValueMappingsResponse' + /policy.dynamicvaluemapping.DynamicValueMappingService/GetDynamicValueMapping: post: tags: - policy.dynamicvaluemapping.DynamicValueMappingService - summary: DeleteDynamicValueMapping - operationId: policy.dynamicvaluemapping.DynamicValueMappingService.DeleteDynamicValueMapping + summary: GetDynamicValueMapping + operationId: policy.dynamicvaluemapping.DynamicValueMappingService.GetDynamicValueMapping parameters: - name: Connect-Protocol-Version in: header @@ -57,7 +57,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/policy.dynamicvaluemapping.DeleteDynamicValueMappingRequest' + $ref: '#/components/schemas/policy.dynamicvaluemapping.GetDynamicValueMappingRequest' required: true responses: default: @@ -71,13 +71,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/policy.dynamicvaluemapping.DeleteDynamicValueMappingResponse' - /policy.dynamicvaluemapping.DynamicValueMappingService/GetDynamicValueMapping: + $ref: '#/components/schemas/policy.dynamicvaluemapping.GetDynamicValueMappingResponse' + /policy.dynamicvaluemapping.DynamicValueMappingService/CreateDynamicValueMapping: post: tags: - policy.dynamicvaluemapping.DynamicValueMappingService - summary: GetDynamicValueMapping - operationId: policy.dynamicvaluemapping.DynamicValueMappingService.GetDynamicValueMapping + summary: CreateDynamicValueMapping + operationId: policy.dynamicvaluemapping.DynamicValueMappingService.CreateDynamicValueMapping parameters: - name: Connect-Protocol-Version in: header @@ -92,7 +92,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/policy.dynamicvaluemapping.GetDynamicValueMappingRequest' + $ref: '#/components/schemas/policy.dynamicvaluemapping.CreateDynamicValueMappingRequest' required: true responses: default: @@ -106,13 +106,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/policy.dynamicvaluemapping.GetDynamicValueMappingResponse' - /policy.dynamicvaluemapping.DynamicValueMappingService/ListDynamicValueMappings: + $ref: '#/components/schemas/policy.dynamicvaluemapping.CreateDynamicValueMappingResponse' + /policy.dynamicvaluemapping.DynamicValueMappingService/UpdateDynamicValueMapping: post: tags: - policy.dynamicvaluemapping.DynamicValueMappingService - summary: ListDynamicValueMappings - operationId: policy.dynamicvaluemapping.DynamicValueMappingService.ListDynamicValueMappings + summary: UpdateDynamicValueMapping + operationId: policy.dynamicvaluemapping.DynamicValueMappingService.UpdateDynamicValueMapping parameters: - name: Connect-Protocol-Version in: header @@ -127,7 +127,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/policy.dynamicvaluemapping.ListDynamicValueMappingsRequest' + $ref: '#/components/schemas/policy.dynamicvaluemapping.UpdateDynamicValueMappingRequest' required: true responses: default: @@ -141,13 +141,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/policy.dynamicvaluemapping.ListDynamicValueMappingsResponse' - /policy.dynamicvaluemapping.DynamicValueMappingService/UpdateDynamicValueMapping: + $ref: '#/components/schemas/policy.dynamicvaluemapping.UpdateDynamicValueMappingResponse' + /policy.dynamicvaluemapping.DynamicValueMappingService/DeleteDynamicValueMapping: post: tags: - policy.dynamicvaluemapping.DynamicValueMappingService - summary: UpdateDynamicValueMapping - operationId: policy.dynamicvaluemapping.DynamicValueMappingService.UpdateDynamicValueMapping + summary: DeleteDynamicValueMapping + operationId: policy.dynamicvaluemapping.DynamicValueMappingService.DeleteDynamicValueMapping parameters: - name: Connect-Protocol-Version in: header @@ -162,7 +162,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/policy.dynamicvaluemapping.UpdateDynamicValueMappingRequest' + $ref: '#/components/schemas/policy.dynamicvaluemapping.DeleteDynamicValueMappingRequest' required: true responses: default: @@ -176,9 +176,125 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/policy.dynamicvaluemapping.UpdateDynamicValueMappingResponse' + $ref: '#/components/schemas/policy.dynamicvaluemapping.DeleteDynamicValueMappingResponse' components: schemas: + common.MetadataUpdateEnum: + type: string + title: MetadataUpdateEnum + enum: + - METADATA_UPDATE_ENUM_UNSPECIFIED + - METADATA_UPDATE_ENUM_EXTEND + - METADATA_UPDATE_ENUM_REPLACE + policy.Action.StandardAction: + type: string + title: StandardAction + enum: + - STANDARD_ACTION_UNSPECIFIED + - STANDARD_ACTION_DECRYPT + - STANDARD_ACTION_TRANSMIT + policy.Algorithm: + type: string + title: Algorithm + enum: + - ALGORITHM_UNSPECIFIED + - ALGORITHM_RSA_2048 + - ALGORITHM_RSA_4096 + - ALGORITHM_EC_P256 + - ALGORITHM_EC_P384 + - ALGORITHM_EC_P521 + - ALGORITHM_HPQT_XWING + - ALGORITHM_HPQT_SECP256R1_MLKEM768 + - ALGORITHM_HPQT_SECP384R1_MLKEM1024 + description: Supported key algorithms. + policy.AttributeRuleTypeEnum: + type: string + title: AttributeRuleTypeEnum + enum: + - ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED + - ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF + - ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF + - ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY + policy.ConditionBooleanTypeEnum: + type: string + title: ConditionBooleanTypeEnum + enum: + - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED + - CONDITION_BOOLEAN_TYPE_ENUM_AND + - CONDITION_BOOLEAN_TYPE_ENUM_OR + policy.ConditionComparisonOperatorEnum: + type: string + title: ConditionComparisonOperatorEnum + enum: + - CONDITION_COMPARISON_OPERATOR_ENUM_UNSPECIFIED + - CONDITION_COMPARISON_OPERATOR_ENUM_EQUALS + - CONDITION_COMPARISON_OPERATOR_ENUM_CONTAINS + - CONDITION_COMPARISON_OPERATOR_ENUM_STARTS_WITH + - CONDITION_COMPARISON_OPERATOR_ENUM_ENDS_WITH + description: |- + How a selector result is compared against a comparison value. Replaces the all-in-one + SubjectMappingOperatorEnum by separating the comparison from the quantifier (see + ConditionQuantifierEnum) and case sensitivity. + policy.ConditionQuantifierEnum: + type: string + title: ConditionQuantifierEnum + enum: + - CONDITION_QUANTIFIER_ENUM_UNSPECIFIED + - CONDITION_QUANTIFIER_ENUM_ANY + - CONDITION_QUANTIFIER_ENUM_ALL + - CONDITION_QUANTIFIER_ENUM_NONE + description: How matches are aggregated across the comparison set (subject_external_values). + policy.KasPublicKeyAlgEnum: + type: string + title: KasPublicKeyAlgEnum + enum: + - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED + - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048 + - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096 + - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1 + - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1 + - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1 + - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING + - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768 + - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024 + policy.SortDirection: + type: string + title: SortDirection + enum: + - SORT_DIRECTION_UNSPECIFIED + - SORT_DIRECTION_ASC + - SORT_DIRECTION_DESC + description: |- + Sorting direction shared across list APIs. + When the 'sort' field is omitted or the chosen sort 'field' is UNSPECIFIED, + the endpoint's request message defines the default ordering; see the + specific List* request docs. + policy.SourceType: + type: string + title: SourceType + enum: + - SOURCE_TYPE_UNSPECIFIED + - SOURCE_TYPE_INTERNAL + - SOURCE_TYPE_EXTERNAL + description: |- + Describes whether this kas is managed by the organization or if they imported + the kas information from an external party. These two modes are necessary in order + to encrypt a tdf dek with an external parties kas public key. + policy.SubjectMappingOperatorEnum: + type: string + title: SubjectMappingOperatorEnum + enum: + - SUBJECT_MAPPING_OPERATOR_ENUM_UNSPECIFIED + - SUBJECT_MAPPING_OPERATOR_ENUM_IN + - SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN + - SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS + policy.dynamicvaluemapping.SortDynamicValueMappingsType: + type: string + title: SortDynamicValueMappingsType + enum: + - SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_UNSPECIFIED + - SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_CREATED_AT + - SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_UPDATED_AT common.Metadata: type: object properties: @@ -234,82 +350,6 @@ components: title: value title: LabelsEntry additionalProperties: false - common.MetadataUpdateEnum: - type: string - title: MetadataUpdateEnum - enum: - - METADATA_UPDATE_ENUM_UNSPECIFIED - - METADATA_UPDATE_ENUM_EXTEND - - METADATA_UPDATE_ENUM_REPLACE - connect-protocol-version: - type: number - title: Connect-Protocol-Version - enum: - - 1 - description: Define the version of the Connect protocol - const: 1 - connect-timeout-header: - type: number - title: Connect-Timeout-Ms - description: Define the timeout, in ms - connect.error: - type: object - properties: - code: - type: string - examples: - - not_found - enum: - - canceled - - unknown - - invalid_argument - - deadline_exceeded - - not_found - - already_exists - - permission_denied - - resource_exhausted - - failed_precondition - - aborted - - out_of_range - - unimplemented - - internal - - unavailable - - data_loss - - unauthenticated - description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. - message: - type: string - description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client. - details: - type: array - items: - $ref: '#/components/schemas/connect.error_details.Any' - description: A list of messages that carry the error details. There is no limit on the number of messages. - title: Connect Error - additionalProperties: true - description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation' - connect.error_details.Any: - type: object - properties: - type: - type: string - description: 'A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field.' - value: - type: string - format: binary - description: The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field. - debug: - oneOf: - - type: object - title: Any - additionalProperties: true - description: Detailed error information. - discriminator: - propertyName: type - title: Debug - description: Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic. - additionalProperties: true - description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details. google.protobuf.BoolValue: type: boolean description: |- @@ -322,8 +362,8 @@ components: google.protobuf.Timestamp: type: string examples: - - "2023-01-15T01:30:15.01Z" - - "2024-12-25T12:00:00Z" + - 1s + - 1.000340012s format: date-time description: |- A Timestamp represents a point in time independent of any time zone or local @@ -417,65 +457,41 @@ components: ) to obtain a formatter capable of generating timestamps in this format. policy.Action: type: object - allOf: + oneOf: - properties: - id: - type: string - title: id - description: Generated uuid in database - name: + custom: type: string - title: name - namespace: - title: namespace - description: Namespace context for this action - $ref: '#/components/schemas/policy.Namespace' - metadata: - title: metadata - $ref: '#/components/schemas/common.Metadata' - - oneOf: - - type: object - properties: - custom: - type: string - title: custom - description: Deprecated title: custom - required: - - custom - - type: object - properties: - standard: - title: standard - description: Deprecated - $ref: '#/components/schemas/policy.Action.StandardAction' + description: Deprecated + title: custom + required: + - custom + - properties: + standard: title: standard - required: - - standard + description: Deprecated + $ref: '#/components/schemas/policy.Action.StandardAction' + title: standard + required: + - standard + properties: + id: + type: string + title: id + description: Generated uuid in database + name: + type: string + title: name + namespace: + title: namespace + description: Namespace context for this action + $ref: '#/components/schemas/policy.Namespace' + metadata: + title: metadata + $ref: '#/components/schemas/common.Metadata' title: Action additionalProperties: false description: An action an entity can take - policy.Action.StandardAction: - type: string - title: StandardAction - enum: - - STANDARD_ACTION_UNSPECIFIED - - STANDARD_ACTION_DECRYPT - - STANDARD_ACTION_TRANSMIT - policy.Algorithm: - type: string - title: Algorithm - enum: - - ALGORITHM_UNSPECIFIED - - ALGORITHM_RSA_2048 - - ALGORITHM_RSA_4096 - - ALGORITHM_EC_P256 - - ALGORITHM_EC_P384 - - ALGORITHM_EC_P521 - - ALGORITHM_HPQT_XWING - - ALGORITHM_HPQT_SECP256R1_MLKEM768 - - ALGORITHM_HPQT_SECP384R1_MLKEM1024 - description: Supported key algorithms. policy.Attribute: type: object properties: @@ -532,14 +548,6 @@ components: required: - rule additionalProperties: false - policy.AttributeRuleTypeEnum: - type: string - title: AttributeRuleTypeEnum - enum: - - ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED - - ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF - - ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF - - ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY policy.Condition: type: object properties: @@ -551,34 +559,42 @@ components: from idP/LDAP) operator: title: operator - description: the evaluation operator of relation + description: |- + Deprecated: use comparison + quantifier (+ case_insensitive) instead. Normalized to the + decomposed fields in the service layer for backward compatibility. + deprecated: true $ref: '#/components/schemas/policy.SubjectMappingOperatorEnum' subjectExternalValues: type: array items: type: string + minItems: 1 title: subject_external_values minItems: 1 description: |- list of comparison values for the result of applying the subject_external_selector_value on a flattened Entity Representation (Subject), evaluated by the operator + comparison: + title: comparison + description: how each selector result is compared to subject_external_values entries + $ref: '#/components/schemas/policy.ConditionComparisonOperatorEnum' + quantifier: + title: quantifier + description: how matches are aggregated across subject_external_values + $ref: '#/components/schemas/policy.ConditionQuantifierEnum' + caseInsensitive: + type: boolean + title: case_insensitive + description: when true, comparison is case-insensitive (default false = case-sensitive) title: Condition required: - subjectExternalSelectorValue - - operator additionalProperties: false description: |- * A Condition defines a rule of - policy.ConditionBooleanTypeEnum: - type: string - title: ConditionBooleanTypeEnum - enum: - - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED - - CONDITION_BOOLEAN_TYPE_ENUM_AND - - CONDITION_BOOLEAN_TYPE_ENUM_OR policy.ConditionGroup: type: object properties: @@ -639,19 +655,6 @@ components: authority from a concrete Attribute Value to the Attribute Definition: at decision time the value_resolver compares the requested resource value segment against the entity representation, avoiding pre-provisioning a value + subject mapping per discrete value. - policy.DynamicValueOperatorEnum: - type: string - title: DynamicValueOperatorEnum - enum: - - DYNAMIC_VALUE_OPERATOR_ENUM_UNSPECIFIED - - DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN - - DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN_CONTAINS - description: |- - Operators for dynamic, definition-level value entitlement. Unlike - SubjectMappingOperatorEnum, whose right-hand operand is a static list authored into - policy, a DynamicValueOperatorEnum's right-hand operand is the requested resource's - attribute value segment, supplied at decision time. Each value is the inversion of its - static SubjectMappingOperatorEnum counterpart. policy.DynamicValueResolver: type: object properties: @@ -661,19 +664,26 @@ components: description: |- a selector for a field value on a flattened Entity Representation (such as from idP/LDAP), e.g. ".patientAssignments[]" - operator: - title: operator - description: the dynamic operator comparing the selector result to the resource value segment - $ref: '#/components/schemas/policy.DynamicValueOperatorEnum' + comparison: + title: comparison + description: |- + how the requested resource value segment is compared against each value the selector + resolves from the entity representation + $ref: '#/components/schemas/policy.ConditionComparisonOperatorEnum' + caseInsensitive: + type: boolean + title: case_insensitive + description: when true, comparison is case-insensitive (default false = case-sensitive) title: DynamicValueResolver required: - subjectExternalSelectorValue - - operator + - comparison additionalProperties: false description: |- - Definition Value Resolver: the dynamic half of a DynamicValueMapping. It - resolves a selector against the entity representation and compares the result to the - requested resource value segment using a DynamicValueOperatorEnum. + Dynamic Value Resolver: the dynamic half of a DynamicValueMapping. It resolves a selector + against the entity representation, then tests whether any resolved entity value matches the + requested resource value segment under comparison. The match is inherently existential over + the resolved entity values, so no quantifier is carried here. policy.KasPublicKey: type: object properties: @@ -692,7 +702,7 @@ components: alg: not: enum: - - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED + - 0 title: alg description: |- A known algorithm type with any additional parameters encoded. @@ -704,19 +714,6 @@ components: description: |- Deprecated A KAS public key and some associated metadata for further identifcation - policy.KasPublicKeyAlgEnum: - type: string - title: KasPublicKeyAlgEnum - enum: - - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED - - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048 - - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096 - - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1 - - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1 - - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1 - - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING - - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768 - - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024 policy.KasPublicKeySet: type: object properties: @@ -739,9 +736,13 @@ components: uri: type: string title: uri - description: | + description: |+ Address of a KAS instance - uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes. + URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.: + ``` + this.matches('^https?://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(:[0-9]+)?(/.*)?$') + ``` + publicKey: title: public_key description: 'Deprecated: KAS can have multiple key pairs' @@ -939,8 +940,7 @@ components: policy.PublicKey: type: object oneOf: - - type: object - properties: + - properties: cached: title: cached description: public key with additional information. Current preferred version @@ -948,14 +948,17 @@ components: title: cached required: - cached - - type: object - properties: + - properties: remote: type: string title: remote - description: | + description: |+ kas public key url - optional since can also be retrieved via public key - uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes. + URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.: + ``` + this.matches('^https://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(/.*)?$') + ``` + title: remote required: - remote @@ -993,6 +996,13 @@ components: group: title: group $ref: '#/components/schemas/policy.ResourceMappingGroup' + namespace: + title: namespace + description: |- + The namespace that optionally owns this resource mapping. When the mapping + belongs to a group, this matches the group's namespace. The mapped + attribute value may belong to a different namespace. + $ref: '#/components/schemas/policy.Namespace' title: ResourceMapping required: - attributeValue @@ -1063,29 +1073,6 @@ components: title: pem title: SimpleKasPublicKey additionalProperties: false - policy.SortDirection: - type: string - title: SortDirection - enum: - - SORT_DIRECTION_UNSPECIFIED - - SORT_DIRECTION_ASC - - SORT_DIRECTION_DESC - description: |- - Sorting direction shared across list APIs. - When the 'sort' field is omitted or the chosen sort 'field' is UNSPECIFIED, - the endpoint's request message defines the default ordering; see the - specific List* request docs. - policy.SourceType: - type: string - title: SourceType - enum: - - SOURCE_TYPE_UNSPECIFIED - - SOURCE_TYPE_INTERNAL - - SOURCE_TYPE_EXTERNAL - description: |- - Describes whether this kas is managed by the organization or if they imported - the kas information from an external party. These two modes are necessary in order - to encrypt a tdf dek with an external parties kas public key. policy.SubjectConditionSet: type: object properties: @@ -1151,14 +1138,6 @@ components: description: |- Subject Mapping: A Policy assigning Subject Set(s) to a permitted attribute value + action(s) combination - policy.SubjectMappingOperatorEnum: - type: string - title: SubjectMappingOperatorEnum - enum: - - SUBJECT_MAPPING_OPERATOR_ENUM_UNSPECIFIED - - SUBJECT_MAPPING_OPERATOR_ENUM_IN - - SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN - - SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS policy.SubjectSet: type: object properties: @@ -1227,12 +1206,6 @@ components: additionalProperties: false policy.dynamicvaluemapping.CreateDynamicValueMappingRequest: type: object - allOf: - - oneOf: - - required: - - attributeDefinitionId - - required: - - attributeDefinitionFqn properties: attributeDefinitionId: type: string @@ -1253,15 +1226,23 @@ components: $ref: '#/components/schemas/policy.Action' title: actions minItems: 1 - description: | + description: |+ Required: actions permitted on a matched value - action_name_or_id_not_empty // Action name or ID must not be empty if provided + Action name or ID must not be empty if provided: + ``` + this.all(item, item.name != '' || item.id != '') + ``` + existingSubjectConditionSetId: type: string title: existing_subject_condition_set_id - description: | + description: |+ Optional static pre-gate. Reuse an existing SubjectConditionSet (prioritized) ... - optional_uuid_format // Optional field must be a valid UUID + Optional field must be a valid UUID: + ``` + size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}') + ``` + newSubjectConditionSet: title: new_subject_condition_set description: '... or create a new one (ignored if existing_subject_condition_set_id is provided)' @@ -1355,9 +1336,13 @@ components: attributeDefinitionId: type: string title: attribute_definition_id - description: | + description: |+ Optional: Attribute Definition ID to filter by - optional_uuid_format // Optional field must be a valid UUID + Optional field must be a valid UUID: + ``` + size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}') + ``` + pagination: title: pagination description: Optional @@ -1384,13 +1369,6 @@ components: $ref: '#/components/schemas/policy.PageResponse' title: ListDynamicValueMappingsResponse additionalProperties: false - policy.dynamicvaluemapping.SortDynamicValueMappingsType: - type: string - title: SortDynamicValueMappingsType - enum: - - SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_UNSPECIFIED - - SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_CREATED_AT - - SORT_DYNAMIC_VALUE_MAPPINGS_TYPE_UPDATED_AT policy.dynamicvaluemapping.UpdateDynamicValueMappingRequest: type: object properties: @@ -1406,17 +1384,25 @@ components: subjectConditionSetId: type: string title: subject_condition_set_id - description: | + description: |+ Optional: replace the static pre-gate SubjectConditionSet by id - optional_uuid_format // Optional field must be a valid UUID + Optional field must be a valid UUID: + ``` + size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}') + ``` + actions: type: array items: $ref: '#/components/schemas/policy.Action' title: actions - description: | + description: |+ Optional: replace the entire list of actions - action_name_or_id_not_empty // Action name or ID must not be empty if provided + Action name or ID must not be empty if provided: + ``` + this.size() == 0 || this.all(item, item.name != '' || item.id != '') + ``` + metadata: title: metadata description: Common metadata @@ -1452,6 +1438,63 @@ components: $ref: '#/components/schemas/common.MetadataMutable' title: SubjectConditionSetCreate additionalProperties: false + connect-protocol-version: + type: number + title: Connect-Protocol-Version + enum: + - 1 + description: Define the version of the Connect protocol + const: 1 + connect-timeout-header: + type: number + title: Connect-Timeout-Ms + description: Define the timeout, in ms + connect.error: + type: object + properties: + code: + type: string + examples: + - not_found + enum: + - canceled + - unknown + - invalid_argument + - deadline_exceeded + - not_found + - already_exists + - permission_denied + - resource_exhausted + - failed_precondition + - aborted + - out_of_range + - unimplemented + - internal + - unavailable + - data_loss + - unauthenticated + description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. + message: + type: string + description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client. + detail: + $ref: '#/components/schemas/google.protobuf.Any' + title: Connect Error + additionalProperties: true + description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation' + google.protobuf.Any: + type: object + properties: + type: + type: string + value: + type: string + format: binary + debug: + type: object + additionalProperties: true + additionalProperties: true + description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message. security: [] tags: - name: policy.dynamicvaluemapping.DynamicValueMappingService diff --git a/docs/openapi/policy/objects.openapi.yaml b/docs/openapi/policy/objects.openapi.yaml index 3e75b85f94..e53a09d8a5 100644 --- a/docs/openapi/policy/objects.openapi.yaml +++ b/docs/openapi/policy/objects.openapi.yaml @@ -40,6 +40,28 @@ components: - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED - CONDITION_BOOLEAN_TYPE_ENUM_AND - CONDITION_BOOLEAN_TYPE_ENUM_OR + policy.ConditionComparisonOperatorEnum: + type: string + title: ConditionComparisonOperatorEnum + enum: + - CONDITION_COMPARISON_OPERATOR_ENUM_UNSPECIFIED + - CONDITION_COMPARISON_OPERATOR_ENUM_EQUALS + - CONDITION_COMPARISON_OPERATOR_ENUM_CONTAINS + - CONDITION_COMPARISON_OPERATOR_ENUM_STARTS_WITH + - CONDITION_COMPARISON_OPERATOR_ENUM_ENDS_WITH + description: |- + How a selector result is compared against a comparison value. Replaces the all-in-one + SubjectMappingOperatorEnum by separating the comparison from the quantifier (see + ConditionQuantifierEnum) and case sensitivity. + policy.ConditionQuantifierEnum: + type: string + title: ConditionQuantifierEnum + enum: + - CONDITION_QUANTIFIER_ENUM_UNSPECIFIED + - CONDITION_QUANTIFIER_ENUM_ANY + - CONDITION_QUANTIFIER_ENUM_ALL + - CONDITION_QUANTIFIER_ENUM_NONE + description: How matches are aggregated across the comparison set (subject_external_values). policy.KasPublicKeyAlgEnum: type: string title: KasPublicKeyAlgEnum @@ -376,7 +398,10 @@ components: from idP/LDAP) operator: title: operator - description: the evaluation operator of relation + description: |- + Deprecated: use comparison + quantifier (+ case_insensitive) instead. Normalized to the + decomposed fields in the service layer for backward compatibility. + deprecated: true $ref: '#/components/schemas/policy.SubjectMappingOperatorEnum' subjectExternalValues: type: array @@ -389,10 +414,21 @@ components: list of comparison values for the result of applying the subject_external_selector_value on a flattened Entity Representation (Subject), evaluated by the operator + comparison: + title: comparison + description: how each selector result is compared to subject_external_values entries + $ref: '#/components/schemas/policy.ConditionComparisonOperatorEnum' + quantifier: + title: quantifier + description: how matches are aggregated across subject_external_values + $ref: '#/components/schemas/policy.ConditionQuantifierEnum' + caseInsensitive: + type: boolean + title: case_insensitive + description: when true, comparison is case-insensitive (default false = case-sensitive) title: Condition required: - subjectExternalSelectorValue - - operator additionalProperties: false description: |- * @@ -458,19 +494,6 @@ components: authority from a concrete Attribute Value to the Attribute Definition: at decision time the value_resolver compares the requested resource value segment against the entity representation, avoiding pre-provisioning a value + subject mapping per discrete value. - policy.DynamicValueOperatorEnum: - type: string - title: DynamicValueOperatorEnum - enum: - - DYNAMIC_VALUE_OPERATOR_ENUM_UNSPECIFIED - - DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN - - DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN_CONTAINS - description: |- - Operators for dynamic, definition-level value entitlement. Unlike - SubjectMappingOperatorEnum, whose right-hand operand is a static list authored into - policy, a DynamicValueOperatorEnum's right-hand operand is the requested resource's - attribute value segment, supplied at decision time. Each value is the inversion of its - static SubjectMappingOperatorEnum counterpart. policy.DynamicValueResolver: type: object properties: @@ -480,19 +503,26 @@ components: description: |- a selector for a field value on a flattened Entity Representation (such as from idP/LDAP), e.g. ".patientAssignments[]" - operator: - title: operator - description: the dynamic operator comparing the selector result to the resource value segment - $ref: '#/components/schemas/policy.DynamicValueOperatorEnum' + comparison: + title: comparison + description: |- + how the requested resource value segment is compared against each value the selector + resolves from the entity representation + $ref: '#/components/schemas/policy.ConditionComparisonOperatorEnum' + caseInsensitive: + type: boolean + title: case_insensitive + description: when true, comparison is case-insensitive (default false = case-sensitive) title: DynamicValueResolver required: - subjectExternalSelectorValue - - operator + - comparison additionalProperties: false description: |- - Definition Value Resolver: the dynamic half of a DynamicValueMapping. It - resolves a selector against the entity representation and compares the result to the - requested resource value segment using a DynamicValueOperatorEnum. + Dynamic Value Resolver: the dynamic half of a DynamicValueMapping. It resolves a selector + against the entity representation, then tests whether any resolved entity value matches the + requested resource value segment under comparison. The match is inherently existential over + the resolved entity values, so no quantifier is carried here. policy.KasKey: type: object properties: diff --git a/docs/openapi/policy/obligations/obligations.openapi.yaml b/docs/openapi/policy/obligations/obligations.openapi.yaml index 562045f797..ef592b5fa3 100644 --- a/docs/openapi/policy/obligations/obligations.openapi.yaml +++ b/docs/openapi/policy/obligations/obligations.openapi.yaml @@ -572,6 +572,28 @@ components: - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED - CONDITION_BOOLEAN_TYPE_ENUM_AND - CONDITION_BOOLEAN_TYPE_ENUM_OR + policy.ConditionComparisonOperatorEnum: + type: string + title: ConditionComparisonOperatorEnum + enum: + - CONDITION_COMPARISON_OPERATOR_ENUM_UNSPECIFIED + - CONDITION_COMPARISON_OPERATOR_ENUM_EQUALS + - CONDITION_COMPARISON_OPERATOR_ENUM_CONTAINS + - CONDITION_COMPARISON_OPERATOR_ENUM_STARTS_WITH + - CONDITION_COMPARISON_OPERATOR_ENUM_ENDS_WITH + description: |- + How a selector result is compared against a comparison value. Replaces the all-in-one + SubjectMappingOperatorEnum by separating the comparison from the quantifier (see + ConditionQuantifierEnum) and case sensitivity. + policy.ConditionQuantifierEnum: + type: string + title: ConditionQuantifierEnum + enum: + - CONDITION_QUANTIFIER_ENUM_UNSPECIFIED + - CONDITION_QUANTIFIER_ENUM_ANY + - CONDITION_QUANTIFIER_ENUM_ALL + - CONDITION_QUANTIFIER_ENUM_NONE + description: How matches are aggregated across the comparison set (subject_external_values). policy.KasPublicKeyAlgEnum: type: string title: KasPublicKeyAlgEnum @@ -923,7 +945,10 @@ components: from idP/LDAP) operator: title: operator - description: the evaluation operator of relation + description: |- + Deprecated: use comparison + quantifier (+ case_insensitive) instead. Normalized to the + decomposed fields in the service layer for backward compatibility. + deprecated: true $ref: '#/components/schemas/policy.SubjectMappingOperatorEnum' subjectExternalValues: type: array @@ -936,10 +961,21 @@ components: list of comparison values for the result of applying the subject_external_selector_value on a flattened Entity Representation (Subject), evaluated by the operator + comparison: + title: comparison + description: how each selector result is compared to subject_external_values entries + $ref: '#/components/schemas/policy.ConditionComparisonOperatorEnum' + quantifier: + title: quantifier + description: how matches are aggregated across subject_external_values + $ref: '#/components/schemas/policy.ConditionQuantifierEnum' + caseInsensitive: + type: boolean + title: case_insensitive + description: when true, comparison is case-insensitive (default false = case-sensitive) title: Condition required: - subjectExternalSelectorValue - - operator additionalProperties: false description: |- * diff --git a/docs/openapi/policy/registeredresources/registered_resources.openapi.yaml b/docs/openapi/policy/registeredresources/registered_resources.openapi.yaml index ca41d4841e..7185026f36 100644 --- a/docs/openapi/policy/registeredresources/registered_resources.openapi.yaml +++ b/docs/openapi/policy/registeredresources/registered_resources.openapi.yaml @@ -432,6 +432,28 @@ components: - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED - CONDITION_BOOLEAN_TYPE_ENUM_AND - CONDITION_BOOLEAN_TYPE_ENUM_OR + policy.ConditionComparisonOperatorEnum: + type: string + title: ConditionComparisonOperatorEnum + enum: + - CONDITION_COMPARISON_OPERATOR_ENUM_UNSPECIFIED + - CONDITION_COMPARISON_OPERATOR_ENUM_EQUALS + - CONDITION_COMPARISON_OPERATOR_ENUM_CONTAINS + - CONDITION_COMPARISON_OPERATOR_ENUM_STARTS_WITH + - CONDITION_COMPARISON_OPERATOR_ENUM_ENDS_WITH + description: |- + How a selector result is compared against a comparison value. Replaces the all-in-one + SubjectMappingOperatorEnum by separating the comparison from the quantifier (see + ConditionQuantifierEnum) and case sensitivity. + policy.ConditionQuantifierEnum: + type: string + title: ConditionQuantifierEnum + enum: + - CONDITION_QUANTIFIER_ENUM_UNSPECIFIED + - CONDITION_QUANTIFIER_ENUM_ANY + - CONDITION_QUANTIFIER_ENUM_ALL + - CONDITION_QUANTIFIER_ENUM_NONE + description: How matches are aggregated across the comparison set (subject_external_values). policy.KasPublicKeyAlgEnum: type: string title: KasPublicKeyAlgEnum @@ -748,7 +770,10 @@ components: from idP/LDAP) operator: title: operator - description: the evaluation operator of relation + description: |- + Deprecated: use comparison + quantifier (+ case_insensitive) instead. Normalized to the + decomposed fields in the service layer for backward compatibility. + deprecated: true $ref: '#/components/schemas/policy.SubjectMappingOperatorEnum' subjectExternalValues: type: array @@ -761,10 +786,21 @@ components: list of comparison values for the result of applying the subject_external_selector_value on a flattened Entity Representation (Subject), evaluated by the operator + comparison: + title: comparison + description: how each selector result is compared to subject_external_values entries + $ref: '#/components/schemas/policy.ConditionComparisonOperatorEnum' + quantifier: + title: quantifier + description: how matches are aggregated across subject_external_values + $ref: '#/components/schemas/policy.ConditionQuantifierEnum' + caseInsensitive: + type: boolean + title: case_insensitive + description: when true, comparison is case-insensitive (default false = case-sensitive) title: Condition required: - subjectExternalSelectorValue - - operator additionalProperties: false description: |- * diff --git a/docs/openapi/policy/resourcemapping/resource_mapping.openapi.yaml b/docs/openapi/policy/resourcemapping/resource_mapping.openapi.yaml index a11306bc24..e6d74f5d6b 100644 --- a/docs/openapi/policy/resourcemapping/resource_mapping.openapi.yaml +++ b/docs/openapi/policy/resourcemapping/resource_mapping.openapi.yaml @@ -432,6 +432,28 @@ components: - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED - CONDITION_BOOLEAN_TYPE_ENUM_AND - CONDITION_BOOLEAN_TYPE_ENUM_OR + policy.ConditionComparisonOperatorEnum: + type: string + title: ConditionComparisonOperatorEnum + enum: + - CONDITION_COMPARISON_OPERATOR_ENUM_UNSPECIFIED + - CONDITION_COMPARISON_OPERATOR_ENUM_EQUALS + - CONDITION_COMPARISON_OPERATOR_ENUM_CONTAINS + - CONDITION_COMPARISON_OPERATOR_ENUM_STARTS_WITH + - CONDITION_COMPARISON_OPERATOR_ENUM_ENDS_WITH + description: |- + How a selector result is compared against a comparison value. Replaces the all-in-one + SubjectMappingOperatorEnum by separating the comparison from the quantifier (see + ConditionQuantifierEnum) and case sensitivity. + policy.ConditionQuantifierEnum: + type: string + title: ConditionQuantifierEnum + enum: + - CONDITION_QUANTIFIER_ENUM_UNSPECIFIED + - CONDITION_QUANTIFIER_ENUM_ANY + - CONDITION_QUANTIFIER_ENUM_ALL + - CONDITION_QUANTIFIER_ENUM_NONE + description: How matches are aggregated across the comparison set (subject_external_values). policy.KasPublicKeyAlgEnum: type: string title: KasPublicKeyAlgEnum @@ -728,7 +750,10 @@ components: from idP/LDAP) operator: title: operator - description: the evaluation operator of relation + description: |- + Deprecated: use comparison + quantifier (+ case_insensitive) instead. Normalized to the + decomposed fields in the service layer for backward compatibility. + deprecated: true $ref: '#/components/schemas/policy.SubjectMappingOperatorEnum' subjectExternalValues: type: array @@ -741,10 +766,21 @@ components: list of comparison values for the result of applying the subject_external_selector_value on a flattened Entity Representation (Subject), evaluated by the operator + comparison: + title: comparison + description: how each selector result is compared to subject_external_values entries + $ref: '#/components/schemas/policy.ConditionComparisonOperatorEnum' + quantifier: + title: quantifier + description: how matches are aggregated across subject_external_values + $ref: '#/components/schemas/policy.ConditionQuantifierEnum' + caseInsensitive: + type: boolean + title: case_insensitive + description: when true, comparison is case-insensitive (default false = case-sensitive) title: Condition required: - subjectExternalSelectorValue - - operator additionalProperties: false description: |- * diff --git a/docs/openapi/policy/subjectmapping/subject_mapping.openapi.yaml b/docs/openapi/policy/subjectmapping/subject_mapping.openapi.yaml index 4c78ec9f8d..44ebbe29f8 100644 --- a/docs/openapi/policy/subjectmapping/subject_mapping.openapi.yaml +++ b/docs/openapi/policy/subjectmapping/subject_mapping.openapi.yaml @@ -468,6 +468,28 @@ components: - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED - CONDITION_BOOLEAN_TYPE_ENUM_AND - CONDITION_BOOLEAN_TYPE_ENUM_OR + policy.ConditionComparisonOperatorEnum: + type: string + title: ConditionComparisonOperatorEnum + enum: + - CONDITION_COMPARISON_OPERATOR_ENUM_UNSPECIFIED + - CONDITION_COMPARISON_OPERATOR_ENUM_EQUALS + - CONDITION_COMPARISON_OPERATOR_ENUM_CONTAINS + - CONDITION_COMPARISON_OPERATOR_ENUM_STARTS_WITH + - CONDITION_COMPARISON_OPERATOR_ENUM_ENDS_WITH + description: |- + How a selector result is compared against a comparison value. Replaces the all-in-one + SubjectMappingOperatorEnum by separating the comparison from the quantifier (see + ConditionQuantifierEnum) and case sensitivity. + policy.ConditionQuantifierEnum: + type: string + title: ConditionQuantifierEnum + enum: + - CONDITION_QUANTIFIER_ENUM_UNSPECIFIED + - CONDITION_QUANTIFIER_ENUM_ANY + - CONDITION_QUANTIFIER_ENUM_ALL + - CONDITION_QUANTIFIER_ENUM_NONE + description: How matches are aggregated across the comparison set (subject_external_values). policy.KasPublicKeyAlgEnum: type: string title: KasPublicKeyAlgEnum @@ -790,7 +812,10 @@ components: from idP/LDAP) operator: title: operator - description: the evaluation operator of relation + description: |- + Deprecated: use comparison + quantifier (+ case_insensitive) instead. Normalized to the + decomposed fields in the service layer for backward compatibility. + deprecated: true $ref: '#/components/schemas/policy.SubjectMappingOperatorEnum' subjectExternalValues: type: array @@ -803,10 +828,21 @@ components: list of comparison values for the result of applying the subject_external_selector_value on a flattened Entity Representation (Subject), evaluated by the operator + comparison: + title: comparison + description: how each selector result is compared to subject_external_values entries + $ref: '#/components/schemas/policy.ConditionComparisonOperatorEnum' + quantifier: + title: quantifier + description: how matches are aggregated across subject_external_values + $ref: '#/components/schemas/policy.ConditionQuantifierEnum' + caseInsensitive: + type: boolean + title: case_insensitive + description: when true, comparison is case-insensitive (default false = case-sensitive) title: Condition required: - subjectExternalSelectorValue - - operator additionalProperties: false description: |- * diff --git a/docs/openapi/policy/unsafe/unsafe.openapi.yaml b/docs/openapi/policy/unsafe/unsafe.openapi.yaml index 09ebdf2e85..ecf435fe53 100644 --- a/docs/openapi/policy/unsafe/unsafe.openapi.yaml +++ b/docs/openapi/policy/unsafe/unsafe.openapi.yaml @@ -406,6 +406,28 @@ components: - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED - CONDITION_BOOLEAN_TYPE_ENUM_AND - CONDITION_BOOLEAN_TYPE_ENUM_OR + policy.ConditionComparisonOperatorEnum: + type: string + title: ConditionComparisonOperatorEnum + enum: + - CONDITION_COMPARISON_OPERATOR_ENUM_UNSPECIFIED + - CONDITION_COMPARISON_OPERATOR_ENUM_EQUALS + - CONDITION_COMPARISON_OPERATOR_ENUM_CONTAINS + - CONDITION_COMPARISON_OPERATOR_ENUM_STARTS_WITH + - CONDITION_COMPARISON_OPERATOR_ENUM_ENDS_WITH + description: |- + How a selector result is compared against a comparison value. Replaces the all-in-one + SubjectMappingOperatorEnum by separating the comparison from the quantifier (see + ConditionQuantifierEnum) and case sensitivity. + policy.ConditionQuantifierEnum: + type: string + title: ConditionQuantifierEnum + enum: + - CONDITION_QUANTIFIER_ENUM_UNSPECIFIED + - CONDITION_QUANTIFIER_ENUM_ANY + - CONDITION_QUANTIFIER_ENUM_ALL + - CONDITION_QUANTIFIER_ENUM_NONE + description: How matches are aggregated across the comparison set (subject_external_values). policy.KasPublicKeyAlgEnum: type: string title: KasPublicKeyAlgEnum @@ -742,7 +764,10 @@ components: from idP/LDAP) operator: title: operator - description: the evaluation operator of relation + description: |- + Deprecated: use comparison + quantifier (+ case_insensitive) instead. Normalized to the + decomposed fields in the service layer for backward compatibility. + deprecated: true $ref: '#/components/schemas/policy.SubjectMappingOperatorEnum' subjectExternalValues: type: array @@ -755,10 +780,21 @@ components: list of comparison values for the result of applying the subject_external_selector_value on a flattened Entity Representation (Subject), evaluated by the operator + comparison: + title: comparison + description: how each selector result is compared to subject_external_values entries + $ref: '#/components/schemas/policy.ConditionComparisonOperatorEnum' + quantifier: + title: quantifier + description: how matches are aggregated across subject_external_values + $ref: '#/components/schemas/policy.ConditionQuantifierEnum' + caseInsensitive: + type: boolean + title: case_insensitive + description: when true, comparison is case-insensitive (default false = case-sensitive) title: Condition required: - subjectExternalSelectorValue - - operator additionalProperties: false description: |- * diff --git a/protocol/go/internal/policy/enums.go b/protocol/go/internal/policy/enums.go index 6ed689d857..3e236543a6 100644 --- a/protocol/go/internal/policy/enums.go +++ b/protocol/go/internal/policy/enums.go @@ -20,6 +20,30 @@ const ( OperatorInContains = policy.SubjectMappingOperatorEnum_SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS ) +// Shorthand constants for ConditionComparisonOperatorEnum. +// +// Example: +// +// condition := &policy.Condition{ +// SubjectExternalSelectorValue: ".email", +// Comparison: policy.ComparisonEndsWith, +// Quantifier: policy.QuantifierAny, +// SubjectExternalValues: []string{"@example.com"}, +// } +const ( + ComparisonEquals = policy.ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_EQUALS + ComparisonContains = policy.ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_CONTAINS + ComparisonStartsWith = policy.ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_STARTS_WITH + ComparisonEndsWith = policy.ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_ENDS_WITH +) + +// Shorthand constants for ConditionQuantifierEnum. +const ( + QuantifierAny = policy.ConditionQuantifierEnum_CONDITION_QUANTIFIER_ENUM_ANY + QuantifierAll = policy.ConditionQuantifierEnum_CONDITION_QUANTIFIER_ENUM_ALL + QuantifierNone = policy.ConditionQuantifierEnum_CONDITION_QUANTIFIER_ENUM_NONE +) + // Shorthand constants for ConditionBooleanTypeEnum. // // Example: diff --git a/protocol/go/internal/policy/enums_test.go b/protocol/go/internal/policy/enums_test.go index 8fa7e37bd3..73334c1ee6 100644 --- a/protocol/go/internal/policy/enums_test.go +++ b/protocol/go/internal/policy/enums_test.go @@ -19,6 +19,33 @@ func TestOperatorConstants(t *testing.T) { } } +func TestComparisonConstants(t *testing.T) { + if ComparisonEquals != policyproto.ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_EQUALS { + t.Errorf("ComparisonEquals = %d, want %d", ComparisonEquals, policyproto.ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_EQUALS) + } + if ComparisonContains != policyproto.ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_CONTAINS { + t.Errorf("ComparisonContains = %d, want %d", ComparisonContains, policyproto.ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_CONTAINS) + } + if ComparisonStartsWith != policyproto.ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_STARTS_WITH { + t.Errorf("ComparisonStartsWith = %d, want %d", ComparisonStartsWith, policyproto.ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_STARTS_WITH) + } + if ComparisonEndsWith != policyproto.ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_ENDS_WITH { + t.Errorf("ComparisonEndsWith = %d, want %d", ComparisonEndsWith, policyproto.ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_ENDS_WITH) + } +} + +func TestQuantifierConstants(t *testing.T) { + if QuantifierAny != policyproto.ConditionQuantifierEnum_CONDITION_QUANTIFIER_ENUM_ANY { + t.Errorf("QuantifierAny = %d, want %d", QuantifierAny, policyproto.ConditionQuantifierEnum_CONDITION_QUANTIFIER_ENUM_ANY) + } + if QuantifierAll != policyproto.ConditionQuantifierEnum_CONDITION_QUANTIFIER_ENUM_ALL { + t.Errorf("QuantifierAll = %d, want %d", QuantifierAll, policyproto.ConditionQuantifierEnum_CONDITION_QUANTIFIER_ENUM_ALL) + } + if QuantifierNone != policyproto.ConditionQuantifierEnum_CONDITION_QUANTIFIER_ENUM_NONE { + t.Errorf("QuantifierNone = %d, want %d", QuantifierNone, policyproto.ConditionQuantifierEnum_CONDITION_QUANTIFIER_ENUM_NONE) + } +} + func TestBooleanConstants(t *testing.T) { if BooleanAnd != policyproto.ConditionBooleanTypeEnum_CONDITION_BOOLEAN_TYPE_ENUM_AND { t.Errorf("BooleanAnd = %d, want %d", BooleanAnd, policyproto.ConditionBooleanTypeEnum_CONDITION_BOOLEAN_TYPE_ENUM_AND) diff --git a/protocol/go/policy/enums.gen.go b/protocol/go/policy/enums.gen.go index 87bc32e7c8..795be75cc0 100644 --- a/protocol/go/policy/enums.gen.go +++ b/protocol/go/policy/enums.gen.go @@ -21,6 +21,30 @@ const ( OperatorInContains = SubjectMappingOperatorEnum_SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS ) +// Shorthand constants for ConditionComparisonOperatorEnum. +// +// Example: +// +// condition := &Condition{ +// SubjectExternalSelectorValue: ".email", +// Comparison: ComparisonEndsWith, +// Quantifier: QuantifierAny, +// SubjectExternalValues: []string{"@example.com"}, +// } +const ( + ComparisonEquals = ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_EQUALS + ComparisonContains = ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_CONTAINS + ComparisonStartsWith = ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_STARTS_WITH + ComparisonEndsWith = ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_ENDS_WITH +) + +// Shorthand constants for ConditionQuantifierEnum. +const ( + QuantifierAny = ConditionQuantifierEnum_CONDITION_QUANTIFIER_ENUM_ANY + QuantifierAll = ConditionQuantifierEnum_CONDITION_QUANTIFIER_ENUM_ALL + QuantifierNone = ConditionQuantifierEnum_CONDITION_QUANTIFIER_ENUM_NONE +) + // Shorthand constants for ConditionBooleanTypeEnum. // // Example: diff --git a/protocol/go/policy/objects.pb.go b/protocol/go/policy/objects.pb.go index f274344862..8a459aaff2 100644 --- a/protocol/go/policy/objects.pb.go +++ b/protocol/go/policy/objects.pb.go @@ -180,64 +180,124 @@ func (ConditionBooleanTypeEnum) EnumDescriptor() ([]byte, []int) { return file_policy_objects_proto_rawDescGZIP(), []int{2} } -// Operators for dynamic, definition-level value entitlement. Unlike -// SubjectMappingOperatorEnum, whose right-hand operand is a static list authored into -// policy, a DynamicValueOperatorEnum's right-hand operand is the requested resource's -// attribute value segment, supplied at decision time. Each value is the inversion of its -// static SubjectMappingOperatorEnum counterpart. -type DynamicValueOperatorEnum int32 +// How a selector result is compared against a comparison value. Replaces the all-in-one +// SubjectMappingOperatorEnum by separating the comparison from the quantifier (see +// ConditionQuantifierEnum) and case sensitivity. +type ConditionComparisonOperatorEnum int32 const ( - DynamicValueOperatorEnum_DYNAMIC_VALUE_OPERATOR_ENUM_UNSPECIFIED DynamicValueOperatorEnum = 0 - // true when the requested resource value segment equals one of the values resolved by - // the selector against the entity representation (inversion of IN) - DynamicValueOperatorEnum_DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN DynamicValueOperatorEnum = 1 - // true when one of the selector-resolved entity values contains the requested resource - // value segment as a substring (inversion of IN_CONTAINS) - DynamicValueOperatorEnum_DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN_CONTAINS DynamicValueOperatorEnum = 2 + ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_UNSPECIFIED ConditionComparisonOperatorEnum = 0 + // exact string equality + ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_EQUALS ConditionComparisonOperatorEnum = 1 + // substring containment + ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_CONTAINS ConditionComparisonOperatorEnum = 2 + // prefix match + ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_STARTS_WITH ConditionComparisonOperatorEnum = 3 + // suffix match; the safe operator for domain matching (e.g. email domains) + ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_ENDS_WITH ConditionComparisonOperatorEnum = 4 ) -// Enum value maps for DynamicValueOperatorEnum. +// Enum value maps for ConditionComparisonOperatorEnum. var ( - DynamicValueOperatorEnum_name = map[int32]string{ - 0: "DYNAMIC_VALUE_OPERATOR_ENUM_UNSPECIFIED", - 1: "DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN", - 2: "DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN_CONTAINS", - } - DynamicValueOperatorEnum_value = map[string]int32{ - "DYNAMIC_VALUE_OPERATOR_ENUM_UNSPECIFIED": 0, - "DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN": 1, - "DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN_CONTAINS": 2, + ConditionComparisonOperatorEnum_name = map[int32]string{ + 0: "CONDITION_COMPARISON_OPERATOR_ENUM_UNSPECIFIED", + 1: "CONDITION_COMPARISON_OPERATOR_ENUM_EQUALS", + 2: "CONDITION_COMPARISON_OPERATOR_ENUM_CONTAINS", + 3: "CONDITION_COMPARISON_OPERATOR_ENUM_STARTS_WITH", + 4: "CONDITION_COMPARISON_OPERATOR_ENUM_ENDS_WITH", + } + ConditionComparisonOperatorEnum_value = map[string]int32{ + "CONDITION_COMPARISON_OPERATOR_ENUM_UNSPECIFIED": 0, + "CONDITION_COMPARISON_OPERATOR_ENUM_EQUALS": 1, + "CONDITION_COMPARISON_OPERATOR_ENUM_CONTAINS": 2, + "CONDITION_COMPARISON_OPERATOR_ENUM_STARTS_WITH": 3, + "CONDITION_COMPARISON_OPERATOR_ENUM_ENDS_WITH": 4, } ) -func (x DynamicValueOperatorEnum) Enum() *DynamicValueOperatorEnum { - p := new(DynamicValueOperatorEnum) +func (x ConditionComparisonOperatorEnum) Enum() *ConditionComparisonOperatorEnum { + p := new(ConditionComparisonOperatorEnum) *p = x return p } -func (x DynamicValueOperatorEnum) String() string { +func (x ConditionComparisonOperatorEnum) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (DynamicValueOperatorEnum) Descriptor() protoreflect.EnumDescriptor { +func (ConditionComparisonOperatorEnum) Descriptor() protoreflect.EnumDescriptor { return file_policy_objects_proto_enumTypes[3].Descriptor() } -func (DynamicValueOperatorEnum) Type() protoreflect.EnumType { +func (ConditionComparisonOperatorEnum) Type() protoreflect.EnumType { return &file_policy_objects_proto_enumTypes[3] } -func (x DynamicValueOperatorEnum) Number() protoreflect.EnumNumber { +func (x ConditionComparisonOperatorEnum) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } -// Deprecated: Use DynamicValueOperatorEnum.Descriptor instead. -func (DynamicValueOperatorEnum) EnumDescriptor() ([]byte, []int) { +// Deprecated: Use ConditionComparisonOperatorEnum.Descriptor instead. +func (ConditionComparisonOperatorEnum) EnumDescriptor() ([]byte, []int) { return file_policy_objects_proto_rawDescGZIP(), []int{3} } +// How matches are aggregated across the comparison set (subject_external_values). +type ConditionQuantifierEnum int32 + +const ( + ConditionQuantifierEnum_CONDITION_QUANTIFIER_ENUM_UNSPECIFIED ConditionQuantifierEnum = 0 + // at least one match (legacy IN behavior) + ConditionQuantifierEnum_CONDITION_QUANTIFIER_ENUM_ANY ConditionQuantifierEnum = 1 + // every expected value matches + ConditionQuantifierEnum_CONDITION_QUANTIFIER_ENUM_ALL ConditionQuantifierEnum = 2 + // no matches (legacy NOT_IN behavior) + ConditionQuantifierEnum_CONDITION_QUANTIFIER_ENUM_NONE ConditionQuantifierEnum = 3 +) + +// Enum value maps for ConditionQuantifierEnum. +var ( + ConditionQuantifierEnum_name = map[int32]string{ + 0: "CONDITION_QUANTIFIER_ENUM_UNSPECIFIED", + 1: "CONDITION_QUANTIFIER_ENUM_ANY", + 2: "CONDITION_QUANTIFIER_ENUM_ALL", + 3: "CONDITION_QUANTIFIER_ENUM_NONE", + } + ConditionQuantifierEnum_value = map[string]int32{ + "CONDITION_QUANTIFIER_ENUM_UNSPECIFIED": 0, + "CONDITION_QUANTIFIER_ENUM_ANY": 1, + "CONDITION_QUANTIFIER_ENUM_ALL": 2, + "CONDITION_QUANTIFIER_ENUM_NONE": 3, + } +) + +func (x ConditionQuantifierEnum) Enum() *ConditionQuantifierEnum { + p := new(ConditionQuantifierEnum) + *p = x + return p +} + +func (x ConditionQuantifierEnum) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ConditionQuantifierEnum) Descriptor() protoreflect.EnumDescriptor { + return file_policy_objects_proto_enumTypes[4].Descriptor() +} + +func (ConditionQuantifierEnum) Type() protoreflect.EnumType { + return &file_policy_objects_proto_enumTypes[4] +} + +func (x ConditionQuantifierEnum) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ConditionQuantifierEnum.Descriptor instead. +func (ConditionQuantifierEnum) EnumDescriptor() ([]byte, []int) { + return file_policy_objects_proto_rawDescGZIP(), []int{4} +} + // Describes whether this kas is managed by the organization or if they imported // the kas information from an external party. These two modes are necessary in order // to encrypt a tdf dek with an external parties kas public key. @@ -276,11 +336,11 @@ func (x SourceType) String() string { } func (SourceType) Descriptor() protoreflect.EnumDescriptor { - return file_policy_objects_proto_enumTypes[4].Descriptor() + return file_policy_objects_proto_enumTypes[5].Descriptor() } func (SourceType) Type() protoreflect.EnumType { - return &file_policy_objects_proto_enumTypes[4] + return &file_policy_objects_proto_enumTypes[5] } func (x SourceType) Number() protoreflect.EnumNumber { @@ -289,7 +349,7 @@ func (x SourceType) Number() protoreflect.EnumNumber { // Deprecated: Use SourceType.Descriptor instead. func (SourceType) EnumDescriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{4} + return file_policy_objects_proto_rawDescGZIP(), []int{5} } type KasPublicKeyAlgEnum int32 @@ -343,11 +403,11 @@ func (x KasPublicKeyAlgEnum) String() string { } func (KasPublicKeyAlgEnum) Descriptor() protoreflect.EnumDescriptor { - return file_policy_objects_proto_enumTypes[5].Descriptor() + return file_policy_objects_proto_enumTypes[6].Descriptor() } func (KasPublicKeyAlgEnum) Type() protoreflect.EnumType { - return &file_policy_objects_proto_enumTypes[5] + return &file_policy_objects_proto_enumTypes[6] } func (x KasPublicKeyAlgEnum) Number() protoreflect.EnumNumber { @@ -356,7 +416,7 @@ func (x KasPublicKeyAlgEnum) Number() protoreflect.EnumNumber { // Deprecated: Use KasPublicKeyAlgEnum.Descriptor instead. func (KasPublicKeyAlgEnum) EnumDescriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{5} + return file_policy_objects_proto_rawDescGZIP(), []int{6} } // Supported key algorithms. @@ -411,11 +471,11 @@ func (x Algorithm) String() string { } func (Algorithm) Descriptor() protoreflect.EnumDescriptor { - return file_policy_objects_proto_enumTypes[6].Descriptor() + return file_policy_objects_proto_enumTypes[7].Descriptor() } func (Algorithm) Type() protoreflect.EnumType { - return &file_policy_objects_proto_enumTypes[6] + return &file_policy_objects_proto_enumTypes[7] } func (x Algorithm) Number() protoreflect.EnumNumber { @@ -424,7 +484,7 @@ func (x Algorithm) Number() protoreflect.EnumNumber { // Deprecated: Use Algorithm.Descriptor instead. func (Algorithm) EnumDescriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{6} + return file_policy_objects_proto_rawDescGZIP(), []int{7} } // The status of the key @@ -461,11 +521,11 @@ func (x KeyStatus) String() string { } func (KeyStatus) Descriptor() protoreflect.EnumDescriptor { - return file_policy_objects_proto_enumTypes[7].Descriptor() + return file_policy_objects_proto_enumTypes[8].Descriptor() } func (KeyStatus) Type() protoreflect.EnumType { - return &file_policy_objects_proto_enumTypes[7] + return &file_policy_objects_proto_enumTypes[8] } func (x KeyStatus) Number() protoreflect.EnumNumber { @@ -474,7 +534,7 @@ func (x KeyStatus) Number() protoreflect.EnumNumber { // Deprecated: Use KeyStatus.Descriptor instead. func (KeyStatus) EnumDescriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{7} + return file_policy_objects_proto_rawDescGZIP(), []int{8} } // Describes the management and operational mode of a cryptographic key. @@ -530,11 +590,11 @@ func (x KeyMode) String() string { } func (KeyMode) Descriptor() protoreflect.EnumDescriptor { - return file_policy_objects_proto_enumTypes[8].Descriptor() + return file_policy_objects_proto_enumTypes[9].Descriptor() } func (KeyMode) Type() protoreflect.EnumType { - return &file_policy_objects_proto_enumTypes[8] + return &file_policy_objects_proto_enumTypes[9] } func (x KeyMode) Number() protoreflect.EnumNumber { @@ -543,7 +603,7 @@ func (x KeyMode) Number() protoreflect.EnumNumber { // Deprecated: Use KeyMode.Descriptor instead. func (KeyMode) EnumDescriptor() ([]byte, []int) { - return file_policy_objects_proto_rawDescGZIP(), []int{8} + return file_policy_objects_proto_rawDescGZIP(), []int{9} } type Action_StandardAction int32 @@ -583,11 +643,11 @@ func (x Action_StandardAction) String() string { } func (Action_StandardAction) Descriptor() protoreflect.EnumDescriptor { - return file_policy_objects_proto_enumTypes[9].Descriptor() + return file_policy_objects_proto_enumTypes[10].Descriptor() } func (Action_StandardAction) Type() protoreflect.EnumType { - return &file_policy_objects_proto_enumTypes[9] + return &file_policy_objects_proto_enumTypes[10] } func (x Action_StandardAction) Number() protoreflect.EnumNumber { @@ -1389,9 +1449,10 @@ func (x *SubjectMapping) GetMetadata() *common.Metadata { return nil } -// Definition Value Resolver: the dynamic half of a DynamicValueMapping. It -// resolves a selector against the entity representation and compares the result to the -// requested resource value segment using a DynamicValueOperatorEnum. +// Dynamic Value Resolver: the dynamic half of a DynamicValueMapping. It resolves a selector +// against the entity representation, then tests whether any resolved entity value matches the +// requested resource value segment under comparison. The match is inherently existential over +// the resolved entity values, so no quantifier is carried here. type DynamicValueResolver struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1400,8 +1461,11 @@ type DynamicValueResolver struct { // a selector for a field value on a flattened Entity Representation (such as from // idP/LDAP), e.g. ".patientAssignments[]" SubjectExternalSelectorValue string `protobuf:"bytes,1,opt,name=subject_external_selector_value,json=subjectExternalSelectorValue,proto3" json:"subject_external_selector_value,omitempty"` - // the dynamic operator comparing the selector result to the resource value segment - Operator DynamicValueOperatorEnum `protobuf:"varint,2,opt,name=operator,proto3,enum=policy.DynamicValueOperatorEnum" json:"operator,omitempty"` + // how the requested resource value segment is compared against each value the selector + // resolves from the entity representation + Comparison ConditionComparisonOperatorEnum `protobuf:"varint,2,opt,name=comparison,proto3,enum=policy.ConditionComparisonOperatorEnum" json:"comparison,omitempty"` + // when true, comparison is case-insensitive (default false = case-sensitive) + CaseInsensitive bool `protobuf:"varint,3,opt,name=case_insensitive,json=caseInsensitive,proto3" json:"case_insensitive,omitempty"` } func (x *DynamicValueResolver) Reset() { @@ -1443,11 +1507,18 @@ func (x *DynamicValueResolver) GetSubjectExternalSelectorValue() string { return "" } -func (x *DynamicValueResolver) GetOperator() DynamicValueOperatorEnum { +func (x *DynamicValueResolver) GetComparison() ConditionComparisonOperatorEnum { if x != nil { - return x.Operator + return x.Comparison + } + return ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_UNSPECIFIED +} + +func (x *DynamicValueResolver) GetCaseInsensitive() bool { + if x != nil { + return x.CaseInsensitive } - return DynamicValueOperatorEnum_DYNAMIC_VALUE_OPERATOR_ENUM_UNSPECIFIED + return false } // Dynamic Value Mapping: a Policy assigning permitted action(s) to @@ -1568,12 +1639,21 @@ type Condition struct { // a selector for a field value on a flattened Entity Representation (such as // from idP/LDAP) SubjectExternalSelectorValue string `protobuf:"bytes,1,opt,name=subject_external_selector_value,json=subjectExternalSelectorValue,proto3" json:"subject_external_selector_value,omitempty"` - // the evaluation operator of relation + // Deprecated: use comparison + quantifier (+ case_insensitive) instead. Normalized to the + // decomposed fields in the service layer for backward compatibility. + // + // Deprecated: Marked as deprecated in policy/objects.proto. Operator SubjectMappingOperatorEnum `protobuf:"varint,2,opt,name=operator,proto3,enum=policy.SubjectMappingOperatorEnum" json:"operator,omitempty"` // list of comparison values for the result of applying the // subject_external_selector_value on a flattened Entity Representation // (Subject), evaluated by the operator SubjectExternalValues []string `protobuf:"bytes,3,rep,name=subject_external_values,json=subjectExternalValues,proto3" json:"subject_external_values,omitempty"` + // how each selector result is compared to subject_external_values entries + Comparison ConditionComparisonOperatorEnum `protobuf:"varint,4,opt,name=comparison,proto3,enum=policy.ConditionComparisonOperatorEnum" json:"comparison,omitempty"` + // how matches are aggregated across subject_external_values + Quantifier ConditionQuantifierEnum `protobuf:"varint,5,opt,name=quantifier,proto3,enum=policy.ConditionQuantifierEnum" json:"quantifier,omitempty"` + // when true, comparison is case-insensitive (default false = case-sensitive) + CaseInsensitive bool `protobuf:"varint,6,opt,name=case_insensitive,json=caseInsensitive,proto3" json:"case_insensitive,omitempty"` } func (x *Condition) Reset() { @@ -1615,6 +1695,7 @@ func (x *Condition) GetSubjectExternalSelectorValue() string { return "" } +// Deprecated: Marked as deprecated in policy/objects.proto. func (x *Condition) GetOperator() SubjectMappingOperatorEnum { if x != nil { return x.Operator @@ -1629,6 +1710,27 @@ func (x *Condition) GetSubjectExternalValues() []string { return nil } +func (x *Condition) GetComparison() ConditionComparisonOperatorEnum { + if x != nil { + return x.Comparison + } + return ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_UNSPECIFIED +} + +func (x *Condition) GetQuantifier() ConditionQuantifierEnum { + if x != nil { + return x.Quantifier + } + return ConditionQuantifierEnum_CONDITION_QUANTIFIER_ENUM_UNSPECIFIED +} + +func (x *Condition) GetCaseInsensitive() bool { + if x != nil { + return x.CaseInsensitive + } + return false +} + // A collection of Conditions evaluated by the boolean_operator provided type ConditionGroup struct { state protoimpl.MessageState @@ -3604,502 +3706,536 @@ var file_policy_objects_proto_rawDesc = []byte{ 0x61, 0x63, 0x65, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 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, 0xb0, 0x01, 0x0a, + 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xe6, 0x01, 0x0a, 0x14, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x1f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x1c, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x49, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, - 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, - 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, - 0x8a, 0x03, 0x0a, 0x13, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x44, 0x0a, 0x14, 0x61, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x13, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, - 0x0e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x44, - 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x72, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, - 0x65, 0x72, 0x12, 0x4f, 0x0a, 0x15, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x13, - 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x0a, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 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, 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, 0xe9, 0x01, 0x0a, - 0x09, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x1f, 0x73, 0x75, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x73, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x1c, 0x73, 0x75, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x08, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 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, 0x42, - 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x40, 0x0a, 0x17, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, - 0x01, 0x52, 0x15, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x3b, 0x0a, 0x0a, 0x63, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0a, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x10, 0x62, 0x6f, 0x6f, 0x6c, - 0x65, 0x61, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x54, 0x79, 0x70, 0x65, - 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x82, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x0f, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x22, 0x59, 0x0a, 0x0a, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x74, - 0x12, 0x4b, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0f, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0xc5, 0x01, - 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x65, 0x74, 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, 0x3f, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x74, - 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x53, 0x65, 0x74, 0x73, 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, 0x7c, 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x17, 0x65, 0x78, 0x74, 0x65, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x61, + 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x75, + 0x6d, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x61, + 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x73, 0x65, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x22, 0x8a, 0x03, 0x0a, 0x13, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, + 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x44, 0x0a, + 0x14, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x13, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x72, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x12, 0x4f, 0x0a, 0x15, 0x73, 0x75, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x65, 0x74, 0x52, 0x13, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x18, 0x06, 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, 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, 0xb4, 0x03, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x4d, 0x0a, 0x1f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01, - 0x01, 0x72, 0x02, 0x10, 0x01, 0x52, 0x15, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, - 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0xad, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x29, 0x0a, 0x0c, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x04, 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, 0x8a, 0x02, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x02, 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, 0x12, 0x3e, 0x0a, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, - 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 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, 0x14, 0x0a, 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x70, - 0x69, 0x6e, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, - 0x2f, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 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, - 0x22, 0x85, 0x05, 0x0a, 0x0f, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x87, 0x03, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0xf4, 0x02, 0xba, 0x48, 0xf0, 0x02, 0xba, 0x01, 0xec, 0x02, 0x0a, 0x0a, 0x75, - 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xcf, 0x01, 0x55, 0x52, 0x49, 0x20, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, - 0x55, 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x27, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x27, 0x29, 0x20, - 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x64, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, - 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, - 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2c, - 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x68, 0x79, 0x70, - 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, - 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, 0x8b, 0x01, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3f, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, - 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, - 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, - 0x5d, 0x29, 0x3f, 0x28, 0x5c, 0x5c, 0x2e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, + 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, + 0x01, 0x52, 0x1c, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x4d, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x22, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 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, 0x42, 0x0d, 0xba, 0x48, 0x08, 0xd8, 0x01, 0x01, 0x82, 0x01, 0x02, + 0x10, 0x01, 0x18, 0x01, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x40, + 0x0a, 0x17, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x42, + 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x15, 0x73, 0x75, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x12, 0x51, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x43, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, + 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x08, 0xba, + 0x48, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, + 0x73, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x0a, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, + 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x08, 0xba, 0x48, 0x05, 0x82, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x0a, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x29, + 0x0a, 0x10, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, + 0x76, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x61, 0x73, 0x65, 0x49, 0x6e, + 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x0e, 0x43, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x3b, 0x0a, 0x0a, + 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0a, 0x63, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x10, 0x62, 0x6f, 0x6f, + 0x6c, 0x65, 0x61, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x43, 0x6f, 0x6e, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x54, 0x79, 0x70, + 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x82, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x0f, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x22, 0x59, 0x0a, 0x0a, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, + 0x74, 0x12, 0x4b, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0f, 0x63, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0xc5, + 0x01, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 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, 0x3f, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, + 0x74, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0b, 0x73, 0x75, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x74, 0x73, 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, 0x7c, 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x17, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, + 0x01, 0x01, 0x72, 0x02, 0x10, 0x01, 0x52, 0x15, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, + 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0xad, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x29, 0x0a, + 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0b, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x04, 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, 0x8a, 0x02, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 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, 0x12, 0x3e, 0x0a, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 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, 0x14, 0x0a, 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x12, 0x32, 0x0a, 0x05, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, + 0x70, 0x69, 0x6e, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x12, 0x2f, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 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, 0x22, 0x85, 0x05, 0x0a, 0x0f, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x87, 0x03, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0xf4, 0x02, 0xba, 0x48, 0xf0, 0x02, 0xba, 0x01, 0xec, 0x02, 0x0a, 0x0a, + 0x75, 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xcf, 0x01, 0x55, 0x52, 0x49, + 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x20, 0x55, 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x27, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x27, 0x29, + 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, + 0x75, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, + 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, + 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, + 0x2c, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x68, 0x79, + 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, + 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, 0x8b, 0x01, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3f, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, - 0x39, 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x3a, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x29, 0x3f, - 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, 0x27, 0x29, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x30, - 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, - 0x12, 0x33, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x6b, 0x61, 0x73, 0x5f, 0x6b, 0x65, 0x79, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x52, 0x07, 0x6b, - 0x61, 0x73, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x14, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 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, 0x97, 0x02, 0x0a, 0x03, 0x4b, 0x65, 0x79, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x37, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x77, 0x61, 0x73, - 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x77, 0x61, 0x73, 0x4d, 0x61, - 0x70, 0x70, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, - 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x03, 0x6b, 0x61, 0x73, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, - 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, - 0x03, 0x6b, 0x61, 0x73, 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, 0x84, 0x01, 0x0a, 0x0c, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x03, 0x70, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x40, 0x52, 0x03, 0x70, 0x65, - 0x6d, 0x12, 0x1b, 0x0a, 0x03, 0x6b, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, - 0xba, 0x48, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x03, 0x6b, 0x69, 0x64, 0x12, 0x39, - 0x0a, 0x03, 0x61, 0x6c, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x41, 0x6c, 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x82, 0x01, 0x04, - 0x10, 0x01, 0x20, 0x00, 0x52, 0x03, 0x61, 0x6c, 0x67, 0x22, 0x3b, 0x0a, 0x0f, 0x4b, 0x61, 0x73, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x04, - 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, - 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x22, 0xe0, 0x03, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x4b, 0x65, 0x79, 0x12, 0x84, 0x03, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0xe9, 0x02, 0xba, 0x48, 0xe5, 0x02, 0xba, 0x01, 0xe1, 0x02, - 0x0a, 0x0a, 0x75, 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xcf, 0x01, 0x55, - 0x52, 0x49, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x20, 0x55, 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x27, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x27, 0x29, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, - 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x65, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, - 0x65, 0x72, 0x2c, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, - 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, - 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, - 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, 0x80, - 0x01, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, + 0x39, 0x5d, 0x29, 0x3f, 0x28, 0x5c, 0x5c, 0x2e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, - 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x28, 0x5c, 0x5c, 0x2e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, + 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x3a, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x29, + 0x3f, 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, 0x27, 0x29, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, + 0x30, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x12, 0x33, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x6b, 0x61, 0x73, 0x5f, 0x6b, 0x65, + 0x79, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x52, 0x07, + 0x6b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 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, 0x97, 0x02, 0x0a, 0x03, 0x4b, 0x65, + 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x37, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x77, 0x61, + 0x73, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x77, 0x61, 0x73, 0x4d, + 0x61, 0x70, 0x70, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, + 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, + 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x03, 0x6b, 0x61, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x52, 0x03, 0x6b, 0x61, 0x73, 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, 0x84, 0x01, 0x0a, 0x0c, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x03, 0x70, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x40, 0x52, 0x03, 0x70, + 0x65, 0x6d, 0x12, 0x1b, 0x0a, 0x03, 0x6b, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x09, 0xba, 0x48, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x03, 0x6b, 0x69, 0x64, 0x12, + 0x39, 0x0a, 0x03, 0x61, 0x6c, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, + 0x65, 0x79, 0x41, 0x6c, 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x82, 0x01, + 0x04, 0x10, 0x01, 0x20, 0x00, 0x52, 0x03, 0x61, 0x6c, 0x67, 0x22, 0x3b, 0x0a, 0x0f, 0x4b, 0x61, + 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x74, 0x12, 0x28, 0x0a, + 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x22, 0xe0, 0x03, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x84, 0x03, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0xe9, 0x02, 0xba, 0x48, 0xe5, 0x02, 0xba, 0x01, 0xe1, + 0x02, 0x0a, 0x0a, 0x75, 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xcf, 0x01, + 0x55, 0x52, 0x49, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x20, 0x55, 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x27, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x27, 0x29, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, + 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, + 0x20, 0x65, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, + 0x74, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, + 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, + 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, + 0x80, 0x01, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, + 0x5e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, - 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, 0x27, - 0x29, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x63, - 0x61, 0x63, 0x68, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x0c, - 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x4a, 0x04, 0x08, 0x02, - 0x10, 0x03, 0x52, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x22, 0xd0, 0x01, 0x0a, 0x12, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 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, 0x37, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x2f, 0x0a, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 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, 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, 0xdc, 0x03, 0x0a, - 0x17, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 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, 0x36, - 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x17, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 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, 0x1a, 0xb4, 0x01, 0x0a, 0x14, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x26, 0x0a, - 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 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, 0x03, 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, 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, 0x3e, 0x0a, 0x16, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 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, 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, 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, + 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x28, 0x5c, 0x5c, 0x2e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, + 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, + 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, + 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, + 0x27, 0x29, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x06, + 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, + 0x65, 0x79, 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, + 0x0c, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x4a, 0x04, 0x08, + 0x02, 0x10, 0x03, 0x52, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x22, 0xd0, 0x01, 0x0a, 0x12, 0x52, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 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, 0x37, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x2f, + 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 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, + 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, 0xdc, 0x03, + 0x0a, 0x17, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 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, + 0x36, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x17, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, + 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, 0x1a, 0xb4, 0x01, 0x0a, 0x14, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x26, + 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 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, 0x03, 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, 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, + 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x3e, 0x0a, 0x16, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 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, 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, 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, - 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, 0xd8, 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, 0x2f, 0x0a, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0b, 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, 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, + 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, 0xd8, 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, 0x2f, + 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0b, 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, + 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, 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, + 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, 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, + 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, 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, 0xb6, 0x01, 0x0a, 0x18, 0x44, 0x79, 0x6e, 0x61, - 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x27, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, - 0x56, 0x41, 0x4c, 0x55, 0x45, 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, 0x31, 0x0a, 0x2d, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, 0x56, 0x41, 0x4c, - 0x55, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, - 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, - 0x49, 0x4e, 0x10, 0x01, 0x12, 0x3a, 0x0a, 0x36, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, - 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, - 0x4e, 0x55, 0x4d, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x56, 0x41, 0x4c, - 0x55, 0x45, 0x5f, 0x49, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 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, - 0x9b, 0x03, 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, + 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, 0x9b, 0x02, 0x0a, 0x1f, 0x43, 0x6f, 0x6e, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, + 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x32, 0x0a, 0x2e, + 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, + 0x49, 0x53, 0x4f, 0x4e, 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, 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, 0x12, 0x26, 0x0a, 0x22, 0x4b, 0x41, - 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, - 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x58, 0x57, 0x49, 0x4e, 0x47, - 0x10, 0x0a, 0x12, 0x33, 0x0a, 0x2f, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, - 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x50, - 0x51, 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x32, 0x35, 0x36, 0x52, 0x31, 0x5f, 0x4d, 0x4c, 0x4b, - 0x45, 0x4d, 0x37, 0x36, 0x38, 0x10, 0x0b, 0x12, 0x34, 0x0a, 0x30, 0x4b, 0x41, 0x53, 0x5f, 0x50, + 0x12, 0x2d, 0x0a, 0x29, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, + 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, + 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x53, 0x10, 0x01, 0x12, + 0x2f, 0x0a, 0x2b, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4d, + 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, + 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 0x10, 0x02, + 0x12, 0x32, 0x0a, 0x2e, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, + 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, + 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x53, 0x5f, 0x57, 0x49, + 0x54, 0x48, 0x10, 0x03, 0x12, 0x30, 0x0a, 0x2c, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x4f, 0x50, 0x45, + 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x45, 0x4e, 0x44, 0x53, 0x5f, + 0x57, 0x49, 0x54, 0x48, 0x10, 0x04, 0x2a, 0xae, 0x01, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x45, 0x6e, + 0x75, 0x6d, 0x12, 0x29, 0x0a, 0x25, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x51, 0x55, 0x41, 0x4e, 0x54, 0x49, 0x46, 0x49, 0x45, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, + 0x1d, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x51, 0x55, 0x41, 0x4e, 0x54, + 0x49, 0x46, 0x49, 0x45, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x4e, 0x59, 0x10, 0x01, + 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x51, 0x55, + 0x41, 0x4e, 0x54, 0x49, 0x46, 0x49, 0x45, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x4c, + 0x4c, 0x10, 0x02, 0x12, 0x22, 0x0a, 0x1e, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x51, 0x55, 0x41, 0x4e, 0x54, 0x49, 0x46, 0x49, 0x45, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, + 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x03, 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, 0x9b, 0x03, 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, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, - 0x31, 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x31, 0x30, 0x32, 0x34, 0x10, 0x0c, 0x2a, 0x84, 0x02, - 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, 0x12, 0x18, 0x0a, 0x14, 0x41, - 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x58, 0x57, - 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x25, 0x0a, 0x21, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, - 0x48, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x32, 0x35, 0x36, 0x52, - 0x31, 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x37, 0x36, 0x38, 0x10, 0x07, 0x12, 0x26, 0x0a, 0x22, - 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, + 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, 0x12, 0x26, 0x0a, 0x22, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, + 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x50, 0x51, + 0x54, 0x5f, 0x58, 0x57, 0x49, 0x4e, 0x47, 0x10, 0x0a, 0x12, 0x33, 0x0a, 0x2f, 0x4b, 0x41, 0x53, + 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, + 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x32, 0x35, + 0x36, 0x52, 0x31, 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x37, 0x36, 0x38, 0x10, 0x0b, 0x12, 0x34, + 0x0a, 0x30, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, + 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31, 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x31, 0x30, - 0x32, 0x34, 0x10, 0x08, 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, + 0x32, 0x34, 0x10, 0x0c, 0x2a, 0x84, 0x02, 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, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, + 0x48, 0x50, 0x51, 0x54, 0x5f, 0x58, 0x57, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x25, 0x0a, 0x21, + 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, + 0x45, 0x43, 0x50, 0x32, 0x35, 0x36, 0x52, 0x31, 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x37, 0x36, + 0x38, 0x10, 0x07, 0x12, 0x26, 0x0a, 0x22, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, + 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31, 0x5f, + 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x31, 0x30, 0x32, 0x34, 0x10, 0x08, 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 ( @@ -4114,159 +4250,162 @@ func file_policy_objects_proto_rawDescGZIP() []byte { return file_policy_objects_proto_rawDescData } -var file_policy_objects_proto_enumTypes = make([]protoimpl.EnumInfo, 10) +var file_policy_objects_proto_enumTypes = make([]protoimpl.EnumInfo, 11) var file_policy_objects_proto_msgTypes = make([]protoimpl.MessageInfo, 35) var file_policy_objects_proto_goTypes = []interface{}{ (AttributeRuleTypeEnum)(0), // 0: policy.AttributeRuleTypeEnum (SubjectMappingOperatorEnum)(0), // 1: policy.SubjectMappingOperatorEnum (ConditionBooleanTypeEnum)(0), // 2: policy.ConditionBooleanTypeEnum - (DynamicValueOperatorEnum)(0), // 3: policy.DynamicValueOperatorEnum - (SourceType)(0), // 4: policy.SourceType - (KasPublicKeyAlgEnum)(0), // 5: policy.KasPublicKeyAlgEnum - (Algorithm)(0), // 6: policy.Algorithm - (KeyStatus)(0), // 7: policy.KeyStatus - (KeyMode)(0), // 8: policy.KeyMode - (Action_StandardAction)(0), // 9: policy.Action.StandardAction - (*SimpleKasPublicKey)(nil), // 10: policy.SimpleKasPublicKey - (*SimpleKasKey)(nil), // 11: policy.SimpleKasKey - (*KeyProviderConfig)(nil), // 12: policy.KeyProviderConfig - (*Namespace)(nil), // 13: policy.Namespace - (*Attribute)(nil), // 14: policy.Attribute - (*Value)(nil), // 15: policy.Value - (*Action)(nil), // 16: policy.Action - (*SubjectMapping)(nil), // 17: policy.SubjectMapping - (*DynamicValueResolver)(nil), // 18: policy.DynamicValueResolver - (*DynamicValueMapping)(nil), // 19: policy.DynamicValueMapping - (*Condition)(nil), // 20: policy.Condition - (*ConditionGroup)(nil), // 21: policy.ConditionGroup - (*SubjectSet)(nil), // 22: policy.SubjectSet - (*SubjectConditionSet)(nil), // 23: policy.SubjectConditionSet - (*SubjectProperty)(nil), // 24: policy.SubjectProperty - (*ResourceMappingGroup)(nil), // 25: policy.ResourceMappingGroup - (*ResourceMapping)(nil), // 26: policy.ResourceMapping - (*KeyAccessServer)(nil), // 27: policy.KeyAccessServer - (*Key)(nil), // 28: policy.Key - (*KasPublicKey)(nil), // 29: policy.KasPublicKey - (*KasPublicKeySet)(nil), // 30: policy.KasPublicKeySet - (*PublicKey)(nil), // 31: policy.PublicKey - (*RegisteredResource)(nil), // 32: policy.RegisteredResource - (*RegisteredResourceValue)(nil), // 33: policy.RegisteredResourceValue - (*PolicyEnforcementPoint)(nil), // 34: policy.PolicyEnforcementPoint - (*RequestContext)(nil), // 35: policy.RequestContext - (*Obligation)(nil), // 36: policy.Obligation - (*ObligationValue)(nil), // 37: policy.ObligationValue - (*ObligationTrigger)(nil), // 38: policy.ObligationTrigger - (*KasKey)(nil), // 39: policy.KasKey - (*PublicKeyCtx)(nil), // 40: policy.PublicKeyCtx - (*PrivateKeyCtx)(nil), // 41: policy.PrivateKeyCtx - (*AsymmetricKey)(nil), // 42: policy.AsymmetricKey - (*SymmetricKey)(nil), // 43: policy.SymmetricKey - (*RegisteredResourceValue_ActionAttributeValue)(nil), // 44: policy.RegisteredResourceValue.ActionAttributeValue - (*common.Metadata)(nil), // 45: common.Metadata - (*wrapperspb.BoolValue)(nil), // 46: google.protobuf.BoolValue + (ConditionComparisonOperatorEnum)(0), // 3: policy.ConditionComparisonOperatorEnum + (ConditionQuantifierEnum)(0), // 4: policy.ConditionQuantifierEnum + (SourceType)(0), // 5: policy.SourceType + (KasPublicKeyAlgEnum)(0), // 6: policy.KasPublicKeyAlgEnum + (Algorithm)(0), // 7: policy.Algorithm + (KeyStatus)(0), // 8: policy.KeyStatus + (KeyMode)(0), // 9: policy.KeyMode + (Action_StandardAction)(0), // 10: policy.Action.StandardAction + (*SimpleKasPublicKey)(nil), // 11: policy.SimpleKasPublicKey + (*SimpleKasKey)(nil), // 12: policy.SimpleKasKey + (*KeyProviderConfig)(nil), // 13: policy.KeyProviderConfig + (*Namespace)(nil), // 14: policy.Namespace + (*Attribute)(nil), // 15: policy.Attribute + (*Value)(nil), // 16: policy.Value + (*Action)(nil), // 17: policy.Action + (*SubjectMapping)(nil), // 18: policy.SubjectMapping + (*DynamicValueResolver)(nil), // 19: policy.DynamicValueResolver + (*DynamicValueMapping)(nil), // 20: policy.DynamicValueMapping + (*Condition)(nil), // 21: policy.Condition + (*ConditionGroup)(nil), // 22: policy.ConditionGroup + (*SubjectSet)(nil), // 23: policy.SubjectSet + (*SubjectConditionSet)(nil), // 24: policy.SubjectConditionSet + (*SubjectProperty)(nil), // 25: policy.SubjectProperty + (*ResourceMappingGroup)(nil), // 26: policy.ResourceMappingGroup + (*ResourceMapping)(nil), // 27: policy.ResourceMapping + (*KeyAccessServer)(nil), // 28: policy.KeyAccessServer + (*Key)(nil), // 29: policy.Key + (*KasPublicKey)(nil), // 30: policy.KasPublicKey + (*KasPublicKeySet)(nil), // 31: policy.KasPublicKeySet + (*PublicKey)(nil), // 32: policy.PublicKey + (*RegisteredResource)(nil), // 33: policy.RegisteredResource + (*RegisteredResourceValue)(nil), // 34: policy.RegisteredResourceValue + (*PolicyEnforcementPoint)(nil), // 35: policy.PolicyEnforcementPoint + (*RequestContext)(nil), // 36: policy.RequestContext + (*Obligation)(nil), // 37: policy.Obligation + (*ObligationValue)(nil), // 38: policy.ObligationValue + (*ObligationTrigger)(nil), // 39: policy.ObligationTrigger + (*KasKey)(nil), // 40: policy.KasKey + (*PublicKeyCtx)(nil), // 41: policy.PublicKeyCtx + (*PrivateKeyCtx)(nil), // 42: policy.PrivateKeyCtx + (*AsymmetricKey)(nil), // 43: policy.AsymmetricKey + (*SymmetricKey)(nil), // 44: policy.SymmetricKey + (*RegisteredResourceValue_ActionAttributeValue)(nil), // 45: policy.RegisteredResourceValue.ActionAttributeValue + (*common.Metadata)(nil), // 46: common.Metadata + (*wrapperspb.BoolValue)(nil), // 47: google.protobuf.BoolValue } var file_policy_objects_proto_depIdxs = []int32{ - 6, // 0: policy.SimpleKasPublicKey.algorithm:type_name -> policy.Algorithm - 10, // 1: policy.SimpleKasKey.public_key:type_name -> policy.SimpleKasPublicKey - 45, // 2: policy.KeyProviderConfig.metadata:type_name -> common.Metadata - 46, // 3: policy.Namespace.active:type_name -> google.protobuf.BoolValue - 45, // 4: policy.Namespace.metadata:type_name -> common.Metadata - 27, // 5: policy.Namespace.grants:type_name -> policy.KeyAccessServer - 11, // 6: policy.Namespace.kas_keys:type_name -> policy.SimpleKasKey - 13, // 7: policy.Attribute.namespace:type_name -> policy.Namespace + 7, // 0: policy.SimpleKasPublicKey.algorithm:type_name -> policy.Algorithm + 11, // 1: policy.SimpleKasKey.public_key:type_name -> policy.SimpleKasPublicKey + 46, // 2: policy.KeyProviderConfig.metadata:type_name -> common.Metadata + 47, // 3: policy.Namespace.active:type_name -> google.protobuf.BoolValue + 46, // 4: policy.Namespace.metadata:type_name -> common.Metadata + 28, // 5: policy.Namespace.grants:type_name -> policy.KeyAccessServer + 12, // 6: policy.Namespace.kas_keys:type_name -> policy.SimpleKasKey + 14, // 7: policy.Attribute.namespace:type_name -> policy.Namespace 0, // 8: policy.Attribute.rule:type_name -> policy.AttributeRuleTypeEnum - 15, // 9: policy.Attribute.values:type_name -> policy.Value - 27, // 10: policy.Attribute.grants:type_name -> policy.KeyAccessServer - 46, // 11: policy.Attribute.active:type_name -> google.protobuf.BoolValue - 11, // 12: policy.Attribute.kas_keys:type_name -> policy.SimpleKasKey - 46, // 13: policy.Attribute.allow_traversal:type_name -> google.protobuf.BoolValue - 45, // 14: policy.Attribute.metadata:type_name -> common.Metadata - 14, // 15: policy.Value.attribute:type_name -> policy.Attribute - 27, // 16: policy.Value.grants:type_name -> policy.KeyAccessServer - 46, // 17: policy.Value.active:type_name -> google.protobuf.BoolValue - 17, // 18: policy.Value.subject_mappings:type_name -> policy.SubjectMapping - 11, // 19: policy.Value.kas_keys:type_name -> policy.SimpleKasKey - 26, // 20: policy.Value.resource_mappings:type_name -> policy.ResourceMapping - 36, // 21: policy.Value.obligations:type_name -> policy.Obligation - 45, // 22: policy.Value.metadata:type_name -> common.Metadata - 9, // 23: policy.Action.standard:type_name -> policy.Action.StandardAction - 13, // 24: policy.Action.namespace:type_name -> policy.Namespace - 45, // 25: policy.Action.metadata:type_name -> common.Metadata - 15, // 26: policy.SubjectMapping.attribute_value:type_name -> policy.Value - 23, // 27: policy.SubjectMapping.subject_condition_set:type_name -> policy.SubjectConditionSet - 16, // 28: policy.SubjectMapping.actions:type_name -> policy.Action - 13, // 29: policy.SubjectMapping.namespace:type_name -> policy.Namespace - 45, // 30: policy.SubjectMapping.metadata:type_name -> common.Metadata - 3, // 31: policy.DynamicValueResolver.operator:type_name -> policy.DynamicValueOperatorEnum - 14, // 32: policy.DynamicValueMapping.attribute_definition:type_name -> policy.Attribute - 18, // 33: policy.DynamicValueMapping.value_resolver:type_name -> policy.DynamicValueResolver - 23, // 34: policy.DynamicValueMapping.subject_condition_set:type_name -> policy.SubjectConditionSet - 16, // 35: policy.DynamicValueMapping.actions:type_name -> policy.Action - 13, // 36: policy.DynamicValueMapping.namespace:type_name -> policy.Namespace - 45, // 37: policy.DynamicValueMapping.metadata:type_name -> common.Metadata + 16, // 9: policy.Attribute.values:type_name -> policy.Value + 28, // 10: policy.Attribute.grants:type_name -> policy.KeyAccessServer + 47, // 11: policy.Attribute.active:type_name -> google.protobuf.BoolValue + 12, // 12: policy.Attribute.kas_keys:type_name -> policy.SimpleKasKey + 47, // 13: policy.Attribute.allow_traversal:type_name -> google.protobuf.BoolValue + 46, // 14: policy.Attribute.metadata:type_name -> common.Metadata + 15, // 15: policy.Value.attribute:type_name -> policy.Attribute + 28, // 16: policy.Value.grants:type_name -> policy.KeyAccessServer + 47, // 17: policy.Value.active:type_name -> google.protobuf.BoolValue + 18, // 18: policy.Value.subject_mappings:type_name -> policy.SubjectMapping + 12, // 19: policy.Value.kas_keys:type_name -> policy.SimpleKasKey + 27, // 20: policy.Value.resource_mappings:type_name -> policy.ResourceMapping + 37, // 21: policy.Value.obligations:type_name -> policy.Obligation + 46, // 22: policy.Value.metadata:type_name -> common.Metadata + 10, // 23: policy.Action.standard:type_name -> policy.Action.StandardAction + 14, // 24: policy.Action.namespace:type_name -> policy.Namespace + 46, // 25: policy.Action.metadata:type_name -> common.Metadata + 16, // 26: policy.SubjectMapping.attribute_value:type_name -> policy.Value + 24, // 27: policy.SubjectMapping.subject_condition_set:type_name -> policy.SubjectConditionSet + 17, // 28: policy.SubjectMapping.actions:type_name -> policy.Action + 14, // 29: policy.SubjectMapping.namespace:type_name -> policy.Namespace + 46, // 30: policy.SubjectMapping.metadata:type_name -> common.Metadata + 3, // 31: policy.DynamicValueResolver.comparison:type_name -> policy.ConditionComparisonOperatorEnum + 15, // 32: policy.DynamicValueMapping.attribute_definition:type_name -> policy.Attribute + 19, // 33: policy.DynamicValueMapping.value_resolver:type_name -> policy.DynamicValueResolver + 24, // 34: policy.DynamicValueMapping.subject_condition_set:type_name -> policy.SubjectConditionSet + 17, // 35: policy.DynamicValueMapping.actions:type_name -> policy.Action + 14, // 36: policy.DynamicValueMapping.namespace:type_name -> policy.Namespace + 46, // 37: policy.DynamicValueMapping.metadata:type_name -> common.Metadata 1, // 38: policy.Condition.operator:type_name -> policy.SubjectMappingOperatorEnum - 20, // 39: policy.ConditionGroup.conditions:type_name -> policy.Condition - 2, // 40: policy.ConditionGroup.boolean_operator:type_name -> policy.ConditionBooleanTypeEnum - 21, // 41: policy.SubjectSet.condition_groups:type_name -> policy.ConditionGroup - 13, // 42: policy.SubjectConditionSet.namespace:type_name -> policy.Namespace - 22, // 43: policy.SubjectConditionSet.subject_sets:type_name -> policy.SubjectSet - 45, // 44: policy.SubjectConditionSet.metadata:type_name -> common.Metadata - 45, // 45: policy.ResourceMappingGroup.metadata:type_name -> common.Metadata - 45, // 46: policy.ResourceMapping.metadata:type_name -> common.Metadata - 15, // 47: policy.ResourceMapping.attribute_value:type_name -> policy.Value - 25, // 48: policy.ResourceMapping.group:type_name -> policy.ResourceMappingGroup - 13, // 49: policy.ResourceMapping.namespace:type_name -> policy.Namespace - 31, // 50: policy.KeyAccessServer.public_key:type_name -> policy.PublicKey - 4, // 51: policy.KeyAccessServer.source_type:type_name -> policy.SourceType - 11, // 52: policy.KeyAccessServer.kas_keys:type_name -> policy.SimpleKasKey - 45, // 53: policy.KeyAccessServer.metadata:type_name -> common.Metadata - 46, // 54: policy.Key.is_active:type_name -> google.protobuf.BoolValue - 46, // 55: policy.Key.was_mapped:type_name -> google.protobuf.BoolValue - 29, // 56: policy.Key.public_key:type_name -> policy.KasPublicKey - 27, // 57: policy.Key.kas:type_name -> policy.KeyAccessServer - 45, // 58: policy.Key.metadata:type_name -> common.Metadata - 5, // 59: policy.KasPublicKey.alg:type_name -> policy.KasPublicKeyAlgEnum - 29, // 60: policy.KasPublicKeySet.keys:type_name -> policy.KasPublicKey - 30, // 61: policy.PublicKey.cached:type_name -> policy.KasPublicKeySet - 33, // 62: policy.RegisteredResource.values:type_name -> policy.RegisteredResourceValue - 13, // 63: policy.RegisteredResource.namespace:type_name -> policy.Namespace - 45, // 64: policy.RegisteredResource.metadata:type_name -> common.Metadata - 32, // 65: policy.RegisteredResourceValue.resource:type_name -> policy.RegisteredResource - 44, // 66: policy.RegisteredResourceValue.action_attribute_values:type_name -> policy.RegisteredResourceValue.ActionAttributeValue - 45, // 67: policy.RegisteredResourceValue.metadata:type_name -> common.Metadata - 34, // 68: policy.RequestContext.pep:type_name -> policy.PolicyEnforcementPoint - 13, // 69: policy.Obligation.namespace:type_name -> policy.Namespace - 37, // 70: policy.Obligation.values:type_name -> policy.ObligationValue - 45, // 71: policy.Obligation.metadata:type_name -> common.Metadata - 36, // 72: policy.ObligationValue.obligation:type_name -> policy.Obligation - 38, // 73: policy.ObligationValue.triggers:type_name -> policy.ObligationTrigger - 45, // 74: policy.ObligationValue.metadata:type_name -> common.Metadata - 37, // 75: policy.ObligationTrigger.obligation_value:type_name -> policy.ObligationValue - 16, // 76: policy.ObligationTrigger.action:type_name -> policy.Action - 15, // 77: policy.ObligationTrigger.attribute_value:type_name -> policy.Value - 35, // 78: policy.ObligationTrigger.context:type_name -> policy.RequestContext - 13, // 79: policy.ObligationTrigger.namespace:type_name -> policy.Namespace - 45, // 80: policy.ObligationTrigger.metadata:type_name -> common.Metadata - 42, // 81: policy.KasKey.key:type_name -> policy.AsymmetricKey - 6, // 82: policy.AsymmetricKey.key_algorithm:type_name -> policy.Algorithm - 7, // 83: policy.AsymmetricKey.key_status:type_name -> policy.KeyStatus - 8, // 84: policy.AsymmetricKey.key_mode:type_name -> policy.KeyMode - 40, // 85: policy.AsymmetricKey.public_key_ctx:type_name -> policy.PublicKeyCtx - 41, // 86: policy.AsymmetricKey.private_key_ctx:type_name -> policy.PrivateKeyCtx - 12, // 87: policy.AsymmetricKey.provider_config:type_name -> policy.KeyProviderConfig - 45, // 88: policy.AsymmetricKey.metadata:type_name -> common.Metadata - 7, // 89: policy.SymmetricKey.key_status:type_name -> policy.KeyStatus - 8, // 90: policy.SymmetricKey.key_mode:type_name -> policy.KeyMode - 12, // 91: policy.SymmetricKey.provider_config:type_name -> policy.KeyProviderConfig - 45, // 92: policy.SymmetricKey.metadata:type_name -> common.Metadata - 16, // 93: policy.RegisteredResourceValue.ActionAttributeValue.action:type_name -> policy.Action - 15, // 94: policy.RegisteredResourceValue.ActionAttributeValue.attribute_value:type_name -> policy.Value - 45, // 95: policy.RegisteredResourceValue.ActionAttributeValue.metadata:type_name -> common.Metadata - 96, // [96:96] is the sub-list for method output_type - 96, // [96:96] is the sub-list for method input_type - 96, // [96:96] is the sub-list for extension type_name - 96, // [96:96] is the sub-list for extension extendee - 0, // [0:96] is the sub-list for field type_name + 3, // 39: policy.Condition.comparison:type_name -> policy.ConditionComparisonOperatorEnum + 4, // 40: policy.Condition.quantifier:type_name -> policy.ConditionQuantifierEnum + 21, // 41: policy.ConditionGroup.conditions:type_name -> policy.Condition + 2, // 42: policy.ConditionGroup.boolean_operator:type_name -> policy.ConditionBooleanTypeEnum + 22, // 43: policy.SubjectSet.condition_groups:type_name -> policy.ConditionGroup + 14, // 44: policy.SubjectConditionSet.namespace:type_name -> policy.Namespace + 23, // 45: policy.SubjectConditionSet.subject_sets:type_name -> policy.SubjectSet + 46, // 46: policy.SubjectConditionSet.metadata:type_name -> common.Metadata + 46, // 47: policy.ResourceMappingGroup.metadata:type_name -> common.Metadata + 46, // 48: policy.ResourceMapping.metadata:type_name -> common.Metadata + 16, // 49: policy.ResourceMapping.attribute_value:type_name -> policy.Value + 26, // 50: policy.ResourceMapping.group:type_name -> policy.ResourceMappingGroup + 14, // 51: policy.ResourceMapping.namespace:type_name -> policy.Namespace + 32, // 52: policy.KeyAccessServer.public_key:type_name -> policy.PublicKey + 5, // 53: policy.KeyAccessServer.source_type:type_name -> policy.SourceType + 12, // 54: policy.KeyAccessServer.kas_keys:type_name -> policy.SimpleKasKey + 46, // 55: policy.KeyAccessServer.metadata:type_name -> common.Metadata + 47, // 56: policy.Key.is_active:type_name -> google.protobuf.BoolValue + 47, // 57: policy.Key.was_mapped:type_name -> google.protobuf.BoolValue + 30, // 58: policy.Key.public_key:type_name -> policy.KasPublicKey + 28, // 59: policy.Key.kas:type_name -> policy.KeyAccessServer + 46, // 60: policy.Key.metadata:type_name -> common.Metadata + 6, // 61: policy.KasPublicKey.alg:type_name -> policy.KasPublicKeyAlgEnum + 30, // 62: policy.KasPublicKeySet.keys:type_name -> policy.KasPublicKey + 31, // 63: policy.PublicKey.cached:type_name -> policy.KasPublicKeySet + 34, // 64: policy.RegisteredResource.values:type_name -> policy.RegisteredResourceValue + 14, // 65: policy.RegisteredResource.namespace:type_name -> policy.Namespace + 46, // 66: policy.RegisteredResource.metadata:type_name -> common.Metadata + 33, // 67: policy.RegisteredResourceValue.resource:type_name -> policy.RegisteredResource + 45, // 68: policy.RegisteredResourceValue.action_attribute_values:type_name -> policy.RegisteredResourceValue.ActionAttributeValue + 46, // 69: policy.RegisteredResourceValue.metadata:type_name -> common.Metadata + 35, // 70: policy.RequestContext.pep:type_name -> policy.PolicyEnforcementPoint + 14, // 71: policy.Obligation.namespace:type_name -> policy.Namespace + 38, // 72: policy.Obligation.values:type_name -> policy.ObligationValue + 46, // 73: policy.Obligation.metadata:type_name -> common.Metadata + 37, // 74: policy.ObligationValue.obligation:type_name -> policy.Obligation + 39, // 75: policy.ObligationValue.triggers:type_name -> policy.ObligationTrigger + 46, // 76: policy.ObligationValue.metadata:type_name -> common.Metadata + 38, // 77: policy.ObligationTrigger.obligation_value:type_name -> policy.ObligationValue + 17, // 78: policy.ObligationTrigger.action:type_name -> policy.Action + 16, // 79: policy.ObligationTrigger.attribute_value:type_name -> policy.Value + 36, // 80: policy.ObligationTrigger.context:type_name -> policy.RequestContext + 14, // 81: policy.ObligationTrigger.namespace:type_name -> policy.Namespace + 46, // 82: policy.ObligationTrigger.metadata:type_name -> common.Metadata + 43, // 83: policy.KasKey.key:type_name -> policy.AsymmetricKey + 7, // 84: policy.AsymmetricKey.key_algorithm:type_name -> policy.Algorithm + 8, // 85: policy.AsymmetricKey.key_status:type_name -> policy.KeyStatus + 9, // 86: policy.AsymmetricKey.key_mode:type_name -> policy.KeyMode + 41, // 87: policy.AsymmetricKey.public_key_ctx:type_name -> policy.PublicKeyCtx + 42, // 88: policy.AsymmetricKey.private_key_ctx:type_name -> policy.PrivateKeyCtx + 13, // 89: policy.AsymmetricKey.provider_config:type_name -> policy.KeyProviderConfig + 46, // 90: policy.AsymmetricKey.metadata:type_name -> common.Metadata + 8, // 91: policy.SymmetricKey.key_status:type_name -> policy.KeyStatus + 9, // 92: policy.SymmetricKey.key_mode:type_name -> policy.KeyMode + 13, // 93: policy.SymmetricKey.provider_config:type_name -> policy.KeyProviderConfig + 46, // 94: policy.SymmetricKey.metadata:type_name -> common.Metadata + 17, // 95: policy.RegisteredResourceValue.ActionAttributeValue.action:type_name -> policy.Action + 16, // 96: policy.RegisteredResourceValue.ActionAttributeValue.attribute_value:type_name -> policy.Value + 46, // 97: policy.RegisteredResourceValue.ActionAttributeValue.metadata:type_name -> common.Metadata + 98, // [98:98] is the sub-list for method output_type + 98, // [98:98] is the sub-list for method input_type + 98, // [98:98] is the sub-list for extension type_name + 98, // [98:98] is the sub-list for extension extendee + 0, // [0:98] is the sub-list for field type_name } func init() { file_policy_objects_proto_init() } @@ -4709,7 +4848,7 @@ func file_policy_objects_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_policy_objects_proto_rawDesc, - NumEnums: 10, + NumEnums: 11, NumMessages: 35, NumExtensions: 0, NumServices: 0, diff --git a/service/policy/objects.proto b/service/policy/objects.proto index 7cb8c1f1ac..8777b88bdf 100644 --- a/service/policy/objects.proto +++ b/service/policy/objects.proto @@ -180,19 +180,30 @@ enum ConditionBooleanTypeEnum { CONDITION_BOOLEAN_TYPE_ENUM_OR = 2; } -// Operators for dynamic, definition-level value entitlement. Unlike -// SubjectMappingOperatorEnum, whose right-hand operand is a static list authored into -// policy, a DynamicValueOperatorEnum's right-hand operand is the requested resource's -// attribute value segment, supplied at decision time. Each value is the inversion of its -// static SubjectMappingOperatorEnum counterpart. -enum DynamicValueOperatorEnum { - DYNAMIC_VALUE_OPERATOR_ENUM_UNSPECIFIED = 0; - // true when the requested resource value segment equals one of the values resolved by - // the selector against the entity representation (inversion of IN) - DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN = 1; - // true when one of the selector-resolved entity values contains the requested resource - // value segment as a substring (inversion of IN_CONTAINS) - DYNAMIC_VALUE_OPERATOR_ENUM_RESOURCE_VALUE_IN_CONTAINS = 2; +// How a selector result is compared against a comparison value. Replaces the all-in-one +// SubjectMappingOperatorEnum by separating the comparison from the quantifier (see +// ConditionQuantifierEnum) and case sensitivity. +enum ConditionComparisonOperatorEnum { + CONDITION_COMPARISON_OPERATOR_ENUM_UNSPECIFIED = 0; + // exact string equality + CONDITION_COMPARISON_OPERATOR_ENUM_EQUALS = 1; + // substring containment + CONDITION_COMPARISON_OPERATOR_ENUM_CONTAINS = 2; + // prefix match + CONDITION_COMPARISON_OPERATOR_ENUM_STARTS_WITH = 3; + // suffix match; the safe operator for domain matching (e.g. email domains) + CONDITION_COMPARISON_OPERATOR_ENUM_ENDS_WITH = 4; +} + +// How matches are aggregated across the comparison set (subject_external_values). +enum ConditionQuantifierEnum { + CONDITION_QUANTIFIER_ENUM_UNSPECIFIED = 0; + // at least one match (legacy IN behavior) + CONDITION_QUANTIFIER_ENUM_ANY = 1; + // every expected value matches + CONDITION_QUANTIFIER_ENUM_ALL = 2; + // no matches (legacy NOT_IN behavior) + CONDITION_QUANTIFIER_ENUM_NONE = 3; } /* @@ -220,20 +231,25 @@ message SubjectMapping { } /* - Definition Value Resolver: the dynamic half of a DynamicValueMapping. It - resolves a selector against the entity representation and compares the result to the - requested resource value segment using a DynamicValueOperatorEnum. + Dynamic Value Resolver: the dynamic half of a DynamicValueMapping. It resolves a selector + against the entity representation, then tests whether any resolved entity value matches the + requested resource value segment under comparison. The match is inherently existential over + the resolved entity values, so no quantifier is carried here. */ message DynamicValueResolver { // a selector for a field value on a flattened Entity Representation (such as from // idP/LDAP), e.g. ".patientAssignments[]" string subject_external_selector_value = 1 [(buf.validate.field).required = true]; - // the dynamic operator comparing the selector result to the resource value segment - DynamicValueOperatorEnum operator = 2 [ + // how the requested resource value segment is compared against each value the selector + // resolves from the entity representation + ConditionComparisonOperatorEnum comparison = 2 [ (buf.validate.field).enum.defined_only = true, (buf.validate.field).required = true ]; + + // when true, comparison is case-insensitive (default false = case-sensitive) + bool case_insensitive = 3; } /* @@ -275,16 +291,27 @@ message Condition { // from idP/LDAP) string subject_external_selector_value = 1 [(buf.validate.field).required = true]; - // the evaluation operator of relation + // Deprecated: use comparison + quantifier (+ case_insensitive) instead. Normalized to the + // decomposed fields in the service layer for backward compatibility. SubjectMappingOperatorEnum operator = 2 [ + deprecated = true, (buf.validate.field).enum.defined_only = true, - (buf.validate.field).required = true + (buf.validate.field).ignore = IGNORE_IF_ZERO_VALUE ]; // list of comparison values for the result of applying the // subject_external_selector_value on a flattened Entity Representation // (Subject), evaluated by the operator repeated string subject_external_values = 3 [(buf.validate.field).repeated.min_items = 1]; + + // how each selector result is compared to subject_external_values entries + ConditionComparisonOperatorEnum comparison = 4 [(buf.validate.field).enum.defined_only = true]; + + // how matches are aggregated across subject_external_values + ConditionQuantifierEnum quantifier = 5 [(buf.validate.field).enum.defined_only = true]; + + // when true, comparison is case-insensitive (default false = case-sensitive) + bool case_insensitive = 6; } // A collection of Conditions evaluated by the boolean_operator provided From 0540158cff8ef0e5ba806df60f4122dd5e919fb9 Mon Sep 17 00:00:00 2001 From: Krish Suchak Date: Tue, 16 Jun 2026 11:30:58 -0400 Subject: [PATCH 4/4] feat(policy): DSPX-2754 use BoolValue for case_insensitive (review) Model Condition.case_insensitive and DynamicValueResolver.case_insensitive as google.protobuf.BoolValue instead of bool, per review, so an explicit false is distinguishable from unset. This leaves room to change the default later without ambiguity. Regenerated protocol/go and docs. Signed-off-by: Krish Suchak --- docs/grpc/index.html | 10 +- .../policy/actions/actions.openapi.yaml | 6 +- .../policy/attributes/attributes.openapi.yaml | 6 +- .../dynamic_value_mapping.openapi.yaml | 12 +- docs/openapi/policy/objects.openapi.yaml | 12 +- .../obligations/obligations.openapi.yaml | 6 +- .../registered_resources.openapi.yaml | 6 +- .../resource_mapping.openapi.yaml | 6 +- .../subject_mapping.openapi.yaml | 6 +- .../openapi/policy/unsafe/unsafe.openapi.yaml | 6 +- protocol/go/policy/objects.pb.go | 1237 +++++++++-------- service/policy/objects.proto | 10 +- 12 files changed, 678 insertions(+), 645 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index 123da9884a..e22a412c00 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -2770,9 +2770,10 @@

        Condition

        - + - + @@ -2930,9 +2931,10 @@

        DynamicValueResolver

        - + - + diff --git a/docs/openapi/policy/actions/actions.openapi.yaml b/docs/openapi/policy/actions/actions.openapi.yaml index 26eb70634f..3f16ddef73 100644 --- a/docs/openapi/policy/actions/actions.openapi.yaml +++ b/docs/openapi/policy/actions/actions.openapi.yaml @@ -565,9 +565,11 @@ components: description: how matches are aggregated across subject_external_values $ref: '#/components/schemas/policy.ConditionQuantifierEnum' caseInsensitive: - type: boolean title: case_insensitive - description: when true, comparison is case-insensitive (default false = case-sensitive) + description: |- + when set true, comparison is case-insensitive; unset is treated as case-sensitive. Modeled as + BoolValue so an explicit false is distinguishable from unset, leaving room to change the default. + $ref: '#/components/schemas/google.protobuf.BoolValue' title: Condition required: - subjectExternalSelectorValue diff --git a/docs/openapi/policy/attributes/attributes.openapi.yaml b/docs/openapi/policy/attributes/attributes.openapi.yaml index f8ce5b2bab..b5270ccdb5 100644 --- a/docs/openapi/policy/attributes/attributes.openapi.yaml +++ b/docs/openapi/policy/attributes/attributes.openapi.yaml @@ -1138,9 +1138,11 @@ components: description: how matches are aggregated across subject_external_values $ref: '#/components/schemas/policy.ConditionQuantifierEnum' caseInsensitive: - type: boolean title: case_insensitive - description: when true, comparison is case-insensitive (default false = case-sensitive) + description: |- + when set true, comparison is case-insensitive; unset is treated as case-sensitive. Modeled as + BoolValue so an explicit false is distinguishable from unset, leaving room to change the default. + $ref: '#/components/schemas/google.protobuf.BoolValue' title: Condition required: - subjectExternalSelectorValue diff --git a/docs/openapi/policy/dynamicvaluemapping/dynamic_value_mapping.openapi.yaml b/docs/openapi/policy/dynamicvaluemapping/dynamic_value_mapping.openapi.yaml index 6bdb48ddf9..c05551ba69 100644 --- a/docs/openapi/policy/dynamicvaluemapping/dynamic_value_mapping.openapi.yaml +++ b/docs/openapi/policy/dynamicvaluemapping/dynamic_value_mapping.openapi.yaml @@ -584,9 +584,11 @@ components: description: how matches are aggregated across subject_external_values $ref: '#/components/schemas/policy.ConditionQuantifierEnum' caseInsensitive: - type: boolean title: case_insensitive - description: when true, comparison is case-insensitive (default false = case-sensitive) + description: |- + when set true, comparison is case-insensitive; unset is treated as case-sensitive. Modeled as + BoolValue so an explicit false is distinguishable from unset, leaving room to change the default. + $ref: '#/components/schemas/google.protobuf.BoolValue' title: Condition required: - subjectExternalSelectorValue @@ -671,9 +673,11 @@ components: resolves from the entity representation $ref: '#/components/schemas/policy.ConditionComparisonOperatorEnum' caseInsensitive: - type: boolean title: case_insensitive - description: when true, comparison is case-insensitive (default false = case-sensitive) + description: |- + when set true, comparison is case-insensitive; unset is treated as case-sensitive. Modeled as + BoolValue so an explicit false is distinguishable from unset, leaving room to change the default. + $ref: '#/components/schemas/google.protobuf.BoolValue' title: DynamicValueResolver required: - subjectExternalSelectorValue diff --git a/docs/openapi/policy/objects.openapi.yaml b/docs/openapi/policy/objects.openapi.yaml index e53a09d8a5..b888894b3c 100644 --- a/docs/openapi/policy/objects.openapi.yaml +++ b/docs/openapi/policy/objects.openapi.yaml @@ -423,9 +423,11 @@ components: description: how matches are aggregated across subject_external_values $ref: '#/components/schemas/policy.ConditionQuantifierEnum' caseInsensitive: - type: boolean title: case_insensitive - description: when true, comparison is case-insensitive (default false = case-sensitive) + description: |- + when set true, comparison is case-insensitive; unset is treated as case-sensitive. Modeled as + BoolValue so an explicit false is distinguishable from unset, leaving room to change the default. + $ref: '#/components/schemas/google.protobuf.BoolValue' title: Condition required: - subjectExternalSelectorValue @@ -510,9 +512,11 @@ components: resolves from the entity representation $ref: '#/components/schemas/policy.ConditionComparisonOperatorEnum' caseInsensitive: - type: boolean title: case_insensitive - description: when true, comparison is case-insensitive (default false = case-sensitive) + description: |- + when set true, comparison is case-insensitive; unset is treated as case-sensitive. Modeled as + BoolValue so an explicit false is distinguishable from unset, leaving room to change the default. + $ref: '#/components/schemas/google.protobuf.BoolValue' title: DynamicValueResolver required: - subjectExternalSelectorValue diff --git a/docs/openapi/policy/obligations/obligations.openapi.yaml b/docs/openapi/policy/obligations/obligations.openapi.yaml index ef592b5fa3..01fcb57b6a 100644 --- a/docs/openapi/policy/obligations/obligations.openapi.yaml +++ b/docs/openapi/policy/obligations/obligations.openapi.yaml @@ -970,9 +970,11 @@ components: description: how matches are aggregated across subject_external_values $ref: '#/components/schemas/policy.ConditionQuantifierEnum' caseInsensitive: - type: boolean title: case_insensitive - description: when true, comparison is case-insensitive (default false = case-sensitive) + description: |- + when set true, comparison is case-insensitive; unset is treated as case-sensitive. Modeled as + BoolValue so an explicit false is distinguishable from unset, leaving room to change the default. + $ref: '#/components/schemas/google.protobuf.BoolValue' title: Condition required: - subjectExternalSelectorValue diff --git a/docs/openapi/policy/registeredresources/registered_resources.openapi.yaml b/docs/openapi/policy/registeredresources/registered_resources.openapi.yaml index 7185026f36..cf6f526825 100644 --- a/docs/openapi/policy/registeredresources/registered_resources.openapi.yaml +++ b/docs/openapi/policy/registeredresources/registered_resources.openapi.yaml @@ -795,9 +795,11 @@ components: description: how matches are aggregated across subject_external_values $ref: '#/components/schemas/policy.ConditionQuantifierEnum' caseInsensitive: - type: boolean title: case_insensitive - description: when true, comparison is case-insensitive (default false = case-sensitive) + description: |- + when set true, comparison is case-insensitive; unset is treated as case-sensitive. Modeled as + BoolValue so an explicit false is distinguishable from unset, leaving room to change the default. + $ref: '#/components/schemas/google.protobuf.BoolValue' title: Condition required: - subjectExternalSelectorValue diff --git a/docs/openapi/policy/resourcemapping/resource_mapping.openapi.yaml b/docs/openapi/policy/resourcemapping/resource_mapping.openapi.yaml index e6d74f5d6b..c17e546137 100644 --- a/docs/openapi/policy/resourcemapping/resource_mapping.openapi.yaml +++ b/docs/openapi/policy/resourcemapping/resource_mapping.openapi.yaml @@ -775,9 +775,11 @@ components: description: how matches are aggregated across subject_external_values $ref: '#/components/schemas/policy.ConditionQuantifierEnum' caseInsensitive: - type: boolean title: case_insensitive - description: when true, comparison is case-insensitive (default false = case-sensitive) + description: |- + when set true, comparison is case-insensitive; unset is treated as case-sensitive. Modeled as + BoolValue so an explicit false is distinguishable from unset, leaving room to change the default. + $ref: '#/components/schemas/google.protobuf.BoolValue' title: Condition required: - subjectExternalSelectorValue diff --git a/docs/openapi/policy/subjectmapping/subject_mapping.openapi.yaml b/docs/openapi/policy/subjectmapping/subject_mapping.openapi.yaml index 44ebbe29f8..1113568374 100644 --- a/docs/openapi/policy/subjectmapping/subject_mapping.openapi.yaml +++ b/docs/openapi/policy/subjectmapping/subject_mapping.openapi.yaml @@ -837,9 +837,11 @@ components: description: how matches are aggregated across subject_external_values $ref: '#/components/schemas/policy.ConditionQuantifierEnum' caseInsensitive: - type: boolean title: case_insensitive - description: when true, comparison is case-insensitive (default false = case-sensitive) + description: |- + when set true, comparison is case-insensitive; unset is treated as case-sensitive. Modeled as + BoolValue so an explicit false is distinguishable from unset, leaving room to change the default. + $ref: '#/components/schemas/google.protobuf.BoolValue' title: Condition required: - subjectExternalSelectorValue diff --git a/docs/openapi/policy/unsafe/unsafe.openapi.yaml b/docs/openapi/policy/unsafe/unsafe.openapi.yaml index ecf435fe53..eff9dbd4d7 100644 --- a/docs/openapi/policy/unsafe/unsafe.openapi.yaml +++ b/docs/openapi/policy/unsafe/unsafe.openapi.yaml @@ -789,9 +789,11 @@ components: description: how matches are aggregated across subject_external_values $ref: '#/components/schemas/policy.ConditionQuantifierEnum' caseInsensitive: - type: boolean title: case_insensitive - description: when true, comparison is case-insensitive (default false = case-sensitive) + description: |- + when set true, comparison is case-insensitive; unset is treated as case-sensitive. Modeled as + BoolValue so an explicit false is distinguishable from unset, leaving room to change the default. + $ref: '#/components/schemas/google.protobuf.BoolValue' title: Condition required: - subjectExternalSelectorValue diff --git a/protocol/go/policy/objects.pb.go b/protocol/go/policy/objects.pb.go index 8a459aaff2..e7f4f3eaed 100644 --- a/protocol/go/policy/objects.pb.go +++ b/protocol/go/policy/objects.pb.go @@ -1464,8 +1464,9 @@ type DynamicValueResolver struct { // how the requested resource value segment is compared against each value the selector // resolves from the entity representation Comparison ConditionComparisonOperatorEnum `protobuf:"varint,2,opt,name=comparison,proto3,enum=policy.ConditionComparisonOperatorEnum" json:"comparison,omitempty"` - // when true, comparison is case-insensitive (default false = case-sensitive) - CaseInsensitive bool `protobuf:"varint,3,opt,name=case_insensitive,json=caseInsensitive,proto3" json:"case_insensitive,omitempty"` + // when set true, comparison is case-insensitive; unset is treated as case-sensitive. Modeled as + // BoolValue so an explicit false is distinguishable from unset, leaving room to change the default. + CaseInsensitive *wrapperspb.BoolValue `protobuf:"bytes,3,opt,name=case_insensitive,json=caseInsensitive,proto3" json:"case_insensitive,omitempty"` } func (x *DynamicValueResolver) Reset() { @@ -1514,11 +1515,11 @@ func (x *DynamicValueResolver) GetComparison() ConditionComparisonOperatorEnum { return ConditionComparisonOperatorEnum_CONDITION_COMPARISON_OPERATOR_ENUM_UNSPECIFIED } -func (x *DynamicValueResolver) GetCaseInsensitive() bool { +func (x *DynamicValueResolver) GetCaseInsensitive() *wrapperspb.BoolValue { if x != nil { return x.CaseInsensitive } - return false + return nil } // Dynamic Value Mapping: a Policy assigning permitted action(s) to @@ -1652,8 +1653,9 @@ type Condition struct { Comparison ConditionComparisonOperatorEnum `protobuf:"varint,4,opt,name=comparison,proto3,enum=policy.ConditionComparisonOperatorEnum" json:"comparison,omitempty"` // how matches are aggregated across subject_external_values Quantifier ConditionQuantifierEnum `protobuf:"varint,5,opt,name=quantifier,proto3,enum=policy.ConditionQuantifierEnum" json:"quantifier,omitempty"` - // when true, comparison is case-insensitive (default false = case-sensitive) - CaseInsensitive bool `protobuf:"varint,6,opt,name=case_insensitive,json=caseInsensitive,proto3" json:"case_insensitive,omitempty"` + // when set true, comparison is case-insensitive; unset is treated as case-sensitive. Modeled as + // BoolValue so an explicit false is distinguishable from unset, leaving room to change the default. + CaseInsensitive *wrapperspb.BoolValue `protobuf:"bytes,6,opt,name=case_insensitive,json=caseInsensitive,proto3" json:"case_insensitive,omitempty"` } func (x *Condition) Reset() { @@ -1724,11 +1726,11 @@ func (x *Condition) GetQuantifier() ConditionQuantifierEnum { return ConditionQuantifierEnum_CONDITION_QUANTIFIER_ENUM_UNSPECIFIED } -func (x *Condition) GetCaseInsensitive() bool { +func (x *Condition) GetCaseInsensitive() *wrapperspb.BoolValue { if x != nil { return x.CaseInsensitive } - return false + return nil } // A collection of Conditions evaluated by the boolean_operator provided @@ -3706,7 +3708,7 @@ var file_policy_objects_proto_rawDesc = []byte{ 0x61, 0x63, 0x65, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 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, 0xe6, 0x01, 0x0a, + 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x82, 0x02, 0x0a, 0x14, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x1f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, @@ -3718,524 +3720,527 @@ var file_policy_objects_proto_rawDesc = []byte{ 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x61, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x10, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x73, 0x65, 0x6e, 0x73, - 0x69, 0x74, 0x69, 0x76, 0x65, 0x22, 0x8a, 0x03, 0x0a, 0x13, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, - 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x44, 0x0a, - 0x14, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x13, - 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x72, 0x65, 0x73, - 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x12, 0x4f, 0x0a, 0x15, 0x73, 0x75, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x65, 0x74, 0x52, 0x13, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x06, 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, 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, 0xb4, 0x03, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x4d, 0x0a, 0x1f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, - 0x01, 0x52, 0x1c, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x4d, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x22, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 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, 0x42, 0x0d, 0xba, 0x48, 0x08, 0xd8, 0x01, 0x01, 0x82, 0x01, 0x02, - 0x10, 0x01, 0x18, 0x01, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x40, - 0x0a, 0x17, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x42, - 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x15, 0x73, 0x75, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x12, 0x51, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x43, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, - 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x08, 0xba, - 0x48, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, - 0x73, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x0a, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x08, 0xba, 0x48, 0x05, 0x82, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x0a, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x29, - 0x0a, 0x10, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, - 0x76, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x61, 0x73, 0x65, 0x49, 0x6e, - 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x0e, 0x43, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x3b, 0x0a, 0x0a, - 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0a, 0x63, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x10, 0x62, 0x6f, 0x6f, - 0x6c, 0x65, 0x61, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x43, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x54, 0x79, 0x70, - 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x82, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x0f, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x6f, 0x72, 0x22, 0x59, 0x0a, 0x0a, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, - 0x74, 0x12, 0x4b, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0f, 0x63, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0xc5, - 0x01, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 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, 0x3f, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, - 0x74, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0b, 0x73, 0x75, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x74, 0x73, 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, 0x7c, 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x17, 0x65, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, - 0x01, 0x01, 0x72, 0x02, 0x10, 0x01, 0x52, 0x15, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, - 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0xad, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x29, 0x0a, - 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0b, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x04, 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, 0x8a, 0x02, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 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, 0x12, 0x3e, 0x0a, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 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, 0x14, 0x0a, 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x12, 0x32, 0x0a, 0x05, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, - 0x70, 0x69, 0x6e, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x12, 0x2f, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 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, 0x22, 0x85, 0x05, 0x0a, 0x0f, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x87, 0x03, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0xf4, 0x02, 0xba, 0x48, 0xf0, 0x02, 0xba, 0x01, 0xec, 0x02, 0x0a, 0x0a, - 0x75, 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xcf, 0x01, 0x55, 0x52, 0x49, - 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x20, 0x55, 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x27, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x27, 0x29, - 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x64, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, - 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, - 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, - 0x2c, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x68, 0x79, - 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, - 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, 0x8b, 0x01, 0x74, - 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3f, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, - 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, - 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, - 0x39, 0x5d, 0x29, 0x3f, 0x28, 0x5c, 0x5c, 0x2e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, - 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, - 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, - 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x3a, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x29, - 0x3f, 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, 0x27, 0x29, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, - 0x30, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x12, 0x33, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x6b, 0x61, 0x73, 0x5f, 0x6b, 0x65, - 0x79, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x52, 0x07, - 0x6b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 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, 0x97, 0x02, 0x0a, 0x03, 0x4b, 0x65, - 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x37, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x77, 0x61, - 0x73, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x77, 0x61, 0x73, 0x4d, - 0x61, 0x70, 0x70, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, - 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, - 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x03, 0x6b, 0x61, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x2e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x52, 0x03, 0x6b, 0x61, 0x73, 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, 0x84, 0x01, 0x0a, 0x0c, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x03, 0x70, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x40, 0x52, 0x03, 0x70, - 0x65, 0x6d, 0x12, 0x1b, 0x0a, 0x03, 0x6b, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x09, 0xba, 0x48, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x03, 0x6b, 0x69, 0x64, 0x12, - 0x39, 0x0a, 0x03, 0x61, 0x6c, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, - 0x65, 0x79, 0x41, 0x6c, 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x82, 0x01, - 0x04, 0x10, 0x01, 0x20, 0x00, 0x52, 0x03, 0x61, 0x6c, 0x67, 0x22, 0x3b, 0x0a, 0x0f, 0x4b, 0x61, - 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x74, 0x12, 0x28, 0x0a, - 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x22, 0xe0, 0x03, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x84, 0x03, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0xe9, 0x02, 0xba, 0x48, 0xe5, 0x02, 0xba, 0x01, 0xe1, - 0x02, 0x0a, 0x0a, 0x75, 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xcf, 0x01, - 0x55, 0x52, 0x49, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x20, 0x55, 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x27, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x27, 0x29, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, - 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x65, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, - 0x74, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, - 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, - 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, - 0x80, 0x01, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, - 0x5e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, - 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, - 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, - 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x28, 0x5c, 0x5c, 0x2e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, - 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, - 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, - 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, - 0x27, 0x29, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x06, - 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, - 0x65, 0x79, 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, - 0x0c, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x4a, 0x04, 0x08, - 0x02, 0x10, 0x03, 0x52, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x22, 0xd0, 0x01, 0x0a, 0x12, 0x52, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 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, 0x37, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x2f, - 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x52, 0x0f, 0x63, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, + 0x65, 0x22, 0x8a, 0x03, 0x0a, 0x13, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x44, 0x0a, 0x14, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x13, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x43, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, + 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x72, 0x12, 0x4f, 0x0a, 0x15, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, + 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, + 0x52, 0x13, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x2f, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 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, 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, 0xd0, + 0x03, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x1f, + 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x1c, 0x73, + 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4d, 0x0a, 0x08, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 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, 0x42, 0x0d, 0xba, 0x48, 0x08, 0xd8, 0x01, 0x01, 0x82, 0x01, 0x02, 0x10, 0x01, 0x18, 0x01, + 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x40, 0x0a, 0x17, 0x73, 0x75, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, + 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x15, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x51, 0x0a, 0x0a, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x08, 0xba, 0x48, 0x05, 0x82, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x12, + 0x49, 0x0a, 0x0a, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x43, 0x6f, 0x6e, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x08, 0xba, 0x48, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, + 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x10, 0x63, 0x61, + 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x0f, 0x63, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, + 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x12, 0x3b, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xba, 0x48, 0x05, + 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x58, 0x0a, 0x10, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x5f, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, + 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0b, 0xba, + 0x48, 0x08, 0xc8, 0x01, 0x01, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0f, 0x62, 0x6f, 0x6f, 0x6c, + 0x65, 0x61, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x59, 0x0a, 0x0a, 0x53, + 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x74, 0x12, 0x4b, 0x0a, 0x10, 0x63, 0x6f, 0x6e, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x43, 0x6f, 0x6e, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x08, 0xba, 0x48, 0x05, + 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0xc5, 0x01, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 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, + 0x3f, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, + 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x74, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, + 0x02, 0x08, 0x01, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x74, 0x73, + 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, 0x7c, + 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x79, 0x12, 0x42, 0x0a, 0x17, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01, 0x01, 0x72, 0x02, 0x10, 0x01, 0x52, 0x15, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xad, 0x01, 0x0a, + 0x14, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x29, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, + 0xc8, 0x01, 0x01, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, + 0x12, 0x1a, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, + 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x66, 0x71, 0x6e, 0x18, 0x04, 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, 0x8a, 0x02, 0x0a, + 0x0f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 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, 0x12, 0x3e, + 0x0a, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 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, 0x14, + 0x0a, 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, + 0x65, 0x72, 0x6d, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2f, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 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, 0x22, 0x85, 0x05, 0x0a, 0x0f, 0x4b, 0x65, + 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x87, 0x03, + 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xf4, 0x02, 0xba, 0x48, + 0xf0, 0x02, 0xba, 0x01, 0xec, 0x02, 0x0a, 0x0a, 0x75, 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x12, 0xcf, 0x01, 0x55, 0x52, 0x49, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, + 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, + 0x67, 0x2e, 0x2c, 0x20, 0x27, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, + 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x27, 0x29, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, + 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, + 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, + 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, + 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, + 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, + 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, + 0x68, 0x65, 0x73, 0x2e, 0x1a, 0x8b, 0x01, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, + 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3f, 0x3a, 0x2f, 0x2f, 0x5b, + 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, + 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, + 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x28, 0x5c, 0x5c, 0x2e, + 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, + 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, + 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, + 0x3a, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x29, 0x3f, 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, + 0x27, 0x29, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x30, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x0b, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, + 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2f, + 0x0a, 0x08, 0x6b, 0x61, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, + 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x52, 0x07, 0x6b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 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, 0x97, 0x02, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x69, 0x73, 0x5f, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, + 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x77, 0x61, 0x73, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x09, 0x77, 0x61, 0x73, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x12, 0x33, 0x0a, + 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, + 0x65, 0x79, 0x12, 0x29, 0x0a, 0x03, 0x6b, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x03, 0x6b, 0x61, 0x73, 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, 0x84, 0x01, 0x0a, 0x0c, + 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x03, + 0x70, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, + 0x10, 0x01, 0x18, 0x80, 0x40, 0x52, 0x03, 0x70, 0x65, 0x6d, 0x12, 0x1b, 0x0a, 0x03, 0x6b, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0xba, 0x48, 0x06, 0x72, 0x04, 0x10, 0x01, + 0x18, 0x20, 0x52, 0x03, 0x6b, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x03, 0x61, 0x6c, 0x67, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, + 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x41, 0x6c, 0x67, 0x45, 0x6e, 0x75, + 0x6d, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x82, 0x01, 0x04, 0x10, 0x01, 0x20, 0x00, 0x52, 0x03, 0x61, + 0x6c, 0x67, 0x22, 0x3b, 0x0a, 0x0f, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, + 0x65, 0x79, 0x53, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x22, + 0xe0, 0x03, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x84, 0x03, + 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0xe9, + 0x02, 0xba, 0x48, 0xe5, 0x02, 0xba, 0x01, 0xe1, 0x02, 0x0a, 0x0a, 0x75, 0x72, 0x69, 0x5f, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xcf, 0x01, 0x55, 0x52, 0x49, 0x20, 0x6d, 0x75, 0x73, 0x74, + 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x52, 0x4c, 0x20, + 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x27, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x27, 0x29, 0x20, 0x66, 0x6f, 0x6c, 0x6c, + 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, + 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x74, + 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, + 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x61, 0x6e, + 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, + 0x2c, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, + 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, + 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, 0x80, 0x01, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, + 0x2f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, + 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, + 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x28, 0x5c, + 0x5c, 0x2e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, + 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, + 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x29, + 0x2a, 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, 0x27, 0x29, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, + 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, + 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x05, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x22, 0xd0, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, + 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 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, 0x37, 0x0a, + 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, + 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x18, 0x04, 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, 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, 0xdc, 0x03, 0x0a, 0x17, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, + 0x65, 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, 0x36, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x6c, 0x0a, 0x17, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x34, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 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, 0xdc, 0x03, - 0x0a, 0x17, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 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, - 0x36, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x17, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, + 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0xb4, 0x01, + 0x0a, 0x14, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 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, 0x03, 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, 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, 0x3e, 0x0a, 0x16, 0x50, 0x6f, 0x6c, 0x69, 0x63, 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, 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, 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, 0x1a, 0xb4, 0x01, 0x0a, 0x14, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x26, - 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 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, 0x03, 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, 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, 0x3e, 0x0a, 0x16, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 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, 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, 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, + 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, 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, 0xd8, 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, 0x2f, - 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0b, 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, - 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, 0x9b, 0x02, 0x0a, 0x1f, 0x43, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x32, 0x0a, 0x2e, + 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, 0xd8, 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, 0x2f, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x18, 0x0b, 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, 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, 0x9b, 0x02, 0x0a, 0x1f, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, + 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x32, 0x0a, 0x2e, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 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, 0x2d, 0x0a, 0x29, 0x43, 0x4f, 0x4e, 0x44, + 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, + 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x45, + 0x51, 0x55, 0x41, 0x4c, 0x53, 0x10, 0x01, 0x12, 0x2f, 0x0a, 0x2b, 0x43, 0x4f, 0x4e, 0x44, 0x49, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, + 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x43, 0x4f, + 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 0x10, 0x02, 0x12, 0x32, 0x0a, 0x2e, 0x43, 0x4f, 0x4e, 0x44, + 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, + 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x53, + 0x54, 0x41, 0x52, 0x54, 0x53, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x10, 0x03, 0x12, 0x30, 0x0a, 0x2c, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 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, 0x2d, 0x0a, 0x29, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, - 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, - 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x53, 0x10, 0x01, 0x12, - 0x2f, 0x0a, 0x2b, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4d, - 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, - 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 0x10, 0x02, - 0x12, 0x32, 0x0a, 0x2e, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, - 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, - 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x53, 0x5f, 0x57, 0x49, - 0x54, 0x48, 0x10, 0x03, 0x12, 0x30, 0x0a, 0x2c, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x4f, 0x50, 0x45, - 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x45, 0x4e, 0x44, 0x53, 0x5f, - 0x57, 0x49, 0x54, 0x48, 0x10, 0x04, 0x2a, 0xae, 0x01, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x45, 0x6e, - 0x75, 0x6d, 0x12, 0x29, 0x0a, 0x25, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x51, 0x55, 0x41, 0x4e, 0x54, 0x49, 0x46, 0x49, 0x45, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, - 0x1d, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x51, 0x55, 0x41, 0x4e, 0x54, - 0x49, 0x46, 0x49, 0x45, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x4e, 0x59, 0x10, 0x01, - 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x51, 0x55, - 0x41, 0x4e, 0x54, 0x49, 0x46, 0x49, 0x45, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x4c, - 0x4c, 0x10, 0x02, 0x12, 0x22, 0x0a, 0x1e, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x51, 0x55, 0x41, 0x4e, 0x54, 0x49, 0x46, 0x49, 0x45, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, - 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x03, 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, 0x9b, 0x03, 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, 0x12, 0x26, 0x0a, 0x22, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, - 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x50, 0x51, - 0x54, 0x5f, 0x58, 0x57, 0x49, 0x4e, 0x47, 0x10, 0x0a, 0x12, 0x33, 0x0a, 0x2f, 0x4b, 0x41, 0x53, + 0x55, 0x4d, 0x5f, 0x45, 0x4e, 0x44, 0x53, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x10, 0x04, 0x2a, 0xae, + 0x01, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x61, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x29, 0x0a, 0x25, 0x43, 0x4f, + 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x51, 0x55, 0x41, 0x4e, 0x54, 0x49, 0x46, 0x49, + 0x45, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x51, 0x55, 0x41, 0x4e, 0x54, 0x49, 0x46, 0x49, 0x45, 0x52, 0x5f, 0x45, 0x4e, + 0x55, 0x4d, 0x5f, 0x41, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x4f, 0x4e, 0x44, + 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x51, 0x55, 0x41, 0x4e, 0x54, 0x49, 0x46, 0x49, 0x45, 0x52, + 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x4c, 0x4c, 0x10, 0x02, 0x12, 0x22, 0x0a, 0x1e, 0x43, + 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x51, 0x55, 0x41, 0x4e, 0x54, 0x49, 0x46, + 0x49, 0x45, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x03, 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, 0x9b, + 0x03, 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, 0x12, 0x26, 0x0a, 0x22, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, - 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x32, 0x35, - 0x36, 0x52, 0x31, 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x37, 0x36, 0x38, 0x10, 0x0b, 0x12, 0x34, - 0x0a, 0x30, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, - 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, - 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31, 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x31, 0x30, - 0x32, 0x34, 0x10, 0x0c, 0x2a, 0x84, 0x02, 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, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, - 0x48, 0x50, 0x51, 0x54, 0x5f, 0x58, 0x57, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x25, 0x0a, 0x21, - 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, - 0x45, 0x43, 0x50, 0x32, 0x35, 0x36, 0x52, 0x31, 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x37, 0x36, - 0x38, 0x10, 0x07, 0x12, 0x26, 0x0a, 0x22, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, - 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31, 0x5f, - 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x31, 0x30, 0x32, 0x34, 0x10, 0x08, 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, + 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x58, 0x57, 0x49, 0x4e, 0x47, 0x10, + 0x0a, 0x12, 0x33, 0x0a, 0x2f, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, + 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x50, 0x51, + 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x32, 0x35, 0x36, 0x52, 0x31, 0x5f, 0x4d, 0x4c, 0x4b, 0x45, + 0x4d, 0x37, 0x36, 0x38, 0x10, 0x0b, 0x12, 0x34, 0x0a, 0x30, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, + 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, + 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31, + 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x31, 0x30, 0x32, 0x34, 0x10, 0x0c, 0x2a, 0x84, 0x02, 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, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x4c, + 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x58, 0x57, 0x49, + 0x4e, 0x47, 0x10, 0x06, 0x12, 0x25, 0x0a, 0x21, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, + 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x32, 0x35, 0x36, 0x52, 0x31, + 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x37, 0x36, 0x38, 0x10, 0x07, 0x12, 0x26, 0x0a, 0x22, 0x41, + 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x48, 0x50, 0x51, 0x54, 0x5f, 0x53, 0x45, + 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31, 0x5f, 0x4d, 0x4c, 0x4b, 0x45, 0x4d, 0x31, 0x30, 0x32, + 0x34, 0x10, 0x08, 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 ( @@ -4303,109 +4308,111 @@ var file_policy_objects_proto_goTypes = []interface{}{ (*wrapperspb.BoolValue)(nil), // 47: google.protobuf.BoolValue } var file_policy_objects_proto_depIdxs = []int32{ - 7, // 0: policy.SimpleKasPublicKey.algorithm:type_name -> policy.Algorithm - 11, // 1: policy.SimpleKasKey.public_key:type_name -> policy.SimpleKasPublicKey - 46, // 2: policy.KeyProviderConfig.metadata:type_name -> common.Metadata - 47, // 3: policy.Namespace.active:type_name -> google.protobuf.BoolValue - 46, // 4: policy.Namespace.metadata:type_name -> common.Metadata - 28, // 5: policy.Namespace.grants:type_name -> policy.KeyAccessServer - 12, // 6: policy.Namespace.kas_keys:type_name -> policy.SimpleKasKey - 14, // 7: policy.Attribute.namespace:type_name -> policy.Namespace - 0, // 8: policy.Attribute.rule:type_name -> policy.AttributeRuleTypeEnum - 16, // 9: policy.Attribute.values:type_name -> policy.Value - 28, // 10: policy.Attribute.grants:type_name -> policy.KeyAccessServer - 47, // 11: policy.Attribute.active:type_name -> google.protobuf.BoolValue - 12, // 12: policy.Attribute.kas_keys:type_name -> policy.SimpleKasKey - 47, // 13: policy.Attribute.allow_traversal:type_name -> google.protobuf.BoolValue - 46, // 14: policy.Attribute.metadata:type_name -> common.Metadata - 15, // 15: policy.Value.attribute:type_name -> policy.Attribute - 28, // 16: policy.Value.grants:type_name -> policy.KeyAccessServer - 47, // 17: policy.Value.active:type_name -> google.protobuf.BoolValue - 18, // 18: policy.Value.subject_mappings:type_name -> policy.SubjectMapping - 12, // 19: policy.Value.kas_keys:type_name -> policy.SimpleKasKey - 27, // 20: policy.Value.resource_mappings:type_name -> policy.ResourceMapping - 37, // 21: policy.Value.obligations:type_name -> policy.Obligation - 46, // 22: policy.Value.metadata:type_name -> common.Metadata - 10, // 23: policy.Action.standard:type_name -> policy.Action.StandardAction - 14, // 24: policy.Action.namespace:type_name -> policy.Namespace - 46, // 25: policy.Action.metadata:type_name -> common.Metadata - 16, // 26: policy.SubjectMapping.attribute_value:type_name -> policy.Value - 24, // 27: policy.SubjectMapping.subject_condition_set:type_name -> policy.SubjectConditionSet - 17, // 28: policy.SubjectMapping.actions:type_name -> policy.Action - 14, // 29: policy.SubjectMapping.namespace:type_name -> policy.Namespace - 46, // 30: policy.SubjectMapping.metadata:type_name -> common.Metadata - 3, // 31: policy.DynamicValueResolver.comparison:type_name -> policy.ConditionComparisonOperatorEnum - 15, // 32: policy.DynamicValueMapping.attribute_definition:type_name -> policy.Attribute - 19, // 33: policy.DynamicValueMapping.value_resolver:type_name -> policy.DynamicValueResolver - 24, // 34: policy.DynamicValueMapping.subject_condition_set:type_name -> policy.SubjectConditionSet - 17, // 35: policy.DynamicValueMapping.actions:type_name -> policy.Action - 14, // 36: policy.DynamicValueMapping.namespace:type_name -> policy.Namespace - 46, // 37: policy.DynamicValueMapping.metadata:type_name -> common.Metadata - 1, // 38: policy.Condition.operator:type_name -> policy.SubjectMappingOperatorEnum - 3, // 39: policy.Condition.comparison:type_name -> policy.ConditionComparisonOperatorEnum - 4, // 40: policy.Condition.quantifier:type_name -> policy.ConditionQuantifierEnum - 21, // 41: policy.ConditionGroup.conditions:type_name -> policy.Condition - 2, // 42: policy.ConditionGroup.boolean_operator:type_name -> policy.ConditionBooleanTypeEnum - 22, // 43: policy.SubjectSet.condition_groups:type_name -> policy.ConditionGroup - 14, // 44: policy.SubjectConditionSet.namespace:type_name -> policy.Namespace - 23, // 45: policy.SubjectConditionSet.subject_sets:type_name -> policy.SubjectSet - 46, // 46: policy.SubjectConditionSet.metadata:type_name -> common.Metadata - 46, // 47: policy.ResourceMappingGroup.metadata:type_name -> common.Metadata - 46, // 48: policy.ResourceMapping.metadata:type_name -> common.Metadata - 16, // 49: policy.ResourceMapping.attribute_value:type_name -> policy.Value - 26, // 50: policy.ResourceMapping.group:type_name -> policy.ResourceMappingGroup - 14, // 51: policy.ResourceMapping.namespace:type_name -> policy.Namespace - 32, // 52: policy.KeyAccessServer.public_key:type_name -> policy.PublicKey - 5, // 53: policy.KeyAccessServer.source_type:type_name -> policy.SourceType - 12, // 54: policy.KeyAccessServer.kas_keys:type_name -> policy.SimpleKasKey - 46, // 55: policy.KeyAccessServer.metadata:type_name -> common.Metadata - 47, // 56: policy.Key.is_active:type_name -> google.protobuf.BoolValue - 47, // 57: policy.Key.was_mapped:type_name -> google.protobuf.BoolValue - 30, // 58: policy.Key.public_key:type_name -> policy.KasPublicKey - 28, // 59: policy.Key.kas:type_name -> policy.KeyAccessServer - 46, // 60: policy.Key.metadata:type_name -> common.Metadata - 6, // 61: policy.KasPublicKey.alg:type_name -> policy.KasPublicKeyAlgEnum - 30, // 62: policy.KasPublicKeySet.keys:type_name -> policy.KasPublicKey - 31, // 63: policy.PublicKey.cached:type_name -> policy.KasPublicKeySet - 34, // 64: policy.RegisteredResource.values:type_name -> policy.RegisteredResourceValue - 14, // 65: policy.RegisteredResource.namespace:type_name -> policy.Namespace - 46, // 66: policy.RegisteredResource.metadata:type_name -> common.Metadata - 33, // 67: policy.RegisteredResourceValue.resource:type_name -> policy.RegisteredResource - 45, // 68: policy.RegisteredResourceValue.action_attribute_values:type_name -> policy.RegisteredResourceValue.ActionAttributeValue - 46, // 69: policy.RegisteredResourceValue.metadata:type_name -> common.Metadata - 35, // 70: policy.RequestContext.pep:type_name -> policy.PolicyEnforcementPoint - 14, // 71: policy.Obligation.namespace:type_name -> policy.Namespace - 38, // 72: policy.Obligation.values:type_name -> policy.ObligationValue - 46, // 73: policy.Obligation.metadata:type_name -> common.Metadata - 37, // 74: policy.ObligationValue.obligation:type_name -> policy.Obligation - 39, // 75: policy.ObligationValue.triggers:type_name -> policy.ObligationTrigger - 46, // 76: policy.ObligationValue.metadata:type_name -> common.Metadata - 38, // 77: policy.ObligationTrigger.obligation_value:type_name -> policy.ObligationValue - 17, // 78: policy.ObligationTrigger.action:type_name -> policy.Action - 16, // 79: policy.ObligationTrigger.attribute_value:type_name -> policy.Value - 36, // 80: policy.ObligationTrigger.context:type_name -> policy.RequestContext - 14, // 81: policy.ObligationTrigger.namespace:type_name -> policy.Namespace - 46, // 82: policy.ObligationTrigger.metadata:type_name -> common.Metadata - 43, // 83: policy.KasKey.key:type_name -> policy.AsymmetricKey - 7, // 84: policy.AsymmetricKey.key_algorithm:type_name -> policy.Algorithm - 8, // 85: policy.AsymmetricKey.key_status:type_name -> policy.KeyStatus - 9, // 86: policy.AsymmetricKey.key_mode:type_name -> policy.KeyMode - 41, // 87: policy.AsymmetricKey.public_key_ctx:type_name -> policy.PublicKeyCtx - 42, // 88: policy.AsymmetricKey.private_key_ctx:type_name -> policy.PrivateKeyCtx - 13, // 89: policy.AsymmetricKey.provider_config:type_name -> policy.KeyProviderConfig - 46, // 90: policy.AsymmetricKey.metadata:type_name -> common.Metadata - 8, // 91: policy.SymmetricKey.key_status:type_name -> policy.KeyStatus - 9, // 92: policy.SymmetricKey.key_mode:type_name -> policy.KeyMode - 13, // 93: policy.SymmetricKey.provider_config:type_name -> policy.KeyProviderConfig - 46, // 94: policy.SymmetricKey.metadata:type_name -> common.Metadata - 17, // 95: policy.RegisteredResourceValue.ActionAttributeValue.action:type_name -> policy.Action - 16, // 96: policy.RegisteredResourceValue.ActionAttributeValue.attribute_value:type_name -> policy.Value - 46, // 97: policy.RegisteredResourceValue.ActionAttributeValue.metadata:type_name -> common.Metadata - 98, // [98:98] is the sub-list for method output_type - 98, // [98:98] is the sub-list for method input_type - 98, // [98:98] is the sub-list for extension type_name - 98, // [98:98] is the sub-list for extension extendee - 0, // [0:98] is the sub-list for field type_name + 7, // 0: policy.SimpleKasPublicKey.algorithm:type_name -> policy.Algorithm + 11, // 1: policy.SimpleKasKey.public_key:type_name -> policy.SimpleKasPublicKey + 46, // 2: policy.KeyProviderConfig.metadata:type_name -> common.Metadata + 47, // 3: policy.Namespace.active:type_name -> google.protobuf.BoolValue + 46, // 4: policy.Namespace.metadata:type_name -> common.Metadata + 28, // 5: policy.Namespace.grants:type_name -> policy.KeyAccessServer + 12, // 6: policy.Namespace.kas_keys:type_name -> policy.SimpleKasKey + 14, // 7: policy.Attribute.namespace:type_name -> policy.Namespace + 0, // 8: policy.Attribute.rule:type_name -> policy.AttributeRuleTypeEnum + 16, // 9: policy.Attribute.values:type_name -> policy.Value + 28, // 10: policy.Attribute.grants:type_name -> policy.KeyAccessServer + 47, // 11: policy.Attribute.active:type_name -> google.protobuf.BoolValue + 12, // 12: policy.Attribute.kas_keys:type_name -> policy.SimpleKasKey + 47, // 13: policy.Attribute.allow_traversal:type_name -> google.protobuf.BoolValue + 46, // 14: policy.Attribute.metadata:type_name -> common.Metadata + 15, // 15: policy.Value.attribute:type_name -> policy.Attribute + 28, // 16: policy.Value.grants:type_name -> policy.KeyAccessServer + 47, // 17: policy.Value.active:type_name -> google.protobuf.BoolValue + 18, // 18: policy.Value.subject_mappings:type_name -> policy.SubjectMapping + 12, // 19: policy.Value.kas_keys:type_name -> policy.SimpleKasKey + 27, // 20: policy.Value.resource_mappings:type_name -> policy.ResourceMapping + 37, // 21: policy.Value.obligations:type_name -> policy.Obligation + 46, // 22: policy.Value.metadata:type_name -> common.Metadata + 10, // 23: policy.Action.standard:type_name -> policy.Action.StandardAction + 14, // 24: policy.Action.namespace:type_name -> policy.Namespace + 46, // 25: policy.Action.metadata:type_name -> common.Metadata + 16, // 26: policy.SubjectMapping.attribute_value:type_name -> policy.Value + 24, // 27: policy.SubjectMapping.subject_condition_set:type_name -> policy.SubjectConditionSet + 17, // 28: policy.SubjectMapping.actions:type_name -> policy.Action + 14, // 29: policy.SubjectMapping.namespace:type_name -> policy.Namespace + 46, // 30: policy.SubjectMapping.metadata:type_name -> common.Metadata + 3, // 31: policy.DynamicValueResolver.comparison:type_name -> policy.ConditionComparisonOperatorEnum + 47, // 32: policy.DynamicValueResolver.case_insensitive:type_name -> google.protobuf.BoolValue + 15, // 33: policy.DynamicValueMapping.attribute_definition:type_name -> policy.Attribute + 19, // 34: policy.DynamicValueMapping.value_resolver:type_name -> policy.DynamicValueResolver + 24, // 35: policy.DynamicValueMapping.subject_condition_set:type_name -> policy.SubjectConditionSet + 17, // 36: policy.DynamicValueMapping.actions:type_name -> policy.Action + 14, // 37: policy.DynamicValueMapping.namespace:type_name -> policy.Namespace + 46, // 38: policy.DynamicValueMapping.metadata:type_name -> common.Metadata + 1, // 39: policy.Condition.operator:type_name -> policy.SubjectMappingOperatorEnum + 3, // 40: policy.Condition.comparison:type_name -> policy.ConditionComparisonOperatorEnum + 4, // 41: policy.Condition.quantifier:type_name -> policy.ConditionQuantifierEnum + 47, // 42: policy.Condition.case_insensitive:type_name -> google.protobuf.BoolValue + 21, // 43: policy.ConditionGroup.conditions:type_name -> policy.Condition + 2, // 44: policy.ConditionGroup.boolean_operator:type_name -> policy.ConditionBooleanTypeEnum + 22, // 45: policy.SubjectSet.condition_groups:type_name -> policy.ConditionGroup + 14, // 46: policy.SubjectConditionSet.namespace:type_name -> policy.Namespace + 23, // 47: policy.SubjectConditionSet.subject_sets:type_name -> policy.SubjectSet + 46, // 48: policy.SubjectConditionSet.metadata:type_name -> common.Metadata + 46, // 49: policy.ResourceMappingGroup.metadata:type_name -> common.Metadata + 46, // 50: policy.ResourceMapping.metadata:type_name -> common.Metadata + 16, // 51: policy.ResourceMapping.attribute_value:type_name -> policy.Value + 26, // 52: policy.ResourceMapping.group:type_name -> policy.ResourceMappingGroup + 14, // 53: policy.ResourceMapping.namespace:type_name -> policy.Namespace + 32, // 54: policy.KeyAccessServer.public_key:type_name -> policy.PublicKey + 5, // 55: policy.KeyAccessServer.source_type:type_name -> policy.SourceType + 12, // 56: policy.KeyAccessServer.kas_keys:type_name -> policy.SimpleKasKey + 46, // 57: policy.KeyAccessServer.metadata:type_name -> common.Metadata + 47, // 58: policy.Key.is_active:type_name -> google.protobuf.BoolValue + 47, // 59: policy.Key.was_mapped:type_name -> google.protobuf.BoolValue + 30, // 60: policy.Key.public_key:type_name -> policy.KasPublicKey + 28, // 61: policy.Key.kas:type_name -> policy.KeyAccessServer + 46, // 62: policy.Key.metadata:type_name -> common.Metadata + 6, // 63: policy.KasPublicKey.alg:type_name -> policy.KasPublicKeyAlgEnum + 30, // 64: policy.KasPublicKeySet.keys:type_name -> policy.KasPublicKey + 31, // 65: policy.PublicKey.cached:type_name -> policy.KasPublicKeySet + 34, // 66: policy.RegisteredResource.values:type_name -> policy.RegisteredResourceValue + 14, // 67: policy.RegisteredResource.namespace:type_name -> policy.Namespace + 46, // 68: policy.RegisteredResource.metadata:type_name -> common.Metadata + 33, // 69: policy.RegisteredResourceValue.resource:type_name -> policy.RegisteredResource + 45, // 70: policy.RegisteredResourceValue.action_attribute_values:type_name -> policy.RegisteredResourceValue.ActionAttributeValue + 46, // 71: policy.RegisteredResourceValue.metadata:type_name -> common.Metadata + 35, // 72: policy.RequestContext.pep:type_name -> policy.PolicyEnforcementPoint + 14, // 73: policy.Obligation.namespace:type_name -> policy.Namespace + 38, // 74: policy.Obligation.values:type_name -> policy.ObligationValue + 46, // 75: policy.Obligation.metadata:type_name -> common.Metadata + 37, // 76: policy.ObligationValue.obligation:type_name -> policy.Obligation + 39, // 77: policy.ObligationValue.triggers:type_name -> policy.ObligationTrigger + 46, // 78: policy.ObligationValue.metadata:type_name -> common.Metadata + 38, // 79: policy.ObligationTrigger.obligation_value:type_name -> policy.ObligationValue + 17, // 80: policy.ObligationTrigger.action:type_name -> policy.Action + 16, // 81: policy.ObligationTrigger.attribute_value:type_name -> policy.Value + 36, // 82: policy.ObligationTrigger.context:type_name -> policy.RequestContext + 14, // 83: policy.ObligationTrigger.namespace:type_name -> policy.Namespace + 46, // 84: policy.ObligationTrigger.metadata:type_name -> common.Metadata + 43, // 85: policy.KasKey.key:type_name -> policy.AsymmetricKey + 7, // 86: policy.AsymmetricKey.key_algorithm:type_name -> policy.Algorithm + 8, // 87: policy.AsymmetricKey.key_status:type_name -> policy.KeyStatus + 9, // 88: policy.AsymmetricKey.key_mode:type_name -> policy.KeyMode + 41, // 89: policy.AsymmetricKey.public_key_ctx:type_name -> policy.PublicKeyCtx + 42, // 90: policy.AsymmetricKey.private_key_ctx:type_name -> policy.PrivateKeyCtx + 13, // 91: policy.AsymmetricKey.provider_config:type_name -> policy.KeyProviderConfig + 46, // 92: policy.AsymmetricKey.metadata:type_name -> common.Metadata + 8, // 93: policy.SymmetricKey.key_status:type_name -> policy.KeyStatus + 9, // 94: policy.SymmetricKey.key_mode:type_name -> policy.KeyMode + 13, // 95: policy.SymmetricKey.provider_config:type_name -> policy.KeyProviderConfig + 46, // 96: policy.SymmetricKey.metadata:type_name -> common.Metadata + 17, // 97: policy.RegisteredResourceValue.ActionAttributeValue.action:type_name -> policy.Action + 16, // 98: policy.RegisteredResourceValue.ActionAttributeValue.attribute_value:type_name -> policy.Value + 46, // 99: policy.RegisteredResourceValue.ActionAttributeValue.metadata:type_name -> common.Metadata + 100, // [100:100] is the sub-list for method output_type + 100, // [100:100] is the sub-list for method input_type + 100, // [100:100] is the sub-list for extension type_name + 100, // [100:100] is the sub-list for extension extendee + 0, // [0:100] is the sub-list for field type_name } func init() { file_policy_objects_proto_init() } diff --git a/service/policy/objects.proto b/service/policy/objects.proto index 8777b88bdf..5a241e72ea 100644 --- a/service/policy/objects.proto +++ b/service/policy/objects.proto @@ -248,8 +248,9 @@ message DynamicValueResolver { (buf.validate.field).required = true ]; - // when true, comparison is case-insensitive (default false = case-sensitive) - bool case_insensitive = 3; + // when set true, comparison is case-insensitive; unset is treated as case-sensitive. Modeled as + // BoolValue so an explicit false is distinguishable from unset, leaving room to change the default. + google.protobuf.BoolValue case_insensitive = 3; } /* @@ -310,8 +311,9 @@ message Condition { // how matches are aggregated across subject_external_values ConditionQuantifierEnum quantifier = 5 [(buf.validate.field).enum.defined_only = true]; - // when true, comparison is case-insensitive (default false = case-sensitive) - bool case_insensitive = 6; + // when set true, comparison is case-insensitive; unset is treated as case-sensitive. Modeled as + // BoolValue so an explicit false is distinguishable from unset, leaving room to change the default. + google.protobuf.BoolValue case_insensitive = 6; } // A collection of Conditions evaluated by the boolean_operator provided
        Method NameRequest TypeResponse TypeDescription
        MatchSubjectMappingsMatchSubjectMappingsRequestMatchSubjectMappingsResponse

        Find matching Subject Mappings for a given Subject

        ListSubjectMappingsListSubjectMappingsRequestListSubjectMappingsResponseListResourceMappingGroupsListResourceMappingGroupsRequestListResourceMappingGroupsResponse

        GetSubjectMappingGetSubjectMappingRequestGetSubjectMappingResponseGetResourceMappingGroupGetResourceMappingGroupRequestGetResourceMappingGroupResponse

        CreateSubjectMappingCreateSubjectMappingRequestCreateSubjectMappingResponseCreateResourceMappingGroupCreateResourceMappingGroupRequestCreateResourceMappingGroupResponse

        UpdateSubjectMappingUpdateSubjectMappingRequestUpdateSubjectMappingResponseUpdateResourceMappingGroupUpdateResourceMappingGroupRequestUpdateResourceMappingGroupResponse

        DeleteSubjectMappingDeleteSubjectMappingRequestDeleteSubjectMappingResponseDeleteResourceMappingGroupDeleteResourceMappingGroupRequestDeleteResourceMappingGroupResponse

        ListSubjectConditionSetsListSubjectConditionSetsRequestListSubjectConditionSetsResponseListResourceMappingsListResourceMappingsRequestListResourceMappingsResponse

        GetSubjectConditionSetGetSubjectConditionSetRequestGetSubjectConditionSetResponseListResourceMappingsByGroupFqnsListResourceMappingsByGroupFqnsRequestListResourceMappingsByGroupFqnsResponse

        CreateSubjectConditionSetCreateSubjectConditionSetRequestCreateSubjectConditionSetResponseGetResourceMappingGetResourceMappingRequestGetResourceMappingResponse

        UpdateSubjectConditionSetUpdateSubjectConditionSetRequestUpdateSubjectConditionSetResponseCreateResourceMappingCreateResourceMappingRequestCreateResourceMappingResponse

        DeleteSubjectConditionSetDeleteSubjectConditionSetRequestDeleteSubjectConditionSetResponseUpdateResourceMappingUpdateResourceMappingRequestUpdateResourceMappingResponse

        DeleteAllUnmappedSubjectConditionSetsDeleteAllUnmappedSubjectConditionSetsRequestDeleteAllUnmappedSubjectConditionSetsResponseDeleteResourceMappingDeleteResourceMappingRequestDeleteResourceMappingResponse

        ListSubjectMappingsListResourceMappingGroups

        NO_SIDE_EFFECTS

        GetSubjectMappingGetResourceMappingGroup

        NO_SIDE_EFFECTS

        ListSubjectConditionSetsListResourceMappings

        NO_SIDE_EFFECTS

        GetSubjectConditionSetListResourceMappingsByGroupFqns

        NO_SIDE_EFFECTS

        GetResourceMapping

        NO_SIDE_EFFECTS

        case_insensitiveboolgoogle.protobuf.BoolValue

        when true, comparison is case-insensitive (default false = case-sensitive)

        when set true, comparison is case-insensitive; unset is treated as case-sensitive. Modeled as +BoolValue so an explicit false is distinguishable from unset, leaving room to change the default.

        case_insensitiveboolgoogle.protobuf.BoolValue

        when true, comparison is case-insensitive (default false = case-sensitive)

        when set true, comparison is case-insensitive; unset is treated as case-sensitive. Modeled as +BoolValue so an explicit false is distinguishable from unset, leaving room to change the default.