diff --git a/Makefile b/Makefile index 495324710..418b4c076 100644 --- a/Makefile +++ b/Makefile @@ -77,7 +77,7 @@ lint-go: install-golangci-lint .PHONY: format-go format-go: - golangci-lint run --fix + $(GOLANGCI_LINT) run --fix .PHONY: lint-proto lint-proto: install-buf diff --git a/api/service/v1alpha1/service.proto b/api/service/v1alpha1/service.proto index b1e471960..e9a03ec37 100644 --- a/api/service/v1alpha1/service.proto +++ b/api/service/v1alpha1/service.proto @@ -90,6 +90,9 @@ service KargoService { rpc ListAnalysisTemplates(ListAnalysisTemplatesRequest) returns (ListAnalysisTemplatesResponse); rpc GetAnalysisTemplate(GetAnalysisTemplateRequest) returns (GetAnalysisTemplateResponse); rpc DeleteAnalysisTemplate(DeleteAnalysisTemplateRequest) returns (DeleteAnalysisTemplateResponse); + rpc ListClusterAnalysisTemplates(ListClusterAnalysisTemplatesRequest) returns (ListClusterAnalysisTemplatesResponse); + rpc GetClusterAnalysisTemplate(GetClusterAnalysisTemplateRequest) returns (GetClusterAnalysisTemplateResponse); + rpc DeleteClusterAnalysisTemplate(DeleteClusterAnalysisTemplateRequest) returns (DeleteClusterAnalysisTemplateResponse); rpc GetAnalysisRun(GetAnalysisRunRequest) returns (GetAnalysisRunResponse); rpc ListAnalysisTemplateConfigMaps(ListAnalysisTemplateConfigMapsRequest) returns (ListAnalysisTemplateConfigMapsResponse); @@ -613,6 +616,24 @@ message GetAnalysisTemplateResponse { } } +message ListClusterAnalysisTemplatesRequest {} + +message ListClusterAnalysisTemplatesResponse { + repeated github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.ClusterAnalysisTemplate cluster_analysis_templates = 1 [json_name = "clusteranalysisTemplates"]; +} + +message GetClusterAnalysisTemplateRequest { + string name = 2; + RawFormat format = 3; +} + +message GetClusterAnalysisTemplateResponse { + oneof result { + github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.ClusterAnalysisTemplate cluster_analysis_template = 1 [json_name = "clusterAnalysisTemplate"]; + bytes raw = 2; + } +} + message GetAnalysisRunRequest { string namespace = 1; string name = 2; @@ -635,6 +656,14 @@ message DeleteAnalysisTemplateResponse { /* explicitly empty */ } +message DeleteClusterAnalysisTemplateRequest { + string name = 2; +} + +message DeleteClusterAnalysisTemplateResponse { + /* explicitly empty */ +} + message ListProjectEventsRequest { string project = 1; } diff --git a/api/v1alpha1/generated.pb.go b/api/v1alpha1/generated.pb.go index a3c7fd4a0..180797e4e 100644 --- a/api/v1alpha1/generated.pb.go +++ b/api/v1alpha1/generated.pb.go @@ -1696,237 +1696,238 @@ func init() { } var fileDescriptor_e26b7f7bbc391025 = []byte{ - // 3673 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x3c, 0x4d, 0x6f, 0x23, 0x47, - 0x76, 0xd3, 0xa4, 0x44, 0x89, 0x8f, 0xfa, 0xac, 0xd1, 0xd8, 0x5a, 0x6d, 0x2c, 0x4d, 0xda, 0x86, - 0x61, 0xc7, 0x36, 0x95, 0xf9, 0xf2, 0x7c, 0x38, 0x99, 0x40, 0xa4, 0xe6, 0x43, 0x13, 0xad, 0x47, - 0x29, 0x8e, 0x67, 0x76, 0x67, 0x67, 0xe0, 0x94, 0xc8, 0x12, 0xd9, 0x11, 0xd9, 0xcd, 0xed, 0x2a, - 0x6a, 0xad, 0x24, 0x48, 0x36, 0x5f, 0xc0, 0x02, 0xf9, 0x40, 0x0e, 0x46, 0xbc, 0x01, 0x12, 0x20, - 0x48, 0xce, 0xc9, 0x1f, 0xc8, 0xc1, 0x87, 0x5c, 0x8c, 0xc0, 0x09, 0x8c, 0x24, 0x07, 0x1f, 0x0c, - 0x21, 0x96, 0x81, 0x1c, 0x7d, 0xcb, 0x65, 0x80, 0x00, 0x41, 0x7d, 0x74, 0x77, 0x75, 0xb3, 0x39, - 0x62, 0x73, 0xa4, 0xc1, 0x60, 0x6f, 0x54, 0xbd, 0xaf, 0xaa, 0x57, 0xef, 0xbd, 0x7a, 0xef, 0x55, - 0xb5, 0xe0, 0x62, 0xd3, 0xe1, 0xad, 0xde, 0x76, 0xb9, 0xee, 0x75, 0x56, 0xc9, 0x6e, 0xcf, 0xe1, - 0xfb, 0xab, 0xbb, 0xc4, 0x6f, 0x7a, 0xab, 0xa4, 0xeb, 0xac, 0xee, 0x9d, 0x23, 0xed, 0x6e, 0x8b, - 0x9c, 0x5b, 0x6d, 0x52, 0x97, 0xfa, 0x84, 0xd3, 0x46, 0xb9, 0xeb, 0x7b, 0xdc, 0x43, 0xaf, 0x45, - 0x54, 0x65, 0x45, 0x55, 0x96, 0x54, 0x65, 0xd2, 0x75, 0xca, 0x01, 0xd5, 0xd2, 0x3b, 0x06, 0xef, - 0xa6, 0xd7, 0xf4, 0x56, 0x25, 0xf1, 0x76, 0x6f, 0x47, 0xfe, 0x25, 0xff, 0x90, 0xbf, 0x14, 0xd3, - 0xa5, 0xdb, 0xbb, 0x57, 0x58, 0xd9, 0x91, 0x92, 0xe9, 0x47, 0x9c, 0xba, 0xcc, 0xf1, 0x5c, 0xf6, - 0x0e, 0xe9, 0x3a, 0x8c, 0xfa, 0x7b, 0xd4, 0x5f, 0xed, 0xee, 0x36, 0x05, 0x8c, 0xc5, 0x11, 0x56, - 0xf7, 0xfa, 0xa6, 0xb7, 0x74, 0x31, 0xe2, 0xd4, 0x21, 0xf5, 0x96, 0xe3, 0x52, 0x7f, 0x3f, 0x22, - 0xef, 0x50, 0x4e, 0xd2, 0xa8, 0x56, 0x07, 0x51, 0xf9, 0x3d, 0x97, 0x3b, 0x1d, 0xda, 0x47, 0xf0, - 0xee, 0x51, 0x04, 0xac, 0xde, 0xa2, 0x1d, 0x92, 0xa4, 0xb3, 0x1f, 0xc1, 0xe9, 0x35, 0x97, 0xb4, - 0xf7, 0x99, 0xc3, 0x70, 0xcf, 0x5d, 0xf3, 0x9b, 0xbd, 0x0e, 0x75, 0x39, 0x3a, 0x0b, 0x63, 0x2e, - 0xe9, 0xd0, 0x45, 0xeb, 0xac, 0xf5, 0x46, 0xb1, 0x32, 0xf5, 0xd9, 0xc1, 0xca, 0xa9, 0xc3, 0x83, - 0x95, 0xb1, 0xf7, 0x49, 0x87, 0x62, 0x09, 0x41, 0xaf, 0xc2, 0xf8, 0x1e, 0x69, 0xf7, 0xe8, 0x62, - 0x4e, 0xa2, 0x4c, 0x6b, 0x94, 0xf1, 0xfb, 0x62, 0x10, 0x2b, 0x98, 0xfd, 0x47, 0xf9, 0x18, 0xfb, - 0xef, 0x51, 0x4e, 0x1a, 0x84, 0x13, 0xd4, 0x81, 0x42, 0x9b, 0x6c, 0xd3, 0x36, 0x5b, 0xb4, 0xce, - 0xe6, 0xdf, 0x28, 0x9d, 0xbf, 0x51, 0x1e, 0x66, 0x13, 0xcb, 0x29, 0xac, 0xca, 0x9b, 0x92, 0xcf, - 0x0d, 0x97, 0xfb, 0xfb, 0x95, 0x19, 0x3d, 0x89, 0x82, 0x1a, 0xc4, 0x5a, 0x08, 0xfa, 0x03, 0x0b, - 0x4a, 0xc4, 0x75, 0x3d, 0x4e, 0xb8, 0xd8, 0xa6, 0xc5, 0x9c, 0x14, 0x7a, 0x67, 0x74, 0xa1, 0x6b, - 0x11, 0x33, 0x25, 0xf9, 0xb4, 0x96, 0x5c, 0x32, 0x20, 0xd8, 0x94, 0xb9, 0x74, 0x15, 0x4a, 0xc6, - 0x54, 0xd1, 0x1c, 0xe4, 0x77, 0xe9, 0xbe, 0xd2, 0x2f, 0x16, 0x3f, 0xd1, 0x42, 0x4c, 0xa1, 0x5a, - 0x83, 0xd7, 0x72, 0x57, 0xac, 0xa5, 0xeb, 0x30, 0x97, 0x14, 0x98, 0x85, 0xde, 0xfe, 0x0b, 0x0b, - 0x16, 0x8c, 0x55, 0x60, 0xba, 0x43, 0x7d, 0xea, 0xd6, 0x29, 0x5a, 0x85, 0xa2, 0xd8, 0x4b, 0xd6, - 0x25, 0xf5, 0x60, 0xab, 0xe7, 0xf5, 0x42, 0x8a, 0xef, 0x07, 0x00, 0x1c, 0xe1, 0x84, 0x66, 0x91, - 0x7b, 0x9a, 0x59, 0x74, 0x5b, 0x84, 0xd1, 0xc5, 0x7c, 0xdc, 0x2c, 0xb6, 0xc4, 0x20, 0x56, 0x30, - 0xfb, 0x57, 0xe1, 0x3b, 0xc1, 0x7c, 0xee, 0xd1, 0x4e, 0xb7, 0x4d, 0x38, 0x8d, 0x26, 0x75, 0xa4, - 0xe9, 0xd9, 0xb3, 0x30, 0xbd, 0xd6, 0xed, 0xfa, 0xde, 0x1e, 0x6d, 0xd4, 0x38, 0x69, 0x52, 0xfb, - 0x0f, 0x2d, 0x38, 0xb3, 0xe6, 0x37, 0xbd, 0xea, 0xfa, 0x5a, 0xb7, 0x7b, 0x9b, 0x92, 0x36, 0x6f, - 0xd5, 0x38, 0xe1, 0x3d, 0x86, 0xae, 0x43, 0x81, 0xc9, 0x5f, 0x9a, 0xdd, 0xeb, 0x81, 0x85, 0x28, - 0xf8, 0x93, 0x83, 0x95, 0x85, 0x14, 0x42, 0x8a, 0x35, 0x15, 0x7a, 0x13, 0x26, 0x3a, 0x94, 0x31, - 0xd2, 0x0c, 0xd6, 0x3c, 0xab, 0x19, 0x4c, 0x7c, 0x4f, 0x0d, 0xe3, 0x00, 0x6e, 0xff, 0x6b, 0x0e, - 0x66, 0x43, 0x5e, 0x5a, 0xfc, 0x09, 0x28, 0xb8, 0x07, 0x53, 0x2d, 0x63, 0x85, 0x52, 0xcf, 0xa5, - 0xf3, 0xef, 0x0d, 0x69, 0xcb, 0x69, 0x4a, 0xaa, 0x2c, 0x68, 0x31, 0x53, 0xe6, 0x28, 0x8e, 0x89, - 0x41, 0x1d, 0x00, 0xb6, 0xef, 0xd6, 0xb5, 0xd0, 0x31, 0x29, 0xf4, 0x6a, 0x46, 0xa1, 0xb5, 0x90, - 0x41, 0x05, 0x69, 0x91, 0x10, 0x8d, 0x61, 0x43, 0x80, 0xfd, 0x4f, 0x16, 0x9c, 0x4e, 0xa1, 0x43, - 0xbf, 0x92, 0xd8, 0xcf, 0xd7, 0xfa, 0xf6, 0x13, 0xf5, 0x91, 0x45, 0xbb, 0xf9, 0x36, 0x4c, 0xfa, - 0x74, 0xcf, 0x11, 0xb1, 0x5a, 0x6b, 0x78, 0x4e, 0xd3, 0x4f, 0x62, 0x3d, 0x8e, 0x43, 0x0c, 0xf4, - 0x16, 0x14, 0x83, 0xdf, 0x42, 0xcd, 0x79, 0x61, 0xce, 0x62, 0xe3, 0x02, 0x54, 0x86, 0x23, 0xb8, - 0xfd, 0xfb, 0x30, 0x5e, 0x6d, 0x11, 0x9f, 0x0b, 0x8b, 0xf1, 0x69, 0xd7, 0xfb, 0x00, 0x6f, 0xea, - 0x29, 0x86, 0x16, 0x83, 0xd5, 0x30, 0x0e, 0xe0, 0x43, 0x6c, 0xf6, 0x9b, 0x30, 0xb1, 0x47, 0x7d, - 0x39, 0xdf, 0x7c, 0x9c, 0xd9, 0x7d, 0x35, 0x8c, 0x03, 0xb8, 0xfd, 0x9f, 0x16, 0x2c, 0xc8, 0x19, - 0xac, 0x3b, 0xac, 0xee, 0xed, 0x51, 0x7f, 0x1f, 0x53, 0xd6, 0x6b, 0x1f, 0xf3, 0x84, 0xd6, 0x61, - 0x8e, 0xd1, 0xce, 0x1e, 0xf5, 0xab, 0x9e, 0xcb, 0xb8, 0x4f, 0x1c, 0x97, 0xeb, 0x99, 0x2d, 0x6a, - 0xec, 0xb9, 0x5a, 0x02, 0x8e, 0xfb, 0x28, 0xd0, 0x1b, 0x30, 0xa9, 0xa7, 0x2d, 0x4c, 0x49, 0x28, - 0x76, 0x4a, 0xec, 0x81, 0x5e, 0x13, 0xc3, 0x21, 0xd4, 0xfe, 0x1f, 0x0b, 0xe6, 0xe5, 0xaa, 0x6a, - 0xbd, 0x6d, 0x56, 0xf7, 0x9d, 0xae, 0x08, 0x81, 0x2f, 0xe2, 0x92, 0xae, 0xc3, 0x4c, 0x23, 0x50, - 0xfc, 0xa6, 0xd3, 0x71, 0xb8, 0xf4, 0x91, 0xf1, 0xca, 0x4b, 0x9a, 0xc7, 0xcc, 0x7a, 0x0c, 0x8a, - 0x13, 0xd8, 0xf6, 0xdf, 0xe4, 0xe1, 0x74, 0x80, 0x42, 0x1b, 0x6b, 0x3e, 0x77, 0x76, 0x48, 0x9d, - 0x33, 0xd4, 0x80, 0xa9, 0x46, 0x34, 0xcc, 0xb5, 0xe7, 0xfd, 0x52, 0x59, 0x1d, 0xf7, 0x65, 0xf3, - 0xb8, 0x2f, 0x77, 0x77, 0x9b, 0x62, 0x80, 0x95, 0x45, 0x56, 0x51, 0xde, 0x3b, 0x57, 0xbe, 0xe7, - 0x74, 0x68, 0xe4, 0xdd, 0x06, 0x7b, 0x8e, 0x63, 0x5c, 0xd1, 0x03, 0xc8, 0x37, 0x1d, 0xae, 0x0f, - 0xe3, 0x2b, 0xc3, 0xb9, 0xf5, 0x2d, 0x27, 0x69, 0x6a, 0x95, 0x92, 0x16, 0x95, 0xbf, 0xe5, 0x70, - 0x2c, 0x38, 0xa2, 0x6d, 0x28, 0x38, 0x1d, 0xd2, 0xa4, 0xc1, 0x99, 0x7b, 0x6d, 0x38, 0xde, 0x1b, - 0x82, 0x26, 0xc9, 0x3d, 0x3c, 0xdd, 0x25, 0x94, 0x61, 0xcd, 0x59, 0xc8, 0xa8, 0x0b, 0x13, 0x51, - 0x4e, 0x3a, 0xb4, 0x8c, 0x34, 0x67, 0x89, 0x64, 0x48, 0x28, 0xc3, 0x9a, 0xb3, 0xfd, 0x65, 0x0e, - 0xe6, 0x22, 0xfd, 0x55, 0xbd, 0x4e, 0xc7, 0xe1, 0x68, 0x09, 0x72, 0x4e, 0x43, 0x5b, 0x20, 0x68, - 0xc2, 0xdc, 0xc6, 0x3a, 0xce, 0x39, 0x0d, 0xf4, 0x3a, 0x14, 0xb6, 0x7d, 0xe2, 0xd6, 0x5b, 0xda, - 0xf2, 0x42, 0xc6, 0x15, 0x39, 0x8a, 0x35, 0x14, 0xbd, 0x02, 0x79, 0x4e, 0x9a, 0xda, 0xe0, 0x42, - 0xfd, 0xdd, 0x23, 0x4d, 0x2c, 0xc6, 0x85, 0xa5, 0xb3, 0xde, 0xf6, 0x6f, 0xd1, 0xba, 0xda, 0x79, - 0xc3, 0xd2, 0x6b, 0x6a, 0x18, 0x07, 0x70, 0x21, 0x91, 0xf4, 0x78, 0xcb, 0xf3, 0x17, 0xc7, 0xe3, - 0x12, 0xd7, 0xe4, 0x28, 0xd6, 0x50, 0x71, 0x26, 0xd5, 0xe5, 0xfc, 0x39, 0xf5, 0x17, 0x0b, 0xf1, - 0x33, 0xa9, 0x1a, 0x00, 0x70, 0x84, 0x83, 0x1e, 0x43, 0xa9, 0xee, 0x53, 0xc2, 0x3d, 0x7f, 0x9d, - 0x70, 0xba, 0x38, 0x91, 0xd9, 0x02, 0x67, 0x45, 0x62, 0x54, 0x8d, 0x58, 0x60, 0x93, 0x9f, 0xfd, - 0xad, 0x05, 0x8b, 0x91, 0x6a, 0xe5, 0xde, 0x46, 0xc9, 0x80, 0x56, 0x8f, 0x35, 0x40, 0x3d, 0xaf, - 0x43, 0xa1, 0xe1, 0x34, 0x29, 0xe3, 0x49, 0x2d, 0xaf, 0xcb, 0x51, 0xac, 0xa1, 0xe8, 0x3c, 0x40, - 0xd3, 0xe1, 0x3a, 0x38, 0x68, 0x65, 0x87, 0x47, 0xd0, 0xad, 0x10, 0x82, 0x0d, 0x2c, 0xf4, 0x00, - 0x8a, 0x72, 0x9a, 0x23, 0xba, 0x9d, 0x3c, 0x2a, 0xaa, 0x01, 0x03, 0x1c, 0xf1, 0xb2, 0xbf, 0x18, - 0x83, 0x89, 0x9b, 0x3e, 0x75, 0x9a, 0x2d, 0x8e, 0x7e, 0x13, 0x26, 0x3b, 0x3a, 0xa9, 0x94, 0x8b, - 0x2c, 0x9d, 0xff, 0xe5, 0xe1, 0x64, 0xdc, 0x95, 0x9b, 0x2e, 0x12, 0xd2, 0x68, 0x21, 0xd1, 0x18, - 0x0e, 0xb9, 0x8a, 0x84, 0x8c, 0xb4, 0x1d, 0xc2, 0xe4, 0xbe, 0x19, 0x09, 0xd9, 0x9a, 0x18, 0xc4, - 0x0a, 0x86, 0x7e, 0x08, 0x05, 0xcf, 0x77, 0x9a, 0x8e, 0xbb, 0x58, 0x94, 0x93, 0xb8, 0x30, 0x9c, - 0x0b, 0xe9, 0x55, 0xdc, 0x95, 0xa4, 0x91, 0xf2, 0xd5, 0xdf, 0x58, 0xb3, 0x44, 0x0f, 0x61, 0x42, - 0x19, 0x53, 0xe0, 0xa0, 0xab, 0x43, 0x07, 0x18, 0x65, 0x8f, 0x91, 0xd1, 0xab, 0xbf, 0x19, 0x0e, - 0x18, 0xa2, 0x5a, 0x18, 0x5f, 0xc6, 0x24, 0xeb, 0xb7, 0x32, 0xc4, 0x97, 0x81, 0x01, 0xa5, 0x16, - 0x06, 0x94, 0xf1, 0x2c, 0x4c, 0x65, 0xc8, 0x18, 0x14, 0x41, 0x84, 0x8a, 0x75, 0xe6, 0x52, 0x18, - 0x41, 0xc5, 0x3a, 0x6d, 0x9a, 0x89, 0xa7, 0x3b, 0x41, 0x62, 0x63, 0x7f, 0x9c, 0x87, 0x79, 0x8d, - 0x59, 0xf5, 0xda, 0x6d, 0x5a, 0x97, 0xc7, 0xa4, 0x8a, 0x4f, 0xf9, 0xd4, 0xf8, 0xe4, 0xc0, 0xb8, - 0xc3, 0x69, 0x27, 0x28, 0xc0, 0x2a, 0x99, 0x66, 0x13, 0xc9, 0x28, 0x6f, 0x08, 0x26, 0xaa, 0x06, - 0x0a, 0x77, 0x49, 0x63, 0x61, 0x25, 0x01, 0xfd, 0x89, 0x05, 0xa7, 0xf7, 0xa8, 0xef, 0xec, 0x38, - 0x75, 0x59, 0xc1, 0xdc, 0x76, 0x18, 0xf7, 0xfc, 0x7d, 0x7d, 0x22, 0xbc, 0x3b, 0x9c, 0xe4, 0xfb, - 0x06, 0x83, 0x0d, 0x77, 0xc7, 0xab, 0x7c, 0x57, 0x4b, 0x3b, 0x7d, 0xbf, 0x9f, 0x35, 0x4e, 0x93, - 0xb7, 0xd4, 0x05, 0x88, 0x66, 0x9b, 0x52, 0x40, 0x6d, 0x9a, 0x05, 0xd4, 0xd0, 0x13, 0x0b, 0x16, - 0x1b, 0x84, 0x2c, 0xb3, 0xf0, 0xfa, 0xd4, 0x82, 0x92, 0x86, 0x6f, 0x3a, 0x8c, 0xa3, 0x47, 0x7d, - 0xde, 0x5e, 0x1e, 0xce, 0xdb, 0x05, 0xb5, 0xf4, 0xf5, 0x30, 0x5f, 0x0d, 0x46, 0x0c, 0x4f, 0xc7, - 0xc1, 0x96, 0x2a, 0xc5, 0xbe, 0x93, 0x69, 0xfe, 0x51, 0x60, 0x90, 0x3a, 0xd2, 0x7b, 0x67, 0xfb, - 0x30, 0x1d, 0x73, 0x72, 0x74, 0x09, 0xc6, 0x76, 0x1d, 0x37, 0x38, 0xf5, 0x7e, 0x31, 0xc8, 0xa7, - 0x7e, 0xdd, 0x71, 0x1b, 0x4f, 0x0e, 0x56, 0xe6, 0x63, 0xc8, 0x62, 0x10, 0x4b, 0xf4, 0xa3, 0xd3, - 0xb0, 0x6b, 0x93, 0x3f, 0xfb, 0xbb, 0x95, 0x53, 0x3f, 0xf9, 0xea, 0xec, 0x29, 0xfb, 0x93, 0x3c, - 0xcc, 0x25, 0xb5, 0x3a, 0x44, 0x43, 0x22, 0x8a, 0x61, 0x93, 0x27, 0x1a, 0xc3, 0x72, 0x27, 0x17, - 0xc3, 0xf2, 0x27, 0x11, 0xc3, 0xc6, 0x8e, 0x2d, 0x86, 0xd9, 0xff, 0x6e, 0xc1, 0x4c, 0xb8, 0x33, - 0x3f, 0xea, 0x89, 0x93, 0x35, 0xd2, 0xba, 0x75, 0xfc, 0x5a, 0xff, 0x10, 0x26, 0x98, 0xd7, 0xf3, - 0xeb, 0x32, 0x7d, 0x14, 0xdc, 0x2f, 0x66, 0x0b, 0x9a, 0x8a, 0xd6, 0xc8, 0x99, 0xd4, 0x00, 0x0e, - 0xb8, 0xda, 0x8f, 0xc2, 0xf5, 0x68, 0x90, 0xca, 0x28, 0x7c, 0x91, 0x6f, 0x89, 0xf5, 0x4c, 0x9a, - 0x19, 0x85, 0x18, 0xc5, 0x1a, 0x8a, 0x6c, 0x19, 0xce, 0x83, 0xc4, 0xb6, 0x58, 0x01, 0x1d, 0x95, - 0xe5, 0x1e, 0x28, 0x88, 0xfd, 0x6d, 0x3e, 0xf4, 0x1e, 0x5d, 0xbe, 0xfe, 0x18, 0x40, 0x45, 0x26, - 0xda, 0xd8, 0x70, 0x75, 0xe8, 0xad, 0x8e, 0x70, 0x10, 0xe8, 0x70, 0x28, 0xb8, 0xa8, 0xd8, 0x1b, - 0xe6, 0x00, 0x11, 0x00, 0x1b, 0xa2, 0xd0, 0xef, 0x40, 0x89, 0xe8, 0x96, 0xc9, 0x4d, 0xcf, 0xd7, - 0x36, 0xbc, 0x3e, 0x8a, 0xe4, 0xb5, 0x88, 0x4d, 0xb2, 0xf5, 0x15, 0x41, 0xb0, 0x29, 0x6d, 0xc9, - 0x87, 0xd9, 0xc4, 0x7c, 0x53, 0xa2, 0xef, 0x46, 0x3c, 0xfa, 0x5e, 0xc8, 0x72, 0x2c, 0xe8, 0x3e, - 0x90, 0xd9, 0x33, 0x63, 0x30, 0x97, 0x9c, 0xe9, 0xb1, 0x09, 0x8d, 0x35, 0x9f, 0xcc, 0x78, 0xff, - 0xb7, 0x39, 0x28, 0x86, 0x1e, 0x9f, 0xa5, 0x4a, 0x55, 0x27, 0x75, 0xee, 0x88, 0x4a, 0x22, 0x3f, - 0x4c, 0x25, 0x31, 0x36, 0xb8, 0x92, 0x08, 0x3a, 0x59, 0x85, 0xa7, 0x77, 0xb2, 0x8c, 0x4a, 0x62, - 0x62, 0xf8, 0x4a, 0x62, 0xf2, 0xe8, 0x4a, 0xc2, 0xfe, 0x7b, 0x0b, 0x50, 0x7f, 0xd9, 0x98, 0x45, - 0x51, 0x24, 0x19, 0x87, 0x87, 0x3c, 0xa5, 0x93, 0xb5, 0xdb, 0xe0, 0x70, 0x6c, 0x7f, 0x3a, 0x0e, - 0xb3, 0xb7, 0x9c, 0x91, 0x1b, 0x0e, 0x1c, 0x5e, 0x56, 0x9c, 0x6a, 0x54, 0xe7, 0x48, 0x35, 0xee, - 0x13, 0x4e, 0x9b, 0xfb, 0x7a, 0x7f, 0xaf, 0x69, 0xd2, 0x97, 0xab, 0xe9, 0x68, 0x4f, 0x06, 0x83, - 0xf0, 0x20, 0xd6, 0x43, 0x1b, 0xc9, 0x7b, 0x30, 0xcd, 0xb8, 0xef, 0xd4, 0xb9, 0x6a, 0x69, 0xb0, - 0xc5, 0x92, 0x8c, 0x72, 0x67, 0x34, 0xfa, 0x74, 0xcd, 0x04, 0xe2, 0x38, 0x6e, 0x6a, 0xa7, 0x64, - 0x2c, 0x73, 0xa7, 0x64, 0x15, 0x8a, 0xa4, 0xdd, 0xf6, 0x7e, 0x7c, 0x8f, 0x34, 0x99, 0x2e, 0x55, - 0x43, 0xab, 0x59, 0x0b, 0x00, 0x38, 0xc2, 0x41, 0x65, 0x00, 0xa7, 0xe9, 0x7a, 0x3e, 0x95, 0x14, - 0x05, 0x19, 0x6e, 0x67, 0x44, 0xac, 0xdb, 0x08, 0x47, 0xb1, 0x81, 0x81, 0x6a, 0x70, 0xc6, 0x71, - 0x19, 0xad, 0xf7, 0x7c, 0x5a, 0xdb, 0x75, 0xba, 0xf7, 0x36, 0x6b, 0x32, 0x4a, 0xec, 0x4b, 0x6b, - 0x9e, 0xac, 0xbc, 0xa2, 0x85, 0x9d, 0xd9, 0x48, 0x43, 0xc2, 0xe9, 0xb4, 0xe8, 0x22, 0x4c, 0x39, - 0x6e, 0xbd, 0xdd, 0x6b, 0xd0, 0x2d, 0xc2, 0x5b, 0x6c, 0x71, 0x52, 0x4e, 0x63, 0xee, 0xf0, 0x60, - 0x65, 0x6a, 0xc3, 0x18, 0xc7, 0x31, 0x2c, 0x41, 0x45, 0x3f, 0x32, 0xa8, 0x8a, 0x11, 0xd5, 0x8d, - 0x8f, 0x4c, 0x2a, 0x13, 0x2b, 0xa5, 0x97, 0x04, 0x99, 0x7a, 0x49, 0x7f, 0x95, 0x87, 0x82, 0x6a, - 0xe5, 0xa2, 0x4b, 0x89, 0x7e, 0xe9, 0x2b, 0x7d, 0xfd, 0xd2, 0x52, 0x5a, 0xdb, 0xdb, 0x86, 0x82, - 0xc3, 0x58, 0x2f, 0x7e, 0xba, 0x6d, 0xc8, 0x11, 0xac, 0x21, 0xc8, 0x01, 0x20, 0x41, 0xab, 0x35, - 0x48, 0x5d, 0x2e, 0x65, 0xed, 0x08, 0x27, 0xba, 0xc1, 0x21, 0x80, 0x61, 0x83, 0xb9, 0xec, 0xf0, - 0x78, 0xee, 0x8e, 0xd3, 0xd4, 0x75, 0xf8, 0x75, 0x23, 0x6b, 0x8e, 0x6e, 0xdf, 0x3e, 0x0c, 0xaf, - 0xe7, 0xa2, 0x04, 0x3a, 0x86, 0x20, 0x32, 0xe9, 0x3b, 0xb5, 0xbb, 0xef, 0xab, 0xe5, 0x54, 0x25, - 0x47, 0xac, 0x39, 0x0b, 0x19, 0x5e, 0x8f, 0x77, 0x7b, 0x5c, 0xda, 0xe4, 0x31, 0xc9, 0xb8, 0x2b, - 0x39, 0x62, 0xcd, 0xd9, 0xfe, 0xc4, 0x82, 0x59, 0xa5, 0xee, 0x6a, 0x8b, 0xd6, 0x77, 0x6b, 0x9c, - 0x76, 0x45, 0x62, 0xdb, 0x63, 0x94, 0x25, 0x13, 0xdb, 0x0f, 0x18, 0x65, 0x58, 0x42, 0x8c, 0xd5, - 0xe7, 0x4e, 0x6a, 0xf5, 0xf6, 0x3f, 0x5a, 0x30, 0x2e, 0x33, 0xc8, 0x2c, 0xa1, 0x2e, 0xde, 0x55, - 0xc9, 0x0d, 0xd5, 0x55, 0x39, 0xa2, 0xdf, 0x15, 0x35, 0x74, 0xc6, 0x9e, 0xd6, 0xd0, 0xb1, 0xbf, - 0xb1, 0x60, 0x21, 0xad, 0x49, 0x98, 0x65, 0xfa, 0x6f, 0xc3, 0x64, 0xb7, 0x4d, 0xf8, 0x8e, 0xe7, - 0x77, 0x92, 0xb7, 0x01, 0x5b, 0x7a, 0x1c, 0x87, 0x18, 0xc8, 0x07, 0xf0, 0x83, 0x6a, 0x24, 0x30, - 0xf7, 0xeb, 0x59, 0x0f, 0x9f, 0x78, 0x77, 0x2b, 0x52, 0x56, 0x38, 0xc4, 0xb0, 0x21, 0xc5, 0xfe, - 0xd3, 0x71, 0x98, 0x97, 0x24, 0xa3, 0x1e, 0x46, 0xa3, 0xec, 0x50, 0x17, 0x5e, 0x92, 0x35, 0x44, - 0xff, 0xf9, 0xa5, 0x36, 0xed, 0x8a, 0xa6, 0x7f, 0x69, 0x23, 0x15, 0xeb, 0xc9, 0x40, 0x08, 0x1e, - 0xc0, 0xb7, 0xff, 0x50, 0x82, 0x9f, 0xbf, 0x43, 0xc9, 0x34, 0xb6, 0x89, 0x23, 0x8d, 0x6d, 0xe0, - 0x11, 0x36, 0xf9, 0x0c, 0x47, 0x58, 0xff, 0xb1, 0x52, 0xcc, 0x74, 0xac, 0xfc, 0x75, 0x0e, 0x26, - 0xb6, 0x7c, 0x4f, 0x36, 0x9b, 0x4f, 0xbe, 0x6f, 0x79, 0x17, 0xc6, 0x58, 0x97, 0xd6, 0x75, 0xcc, - 0x3b, 0x37, 0x9c, 0xa7, 0xe9, 0xe9, 0xd5, 0xba, 0xb4, 0x5e, 0x99, 0x14, 0x61, 0x54, 0xfc, 0xc2, - 0x92, 0x91, 0xd1, 0x80, 0xcb, 0x67, 0x49, 0xf6, 0x03, 0x96, 0x4f, 0x6f, 0xc0, 0x7d, 0x6a, 0x41, - 0x49, 0x63, 0xbe, 0xb0, 0x9d, 0x1e, 0x3d, 0xbf, 0x01, 0x9d, 0x9e, 0x3f, 0x8f, 0x56, 0x20, 0x94, - 0x86, 0x7e, 0x0f, 0xe6, 0xbb, 0xbe, 0xd7, 0xf1, 0x84, 0xa7, 0x6e, 0x79, 0x6d, 0xa7, 0xee, 0xd0, - 0xa0, 0x59, 0x78, 0x69, 0x68, 0x79, 0x06, 0xf9, 0x7e, 0xe5, 0x3b, 0x5a, 0xee, 0xfc, 0x56, 0x92, - 0x2f, 0xee, 0x17, 0x65, 0xff, 0x97, 0x05, 0xd3, 0x31, 0xdd, 0xa3, 0x3a, 0x40, 0xdd, 0x73, 0x1b, - 0x0e, 0x0f, 0x2f, 0x64, 0x4b, 0xe7, 0x57, 0x87, 0xd3, 0x6a, 0x35, 0xa0, 0x8b, 0x8c, 0x2e, 0x1c, - 0x62, 0xd8, 0x60, 0x8b, 0x2e, 0x04, 0xef, 0x17, 0xe2, 0xf9, 0x92, 0x7a, 0xbf, 0xf0, 0xe4, 0x60, - 0x65, 0x4a, 0xcf, 0xc9, 0x7c, 0xcf, 0x90, 0xe5, 0x95, 0xc0, 0x3f, 0xe4, 0xa0, 0x18, 0xae, 0xff, - 0x39, 0xb8, 0xd1, 0x07, 0x31, 0x37, 0xba, 0x90, 0x71, 0xe7, 0xa4, 0x23, 0x85, 0x39, 0x89, 0xe1, - 0x4c, 0x8f, 0x13, 0xce, 0x94, 0xd5, 0x24, 0x8e, 0x70, 0xa7, 0x7f, 0x51, 0x9b, 0xaf, 0x70, 0x9f, - 0x83, 0x43, 0xdd, 0x8b, 0x3b, 0xd4, 0x6a, 0xc6, 0xd5, 0x0c, 0x70, 0xa9, 0x9f, 0x5a, 0x30, 0x9b, - 0x70, 0x02, 0xf4, 0x2a, 0x8c, 0xcb, 0xee, 0x90, 0xb6, 0xaf, 0x90, 0x50, 0xf7, 0x12, 0x24, 0x0c, - 0x6d, 0xc1, 0x02, 0xe9, 0x71, 0x2f, 0xa4, 0xbd, 0xe1, 0x92, 0xed, 0x36, 0x55, 0x0d, 0x82, 0xc9, - 0xca, 0x2f, 0x68, 0x9a, 0x85, 0xb5, 0x14, 0x1c, 0x9c, 0x4a, 0x69, 0x7f, 0x9e, 0x03, 0x14, 0x0e, - 0x66, 0xe9, 0xaa, 0x3e, 0x86, 0x89, 0x1d, 0xd5, 0xff, 0x79, 0xb6, 0xb6, 0x78, 0xa5, 0x64, 0xde, - 0x0c, 0x04, 0x3c, 0xd1, 0x0f, 0x8e, 0xc7, 0x8e, 0xa0, 0xdf, 0x86, 0xd0, 0x43, 0x80, 0x1d, 0xc7, - 0x75, 0x58, 0x6b, 0xc4, 0x0b, 0x3c, 0x79, 0x9a, 0xdf, 0x0c, 0x39, 0x60, 0x83, 0x9b, 0xfd, 0x71, - 0xce, 0xb0, 0x4f, 0x19, 0x2e, 0x87, 0xda, 0xd7, 0x37, 0xe3, 0xca, 0x2c, 0xf6, 0x5f, 0x99, 0x18, - 0x8a, 0x19, 0xdb, 0x23, 0x7e, 0xd0, 0xbd, 0xbd, 0x9c, 0x51, 0x2d, 0xf7, 0x89, 0xef, 0x88, 0x8d, - 0x8f, 0xb6, 0xf4, 0x3e, 0xf1, 0x19, 0x96, 0x2c, 0xd1, 0xf7, 0xc5, 0x54, 0x69, 0x58, 0xb3, 0x65, - 0x8e, 0x09, 0x9c, 0x76, 0xcd, 0xf5, 0xd1, 0x2e, 0xc3, 0x8a, 0xa1, 0xfd, 0x6f, 0x05, 0xc3, 0xe0, - 0x75, 0xd4, 0xbe, 0x03, 0xa8, 0x4d, 0x18, 0xbf, 0x4d, 0xdc, 0x86, 0x30, 0x4f, 0xba, 0xe3, 0x53, - 0xd6, 0xd2, 0x19, 0xda, 0x92, 0xe6, 0x82, 0x36, 0xfb, 0x30, 0x70, 0x0a, 0x15, 0xba, 0x14, 0x0f, - 0xce, 0x2b, 0xc9, 0xe0, 0x3c, 0x13, 0x79, 0xdb, 0x68, 0xe1, 0xd9, 0x34, 0xf7, 0xf1, 0x13, 0x30, - 0xf7, 0xdf, 0x85, 0xf9, 0x9d, 0xe4, 0x15, 0x9a, 0xbe, 0x50, 0xbf, 0x3c, 0xe2, 0x0d, 0x5c, 0xe5, - 0xcc, 0x61, 0x74, 0xef, 0x12, 0x0d, 0xe3, 0x7e, 0x41, 0xc8, 0x0b, 0x9e, 0x8e, 0xc9, 0xea, 0x53, - 0xf5, 0x30, 0x86, 0x76, 0xb9, 0x44, 0xdd, 0x9a, 0x7c, 0x34, 0xa6, 0x58, 0xe2, 0x98, 0x80, 0x84, - 0x0b, 0x16, 0x8e, 0xd3, 0x05, 0xd1, 0x25, 0x28, 0xd5, 0x7b, 0xbe, 0x4f, 0x5d, 0x2e, 0xa6, 0x23, - 0x53, 0xd9, 0x7c, 0xd4, 0x8b, 0xae, 0x46, 0x20, 0x6c, 0xe2, 0x09, 0x73, 0x34, 0xfe, 0x5c, 0xe3, - 0x9c, 0x76, 0xba, 0x5c, 0x76, 0xc1, 0xf2, 0x91, 0x39, 0x56, 0xfb, 0x30, 0x70, 0x0a, 0x15, 0xfa, - 0x50, 0xfa, 0x3c, 0xa7, 0xb2, 0x5e, 0x79, 0xf6, 0xba, 0xbc, 0xa8, 0xe3, 0x05, 0x57, 0xf1, 0x82, - 0x53, 0xfb, 0xcf, 0x62, 0x61, 0x66, 0xb8, 0x6e, 0xc1, 0x12, 0xe4, 0x08, 0x4b, 0xb6, 0x92, 0xd7, - 0x18, 0xce, 0x11, 0x86, 0x7e, 0x00, 0xe3, 0x3e, 0xe5, 0xfe, 0xbe, 0x8e, 0x86, 0x57, 0x46, 0xf0, - 0x7c, 0x2c, 0xe8, 0xd5, 0x54, 0xe5, 0x4f, 0xac, 0x38, 0x1a, 0x4d, 0x8a, 0xfc, 0x89, 0x35, 0x29, - 0x2a, 0xc6, 0x19, 0x16, 0xce, 0x45, 0x54, 0x56, 0x44, 0x6d, 0x88, 0x52, 0x4b, 0x3e, 0x3a, 0xe9, - 0xf5, 0x46, 0x31, 0x1c, 0x62, 0xd8, 0x3e, 0x44, 0xe9, 0x67, 0xf0, 0xf6, 0x14, 0x3d, 0xd6, 0x49, - 0x92, 0x95, 0xe5, 0x2d, 0x65, 0x1f, 0x9b, 0x41, 0xc9, 0x92, 0xfd, 0xb9, 0x05, 0x67, 0x52, 0xb1, - 0xc3, 0x28, 0x9f, 0x3b, 0xc1, 0x28, 0x6f, 0x1d, 0x77, 0x94, 0x7f, 0x68, 0xa8, 0x30, 0x98, 0xc2, - 0x71, 0x3d, 0x18, 0xff, 0x59, 0x0e, 0xe6, 0x30, 0xed, 0x7a, 0xb1, 0x86, 0xc7, 0x56, 0xf0, 0x3a, - 0x2d, 0x43, 0x86, 0x90, 0xe8, 0xe0, 0x57, 0x26, 0x62, 0xcf, 0xd2, 0xbe, 0x0f, 0xe3, 0xb2, 0x17, - 0xa1, 0x73, 0x9a, 0xcb, 0x19, 0x6e, 0x5c, 0x63, 0x5c, 0xa5, 0x1f, 0xa8, 0xa6, 0x8e, 0x62, 0x28, - 0x38, 0xcb, 0xcb, 0x52, 0xed, 0x06, 0x97, 0x33, 0x5c, 0xbb, 0xf6, 0x73, 0x96, 0xc3, 0x58, 0x31, - 0xb4, 0x3f, 0xc9, 0x81, 0xca, 0x26, 0x9e, 0x43, 0xd5, 0xf0, 0x1b, 0xb1, 0xaa, 0x61, 0xc8, 0x74, - 0x58, 0x4e, 0x6e, 0x60, 0xc5, 0x90, 0xcc, 0xf4, 0xce, 0x65, 0x61, 0xfa, 0xf4, 0x6a, 0xe1, 0x9f, - 0x2d, 0x28, 0x4a, 0xbc, 0xe7, 0x50, 0x29, 0x6c, 0xc5, 0x2b, 0x85, 0xb7, 0x32, 0xac, 0x62, 0x40, - 0x95, 0xf0, 0x71, 0x5e, 0xcf, 0x3e, 0xcc, 0x23, 0x5b, 0xc4, 0x6f, 0xe8, 0x0c, 0x29, 0xf2, 0x40, - 0x31, 0x88, 0x15, 0x0c, 0xfd, 0x36, 0xcc, 0xf9, 0xea, 0xfe, 0x9d, 0x36, 0x6e, 0x86, 0xe9, 0x4a, - 0x3e, 0xf3, 0x05, 0xb9, 0xbe, 0xc4, 0x8f, 0x3a, 0x65, 0x38, 0xc1, 0x15, 0xf7, 0xc9, 0x11, 0x29, - 0x4c, 0x37, 0x19, 0xcb, 0xf4, 0xd1, 0x7e, 0x79, 0xc4, 0xc0, 0xa9, 0x52, 0x98, 0xbe, 0x61, 0xdc, - 0x2f, 0x08, 0xb5, 0x60, 0xca, 0x7c, 0xda, 0xa3, 0x6d, 0xe9, 0x7c, 0xf6, 0x37, 0x44, 0xea, 0x12, - 0xc6, 0x1c, 0xc1, 0x31, 0xce, 0xf6, 0x41, 0x01, 0x4a, 0x86, 0xf1, 0x25, 0xba, 0x0f, 0xd3, 0x27, - 0xd3, 0x7d, 0x48, 0x4f, 0x96, 0x4b, 0x23, 0x25, 0xcb, 0xe7, 0xe2, 0xc9, 0xf2, 0x77, 0x93, 0xc9, - 0x32, 0xc8, 0xd5, 0xc5, 0x12, 0x65, 0x06, 0x33, 0x3a, 0x6b, 0x0c, 0xde, 0x68, 0x65, 0x2a, 0x3f, - 0xfa, 0x73, 0x53, 0x74, 0x78, 0xb0, 0x12, 0xbc, 0xb0, 0x08, 0xde, 0x66, 0x25, 0x44, 0xa0, 0xeb, - 0xa1, 0xd0, 0x5a, 0xaf, 0xd3, 0x21, 0xfe, 0xfe, 0xe2, 0x94, 0x9c, 0x70, 0xd8, 0x96, 0xbc, 0x19, - 0x83, 0xe2, 0x04, 0x36, 0xda, 0x82, 0x82, 0x4a, 0x3a, 0xf5, 0xbb, 0x9f, 0xb7, 0xb3, 0xe4, 0xb3, - 0x2a, 0xcf, 0x50, 0xbf, 0xb1, 0xe6, 0x63, 0xd6, 0x0b, 0xc5, 0x23, 0xea, 0x85, 0x3b, 0x80, 0xbc, - 0x6d, 0x99, 0xd1, 0x34, 0x6e, 0xa9, 0x2f, 0xab, 0x84, 0x55, 0x16, 0xe2, 0xe9, 0xe4, 0xdd, 0x3e, - 0x0c, 0x9c, 0x42, 0x25, 0xbc, 0x5a, 0x27, 0x99, 0xa1, 0x2b, 0xe8, 0xda, 0x20, 0x6b, 0xa2, 0x16, - 0x95, 0x21, 0x0b, 0xc2, 0xab, 0xab, 0x09, 0xae, 0xb8, 0x4f, 0x0e, 0xfa, 0x11, 0x4c, 0x0b, 0x13, - 0x8a, 0x04, 0xc3, 0x33, 0x0a, 0x9e, 0x3f, 0x3c, 0x58, 0x99, 0xde, 0x34, 0x59, 0xe2, 0xb8, 0x04, - 0xfb, 0xff, 0x72, 0x10, 0xf3, 0x3f, 0xf4, 0x53, 0x0b, 0xe6, 0x49, 0xe2, 0xb3, 0xa0, 0x20, 0x7d, - 0xf9, 0xb5, 0x6c, 0xdf, 0x6a, 0xf5, 0x7d, 0x55, 0x14, 0x35, 0x1f, 0x93, 0x28, 0x0c, 0xf7, 0x0b, - 0x45, 0x7f, 0x6c, 0xc1, 0x69, 0xd2, 0xff, 0xdd, 0x97, 0x3e, 0x0f, 0xaf, 0x8e, 0xfc, 0xe1, 0x58, - 0xe5, 0xe5, 0xc3, 0x83, 0x95, 0xb4, 0x2f, 0xe2, 0x70, 0x9a, 0x38, 0xf4, 0x43, 0x18, 0x23, 0x7e, - 0x33, 0x28, 0xd4, 0xb3, 0x8b, 0x0d, 0x3e, 0xe7, 0x8b, 0x0e, 0xe4, 0x35, 0xbf, 0xc9, 0xb0, 0x64, - 0x6a, 0x7f, 0x95, 0x87, 0xb9, 0xe4, 0xab, 0x4a, 0xfd, 0x10, 0x65, 0x2c, 0xf5, 0x21, 0xca, 0xab, - 0x30, 0x4e, 0xea, 0x3c, 0x7c, 0x15, 0x12, 0xbd, 0x24, 0x16, 0x83, 0x58, 0xc1, 0xd0, 0x03, 0x28, - 0x32, 0x4e, 0x7c, 0x2e, 0xea, 0x37, 0x5d, 0x42, 0x67, 0x7e, 0x35, 0x5d, 0x0b, 0x18, 0xe0, 0x88, - 0x17, 0xba, 0x12, 0x0f, 0x67, 0x76, 0x32, 0x9c, 0xcd, 0x9b, 0x6b, 0x19, 0xb5, 0xfc, 0xef, 0x40, - 0xc9, 0xd8, 0x07, 0x7d, 0xba, 0x5c, 0xcb, 0xac, 0xf7, 0xc8, 0xec, 0x66, 0xd5, 0x37, 0x81, 0x11, - 0xc4, 0xe4, 0x1f, 0xd5, 0xc7, 0x52, 0x5b, 0xcf, 0x54, 0x1f, 0x4b, 0x75, 0x19, 0xdc, 0xec, 0x59, - 0x98, 0x8e, 0x3d, 0x8e, 0x92, 0x9d, 0xe7, 0x07, 0xc4, 0xa7, 0x2d, 0xaf, 0xc7, 0xe8, 0x8b, 0xda, - 0x79, 0x0e, 0x27, 0x78, 0xdc, 0x9d, 0xe7, 0x88, 0xf1, 0xd1, 0x9d, 0xe7, 0x10, 0xf7, 0x85, 0xed, - 0x3c, 0x87, 0x33, 0x1c, 0x90, 0x53, 0xfe, 0x6f, 0xce, 0x58, 0x45, 0x3c, 0xaf, 0xcc, 0x3d, 0x25, - 0xaf, 0x7c, 0x04, 0x93, 0x8e, 0xcb, 0xa9, 0xbf, 0x47, 0xda, 0xba, 0x45, 0x30, 0xe4, 0x52, 0xd7, - 0x7b, 0xbe, 0xce, 0xaa, 0x82, 0xa5, 0x6e, 0x68, 0x3e, 0x38, 0xe4, 0x88, 0xda, 0x70, 0x26, 0xe8, - 0x49, 0xf9, 0x94, 0x44, 0x3d, 0x71, 0x7d, 0xaf, 0xfc, 0x6e, 0x70, 0xa9, 0x79, 0x33, 0x0d, 0xe9, - 0xc9, 0x20, 0x00, 0x4e, 0x67, 0x8a, 0x18, 0x4c, 0x33, 0xa3, 0xa0, 0x0a, 0x0e, 0x92, 0x21, 0xfb, - 0x79, 0xc9, 0x1a, 0xd4, 0xb8, 0x8c, 0x36, 0x99, 0xe2, 0xb8, 0x0c, 0xfb, 0x3f, 0xf2, 0x30, 0x9b, - 0xb0, 0xb4, 0x44, 0xe2, 0x58, 0x7c, 0x9e, 0x89, 0x63, 0x61, 0xa4, 0xc4, 0x31, 0x3d, 0xa7, 0x19, - 0x1b, 0x29, 0xa7, 0x79, 0x4f, 0xe5, 0x15, 0x7a, 0xe7, 0x36, 0xd6, 0xf5, 0x33, 0xc1, 0x50, 0x9b, - 0x9b, 0x26, 0x10, 0xc7, 0x71, 0xe5, 0x29, 0xdc, 0xe8, 0xff, 0x26, 0x4e, 0x27, 0x45, 0x57, 0xb3, - 0x3e, 0xbe, 0x08, 0x19, 0xa8, 0x53, 0x38, 0x05, 0x80, 0xd3, 0xc4, 0x55, 0xee, 0x7c, 0xf6, 0xf5, - 0xf2, 0xa9, 0x2f, 0xbe, 0x5e, 0x3e, 0xf5, 0xe5, 0xd7, 0xcb, 0xa7, 0x7e, 0x72, 0xb8, 0x6c, 0x7d, - 0x76, 0xb8, 0x6c, 0x7d, 0x71, 0xb8, 0x6c, 0x7d, 0x79, 0xb8, 0x6c, 0xfd, 0xf7, 0xe1, 0xb2, 0xf5, - 0x97, 0xdf, 0x2c, 0x9f, 0x7a, 0xf8, 0xda, 0x30, 0xff, 0xbc, 0xe0, 0xff, 0x03, 0x00, 0x00, 0xff, - 0xff, 0x90, 0x47, 0xd6, 0xce, 0xe3, 0x40, 0x00, 0x00, + // 3694 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x3c, 0x5d, 0x6f, 0x1b, 0xc7, + 0x76, 0x5e, 0x52, 0xa2, 0xc4, 0x43, 0x7d, 0x8e, 0xe5, 0x44, 0x57, 0xb7, 0x91, 0xdc, 0x4d, 0x10, + 0x24, 0x4d, 0x42, 0xd5, 0x5f, 0xf1, 0x47, 0x0a, 0x17, 0x22, 0xe5, 0x0f, 0xb9, 0xba, 0xb1, 0x3a, + 0x74, 0xec, 0x7b, 0x7d, 0x6d, 0xa4, 0x23, 0x72, 0x44, 0x6e, 0x45, 0xee, 0xf2, 0xce, 0x0c, 0x95, + 0xa8, 0x2d, 0xda, 0xdb, 0x2f, 0xe0, 0x02, 0xfd, 0x40, 0x1f, 0x82, 0xe6, 0x16, 0x68, 0x81, 0xa2, + 0x7d, 0x6e, 0xff, 0x40, 0x1f, 0xf2, 0xd0, 0x97, 0xa0, 0x48, 0x8b, 0xa0, 0xed, 0x43, 0x1e, 0x02, + 0xa1, 0x51, 0x80, 0x3e, 0xe6, 0xad, 0x2f, 0x06, 0x0a, 0x14, 0x3b, 0x33, 0xbb, 0x3b, 0xbb, 0x5c, + 0x5a, 0x5c, 0x5a, 0x32, 0x8c, 0xbe, 0x51, 0x73, 0xbe, 0x66, 0xce, 0x9c, 0x73, 0xe6, 0x9c, 0x33, + 0xb3, 0x82, 0x8b, 0x4d, 0x47, 0xb4, 0x7a, 0xdb, 0xe5, 0xba, 0xd7, 0x59, 0x25, 0xbb, 0x3d, 0x47, + 0xec, 0xaf, 0xee, 0x12, 0xd6, 0xf4, 0x56, 0x49, 0xd7, 0x59, 0xdd, 0x3b, 0x47, 0xda, 0xdd, 0x16, + 0x39, 0xb7, 0xda, 0xa4, 0x2e, 0x65, 0x44, 0xd0, 0x46, 0xb9, 0xcb, 0x3c, 0xe1, 0xa1, 0xd7, 0x22, + 0xaa, 0xb2, 0xa2, 0x2a, 0x4b, 0xaa, 0x32, 0xe9, 0x3a, 0xe5, 0x80, 0x6a, 0xe9, 0x1d, 0x83, 0x77, + 0xd3, 0x6b, 0x7a, 0xab, 0x92, 0x78, 0xbb, 0xb7, 0x23, 0xff, 0x92, 0x7f, 0xc8, 0x5f, 0x8a, 0xe9, + 0xd2, 0xed, 0xdd, 0x2b, 0xbc, 0xec, 0x48, 0xc9, 0xf4, 0x63, 0x41, 0x5d, 0xee, 0x78, 0x2e, 0x7f, + 0x87, 0x74, 0x1d, 0x4e, 0xd9, 0x1e, 0x65, 0xab, 0xdd, 0xdd, 0xa6, 0x0f, 0xe3, 0x71, 0x84, 0xd5, + 0xbd, 0xbe, 0xe9, 0x2d, 0x5d, 0x8c, 0x38, 0x75, 0x48, 0xbd, 0xe5, 0xb8, 0x94, 0xed, 0x47, 0xe4, + 0x1d, 0x2a, 0x48, 0x1a, 0xd5, 0xea, 0x20, 0x2a, 0xd6, 0x73, 0x85, 0xd3, 0xa1, 0x7d, 0x04, 0xef, + 0x1e, 0x45, 0xc0, 0xeb, 0x2d, 0xda, 0x21, 0x49, 0x3a, 0xfb, 0x11, 0x9c, 0x5e, 0x73, 0x49, 0x7b, + 0x9f, 0x3b, 0x1c, 0xf7, 0xdc, 0x35, 0xd6, 0xec, 0x75, 0xa8, 0x2b, 0xd0, 0x59, 0x18, 0x73, 0x49, + 0x87, 0x2e, 0x5a, 0x67, 0xad, 0x37, 0x8a, 0x95, 0xa9, 0xcf, 0x0f, 0x56, 0x4e, 0x1d, 0x1e, 0xac, + 0x8c, 0xbd, 0x4f, 0x3a, 0x14, 0x4b, 0x08, 0x7a, 0x15, 0xc6, 0xf7, 0x48, 0xbb, 0x47, 0x17, 0x73, + 0x12, 0x65, 0x5a, 0xa3, 0x8c, 0xdf, 0xf7, 0x07, 0xb1, 0x82, 0xd9, 0x7f, 0x98, 0x8f, 0xb1, 0xff, + 0x01, 0x15, 0xa4, 0x41, 0x04, 0x41, 0x1d, 0x28, 0xb4, 0xc9, 0x36, 0x6d, 0xf3, 0x45, 0xeb, 0x6c, + 0xfe, 0x8d, 0xd2, 0xf9, 0x1b, 0xe5, 0x61, 0x36, 0xb1, 0x9c, 0xc2, 0xaa, 0xbc, 0x29, 0xf9, 0xdc, + 0x70, 0x05, 0xdb, 0xaf, 0xcc, 0xe8, 0x49, 0x14, 0xd4, 0x20, 0xd6, 0x42, 0xd0, 0xef, 0x5b, 0x50, + 0x22, 0xae, 0xeb, 0x09, 0x22, 0xfc, 0x6d, 0x5a, 0xcc, 0x49, 0xa1, 0x77, 0x46, 0x17, 0xba, 0x16, + 0x31, 0x53, 0x92, 0x4f, 0x6b, 0xc9, 0x25, 0x03, 0x82, 0x4d, 0x99, 0x4b, 0x57, 0xa1, 0x64, 0x4c, + 0x15, 0xcd, 0x41, 0x7e, 0x97, 0xee, 0x2b, 0xfd, 0x62, 0xff, 0x27, 0x5a, 0x88, 0x29, 0x54, 0x6b, + 0xf0, 0x5a, 0xee, 0x8a, 0xb5, 0x74, 0x1d, 0xe6, 0x92, 0x02, 0xb3, 0xd0, 0xdb, 0x7f, 0x6e, 0xc1, + 0x82, 0xb1, 0x0a, 0x4c, 0x77, 0x28, 0xa3, 0x6e, 0x9d, 0xa2, 0x55, 0x28, 0xfa, 0x7b, 0xc9, 0xbb, + 0xa4, 0x1e, 0x6c, 0xf5, 0xbc, 0x5e, 0x48, 0xf1, 0xfd, 0x00, 0x80, 0x23, 0x9c, 0xd0, 0x2c, 0x72, + 0x4f, 0x33, 0x8b, 0x6e, 0x8b, 0x70, 0xba, 0x98, 0x8f, 0x9b, 0xc5, 0x96, 0x3f, 0x88, 0x15, 0xcc, + 0xfe, 0x08, 0xbe, 0x17, 0xcc, 0xe7, 0x1e, 0xed, 0x74, 0xdb, 0x44, 0xd0, 0x68, 0x52, 0x47, 0x9b, + 0xde, 0x15, 0x98, 0xaa, 0xb7, 0x7b, 0x5c, 0x50, 0x56, 0xab, 0x7b, 0x5d, 0x35, 0x9b, 0xc9, 0xca, + 0x82, 0xc6, 0x9c, 0xaa, 0x1a, 0x30, 0x1c, 0xc3, 0xb4, 0x67, 0x61, 0x7a, 0xad, 0xdb, 0x65, 0xde, + 0x1e, 0x6d, 0xd4, 0x04, 0x69, 0x52, 0xfb, 0x0f, 0x2c, 0x38, 0xb3, 0xc6, 0x9a, 0x5e, 0x75, 0x7d, + 0xad, 0xdb, 0xbd, 0x4d, 0x49, 0x5b, 0xb4, 0x6a, 0x82, 0x88, 0x1e, 0x47, 0xd7, 0xa1, 0xc0, 0xe5, + 0x2f, 0x3d, 0x91, 0xd7, 0x03, 0xdb, 0x52, 0xf0, 0x27, 0x07, 0x2b, 0x0b, 0x29, 0x84, 0x14, 0x6b, + 0x2a, 0xf4, 0x26, 0x4c, 0x74, 0x28, 0xe7, 0xa4, 0x19, 0x68, 0x6b, 0x56, 0x33, 0x98, 0xf8, 0x81, + 0x1a, 0xc6, 0x01, 0xdc, 0xfe, 0x97, 0x1c, 0xcc, 0x86, 0xbc, 0xb4, 0xf8, 0x13, 0xd8, 0x9a, 0x1e, + 0x4c, 0xb5, 0x8c, 0x15, 0xca, 0x1d, 0x2a, 0x9d, 0x7f, 0x6f, 0x48, 0x2f, 0x48, 0x53, 0x52, 0xa4, + 0x73, 0x73, 0x14, 0xc7, 0xc4, 0xa0, 0x0e, 0x00, 0xdf, 0x77, 0xeb, 0x5a, 0xe8, 0x98, 0x14, 0x7a, + 0x35, 0xa3, 0xd0, 0x5a, 0xc8, 0xa0, 0x82, 0xb4, 0x48, 0x88, 0xc6, 0xb0, 0x21, 0xc0, 0xfe, 0x47, + 0x0b, 0x4e, 0xa7, 0xd0, 0xa1, 0x5f, 0x49, 0xec, 0xe7, 0x6b, 0x7d, 0xfb, 0x89, 0xfa, 0xc8, 0xa2, + 0xdd, 0x7c, 0x1b, 0x26, 0x19, 0xdd, 0x73, 0xfc, 0x28, 0xaf, 0x35, 0x3c, 0xa7, 0xe9, 0x27, 0xb1, + 0x1e, 0xc7, 0x21, 0x06, 0x7a, 0x0b, 0x8a, 0xc1, 0x6f, 0x5f, 0xcd, 0x79, 0xdf, 0x11, 0xfc, 0x8d, + 0x0b, 0x50, 0x39, 0x8e, 0xe0, 0xf6, 0xef, 0xc1, 0x78, 0xb5, 0x45, 0x98, 0xf0, 0x2d, 0x86, 0xd1, + 0xae, 0xf7, 0x01, 0xde, 0xd4, 0x53, 0x0c, 0x2d, 0x06, 0xab, 0x61, 0x1c, 0xc0, 0x87, 0xd8, 0xec, + 0x37, 0x61, 0x62, 0x8f, 0x32, 0x39, 0xdf, 0x7c, 0x9c, 0xd9, 0x7d, 0x35, 0x8c, 0x03, 0xb8, 0xfd, + 0x1f, 0x16, 0x2c, 0xc8, 0x19, 0xac, 0x3b, 0xbc, 0xee, 0xed, 0x51, 0xb6, 0x8f, 0x29, 0xef, 0xb5, + 0x8f, 0x79, 0x42, 0xeb, 0x30, 0xc7, 0x69, 0x67, 0x8f, 0xb2, 0xaa, 0xe7, 0x72, 0xc1, 0x88, 0xe3, + 0x0a, 0x3d, 0xb3, 0x45, 0x8d, 0x3d, 0x57, 0x4b, 0xc0, 0x71, 0x1f, 0x05, 0x7a, 0x03, 0x26, 0xf5, + 0xb4, 0x7d, 0x53, 0xf2, 0x15, 0x3b, 0xe5, 0xef, 0x81, 0x5e, 0x13, 0xc7, 0x21, 0xd4, 0xfe, 0x6f, + 0x0b, 0xe6, 0xe5, 0xaa, 0x6a, 0xbd, 0x6d, 0x5e, 0x67, 0x4e, 0xd7, 0x0f, 0x9e, 0x2f, 0xe2, 0x92, + 0xae, 0xc3, 0x4c, 0x23, 0x50, 0xfc, 0xa6, 0xd3, 0x71, 0x84, 0xf4, 0x91, 0xf1, 0xca, 0x4b, 0x9a, + 0xc7, 0xcc, 0x7a, 0x0c, 0x8a, 0x13, 0xd8, 0xf6, 0x5f, 0xe7, 0xe1, 0x74, 0x80, 0x42, 0x1b, 0x6b, + 0x4c, 0x38, 0x3b, 0xa4, 0x2e, 0x38, 0x6a, 0xc0, 0x54, 0x23, 0x1a, 0x16, 0xda, 0xf3, 0x7e, 0xa9, + 0xac, 0x12, 0x85, 0xb2, 0x99, 0x28, 0x94, 0xbb, 0xbb, 0x4d, 0x7f, 0x80, 0x97, 0xfd, 0x7c, 0xa4, + 0xbc, 0x77, 0xae, 0x7c, 0xcf, 0xe9, 0xd0, 0xc8, 0xbb, 0x0d, 0xf6, 0x02, 0xc7, 0xb8, 0xa2, 0x07, + 0x90, 0x6f, 0x3a, 0x42, 0x1f, 0xe3, 0x57, 0x86, 0x73, 0xeb, 0x5b, 0x4e, 0xd2, 0xd4, 0x2a, 0x25, + 0x2d, 0x2a, 0x7f, 0xcb, 0x11, 0xd8, 0xe7, 0x88, 0xb6, 0xa1, 0xe0, 0x74, 0x48, 0x93, 0x06, 0xa7, + 0xf5, 0xb5, 0xe1, 0x78, 0x6f, 0xf8, 0x34, 0x49, 0xee, 0x61, 0x5e, 0x20, 0xa1, 0x1c, 0x6b, 0xce, + 0xbe, 0x8c, 0xba, 0x6f, 0x22, 0xca, 0x49, 0x87, 0x96, 0x91, 0xe6, 0x2c, 0x91, 0x0c, 0x09, 0xe5, + 0x58, 0x73, 0xb6, 0xbf, 0xca, 0xc1, 0x5c, 0xa4, 0xbf, 0xaa, 0xd7, 0xe9, 0x38, 0x02, 0x2d, 0x41, + 0xce, 0x69, 0x68, 0x0b, 0x04, 0x4d, 0x98, 0xdb, 0x58, 0xc7, 0x39, 0xa7, 0x81, 0x5e, 0x87, 0xc2, + 0x36, 0x23, 0x6e, 0xbd, 0xa5, 0x2d, 0x2f, 0x64, 0x5c, 0x91, 0xa3, 0x58, 0x43, 0xd1, 0x2b, 0x90, + 0x17, 0xa4, 0xa9, 0x0d, 0x2e, 0xd4, 0xdf, 0x3d, 0xd2, 0xc4, 0xfe, 0xb8, 0x6f, 0xe9, 0xbc, 0xb7, + 0xfd, 0x9b, 0xb4, 0xae, 0x76, 0xde, 0xb0, 0xf4, 0x9a, 0x1a, 0xc6, 0x01, 0xdc, 0x97, 0x48, 0x7a, + 0xa2, 0xe5, 0xb1, 0xc5, 0xf1, 0xb8, 0xc4, 0x35, 0x39, 0x8a, 0x35, 0xd4, 0x3f, 0x93, 0xea, 0x72, + 0xfe, 0x82, 0xb2, 0xc5, 0x42, 0xfc, 0x4c, 0xaa, 0x06, 0x00, 0x1c, 0xe1, 0xa0, 0xc7, 0x50, 0xaa, + 0x33, 0x4a, 0x84, 0xc7, 0xd6, 0x89, 0xa0, 0x8b, 0x13, 0x99, 0x2d, 0x70, 0xd6, 0x4f, 0xa9, 0xaa, + 0x11, 0x0b, 0x6c, 0xf2, 0xb3, 0xbf, 0xb3, 0x60, 0x31, 0x52, 0xad, 0xdc, 0xdb, 0x28, 0x8d, 0xd0, + 0xea, 0xb1, 0x06, 0xa8, 0xe7, 0x75, 0x28, 0x34, 0x9c, 0x26, 0xe5, 0x22, 0xa9, 0xe5, 0x75, 0x39, + 0x8a, 0x35, 0x14, 0x9d, 0x07, 0x68, 0x3a, 0x42, 0x07, 0x07, 0xad, 0xec, 0xf0, 0x08, 0xba, 0x15, + 0x42, 0xb0, 0x81, 0x85, 0x1e, 0x40, 0x51, 0x4e, 0x73, 0x44, 0xb7, 0x93, 0x47, 0x45, 0x35, 0x60, + 0x80, 0x23, 0x5e, 0xf6, 0x97, 0x63, 0x30, 0x71, 0x93, 0x51, 0xa7, 0xd9, 0x12, 0xe8, 0x37, 0x60, + 0xb2, 0xa3, 0xd3, 0x51, 0xb9, 0xc8, 0xd2, 0xf9, 0x5f, 0x1e, 0x4e, 0xc6, 0x5d, 0xb9, 0xe9, 0x7e, + 0x2a, 0x1b, 0x2d, 0x24, 0x1a, 0xc3, 0x21, 0x57, 0x3f, 0x95, 0x23, 0x6d, 0x87, 0x70, 0xb9, 0x6f, + 0x46, 0x2a, 0xb7, 0xe6, 0x0f, 0x62, 0x05, 0x43, 0x3f, 0x86, 0x82, 0xc7, 0x9c, 0xa6, 0xe3, 0x2e, + 0x16, 0xe5, 0x24, 0x2e, 0x0c, 0xe7, 0x42, 0x7a, 0x15, 0x77, 0x25, 0x69, 0xa4, 0x7c, 0xf5, 0x37, + 0xd6, 0x2c, 0xd1, 0x43, 0x98, 0x50, 0xc6, 0x14, 0x38, 0xe8, 0xea, 0xd0, 0x01, 0x46, 0xd9, 0x63, + 0x64, 0xf4, 0xea, 0x6f, 0x8e, 0x03, 0x86, 0xa8, 0x16, 0xc6, 0x97, 0x31, 0xc9, 0xfa, 0xad, 0x0c, + 0xf1, 0x65, 0x60, 0x40, 0xa9, 0x85, 0x01, 0x65, 0x3c, 0x0b, 0x53, 0x19, 0x32, 0x06, 0x45, 0x10, + 0x5f, 0xc5, 0x3a, 0x73, 0x29, 0x8c, 0xa0, 0x62, 0x9d, 0x36, 0xcd, 0xc4, 0xd3, 0x9d, 0x20, 0xb1, + 0xb1, 0x3f, 0xc9, 0xc3, 0xbc, 0xc6, 0xac, 0x7a, 0xed, 0x36, 0xad, 0xcb, 0x63, 0x52, 0xc5, 0xa7, + 0x7c, 0x6a, 0x7c, 0x72, 0x60, 0xdc, 0x11, 0xb4, 0x13, 0x94, 0x6e, 0x95, 0x4c, 0xb3, 0x89, 0x64, + 0x94, 0x37, 0x7c, 0x26, 0xaa, 0x7a, 0x0a, 0x77, 0x49, 0x63, 0x61, 0x25, 0x01, 0xfd, 0xb1, 0x05, + 0xa7, 0xf7, 0x28, 0x73, 0x76, 0x9c, 0xba, 0xac, 0x7d, 0x6e, 0x3b, 0x5c, 0x78, 0x6c, 0x5f, 0x9f, + 0x08, 0xef, 0x0e, 0x27, 0xf9, 0xbe, 0xc1, 0x60, 0xc3, 0xdd, 0xf1, 0x2a, 0xdf, 0xd7, 0xd2, 0x4e, + 0xdf, 0xef, 0x67, 0x8d, 0xd3, 0xe4, 0x2d, 0x75, 0x01, 0xa2, 0xd9, 0xa6, 0x94, 0x5e, 0x9b, 0x66, + 0xe9, 0x35, 0xf4, 0xc4, 0x82, 0xc5, 0x06, 0x21, 0xcb, 0x2c, 0xd9, 0x3e, 0xb3, 0xa0, 0xa4, 0xe1, + 0x9b, 0x0e, 0x17, 0xe8, 0x51, 0x9f, 0xb7, 0x97, 0x87, 0xf3, 0x76, 0x9f, 0x5a, 0xfa, 0x7a, 0x98, + 0xaf, 0x06, 0x23, 0x86, 0xa7, 0xe3, 0x60, 0x4b, 0x95, 0x62, 0xdf, 0xc9, 0x34, 0xff, 0x28, 0x30, + 0x48, 0x1d, 0xe9, 0xbd, 0xb3, 0x19, 0x4c, 0xc7, 0x9c, 0x1c, 0x5d, 0x82, 0xb1, 0x5d, 0xc7, 0x0d, + 0x4e, 0xbd, 0x5f, 0x0c, 0xf2, 0xa9, 0x5f, 0x73, 0xdc, 0xc6, 0x93, 0x83, 0x95, 0xf9, 0x18, 0xb2, + 0x3f, 0x88, 0x25, 0xfa, 0xd1, 0x69, 0xd8, 0xb5, 0xc9, 0x9f, 0xff, 0xed, 0xca, 0xa9, 0x9f, 0x7e, + 0x7d, 0xf6, 0x94, 0xfd, 0x69, 0x1e, 0xe6, 0x92, 0x5a, 0x1d, 0xa2, 0x9e, 0x8c, 0x62, 0xd8, 0xe4, + 0x89, 0xc6, 0xb0, 0xdc, 0xc9, 0xc5, 0xb0, 0xfc, 0x49, 0xc4, 0xb0, 0xb1, 0x63, 0x8b, 0x61, 0xf6, + 0xbf, 0x59, 0x30, 0x13, 0xee, 0xcc, 0x4f, 0x7a, 0xfe, 0xc9, 0x1a, 0x69, 0xdd, 0x3a, 0x7e, 0xad, + 0x7f, 0x08, 0x13, 0xdc, 0xeb, 0xb1, 0xba, 0x4c, 0x1f, 0x7d, 0xee, 0x17, 0xb3, 0x05, 0x4d, 0x45, + 0x6b, 0xe4, 0x4c, 0x6a, 0x00, 0x07, 0x5c, 0xed, 0x47, 0xe1, 0x7a, 0x34, 0x48, 0x65, 0x14, 0xcc, + 0xcf, 0xb7, 0x2c, 0xd9, 0x8f, 0x30, 0x32, 0x0a, 0x7f, 0x14, 0x6b, 0x28, 0xb2, 0x65, 0x38, 0x0f, + 0x12, 0xdb, 0x62, 0x05, 0x74, 0x54, 0x96, 0x7b, 0xa0, 0x20, 0xf6, 0x77, 0xf9, 0xd0, 0x7b, 0x74, + 0xf9, 0xfa, 0x11, 0x80, 0x8a, 0x4c, 0xb4, 0xb1, 0xe1, 0xea, 0xd0, 0x5b, 0x1d, 0xe1, 0x20, 0xd0, + 0xe1, 0xd0, 0xe7, 0xa2, 0x62, 0x6f, 0x98, 0x03, 0x44, 0x00, 0x6c, 0x88, 0x42, 0xbf, 0x0d, 0x25, + 0xa2, 0x5b, 0x26, 0x37, 0x3d, 0xa6, 0x6d, 0x78, 0x7d, 0x14, 0xc9, 0x6b, 0x11, 0x9b, 0x64, 0xd3, + 0x2c, 0x82, 0x60, 0x53, 0xda, 0x12, 0x83, 0xd9, 0xc4, 0x7c, 0x53, 0xa2, 0xef, 0x46, 0x3c, 0xfa, + 0x5e, 0xc8, 0x72, 0x2c, 0xe8, 0x3e, 0x90, 0xd9, 0x6d, 0xe3, 0x30, 0x97, 0x9c, 0xe9, 0xb1, 0x09, + 0x8d, 0x35, 0x9f, 0xcc, 0x78, 0xff, 0x37, 0x39, 0x28, 0x86, 0x1e, 0x9f, 0xa5, 0x4a, 0x55, 0x27, + 0x75, 0xee, 0x88, 0x4a, 0x22, 0x3f, 0x4c, 0x25, 0x31, 0x36, 0xb8, 0x92, 0x08, 0x3a, 0x59, 0x85, + 0xa7, 0x77, 0xb2, 0x8c, 0x4a, 0x62, 0x62, 0xf8, 0x4a, 0x62, 0xf2, 0xe8, 0x4a, 0xc2, 0xfe, 0x3b, + 0x0b, 0x50, 0x7f, 0xd9, 0x98, 0x45, 0x51, 0x24, 0x19, 0x87, 0x87, 0x3c, 0xa5, 0x93, 0xb5, 0xdb, + 0xe0, 0x70, 0x6c, 0x7f, 0x36, 0x0e, 0xb3, 0xb7, 0x9c, 0x91, 0x1b, 0x0e, 0x02, 0x5e, 0x56, 0x9c, + 0x6a, 0x54, 0xe7, 0x48, 0x35, 0xc1, 0x88, 0xa0, 0xcd, 0x7d, 0xbd, 0xbf, 0xd7, 0x34, 0xe9, 0xcb, + 0xd5, 0x74, 0xb4, 0x27, 0x83, 0x41, 0x78, 0x10, 0xeb, 0xa1, 0x8d, 0xe4, 0x3d, 0x98, 0xe6, 0x82, + 0x39, 0x75, 0xa1, 0x5a, 0x1a, 0x7c, 0xb1, 0x24, 0xa3, 0xdc, 0x19, 0x8d, 0x3e, 0x5d, 0x33, 0x81, + 0x38, 0x8e, 0x9b, 0xda, 0x29, 0x19, 0xcb, 0xdc, 0x29, 0x59, 0x85, 0x22, 0x69, 0xb7, 0xbd, 0x8f, + 0xee, 0x91, 0x26, 0xd7, 0xa5, 0x6a, 0x68, 0x35, 0x6b, 0x01, 0x00, 0x47, 0x38, 0xa8, 0x0c, 0xe0, + 0x34, 0x5d, 0x8f, 0x51, 0x49, 0x51, 0x90, 0xe1, 0x76, 0xc6, 0x8f, 0x75, 0x1b, 0xe1, 0x28, 0x36, + 0x30, 0x50, 0x0d, 0xce, 0x38, 0x2e, 0xa7, 0xf5, 0x1e, 0xa3, 0xb5, 0x5d, 0xa7, 0x7b, 0x6f, 0xb3, + 0x26, 0xa3, 0xc4, 0xbe, 0xb4, 0xe6, 0xc9, 0xca, 0x2b, 0x5a, 0xd8, 0x99, 0x8d, 0x34, 0x24, 0x9c, + 0x4e, 0x8b, 0x2e, 0xc2, 0x94, 0xe3, 0xd6, 0xdb, 0xbd, 0x06, 0xdd, 0x22, 0xa2, 0xc5, 0x17, 0x27, + 0xe5, 0x34, 0xe6, 0x0e, 0x0f, 0x56, 0xa6, 0x36, 0x8c, 0x71, 0x1c, 0xc3, 0xf2, 0xa9, 0xe8, 0xc7, + 0x06, 0x55, 0x31, 0xa2, 0xba, 0xf1, 0xb1, 0x49, 0x65, 0x62, 0xa5, 0xf4, 0x92, 0x20, 0x53, 0x2f, + 0xe9, 0x2f, 0xf3, 0x50, 0x50, 0xad, 0x5c, 0x74, 0x29, 0xd1, 0x2f, 0x7d, 0xa5, 0xaf, 0x5f, 0x5a, + 0x4a, 0x6b, 0x7b, 0xdb, 0x50, 0x70, 0x38, 0xef, 0xc5, 0x4f, 0xb7, 0x0d, 0x39, 0x82, 0x35, 0x04, + 0x39, 0x00, 0x24, 0x68, 0xb5, 0x06, 0xa9, 0xcb, 0xa5, 0xac, 0x1d, 0xe1, 0x44, 0x37, 0x38, 0x04, + 0x70, 0x6c, 0x30, 0x97, 0x1d, 0x1e, 0xcf, 0xdd, 0x71, 0x9a, 0xba, 0x0e, 0xbf, 0x6e, 0x64, 0xcd, + 0xd1, 0xbd, 0xdd, 0x87, 0xe1, 0xc5, 0x5e, 0x94, 0x40, 0xc7, 0x10, 0xfc, 0x4c, 0xfa, 0x4e, 0xed, + 0xee, 0xfb, 0x6a, 0x39, 0x55, 0xc9, 0x11, 0x6b, 0xce, 0xbe, 0x0c, 0xaf, 0x27, 0xba, 0x3d, 0x21, + 0x6d, 0xf2, 0x98, 0x64, 0xdc, 0x95, 0x1c, 0xb1, 0xe6, 0x6c, 0x7f, 0x6a, 0xc1, 0xac, 0x52, 0x77, + 0xb5, 0x45, 0xeb, 0xbb, 0x35, 0x41, 0xbb, 0x7e, 0x62, 0xdb, 0xe3, 0x94, 0x27, 0x13, 0xdb, 0x0f, + 0x38, 0xe5, 0x58, 0x42, 0x8c, 0xd5, 0xe7, 0x4e, 0x6a, 0xf5, 0xf6, 0x3f, 0x58, 0x30, 0x2e, 0x33, + 0xc8, 0x2c, 0xa1, 0x2e, 0xde, 0x55, 0xc9, 0x0d, 0xd5, 0x55, 0x39, 0xa2, 0xdf, 0x15, 0x35, 0x74, + 0xc6, 0x9e, 0xd6, 0xd0, 0xb1, 0xbf, 0xb5, 0x60, 0x21, 0xad, 0x49, 0x98, 0x65, 0xfa, 0x6f, 0xc3, + 0x64, 0xb7, 0x4d, 0xc4, 0x8e, 0xc7, 0x3a, 0xc9, 0xdb, 0x80, 0x2d, 0x3d, 0x8e, 0x43, 0x0c, 0xc4, + 0x00, 0x58, 0x50, 0x8d, 0x04, 0xe6, 0x7e, 0x3d, 0xeb, 0xe1, 0x13, 0xef, 0x6e, 0x45, 0xca, 0x0a, + 0x87, 0x38, 0x36, 0xa4, 0xd8, 0x7f, 0x32, 0x0e, 0xf3, 0x92, 0x64, 0xd4, 0xc3, 0x68, 0x94, 0x1d, + 0xea, 0xc2, 0x4b, 0xb2, 0x86, 0xe8, 0x3f, 0xbf, 0xd4, 0xa6, 0x5d, 0xd1, 0xf4, 0x2f, 0x6d, 0xa4, + 0x62, 0x3d, 0x19, 0x08, 0xc1, 0x03, 0xf8, 0xf6, 0x1f, 0x4a, 0xf0, 0xff, 0xef, 0x50, 0x32, 0x8d, + 0x6d, 0xe2, 0x48, 0x63, 0x1b, 0x78, 0x84, 0x4d, 0x3e, 0xc3, 0x11, 0xd6, 0x7f, 0xac, 0x14, 0x33, + 0x1d, 0x2b, 0x7f, 0x95, 0x83, 0x89, 0x2d, 0xe6, 0xc9, 0x66, 0xf3, 0xc9, 0xf7, 0x2d, 0xef, 0xc2, + 0x18, 0xef, 0xd2, 0xba, 0x8e, 0x79, 0xe7, 0x86, 0xf3, 0x34, 0x3d, 0xbd, 0x5a, 0x97, 0xd6, 0x2b, + 0x93, 0x7e, 0x18, 0xf5, 0x7f, 0x61, 0xc9, 0xc8, 0x68, 0xc0, 0xe5, 0xb3, 0x24, 0xfb, 0x01, 0xcb, + 0xa7, 0x37, 0xe0, 0x3e, 0xb3, 0xa0, 0xa4, 0x31, 0x5f, 0xd8, 0x4e, 0x8f, 0x9e, 0xdf, 0x80, 0x4e, + 0xcf, 0x9f, 0x45, 0x2b, 0xf0, 0x95, 0x86, 0x7e, 0x17, 0xe6, 0xbb, 0xcc, 0xeb, 0x78, 0xbe, 0xa7, + 0x6e, 0x79, 0x6d, 0xa7, 0xee, 0xd0, 0xa0, 0x59, 0x78, 0x69, 0x68, 0x79, 0x06, 0xf9, 0x7e, 0xe5, + 0x7b, 0x5a, 0xee, 0xfc, 0x56, 0x92, 0x2f, 0xee, 0x17, 0x65, 0xff, 0xa7, 0x05, 0xd3, 0x31, 0xdd, + 0xa3, 0x3a, 0x40, 0xdd, 0x73, 0x1b, 0x8e, 0x08, 0x2f, 0x64, 0x4b, 0xe7, 0x57, 0x87, 0xd3, 0x6a, + 0x35, 0xa0, 0x8b, 0x8c, 0x2e, 0x1c, 0xe2, 0xd8, 0x60, 0x8b, 0x2e, 0x04, 0x2f, 0x1f, 0xe2, 0xf9, + 0x92, 0x7a, 0xf9, 0xf0, 0xe4, 0x60, 0x65, 0x4a, 0xcf, 0xc9, 0x7c, 0x09, 0x91, 0xe5, 0x95, 0xc0, + 0xdf, 0xe7, 0xa0, 0x18, 0xae, 0xff, 0x39, 0xb8, 0xd1, 0x07, 0x31, 0x37, 0xba, 0x90, 0x71, 0xe7, + 0xa4, 0x23, 0x85, 0x39, 0x89, 0xe1, 0x4c, 0x8f, 0x13, 0xce, 0x94, 0xd5, 0x24, 0x8e, 0x70, 0xa7, + 0x7f, 0x56, 0x9b, 0xaf, 0x70, 0x9f, 0x83, 0x43, 0xdd, 0x8b, 0x3b, 0xd4, 0x6a, 0xc6, 0xd5, 0x0c, + 0x70, 0xa9, 0x9f, 0x59, 0x30, 0x9b, 0x70, 0x02, 0xf4, 0x2a, 0x8c, 0xcb, 0xee, 0x90, 0xb6, 0xaf, + 0x90, 0x50, 0xf7, 0x12, 0x24, 0x0c, 0x6d, 0xc1, 0x02, 0xe9, 0x09, 0x2f, 0xa4, 0xbd, 0xe1, 0x92, + 0xed, 0x36, 0x6d, 0xe8, 0x27, 0x32, 0xbf, 0xa0, 0x69, 0x16, 0xd6, 0x52, 0x70, 0x70, 0x2a, 0xa5, + 0xfd, 0x45, 0x0e, 0x50, 0x38, 0x98, 0xa5, 0xab, 0xfa, 0x18, 0x26, 0x76, 0x54, 0xff, 0xe7, 0xd9, + 0xda, 0xe2, 0x95, 0x92, 0x79, 0x33, 0x10, 0xf0, 0x44, 0x3f, 0x3a, 0x1e, 0x3b, 0x82, 0x7e, 0x1b, + 0x42, 0x0f, 0x01, 0x76, 0x1c, 0xd7, 0xe1, 0xad, 0x11, 0x2f, 0xf0, 0xe4, 0x69, 0x7e, 0x33, 0xe4, + 0x80, 0x0d, 0x6e, 0xf6, 0x27, 0x39, 0xc3, 0x3e, 0x65, 0xb8, 0x1c, 0x6a, 0x5f, 0xdf, 0x8c, 0x2b, + 0xb3, 0xd8, 0x7f, 0x65, 0x62, 0x28, 0x66, 0x6c, 0x8f, 0xb0, 0xa0, 0x7b, 0x7b, 0x39, 0xa3, 0x5a, + 0xee, 0x13, 0xe6, 0xf8, 0x1b, 0x1f, 0x6d, 0xe9, 0x7d, 0xc2, 0x38, 0x96, 0x2c, 0xd1, 0x0f, 0xfd, + 0xa9, 0xd2, 0xb0, 0x66, 0xcb, 0x1c, 0x13, 0x04, 0xed, 0x9a, 0xeb, 0xa3, 0x5d, 0x8e, 0x15, 0x43, + 0xfb, 0x5f, 0x0b, 0x86, 0xc1, 0xeb, 0xa8, 0x7d, 0x07, 0x50, 0x9b, 0x70, 0x71, 0x9b, 0xb8, 0x0d, + 0xdf, 0x3c, 0xe9, 0x0e, 0xa3, 0xbc, 0xa5, 0x33, 0xb4, 0x25, 0xcd, 0x05, 0x6d, 0xf6, 0x61, 0xe0, + 0x14, 0x2a, 0x74, 0x29, 0x1e, 0x9c, 0x57, 0x92, 0xc1, 0x79, 0x26, 0xf2, 0xb6, 0xd1, 0xc2, 0xb3, + 0x69, 0xee, 0xe3, 0x27, 0x60, 0xee, 0xbf, 0x03, 0xf3, 0x3b, 0xc9, 0x2b, 0x34, 0x7d, 0xa1, 0x7e, + 0x79, 0xc4, 0x1b, 0xb8, 0xca, 0x99, 0xc3, 0xe8, 0xde, 0x25, 0x1a, 0xc6, 0xfd, 0x82, 0x90, 0x17, + 0x3c, 0x1d, 0x93, 0xd5, 0xa7, 0xea, 0x61, 0x0c, 0xed, 0x72, 0x89, 0xba, 0x35, 0xf9, 0x68, 0x4c, + 0xb1, 0xc4, 0x31, 0x01, 0x09, 0x17, 0x2c, 0x1c, 0xa7, 0x0b, 0xa2, 0x4b, 0x50, 0xaa, 0xf7, 0x18, + 0xa3, 0xae, 0xf0, 0xa7, 0x23, 0x53, 0xd9, 0x7c, 0xd4, 0x8b, 0xae, 0x46, 0x20, 0x6c, 0xe2, 0xf9, + 0xe6, 0x68, 0xfc, 0xb9, 0x26, 0x04, 0xed, 0x74, 0x85, 0xec, 0x82, 0xe5, 0x23, 0x73, 0xac, 0xf6, + 0x61, 0xe0, 0x14, 0x2a, 0xf4, 0xa1, 0xf4, 0x79, 0x41, 0x65, 0xbd, 0xf2, 0xec, 0x75, 0x79, 0x51, + 0xc7, 0x0b, 0xa1, 0xe2, 0x85, 0xa0, 0xf6, 0x9f, 0xc6, 0xc2, 0xcc, 0x70, 0xdd, 0x82, 0x25, 0xc8, + 0x11, 0x9e, 0x6c, 0x25, 0xaf, 0x71, 0x9c, 0x23, 0x1c, 0xfd, 0x08, 0xc6, 0x19, 0x15, 0x6c, 0x5f, + 0x47, 0xc3, 0x2b, 0x23, 0x78, 0x3e, 0xf6, 0xe9, 0xd5, 0x54, 0xe5, 0x4f, 0xac, 0x38, 0x1a, 0x4d, + 0x8a, 0xfc, 0x89, 0x35, 0x29, 0x2a, 0xc6, 0x19, 0x16, 0xce, 0xc5, 0xaf, 0xac, 0x88, 0xda, 0x10, + 0xa5, 0x96, 0x7c, 0x74, 0xd2, 0xeb, 0x8d, 0xe2, 0x38, 0xc4, 0xb0, 0x19, 0x44, 0xe9, 0x67, 0xf0, + 0x6a, 0x15, 0x3d, 0xd6, 0x49, 0x92, 0x95, 0xe5, 0x2d, 0x65, 0x1f, 0x9b, 0x41, 0xc9, 0x92, 0xfd, + 0x85, 0x05, 0x67, 0x52, 0xb1, 0xc3, 0x28, 0x9f, 0x3b, 0xc1, 0x28, 0x6f, 0x1d, 0x77, 0x94, 0x7f, + 0x68, 0xa8, 0x30, 0x98, 0xc2, 0x71, 0x3d, 0x35, 0xff, 0x79, 0x0e, 0xe6, 0x30, 0xed, 0x7a, 0xb1, + 0x86, 0xc7, 0x56, 0xf0, 0x3a, 0x2d, 0x43, 0x86, 0x90, 0xe8, 0xe0, 0x57, 0x26, 0x62, 0xcf, 0xd2, + 0x7e, 0x08, 0xe3, 0xb2, 0x17, 0xa1, 0x73, 0x9a, 0xcb, 0x19, 0x6e, 0x5c, 0x63, 0x5c, 0xa5, 0x1f, + 0xa8, 0xa6, 0x8e, 0x62, 0xe8, 0x73, 0x96, 0x97, 0xa5, 0xda, 0x0d, 0x2e, 0x67, 0xb8, 0x76, 0xed, + 0xe7, 0x2c, 0x87, 0xb1, 0x62, 0x68, 0x7f, 0x9a, 0x03, 0x95, 0x4d, 0x3c, 0x87, 0xaa, 0xe1, 0xd7, + 0x63, 0x55, 0xc3, 0x90, 0xe9, 0xb0, 0x9c, 0xdc, 0xc0, 0x8a, 0x21, 0x99, 0xe9, 0x9d, 0xcb, 0xc2, + 0xf4, 0xe9, 0xd5, 0xc2, 0x3f, 0x59, 0x50, 0x94, 0x78, 0xcf, 0xa1, 0x52, 0xd8, 0x8a, 0x57, 0x0a, + 0x6f, 0x65, 0x58, 0xc5, 0x80, 0x2a, 0xe1, 0x93, 0xbc, 0x9e, 0x7d, 0x98, 0x47, 0xb6, 0x08, 0x6b, + 0xe8, 0x0c, 0x29, 0xf2, 0x40, 0x7f, 0x10, 0x2b, 0x18, 0xfa, 0x2d, 0x98, 0x63, 0xea, 0xfe, 0x9d, + 0x36, 0x6e, 0x86, 0xe9, 0x4a, 0x3e, 0xf3, 0x05, 0xb9, 0xbe, 0xc4, 0x8f, 0x3a, 0x65, 0x38, 0xc1, + 0x15, 0xf7, 0xc9, 0xf1, 0x53, 0x98, 0x6e, 0x32, 0x96, 0xe9, 0xa3, 0xfd, 0xf2, 0x88, 0x81, 0x53, + 0xa5, 0x30, 0x7d, 0xc3, 0xb8, 0x5f, 0x10, 0x6a, 0xc1, 0x94, 0xf9, 0xb4, 0x47, 0xdb, 0xd2, 0xf9, + 0xec, 0x6f, 0x88, 0xd4, 0x25, 0x8c, 0x39, 0x82, 0x63, 0x9c, 0xed, 0x83, 0x02, 0x94, 0x0c, 0xe3, + 0x4b, 0x74, 0x1f, 0xa6, 0x4f, 0xa6, 0xfb, 0x90, 0x9e, 0x2c, 0x97, 0x46, 0x4a, 0x96, 0xcf, 0xc5, + 0x93, 0xe5, 0xef, 0x27, 0x93, 0x65, 0x90, 0xab, 0x8b, 0x25, 0xca, 0x1c, 0x66, 0x74, 0xd6, 0x18, + 0xbc, 0xd1, 0xca, 0x54, 0x7e, 0xf4, 0xe7, 0xa6, 0xe8, 0xf0, 0x60, 0x25, 0x78, 0x61, 0x11, 0xbc, + 0xcd, 0x4a, 0x88, 0x40, 0xd7, 0x43, 0xa1, 0xb5, 0x5e, 0xa7, 0x43, 0xd8, 0xfe, 0xe2, 0x94, 0x9c, + 0x70, 0xd8, 0x96, 0xbc, 0x19, 0x83, 0xe2, 0x04, 0x36, 0xda, 0x82, 0x82, 0x4a, 0x3a, 0xf5, 0xbb, + 0x9f, 0xb7, 0xb3, 0xe4, 0xb3, 0x2a, 0xcf, 0x50, 0xbf, 0xb1, 0xe6, 0x63, 0xd6, 0x0b, 0xc5, 0x23, + 0xea, 0x85, 0x3b, 0x80, 0xbc, 0x6d, 0x99, 0xd1, 0x34, 0x6e, 0xa9, 0x6f, 0xb2, 0x7c, 0xab, 0x2c, + 0xc4, 0xd3, 0xc9, 0xbb, 0x7d, 0x18, 0x38, 0x85, 0xca, 0xf7, 0x6a, 0x9d, 0x64, 0x86, 0xae, 0xa0, + 0x6b, 0x83, 0xac, 0x89, 0x5a, 0x54, 0x86, 0x2c, 0xf8, 0x5e, 0x5d, 0x4d, 0x70, 0xc5, 0x7d, 0x72, + 0xd0, 0x4f, 0x60, 0xda, 0x37, 0xa1, 0x48, 0x30, 0x3c, 0xa3, 0xe0, 0xf9, 0xc3, 0x83, 0x95, 0xe9, + 0x4d, 0x93, 0x25, 0x8e, 0x4b, 0xb0, 0xff, 0x37, 0x07, 0x31, 0xff, 0x43, 0x3f, 0xb3, 0x60, 0x9e, + 0x24, 0x3e, 0x28, 0x0a, 0xd2, 0x97, 0x5f, 0xcd, 0xf6, 0x95, 0x57, 0xdf, 0xf7, 0x48, 0x51, 0xf3, + 0x31, 0x89, 0xc2, 0x71, 0xbf, 0x50, 0xf4, 0x47, 0x16, 0x9c, 0x26, 0xfd, 0x5f, 0x8c, 0xe9, 0xf3, + 0xf0, 0xea, 0xc8, 0x9f, 0x9c, 0x55, 0x5e, 0x3e, 0x3c, 0x58, 0x49, 0xfb, 0x96, 0x0e, 0xa7, 0x89, + 0x43, 0x3f, 0x86, 0x31, 0xc2, 0x9a, 0x41, 0xa1, 0x9e, 0x5d, 0x6c, 0xf0, 0x21, 0x60, 0x74, 0x20, + 0xaf, 0xb1, 0x26, 0xc7, 0x92, 0xa9, 0xfd, 0x75, 0x1e, 0xe6, 0x92, 0xaf, 0x2a, 0xf5, 0x43, 0x94, + 0xb1, 0xd4, 0x87, 0x28, 0xaf, 0xc2, 0x38, 0xa9, 0x8b, 0xf0, 0x55, 0x48, 0xf4, 0x92, 0xd8, 0x1f, + 0xc4, 0x0a, 0x86, 0x1e, 0x40, 0x91, 0x0b, 0xc2, 0x84, 0x5f, 0xbf, 0xe9, 0x12, 0x3a, 0xf3, 0xab, + 0xe9, 0x5a, 0xc0, 0x00, 0x47, 0xbc, 0xd0, 0x95, 0x78, 0x38, 0xb3, 0x93, 0xe1, 0x6c, 0xde, 0x5c, + 0xcb, 0xa8, 0xe5, 0x7f, 0x07, 0x4a, 0xc6, 0x3e, 0xe8, 0xd3, 0xe5, 0x5a, 0x66, 0xbd, 0x47, 0x66, + 0x37, 0xab, 0xbe, 0x26, 0x8c, 0x20, 0x26, 0xff, 0xa8, 0x3e, 0x96, 0xda, 0x7a, 0xa6, 0xfa, 0x58, + 0xaa, 0xcb, 0xe0, 0x66, 0xcf, 0xc2, 0x74, 0xec, 0x71, 0x94, 0xec, 0x3c, 0x3f, 0x20, 0x8c, 0xb6, + 0xbc, 0x1e, 0xa7, 0x2f, 0x6a, 0xe7, 0x39, 0x9c, 0xe0, 0x71, 0x77, 0x9e, 0x23, 0xc6, 0x47, 0x77, + 0x9e, 0x43, 0xdc, 0x17, 0xb6, 0xf3, 0x1c, 0xce, 0x70, 0x40, 0x4e, 0xf9, 0x3f, 0x39, 0x63, 0x15, + 0xf1, 0xbc, 0x32, 0xf7, 0x94, 0xbc, 0xf2, 0x11, 0x4c, 0x3a, 0xae, 0xa0, 0x6c, 0x8f, 0xb4, 0x75, + 0x8b, 0x60, 0xc8, 0xa5, 0xae, 0xf7, 0x98, 0xce, 0xaa, 0x82, 0xa5, 0x6e, 0x68, 0x3e, 0x38, 0xe4, + 0x88, 0xda, 0x70, 0x26, 0xe8, 0x49, 0x31, 0x4a, 0xa2, 0x9e, 0xb8, 0xbe, 0x57, 0x7e, 0x37, 0xb8, + 0xd4, 0xbc, 0x99, 0x86, 0xf4, 0x64, 0x10, 0x00, 0xa7, 0x33, 0x45, 0x1c, 0xa6, 0xb9, 0x51, 0x50, + 0x05, 0x07, 0xc9, 0x90, 0xfd, 0xbc, 0x64, 0x0d, 0x6a, 0x5c, 0x46, 0x9b, 0x4c, 0x71, 0x5c, 0x86, + 0xfd, 0xef, 0x79, 0x98, 0x4d, 0x58, 0x5a, 0x22, 0x71, 0x2c, 0x3e, 0xcf, 0xc4, 0xb1, 0x30, 0x52, + 0xe2, 0x98, 0x9e, 0xd3, 0x8c, 0x8d, 0x94, 0xd3, 0xbc, 0xa7, 0xf2, 0x0a, 0xbd, 0x73, 0x1b, 0xeb, + 0xfa, 0x99, 0x60, 0xa8, 0xcd, 0x4d, 0x13, 0x88, 0xe3, 0xb8, 0xf2, 0x14, 0x6e, 0xf4, 0x7f, 0x13, + 0xa7, 0x93, 0xa2, 0xab, 0x59, 0x1f, 0x5f, 0x84, 0x0c, 0xd4, 0x29, 0x9c, 0x02, 0xc0, 0x69, 0xe2, + 0x2a, 0x77, 0x3e, 0xff, 0x66, 0xf9, 0xd4, 0x97, 0xdf, 0x2c, 0x9f, 0xfa, 0xea, 0x9b, 0xe5, 0x53, + 0x3f, 0x3d, 0x5c, 0xb6, 0x3e, 0x3f, 0x5c, 0xb6, 0xbe, 0x3c, 0x5c, 0xb6, 0xbe, 0x3a, 0x5c, 0xb6, + 0xfe, 0xeb, 0x70, 0xd9, 0xfa, 0x8b, 0x6f, 0x97, 0x4f, 0x3d, 0x7c, 0x6d, 0x98, 0x7f, 0x7b, 0xf0, + 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xb4, 0x7f, 0x24, 0x05, 0x1d, 0x41, 0x00, 0x00, } func (m *AnalysisRunArgument) Marshal() (dAtA []byte, err error) { @@ -2091,6 +2092,14 @@ func (m *AnalysisTemplateReference) MarshalToSizedBuffer(dAtA []byte) (int, erro _ = i var l int _ = l + i-- + if m.ClusterScope { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 i -= len(m.Name) copy(dAtA[i:], m.Name) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) @@ -5085,6 +5094,7 @@ func (m *AnalysisTemplateReference) Size() (n int) { _ = l l = len(m.Name) n += 1 + l + sovGenerated(uint64(l)) + n += 2 return n } @@ -6242,6 +6252,7 @@ func (this *AnalysisTemplateReference) String() string { } s := strings.Join([]string{`&AnalysisTemplateReference{`, `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `ClusterScope:` + fmt.Sprintf("%v", this.ClusterScope) + `,`, `}`, }, "") return s @@ -7729,6 +7740,26 @@ func (m *AnalysisTemplateReference) Unmarshal(dAtA []byte) error { } m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ClusterScope", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ClusterScope = bool(v != 0) default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/api/v1alpha1/generated.proto b/api/v1alpha1/generated.proto index 08f411a1c..2492372bb 100644 --- a/api/v1alpha1/generated.proto +++ b/api/v1alpha1/generated.proto @@ -55,6 +55,12 @@ message AnalysisTemplateReference { // // +kubebuilder:validation:Required optional string name = 1; + + // ClusterScope determines whether the template is an + // AnalysisTemplate or a ClusterAnalysisTemplate resource + // + // +kubebuilder:validation:Optional + optional bool clusterScope = 2; } // ApprovedStage describes a Stage for which Freight has been (manually) diff --git a/api/v1alpha1/stage_types.go b/api/v1alpha1/stage_types.go index f38e37896..8f085096a 100644 --- a/api/v1alpha1/stage_types.go +++ b/api/v1alpha1/stage_types.go @@ -596,6 +596,11 @@ type AnalysisTemplateReference struct { // // +kubebuilder:validation:Required Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + // ClusterScope determines whether the template is an + // AnalysisTemplate or a ClusterAnalysisTemplate resource + // + // +kubebuilder:validation:Optional + ClusterScope bool `json:"clusterScope" protobuf:"varint,2,opt,name=clusterScope"` } // AnalysisRunMetadata contains optional metadata that should be applied to all diff --git a/charts/kargo/resources/crds/kargo.akuity.io_stages.yaml b/charts/kargo/resources/crds/kargo.akuity.io_stages.yaml index c2d17a876..bf31043f2 100644 --- a/charts/kargo/resources/crds/kargo.akuity.io_stages.yaml +++ b/charts/kargo/resources/crds/kargo.akuity.io_stages.yaml @@ -245,6 +245,11 @@ spec: description: AnalysisTemplateReference is a reference to an AnalysisTemplate. properties: + clusterScope: + description: |- + ClusterScope determines whether the template is an + AnalysisTemplate or a ClusterAnalysisTemplate resource + type: boolean name: description: |- Name is the name of the AnalysisTemplate in the same project/namespace as diff --git a/charts/kargo/templates/api/cluster-role.yaml b/charts/kargo/templates/api/cluster-role.yaml index f1b6b6d25..de0670d83 100644 --- a/charts/kargo/templates/api/cluster-role.yaml +++ b/charts/kargo/templates/api/cluster-role.yaml @@ -113,6 +113,7 @@ rules: - argoproj.io resources: - analysistemplates + - clusteranalysistemplates verbs: - "*" {{- end }} diff --git a/charts/kargo/templates/controller/cluster-roles.yaml b/charts/kargo/templates/controller/cluster-roles.yaml index f482a18cf..c24215bcb 100644 --- a/charts/kargo/templates/controller/cluster-roles.yaml +++ b/charts/kargo/templates/controller/cluster-roles.yaml @@ -127,6 +127,14 @@ rules: - get - list - watch +- apiGroups: + - argoproj.io + resources: + - clusteranalysistemplates + verbs: + - get + - list + - watch - apiGroups: - argoproj.io resources: diff --git a/charts/kargo/templates/users/cluster-roles.yaml b/charts/kargo/templates/users/cluster-roles.yaml index 545ab1ad9..71fcc9afa 100644 --- a/charts/kargo/templates/users/cluster-roles.yaml +++ b/charts/kargo/templates/users/cluster-roles.yaml @@ -74,6 +74,12 @@ rules: - analysistemplates verbs: - "*" # full access to analysistemplates +- apiGroups: + - argoproj.io + resources: + - clusteranalysistemplates + verbs: + - "*" # full access to clusteranalysistemplates {{- end }} --- apiVersion: rbac.authorization.k8s.io/v1 @@ -120,6 +126,7 @@ rules: resources: - analysisruns - analysistemplates + - clusteranalysistemplates verbs: - get - list diff --git a/docs/docs/15-concepts.md b/docs/docs/15-concepts.md index 1348a7b81..b09786b2f 100644 --- a/docs/docs/15-concepts.md +++ b/docs/docs/15-concepts.md @@ -291,11 +291,11 @@ processes that should be executed after a `Promotion` has successfully deployed healthy state. Verification processes are defined through _references_ to one or more -[Argo Rollouts `AnalysisTemplate` resources](https://argoproj.github.io/argo-rollouts/features/analysis/) -that reside in the same `Project`/`Namespace` as the `Stage` resource. +[Argo Rollouts `AnalysisTemplate` or `ClusterAnalysisTemplate` resources](https://argoproj.github.io/argo-rollouts/features/analysis/). +`AnalysisTemplate` resources must reside in the same `Project`/`Namespace` as the `Stage` resource but `ClusterAnalysisTemplate` can be referenced by any `Stage`. :::info -Argo Rollouts `AnalysisTemplate` resources (and the `AnalysisRun` resources that +Argo Rollouts `AnalysisTemplate` and `ClusterAnalysisTemplate` resources (and the `AnalysisRun` resources that are spawned from them) were intentionally built to be re-usable in contexts other than Argo Rollouts. Re-using this resource type to define verification processes means those processes benefit from this rich and battle-tested feature @@ -344,6 +344,23 @@ spec: value: bar ``` +To refer to a `ClusterAnalysisTemplate` that exists across all namespaces, +use the `clusterScope` option. + +```yaml +apiVersion: kargo.akuity.io/v1alpha1 +kind: Stage +metadata: + name: test + namespace: kargo-demo +spec: + # ... + verification: + analysisTemplates: + - name: kargo-demo + clusterScope: true +``` + An `AnalysisTemplate` could be as simple as the following, which merely executes a Kubernetes `Job` that is defined inline: diff --git a/internal/api/delete_clusteranalysistemplate_v1alpha1.go b/internal/api/delete_clusteranalysistemplate_v1alpha1.go new file mode 100644 index 000000000..3377867f2 --- /dev/null +++ b/internal/api/delete_clusteranalysistemplate_v1alpha1.go @@ -0,0 +1,40 @@ +package api + +import ( + "context" + "errors" + "fmt" + + "connectrpc.com/connect" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/akuity/kargo/internal/controller/rollouts/api/v1alpha1" + svcv1alpha1 "github.com/akuity/kargo/pkg/api/service/v1alpha1" +) + +func (s *server) DeleteClusterAnalysisTemplate( + ctx context.Context, + req *connect.Request[svcv1alpha1.DeleteClusterAnalysisTemplateRequest], +) (*connect.Response[svcv1alpha1.DeleteClusterAnalysisTemplateResponse], error) { + if !s.cfg.RolloutsIntegrationEnabled { + return nil, connect.NewError( + connect.CodeUnimplemented, + errors.New("Argo Rollouts integration is not enabled"), + ) + } + + name := req.Msg.GetName() + if err := validateFieldNotEmpty("name", name); err != nil { + return nil, err + } + + if err := s.client.Delete(ctx, &v1alpha1.ClusterAnalysisTemplate{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + }); err != nil { + return nil, fmt.Errorf("delete ClusterAnalysisTemplate: %w", err) + } + + return connect.NewResponse(&svcv1alpha1.DeleteClusterAnalysisTemplateResponse{}), nil +} diff --git a/internal/api/delete_clusteranalysistemplate_v1alpha1_test.go b/internal/api/delete_clusteranalysistemplate_v1alpha1_test.go new file mode 100644 index 000000000..596e54a08 --- /dev/null +++ b/internal/api/delete_clusteranalysistemplate_v1alpha1_test.go @@ -0,0 +1,108 @@ +package api + +import ( + "context" + "fmt" + "testing" + + "connectrpc.com/connect" + "github.com/stretchr/testify/require" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/rest" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/fake" + + "github.com/akuity/kargo/internal/api/config" + "github.com/akuity/kargo/internal/api/kubernetes" + "github.com/akuity/kargo/internal/api/validation" + rollouts "github.com/akuity/kargo/internal/controller/rollouts/api/v1alpha1" + svcv1alpha1 "github.com/akuity/kargo/pkg/api/service/v1alpha1" +) + +func TestDeleteClusterAnalysisTemplate(t *testing.T) { + testCases := map[string]struct { + req *svcv1alpha1.DeleteClusterAnalysisTemplateRequest + rolloutsDisabled bool + errExpected bool + expectedCode connect.Code + }{ + "empty name": { + req: &svcv1alpha1.DeleteClusterAnalysisTemplateRequest{ + Name: "", + }, + errExpected: true, + expectedCode: connect.CodeInvalidArgument, + }, + "existing ClusterAnalysisTemplate": { + req: &svcv1alpha1.DeleteClusterAnalysisTemplateRequest{ + Name: "test", + }, + }, + "non-existing ClusterAnalysisTemplate": { + req: &svcv1alpha1.DeleteClusterAnalysisTemplateRequest{ + Name: "non-existing", + }, + errExpected: true, + expectedCode: connect.CodeUnknown, + }, + "Argo Rollouts integration is not enabled": { + req: &svcv1alpha1.DeleteClusterAnalysisTemplateRequest{ + Name: "test", + }, + rolloutsDisabled: true, + errExpected: true, + expectedCode: connect.CodeUnimplemented, + }, + } + for name, testCase := range testCases { + t.Run(name, func(t *testing.T) { + t.Parallel() + + ctx := context.Background() + + cfg := config.ServerConfigFromEnv() + if testCase.rolloutsDisabled { + cfg.RolloutsIntegrationEnabled = false + } + + client, err := kubernetes.NewClient( + ctx, + &rest.Config{}, + kubernetes.ClientOptions{ + SkipAuthorization: true, + NewInternalClient: func( + _ context.Context, + _ *rest.Config, + scheme *runtime.Scheme, + ) (client.Client, error) { + return fake.NewClientBuilder(). + WithScheme(scheme). + WithObjects( + mustNewObject[rollouts.ClusterAnalysisTemplate]("testdata/clusteranalysistemplate.yaml"), + ). + Build(), nil + }, + }, + ) + require.NoError(t, err) + + svr := &server{ + client: client, + cfg: cfg, + externalValidateProjectFn: validation.ValidateProject, + } + _, err = (svr).DeleteClusterAnalysisTemplate(ctx, connect.NewRequest(testCase.req)) + if testCase.errExpected { + require.Error(t, err) + fmt.Printf("actual: %s, expected: %s", connect.CodeOf(err), testCase.expectedCode) + require.Equal(t, testCase.expectedCode, connect.CodeOf(err)) + return + } + require.NoError(t, err) + + at, err := rollouts.GetClusterAnalysisTemplate(ctx, client, testCase.req.Name) + require.NoError(t, err) + require.Nil(t, at) + }) + } +} diff --git a/internal/api/get_clusteranalysistemplate_v1alpha1.go b/internal/api/get_clusteranalysistemplate_v1alpha1.go new file mode 100644 index 000000000..d82b80867 --- /dev/null +++ b/internal/api/get_clusteranalysistemplate_v1alpha1.go @@ -0,0 +1,79 @@ +package api + +import ( + "context" + "errors" + "fmt" + + "connectrpc.com/connect" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" + "sigs.k8s.io/controller-runtime/pkg/client" + + rolloutsapi "github.com/akuity/kargo/internal/controller/rollouts/api/v1alpha1" + svcv1alpha1 "github.com/akuity/kargo/pkg/api/service/v1alpha1" +) + +func (s *server) GetClusterAnalysisTemplate( + ctx context.Context, + req *connect.Request[svcv1alpha1.GetClusterAnalysisTemplateRequest], +) (*connect.Response[svcv1alpha1.GetClusterAnalysisTemplateResponse], error) { + if !s.cfg.RolloutsIntegrationEnabled { + return nil, connect.NewError( + connect.CodeUnimplemented, + errors.New("Argo Rollouts integration is not enabled"), + ) + } + + name := req.Msg.GetName() + if err := validateFieldNotEmpty("name", name); err != nil { + return nil, err + } + + // Get the ClusterAnalysisTemplate from the Kubernetes API as an unstructured object. + // Using an unstructured object allows us to return the object _as presented + // by the API_ if a raw format is requested. + u := unstructured.Unstructured{ + Object: map[string]any{ + "apiVersion": rolloutsapi.GroupVersion.String(), + "kind": "ClusterAnalysisTemplate", + }, + } + if err := s.client.Get(ctx, types.NamespacedName{ + Name: name, + }, &u); err != nil { + if client.IgnoreNotFound(err) == nil { + err = fmt.Errorf("ClusterAnalysisTemplate %q not found", name) + return nil, connect.NewError(connect.CodeNotFound, err) + } + return nil, err + } + + switch req.Msg.GetFormat() { + case svcv1alpha1.RawFormat_RAW_FORMAT_JSON, svcv1alpha1.RawFormat_RAW_FORMAT_YAML: + _, raw, err := objectOrRaw(&u, req.Msg.GetFormat()) + if err != nil { + return nil, connect.NewError(connect.CodeInternal, err) + } + return connect.NewResponse(&svcv1alpha1.GetClusterAnalysisTemplateResponse{ + Result: &svcv1alpha1.GetClusterAnalysisTemplateResponse_Raw{ + Raw: raw, + }, + }), nil + default: + at := rolloutsapi.ClusterAnalysisTemplate{} + if err := runtime.DefaultUnstructuredConverter.FromUnstructured(u.Object, &at); err != nil { + return nil, connect.NewError(connect.CodeInternal, err) + } + obj, _, err := objectOrRaw(&at, req.Msg.GetFormat()) + if err != nil { + return nil, connect.NewError(connect.CodeInternal, err) + } + return connect.NewResponse(&svcv1alpha1.GetClusterAnalysisTemplateResponse{ + Result: &svcv1alpha1.GetClusterAnalysisTemplateResponse_ClusterAnalysisTemplate{ + ClusterAnalysisTemplate: obj, + }, + }), nil + } +} diff --git a/internal/api/get_clusteranalysistemplate_v1alpha1_test.go b/internal/api/get_clusteranalysistemplate_v1alpha1_test.go new file mode 100644 index 000000000..d0e87eafc --- /dev/null +++ b/internal/api/get_clusteranalysistemplate_v1alpha1_test.go @@ -0,0 +1,194 @@ +package api + +import ( + "context" + "testing" + + "connectrpc.com/connect" + "github.com/stretchr/testify/require" + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/client-go/rest" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/fake" + "sigs.k8s.io/controller-runtime/pkg/client/interceptor" + + "github.com/akuity/kargo/internal/api/config" + "github.com/akuity/kargo/internal/api/kubernetes" + "github.com/akuity/kargo/internal/api/validation" + rollouts "github.com/akuity/kargo/internal/controller/rollouts/api/v1alpha1" + svcv1alpha1 "github.com/akuity/kargo/pkg/api/service/v1alpha1" +) + +func TestGetClusterAnalysisTemplate(t *testing.T) { + testCases := map[string]struct { + req *svcv1alpha1.GetClusterAnalysisTemplateRequest + rolloutsDisabled bool + interceptor interceptor.Funcs + assertions func(*testing.T, *connect.Response[svcv1alpha1.GetClusterAnalysisTemplateResponse], error) + }{ + "empty name": { + req: &svcv1alpha1.GetClusterAnalysisTemplateRequest{ + Name: "", + }, + assertions: func(t *testing.T, c *connect.Response[svcv1alpha1.GetClusterAnalysisTemplateResponse], err error) { + require.Error(t, err) + require.Equal(t, connect.CodeInvalidArgument, connect.CodeOf(err)) + require.Nil(t, c) + }, + }, + "existing ClusterAnalysisTemplate": { + req: &svcv1alpha1.GetClusterAnalysisTemplateRequest{ + Name: "test", + }, + assertions: func(t *testing.T, c *connect.Response[svcv1alpha1.GetClusterAnalysisTemplateResponse], err error) { + require.NoError(t, err) + + require.NotNil(t, c) + require.Nil(t, c.Msg.GetRaw()) + + require.NotNil(t, c.Msg.GetClusterAnalysisTemplate()) + require.Equal(t, "test", c.Msg.GetClusterAnalysisTemplate().Name) + }, + }, + "non-existing ClusterAnalysisTemplate": { + req: &svcv1alpha1.GetClusterAnalysisTemplateRequest{ + Name: "non-existing", + }, + assertions: func(t *testing.T, c *connect.Response[svcv1alpha1.GetClusterAnalysisTemplateResponse], err error) { + require.Error(t, err) + require.Equal(t, connect.CodeNotFound, connect.CodeOf(err)) + require.Nil(t, c) + }, + }, + "error getting ClusterAnalysisTemplate": { + req: &svcv1alpha1.GetClusterAnalysisTemplateRequest{ + Name: "test", + }, + interceptor: interceptor.Funcs{ + // This interceptor will be called when the client.Get method is called. + // It will return an error to simulate a failure in the client.Get method. + Get: func( + _ context.Context, + _ client.WithWatch, + _ client.ObjectKey, + _ client.Object, + _ ...client.GetOption, + ) error { + return apierrors.NewServiceUnavailable("test") + }, + }, + assertions: func(t *testing.T, c *connect.Response[svcv1alpha1.GetClusterAnalysisTemplateResponse], err error) { + require.Error(t, err) + require.Equal(t, connect.CodeUnknown, connect.CodeOf(err)) + require.Nil(t, c) + }, + }, + "Argo Rollouts integration is not enabled": { + req: &svcv1alpha1.GetClusterAnalysisTemplateRequest{ + Name: "test", + }, + rolloutsDisabled: true, + assertions: func(t *testing.T, c *connect.Response[svcv1alpha1.GetClusterAnalysisTemplateResponse], err error) { + require.Error(t, err) + require.Equal(t, connect.CodeUnimplemented, connect.CodeOf(err)) + require.Nil(t, c) + }, + }, + "raw format JSON": { + req: &svcv1alpha1.GetClusterAnalysisTemplateRequest{ + Name: "test", + Format: svcv1alpha1.RawFormat_RAW_FORMAT_JSON, + }, + assertions: func(t *testing.T, c *connect.Response[svcv1alpha1.GetClusterAnalysisTemplateResponse], err error) { + require.NoError(t, err) + + require.NotNil(t, c) + require.Nil(t, c.Msg.GetClusterAnalysisTemplate()) + require.NotNil(t, c.Msg.GetRaw()) + + scheme := runtime.NewScheme() + require.NoError(t, rollouts.AddToScheme(scheme)) + + obj, _, err := serializer.NewCodecFactory(scheme).UniversalDeserializer().Decode( + c.Msg.GetRaw(), + nil, + nil, + ) + require.NoError(t, err) + tObj, ok := obj.(*rollouts.ClusterAnalysisTemplate) + require.True(t, ok) + require.Equal(t, "test", tObj.Name) + }, + }, + "raw format YAML": { + req: &svcv1alpha1.GetClusterAnalysisTemplateRequest{ + Name: "test", + Format: svcv1alpha1.RawFormat_RAW_FORMAT_YAML, + }, + assertions: func(t *testing.T, c *connect.Response[svcv1alpha1.GetClusterAnalysisTemplateResponse], err error) { + require.NoError(t, err) + + require.NotNil(t, c) + require.Nil(t, c.Msg.GetClusterAnalysisTemplate()) + require.NotNil(t, c.Msg.GetRaw()) + + scheme := runtime.NewScheme() + require.NoError(t, rollouts.AddToScheme(scheme)) + + obj, _, err := serializer.NewCodecFactory(scheme).UniversalDeserializer().Decode( + c.Msg.GetRaw(), + nil, + nil, + ) + require.NoError(t, err) + tObj, ok := obj.(*rollouts.ClusterAnalysisTemplate) + require.True(t, ok) + require.Equal(t, "test", tObj.Name) + }, + }, + } + for name, testCase := range testCases { + t.Run(name, func(t *testing.T) { + t.Parallel() + + ctx := context.Background() + + cfg := config.ServerConfigFromEnv() + if testCase.rolloutsDisabled { + cfg.RolloutsIntegrationEnabled = false + } + + client, err := kubernetes.NewClient( + ctx, + &rest.Config{}, + kubernetes.ClientOptions{ + SkipAuthorization: true, + NewInternalClient: func( + _ context.Context, + _ *rest.Config, + scheme *runtime.Scheme, + ) (client.Client, error) { + return fake.NewClientBuilder(). + WithScheme(scheme). + WithObjects( + mustNewObject[rollouts.ClusterAnalysisTemplate]("testdata/clusteranalysistemplate.yaml"), + ). + WithInterceptorFuncs(testCase.interceptor). + Build(), nil + }, + }, + ) + require.NoError(t, err) + + svr := &server{ + client: client, + cfg: cfg, + externalValidateProjectFn: validation.ValidateProject, + } + res, err := (svr).GetClusterAnalysisTemplate(ctx, connect.NewRequest(testCase.req)) + testCase.assertions(t, res, err) + }) + } +} diff --git a/internal/api/list_clusteranalysistemplates_v1alpha1.go b/internal/api/list_clusteranalysistemplates_v1alpha1.go new file mode 100644 index 000000000..71a229851 --- /dev/null +++ b/internal/api/list_clusteranalysistemplates_v1alpha1.go @@ -0,0 +1,44 @@ +package api + +import ( + "context" + "fmt" + "slices" + "strings" + + "connectrpc.com/connect" + + rollouts "github.com/akuity/kargo/internal/controller/rollouts/api/v1alpha1" + svcv1alpha1 "github.com/akuity/kargo/pkg/api/service/v1alpha1" +) + +func (s *server) ListClusterAnalysisTemplates( + ctx context.Context, + _ *connect.Request[svcv1alpha1.ListClusterAnalysisTemplatesRequest], +) (*connect.Response[svcv1alpha1.ListClusterAnalysisTemplatesResponse], error) { + if !s.cfg.RolloutsIntegrationEnabled { + return nil, connect.NewError( + connect.CodeUnimplemented, + fmt.Errorf("Argo Rollouts integration is not enabled"), + ) + } + + var list rollouts.ClusterAnalysisTemplateList + if err := s.client.List(ctx, &list); err != nil { + return nil, fmt.Errorf("list clusteranalysistemplates: %w", err) + } + + // Sort ascending by name + slices.SortFunc(list.Items, func(lhs, rhs rollouts.ClusterAnalysisTemplate) int { + return strings.Compare(lhs.Name, rhs.Name) + }) + + cats := make([]*rollouts.ClusterAnalysisTemplate, len(list.Items)) + for idx := range list.Items { + cats[idx] = &list.Items[idx] + } + + return connect.NewResponse(&svcv1alpha1.ListClusterAnalysisTemplatesResponse{ + ClusterAnalysisTemplates: cats, + }), nil +} diff --git a/internal/api/list_clusteranalysistemplates_v1alpha1_test.go b/internal/api/list_clusteranalysistemplates_v1alpha1_test.go new file mode 100644 index 000000000..f1c96f076 --- /dev/null +++ b/internal/api/list_clusteranalysistemplates_v1alpha1_test.go @@ -0,0 +1,125 @@ +package api + +import ( + "context" + "testing" + + "connectrpc.com/connect" + "github.com/stretchr/testify/require" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/rest" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/fake" + + "github.com/akuity/kargo/internal/api/config" + "github.com/akuity/kargo/internal/api/kubernetes" + "github.com/akuity/kargo/internal/api/validation" + rollouts "github.com/akuity/kargo/internal/controller/rollouts/api/v1alpha1" + svcv1alpha1 "github.com/akuity/kargo/pkg/api/service/v1alpha1" +) + +func TestListClusterAnalysisTemplates(t *testing.T) { + testCases := map[string]struct { + req *svcv1alpha1.ListClusterAnalysisTemplatesRequest + objects []client.Object + rolloutsDisabled bool + assertions func(*testing.T, *connect.Response[svcv1alpha1.ListClusterAnalysisTemplatesResponse], error) + }{ + "existing": { + req: &svcv1alpha1.ListClusterAnalysisTemplatesRequest{}, + objects: []client.Object{ + mustNewObject[rollouts.ClusterAnalysisTemplate]("testdata/clusteranalysistemplate.yaml"), + }, + assertions: func(t *testing.T, r *connect.Response[svcv1alpha1.ListClusterAnalysisTemplatesResponse], err error) { + require.NoError(t, err) + require.NotNil(t, r) + require.Len(t, r.Msg.GetClusterAnalysisTemplates(), 1) + }, + }, + "Argo Rollouts integration is not enabled": { + req: &svcv1alpha1.ListClusterAnalysisTemplatesRequest{}, + rolloutsDisabled: true, + assertions: func(t *testing.T, r *connect.Response[svcv1alpha1.ListClusterAnalysisTemplatesResponse], err error) { + require.Error(t, err) + require.Equal(t, connect.CodeUnimplemented, connect.CodeOf(err)) + require.Nil(t, r) + }, + }, + "orders by name": { + req: &svcv1alpha1.ListClusterAnalysisTemplatesRequest{}, + objects: []client.Object{ + func() client.Object { + obj := mustNewObject[rollouts.ClusterAnalysisTemplate]("testdata/clusteranalysistemplate.yaml") + obj.SetName("z-clusteranalysistemplate") + return obj + }(), + func() client.Object { + obj := mustNewObject[rollouts.ClusterAnalysisTemplate]("testdata/clusteranalysistemplate.yaml") + obj.SetName("a-clusteranalysistemplate") + return obj + }(), + func() client.Object { + obj := mustNewObject[rollouts.ClusterAnalysisTemplate]("testdata/clusteranalysistemplate.yaml") + obj.SetName("m-clusteranalysistemplate") + return obj + }(), + func() client.Object { + obj := mustNewObject[rollouts.ClusterAnalysisTemplate]("testdata/clusteranalysistemplate.yaml") + obj.SetName("0-clusteranalysistemplate") + return obj + }(), + }, + assertions: func(t *testing.T, r *connect.Response[svcv1alpha1.ListClusterAnalysisTemplatesResponse], err error) { + require.NoError(t, err) + require.NotNil(t, r) + require.Len(t, r.Msg.GetClusterAnalysisTemplates(), 4) + + // Check that the analysis templates are ordered by name. + require.Equal(t, "0-clusteranalysistemplate", r.Msg.GetClusterAnalysisTemplates()[0].GetName()) + require.Equal(t, "a-clusteranalysistemplate", r.Msg.GetClusterAnalysisTemplates()[1].GetName()) + require.Equal(t, "m-clusteranalysistemplate", r.Msg.GetClusterAnalysisTemplates()[2].GetName()) + require.Equal(t, "z-clusteranalysistemplate", r.Msg.GetClusterAnalysisTemplates()[3].GetName()) + }, + }, + } + for name, testCase := range testCases { + t.Run(name, func(t *testing.T) { + t.Parallel() + + ctx := context.Background() + + cfg := config.ServerConfigFromEnv() + if testCase.rolloutsDisabled { + cfg.RolloutsIntegrationEnabled = false + } + + client, err := kubernetes.NewClient( + ctx, + &rest.Config{}, + kubernetes.ClientOptions{ + SkipAuthorization: true, + NewInternalClient: func( + _ context.Context, + _ *rest.Config, + scheme *runtime.Scheme, + ) (client.Client, error) { + c := fake.NewClientBuilder().WithScheme(scheme) + if len(testCase.objects) > 0 { + c.WithObjects(testCase.objects...) + } + return c.Build(), nil + }, + }, + ) + require.NoError(t, err) + + svr := &server{ + client: client, + cfg: cfg, + externalValidateProjectFn: validation.ValidateProject, + } + res, err := (svr).ListClusterAnalysisTemplates(ctx, connect.NewRequest(testCase.req)) + testCase.assertions(t, res, err) + }) + } +} diff --git a/internal/api/server.go b/internal/api/server.go index 0a53283f2..f784204f8 100644 --- a/internal/api/server.go +++ b/internal/api/server.go @@ -136,6 +136,12 @@ type server struct { types.NamespacedName, ) (*rollouts.AnalysisTemplate, error) + getClusterAnalysisTemplateFn func( + context.Context, + client.Client, + string, + ) (*rollouts.ClusterAnalysisTemplate, error) + getAnalysisRunFn func( context.Context, client.Client, @@ -184,6 +190,7 @@ func NewServer( s.patchFreightStatusFn = s.patchFreightStatus s.authorizeFn = kubeClient.Authorize s.getAnalysisTemplateFn = rollouts.GetAnalysisTemplate + s.getClusterAnalysisTemplateFn = rollouts.GetClusterAnalysisTemplate s.getAnalysisRunFn = rollouts.GetAnalysisRun return s diff --git a/internal/api/testdata/clusteranalysistemplate.yaml b/internal/api/testdata/clusteranalysistemplate.yaml new file mode 100644 index 000000000..6cb792a14 --- /dev/null +++ b/internal/api/testdata/clusteranalysistemplate.yaml @@ -0,0 +1,19 @@ +apiVersion: argoproj.io/v1alpha1 +kind: ClusterAnalysisTemplate +metadata: + name: test +spec: + metrics: + - name: test + provider: + job: + spec: + backoffLimit: 1 + template: + spec: + containers: + - name: test + image: alpine:latest + command: [sh, -c] + args: ["sleep 180; exit 0"] + restartPolicy: Never diff --git a/internal/controller/rollouts/api/v1alpha1/analysis_helpers.go b/internal/controller/rollouts/api/v1alpha1/analysis_helpers.go index e932847fb..4d8e5f568 100644 --- a/internal/controller/rollouts/api/v1alpha1/analysis_helpers.go +++ b/internal/controller/rollouts/api/v1alpha1/analysis_helpers.go @@ -31,6 +31,34 @@ func GetAnalysisTemplate( return &at, nil } +// GetClusterAnalysisTemplate returns a pointer to the ClusterAnalysisTemplate resource +// specified by the name argument. If no such resource is found, nil +// is returned instead. +func GetClusterAnalysisTemplate( + ctx context.Context, + c client.Client, + name string, +) (*ClusterAnalysisTemplate, error) { + cat := ClusterAnalysisTemplate{} + if err := c.Get( + ctx, + types.NamespacedName{ + Name: name, + }, + &cat, + ); err != nil { + if err = client.IgnoreNotFound(err); err == nil { + return nil, nil + } + return nil, fmt.Errorf( + "error getting ClusterAnalysisTemplate %q: %w", + name, + err, + ) + } + return &cat, nil +} + func GetAnalysisRun( ctx context.Context, c client.Client, diff --git a/internal/controller/rollouts/api/v1alpha1/analysis_helpers_test.go b/internal/controller/rollouts/api/v1alpha1/analysis_helpers_test.go index a4988b8c5..766797f73 100644 --- a/internal/controller/rollouts/api/v1alpha1/analysis_helpers_test.go +++ b/internal/controller/rollouts/api/v1alpha1/analysis_helpers_test.go @@ -63,6 +63,52 @@ func TestGetAnalysisTemplate(t *testing.T) { } } +func TestGetClusterAnalysisTemplate(t *testing.T) { + scheme := k8sruntime.NewScheme() + require.NoError(t, SchemeBuilder.AddToScheme(scheme)) + + testCases := []struct { + name string + client client.Client + assertions func(*testing.T, *ClusterAnalysisTemplate, error) + }{ + { + name: "not found", + client: fake.NewClientBuilder().WithScheme(scheme).Build(), + assertions: func(t *testing.T, template *ClusterAnalysisTemplate, err error) { + require.NoError(t, err) + require.Nil(t, template) + }, + }, + + { + name: "found", + client: fake.NewClientBuilder().WithScheme(scheme).WithObjects( + &ClusterAnalysisTemplate{ + ObjectMeta: metav1.ObjectMeta{ + Name: "fake-template", + }, + }, + ).Build(), + assertions: func(t *testing.T, template *ClusterAnalysisTemplate, err error) { + require.NoError(t, err) + require.Equal(t, "fake-template", template.Name) + }, + }, + } + + for _, testCase := range testCases { + t.Run(testCase.name, func(t *testing.T) { + template, err := GetClusterAnalysisTemplate( + context.Background(), + testCase.client, + "fake-template", + ) + testCase.assertions(t, template, err) + }) + } +} + func TestGetAnalysisRun(t *testing.T) { scheme := k8sruntime.NewScheme() require.NoError(t, SchemeBuilder.AddToScheme(scheme)) diff --git a/internal/controller/rollouts/api/v1alpha1/analysis_types.go b/internal/controller/rollouts/api/v1alpha1/analysis_types.go index ee2acd0f4..492b8b9db 100644 --- a/internal/controller/rollouts/api/v1alpha1/analysis_types.go +++ b/internal/controller/rollouts/api/v1alpha1/analysis_types.go @@ -25,6 +25,22 @@ type AnalysisTemplateList struct { Items []AnalysisTemplate `json:"items" protobuf:"bytes,2,rep,name=items"` } +//+kubebuilder:object:root=true + +type ClusterAnalysisTemplate struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + Spec AnalysisTemplateSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` +} + +//+kubebuilder:object:root=true + +type ClusterAnalysisTemplateList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata" protobuf:"bytes,1,opt,name=metadata"` + Items []ClusterAnalysisTemplate `json:"items" protobuf:"bytes,2,rep,name=items"` +} + type AnalysisTemplateSpec struct { Metrics []Metric `json:"metrics" protobuf:"bytes,1,rep,name=metrics"` Args []Argument `json:"args,omitempty" protobuf:"bytes,2,rep,name=args"` diff --git a/internal/controller/rollouts/api/v1alpha1/generated.pb.go b/internal/controller/rollouts/api/v1alpha1/generated.pb.go index cbae1ea08..eff9961e2 100644 --- a/internal/controller/rollouts/api/v1alpha1/generated.pb.go +++ b/internal/controller/rollouts/api/v1alpha1/generated.pb.go @@ -424,10 +424,66 @@ func (m *CloudWatchMetricStatMetricDimension) XXX_DiscardUnknown() { var xxx_messageInfo_CloudWatchMetricStatMetricDimension proto.InternalMessageInfo +func (m *ClusterAnalysisTemplate) Reset() { *m = ClusterAnalysisTemplate{} } +func (*ClusterAnalysisTemplate) ProtoMessage() {} +func (*ClusterAnalysisTemplate) Descriptor() ([]byte, []int) { + return fileDescriptor_c5bdcafc2831c0b4, []int{14} +} +func (m *ClusterAnalysisTemplate) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterAnalysisTemplate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterAnalysisTemplate) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterAnalysisTemplate.Merge(m, src) +} +func (m *ClusterAnalysisTemplate) XXX_Size() int { + return m.Size() +} +func (m *ClusterAnalysisTemplate) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterAnalysisTemplate.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterAnalysisTemplate proto.InternalMessageInfo + +func (m *ClusterAnalysisTemplateList) Reset() { *m = ClusterAnalysisTemplateList{} } +func (*ClusterAnalysisTemplateList) ProtoMessage() {} +func (*ClusterAnalysisTemplateList) Descriptor() ([]byte, []int) { + return fileDescriptor_c5bdcafc2831c0b4, []int{15} +} +func (m *ClusterAnalysisTemplateList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterAnalysisTemplateList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterAnalysisTemplateList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterAnalysisTemplateList.Merge(m, src) +} +func (m *ClusterAnalysisTemplateList) XXX_Size() int { + return m.Size() +} +func (m *ClusterAnalysisTemplateList) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterAnalysisTemplateList.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterAnalysisTemplateList proto.InternalMessageInfo + func (m *DatadogMetric) Reset() { *m = DatadogMetric{} } func (*DatadogMetric) ProtoMessage() {} func (*DatadogMetric) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{14} + return fileDescriptor_c5bdcafc2831c0b4, []int{16} } func (m *DatadogMetric) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -455,7 +511,7 @@ var xxx_messageInfo_DatadogMetric proto.InternalMessageInfo func (m *DryRun) Reset() { *m = DryRun{} } func (*DryRun) ProtoMessage() {} func (*DryRun) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{15} + return fileDescriptor_c5bdcafc2831c0b4, []int{17} } func (m *DryRun) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -483,7 +539,7 @@ var xxx_messageInfo_DryRun proto.InternalMessageInfo func (m *FieldRef) Reset() { *m = FieldRef{} } func (*FieldRef) ProtoMessage() {} func (*FieldRef) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{16} + return fileDescriptor_c5bdcafc2831c0b4, []int{18} } func (m *FieldRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -511,7 +567,7 @@ var xxx_messageInfo_FieldRef proto.InternalMessageInfo func (m *GraphiteMetric) Reset() { *m = GraphiteMetric{} } func (*GraphiteMetric) ProtoMessage() {} func (*GraphiteMetric) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{17} + return fileDescriptor_c5bdcafc2831c0b4, []int{19} } func (m *GraphiteMetric) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -539,7 +595,7 @@ var xxx_messageInfo_GraphiteMetric proto.InternalMessageInfo func (m *InfluxdbMetric) Reset() { *m = InfluxdbMetric{} } func (*InfluxdbMetric) ProtoMessage() {} func (*InfluxdbMetric) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{18} + return fileDescriptor_c5bdcafc2831c0b4, []int{20} } func (m *InfluxdbMetric) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -567,7 +623,7 @@ var xxx_messageInfo_InfluxdbMetric proto.InternalMessageInfo func (m *JobMetric) Reset() { *m = JobMetric{} } func (*JobMetric) ProtoMessage() {} func (*JobMetric) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{19} + return fileDescriptor_c5bdcafc2831c0b4, []int{21} } func (m *JobMetric) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -595,7 +651,7 @@ var xxx_messageInfo_JobMetric proto.InternalMessageInfo func (m *KayentaMetric) Reset() { *m = KayentaMetric{} } func (*KayentaMetric) ProtoMessage() {} func (*KayentaMetric) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{20} + return fileDescriptor_c5bdcafc2831c0b4, []int{22} } func (m *KayentaMetric) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -623,7 +679,7 @@ var xxx_messageInfo_KayentaMetric proto.InternalMessageInfo func (m *KayentaScope) Reset() { *m = KayentaScope{} } func (*KayentaScope) ProtoMessage() {} func (*KayentaScope) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{21} + return fileDescriptor_c5bdcafc2831c0b4, []int{23} } func (m *KayentaScope) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -651,7 +707,7 @@ var xxx_messageInfo_KayentaScope proto.InternalMessageInfo func (m *KayentaThreshold) Reset() { *m = KayentaThreshold{} } func (*KayentaThreshold) ProtoMessage() {} func (*KayentaThreshold) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{22} + return fileDescriptor_c5bdcafc2831c0b4, []int{24} } func (m *KayentaThreshold) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -679,7 +735,7 @@ var xxx_messageInfo_KayentaThreshold proto.InternalMessageInfo func (m *Measurement) Reset() { *m = Measurement{} } func (*Measurement) ProtoMessage() {} func (*Measurement) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{23} + return fileDescriptor_c5bdcafc2831c0b4, []int{25} } func (m *Measurement) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -707,7 +763,7 @@ var xxx_messageInfo_Measurement proto.InternalMessageInfo func (m *MeasurementRetention) Reset() { *m = MeasurementRetention{} } func (*MeasurementRetention) ProtoMessage() {} func (*MeasurementRetention) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{24} + return fileDescriptor_c5bdcafc2831c0b4, []int{26} } func (m *MeasurementRetention) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -735,7 +791,7 @@ var xxx_messageInfo_MeasurementRetention proto.InternalMessageInfo func (m *Metric) Reset() { *m = Metric{} } func (*Metric) ProtoMessage() {} func (*Metric) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{25} + return fileDescriptor_c5bdcafc2831c0b4, []int{27} } func (m *Metric) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -763,7 +819,7 @@ var xxx_messageInfo_Metric proto.InternalMessageInfo func (m *MetricProvider) Reset() { *m = MetricProvider{} } func (*MetricProvider) ProtoMessage() {} func (*MetricProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{26} + return fileDescriptor_c5bdcafc2831c0b4, []int{28} } func (m *MetricProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -791,7 +847,7 @@ var xxx_messageInfo_MetricProvider proto.InternalMessageInfo func (m *MetricResult) Reset() { *m = MetricResult{} } func (*MetricResult) ProtoMessage() {} func (*MetricResult) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{27} + return fileDescriptor_c5bdcafc2831c0b4, []int{29} } func (m *MetricResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -819,7 +875,7 @@ var xxx_messageInfo_MetricResult proto.InternalMessageInfo func (m *NewRelicMetric) Reset() { *m = NewRelicMetric{} } func (*NewRelicMetric) ProtoMessage() {} func (*NewRelicMetric) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{28} + return fileDescriptor_c5bdcafc2831c0b4, []int{30} } func (m *NewRelicMetric) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -847,7 +903,7 @@ var xxx_messageInfo_NewRelicMetric proto.InternalMessageInfo func (m *OAuth2Config) Reset() { *m = OAuth2Config{} } func (*OAuth2Config) ProtoMessage() {} func (*OAuth2Config) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{29} + return fileDescriptor_c5bdcafc2831c0b4, []int{31} } func (m *OAuth2Config) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -875,7 +931,7 @@ var xxx_messageInfo_OAuth2Config proto.InternalMessageInfo func (m *PrometheusMetric) Reset() { *m = PrometheusMetric{} } func (*PrometheusMetric) ProtoMessage() {} func (*PrometheusMetric) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{30} + return fileDescriptor_c5bdcafc2831c0b4, []int{32} } func (m *PrometheusMetric) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -903,7 +959,7 @@ var xxx_messageInfo_PrometheusMetric proto.InternalMessageInfo func (m *RunSummary) Reset() { *m = RunSummary{} } func (*RunSummary) ProtoMessage() {} func (*RunSummary) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{31} + return fileDescriptor_c5bdcafc2831c0b4, []int{33} } func (m *RunSummary) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -931,7 +987,7 @@ var xxx_messageInfo_RunSummary proto.InternalMessageInfo func (m *ScopeDetail) Reset() { *m = ScopeDetail{} } func (*ScopeDetail) ProtoMessage() {} func (*ScopeDetail) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{32} + return fileDescriptor_c5bdcafc2831c0b4, []int{34} } func (m *ScopeDetail) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -959,7 +1015,7 @@ var xxx_messageInfo_ScopeDetail proto.InternalMessageInfo func (m *SecretKeyRef) Reset() { *m = SecretKeyRef{} } func (*SecretKeyRef) ProtoMessage() {} func (*SecretKeyRef) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{33} + return fileDescriptor_c5bdcafc2831c0b4, []int{35} } func (m *SecretKeyRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -987,7 +1043,7 @@ var xxx_messageInfo_SecretKeyRef proto.InternalMessageInfo func (m *Sigv4Config) Reset() { *m = Sigv4Config{} } func (*Sigv4Config) ProtoMessage() {} func (*Sigv4Config) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{34} + return fileDescriptor_c5bdcafc2831c0b4, []int{36} } func (m *Sigv4Config) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1015,7 +1071,7 @@ var xxx_messageInfo_Sigv4Config proto.InternalMessageInfo func (m *SkyWalkingMetric) Reset() { *m = SkyWalkingMetric{} } func (*SkyWalkingMetric) ProtoMessage() {} func (*SkyWalkingMetric) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{35} + return fileDescriptor_c5bdcafc2831c0b4, []int{37} } func (m *SkyWalkingMetric) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1043,7 +1099,7 @@ var xxx_messageInfo_SkyWalkingMetric proto.InternalMessageInfo func (m *ValueFrom) Reset() { *m = ValueFrom{} } func (*ValueFrom) ProtoMessage() {} func (*ValueFrom) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{36} + return fileDescriptor_c5bdcafc2831c0b4, []int{38} } func (m *ValueFrom) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1071,7 +1127,7 @@ var xxx_messageInfo_ValueFrom proto.InternalMessageInfo func (m *WavefrontMetric) Reset() { *m = WavefrontMetric{} } func (*WavefrontMetric) ProtoMessage() {} func (*WavefrontMetric) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{37} + return fileDescriptor_c5bdcafc2831c0b4, []int{39} } func (m *WavefrontMetric) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1099,7 +1155,7 @@ var xxx_messageInfo_WavefrontMetric proto.InternalMessageInfo func (m *WebMetric) Reset() { *m = WebMetric{} } func (*WebMetric) ProtoMessage() {} func (*WebMetric) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{38} + return fileDescriptor_c5bdcafc2831c0b4, []int{40} } func (m *WebMetric) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1127,7 +1183,7 @@ var xxx_messageInfo_WebMetric proto.InternalMessageInfo func (m *WebMetricHeader) Reset() { *m = WebMetricHeader{} } func (*WebMetricHeader) ProtoMessage() {} func (*WebMetricHeader) Descriptor() ([]byte, []int) { - return fileDescriptor_c5bdcafc2831c0b4, []int{39} + return fileDescriptor_c5bdcafc2831c0b4, []int{41} } func (m *WebMetricHeader) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1167,6 +1223,8 @@ func init() { proto.RegisterType((*CloudWatchMetricStat)(nil), "github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.CloudWatchMetricStat") proto.RegisterType((*CloudWatchMetricStatMetric)(nil), "github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.CloudWatchMetricStatMetric") proto.RegisterType((*CloudWatchMetricStatMetricDimension)(nil), "github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.CloudWatchMetricStatMetricDimension") + proto.RegisterType((*ClusterAnalysisTemplate)(nil), "github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.ClusterAnalysisTemplate") + proto.RegisterType((*ClusterAnalysisTemplateList)(nil), "github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.ClusterAnalysisTemplateList") proto.RegisterType((*DatadogMetric)(nil), "github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.DatadogMetric") proto.RegisterMapType((map[string]string)(nil), "github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.DatadogMetric.QueriesEntry") proto.RegisterType((*DryRun)(nil), "github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.DryRun") @@ -1204,212 +1262,215 @@ func init() { } var fileDescriptor_c5bdcafc2831c0b4 = []byte{ - // 3278 bytes of a gzipped FileDescriptorProto + // 3322 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5b, 0x4d, 0x6c, 0x24, 0x47, - 0xf5, 0xdf, 0x9e, 0x2f, 0xcf, 0x3c, 0x8f, 0xbd, 0xde, 0xfa, 0xef, 0xfe, 0x99, 0x58, 0x89, 0xbd, - 0xf4, 0x8a, 0x68, 0x13, 0xc2, 0x0c, 0x59, 0x02, 0xca, 0x07, 0x8a, 0xe4, 0xb1, 0xd7, 0xe0, 0xcd, - 0x7e, 0x78, 0x6b, 0x9c, 0x18, 0x45, 0x01, 0xa5, 0x3c, 0x53, 0x33, 0xd3, 0x71, 0x4f, 0xf7, 0xa4, - 0xbb, 0xda, 0xde, 0x11, 0xa0, 0x10, 0x41, 0x20, 0x4a, 0x38, 0x90, 0x1b, 0xda, 0x1b, 0x48, 0x1c, - 0x10, 0xe2, 0xc8, 0x0d, 0x24, 0x4e, 0x68, 0xc5, 0x85, 0x1c, 0x73, 0x32, 0xc4, 0xe1, 0x00, 0x12, - 0x82, 0x33, 0x2b, 0x84, 0x50, 0x7d, 0x75, 0x57, 0xcf, 0xd8, 0x59, 0x7b, 0xd3, 0x4e, 0x90, 0x38, - 0xad, 0xe7, 0xd5, 0xab, 0xf7, 0x7b, 0xf5, 0xaa, 0xea, 0x7d, 0x55, 0x2f, 0xdc, 0xec, 0x39, 0xac, - 0x1f, 0x6d, 0xd5, 0xdb, 0xfe, 0xa0, 0x41, 0xb6, 0x23, 0x87, 0x8d, 0x1a, 0xdb, 0x24, 0xe8, 0xf9, - 0x0d, 0xc7, 0x63, 0x34, 0xf0, 0x88, 0xdb, 0x68, 0xfb, 0x1e, 0x0b, 0x7c, 0xd7, 0xa5, 0x41, 0x83, - 0xff, 0xe3, 0x47, 0x2c, 0x6c, 0x90, 0xa1, 0xd3, 0xd8, 0x79, 0x9c, 0xb8, 0xc3, 0x3e, 0x79, 0xbc, - 0xd1, 0xa3, 0x1e, 0x0d, 0x08, 0xa3, 0x9d, 0xfa, 0x30, 0xf0, 0x99, 0x8f, 0x96, 0x12, 0x91, 0x75, - 0x29, 0xb2, 0x2e, 0x44, 0xd6, 0xb5, 0xc8, 0x7a, 0x22, 0xb2, 0xae, 0x45, 0xd6, 0xc9, 0xd0, 0xa9, - 0x6b, 0x91, 0xf3, 0x9f, 0x33, 0xb4, 0xea, 0xf9, 0x3d, 0xbf, 0x21, 0x24, 0x6f, 0x45, 0x5d, 0xf1, - 0x4b, 0xfc, 0x10, 0x7f, 0x49, 0xc4, 0xf9, 0x0b, 0xdb, 0x4f, 0x86, 0x75, 0xc7, 0x17, 0x6a, 0x6d, - 0x11, 0xd6, 0xee, 0x37, 0x76, 0x26, 0xd4, 0x9a, 0x7f, 0x22, 0x61, 0x1a, 0x90, 0x76, 0xdf, 0xf1, - 0x68, 0x30, 0x6a, 0x0c, 0xb7, 0x7b, 0x9c, 0x10, 0x36, 0x06, 0x94, 0x91, 0x83, 0x66, 0x35, 0x0e, - 0x9b, 0x15, 0x44, 0x1e, 0x73, 0x06, 0x74, 0x62, 0xc2, 0x97, 0xee, 0x35, 0x21, 0x6c, 0xf7, 0xe9, - 0x80, 0x4c, 0xcc, 0xfb, 0xc2, 0x61, 0xf3, 0x22, 0xe6, 0xb8, 0x7c, 0x37, 0x42, 0x16, 0x8c, 0x4f, - 0xb2, 0x3f, 0xc8, 0xc1, 0xf4, 0x92, 0x47, 0xdc, 0x51, 0xe8, 0x84, 0x38, 0xf2, 0xd0, 0xcb, 0x50, - 0xe6, 0x0b, 0xe9, 0x10, 0x46, 0x6a, 0xd6, 0x79, 0xeb, 0xe2, 0xf4, 0xa5, 0xcf, 0xd7, 0xa5, 0xdc, - 0xba, 0x29, 0xb7, 0x3e, 0xdc, 0xee, 0x71, 0x42, 0x58, 0xe7, 0xdc, 0xf5, 0x9d, 0xc7, 0xeb, 0x37, - 0xb6, 0x5e, 0xa1, 0x6d, 0x76, 0x8d, 0x32, 0xd2, 0x44, 0x77, 0xf6, 0x16, 0x4f, 0xed, 0xef, 0x2d, - 0x42, 0x42, 0xc3, 0xb1, 0x54, 0xc4, 0xa0, 0x10, 0x0e, 0x69, 0xbb, 0x96, 0x13, 0xd2, 0x71, 0xfd, - 0x23, 0xef, 0x75, 0xdd, 0xd0, 0xbf, 0x35, 0xa4, 0xed, 0x66, 0x55, 0xe1, 0x17, 0xf8, 0x2f, 0x2c, - 0xd0, 0xd0, 0xb7, 0xa0, 0x14, 0x32, 0xc2, 0xa2, 0xb0, 0x96, 0x17, 0xb8, 0x1b, 0x19, 0xe3, 0x0a, - 0xd9, 0xcd, 0x59, 0x85, 0x5c, 0x92, 0xbf, 0xb1, 0xc2, 0xb4, 0xff, 0x6c, 0xc1, 0x69, 0x83, 0xfb, - 0xaa, 0x13, 0x32, 0xf4, 0xd2, 0x84, 0xa5, 0xeb, 0x47, 0xb3, 0x34, 0x9f, 0x2d, 0xec, 0x3c, 0xa7, - 0xd0, 0xca, 0x9a, 0x62, 0x58, 0x39, 0x84, 0xa2, 0xc3, 0xe8, 0x20, 0xac, 0xe5, 0xce, 0xe7, 0x2f, - 0x4e, 0x5f, 0xba, 0x9e, 0xed, 0x72, 0x9b, 0x33, 0x0a, 0xba, 0xb8, 0xc6, 0x41, 0xb0, 0xc4, 0xb2, - 0x7f, 0x57, 0x48, 0x2d, 0x93, 0x9b, 0x1f, 0x31, 0x98, 0x1a, 0x50, 0x16, 0x38, 0xed, 0xb0, 0x66, - 0x09, 0x55, 0xd6, 0x32, 0x50, 0xe5, 0x9a, 0x90, 0xd8, 0x3c, 0xad, 0xb4, 0x98, 0x92, 0xbf, 0x43, - 0xac, 0xa1, 0xd0, 0x00, 0x0a, 0x24, 0xe8, 0xe9, 0xd5, 0x3f, 0x97, 0xc5, 0xea, 0x83, 0x5e, 0x34, - 0xa0, 0x1e, 0x4b, 0x4e, 0xd7, 0x52, 0xd0, 0x0b, 0xb1, 0x80, 0x41, 0x0d, 0xa8, 0x30, 0x1a, 0x0c, - 0x1c, 0x8f, 0x30, 0x2a, 0x0e, 0x58, 0xb9, 0x79, 0x46, 0xb1, 0x55, 0x36, 0xf4, 0x00, 0x4e, 0x78, - 0xd0, 0xab, 0x50, 0xea, 0x04, 0x23, 0x1c, 0x79, 0xb5, 0x42, 0x66, 0x46, 0x59, 0x11, 0x02, 0x93, - 0x33, 0x28, 0x7f, 0x63, 0x05, 0x84, 0x7e, 0x6e, 0xc1, 0xd9, 0x01, 0x25, 0x61, 0x14, 0x50, 0xbe, - 0x0e, 0x4c, 0x19, 0xf5, 0x98, 0xe3, 0x7b, 0xb5, 0xa2, 0xd0, 0x60, 0x33, 0x93, 0x6d, 0x99, 0x14, - 0xdf, 0x7c, 0x50, 0xe9, 0x73, 0xf6, 0xa0, 0x51, 0x7c, 0xa0, 0x4a, 0xf6, 0x5f, 0x0b, 0x70, 0x66, - 0xe2, 0x76, 0xa1, 0x27, 0xa0, 0x38, 0xec, 0x93, 0x90, 0x8a, 0xeb, 0x52, 0x69, 0x2e, 0xe8, 0x33, - 0xb8, 0xce, 0x89, 0x77, 0xf7, 0x16, 0x67, 0xf4, 0x14, 0x41, 0xc0, 0x92, 0x19, 0x3d, 0xc2, 0x0f, - 0x60, 0x18, 0x92, 0x1e, 0x15, 0x2e, 0xa7, 0x62, 0x9e, 0x1a, 0x41, 0xc6, 0x7a, 0x1c, 0xfd, 0xd0, - 0x82, 0x19, 0x79, 0x82, 0x30, 0x0d, 0x23, 0x97, 0x71, 0x67, 0xc1, 0x6d, 0x73, 0x23, 0xb3, 0x23, - 0x2b, 0xe5, 0x36, 0xcf, 0x29, 0x15, 0x66, 0x4c, 0x6a, 0x88, 0xd3, 0xe0, 0x68, 0x13, 0x2a, 0x21, - 0x23, 0x01, 0xa3, 0x9d, 0x25, 0x56, 0x2b, 0x08, 0x17, 0xf1, 0xe8, 0xd1, 0x5c, 0xc4, 0x86, 0x33, - 0xa0, 0xcd, 0x19, 0x7e, 0xfa, 0x5a, 0x5a, 0x00, 0x4e, 0x64, 0xa1, 0xd7, 0x2d, 0x80, 0x20, 0xf2, - 0x5a, 0xd1, 0x60, 0x40, 0x82, 0x51, 0xad, 0x28, 0x44, 0x5f, 0xcb, 0x60, 0x91, 0x38, 0x16, 0x9a, - 0x04, 0x81, 0x84, 0x86, 0x0d, 0x50, 0xf4, 0x7d, 0x0b, 0x66, 0xe4, 0xc9, 0xd4, 0x6a, 0x94, 0x4e, - 0x42, 0x8d, 0x33, 0xdc, 0xca, 0x2b, 0x26, 0x0e, 0x4e, 0xc3, 0xda, 0xff, 0xb0, 0x60, 0x4e, 0x1f, - 0x9c, 0x0d, 0x3a, 0x18, 0xba, 0xfc, 0x7e, 0x9e, 0x7c, 0x18, 0x1c, 0xa5, 0xc2, 0xe0, 0x66, 0x86, - 0xfe, 0x59, 0x2f, 0xe2, 0xb0, 0x58, 0x68, 0xff, 0xdd, 0x82, 0xb3, 0xe3, 0xcc, 0x1f, 0x43, 0x48, - 0xba, 0x95, 0x0e, 0x49, 0xad, 0x13, 0x58, 0xf2, 0x21, 0x71, 0xe9, 0x76, 0x61, 0x72, 0xc1, 0xff, - 0x3b, 0xc1, 0x29, 0x89, 0x35, 0xf9, 0x4f, 0x3c, 0xd6, 0x14, 0xfe, 0xfb, 0x62, 0xcd, 0x1d, 0x0b, - 0xca, 0xda, 0x7e, 0xe8, 0x3c, 0x14, 0x3c, 0x32, 0xd0, 0x11, 0x26, 0xb6, 0xe6, 0x75, 0x32, 0xa0, - 0x58, 0x8c, 0xa0, 0x45, 0x28, 0xee, 0x10, 0x37, 0xd2, 0xc1, 0xa4, 0xc2, 0x0f, 0xdb, 0x0b, 0x9c, - 0x80, 0x25, 0x1d, 0x8d, 0xa0, 0x22, 0xfe, 0x58, 0x0d, 0xfc, 0x81, 0x4a, 0x36, 0xaf, 0x66, 0xb0, - 0xde, 0x17, 0xb4, 0x4c, 0xe9, 0xd7, 0xe3, 0x9f, 0x38, 0x41, 0xb3, 0xff, 0x6d, 0xc1, 0xec, 0x52, - 0xc4, 0xfa, 0x7c, 0x65, 0x6d, 0xc2, 0x57, 0xc7, 0xf3, 0xc0, 0xd0, 0xe9, 0xed, 0x3c, 0xa1, 0xee, - 0x73, 0x16, 0x79, 0x60, 0x8b, 0xcb, 0x5b, 0xf6, 0xbd, 0xae, 0xd3, 0x4b, 0xee, 0x9b, 0x20, 0x62, - 0x89, 0x85, 0x76, 0xa1, 0xe4, 0x93, 0x88, 0xf5, 0x2f, 0x29, 0xef, 0x96, 0x45, 0xfc, 0xbc, 0xc1, - 0x17, 0x76, 0x49, 0xc1, 0xc6, 0xe7, 0x4e, 0x52, 0xb1, 0x82, 0xb3, 0xef, 0x5a, 0x30, 0xb7, 0xec, - 0xfa, 0x51, 0x67, 0x93, 0xd7, 0x70, 0xf2, 0xe2, 0xa1, 0x67, 0xa1, 0x2c, 0x60, 0x76, 0x88, 0xab, - 0xf6, 0xd5, 0xd6, 0x5e, 0x6a, 0x4d, 0xd1, 0xef, 0xee, 0x2d, 0xce, 0xae, 0x44, 0x81, 0x30, 0x59, - 0x8b, 0x05, 0x8e, 0xd7, 0xc3, 0xf1, 0x1c, 0xf4, 0x33, 0x0b, 0xce, 0xc8, 0xab, 0xbb, 0x42, 0x18, - 0xb9, 0x19, 0xd1, 0xc0, 0xa1, 0xfa, 0xf2, 0xbe, 0x94, 0xc1, 0xca, 0xc6, 0x15, 0xd6, 0x28, 0xa3, - 0xe6, 0x03, 0x4a, 0xcf, 0x33, 0xd7, 0xc6, 0xe1, 0xf1, 0xa4, 0x46, 0xf6, 0x8f, 0xf3, 0xf0, 0xc0, - 0xa1, 0xb2, 0xd0, 0x3c, 0xe4, 0x9c, 0x8e, 0x5a, 0x3f, 0x28, 0xb9, 0xb9, 0xb5, 0x0e, 0xce, 0x39, - 0x1d, 0x54, 0x07, 0xa0, 0xb7, 0x86, 0x01, 0x0d, 0x43, 0x7e, 0x47, 0xe5, 0xc1, 0x9e, 0xe5, 0x91, - 0xeb, 0x72, 0x4c, 0xc5, 0x06, 0x07, 0xbf, 0x03, 0x2e, 0xd9, 0xa2, 0xae, 0x38, 0xde, 0xea, 0x0e, - 0x5c, 0xe5, 0x04, 0x2c, 0xe9, 0xe8, 0x07, 0x16, 0x80, 0x54, 0x90, 0xa7, 0x6e, 0x2a, 0x77, 0xd9, - 0x3c, 0x01, 0x5b, 0x71, 0xf1, 0x52, 0xd5, 0xe4, 0x37, 0x36, 0xa0, 0xd1, 0x06, 0x94, 0x86, 0x34, - 0x70, 0xfc, 0x8e, 0xca, 0x72, 0x0e, 0x0f, 0xe3, 0xbc, 0x4a, 0xae, 0xcb, 0x2a, 0xb9, 0xbe, 0xe6, - 0xb1, 0x1b, 0x81, 0x3c, 0x08, 0x4d, 0xe0, 0xe7, 0x6c, 0x5d, 0xc8, 0xc0, 0x4a, 0x16, 0x37, 0x58, - 0x40, 0x59, 0x14, 0x78, 0xdc, 0xbe, 0x22, 0x71, 0x29, 0x4b, 0x2d, 0x70, 0x4c, 0xc5, 0x06, 0x87, - 0xfd, 0xeb, 0x1c, 0x9c, 0x3d, 0x48, 0x75, 0xf4, 0x86, 0x05, 0x25, 0xa9, 0xad, 0xba, 0xa0, 0x5f, - 0x3f, 0x21, 0x23, 0xa9, 0xa0, 0x14, 0x5f, 0x1c, 0x95, 0x78, 0x2a, 0x70, 0xf4, 0xb5, 0xd8, 0x4c, - 0xb9, 0xfb, 0x34, 0x53, 0x2c, 0x79, 0xcc, 0x54, 0xe7, 0xa1, 0xc0, 0x8b, 0x60, 0x75, 0x54, 0x92, - 0x74, 0x84, 0x6f, 0x94, 0x18, 0xe1, 0x1c, 0x91, 0xe7, 0xc8, 0x53, 0x62, 0x70, 0x3c, 0xef, 0x39, - 0x0c, 0x8b, 0x11, 0xfb, 0x76, 0x0e, 0xe6, 0x0f, 0x5f, 0x14, 0xba, 0x6d, 0x01, 0x74, 0x9c, 0x01, - 0xf5, 0xf8, 0xe1, 0xd4, 0x91, 0xbc, 0x7b, 0xa2, 0x86, 0x5c, 0xd1, 0x70, 0x49, 0x96, 0x17, 0x93, - 0x42, 0x6c, 0x68, 0x83, 0x2e, 0xe9, 0x9b, 0xc0, 0x63, 0x88, 0xba, 0x5b, 0xf1, 0x9c, 0x6b, 0xf1, - 0x08, 0x36, 0xb8, 0xd0, 0x67, 0xa1, 0xc2, 0x63, 0x4d, 0x38, 0x24, 0x6d, 0xaa, 0x0c, 0x27, 0x9c, - 0xfe, 0x75, 0x4d, 0xc4, 0xc9, 0xb8, 0xed, 0xc2, 0x85, 0x23, 0xe8, 0x79, 0x84, 0xc8, 0x76, 0x21, - 0x1d, 0xd9, 0x62, 0xd7, 0x6e, 0x46, 0x37, 0xfb, 0x76, 0x1e, 0x66, 0xf8, 0x91, 0xee, 0xf8, 0xbd, - 0x8c, 0xdc, 0xeb, 0x05, 0x28, 0xbe, 0xca, 0x3d, 0xd4, 0x38, 0xac, 0x70, 0x5b, 0x58, 0x8e, 0xa1, - 0x37, 0x2d, 0x98, 0x7a, 0x55, 0x79, 0x5e, 0x99, 0xc5, 0x64, 0x71, 0x51, 0x52, 0x0b, 0xa9, 0x2b, - 0x3f, 0x7a, 0xd9, 0x63, 0xc1, 0x28, 0xc9, 0xde, 0xb4, 0xc3, 0xd5, 0xf0, 0xbc, 0x9e, 0xec, 0xfa, - 0xc1, 0x20, 0x72, 0x89, 0x3a, 0xb1, 0x31, 0xeb, 0xaa, 0x24, 0x63, 0x3d, 0xce, 0xf7, 0x9e, 0x0c, - 0x9d, 0x17, 0x68, 0x10, 0xca, 0x3a, 0x3b, 0xb5, 0xf7, 0x4b, 0xf1, 0x08, 0x36, 0xb8, 0xe6, 0x9f, - 0x86, 0xaa, 0xa9, 0x08, 0x9a, 0x83, 0xfc, 0x36, 0x1d, 0x49, 0xcb, 0x62, 0xfe, 0x27, 0x3a, 0x9b, - 0xda, 0x27, 0xb5, 0x31, 0x4f, 0xe7, 0x9e, 0xb4, 0xec, 0x2f, 0x83, 0x4a, 0xc4, 0xc6, 0x4e, 0x9d, - 0x75, 0x94, 0x53, 0x67, 0x3f, 0x03, 0xe5, 0x55, 0x87, 0xba, 0x1d, 0x4c, 0xbb, 0xa8, 0x01, 0x95, - 0x2e, 0xff, 0x7b, 0x9d, 0xb0, 0xbe, 0x9a, 0x1e, 0x37, 0x34, 0x56, 0xf5, 0x00, 0x4e, 0x78, 0xec, - 0x97, 0x61, 0xf6, 0x2b, 0x01, 0x19, 0xf6, 0x1d, 0x46, 0xd5, 0xb9, 0x78, 0x04, 0xa6, 0x48, 0xa7, - 0xc3, 0x43, 0x86, 0x12, 0x10, 0xdb, 0x69, 0x49, 0x92, 0xb1, 0x1e, 0x3f, 0xd2, 0x11, 0xe0, 0x08, - 0x6b, 0x5e, 0xd7, 0x8d, 0x6e, 0x75, 0xb6, 0x12, 0x84, 0x61, 0xe0, 0x77, 0x1d, 0x97, 0x8e, 0x23, - 0xac, 0x4b, 0x32, 0xd6, 0xe3, 0x47, 0x43, 0xf8, 0x85, 0x05, 0x95, 0x2b, 0xbe, 0x96, 0xfe, 0x8d, - 0x0c, 0x4a, 0xc0, 0xb8, 0x1c, 0xba, 0xa6, 0x24, 0x19, 0xe5, 0xd0, 0xb3, 0xa9, 0x02, 0xf0, 0x41, - 0x43, 0x76, 0x5d, 0x74, 0xa0, 0xb9, 0xa8, 0x2b, 0xfe, 0xd6, 0xa1, 0x55, 0xdc, 0x2f, 0x8b, 0x30, - 0xf3, 0x1c, 0x19, 0x51, 0x8f, 0x91, 0xe3, 0x5b, 0xfc, 0x8b, 0x30, 0x4d, 0x86, 0x43, 0x57, 0x65, - 0x89, 0xca, 0x2a, 0xff, 0xa7, 0xd8, 0xa7, 0x97, 0x92, 0x21, 0x6c, 0xf2, 0xa1, 0x15, 0x98, 0x6b, - 0x13, 0x8f, 0x04, 0x23, 0x99, 0x87, 0x89, 0xc3, 0x25, 0xfd, 0x53, 0x4d, 0xcd, 0x9d, 0x5b, 0x1e, - 0x1b, 0xc7, 0x13, 0x33, 0xd0, 0x15, 0x40, 0xaa, 0x14, 0x5a, 0x6a, 0xb7, 0xfd, 0xc8, 0x63, 0x42, - 0x8e, 0xbc, 0x4c, 0xf3, 0x4a, 0x0e, 0xba, 0x36, 0xc1, 0x81, 0x0f, 0x98, 0x85, 0x5e, 0x82, 0x5a, - 0x5b, 0x48, 0x56, 0xee, 0xc5, 0x94, 0x28, 0x2f, 0xdc, 0x79, 0x25, 0xb1, 0xb6, 0x7c, 0x08, 0x1f, - 0x3e, 0x54, 0x02, 0xd7, 0x34, 0x64, 0x7e, 0x40, 0x7a, 0xd4, 0x94, 0x5b, 0x4a, 0x6b, 0xda, 0x9a, - 0xe0, 0xc0, 0x07, 0xcc, 0x42, 0xdf, 0xb3, 0xa0, 0xc2, 0xfa, 0x01, 0x0d, 0xfb, 0xbe, 0xdb, 0xa9, - 0x4d, 0x89, 0x5d, 0xcf, 0xa2, 0x06, 0x56, 0x67, 0x60, 0x43, 0x8b, 0x36, 0x3a, 0x8f, 0x9a, 0x84, - 0x13, 0x60, 0x9e, 0x9b, 0x87, 0x6d, 0x7f, 0x48, 0xc3, 0x5a, 0x39, 0xb3, 0xde, 0x96, 0x52, 0xa1, - 0xc5, 0xe5, 0x1a, 0x3d, 0x70, 0x01, 0x83, 0x15, 0x9c, 0xfd, 0x87, 0x1c, 0x54, 0x4d, 0xc6, 0x23, - 0x44, 0xa4, 0x37, 0x2d, 0xa8, 0x2a, 0x70, 0x31, 0x45, 0xdd, 0x95, 0x4c, 0x8a, 0x18, 0x2e, 0x6f, - 0x85, 0x32, 0xe2, 0xb8, 0xcd, 0xb3, 0x0a, 0xba, 0xba, 0x6c, 0x60, 0xe1, 0x14, 0x32, 0x7a, 0xc7, - 0x82, 0xd3, 0xf4, 0x16, 0xcf, 0x69, 0x78, 0x9d, 0x28, 0xb5, 0xc9, 0x9f, 0x88, 0x36, 0x9f, 0x52, - 0xda, 0x9c, 0xbe, 0x9c, 0x86, 0xc3, 0xe3, 0xf8, 0xf6, 0x16, 0xcc, 0x8d, 0x6f, 0x3e, 0x37, 0xea, - 0x90, 0x28, 0x07, 0x90, 0x4f, 0x8c, 0xba, 0x4e, 0xc2, 0x10, 0x8b, 0x11, 0xf4, 0x18, 0x94, 0x07, - 0x24, 0xe8, 0x39, 0x1e, 0x71, 0x85, 0x3d, 0xf3, 0x86, 0x97, 0x52, 0x74, 0x1c, 0x73, 0xd8, 0x7f, - 0x29, 0xc0, 0xb4, 0x51, 0x4c, 0x9f, 0x7c, 0x0f, 0x36, 0xd5, 0xf4, 0xcc, 0x67, 0xd8, 0xf4, 0x7c, - 0x11, 0xa0, 0xeb, 0x78, 0x4e, 0xd8, 0xbf, 0xcf, 0x76, 0xaa, 0xc8, 0xef, 0x57, 0x63, 0x09, 0xd8, - 0x90, 0x96, 0xa4, 0x4e, 0xc5, 0xc3, 0x53, 0x27, 0xf4, 0x96, 0x65, 0x44, 0x94, 0x52, 0x66, 0xe5, - 0xa3, 0xb1, 0x3b, 0x75, 0x1d, 0x66, 0x64, 0x0e, 0xf3, 0x61, 0xd1, 0x67, 0x03, 0xca, 0x01, 0x0d, - 0xa3, 0x01, 0x5d, 0x62, 0xca, 0x17, 0x1d, 0xc7, 0x16, 0x55, 0x2e, 0x15, 0xab, 0xf9, 0x38, 0x96, - 0x34, 0xff, 0x0c, 0xcc, 0xa4, 0x54, 0x38, 0x56, 0xf6, 0xe2, 0xc3, 0x81, 0x6d, 0x9b, 0xfb, 0xc9, - 0x65, 0xf8, 0x86, 0xb8, 0xce, 0xc0, 0x61, 0x02, 0xa5, 0x98, 0x6c, 0xc8, 0x55, 0x4e, 0xc4, 0x72, - 0xcc, 0xfe, 0x67, 0x09, 0x54, 0x1d, 0x74, 0x04, 0x5f, 0x64, 0xa6, 0xb9, 0xb9, 0xfb, 0x48, 0x73, - 0xaf, 0x40, 0xd5, 0xf1, 0x1c, 0xe6, 0x10, 0x77, 0x85, 0xba, 0x64, 0xa4, 0xc2, 0xe6, 0xc3, 0xda, - 0xf5, 0xac, 0x19, 0x63, 0x07, 0xc8, 0x49, 0xcd, 0x45, 0x37, 0xa1, 0x28, 0xe2, 0x8a, 0x3a, 0xc5, - 0xc7, 0x2f, 0xd6, 0x44, 0xc5, 0xbe, 0xcc, 0x45, 0x60, 0x29, 0x89, 0x47, 0xf6, 0x30, 0x6a, 0xb7, - 0x69, 0x18, 0x2e, 0xfb, 0x5e, 0xc7, 0x61, 0x49, 0xc2, 0x1a, 0x47, 0xf6, 0xd6, 0xd8, 0x38, 0x9e, - 0x98, 0xc1, 0xa5, 0x74, 0x89, 0xe3, 0x46, 0x01, 0x4d, 0xa4, 0x94, 0xd2, 0x52, 0x56, 0xc7, 0xc6, - 0xf1, 0xc4, 0x0c, 0xd4, 0x85, 0xaa, 0xa2, 0x89, 0xed, 0x52, 0xe7, 0xf3, 0xf8, 0xab, 0x9c, 0xe3, - 0x86, 0x5d, 0x35, 0x24, 0xe1, 0x94, 0x5c, 0x14, 0xc1, 0x19, 0xc7, 0x6b, 0xfb, 0x5e, 0xdb, 0x8d, - 0x42, 0x67, 0x47, 0x81, 0x95, 0xef, 0x13, 0xec, 0xdc, 0xfe, 0xde, 0xe2, 0x99, 0xb5, 0x71, 0x71, - 0x78, 0x12, 0x01, 0xbd, 0x6e, 0xc1, 0xb9, 0xb6, 0xef, 0x85, 0xb4, 0x1d, 0x31, 0x67, 0x87, 0x5e, - 0x0e, 0x02, 0x3f, 0x90, 0xd8, 0x95, 0xfb, 0xc4, 0x7e, 0x60, 0x7f, 0x6f, 0xf1, 0xdc, 0xf2, 0x41, - 0x22, 0xf1, 0xc1, 0x48, 0xe8, 0x35, 0x28, 0x0f, 0x03, 0x7f, 0xc7, 0xe9, 0xd0, 0xa0, 0x06, 0x02, - 0xf5, 0x66, 0x66, 0x9d, 0xef, 0x75, 0x25, 0x38, 0xf1, 0x3f, 0x9a, 0x82, 0x63, 0x50, 0xfb, 0x37, - 0x55, 0x98, 0x4d, 0xb3, 0xa3, 0xef, 0x5a, 0x00, 0xc3, 0xc0, 0x1f, 0x50, 0xd6, 0xa7, 0x51, 0xa8, - 0x72, 0xee, 0x2c, 0x32, 0xa4, 0xf5, 0x58, 0xa8, 0xee, 0x82, 0x70, 0xcf, 0x91, 0x50, 0xb1, 0x01, - 0x8b, 0x76, 0x61, 0x6a, 0x5b, 0x06, 0x55, 0x95, 0x6d, 0xac, 0x67, 0x97, 0x20, 0x29, 0xf8, 0x69, - 0x1e, 0xf8, 0x14, 0x09, 0x6b, 0x34, 0xd4, 0x83, 0xfc, 0x2e, 0xdd, 0xca, 0xb0, 0x63, 0xbc, 0x49, - 0x55, 0x29, 0xd3, 0x9c, 0xda, 0xdf, 0x5b, 0xcc, 0x6f, 0xd2, 0x2d, 0xcc, 0x11, 0xf8, 0x0a, 0x3b, - 0xb2, 0xf0, 0x55, 0xfe, 0x63, 0x3d, 0xeb, 0x52, 0x5a, 0xae, 0x50, 0x91, 0xb0, 0x46, 0x43, 0xaf, - 0x41, 0x65, 0x97, 0xec, 0xd0, 0x6e, 0xe0, 0x7b, 0x4c, 0xb5, 0xe3, 0xb2, 0xf8, 0xfc, 0x63, 0x53, - 0xcb, 0x54, 0xe0, 0x22, 0x05, 0x88, 0x89, 0x38, 0xc1, 0x44, 0xdf, 0x84, 0xb2, 0x47, 0x77, 0x31, - 0x75, 0x9d, 0xb6, 0x7a, 0x6d, 0xcc, 0xe2, 0xd4, 0x5f, 0x57, 0x22, 0x15, 0xbc, 0x88, 0x8d, 0x9a, - 0x86, 0x63, 0x40, 0xbe, 0xbf, 0xaf, 0xf8, 0x5b, 0xca, 0x99, 0x65, 0xb1, 0xbf, 0x71, 0xa9, 0x2a, - 0xf7, 0xf7, 0x8a, 0xbf, 0x85, 0x39, 0x82, 0xb8, 0x47, 0xed, 0xb8, 0x23, 0xa4, 0x1c, 0x5a, 0xeb, - 0x04, 0xda, 0x61, 0xf2, 0x1e, 0x25, 0x54, 0x6c, 0xc0, 0x72, 0x5b, 0xf7, 0x54, 0x43, 0x40, 0xf9, - 0xb5, 0x2c, 0x6c, 0x9d, 0xee, 0x31, 0x48, 0x5b, 0x6b, 0x1a, 0x8e, 0x01, 0x39, 0xb8, 0xa3, 0x7a, - 0x05, 0x19, 0xba, 0xb7, 0x74, 0xfb, 0x41, 0x82, 0x6b, 0x1a, 0x8e, 0x01, 0x85, 0xfd, 0xc3, 0xed, - 0xd1, 0x2e, 0x71, 0xb7, 0x1d, 0xaf, 0x57, 0x9b, 0xce, 0xcc, 0xfe, 0xad, 0xed, 0xd1, 0xa6, 0x14, - 0x6a, 0xda, 0x3f, 0xa1, 0x62, 0x03, 0x16, 0xfd, 0xc4, 0x82, 0xd2, 0xd0, 0x8d, 0x7a, 0x8e, 0x57, - 0xab, 0x66, 0xd6, 0x30, 0x4b, 0x7b, 0xec, 0xfa, 0xba, 0x90, 0x2f, 0x93, 0xcd, 0x47, 0xe3, 0xfe, - 0xaf, 0x20, 0xbe, 0xf5, 0xc7, 0xc5, 0x1a, 0xf5, 0xda, 0x7e, 0xc7, 0xf1, 0x7a, 0x8d, 0x57, 0x42, - 0xdf, 0xab, 0x63, 0xb2, 0xab, 0x93, 0x7d, 0xa5, 0xd8, 0xfc, 0x53, 0x30, 0x6d, 0x88, 0xb8, 0x57, - 0xb2, 0x58, 0x35, 0x93, 0xc5, 0x5f, 0x95, 0xa0, 0x6a, 0x7e, 0x3c, 0x71, 0x84, 0x0c, 0x2e, 0x2e, - 0x5d, 0x72, 0xc7, 0x29, 0x5d, 0x78, 0x0d, 0x6a, 0xbc, 0x1b, 0xea, 0xf6, 0xe3, 0xf5, 0x6c, 0x33, - 0xf7, 0xa4, 0x06, 0x35, 0x88, 0x21, 0x4e, 0x21, 0x9b, 0x55, 0x54, 0xe1, 0x1e, 0x55, 0xd4, 0x05, - 0x9d, 0x21, 0x16, 0xd3, 0xf9, 0x6f, 0x2a, 0xe7, 0xbb, 0x04, 0xa0, 0x32, 0xb8, 0x6e, 0xe4, 0x0a, - 0x87, 0x58, 0x4c, 0x12, 0xeb, 0x56, 0x3c, 0x82, 0x0d, 0x2e, 0xf4, 0x30, 0x94, 0x78, 0x0e, 0x45, - 0x65, 0x07, 0xa3, 0x98, 0x54, 0xfb, 0xab, 0x82, 0x8a, 0xd5, 0x28, 0x7a, 0x92, 0xa7, 0xbb, 0x49, - 0xe6, 0x23, 0xbc, 0x50, 0x31, 0x59, 0xa5, 0x99, 0x28, 0xe1, 0x14, 0x27, 0x57, 0x9d, 0xf2, 0x44, - 0x45, 0x78, 0x0d, 0x43, 0x75, 0x91, 0xbd, 0x60, 0x39, 0x26, 0x1a, 0x51, 0x63, 0x89, 0x8d, 0xb8, - 0xe8, 0x45, 0xa3, 0x11, 0x35, 0x36, 0x8e, 0x27, 0x66, 0xf0, 0xc5, 0xa8, 0x97, 0xf1, 0x69, 0xf9, - 0x84, 0x73, 0xc8, 0x73, 0xf6, 0xdb, 0x66, 0xe5, 0x96, 0xf5, 0x6d, 0x92, 0xe7, 0xf7, 0xe8, 0xa5, - 0xdb, 0x47, 0x2b, 0xb2, 0x5e, 0x86, 0xd9, 0x74, 0xbc, 0xca, 0xbc, 0x8b, 0x7a, 0xc7, 0x82, 0xaa, - 0xf9, 0x58, 0x8b, 0x1e, 0x83, 0x32, 0xf3, 0xb7, 0xa9, 0xf7, 0x7c, 0xa0, 0x1f, 0x08, 0xe2, 0xd5, - 0x6d, 0x08, 0x3a, 0xbe, 0x8a, 0x63, 0x0e, 0xce, 0xdd, 0x76, 0x1d, 0xea, 0xb1, 0xb5, 0x8e, 0x82, - 0x89, 0xb9, 0x97, 0x25, 0x7d, 0x05, 0xc7, 0x1c, 0xfc, 0x98, 0xc9, 0xbf, 0x5b, 0xb4, 0x1d, 0x50, - 0xfd, 0xca, 0x94, 0x34, 0x74, 0x8c, 0x31, 0x9c, 0xe2, 0x44, 0x76, 0xdc, 0x07, 0x2b, 0x9c, 0xcf, - 0x5f, 0xac, 0xc8, 0x67, 0xbe, 0xb1, 0x96, 0xd5, 0xef, 0xf3, 0x30, 0x37, 0x9e, 0x3c, 0x66, 0xdd, - 0xd7, 0x46, 0xef, 0x58, 0x30, 0x4b, 0x52, 0x8f, 0xf6, 0x2a, 0x07, 0xcc, 0x22, 0x64, 0xa5, 0xbf, - 0x06, 0x68, 0xfe, 0xbf, 0xd2, 0x60, 0xec, 0x2b, 0x01, 0x3c, 0xa6, 0x00, 0xfa, 0x0c, 0x4c, 0x31, - 0x67, 0x40, 0xfd, 0x48, 0x96, 0x98, 0x79, 0x99, 0xd0, 0x6d, 0x48, 0x12, 0xd6, 0x63, 0x7c, 0xaf, - 0x1c, 0x71, 0xa5, 0x02, 0xd9, 0xf9, 0x28, 0x27, 0x7b, 0xb5, 0xa6, 0xe8, 0x38, 0xe6, 0x40, 0xdf, - 0x86, 0xa9, 0x3e, 0x25, 0x1d, 0x1a, 0x84, 0xaa, 0xfb, 0x81, 0xb3, 0x4c, 0x72, 0xbf, 0x2a, 0x44, - 0x27, 0x9b, 0x21, 0x7f, 0x87, 0x58, 0x63, 0xda, 0x7f, 0xb3, 0xc0, 0xf8, 0x16, 0x2d, 0xf1, 0x90, - 0xd6, 0x91, 0x3d, 0x64, 0xee, 0x98, 0x1e, 0x32, 0x7f, 0x2c, 0x0f, 0x59, 0x38, 0xbe, 0x87, 0x2c, - 0x1e, 0xee, 0x21, 0xed, 0xdf, 0x5a, 0x30, 0x6d, 0xb4, 0x15, 0xf9, 0x24, 0x71, 0xaa, 0xd5, 0xa1, - 0x4d, 0x3e, 0xdc, 0x10, 0xbd, 0x45, 0x39, 0xc6, 0x75, 0x0f, 0x68, 0xcf, 0xf8, 0x08, 0x40, 0xeb, - 0x8e, 0x05, 0x15, 0xab, 0x51, 0xf9, 0xa8, 0x4b, 0x87, 0x62, 0x85, 0x79, 0xf3, 0x51, 0x97, 0x0e, - 0xb1, 0x18, 0x11, 0x70, 0x8c, 0x04, 0xfa, 0x55, 0x37, 0x81, 0xe3, 0x44, 0x2c, 0xc7, 0xd0, 0x43, - 0x90, 0xa7, 0x5e, 0x47, 0xf5, 0x19, 0xa6, 0x15, 0x4b, 0xfe, 0xb2, 0xd7, 0xc1, 0x9c, 0x6e, 0xdf, - 0x80, 0xaa, 0xbc, 0xac, 0xcf, 0xd1, 0x11, 0xa6, 0xdd, 0x23, 0x84, 0xf8, 0x87, 0xa4, 0x27, 0xcc, - 0xa5, 0x05, 0xf2, 0xe9, 0x9c, 0x6e, 0xbf, 0xcd, 0x6d, 0x92, 0x7c, 0xbd, 0x62, 0x2c, 0xd7, 0xfa, - 0xd0, 0xe5, 0x1a, 0x2e, 0x32, 0x77, 0x0f, 0x17, 0xf9, 0x08, 0x4c, 0x05, 0xbe, 0x4b, 0x97, 0x02, - 0x4f, 0xf9, 0xa2, 0x98, 0x15, 0x73, 0x32, 0xbe, 0x8e, 0xf5, 0xb8, 0xfd, 0x53, 0x0b, 0xe6, 0xc6, - 0x53, 0xba, 0xcc, 0xbd, 0x8b, 0xd9, 0xb6, 0xca, 0x1f, 0xbf, 0x6d, 0x65, 0xbf, 0x95, 0x83, 0xe4, - 0x5b, 0x23, 0xf4, 0x86, 0x05, 0xd5, 0xd0, 0xd8, 0x12, 0x55, 0xa4, 0x67, 0xf1, 0x86, 0x60, 0xee, - 0xb4, 0xec, 0xdc, 0x98, 0x14, 0x9c, 0x82, 0x45, 0x11, 0x94, 0xbb, 0xea, 0xa9, 0x52, 0x55, 0xe9, - 0x59, 0x7c, 0x45, 0xa7, 0x5f, 0x3f, 0x65, 0x66, 0xaf, 0x7f, 0xe1, 0x18, 0xca, 0x26, 0x70, 0x7a, - 0xac, 0xd8, 0xcc, 0xfc, 0x95, 0xf3, 0x5f, 0x05, 0xa8, 0xc4, 0x3e, 0x0d, 0x3d, 0x25, 0xbe, 0x0e, - 0xe9, 0xfb, 0xfa, 0xc3, 0x9d, 0x4f, 0x1b, 0x9f, 0x6f, 0xf4, 0xfd, 0xce, 0xdd, 0xbd, 0xc5, 0xd3, - 0x31, 0xb3, 0x24, 0x61, 0x35, 0x81, 0x5f, 0x85, 0x28, 0x70, 0xc7, 0xaf, 0x02, 0x8f, 0xb5, 0x9c, - 0x6e, 0x3a, 0xe3, 0xfc, 0xc7, 0xef, 0x8c, 0xf9, 0x55, 0xde, 0xf2, 0x3b, 0xa3, 0xf1, 0x6f, 0x3e, - 0x9a, 0x7e, 0x67, 0x84, 0xc5, 0x08, 0x7a, 0x16, 0x66, 0x55, 0x98, 0x69, 0xd1, 0xb6, 0xef, 0x75, - 0x42, 0xe1, 0x26, 0xf2, 0x49, 0x08, 0xdb, 0x48, 0x8d, 0xe2, 0x31, 0x6e, 0x1e, 0x9b, 0x78, 0xd9, - 0x21, 0x1e, 0xb0, 0x4b, 0xe9, 0x3c, 0xe2, 0x4a, 0xeb, 0xc6, 0x75, 0xf1, 0x7e, 0x1d, 0x73, 0xa4, - 0x22, 0xd9, 0xd4, 0x3d, 0x23, 0xd9, 0x8a, 0x94, 0xcd, 0xb5, 0x15, 0x89, 0x6d, 0xb5, 0x79, 0x51, - 0xcb, 0xe5, 0xb4, 0xbb, 0x7b, 0x1f, 0x52, 0xfb, 0xc4, 0x33, 0x0f, 0x0a, 0xfc, 0x95, 0x4f, 0x38, - 0xf0, 0xdb, 0xcf, 0xc3, 0xe9, 0xb1, 0x4d, 0xd4, 0x3e, 0xd5, 0x3a, 0xd8, 0xa7, 0x1e, 0xe9, 0xab, - 0x91, 0x66, 0xef, 0xce, 0xfb, 0x0b, 0xa7, 0xde, 0x7d, 0x7f, 0xe1, 0xd4, 0x7b, 0xef, 0x2f, 0x9c, - 0xfa, 0xce, 0xfe, 0x82, 0x75, 0x67, 0x7f, 0xc1, 0x7a, 0x77, 0x7f, 0xc1, 0x7a, 0x6f, 0x7f, 0xc1, - 0xfa, 0xd3, 0xfe, 0x82, 0xf5, 0xa3, 0x0f, 0x16, 0x4e, 0xbd, 0xb8, 0xf4, 0x91, 0xff, 0x27, 0xd9, - 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x0b, 0x11, 0xfa, 0x13, 0x8d, 0x36, 0x00, 0x00, + 0xf5, 0xdf, 0x9e, 0x0f, 0x7b, 0xe6, 0x79, 0xec, 0xf5, 0xd6, 0x7f, 0xf7, 0x9f, 0x89, 0xff, 0x89, + 0xbd, 0xff, 0x5e, 0x11, 0xed, 0x86, 0x30, 0x43, 0x96, 0x80, 0xf2, 0x81, 0x22, 0x79, 0xec, 0x35, + 0x78, 0xb3, 0x1f, 0xde, 0x1a, 0x27, 0x46, 0x51, 0x40, 0x29, 0xcf, 0xd4, 0xcc, 0x74, 0xdc, 0xd3, + 0x3d, 0xe9, 0xae, 0xf6, 0xee, 0x08, 0x50, 0x88, 0x20, 0x10, 0x25, 0x1c, 0xc8, 0x0d, 0xe5, 0x06, + 0x12, 0x07, 0x84, 0x38, 0x72, 0x03, 0x89, 0x13, 0x5a, 0x71, 0x21, 0xc7, 0x9c, 0x0c, 0x71, 0x38, + 0x80, 0x84, 0xe0, 0x86, 0xc4, 0x2a, 0x42, 0xa8, 0xbe, 0xba, 0xab, 0x67, 0x3c, 0x59, 0x7b, 0xd3, + 0x4e, 0x90, 0x72, 0xf2, 0xf4, 0xab, 0x57, 0xef, 0xf7, 0xea, 0x55, 0xd5, 0x7b, 0xaf, 0x5e, 0x95, + 0xe1, 0x46, 0xd7, 0x61, 0xbd, 0x68, 0xbb, 0xd6, 0xf2, 0xfb, 0x75, 0xb2, 0x13, 0x39, 0x6c, 0x58, + 0xdf, 0x21, 0x41, 0xd7, 0xaf, 0x3b, 0x1e, 0xa3, 0x81, 0x47, 0xdc, 0x7a, 0xcb, 0xf7, 0x58, 0xe0, + 0xbb, 0x2e, 0x0d, 0xea, 0xfc, 0x8f, 0x1f, 0xb1, 0xb0, 0x4e, 0x06, 0x4e, 0x7d, 0xf7, 0x51, 0xe2, + 0x0e, 0x7a, 0xe4, 0xd1, 0x7a, 0x97, 0x7a, 0x34, 0x20, 0x8c, 0xb6, 0x6b, 0x83, 0xc0, 0x67, 0x3e, + 0x5a, 0x4e, 0x44, 0xd6, 0xa4, 0xc8, 0x9a, 0x10, 0x59, 0xd3, 0x22, 0x6b, 0x89, 0xc8, 0x9a, 0x16, + 0x59, 0x23, 0x03, 0xa7, 0xa6, 0x45, 0x2e, 0x7c, 0xce, 0xd0, 0xaa, 0xeb, 0x77, 0xfd, 0xba, 0x90, + 0xbc, 0x1d, 0x75, 0xc4, 0x97, 0xf8, 0x10, 0xbf, 0x24, 0xe2, 0xc2, 0xb9, 0x9d, 0xc7, 0xc3, 0x9a, + 0xe3, 0x0b, 0xb5, 0xb6, 0x09, 0x6b, 0xf5, 0xea, 0xbb, 0x63, 0x6a, 0x2d, 0x3c, 0x96, 0x30, 0xf5, + 0x49, 0xab, 0xe7, 0x78, 0x34, 0x18, 0xd6, 0x07, 0x3b, 0x5d, 0x4e, 0x08, 0xeb, 0x7d, 0xca, 0xc8, + 0x41, 0xbd, 0xea, 0x93, 0x7a, 0x05, 0x91, 0xc7, 0x9c, 0x3e, 0x1d, 0xeb, 0xf0, 0xa5, 0xbb, 0x75, + 0x08, 0x5b, 0x3d, 0xda, 0x27, 0x63, 0xfd, 0xbe, 0x30, 0xa9, 0x5f, 0xc4, 0x1c, 0x97, 0xcf, 0x46, + 0xc8, 0x82, 0xd1, 0x4e, 0xf6, 0xfb, 0x39, 0x98, 0x59, 0xf6, 0x88, 0x3b, 0x0c, 0x9d, 0x10, 0x47, + 0x1e, 0x7a, 0x11, 0x4a, 0x7c, 0x20, 0x6d, 0xc2, 0x48, 0xd5, 0x3a, 0x6b, 0x9d, 0x9f, 0xb9, 0xf8, + 0xf9, 0x9a, 0x94, 0x5b, 0x33, 0xe5, 0xd6, 0x06, 0x3b, 0x5d, 0x4e, 0x08, 0x6b, 0x9c, 0xbb, 0xb6, + 0xfb, 0x68, 0xed, 0xfa, 0xf6, 0x4b, 0xb4, 0xc5, 0xae, 0x52, 0x46, 0x1a, 0xe8, 0xf6, 0xde, 0xd2, + 0x89, 0xfd, 0xbd, 0x25, 0x48, 0x68, 0x38, 0x96, 0x8a, 0x18, 0x14, 0xc2, 0x01, 0x6d, 0x55, 0x73, + 0x42, 0x3a, 0xae, 0x7d, 0xe4, 0xb9, 0xae, 0x19, 0xfa, 0x37, 0x07, 0xb4, 0xd5, 0xa8, 0x28, 0xfc, + 0x02, 0xff, 0xc2, 0x02, 0x0d, 0x7d, 0x0b, 0xa6, 0x42, 0x46, 0x58, 0x14, 0x56, 0xf3, 0x02, 0x77, + 0x33, 0x63, 0x5c, 0x21, 0xbb, 0x31, 0xa7, 0x90, 0xa7, 0xe4, 0x37, 0x56, 0x98, 0xf6, 0x9f, 0x2d, + 0x38, 0x69, 0x70, 0x5f, 0x71, 0x42, 0x86, 0x5e, 0x18, 0xb3, 0x74, 0xed, 0x70, 0x96, 0xe6, 0xbd, + 0x85, 0x9d, 0xe7, 0x15, 0x5a, 0x49, 0x53, 0x0c, 0x2b, 0x87, 0x50, 0x74, 0x18, 0xed, 0x87, 0xd5, + 0xdc, 0xd9, 0xfc, 0xf9, 0x99, 0x8b, 0xd7, 0xb2, 0x1d, 0x6e, 0x63, 0x56, 0x41, 0x17, 0xd7, 0x39, + 0x08, 0x96, 0x58, 0xf6, 0xef, 0x0a, 0xa9, 0x61, 0x72, 0xf3, 0x23, 0x06, 0xd3, 0x7d, 0xca, 0x02, + 0xa7, 0x15, 0x56, 0x2d, 0xa1, 0xca, 0x7a, 0x06, 0xaa, 0x5c, 0x15, 0x12, 0x1b, 0x27, 0x95, 0x16, + 0xd3, 0xf2, 0x3b, 0xc4, 0x1a, 0x0a, 0xf5, 0xa1, 0x40, 0x82, 0xae, 0x1e, 0xfd, 0x33, 0x59, 0x8c, + 0x3e, 0xe8, 0x46, 0x7d, 0xea, 0xb1, 0x64, 0x75, 0x2d, 0x07, 0xdd, 0x10, 0x0b, 0x18, 0x54, 0x87, + 0x32, 0xa3, 0x41, 0xdf, 0xf1, 0x08, 0xa3, 0x62, 0x81, 0x95, 0x1a, 0xa7, 0x14, 0x5b, 0x79, 0x53, + 0x37, 0xe0, 0x84, 0x07, 0xbd, 0x0c, 0x53, 0xed, 0x60, 0x88, 0x23, 0xaf, 0x5a, 0xc8, 0xcc, 0x28, + 0xab, 0x42, 0x60, 0xb2, 0x06, 0xe5, 0x37, 0x56, 0x40, 0xe8, 0xe7, 0x16, 0x9c, 0xee, 0x53, 0x12, + 0x46, 0x01, 0xe5, 0xe3, 0xc0, 0x94, 0x51, 0x8f, 0x39, 0xbe, 0x57, 0x2d, 0x0a, 0x0d, 0xb6, 0x32, + 0x99, 0x96, 0x71, 0xf1, 0x8d, 0x07, 0x94, 0x3e, 0xa7, 0x0f, 0x6a, 0xc5, 0x07, 0xaa, 0x64, 0xff, + 0xb5, 0x00, 0xa7, 0xc6, 0x76, 0x17, 0x7a, 0x0c, 0x8a, 0x83, 0x1e, 0x09, 0xa9, 0xd8, 0x2e, 0xe5, + 0xc6, 0xa2, 0x5e, 0x83, 0x1b, 0x9c, 0x78, 0x67, 0x6f, 0x69, 0x56, 0x77, 0x11, 0x04, 0x2c, 0x99, + 0xd1, 0x05, 0xbe, 0x00, 0xc3, 0x90, 0x74, 0xa9, 0x70, 0x39, 0x65, 0x73, 0xd5, 0x08, 0x32, 0xd6, + 0xed, 0xe8, 0x87, 0x16, 0xcc, 0xca, 0x15, 0x84, 0x69, 0x18, 0xb9, 0x8c, 0x3b, 0x0b, 0x6e, 0x9b, + 0xeb, 0x99, 0x2d, 0x59, 0x29, 0xb7, 0x71, 0x46, 0xa9, 0x30, 0x6b, 0x52, 0x43, 0x9c, 0x06, 0x47, + 0x5b, 0x50, 0x0e, 0x19, 0x09, 0x18, 0x6d, 0x2f, 0xb3, 0x6a, 0x41, 0xb8, 0x88, 0x87, 0x0f, 0xe7, + 0x22, 0x36, 0x9d, 0x3e, 0x6d, 0xcc, 0xf2, 0xd5, 0xd7, 0xd4, 0x02, 0x70, 0x22, 0x0b, 0xbd, 0x6a, + 0x01, 0x04, 0x91, 0xd7, 0x8c, 0xfa, 0x7d, 0x12, 0x0c, 0xab, 0x45, 0x21, 0xfa, 0x6a, 0x06, 0x83, + 0xc4, 0xb1, 0xd0, 0x24, 0x08, 0x24, 0x34, 0x6c, 0x80, 0xa2, 0xef, 0x5b, 0x30, 0x2b, 0x57, 0xa6, + 0x56, 0x63, 0xea, 0x38, 0xd4, 0x38, 0xc5, 0xad, 0xbc, 0x6a, 0xe2, 0xe0, 0x34, 0xac, 0xfd, 0x0f, + 0x0b, 0xe6, 0xf5, 0xc2, 0xd9, 0xa4, 0xfd, 0x81, 0xcb, 0xf7, 0xe7, 0xf1, 0x87, 0xc1, 0x61, 0x2a, + 0x0c, 0x6e, 0x65, 0xe8, 0x9f, 0xf5, 0x20, 0x26, 0xc5, 0x42, 0xfb, 0xef, 0x16, 0x9c, 0x1e, 0x65, + 0xfe, 0x18, 0x42, 0xd2, 0xad, 0x74, 0x48, 0x6a, 0x1e, 0xc3, 0x90, 0x27, 0xc4, 0xa5, 0xb7, 0x0b, + 0xe3, 0x03, 0xfe, 0xf4, 0x04, 0xa7, 0x24, 0xd6, 0xe4, 0x3f, 0xf1, 0x58, 0x53, 0xf8, 0xef, 0x8b, + 0x35, 0xb7, 0x2d, 0x28, 0x69, 0xfb, 0xa1, 0xb3, 0x50, 0xf0, 0x48, 0x5f, 0x47, 0x98, 0xd8, 0x9a, + 0xd7, 0x48, 0x9f, 0x62, 0xd1, 0x82, 0x96, 0xa0, 0xb8, 0x4b, 0xdc, 0x48, 0x07, 0x93, 0x32, 0x5f, + 0x6c, 0xcf, 0x71, 0x02, 0x96, 0x74, 0x34, 0x84, 0xb2, 0xf8, 0xb1, 0x16, 0xf8, 0x7d, 0x95, 0x6c, + 0x5e, 0xc9, 0x60, 0xbc, 0xcf, 0x69, 0x99, 0xd2, 0xaf, 0xc7, 0x9f, 0x38, 0x41, 0xb3, 0xff, 0x6d, + 0xc1, 0xdc, 0x72, 0xc4, 0x7a, 0x7c, 0x64, 0x2d, 0xc2, 0x47, 0xc7, 0xf3, 0xc0, 0xd0, 0xe9, 0xee, + 0x3e, 0xa6, 0xf6, 0x73, 0x16, 0x79, 0x60, 0x93, 0xcb, 0x5b, 0xf1, 0xbd, 0x8e, 0xd3, 0x4d, 0xf6, + 0x9b, 0x20, 0x62, 0x89, 0x85, 0x6e, 0xc2, 0x94, 0x4f, 0x22, 0xd6, 0xbb, 0xa8, 0xbc, 0x5b, 0x16, + 0xf1, 0xf3, 0x3a, 0x1f, 0xd8, 0x45, 0x05, 0x1b, 0xaf, 0x3b, 0x49, 0xc5, 0x0a, 0xce, 0xbe, 0x63, + 0xc1, 0xfc, 0x8a, 0xeb, 0x47, 0xed, 0x2d, 0x7e, 0x86, 0x93, 0x1b, 0x0f, 0x3d, 0x0d, 0x25, 0x01, + 0xb3, 0x4b, 0x5c, 0x35, 0xaf, 0xb6, 0xf6, 0x52, 0xeb, 0x8a, 0x7e, 0x67, 0x6f, 0x69, 0x6e, 0x35, + 0x0a, 0x84, 0xc9, 0x9a, 0x2c, 0x70, 0xbc, 0x2e, 0x8e, 0xfb, 0xa0, 0x9f, 0x59, 0x70, 0x4a, 0x6e, + 0xdd, 0x55, 0xc2, 0xc8, 0x8d, 0x88, 0x06, 0x0e, 0xd5, 0x9b, 0xf7, 0x85, 0x0c, 0x46, 0x36, 0xaa, + 0xb0, 0x46, 0x19, 0x36, 0xee, 0x57, 0x7a, 0x9e, 0xba, 0x3a, 0x0a, 0x8f, 0xc7, 0x35, 0xb2, 0x7f, + 0x9c, 0x87, 0xfb, 0x27, 0xca, 0x42, 0x0b, 0x90, 0x73, 0xda, 0x6a, 0xfc, 0xa0, 0xe4, 0xe6, 0xd6, + 0xdb, 0x38, 0xe7, 0xb4, 0x51, 0x0d, 0x80, 0xde, 0x1a, 0x04, 0x34, 0x0c, 0xf9, 0x1e, 0x95, 0x0b, + 0x7b, 0x8e, 0x47, 0xae, 0x4b, 0x31, 0x15, 0x1b, 0x1c, 0x7c, 0x0f, 0xb8, 0x64, 0x9b, 0xba, 0x62, + 0x79, 0xab, 0x3d, 0x70, 0x85, 0x13, 0xb0, 0xa4, 0xa3, 0x1f, 0x58, 0x00, 0x52, 0x41, 0x9e, 0xba, + 0xa9, 0xdc, 0x65, 0xeb, 0x18, 0x6c, 0xc5, 0xc5, 0x4b, 0x55, 0x93, 0x6f, 0x6c, 0x40, 0xa3, 0x4d, + 0x98, 0x1a, 0xd0, 0xc0, 0xf1, 0xdb, 0x2a, 0xcb, 0x99, 0x1c, 0xc6, 0xf9, 0x29, 0xb9, 0x26, 0x4f, + 0xc9, 0xb5, 0x75, 0x8f, 0x5d, 0x0f, 0xe4, 0x42, 0x68, 0x00, 0x5f, 0x67, 0x1b, 0x42, 0x06, 0x56, + 0xb2, 0xb8, 0xc1, 0x02, 0xca, 0xa2, 0xc0, 0xe3, 0xf6, 0x15, 0x89, 0x4b, 0x49, 0x6a, 0x81, 0x63, + 0x2a, 0x36, 0x38, 0xec, 0x5f, 0xe7, 0xe0, 0xf4, 0x41, 0xaa, 0xa3, 0xd7, 0x2c, 0x98, 0x92, 0xda, + 0xaa, 0x0d, 0xfa, 0xf5, 0x63, 0x32, 0x92, 0x0a, 0x4a, 0xf1, 0xc6, 0x51, 0x89, 0xa7, 0x02, 0x47, + 0x5f, 0x8b, 0xcd, 0x94, 0xbb, 0x47, 0x33, 0xc5, 0x92, 0x47, 0x4c, 0x75, 0x16, 0x0a, 0xfc, 0x10, + 0xac, 0x96, 0x4a, 0x92, 0x8e, 0xf0, 0x89, 0x12, 0x2d, 0x9c, 0x23, 0xf2, 0x1c, 0xb9, 0x4a, 0x0c, + 0x8e, 0x67, 0x3d, 0x87, 0x61, 0xd1, 0x62, 0xbf, 0x9d, 0x83, 0x85, 0xc9, 0x83, 0x42, 0x6f, 0x5b, + 0x00, 0x6d, 0xa7, 0x4f, 0x3d, 0xbe, 0x38, 0x75, 0x24, 0xef, 0x1c, 0xab, 0x21, 0x57, 0x35, 0x5c, + 0x92, 0xe5, 0xc5, 0xa4, 0x10, 0x1b, 0xda, 0xa0, 0x8b, 0x7a, 0x27, 0xf0, 0x18, 0xa2, 0xf6, 0x56, + 0xdc, 0xe7, 0x6a, 0xdc, 0x82, 0x0d, 0x2e, 0xf4, 0x59, 0x28, 0xf3, 0x58, 0x13, 0x0e, 0x48, 0x8b, + 0x2a, 0xc3, 0x09, 0xa7, 0x7f, 0x4d, 0x13, 0x71, 0xd2, 0x6e, 0xbb, 0x70, 0xee, 0x10, 0x7a, 0x1e, + 0x22, 0xb2, 0x9d, 0x4b, 0x47, 0xb6, 0xd8, 0xb5, 0x9b, 0xd1, 0xcd, 0xfe, 0xa7, 0x05, 0xf7, 0xad, + 0xb8, 0x51, 0xc8, 0x68, 0xf0, 0xe9, 0x4a, 0x9a, 0x3f, 0xb0, 0xe0, 0xff, 0x26, 0x0c, 0xfc, 0x63, + 0xc8, 0x9d, 0x5f, 0x49, 0xe7, 0xce, 0xcf, 0x67, 0xb2, 0xb8, 0x0f, 0x1c, 0xcc, 0xa4, 0x14, 0x3a, + 0x0f, 0xb3, 0xdc, 0x95, 0xb5, 0xfd, 0x6e, 0x46, 0x61, 0xf5, 0x1c, 0x14, 0x5f, 0xe6, 0x91, 0x69, + 0x74, 0xb9, 0x89, 0x70, 0x85, 0x65, 0x1b, 0x7a, 0xdd, 0x82, 0xe9, 0x97, 0x55, 0xc4, 0x95, 0xd9, + 0x6b, 0x16, 0x0e, 0x32, 0x35, 0x90, 0x9a, 0x8a, 0x9f, 0x97, 0x3c, 0x16, 0x0c, 0x93, 0xac, 0x5d, + 0x07, 0x5a, 0x0d, 0x8f, 0x2e, 0xc0, 0x74, 0xc7, 0x0f, 0xfa, 0x91, 0x4b, 0x94, 0xa7, 0x8a, 0x59, + 0xd7, 0x24, 0x19, 0xeb, 0x76, 0xbe, 0xe7, 0xc9, 0xc0, 0x79, 0x8e, 0x06, 0xa1, 0xac, 0xaf, 0xa4, + 0xf6, 0xfc, 0x72, 0xdc, 0x82, 0x0d, 0xae, 0x85, 0x27, 0xa1, 0x62, 0x2a, 0x82, 0xe6, 0x21, 0xbf, + 0x43, 0x87, 0xd2, 0xb2, 0x98, 0xff, 0x44, 0xa7, 0x53, 0xfb, 0x53, 0x6d, 0xc8, 0x27, 0x73, 0x8f, + 0x5b, 0xf6, 0x97, 0x41, 0x25, 0xe0, 0x23, 0xde, 0xc6, 0x3a, 0x8c, 0xb7, 0xb1, 0x9f, 0x82, 0xd2, + 0x9a, 0x43, 0xdd, 0x36, 0xa6, 0x1d, 0x54, 0x87, 0x72, 0x87, 0xff, 0xde, 0x20, 0xac, 0xa7, 0xba, + 0xc7, 0x85, 0xac, 0x35, 0xdd, 0x80, 0x13, 0x1e, 0xfb, 0x45, 0x98, 0xfb, 0x4a, 0x40, 0x06, 0x3d, + 0x87, 0x51, 0xb5, 0x2e, 0x2e, 0xc0, 0x34, 0x69, 0xb7, 0x79, 0xaa, 0xa0, 0x04, 0xc4, 0x76, 0x5a, + 0x96, 0x64, 0xac, 0xdb, 0x0f, 0xb5, 0x04, 0x38, 0xc2, 0xba, 0xd7, 0x71, 0xa3, 0x5b, 0xed, 0xed, + 0x04, 0x61, 0x10, 0xf8, 0x1d, 0xc7, 0xa5, 0xa3, 0x08, 0x1b, 0x92, 0x8c, 0x75, 0xfb, 0xe1, 0x10, + 0x7e, 0x61, 0x41, 0xf9, 0xb2, 0xaf, 0xa5, 0x7f, 0x23, 0x03, 0x2f, 0x16, 0x6f, 0xe5, 0xab, 0x4a, + 0x92, 0xb1, 0x95, 0x9f, 0x4e, 0xf9, 0xb0, 0x07, 0x0c, 0xd9, 0x35, 0x71, 0xf3, 0xc0, 0x45, 0x5d, + 0xf6, 0xb7, 0x27, 0x3a, 0xa2, 0x5f, 0x16, 0x61, 0xf6, 0x19, 0x32, 0xa4, 0x1e, 0x23, 0x47, 0xb7, + 0xf8, 0x17, 0x61, 0x86, 0x0c, 0x06, 0xae, 0x3a, 0x1d, 0x28, 0xab, 0xfc, 0x8f, 0x62, 0x9f, 0x59, + 0x4e, 0x9a, 0xb0, 0xc9, 0x87, 0x56, 0x61, 0xbe, 0x45, 0x3c, 0x12, 0x0c, 0x65, 0xfe, 0x2d, 0x16, + 0x97, 0x8c, 0x4b, 0x55, 0xd5, 0x77, 0x7e, 0x65, 0xa4, 0x1d, 0x8f, 0xf5, 0x40, 0x97, 0x01, 0xa9, + 0x23, 0xf0, 0x72, 0xab, 0xe5, 0x47, 0x1e, 0x13, 0x72, 0xe4, 0x66, 0x5a, 0x50, 0x72, 0xd0, 0xd5, + 0x31, 0x0e, 0x7c, 0x40, 0x2f, 0xf4, 0x02, 0x54, 0x5b, 0x42, 0xb2, 0x72, 0x2f, 0xa6, 0x44, 0xb9, + 0xe1, 0xce, 0x2a, 0x89, 0xd5, 0x95, 0x09, 0x7c, 0x78, 0xa2, 0x04, 0xae, 0x69, 0xc8, 0xfc, 0x80, + 0x74, 0xa9, 0x29, 0x77, 0x2a, 0xad, 0x69, 0x73, 0x8c, 0x03, 0x1f, 0xd0, 0x0b, 0x7d, 0xcf, 0x82, + 0x32, 0xeb, 0x05, 0x34, 0xec, 0xf9, 0x6e, 0xbb, 0x3a, 0x2d, 0x66, 0x3d, 0x8b, 0xda, 0x87, 0x5a, + 0x03, 0x9b, 0x5a, 0xb4, 0x51, 0x71, 0xd6, 0x24, 0x9c, 0x00, 0xf3, 0x33, 0x59, 0xd8, 0xf2, 0x07, + 0x34, 0xac, 0x96, 0x32, 0xab, 0x69, 0x2a, 0x15, 0x9a, 0x5c, 0xae, 0x71, 0xf7, 0x21, 0x60, 0xb0, + 0x82, 0xb3, 0xff, 0x90, 0x83, 0x8a, 0xc9, 0x78, 0x88, 0x4c, 0xe4, 0x75, 0x0b, 0x2a, 0x0a, 0x5c, + 0x74, 0x51, 0x7b, 0x25, 0x93, 0xc3, 0x2b, 0x97, 0xb7, 0x4a, 0x19, 0x71, 0xdc, 0xc6, 0x69, 0x05, + 0x5d, 0x59, 0x31, 0xb0, 0x70, 0x0a, 0x19, 0xbd, 0x65, 0xc1, 0x49, 0x7a, 0x8b, 0xe7, 0xb2, 0x7d, + 0xea, 0x31, 0xa9, 0x4d, 0xfe, 0x58, 0xb4, 0xb9, 0x4f, 0x69, 0x73, 0xf2, 0x52, 0x1a, 0x0e, 0x8f, + 0xe2, 0xdb, 0xdb, 0x30, 0x3f, 0x3a, 0xf9, 0xdc, 0xa8, 0x03, 0xa2, 0x1c, 0x40, 0x3e, 0x31, 0xea, + 0x06, 0x09, 0x43, 0x2c, 0x5a, 0xd0, 0x23, 0x50, 0xea, 0x93, 0xa0, 0xeb, 0x78, 0xc4, 0x15, 0xf6, + 0xcc, 0x1b, 0x5e, 0x4a, 0xd1, 0x71, 0xcc, 0x61, 0xff, 0xa5, 0x00, 0x33, 0x46, 0x11, 0xe5, 0xf8, + 0x6b, 0xef, 0xa9, 0x62, 0x77, 0x3e, 0xc3, 0x62, 0xf7, 0xf3, 0x00, 0x1d, 0xc7, 0x73, 0xc2, 0xde, + 0x3d, 0x96, 0xd1, 0xc5, 0xb9, 0x6e, 0x2d, 0x96, 0x80, 0x0d, 0x69, 0x49, 0xca, 0x5c, 0x9c, 0x9c, + 0x32, 0xa3, 0x37, 0x2c, 0x23, 0xa2, 0x4c, 0x65, 0x56, 0x36, 0x30, 0x66, 0xa7, 0xa6, 0xc3, 0x8c, + 0xcc, 0x61, 0x3e, 0x2c, 0xfa, 0x6c, 0x42, 0x29, 0xa0, 0x61, 0xd4, 0xa7, 0xcb, 0x4c, 0xf9, 0xa2, + 0xa3, 0xd8, 0xa2, 0xc2, 0xa5, 0x62, 0xd5, 0x1f, 0xc7, 0x92, 0x16, 0x9e, 0x82, 0xd9, 0x94, 0x0a, + 0x47, 0xca, 0x5e, 0x7c, 0x38, 0xb0, 0x5c, 0x77, 0x2f, 0xb9, 0x0c, 0x9f, 0x10, 0xd7, 0xe9, 0x3b, + 0x4c, 0xa0, 0x14, 0x93, 0x09, 0xb9, 0xc2, 0x89, 0x58, 0xb6, 0xd9, 0xff, 0x9a, 0x02, 0x75, 0xfe, + 0x3d, 0x84, 0x2f, 0x32, 0xd3, 0xdc, 0xdc, 0x3d, 0xa4, 0xb9, 0x97, 0xa1, 0xe2, 0x78, 0x0e, 0x73, + 0x88, 0xbb, 0x4a, 0x5d, 0x32, 0x54, 0x61, 0xf3, 0x21, 0xed, 0x7a, 0xd6, 0x8d, 0xb6, 0x03, 0xe4, + 0xa4, 0xfa, 0xa2, 0x1b, 0x50, 0x14, 0x71, 0x45, 0xad, 0xe2, 0xa3, 0x1f, 0xd2, 0x45, 0xa5, 0x66, + 0x85, 0x8b, 0xc0, 0x52, 0x12, 0x8f, 0xec, 0x61, 0xd4, 0x6a, 0xd1, 0x30, 0x5c, 0xf1, 0xbd, 0xb6, + 0xc3, 0x92, 0x84, 0x35, 0x8e, 0xec, 0xcd, 0x91, 0x76, 0x3c, 0xd6, 0x83, 0x4b, 0xe9, 0x10, 0xc7, + 0x8d, 0x02, 0x9a, 0x48, 0x99, 0x4a, 0x4b, 0x59, 0x1b, 0x69, 0xc7, 0x63, 0x3d, 0x50, 0x07, 0x2a, + 0x8a, 0x26, 0xa6, 0x4b, 0xad, 0xcf, 0xa3, 0x8f, 0x72, 0x9e, 0x1b, 0x76, 0xcd, 0x90, 0x84, 0x53, + 0x72, 0x51, 0x04, 0xa7, 0x1c, 0xaf, 0xe5, 0x7b, 0x2d, 0x37, 0x0a, 0x9d, 0x5d, 0x05, 0x56, 0xba, + 0x47, 0xb0, 0x33, 0xfb, 0x7b, 0x4b, 0xa7, 0xd6, 0x47, 0xc5, 0xe1, 0x71, 0x04, 0xf4, 0xaa, 0x05, + 0x67, 0x5a, 0xbe, 0x17, 0xd2, 0x56, 0xc4, 0x9c, 0x5d, 0x7a, 0x29, 0x08, 0xfc, 0x40, 0x62, 0x97, + 0xef, 0x11, 0xfb, 0xfe, 0xfd, 0xbd, 0xa5, 0x33, 0x2b, 0x07, 0x89, 0xc4, 0x07, 0x23, 0xa1, 0x57, + 0xa0, 0x34, 0x08, 0xfc, 0x5d, 0xa7, 0x4d, 0x83, 0x2a, 0x08, 0xd4, 0x1b, 0x99, 0xdd, 0x78, 0x6c, + 0x28, 0xc1, 0x89, 0xff, 0xd1, 0x14, 0x1c, 0x83, 0xda, 0xbf, 0xa9, 0xc0, 0x5c, 0x9a, 0x1d, 0x7d, + 0xd7, 0x02, 0x18, 0x04, 0x7e, 0x9f, 0xb2, 0x1e, 0x8d, 0x42, 0x95, 0x73, 0x67, 0x91, 0x21, 0x6d, + 0xc4, 0x42, 0x75, 0xf5, 0x8b, 0x7b, 0x8e, 0x84, 0x8a, 0x0d, 0x58, 0x74, 0x13, 0xa6, 0x77, 0x64, + 0x50, 0x55, 0xd9, 0xc6, 0x46, 0x76, 0x09, 0x92, 0x82, 0x9f, 0xe1, 0x81, 0x4f, 0x91, 0xb0, 0x46, + 0x43, 0x5d, 0xc8, 0xdf, 0xa4, 0xdb, 0x19, 0xde, 0x14, 0x6c, 0x51, 0x75, 0x94, 0x69, 0x4c, 0xef, + 0xef, 0x2d, 0xe5, 0xb7, 0xe8, 0x36, 0xe6, 0x08, 0x7c, 0x84, 0x6d, 0x79, 0xf0, 0x55, 0xfe, 0x63, + 0x23, 0xeb, 0xa3, 0xb4, 0x1c, 0xa1, 0x22, 0x61, 0x8d, 0x86, 0x5e, 0x81, 0xf2, 0x4d, 0xb2, 0x4b, + 0x3b, 0x81, 0xef, 0x31, 0x55, 0x86, 0xcd, 0xe2, 0xd9, 0xcf, 0x96, 0x96, 0xa9, 0xc0, 0x45, 0x0a, + 0x10, 0x13, 0x71, 0x82, 0x89, 0xbe, 0x09, 0x25, 0x8f, 0xde, 0xc4, 0xd4, 0x75, 0x5a, 0xea, 0x96, + 0x39, 0x8b, 0x55, 0x7f, 0x4d, 0x89, 0x54, 0xf0, 0x22, 0x36, 0x6a, 0x1a, 0x8e, 0x01, 0xf9, 0xfc, + 0xbe, 0xe4, 0x6f, 0x2b, 0x67, 0x96, 0xc5, 0xfc, 0xc6, 0x47, 0x55, 0x39, 0xbf, 0x97, 0xfd, 0x6d, + 0xcc, 0x11, 0xc4, 0x3e, 0x6a, 0xc5, 0x95, 0x40, 0xe5, 0xd0, 0x9a, 0xc7, 0x50, 0x06, 0x95, 0xfb, + 0x28, 0xa1, 0x62, 0x03, 0x96, 0xdb, 0xba, 0xab, 0x0a, 0x02, 0xca, 0xaf, 0x65, 0x61, 0xeb, 0x74, + 0x8d, 0x41, 0xda, 0x5a, 0xd3, 0x70, 0x0c, 0xc8, 0xc1, 0x1d, 0x55, 0x2b, 0xc8, 0xd0, 0xbd, 0xa5, + 0xcb, 0x0f, 0x12, 0x5c, 0xd3, 0x70, 0x0c, 0x28, 0xec, 0x1f, 0xee, 0x0c, 0x6f, 0x12, 0x77, 0xc7, + 0xf1, 0xba, 0xd5, 0x99, 0xcc, 0xec, 0xdf, 0xdc, 0x19, 0x6e, 0x49, 0xa1, 0xa6, 0xfd, 0x13, 0x2a, + 0x36, 0x60, 0xd1, 0x4f, 0x2c, 0x98, 0x1a, 0xb8, 0x51, 0xd7, 0xf1, 0xaa, 0x95, 0xcc, 0x0a, 0x66, + 0x69, 0x8f, 0x5d, 0xdb, 0x10, 0xf2, 0x65, 0xb2, 0xf9, 0x70, 0x5c, 0xf7, 0x17, 0xc4, 0x37, 0xfe, + 0xb8, 0x54, 0xa5, 0x5e, 0xcb, 0x6f, 0x3b, 0x5e, 0xb7, 0xfe, 0x52, 0xe8, 0x7b, 0x35, 0x4c, 0x6e, + 0xea, 0x64, 0x5f, 0x29, 0xb6, 0xf0, 0x04, 0xcc, 0x18, 0x22, 0xee, 0x96, 0x2c, 0x56, 0xcc, 0x64, + 0xf1, 0x57, 0x53, 0x50, 0x31, 0x1f, 0xcd, 0x1c, 0x22, 0x83, 0x8b, 0x8f, 0x2e, 0xb9, 0xa3, 0x1c, + 0x5d, 0xf8, 0x19, 0xd4, 0xb8, 0x2f, 0xd6, 0xe5, 0xc7, 0x6b, 0xd9, 0x66, 0xee, 0xc9, 0x19, 0xd4, + 0x20, 0x86, 0x38, 0x85, 0x6c, 0x9e, 0xa2, 0x0a, 0x77, 0x39, 0x45, 0x9d, 0xd3, 0x19, 0x62, 0x31, + 0x9d, 0xff, 0xa6, 0x72, 0xbe, 0x8b, 0x00, 0x2a, 0x83, 0xeb, 0x44, 0xae, 0x70, 0x88, 0xc5, 0x24, + 0xb1, 0x6e, 0xc6, 0x2d, 0xd8, 0xe0, 0x42, 0x0f, 0xc1, 0x14, 0xcf, 0xa1, 0xa8, 0xac, 0x60, 0x14, + 0x93, 0xd3, 0xfe, 0x9a, 0xa0, 0x62, 0xd5, 0x8a, 0x1e, 0xe7, 0xe9, 0x6e, 0x92, 0xf9, 0x08, 0x2f, + 0x54, 0x4c, 0x46, 0x69, 0x26, 0x4a, 0x38, 0xc5, 0xc9, 0x55, 0xa7, 0x3c, 0x51, 0x11, 0x5e, 0xc3, + 0x50, 0x5d, 0x64, 0x2f, 0x58, 0xb6, 0x89, 0x42, 0xd4, 0x48, 0x62, 0x23, 0x36, 0x7a, 0xd1, 0x28, + 0x44, 0x8d, 0xb4, 0xe3, 0xb1, 0x1e, 0x7c, 0x30, 0xea, 0x45, 0xc4, 0x8c, 0xbc, 0xba, 0x9b, 0xf0, + 0x8c, 0xe1, 0x4d, 0xf3, 0xe4, 0x96, 0xf5, 0x6e, 0x92, 0xeb, 0xf7, 0xf0, 0x47, 0xb7, 0x8f, 0x76, + 0xc8, 0x7a, 0x11, 0xe6, 0xd2, 0xf1, 0x2a, 0xf3, 0x2a, 0xea, 0x6d, 0x0b, 0x2a, 0xe6, 0x25, 0x3d, + 0x7a, 0x04, 0x4a, 0xcc, 0xdf, 0xa1, 0xde, 0xb3, 0x81, 0xbe, 0x20, 0x88, 0x47, 0xb7, 0x29, 0xe8, + 0xf8, 0x0a, 0x8e, 0x39, 0x38, 0x77, 0xcb, 0x75, 0xa8, 0xc7, 0xd6, 0xdb, 0x0a, 0x26, 0xe6, 0x5e, + 0x91, 0xf4, 0x55, 0x1c, 0x73, 0xf0, 0x65, 0x26, 0x7f, 0x37, 0x69, 0x2b, 0xa0, 0xfa, 0x76, 0x31, + 0x29, 0xe8, 0x18, 0x6d, 0x38, 0xc5, 0x89, 0xec, 0xb8, 0x0e, 0x56, 0x38, 0x9b, 0x3f, 0x5f, 0x96, + 0xd7, 0xbb, 0x23, 0x25, 0xab, 0xdf, 0xe7, 0x61, 0x7e, 0x34, 0x79, 0xcc, 0xba, 0xae, 0x8d, 0xde, + 0xb2, 0x60, 0x8e, 0xa4, 0x1e, 0x6b, 0xa8, 0x1c, 0x30, 0x8b, 0x90, 0x95, 0x7e, 0x05, 0xd2, 0xf8, + 0x5f, 0xa5, 0xc1, 0xc8, 0xeb, 0x10, 0x3c, 0xa2, 0x00, 0xfa, 0x0c, 0x4c, 0x33, 0xa7, 0x4f, 0xfd, + 0x48, 0x1e, 0x31, 0xf3, 0x32, 0xa1, 0xdb, 0x94, 0x24, 0xac, 0xdb, 0xf8, 0x5c, 0x39, 0x62, 0x4b, + 0x05, 0xb2, 0xf2, 0x51, 0x4a, 0xe6, 0x6a, 0x5d, 0xd1, 0x71, 0xcc, 0x81, 0xbe, 0x0d, 0xd3, 0x3d, + 0x4a, 0xda, 0x34, 0x08, 0x55, 0xf5, 0x03, 0x67, 0x99, 0xe4, 0x7e, 0x55, 0x88, 0x4e, 0x26, 0x43, + 0x7e, 0x87, 0x58, 0x63, 0xda, 0x7f, 0xb3, 0xc0, 0x78, 0x83, 0x98, 0x78, 0x48, 0xeb, 0xd0, 0x1e, + 0x32, 0x77, 0x44, 0x0f, 0x99, 0x3f, 0x92, 0x87, 0x2c, 0x1c, 0xdd, 0x43, 0x16, 0x27, 0x7b, 0x48, + 0xfb, 0xb7, 0x16, 0xcc, 0x18, 0x65, 0x45, 0xde, 0x49, 0xac, 0x6a, 0xb5, 0x68, 0x93, 0x07, 0x3b, + 0xa2, 0xb6, 0x28, 0xdb, 0xb8, 0xee, 0x01, 0xed, 0x1a, 0x8f, 0x3f, 0xb4, 0xee, 0x58, 0x50, 0xb1, + 0x6a, 0x95, 0x97, 0xf9, 0x74, 0x20, 0x46, 0x98, 0x37, 0x2f, 0xf3, 0xe9, 0x00, 0x8b, 0x16, 0x01, + 0xc7, 0x48, 0xa0, 0x6f, 0xf3, 0x13, 0x38, 0x4e, 0xc4, 0xb2, 0x0d, 0x3d, 0x08, 0x79, 0xea, 0xb5, + 0x55, 0x9d, 0x61, 0x46, 0xb1, 0xe4, 0x2f, 0x79, 0x6d, 0xcc, 0xe9, 0xf6, 0x75, 0xa8, 0xc8, 0xcd, + 0xfa, 0x0c, 0x1d, 0x62, 0xda, 0x39, 0x44, 0x88, 0x7f, 0x50, 0x7a, 0xc2, 0x5c, 0x5a, 0x20, 0xef, + 0xce, 0xe9, 0xf6, 0x9b, 0xdc, 0x26, 0xc9, 0xab, 0x25, 0x63, 0xb8, 0xd6, 0x87, 0x0e, 0xd7, 0x70, + 0x91, 0xb9, 0xbb, 0xb8, 0xc8, 0x0b, 0x30, 0x1d, 0xf8, 0x2e, 0x5d, 0x0e, 0x3c, 0xe5, 0x8b, 0x62, + 0x56, 0xcc, 0xc9, 0xf8, 0x1a, 0xd6, 0xed, 0xf6, 0x4f, 0x2d, 0x98, 0x1f, 0x4d, 0xe9, 0x32, 0xf7, + 0x2e, 0x66, 0xd9, 0x2a, 0x7f, 0xf4, 0xb2, 0x95, 0xfd, 0x46, 0x0e, 0x92, 0x37, 0x66, 0xe8, 0x35, + 0x0b, 0x2a, 0xa1, 0x31, 0x25, 0xea, 0x90, 0x9e, 0xc5, 0x1d, 0x82, 0x39, 0xd3, 0xb2, 0x72, 0x63, + 0x52, 0x70, 0x0a, 0x16, 0x45, 0x50, 0xea, 0xa8, 0xab, 0x4a, 0x75, 0x4a, 0xcf, 0xe2, 0xf5, 0xa4, + 0xbe, 0xfd, 0x94, 0x99, 0xbd, 0xfe, 0xc2, 0x31, 0x94, 0x4d, 0xe0, 0xe4, 0xc8, 0x61, 0x33, 0xf3, + 0x5b, 0xce, 0x0f, 0x0a, 0x50, 0x8e, 0x7d, 0x1a, 0x7a, 0x42, 0xbc, 0x0a, 0xea, 0xf9, 0xfa, 0xc1, + 0xd6, 0xff, 0x1b, 0xcf, 0x76, 0x7a, 0x7e, 0xfb, 0xce, 0xde, 0xd2, 0xc9, 0x98, 0x59, 0x92, 0xb0, + 0xea, 0xc0, 0xb7, 0x42, 0x14, 0xb8, 0xa3, 0x5b, 0x81, 0xc7, 0x5a, 0x4e, 0x37, 0x9d, 0x71, 0xfe, + 0xe3, 0x77, 0xc6, 0x7c, 0x2b, 0x6f, 0xfb, 0xed, 0xe1, 0xe8, 0x5b, 0x9f, 0x86, 0xdf, 0x1e, 0x62, + 0xd1, 0x82, 0x9e, 0x86, 0x39, 0x15, 0x66, 0x9a, 0xb4, 0xe5, 0x7b, 0xed, 0x50, 0xb8, 0x89, 0x7c, + 0x12, 0xc2, 0x36, 0x53, 0xad, 0x78, 0x84, 0x9b, 0xc7, 0x26, 0x7e, 0xec, 0x10, 0x17, 0xd8, 0x53, + 0xe9, 0x3c, 0xe2, 0x72, 0xf3, 0xfa, 0x35, 0x71, 0x7f, 0x1d, 0x73, 0xa4, 0x22, 0xd9, 0xf4, 0x5d, + 0x23, 0xd9, 0xaa, 0x94, 0xcd, 0xb5, 0x15, 0x89, 0x6d, 0xa5, 0x71, 0x5e, 0xcb, 0xe5, 0xb4, 0x3b, + 0x7b, 0x1f, 0x72, 0xf6, 0x89, 0x7b, 0x1e, 0x14, 0xf8, 0xcb, 0x9f, 0x70, 0xe0, 0xb7, 0x9f, 0x85, + 0x93, 0x23, 0x93, 0xa8, 0x7d, 0xaa, 0x75, 0xb0, 0x4f, 0x3d, 0xd4, 0x6b, 0xa1, 0x46, 0xf7, 0xf6, + 0x7b, 0x8b, 0x27, 0xde, 0x79, 0x6f, 0xf1, 0xc4, 0xbb, 0xef, 0x2d, 0x9e, 0xf8, 0xce, 0xfe, 0xa2, + 0x75, 0x7b, 0x7f, 0xd1, 0x7a, 0x67, 0x7f, 0xd1, 0x7a, 0x77, 0x7f, 0xd1, 0xfa, 0xd3, 0xfe, 0xa2, + 0xf5, 0xa3, 0xf7, 0x17, 0x4f, 0x3c, 0xbf, 0xfc, 0x91, 0xff, 0x83, 0xf0, 0x3f, 0x01, 0x00, 0x00, + 0xff, 0xff, 0x7b, 0x0c, 0x2a, 0x92, 0x85, 0x38, 0x00, 0x00, } func (m *AnalysisRun) Marshal() (dAtA []byte, err error) { @@ -2192,6 +2253,96 @@ func (m *CloudWatchMetricStatMetricDimension) MarshalToSizedBuffer(dAtA []byte) return len(dAtA) - i, nil } +func (m *ClusterAnalysisTemplate) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClusterAnalysisTemplate) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterAnalysisTemplate) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ClusterAnalysisTemplateList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClusterAnalysisTemplateList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterAnalysisTemplateList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *DatadogMetric) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -3936,6 +4087,36 @@ func (m *CloudWatchMetricStatMetricDimension) Size() (n int) { return n } +func (m *ClusterAnalysisTemplate) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ClusterAnalysisTemplateList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + func (m *DatadogMetric) Size() (n int) { if m == nil { return 0 @@ -4713,6 +4894,33 @@ func (this *CloudWatchMetricStatMetricDimension) String() string { }, "") return s } +func (this *ClusterAnalysisTemplate) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ClusterAnalysisTemplate{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "AnalysisTemplateSpec", "AnalysisTemplateSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ClusterAnalysisTemplateList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]ClusterAnalysisTemplate{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ClusterAnalysisTemplate", "ClusterAnalysisTemplate", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ClusterAnalysisTemplateList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} func (this *DatadogMetric) String() string { if this == nil { return "nil" @@ -7340,6 +7548,239 @@ func (m *CloudWatchMetricStatMetricDimension) Unmarshal(dAtA []byte) error { } return nil } +func (m *ClusterAnalysisTemplate) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClusterAnalysisTemplate: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClusterAnalysisTemplate: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ClusterAnalysisTemplateList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClusterAnalysisTemplateList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClusterAnalysisTemplateList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, ClusterAnalysisTemplate{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *DatadogMetric) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/internal/controller/rollouts/api/v1alpha1/generated.proto b/internal/controller/rollouts/api/v1alpha1/generated.proto index 59701874f..7456e465c 100644 --- a/internal/controller/rollouts/api/v1alpha1/generated.proto +++ b/internal/controller/rollouts/api/v1alpha1/generated.proto @@ -134,6 +134,18 @@ message CloudWatchMetricStatMetricDimension { optional string value = 2; } +message ClusterAnalysisTemplate { + optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + optional AnalysisTemplateSpec spec = 2; +} + +message ClusterAnalysisTemplateList { + optional .k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + repeated ClusterAnalysisTemplate items = 2; +} + message DatadogMetric { optional string interval = 1; diff --git a/internal/controller/rollouts/api/v1alpha1/groupversion_info.go b/internal/controller/rollouts/api/v1alpha1/groupversion_info.go index bced3e888..dfb672604 100644 --- a/internal/controller/rollouts/api/v1alpha1/groupversion_info.go +++ b/internal/controller/rollouts/api/v1alpha1/groupversion_info.go @@ -24,6 +24,8 @@ func addKnownTypes(scheme *runtime.Scheme) error { GroupVersion, &AnalysisTemplate{}, &AnalysisTemplateList{}, + &ClusterAnalysisTemplate{}, + &ClusterAnalysisTemplateList{}, &AnalysisRun{}, &AnalysisRunList{}, ) diff --git a/internal/controller/rollouts/api/v1alpha1/zz_generated.deepcopy.go b/internal/controller/rollouts/api/v1alpha1/zz_generated.deepcopy.go index c6017630f..b753e9322 100644 --- a/internal/controller/rollouts/api/v1alpha1/zz_generated.deepcopy.go +++ b/internal/controller/rollouts/api/v1alpha1/zz_generated.deepcopy.go @@ -398,6 +398,64 @@ func (in *CloudWatchMetricStatMetricDimension) DeepCopy() *CloudWatchMetricStatM return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterAnalysisTemplate) DeepCopyInto(out *ClusterAnalysisTemplate) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterAnalysisTemplate. +func (in *ClusterAnalysisTemplate) DeepCopy() *ClusterAnalysisTemplate { + if in == nil { + return nil + } + out := new(ClusterAnalysisTemplate) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterAnalysisTemplate) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterAnalysisTemplateList) DeepCopyInto(out *ClusterAnalysisTemplateList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ClusterAnalysisTemplate, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterAnalysisTemplateList. +func (in *ClusterAnalysisTemplateList) DeepCopy() *ClusterAnalysisTemplateList { + if in == nil { + return nil + } + out := new(ClusterAnalysisTemplateList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterAnalysisTemplateList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DatadogMetric) DeepCopyInto(out *DatadogMetric) { *out = *in diff --git a/internal/rollouts/analysis_run_builder.go b/internal/rollouts/analysis_run_builder.go index 43f2972cd..433d9b462 100644 --- a/internal/rollouts/analysis_run_builder.go +++ b/internal/rollouts/analysis_run_builder.go @@ -67,7 +67,7 @@ func (b *AnalysisRunBuilder) Build( opts.ExtraLabels, ) - templates, err := b.getAnalysisTemplates( + analysisTemplates, clusterAnalysisTemplates, err := b.getAnalysisTemplates( ctx, namespace, cfg.AnalysisTemplates, @@ -76,7 +76,9 @@ func (b *AnalysisRunBuilder) Build( return nil, fmt.Errorf("get analysis templates: %w", err) } - spec, err := b.buildSpec(templates, cfg.Args) + analysisTemplateSpecs := combineAnalysisTemplateSpecs(analysisTemplates, clusterAnalysisTemplates) + + spec, err := b.buildSpec(analysisTemplateSpecs, cfg.Args) if err != nil { return nil, fmt.Errorf("build spec: %w", err) } @@ -149,10 +151,10 @@ func (b *AnalysisRunBuilder) buildMetadata( // buildSpec constructs an AnalysisRunSpec from the provided templates and // arguments. func (b *AnalysisRunBuilder) buildSpec( - templates []*rolloutsapi.AnalysisTemplate, + analysisTemplateSpecs []*rolloutsapi.AnalysisTemplateSpec, args []kargoapi.AnalysisRunArgument, ) (rolloutsapi.AnalysisRunSpec, error) { - template, err := flattenTemplates(templates) + template, err := flattenTemplates(analysisTemplateSpecs) if err != nil { return rolloutsapi.AnalysisRunSpec{}, fmt.Errorf("flatten templates: %w", err) } @@ -238,24 +240,54 @@ func (b *AnalysisRunBuilder) getAnalysisTemplates( ctx context.Context, namespace string, references []kargoapi.AnalysisTemplateReference, -) ([]*rolloutsapi.AnalysisTemplate, error) { - templates := make([]*rolloutsapi.AnalysisTemplate, len(references)) - - for i, ref := range references { - template := &rolloutsapi.AnalysisTemplate{} - if err := b.client.Get(ctx, types.NamespacedName{ - Namespace: namespace, - Name: ref.Name, - }, template); err != nil { - return nil, fmt.Errorf( - "get AnalysisRun %q in namespace %q: %w", - ref.Name, - namespace, - err, - ) +) ([]*rolloutsapi.AnalysisTemplate, []*rolloutsapi.ClusterAnalysisTemplate, error) { + analysisTemplates := []*rolloutsapi.AnalysisTemplate{} + clusterAnalysisTemplates := []*rolloutsapi.ClusterAnalysisTemplate{} + for _, ref := range references { + if ref.ClusterScope { + template := &rolloutsapi.ClusterAnalysisTemplate{} + if err := b.client.Get(ctx, types.NamespacedName{ + Name: ref.Name, + }, template); err != nil { + return nil, nil, fmt.Errorf( + "get ClusterAnalysisRun %q: %w", + ref.Name, + err, + ) + } + clusterAnalysisTemplates = append(clusterAnalysisTemplates, template) + } else { + template := &rolloutsapi.AnalysisTemplate{} + if err := b.client.Get(ctx, types.NamespacedName{ + Namespace: namespace, + Name: ref.Name, + }, template); err != nil { + return nil, nil, fmt.Errorf( + "get AnalysisRun %q in namespace %q: %w", + ref.Name, + namespace, + err, + ) + } + analysisTemplates = append(analysisTemplates, template) } - templates[i] = template } - return templates, nil + return analysisTemplates, clusterAnalysisTemplates, nil +} + +// combineAnalysisTemplateSpecs combines the specs of analysis +// templates and cluster analysis templates into one array +func combineAnalysisTemplateSpecs( + analysisTemplates []*rolloutsapi.AnalysisTemplate, + clusterAnalysisTemplates []*rolloutsapi.ClusterAnalysisTemplate, +) []*rolloutsapi.AnalysisTemplateSpec { + templateSpecs := make([]*rolloutsapi.AnalysisTemplateSpec, 0, len(analysisTemplates)+len(clusterAnalysisTemplates)) + for _, template := range analysisTemplates { + templateSpecs = append(templateSpecs, &template.Spec) + } + for _, template := range clusterAnalysisTemplates { + templateSpecs = append(templateSpecs, &template.Spec) + } + return templateSpecs } diff --git a/internal/rollouts/analysis_run_builder_test.go b/internal/rollouts/analysis_run_builder_test.go index 75330bedd..fb99de8ca 100644 --- a/internal/rollouts/analysis_run_builder_test.go +++ b/internal/rollouts/analysis_run_builder_test.go @@ -398,15 +398,15 @@ func TestAnalysisRunBuilder_buildMetadata(t *testing.T) { func TestAnalysisRunBuilder_buildSpec(t *testing.T) { tests := []struct { - name string - templates []*rolloutsapi.AnalysisTemplate - args []kargoapi.AnalysisRunArgument - assertions func(*testing.T, rolloutsapi.AnalysisRunSpec, error) + name string + templateSpecs []*rolloutsapi.AnalysisTemplateSpec + args []kargoapi.AnalysisRunArgument + assertions func(*testing.T, rolloutsapi.AnalysisRunSpec, error) }{ { - name: "empty templates and args", - templates: []*rolloutsapi.AnalysisTemplate{}, - args: []kargoapi.AnalysisRunArgument{}, + name: "empty templates and args", + templateSpecs: []*rolloutsapi.AnalysisTemplateSpec{}, + args: []kargoapi.AnalysisRunArgument{}, assertions: func(t *testing.T, spec rolloutsapi.AnalysisRunSpec, err error) { require.NoError(t, err) assert.Empty(t, spec.Metrics) @@ -417,24 +417,20 @@ func TestAnalysisRunBuilder_buildSpec(t *testing.T) { }, { name: "single template with metrics and args", - templates: []*rolloutsapi.AnalysisTemplate{ - { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Metrics: []rolloutsapi.Metric{ - {Name: "metric1", Provider: rolloutsapi.MetricProvider{Prometheus: &rolloutsapi.PrometheusMetric{}}}, - }, - Args: []rolloutsapi.Argument{ - {Name: "param1"}, - }, - DryRun: []rolloutsapi.DryRun{ - {MetricName: "metric1"}, - }, - MeasurementRetention: []rolloutsapi.MeasurementRetention{ - {MetricName: "metric1", Limit: int32(5)}, - }, - }, + templateSpecs: []*rolloutsapi.AnalysisTemplateSpec{{ + Metrics: []rolloutsapi.Metric{ + {Name: "metric1", Provider: rolloutsapi.MetricProvider{Prometheus: &rolloutsapi.PrometheusMetric{}}}, }, - }, + Args: []rolloutsapi.Argument{ + {Name: "param1"}, + }, + DryRun: []rolloutsapi.DryRun{ + {MetricName: "metric1"}, + }, + MeasurementRetention: []rolloutsapi.MeasurementRetention{ + {MetricName: "metric1", Limit: int32(5)}, + }, + }}, args: []kargoapi.AnalysisRunArgument{ {Name: "param1", Value: "value1"}, }, @@ -459,16 +455,12 @@ func TestAnalysisRunBuilder_buildSpec(t *testing.T) { }, { name: "template flattening error", - templates: []*rolloutsapi.AnalysisTemplate{ + templateSpecs: []*rolloutsapi.AnalysisTemplateSpec{ { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Metrics: []rolloutsapi.Metric{{Name: "metric1"}}, - }, + Metrics: []rolloutsapi.Metric{{Name: "metric1"}}, }, { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Metrics: []rolloutsapi.Metric{{Name: "metric1"}}, - }, + Metrics: []rolloutsapi.Metric{{Name: "metric1"}}, }, }, assertions: func(t *testing.T, _ rolloutsapi.AnalysisRunSpec, err error) { @@ -477,12 +469,10 @@ func TestAnalysisRunBuilder_buildSpec(t *testing.T) { }, { name: "argument error", - templates: []*rolloutsapi.AnalysisTemplate{ + templateSpecs: []*rolloutsapi.AnalysisTemplateSpec{ { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Args: []rolloutsapi.Argument{ - {Name: "param1"}, - }, + Args: []rolloutsapi.Argument{ + {Name: "param1"}, }, }, }, @@ -498,7 +488,7 @@ func TestAnalysisRunBuilder_buildSpec(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { builder := &AnalysisRunBuilder{} - spec, err := builder.buildSpec(tt.templates, tt.args) + spec, err := builder.buildSpec(tt.templateSpecs, tt.args) tt.assertions(t, spec, err) }) } @@ -796,15 +786,15 @@ func TestAnalysisRunBuilder_getAnalysisTemplates(t *testing.T) { namespace string references []kargoapi.AnalysisTemplateReference objects []client.Object - assertions func(*testing.T, []*rolloutsapi.AnalysisTemplate, error) + assertions func(*testing.T, []*rolloutsapi.AnalysisTemplateSpec, error) }{ { name: "empty references", namespace: "default", references: []kargoapi.AnalysisTemplateReference{}, - assertions: func(t *testing.T, templates []*rolloutsapi.AnalysisTemplate, err error) { + assertions: func(t *testing.T, templateSpecs []*rolloutsapi.AnalysisTemplateSpec, err error) { require.NoError(t, err) - assert.Empty(t, templates) + assert.Empty(t, templateSpecs) }, }, { @@ -824,11 +814,10 @@ func TestAnalysisRunBuilder_getAnalysisTemplates(t *testing.T) { }, }, }, - assertions: func(t *testing.T, templates []*rolloutsapi.AnalysisTemplate, err error) { + assertions: func(t *testing.T, templateSpecs []*rolloutsapi.AnalysisTemplateSpec, err error) { require.NoError(t, err) - assert.Len(t, templates, 1) - assert.Equal(t, "template1", templates[0].Name) - assert.Len(t, templates[0].Spec.Metrics, 1) + assert.Len(t, templateSpecs, 1) + assert.Len(t, templateSpecs[0].Metrics, 1) }, }, { @@ -837,9 +826,9 @@ func TestAnalysisRunBuilder_getAnalysisTemplates(t *testing.T) { references: []kargoapi.AnalysisTemplateReference{ {Name: "nonexistent"}, }, - assertions: func(t *testing.T, templates []*rolloutsapi.AnalysisTemplate, err error) { + assertions: func(t *testing.T, templateSpecs []*rolloutsapi.AnalysisTemplateSpec, err error) { assert.ErrorContains(t, err, "get AnalysisRun") - assert.Nil(t, templates) + assert.Equal(t, templateSpecs, []*rolloutsapi.AnalysisTemplateSpec{}) }, }, { @@ -869,11 +858,11 @@ func TestAnalysisRunBuilder_getAnalysisTemplates(t *testing.T) { }, }, }, - assertions: func(t *testing.T, templates []*rolloutsapi.AnalysisTemplate, err error) { + assertions: func(t *testing.T, templateSpecs []*rolloutsapi.AnalysisTemplateSpec, err error) { require.NoError(t, err) - assert.Len(t, templates, 2) - assert.Equal(t, "template1", templates[0].Name) - assert.Equal(t, "template2", templates[1].Name) + assert.Len(t, templateSpecs, 2) + assert.Len(t, templateSpecs[0].Metrics, 1) + assert.Len(t, templateSpecs[1].Metrics, 1) }, }, { @@ -890,9 +879,9 @@ func TestAnalysisRunBuilder_getAnalysisTemplates(t *testing.T) { }, }, }, - assertions: func(t *testing.T, templates []*rolloutsapi.AnalysisTemplate, err error) { + assertions: func(t *testing.T, templateSpecs []*rolloutsapi.AnalysisTemplateSpec, err error) { assert.ErrorContains(t, err, "get AnalysisRun") - assert.Nil(t, templates) + assert.Equal(t, templateSpecs, []*rolloutsapi.AnalysisTemplateSpec{}) }, }, } @@ -905,8 +894,13 @@ func TestAnalysisRunBuilder_getAnalysisTemplates(t *testing.T) { Build() builder := &AnalysisRunBuilder{client: c} - templates, err := builder.getAnalysisTemplates(context.Background(), tt.namespace, tt.references) - tt.assertions(t, templates, err) + analysisTemplates, clusterAnalysisTemplates, err := builder.getAnalysisTemplates( + context.Background(), + tt.namespace, + tt.references, + ) + analysisTemplateSpecs := combineAnalysisTemplateSpecs(analysisTemplates, clusterAnalysisTemplates) + tt.assertions(t, analysisTemplateSpecs, err) }) } } diff --git a/internal/rollouts/analysis_template.go b/internal/rollouts/analysis_template.go index d7281b6cd..22ea4c12b 100644 --- a/internal/rollouts/analysis_template.go +++ b/internal/rollouts/analysis_template.go @@ -9,23 +9,25 @@ import ( // flattenTemplates combines multiple analysis templates into a single // template. It merges metrics, dry-run metrics, measurement retention // metrics, and arguments. -func flattenTemplates(templates []*rolloutsapi.AnalysisTemplate) (*rolloutsapi.AnalysisTemplate, error) { - metrics, err := flattenMetrics(templates) +func flattenTemplates( + analysisTemplateSpecs []*rolloutsapi.AnalysisTemplateSpec, +) (*rolloutsapi.AnalysisTemplate, error) { + metrics, err := flattenMetrics(analysisTemplateSpecs) if err != nil { return nil, fmt.Errorf("flatten metrics: %w", err) } - dryRun, err := flattenDryRunMetrics(templates) + dryRun, err := flattenDryRunMetrics(analysisTemplateSpecs) if err != nil { return nil, fmt.Errorf("flatten dry-run metrics: %w", err) } - retention, err := flattenMeasurementRetentionMetrics(templates) + retention, err := flattenMeasurementRetentionMetrics(analysisTemplateSpecs) if err != nil { return nil, fmt.Errorf("flatten measurement retention metrics: %w", err) } - args, err := flattenArgs(templates) + args, err := flattenArgs(analysisTemplateSpecs) if err != nil { return nil, fmt.Errorf("flatten arguments: %w", err) } @@ -42,12 +44,12 @@ func flattenTemplates(templates []*rolloutsapi.AnalysisTemplate) (*rolloutsapi.A // flattenMetrics combines metrics from multiple templates while ensuring // unique names. -func flattenMetrics(templates []*rolloutsapi.AnalysisTemplate) ([]rolloutsapi.Metric, error) { - metrics := make([]rolloutsapi.Metric, 0, len(templates)) +func flattenMetrics(analysisTemplateSpecs []*rolloutsapi.AnalysisTemplateSpec) ([]rolloutsapi.Metric, error) { + metrics := make([]rolloutsapi.Metric, 0, len(analysisTemplateSpecs)) seen := make(map[string]struct{}) - for _, tmpl := range templates { - for _, metric := range tmpl.Spec.Metrics { + for _, analysisTmplSpec := range analysisTemplateSpecs { + for _, metric := range analysisTmplSpec.Metrics { if _, exists := seen[metric.Name]; exists { return nil, fmt.Errorf("duplicate metric name: %q", metric.Name) } @@ -60,11 +62,11 @@ func flattenMetrics(templates []*rolloutsapi.AnalysisTemplate) ([]rolloutsapi.Me } // flattenDryRunMetrics combines dry-run metrics from multiple templates. -func flattenDryRunMetrics(templates []*rolloutsapi.AnalysisTemplate) ([]rolloutsapi.DryRun, error) { - dryRun := make([]rolloutsapi.DryRun, 0, len(templates)) +func flattenDryRunMetrics(analysisTemplateSpecs []*rolloutsapi.AnalysisTemplateSpec) ([]rolloutsapi.DryRun, error) { + dryRun := make([]rolloutsapi.DryRun, 0, len(analysisTemplateSpecs)) - for _, tmpl := range templates { - dryRun = append(dryRun, tmpl.Spec.DryRun...) + for _, tmplSpec := range analysisTemplateSpecs { + dryRun = append(dryRun, tmplSpec.DryRun...) } if err := validateUniqueDryRunMetrics(dryRun); err != nil { @@ -77,12 +79,12 @@ func flattenDryRunMetrics(templates []*rolloutsapi.AnalysisTemplate) ([]rollouts // flattenMeasurementRetentionMetrics combines measurement retention metrics // from multiple templates. func flattenMeasurementRetentionMetrics( - templates []*rolloutsapi.AnalysisTemplate, + analysisTemplateSpecs []*rolloutsapi.AnalysisTemplateSpec, ) ([]rolloutsapi.MeasurementRetention, error) { - retention := make([]rolloutsapi.MeasurementRetention, 0, len(templates)) + retention := make([]rolloutsapi.MeasurementRetention, 0, len(analysisTemplateSpecs)) - for _, tmpl := range templates { - retention = append(retention, tmpl.Spec.MeasurementRetention...) + for _, tmplSpec := range analysisTemplateSpecs { + retention = append(retention, tmplSpec.MeasurementRetention...) } if err := validateUniqueMeasurementRetentionMetrics(retention); err != nil { @@ -94,7 +96,7 @@ func flattenMeasurementRetentionMetrics( // flattenArgs combines arguments from multiple templates, handling conflicts // and updates. -func flattenArgs(templates []*rolloutsapi.AnalysisTemplate) ([]rolloutsapi.Argument, error) { +func flattenArgs(analysisTemplateSpecs []*rolloutsapi.AnalysisTemplateSpec) ([]rolloutsapi.Argument, error) { var combinedArgs []rolloutsapi.Argument updateOrAppend := func(newArg rolloutsapi.Argument) error { @@ -111,8 +113,8 @@ func flattenArgs(templates []*rolloutsapi.AnalysisTemplate) ([]rolloutsapi.Argum return nil } - for _, tmpl := range templates { - for _, arg := range tmpl.Spec.Args { + for _, tmplSpec := range analysisTemplateSpecs { + for _, arg := range tmplSpec.Args { if err := updateOrAppend(arg); err != nil { return nil, err } diff --git a/internal/rollouts/analysis_template_test.go b/internal/rollouts/analysis_template_test.go index 7446509ea..2911cf888 100644 --- a/internal/rollouts/analysis_template_test.go +++ b/internal/rollouts/analysis_template_test.go @@ -12,13 +12,13 @@ import ( func Test_flattenTemplates(t *testing.T) { tests := []struct { - name string - templates []*rolloutsapi.AnalysisTemplate - assertions func(*testing.T, *rolloutsapi.AnalysisTemplate, error) + name string + templateSpecs []*rolloutsapi.AnalysisTemplateSpec + assertions func(*testing.T, *rolloutsapi.AnalysisTemplate, error) }{ { - name: "handle nil templates", - templates: nil, + name: "handle nil templates", + templateSpecs: nil, assertions: func(t *testing.T, template *rolloutsapi.AnalysisTemplate, err error) { require.NoError(t, err) require.NotNil(t, template) @@ -29,8 +29,8 @@ func Test_flattenTemplates(t *testing.T) { }, }, { - name: "handle empty list", - templates: []*rolloutsapi.AnalysisTemplate{}, + name: "handle empty list", + templateSpecs: []*rolloutsapi.AnalysisTemplateSpec{}, assertions: func(t *testing.T, template *rolloutsapi.AnalysisTemplate, err error) { require.NoError(t, err) require.Empty(t, template.Spec.Metrics) @@ -39,20 +39,18 @@ func Test_flattenTemplates(t *testing.T) { }, { name: "no changes on single template", - templates: []*rolloutsapi.AnalysisTemplate{ + templateSpecs: []*rolloutsapi.AnalysisTemplateSpec{ { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Metrics: []rolloutsapi.Metric{ - { - Name: "foo", - SuccessCondition: "{{args.test}}", - }, + Metrics: []rolloutsapi.Metric{ + { + Name: "foo", + SuccessCondition: "{{args.test}}", }, - Args: []rolloutsapi.Argument{ - { - Name: "test", - Value: ptr.To("true"), - }, + }, + Args: []rolloutsapi.Argument{ + { + Name: "test", + Value: ptr.To("true"), }, }, }, @@ -71,46 +69,42 @@ func Test_flattenTemplates(t *testing.T) { }, { name: "merge multiple metrics", - templates: []*rolloutsapi.AnalysisTemplate{ + templateSpecs: []*rolloutsapi.AnalysisTemplateSpec{ { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Metrics: []rolloutsapi.Metric{ - { - Name: "foo", - SuccessCondition: "true", - }, + Metrics: []rolloutsapi.Metric{ + { + Name: "foo", + SuccessCondition: "true", }, - DryRun: []rolloutsapi.DryRun{ - { - MetricName: "foo", - }, + }, + DryRun: []rolloutsapi.DryRun{ + { + MetricName: "foo", }, - MeasurementRetention: []rolloutsapi.MeasurementRetention{ - { - MetricName: "foo", - Limit: int32(5), - }, + }, + MeasurementRetention: []rolloutsapi.MeasurementRetention{ + { + MetricName: "foo", + Limit: int32(5), }, }, }, { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Metrics: []rolloutsapi.Metric{ - { - Name: "bar", - SuccessCondition: "true", - }, + Metrics: []rolloutsapi.Metric{ + { + Name: "bar", + SuccessCondition: "true", }, - DryRun: []rolloutsapi.DryRun{ - { - MetricName: "bar", - }, + }, + DryRun: []rolloutsapi.DryRun{ + { + MetricName: "bar", }, - MeasurementRetention: []rolloutsapi.MeasurementRetention{ - { - MetricName: "bar", - Limit: int32(10), - }, + }, + MeasurementRetention: []rolloutsapi.MeasurementRetention{ + { + MetricName: "bar", + Limit: int32(10), }, }, }, @@ -149,24 +143,20 @@ func Test_flattenTemplates(t *testing.T) { }, { name: "merge fail with metric name collision", - templates: []*rolloutsapi.AnalysisTemplate{ + templateSpecs: []*rolloutsapi.AnalysisTemplateSpec{ { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Metrics: []rolloutsapi.Metric{ - { - Name: "foo", - SuccessCondition: "true", - }, + Metrics: []rolloutsapi.Metric{ + { + Name: "foo", + SuccessCondition: "true", }, }, }, { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Metrics: []rolloutsapi.Metric{ - { - Name: "foo", - SuccessCondition: "false", - }, + Metrics: []rolloutsapi.Metric{ + { + Name: "foo", + SuccessCondition: "false", }, }, }, @@ -178,34 +168,30 @@ func Test_flattenTemplates(t *testing.T) { }, { name: "merge fail with dry-run name collision", - templates: []*rolloutsapi.AnalysisTemplate{ + templateSpecs: []*rolloutsapi.AnalysisTemplateSpec{ { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Metrics: []rolloutsapi.Metric{ - { - Name: "foo", - SuccessCondition: "true", - }, + Metrics: []rolloutsapi.Metric{ + { + Name: "foo", + SuccessCondition: "true", }, - DryRun: []rolloutsapi.DryRun{ - { - MetricName: "metric1", - }, + }, + DryRun: []rolloutsapi.DryRun{ + { + MetricName: "metric1", }, }, }, { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Metrics: []rolloutsapi.Metric{ - { - Name: "bar", - SuccessCondition: "true", - }, + Metrics: []rolloutsapi.Metric{ + { + Name: "bar", + SuccessCondition: "true", }, - DryRun: []rolloutsapi.DryRun{ - { - MetricName: "metric1", - }, + }, + DryRun: []rolloutsapi.DryRun{ + { + MetricName: "metric1", }, }, }, @@ -217,24 +203,20 @@ func Test_flattenTemplates(t *testing.T) { }, { name: "merge fail with measurement retention name collision", - templates: []*rolloutsapi.AnalysisTemplate{ + templateSpecs: []*rolloutsapi.AnalysisTemplateSpec{ { - Spec: rolloutsapi.AnalysisTemplateSpec{ - MeasurementRetention: []rolloutsapi.MeasurementRetention{ - { - MetricName: "metric1", - Limit: int32(0), - }, + MeasurementRetention: []rolloutsapi.MeasurementRetention{ + { + MetricName: "metric1", + Limit: int32(0), }, }, }, { - Spec: rolloutsapi.AnalysisTemplateSpec{ - MeasurementRetention: []rolloutsapi.MeasurementRetention{ - { - MetricName: "metric1", - Limit: int32(0), - }, + MeasurementRetention: []rolloutsapi.MeasurementRetention{ + { + MetricName: "metric1", + Limit: int32(0), }, }, }, @@ -246,24 +228,20 @@ func Test_flattenTemplates(t *testing.T) { }, { name: "merge fail with argument error", - templates: []*rolloutsapi.AnalysisTemplate{ + templateSpecs: []*rolloutsapi.AnalysisTemplateSpec{ { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Args: []rolloutsapi.Argument{ - { - Name: "foo", - Value: ptr.To("value1"), - }, + Args: []rolloutsapi.Argument{ + { + Name: "foo", + Value: ptr.To("value1"), }, }, }, { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Args: []rolloutsapi.Argument{ - { - Name: "foo", - Value: ptr.To("value2"), - }, + Args: []rolloutsapi.Argument{ + { + Name: "foo", + Value: ptr.To("value2"), }, }, }, @@ -278,7 +256,7 @@ func Test_flattenTemplates(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - result, err := flattenTemplates(tt.templates) + result, err := flattenTemplates(tt.templateSpecs) tt.assertions(t, result, err) }) } @@ -399,30 +377,26 @@ func Test_mergeArgs(t *testing.T) { func Test_flattenArgs(t *testing.T) { tests := []struct { - name string - templates []*rolloutsapi.AnalysisTemplate - assertions func(*testing.T, []rolloutsapi.Argument, error) + name string + templateSpecs []*rolloutsapi.AnalysisTemplateSpec + assertions func(*testing.T, []rolloutsapi.Argument, error) }{ { name: "merge multiple args", - templates: []*rolloutsapi.AnalysisTemplate{ + templateSpecs: []*rolloutsapi.AnalysisTemplateSpec{ { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Args: []rolloutsapi.Argument{ - { - Name: "foo", - Value: ptr.To("true"), - }, + Args: []rolloutsapi.Argument{ + { + Name: "foo", + Value: ptr.To("true"), }, }, }, { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Args: []rolloutsapi.Argument{ - { - Name: "bar", - Value: ptr.To("false"), - }, + Args: []rolloutsapi.Argument{ + { + Name: "bar", + Value: ptr.To("false"), }, }, }, @@ -442,24 +416,20 @@ func Test_flattenArgs(t *testing.T) { }, { name: "merge args with same name but only one has value", - templates: []*rolloutsapi.AnalysisTemplate{ + templateSpecs: []*rolloutsapi.AnalysisTemplateSpec{ { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Args: []rolloutsapi.Argument{ - { - Name: "foo", - Value: ptr.To("value"), - }, + Args: []rolloutsapi.Argument{ + { + Name: "foo", + Value: ptr.To("value"), }, }, }, { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Args: []rolloutsapi.Argument{ - { - Name: "foo", - Value: nil, - }, + Args: []rolloutsapi.Argument{ + { + Name: "foo", + Value: nil, }, }, }, @@ -475,24 +445,20 @@ func Test_flattenArgs(t *testing.T) { }, { name: "error when merging args with same name but different values", - templates: []*rolloutsapi.AnalysisTemplate{ + templateSpecs: []*rolloutsapi.AnalysisTemplateSpec{ { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Args: []rolloutsapi.Argument{ - { - Name: "foo", - Value: ptr.To("true"), - }, + Args: []rolloutsapi.Argument{ + { + Name: "foo", + Value: ptr.To("true"), }, }, }, { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Args: []rolloutsapi.Argument{ - { - Name: "foo", - Value: ptr.To("false"), - }, + Args: []rolloutsapi.Argument{ + { + Name: "foo", + Value: ptr.To("false"), }, }, }, @@ -503,20 +469,16 @@ func Test_flattenArgs(t *testing.T) { }, }, { - name: "nil args in templates", - templates: []*rolloutsapi.AnalysisTemplate{ + name: "nil args in templateSpecs", + templateSpecs: []*rolloutsapi.AnalysisTemplateSpec{ { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Args: nil, - }, + Args: nil, }, { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Args: []rolloutsapi.Argument{ - { - Name: "foo", - Value: ptr.To("value"), - }, + Args: []rolloutsapi.Argument{ + { + Name: "foo", + Value: ptr.To("value"), }, }, }, @@ -531,20 +493,16 @@ func Test_flattenArgs(t *testing.T) { }, }, { - name: "empty args slice in templates", - templates: []*rolloutsapi.AnalysisTemplate{ + name: "empty args slice in templateSpecs", + templateSpecs: []*rolloutsapi.AnalysisTemplateSpec{ { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Args: []rolloutsapi.Argument{}, - }, + Args: []rolloutsapi.Argument{}, }, { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Args: []rolloutsapi.Argument{ - { - Name: "foo", - Value: ptr.To("value"), - }, + Args: []rolloutsapi.Argument{ + { + Name: "foo", + Value: ptr.To("value"), }, }, }, @@ -560,18 +518,16 @@ func Test_flattenArgs(t *testing.T) { }, { name: "handle argument with both value and valueFrom", - templates: []*rolloutsapi.AnalysisTemplate{ + templateSpecs: []*rolloutsapi.AnalysisTemplateSpec{ { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Args: []rolloutsapi.Argument{ - { - Name: "foo", - Value: ptr.To("value"), - ValueFrom: &rolloutsapi.ValueFrom{ - SecretKeyRef: &rolloutsapi.SecretKeyRef{ - Name: "secret1", - Key: "key1", - }, + Args: []rolloutsapi.Argument{ + { + Name: "foo", + Value: ptr.To("value"), + ValueFrom: &rolloutsapi.ValueFrom{ + SecretKeyRef: &rolloutsapi.SecretKeyRef{ + Name: "secret1", + Key: "key1", }, }, }, @@ -595,29 +551,25 @@ func Test_flattenArgs(t *testing.T) { }, { name: "merge args with ValueFrom", - templates: []*rolloutsapi.AnalysisTemplate{ + templateSpecs: []*rolloutsapi.AnalysisTemplateSpec{ { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Args: []rolloutsapi.Argument{ - { - Name: "foo", - ValueFrom: &rolloutsapi.ValueFrom{ - SecretKeyRef: &rolloutsapi.SecretKeyRef{ - Name: "secret1", - Key: "key1", - }, + Args: []rolloutsapi.Argument{ + { + Name: "foo", + ValueFrom: &rolloutsapi.ValueFrom{ + SecretKeyRef: &rolloutsapi.SecretKeyRef{ + Name: "secret1", + Key: "key1", }, }, }, }, }, { - Spec: rolloutsapi.AnalysisTemplateSpec{ - Args: []rolloutsapi.Argument{ - { - Name: "foo", - Value: nil, - }, + Args: []rolloutsapi.Argument{ + { + Name: "foo", + Value: nil, }, }, }, @@ -640,7 +592,7 @@ func Test_flattenArgs(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - result, err := flattenArgs(tt.templates) + result, err := flattenArgs(tt.templateSpecs) tt.assertions(t, result, err) }) } diff --git a/pkg/api/service/v1alpha1/service.pb.go b/pkg/api/service/v1alpha1/service.pb.go index 365ce61e3..d04865c48 100644 --- a/pkg/api/service/v1alpha1/service.pb.go +++ b/pkg/api/service/v1alpha1/service.pb.go @@ -5565,6 +5565,228 @@ func (*GetAnalysisTemplateResponse_AnalysisTemplate) isGetAnalysisTemplateRespon func (*GetAnalysisTemplateResponse_Raw) isGetAnalysisTemplateResponse_Result() {} +type ListClusterAnalysisTemplatesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ListClusterAnalysisTemplatesRequest) Reset() { + *x = ListClusterAnalysisTemplatesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_service_v1alpha1_service_proto_msgTypes[97] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListClusterAnalysisTemplatesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListClusterAnalysisTemplatesRequest) ProtoMessage() {} + +func (x *ListClusterAnalysisTemplatesRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[97] + 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 ListClusterAnalysisTemplatesRequest.ProtoReflect.Descriptor instead. +func (*ListClusterAnalysisTemplatesRequest) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{97} +} + +type ListClusterAnalysisTemplatesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ClusterAnalysisTemplates []*v1alpha11.ClusterAnalysisTemplate `protobuf:"bytes,1,rep,name=cluster_analysis_templates,json=clusteranalysisTemplates,proto3" json:"cluster_analysis_templates,omitempty"` +} + +func (x *ListClusterAnalysisTemplatesResponse) Reset() { + *x = ListClusterAnalysisTemplatesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_service_v1alpha1_service_proto_msgTypes[98] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListClusterAnalysisTemplatesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListClusterAnalysisTemplatesResponse) ProtoMessage() {} + +func (x *ListClusterAnalysisTemplatesResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[98] + 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 ListClusterAnalysisTemplatesResponse.ProtoReflect.Descriptor instead. +func (*ListClusterAnalysisTemplatesResponse) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{98} +} + +func (x *ListClusterAnalysisTemplatesResponse) GetClusterAnalysisTemplates() []*v1alpha11.ClusterAnalysisTemplate { + if x != nil { + return x.ClusterAnalysisTemplates + } + return nil +} + +type GetClusterAnalysisTemplateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Format RawFormat `protobuf:"varint,3,opt,name=format,proto3,enum=akuity.io.kargo.service.v1alpha1.RawFormat" json:"format,omitempty"` +} + +func (x *GetClusterAnalysisTemplateRequest) Reset() { + *x = GetClusterAnalysisTemplateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_service_v1alpha1_service_proto_msgTypes[99] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetClusterAnalysisTemplateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetClusterAnalysisTemplateRequest) ProtoMessage() {} + +func (x *GetClusterAnalysisTemplateRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[99] + 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 GetClusterAnalysisTemplateRequest.ProtoReflect.Descriptor instead. +func (*GetClusterAnalysisTemplateRequest) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{99} +} + +func (x *GetClusterAnalysisTemplateRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GetClusterAnalysisTemplateRequest) GetFormat() RawFormat { + if x != nil { + return x.Format + } + return RawFormat_RAW_FORMAT_UNSPECIFIED +} + +type GetClusterAnalysisTemplateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Result: + // + // *GetClusterAnalysisTemplateResponse_ClusterAnalysisTemplate + // *GetClusterAnalysisTemplateResponse_Raw + Result isGetClusterAnalysisTemplateResponse_Result `protobuf_oneof:"result"` +} + +func (x *GetClusterAnalysisTemplateResponse) Reset() { + *x = GetClusterAnalysisTemplateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_service_v1alpha1_service_proto_msgTypes[100] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetClusterAnalysisTemplateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetClusterAnalysisTemplateResponse) ProtoMessage() {} + +func (x *GetClusterAnalysisTemplateResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[100] + 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 GetClusterAnalysisTemplateResponse.ProtoReflect.Descriptor instead. +func (*GetClusterAnalysisTemplateResponse) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{100} +} + +func (m *GetClusterAnalysisTemplateResponse) GetResult() isGetClusterAnalysisTemplateResponse_Result { + if m != nil { + return m.Result + } + return nil +} + +func (x *GetClusterAnalysisTemplateResponse) GetClusterAnalysisTemplate() *v1alpha11.ClusterAnalysisTemplate { + if x, ok := x.GetResult().(*GetClusterAnalysisTemplateResponse_ClusterAnalysisTemplate); ok { + return x.ClusterAnalysisTemplate + } + return nil +} + +func (x *GetClusterAnalysisTemplateResponse) GetRaw() []byte { + if x, ok := x.GetResult().(*GetClusterAnalysisTemplateResponse_Raw); ok { + return x.Raw + } + return nil +} + +type isGetClusterAnalysisTemplateResponse_Result interface { + isGetClusterAnalysisTemplateResponse_Result() +} + +type GetClusterAnalysisTemplateResponse_ClusterAnalysisTemplate struct { + ClusterAnalysisTemplate *v1alpha11.ClusterAnalysisTemplate `protobuf:"bytes,1,opt,name=cluster_analysis_template,json=clusterAnalysisTemplate,proto3,oneof"` +} + +type GetClusterAnalysisTemplateResponse_Raw struct { + Raw []byte `protobuf:"bytes,2,opt,name=raw,proto3,oneof"` +} + +func (*GetClusterAnalysisTemplateResponse_ClusterAnalysisTemplate) isGetClusterAnalysisTemplateResponse_Result() { +} + +func (*GetClusterAnalysisTemplateResponse_Raw) isGetClusterAnalysisTemplateResponse_Result() {} + type GetAnalysisRunRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5578,7 +5800,7 @@ type GetAnalysisRunRequest struct { func (x *GetAnalysisRunRequest) Reset() { *x = GetAnalysisRunRequest{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[97] + mi := &file_service_v1alpha1_service_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5591,7 +5813,7 @@ func (x *GetAnalysisRunRequest) String() string { func (*GetAnalysisRunRequest) ProtoMessage() {} func (x *GetAnalysisRunRequest) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[97] + mi := &file_service_v1alpha1_service_proto_msgTypes[101] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5604,7 +5826,7 @@ func (x *GetAnalysisRunRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAnalysisRunRequest.ProtoReflect.Descriptor instead. func (*GetAnalysisRunRequest) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{97} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{101} } func (x *GetAnalysisRunRequest) GetNamespace() string { @@ -5643,7 +5865,7 @@ type GetAnalysisRunResponse struct { func (x *GetAnalysisRunResponse) Reset() { *x = GetAnalysisRunResponse{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[98] + mi := &file_service_v1alpha1_service_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5656,7 +5878,7 @@ func (x *GetAnalysisRunResponse) String() string { func (*GetAnalysisRunResponse) ProtoMessage() {} func (x *GetAnalysisRunResponse) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[98] + mi := &file_service_v1alpha1_service_proto_msgTypes[102] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5669,7 +5891,7 @@ func (x *GetAnalysisRunResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAnalysisRunResponse.ProtoReflect.Descriptor instead. func (*GetAnalysisRunResponse) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{98} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{102} } func (m *GetAnalysisRunResponse) GetResult() isGetAnalysisRunResponse_Result { @@ -5721,7 +5943,7 @@ type DeleteAnalysisTemplateRequest struct { func (x *DeleteAnalysisTemplateRequest) Reset() { *x = DeleteAnalysisTemplateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[99] + mi := &file_service_v1alpha1_service_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5734,7 +5956,7 @@ func (x *DeleteAnalysisTemplateRequest) String() string { func (*DeleteAnalysisTemplateRequest) ProtoMessage() {} func (x *DeleteAnalysisTemplateRequest) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[99] + mi := &file_service_v1alpha1_service_proto_msgTypes[103] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5747,7 +5969,7 @@ func (x *DeleteAnalysisTemplateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteAnalysisTemplateRequest.ProtoReflect.Descriptor instead. func (*DeleteAnalysisTemplateRequest) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{99} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{103} } func (x *DeleteAnalysisTemplateRequest) GetProject() string { @@ -5773,7 +5995,7 @@ type DeleteAnalysisTemplateResponse struct { func (x *DeleteAnalysisTemplateResponse) Reset() { *x = DeleteAnalysisTemplateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[100] + mi := &file_service_v1alpha1_service_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5786,7 +6008,7 @@ func (x *DeleteAnalysisTemplateResponse) String() string { func (*DeleteAnalysisTemplateResponse) ProtoMessage() {} func (x *DeleteAnalysisTemplateResponse) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[100] + mi := &file_service_v1alpha1_service_proto_msgTypes[104] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5799,7 +6021,92 @@ func (x *DeleteAnalysisTemplateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteAnalysisTemplateResponse.ProtoReflect.Descriptor instead. func (*DeleteAnalysisTemplateResponse) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{100} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{104} +} + +type DeleteClusterAnalysisTemplateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *DeleteClusterAnalysisTemplateRequest) Reset() { + *x = DeleteClusterAnalysisTemplateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_service_v1alpha1_service_proto_msgTypes[105] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteClusterAnalysisTemplateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteClusterAnalysisTemplateRequest) ProtoMessage() {} + +func (x *DeleteClusterAnalysisTemplateRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[105] + 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 DeleteClusterAnalysisTemplateRequest.ProtoReflect.Descriptor instead. +func (*DeleteClusterAnalysisTemplateRequest) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{105} +} + +func (x *DeleteClusterAnalysisTemplateRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type DeleteClusterAnalysisTemplateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *DeleteClusterAnalysisTemplateResponse) Reset() { + *x = DeleteClusterAnalysisTemplateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_service_v1alpha1_service_proto_msgTypes[106] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteClusterAnalysisTemplateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteClusterAnalysisTemplateResponse) ProtoMessage() {} + +func (x *DeleteClusterAnalysisTemplateResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[106] + 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 DeleteClusterAnalysisTemplateResponse.ProtoReflect.Descriptor instead. +func (*DeleteClusterAnalysisTemplateResponse) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{106} } type ListProjectEventsRequest struct { @@ -5813,7 +6120,7 @@ type ListProjectEventsRequest struct { func (x *ListProjectEventsRequest) Reset() { *x = ListProjectEventsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[101] + mi := &file_service_v1alpha1_service_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5826,7 +6133,7 @@ func (x *ListProjectEventsRequest) String() string { func (*ListProjectEventsRequest) ProtoMessage() {} func (x *ListProjectEventsRequest) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[101] + mi := &file_service_v1alpha1_service_proto_msgTypes[107] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5839,7 +6146,7 @@ func (x *ListProjectEventsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListProjectEventsRequest.ProtoReflect.Descriptor instead. func (*ListProjectEventsRequest) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{101} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{107} } func (x *ListProjectEventsRequest) GetProject() string { @@ -5860,7 +6167,7 @@ type ListProjectEventsResponse struct { func (x *ListProjectEventsResponse) Reset() { *x = ListProjectEventsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[102] + mi := &file_service_v1alpha1_service_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5873,7 +6180,7 @@ func (x *ListProjectEventsResponse) String() string { func (*ListProjectEventsResponse) ProtoMessage() {} func (x *ListProjectEventsResponse) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[102] + mi := &file_service_v1alpha1_service_proto_msgTypes[108] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5886,7 +6193,7 @@ func (x *ListProjectEventsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListProjectEventsResponse.ProtoReflect.Descriptor instead. func (*ListProjectEventsResponse) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{102} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{108} } func (x *ListProjectEventsResponse) GetEvents() []*v1.Event { @@ -5907,7 +6214,7 @@ type CreateRoleRequest struct { func (x *CreateRoleRequest) Reset() { *x = CreateRoleRequest{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[103] + mi := &file_service_v1alpha1_service_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5920,7 +6227,7 @@ func (x *CreateRoleRequest) String() string { func (*CreateRoleRequest) ProtoMessage() {} func (x *CreateRoleRequest) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[103] + mi := &file_service_v1alpha1_service_proto_msgTypes[109] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5933,7 +6240,7 @@ func (x *CreateRoleRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateRoleRequest.ProtoReflect.Descriptor instead. func (*CreateRoleRequest) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{103} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{109} } func (x *CreateRoleRequest) GetRole() *v1alpha12.Role { @@ -5954,7 +6261,7 @@ type CreateRoleResponse struct { func (x *CreateRoleResponse) Reset() { *x = CreateRoleResponse{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[104] + mi := &file_service_v1alpha1_service_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5967,7 +6274,7 @@ func (x *CreateRoleResponse) String() string { func (*CreateRoleResponse) ProtoMessage() {} func (x *CreateRoleResponse) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[104] + mi := &file_service_v1alpha1_service_proto_msgTypes[110] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5980,7 +6287,7 @@ func (x *CreateRoleResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateRoleResponse.ProtoReflect.Descriptor instead. func (*CreateRoleResponse) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{104} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{110} } func (x *CreateRoleResponse) GetRole() *v1alpha12.Role { @@ -6002,7 +6309,7 @@ type DeleteRoleRequest struct { func (x *DeleteRoleRequest) Reset() { *x = DeleteRoleRequest{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[105] + mi := &file_service_v1alpha1_service_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6015,7 +6322,7 @@ func (x *DeleteRoleRequest) String() string { func (*DeleteRoleRequest) ProtoMessage() {} func (x *DeleteRoleRequest) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[105] + mi := &file_service_v1alpha1_service_proto_msgTypes[111] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6028,7 +6335,7 @@ func (x *DeleteRoleRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteRoleRequest.ProtoReflect.Descriptor instead. func (*DeleteRoleRequest) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{105} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{111} } func (x *DeleteRoleRequest) GetProject() string { @@ -6054,7 +6361,7 @@ type DeleteRoleResponse struct { func (x *DeleteRoleResponse) Reset() { *x = DeleteRoleResponse{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[106] + mi := &file_service_v1alpha1_service_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6067,7 +6374,7 @@ func (x *DeleteRoleResponse) String() string { func (*DeleteRoleResponse) ProtoMessage() {} func (x *DeleteRoleResponse) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[106] + mi := &file_service_v1alpha1_service_proto_msgTypes[112] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6080,7 +6387,7 @@ func (x *DeleteRoleResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteRoleResponse.ProtoReflect.Descriptor instead. func (*DeleteRoleResponse) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{106} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{112} } type GetRoleRequest struct { @@ -6097,7 +6404,7 @@ type GetRoleRequest struct { func (x *GetRoleRequest) Reset() { *x = GetRoleRequest{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[107] + mi := &file_service_v1alpha1_service_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6110,7 +6417,7 @@ func (x *GetRoleRequest) String() string { func (*GetRoleRequest) ProtoMessage() {} func (x *GetRoleRequest) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[107] + mi := &file_service_v1alpha1_service_proto_msgTypes[113] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6123,7 +6430,7 @@ func (x *GetRoleRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRoleRequest.ProtoReflect.Descriptor instead. func (*GetRoleRequest) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{107} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{113} } func (x *GetRoleRequest) GetProject() string { @@ -6170,7 +6477,7 @@ type GetRoleResponse struct { func (x *GetRoleResponse) Reset() { *x = GetRoleResponse{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[108] + mi := &file_service_v1alpha1_service_proto_msgTypes[114] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6183,7 +6490,7 @@ func (x *GetRoleResponse) String() string { func (*GetRoleResponse) ProtoMessage() {} func (x *GetRoleResponse) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[108] + mi := &file_service_v1alpha1_service_proto_msgTypes[114] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6196,7 +6503,7 @@ func (x *GetRoleResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRoleResponse.ProtoReflect.Descriptor instead. func (*GetRoleResponse) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{108} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{114} } func (m *GetRoleResponse) GetResult() isGetRoleResponse_Result { @@ -6261,7 +6568,7 @@ type Claims struct { func (x *Claims) Reset() { *x = Claims{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[109] + mi := &file_service_v1alpha1_service_proto_msgTypes[115] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6274,7 +6581,7 @@ func (x *Claims) String() string { func (*Claims) ProtoMessage() {} func (x *Claims) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[109] + mi := &file_service_v1alpha1_service_proto_msgTypes[115] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6287,7 +6594,7 @@ func (x *Claims) ProtoReflect() protoreflect.Message { // Deprecated: Use Claims.ProtoReflect.Descriptor instead. func (*Claims) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{109} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{115} } func (x *Claims) GetClaims() []*v1alpha12.Claim { @@ -6314,7 +6621,7 @@ type GrantRequest struct { func (x *GrantRequest) Reset() { *x = GrantRequest{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[110] + mi := &file_service_v1alpha1_service_proto_msgTypes[116] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6327,7 +6634,7 @@ func (x *GrantRequest) String() string { func (*GrantRequest) ProtoMessage() {} func (x *GrantRequest) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[110] + mi := &file_service_v1alpha1_service_proto_msgTypes[116] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6340,7 +6647,7 @@ func (x *GrantRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GrantRequest.ProtoReflect.Descriptor instead. func (*GrantRequest) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{110} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{116} } func (x *GrantRequest) GetProject() string { @@ -6405,7 +6712,7 @@ type GrantResponse struct { func (x *GrantResponse) Reset() { *x = GrantResponse{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[111] + mi := &file_service_v1alpha1_service_proto_msgTypes[117] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6418,7 +6725,7 @@ func (x *GrantResponse) String() string { func (*GrantResponse) ProtoMessage() {} func (x *GrantResponse) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[111] + mi := &file_service_v1alpha1_service_proto_msgTypes[117] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6431,7 +6738,7 @@ func (x *GrantResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GrantResponse.ProtoReflect.Descriptor instead. func (*GrantResponse) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{111} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{117} } func (x *GrantResponse) GetRole() *v1alpha12.Role { @@ -6453,7 +6760,7 @@ type ListRolesRequest struct { func (x *ListRolesRequest) Reset() { *x = ListRolesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[112] + mi := &file_service_v1alpha1_service_proto_msgTypes[118] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6466,7 +6773,7 @@ func (x *ListRolesRequest) String() string { func (*ListRolesRequest) ProtoMessage() {} func (x *ListRolesRequest) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[112] + mi := &file_service_v1alpha1_service_proto_msgTypes[118] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6479,7 +6786,7 @@ func (x *ListRolesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRolesRequest.ProtoReflect.Descriptor instead. func (*ListRolesRequest) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{112} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{118} } func (x *ListRolesRequest) GetProject() string { @@ -6509,7 +6816,7 @@ type ListRolesResponse struct { func (x *ListRolesResponse) Reset() { *x = ListRolesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[113] + mi := &file_service_v1alpha1_service_proto_msgTypes[119] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6522,7 +6829,7 @@ func (x *ListRolesResponse) String() string { func (*ListRolesResponse) ProtoMessage() {} func (x *ListRolesResponse) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[113] + mi := &file_service_v1alpha1_service_proto_msgTypes[119] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6535,7 +6842,7 @@ func (x *ListRolesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRolesResponse.ProtoReflect.Descriptor instead. func (*ListRolesResponse) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{113} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{119} } func (x *ListRolesResponse) GetRoles() []*v1alpha12.Role { @@ -6569,7 +6876,7 @@ type RevokeRequest struct { func (x *RevokeRequest) Reset() { *x = RevokeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[114] + mi := &file_service_v1alpha1_service_proto_msgTypes[120] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6582,7 +6889,7 @@ func (x *RevokeRequest) String() string { func (*RevokeRequest) ProtoMessage() {} func (x *RevokeRequest) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[114] + mi := &file_service_v1alpha1_service_proto_msgTypes[120] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6595,7 +6902,7 @@ func (x *RevokeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeRequest.ProtoReflect.Descriptor instead. func (*RevokeRequest) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{114} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{120} } func (x *RevokeRequest) GetProject() string { @@ -6660,7 +6967,7 @@ type RevokeResponse struct { func (x *RevokeResponse) Reset() { *x = RevokeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[115] + mi := &file_service_v1alpha1_service_proto_msgTypes[121] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6673,7 +6980,7 @@ func (x *RevokeResponse) String() string { func (*RevokeResponse) ProtoMessage() {} func (x *RevokeResponse) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[115] + mi := &file_service_v1alpha1_service_proto_msgTypes[121] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6686,7 +6993,7 @@ func (x *RevokeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeResponse.ProtoReflect.Descriptor instead. func (*RevokeResponse) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{115} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{121} } func (x *RevokeResponse) GetRole() *v1alpha12.Role { @@ -6707,7 +7014,7 @@ type UpdateRoleRequest struct { func (x *UpdateRoleRequest) Reset() { *x = UpdateRoleRequest{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[116] + mi := &file_service_v1alpha1_service_proto_msgTypes[122] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6720,7 +7027,7 @@ func (x *UpdateRoleRequest) String() string { func (*UpdateRoleRequest) ProtoMessage() {} func (x *UpdateRoleRequest) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[116] + mi := &file_service_v1alpha1_service_proto_msgTypes[122] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6733,7 +7040,7 @@ func (x *UpdateRoleRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateRoleRequest.ProtoReflect.Descriptor instead. func (*UpdateRoleRequest) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{116} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{122} } func (x *UpdateRoleRequest) GetRole() *v1alpha12.Role { @@ -6754,7 +7061,7 @@ type UpdateRoleResponse struct { func (x *UpdateRoleResponse) Reset() { *x = UpdateRoleResponse{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[117] + mi := &file_service_v1alpha1_service_proto_msgTypes[123] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6767,7 +7074,7 @@ func (x *UpdateRoleResponse) String() string { func (*UpdateRoleResponse) ProtoMessage() {} func (x *UpdateRoleResponse) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[117] + mi := &file_service_v1alpha1_service_proto_msgTypes[123] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6780,7 +7087,7 @@ func (x *UpdateRoleResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateRoleResponse.ProtoReflect.Descriptor instead. func (*UpdateRoleResponse) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{117} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{123} } func (x *UpdateRoleResponse) GetRole() *v1alpha12.Role { @@ -6801,7 +7108,7 @@ type ListAnalysisTemplateConfigMapsRequest struct { func (x *ListAnalysisTemplateConfigMapsRequest) Reset() { *x = ListAnalysisTemplateConfigMapsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[118] + mi := &file_service_v1alpha1_service_proto_msgTypes[124] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6814,7 +7121,7 @@ func (x *ListAnalysisTemplateConfigMapsRequest) String() string { func (*ListAnalysisTemplateConfigMapsRequest) ProtoMessage() {} func (x *ListAnalysisTemplateConfigMapsRequest) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[118] + mi := &file_service_v1alpha1_service_proto_msgTypes[124] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6827,7 +7134,7 @@ func (x *ListAnalysisTemplateConfigMapsRequest) ProtoReflect() protoreflect.Mess // Deprecated: Use ListAnalysisTemplateConfigMapsRequest.ProtoReflect.Descriptor instead. func (*ListAnalysisTemplateConfigMapsRequest) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{118} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{124} } func (x *ListAnalysisTemplateConfigMapsRequest) GetProject() string { @@ -6848,7 +7155,7 @@ type ListAnalysisTemplateConfigMapsResponse struct { func (x *ListAnalysisTemplateConfigMapsResponse) Reset() { *x = ListAnalysisTemplateConfigMapsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[119] + mi := &file_service_v1alpha1_service_proto_msgTypes[125] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6861,7 +7168,7 @@ func (x *ListAnalysisTemplateConfigMapsResponse) String() string { func (*ListAnalysisTemplateConfigMapsResponse) ProtoMessage() {} func (x *ListAnalysisTemplateConfigMapsResponse) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[119] + mi := &file_service_v1alpha1_service_proto_msgTypes[125] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6874,7 +7181,7 @@ func (x *ListAnalysisTemplateConfigMapsResponse) ProtoReflect() protoreflect.Mes // Deprecated: Use ListAnalysisTemplateConfigMapsResponse.ProtoReflect.Descriptor instead. func (*ListAnalysisTemplateConfigMapsResponse) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{119} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{125} } func (x *ListAnalysisTemplateConfigMapsResponse) GetConfigMaps() []*v1.ConfigMap { @@ -6897,7 +7204,7 @@ type GetAnalysisTemplateConfigMapRequest struct { func (x *GetAnalysisTemplateConfigMapRequest) Reset() { *x = GetAnalysisTemplateConfigMapRequest{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[120] + mi := &file_service_v1alpha1_service_proto_msgTypes[126] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6910,7 +7217,7 @@ func (x *GetAnalysisTemplateConfigMapRequest) String() string { func (*GetAnalysisTemplateConfigMapRequest) ProtoMessage() {} func (x *GetAnalysisTemplateConfigMapRequest) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[120] + mi := &file_service_v1alpha1_service_proto_msgTypes[126] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6923,7 +7230,7 @@ func (x *GetAnalysisTemplateConfigMapRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use GetAnalysisTemplateConfigMapRequest.ProtoReflect.Descriptor instead. func (*GetAnalysisTemplateConfigMapRequest) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{120} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{126} } func (x *GetAnalysisTemplateConfigMapRequest) GetProject() string { @@ -6962,7 +7269,7 @@ type GetAnalysisTemplateConfigMapResponse struct { func (x *GetAnalysisTemplateConfigMapResponse) Reset() { *x = GetAnalysisTemplateConfigMapResponse{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[121] + mi := &file_service_v1alpha1_service_proto_msgTypes[127] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6975,7 +7282,7 @@ func (x *GetAnalysisTemplateConfigMapResponse) String() string { func (*GetAnalysisTemplateConfigMapResponse) ProtoMessage() {} func (x *GetAnalysisTemplateConfigMapResponse) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[121] + mi := &file_service_v1alpha1_service_proto_msgTypes[127] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6988,7 +7295,7 @@ func (x *GetAnalysisTemplateConfigMapResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use GetAnalysisTemplateConfigMapResponse.ProtoReflect.Descriptor instead. func (*GetAnalysisTemplateConfigMapResponse) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{121} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{127} } func (m *GetAnalysisTemplateConfigMapResponse) GetResult() isGetAnalysisTemplateConfigMapResponse_Result { @@ -7040,7 +7347,7 @@ type ListAnalysisTemplateSecretsRequest struct { func (x *ListAnalysisTemplateSecretsRequest) Reset() { *x = ListAnalysisTemplateSecretsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[122] + mi := &file_service_v1alpha1_service_proto_msgTypes[128] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7053,7 +7360,7 @@ func (x *ListAnalysisTemplateSecretsRequest) String() string { func (*ListAnalysisTemplateSecretsRequest) ProtoMessage() {} func (x *ListAnalysisTemplateSecretsRequest) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[122] + mi := &file_service_v1alpha1_service_proto_msgTypes[128] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7066,7 +7373,7 @@ func (x *ListAnalysisTemplateSecretsRequest) ProtoReflect() protoreflect.Message // Deprecated: Use ListAnalysisTemplateSecretsRequest.ProtoReflect.Descriptor instead. func (*ListAnalysisTemplateSecretsRequest) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{122} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{128} } func (x *ListAnalysisTemplateSecretsRequest) GetProject() string { @@ -7087,7 +7394,7 @@ type ListAnalysisTemplateSecretsResponse struct { func (x *ListAnalysisTemplateSecretsResponse) Reset() { *x = ListAnalysisTemplateSecretsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[123] + mi := &file_service_v1alpha1_service_proto_msgTypes[129] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7100,7 +7407,7 @@ func (x *ListAnalysisTemplateSecretsResponse) String() string { func (*ListAnalysisTemplateSecretsResponse) ProtoMessage() {} func (x *ListAnalysisTemplateSecretsResponse) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[123] + mi := &file_service_v1alpha1_service_proto_msgTypes[129] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7113,7 +7420,7 @@ func (x *ListAnalysisTemplateSecretsResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use ListAnalysisTemplateSecretsResponse.ProtoReflect.Descriptor instead. func (*ListAnalysisTemplateSecretsResponse) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{123} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{129} } func (x *ListAnalysisTemplateSecretsResponse) GetSecrets() []*v1.Secret { @@ -7136,7 +7443,7 @@ type GetAnalysisTemplateSecretRequest struct { func (x *GetAnalysisTemplateSecretRequest) Reset() { *x = GetAnalysisTemplateSecretRequest{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[124] + mi := &file_service_v1alpha1_service_proto_msgTypes[130] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7149,7 +7456,7 @@ func (x *GetAnalysisTemplateSecretRequest) String() string { func (*GetAnalysisTemplateSecretRequest) ProtoMessage() {} func (x *GetAnalysisTemplateSecretRequest) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[124] + mi := &file_service_v1alpha1_service_proto_msgTypes[130] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7162,7 +7469,7 @@ func (x *GetAnalysisTemplateSecretRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAnalysisTemplateSecretRequest.ProtoReflect.Descriptor instead. func (*GetAnalysisTemplateSecretRequest) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{124} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{130} } func (x *GetAnalysisTemplateSecretRequest) GetProject() string { @@ -7201,7 +7508,7 @@ type GetAnalysisTemplateSecretResponse struct { func (x *GetAnalysisTemplateSecretResponse) Reset() { *x = GetAnalysisTemplateSecretResponse{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[125] + mi := &file_service_v1alpha1_service_proto_msgTypes[131] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7214,7 +7521,7 @@ func (x *GetAnalysisTemplateSecretResponse) String() string { func (*GetAnalysisTemplateSecretResponse) ProtoMessage() {} func (x *GetAnalysisTemplateSecretResponse) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[125] + mi := &file_service_v1alpha1_service_proto_msgTypes[131] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7227,7 +7534,7 @@ func (x *GetAnalysisTemplateSecretResponse) ProtoReflect() protoreflect.Message // Deprecated: Use GetAnalysisTemplateSecretResponse.ProtoReflect.Descriptor instead. func (*GetAnalysisTemplateSecretResponse) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{125} + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{131} } func (m *GetAnalysisTemplateSecretResponse) GetResult() isGetAnalysisTemplateSecretResponse_Result { @@ -7921,718 +8228,794 @@ var file_service_v1alpha1_service_proto_rawDesc = []byte{ 0x65, 0x48, 0x00, 0x52, 0x10, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, 0x77, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x22, 0x8e, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, - 0x73, 0x69, 0x73, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x43, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, - 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x52, 0x61, 0x77, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x22, 0xab, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, - 0x79, 0x73, 0x69, 0x73, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x73, 0x0a, 0x0c, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x5f, 0x72, 0x75, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x73, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, - 0x69, 0x73, 0x52, 0x75, 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, - 0x73, 0x52, 0x75, 0x6e, 0x12, 0x12, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, 0x77, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x22, 0x4d, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, + 0x75, 0x6c, 0x74, 0x22, 0x25, 0x0a, 0x23, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xc1, 0x01, 0x0a, 0x24, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, + 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x98, 0x01, 0x0a, 0x1a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x73, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x18, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x61, 0x6e, 0x61, + 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x22, 0x7c, + 0x0a, 0x21, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x20, 0x0a, 0x1e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, + 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x77, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0xdd, 0x01, 0x0a, + 0x22, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x34, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x6e, 0x73, 0x65, 0x12, 0x98, 0x01, 0x0a, 0x19, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, + 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x73, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x17, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x6e, + 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x12, + 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x03, 0x72, + 0x61, 0x77, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x8e, 0x01, 0x0a, + 0x15, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x52, 0x75, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, + 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x77, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0xab, 0x01, + 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x52, 0x75, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, 0x0c, 0x61, 0x6e, 0x61, 0x6c, + 0x79, 0x73, 0x69, 0x73, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4e, + 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, + 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x6f, 0x6c, + 0x6c, 0x6f, 0x75, 0x74, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x52, 0x75, 0x6e, 0x48, 0x00, + 0x52, 0x0b, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x52, 0x75, 0x6e, 0x12, 0x12, 0x0a, + 0x03, 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, + 0x77, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x4d, 0x0a, 0x1d, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x20, 0x0a, 0x1e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x0a, 0x24, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x6e, 0x61, + 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x27, 0x0a, 0x25, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, + 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x34, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, + 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x4e, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, + 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x58, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x04, + 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, + 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, + 0x65, 0x22, 0x59, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x41, 0x0a, 0x11, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, + 0x14, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa6, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x73, 0x5f, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x61, 0x73, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x43, 0x0a, 0x06, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x6b, 0x75, 0x69, + 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x77, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0xd0, + 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, + 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, + 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, + 0x65, 0x48, 0x00, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x58, 0x0a, 0x09, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x48, 0x00, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, + 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, 0x77, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x22, 0x52, 0x0a, 0x06, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x48, 0x0a, 0x06, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, + 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x06, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x22, 0xfd, 0x01, 0x0a, 0x0c, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x61, 0x6b, 0x75, 0x69, + 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x61, + 0x69, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6c, 0x61, 0x69, 0x6d, + 0x73, 0x12, 0x67, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, + 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x54, 0x0a, 0x0d, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x4f, 0x0a, 0x10, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x4e, 0x0a, 0x19, 0x4c, 0x69, 0x73, - 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x58, 0x0a, 0x11, 0x43, 0x72, 0x65, + 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x73, 0x5f, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0b, 0x61, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0xb2, 0x01, 0x0a, + 0x11, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x45, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, + 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, + 0x6c, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x09, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x22, 0xfe, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, + 0x65, 0x12, 0x4b, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, + 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, + 0x48, 0x00, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x67, + 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x22, 0x55, 0x0a, 0x0e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, + 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, + 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x58, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, - 0x6f, 0x6c, 0x65, 0x22, 0x59, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, + 0x6f, 0x6c, 0x65, 0x22, 0x59, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x41, - 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x0a, 0x25, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x22, 0x68, 0x0a, 0x26, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, + 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, + 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6d, 0x61, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x52, + 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x73, 0x22, 0x98, 0x01, 0x0a, 0x23, + 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa6, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x52, - 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x73, 0x5f, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x61, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x43, 0x0a, 0x06, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, - 0x61, 0x77, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x22, 0xd0, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, - 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, - 0x6f, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x58, 0x0a, 0x09, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, - 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, - 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x48, 0x00, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0c, 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, 0x77, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x22, 0x52, 0x0a, 0x06, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x48, 0x0a, - 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, - 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, - 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x22, 0xfd, 0x01, 0x0a, 0x0c, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x73, 0x12, 0x67, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, - 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x42, 0x09, 0x0a, 0x07, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x54, 0x0a, 0x0d, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x4f, 0x0a, - 0x10, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x61, - 0x73, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0b, 0x61, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0xb2, - 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x09, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, - 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, - 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x22, 0xfe, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, - 0x6f, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, - 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, - 0x6d, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, - 0x12, 0x67, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, - 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x55, 0x0a, 0x0e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x58, 0x0a, 0x11, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x43, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, - 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, - 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, - 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x59, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x04, 0x72, - 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, - 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, - 0x22, 0x41, 0x0a, 0x25, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, - 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x22, 0x68, 0x0a, 0x26, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, - 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x4d, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, - 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6d, 0x61, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, - 0x70, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x73, 0x22, 0x98, 0x01, - 0x0a, 0x23, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, - 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x77, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x84, 0x01, 0x0a, 0x24, 0x47, 0x65, 0x74, - 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6d, 0x61, 0x70, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x4d, 0x61, 0x70, 0x48, 0x00, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, - 0x70, 0x12, 0x12, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, - 0x52, 0x03, 0x72, 0x61, 0x77, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, - 0x3e, 0x0a, 0x22, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, - 0x5b, 0x0a, 0x23, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x22, 0x95, 0x01, 0x0a, - 0x20, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x43, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, - 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x52, 0x61, 0x77, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x22, 0x77, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, - 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6b, 0x38, 0x73, 0x2e, - 0x69, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, + 0x65, 0x12, 0x43, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x77, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x84, 0x01, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x41, 0x6e, + 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, + 0x61, 0x70, 0x48, 0x00, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x12, 0x12, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x03, - 0x72, 0x61, 0x77, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x51, 0x0a, - 0x09, 0x52, 0x61, 0x77, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1a, 0x0a, 0x16, 0x52, 0x41, - 0x57, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x41, 0x57, 0x5f, 0x46, 0x4f, - 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x52, - 0x41, 0x57, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x59, 0x41, 0x4d, 0x4c, 0x10, 0x02, - 0x32, 0x83, 0x3c, 0x0a, 0x0c, 0x4b, 0x61, 0x72, 0x67, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, - 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, + 0x72, 0x61, 0x77, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3e, 0x0a, + 0x22, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x5b, 0x0a, + 0x23, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x20, 0x47, + 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, + 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x32, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, - 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, - 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x86, 0x01, - 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, - 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x61, 0x6b, + 0x2e, 0x52, 0x61, 0x77, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x22, 0x77, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, + 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x12, 0x0a, + 0x03, 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, + 0x77, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x51, 0x0a, 0x09, 0x52, + 0x61, 0x77, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1a, 0x0a, 0x16, 0x52, 0x41, 0x57, 0x5f, + 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x41, 0x57, 0x5f, 0x46, 0x4f, 0x52, 0x4d, + 0x41, 0x54, 0x5f, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x41, 0x57, + 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x59, 0x41, 0x4d, 0x4c, 0x10, 0x02, 0x32, 0x90, + 0x40, 0x0a, 0x0c, 0x4b, 0x61, 0x72, 0x67, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x83, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, + 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0a, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, - 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, - 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x6f, 0x67, - 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, + 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x32, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, + 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, + 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x0f, + 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, + 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x83, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0a, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x6f, 0x67, + 0x69, 0x6e, 0x12, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x3f, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, + 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, + 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x40, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, - 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x55, 0x70, 0x64, + 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, + 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, - 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x6e, 0x73, 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x3f, + 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, + 0x40, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x37, 0x2e, 0x61, - 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, - 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x77, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, 0x12, 0x33, 0x2e, + 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, + 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, - 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, - 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, + 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, + 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, + 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, 0x12, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x71, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x31, 0x2e, - 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x32, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, - 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x0b, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, - 0x67, 0x65, 0x73, 0x12, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, - 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x67, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x61, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, - 0x63, 0x68, 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x30, 0x01, 0x12, 0x7a, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x61, 0x67, - 0x65, 0x12, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, - 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, - 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, - 0x0a, 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x35, - 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, - 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, - 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, - 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, + 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, + 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x73, 0x12, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, + 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x0f, 0x57, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, - 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, - 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, - 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x39, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, - 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x7d, - 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, + 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x71, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x31, 0x2e, 0x61, 0x6b, + 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, - 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6d, - 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x85, 0x01, - 0x0a, 0x0e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, - 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, - 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x50, - 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, - 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x62, 0x6f, 0x72, - 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x0b, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x67, 0x65, + 0x73, 0x12, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x0d, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x36, 0x2e, - 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, + 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, + 0x12, 0x7a, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, + 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, + 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, - 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x33, 0x2e, 0x61, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, + 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x0c, + 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x35, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, - 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x35, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, - 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, + 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, + 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, + 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x41, 0x70, 0x70, 0x72, 0x6f, - 0x76, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, - 0x72, 0x6f, 0x76, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, - 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x46, 0x72, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, - 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x36, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, + 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x88, 0x01, 0x0a, 0x0f, 0x57, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, + 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, + 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x39, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, + 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x7d, 0x0a, 0x0c, + 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x2e, 0x61, + 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, + 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x85, 0x01, 0x0a, 0x0e, + 0x57, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, + 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, + 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x30, 0x01, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, + 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x77, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x33, 0x2e, - 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, - 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x50, 0x72, 0x6f, - 0x6d, 0x6f, 0x74, 0x65, 0x54, 0x6f, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x37, 0x2e, 0x61, 0x6b, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x50, + 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, + 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x0d, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x36, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x54, 0x6f, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, - 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x54, - 0x6f, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, - 0x01, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3a, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, - 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x44, - 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, - 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, - 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x35, 0x2e, - 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, - 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x72, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8f, 0x01, 0x0a, - 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x41, 0x6c, - 0x69, 0x61, 0x73, 0x12, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x72, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x3c, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, - 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, - 0x0a, 0x08, 0x52, 0x65, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x31, 0x2e, 0x61, 0x6b, 0x75, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0a, + 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, - 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x52, 0x65, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x56, 0x65, 0x72, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, + 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x35, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, + 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x61, + 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, + 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, - 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, - 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x56, 0x65, 0x72, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, - 0x73, 0x65, 0x73, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, - 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, - 0x6f, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x0d, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x36, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x57, 0x61, 0x72, - 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x12, 0x35, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, - 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x72, - 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, - 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x0f, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, - 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x73, 0x12, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, - 0x63, 0x68, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, - 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, 0x61, 0x72, 0x65, - 0x68, 0x6f, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, - 0x12, 0x86, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x61, 0x72, 0x65, 0x68, - 0x6f, 0x75, 0x73, 0x65, 0x12, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x61, - 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x72, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, + 0x0a, 0x47, 0x65, 0x74, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x33, 0x2e, 0x61, 0x6b, + 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, + 0x74, 0x65, 0x54, 0x6f, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, + 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, + 0x6d, 0x6f, 0x74, 0x65, 0x54, 0x6f, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, + 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x54, 0x6f, 0x53, + 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, + 0x11, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x12, 0x3a, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, + 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x44, 0x6f, 0x77, + 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x89, 0x01, 0x0a, 0x10, 0x52, 0x65, - 0x66, 0x72, 0x65, 0x73, 0x68, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x12, 0x39, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x0c, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x35, 0x2e, 0x61, 0x6b, + 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, + 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x72, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x12, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x41, 0x6c, 0x69, 0x61, + 0x73, 0x12, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, - 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x61, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x66, - 0x72, 0x65, 0x73, 0x68, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x3a, 0x2e, 0x61, 0x6b, + 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x41, + 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x08, + 0x52, 0x65, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x31, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, + 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x65, + 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, - 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x3a, 0x2e, 0x61, 0x6b, 0x75, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, + 0x65, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x8c, 0x01, 0x0a, 0x11, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, + 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, + 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, + 0x73, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, + 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, - 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, - 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, - 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x0f, 0x4c, 0x69, - 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x38, 0x2e, - 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, + 0x6f, 0x75, 0x73, 0x65, 0x12, 0x35, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, + 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, + 0x6f, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x61, 0x6b, + 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x0f, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, 0x61, 0x72, + 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x73, 0x12, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, + 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x39, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, + 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x86, + 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, + 0x73, 0x65, 0x12, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, + 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x61, 0x72, 0x65, + 0x68, 0x6f, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x61, + 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x89, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x66, 0x72, + 0x65, 0x73, 0x68, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x12, 0x39, 0x2e, 0x61, + 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, + 0x73, 0x68, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x3a, 0x2e, 0x61, 0x6b, 0x75, 0x69, + 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, + 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, + 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x3a, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x98, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, - 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x3e, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x61, 0x6b, + 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x73, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, + 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, + 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, + 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x92, 0x01, 0x0a, - 0x13, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, - 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, - 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, + 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, + 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x3a, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, + 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, + 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x98, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x3e, 0x2e, 0x61, 0x6b, 0x75, 0x69, + 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x61, 0x6b, 0x75, 0x69, + 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x92, 0x01, 0x0a, 0x13, 0x47, + 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x12, 0x3c, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, - 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, - 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x2e, 0x61, + 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x3d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x9b, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, + 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x2e, 0x61, 0x6b, 0x75, + 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x61, 0x6b, + 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xad, 0x01, + 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x6e, 0x61, + 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x45, + 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x6e, 0x61, + 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x46, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, + 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa7, 0x01, + 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x6e, 0x61, 0x6c, + 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x43, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, + 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, + 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x44, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, + 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xb0, 0x01, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, + 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x46, 0x2e, 0x61, 0x6b, 0x75, 0x69, + 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, + 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x47, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x47, + 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x52, 0x75, 0x6e, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x83, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x52, - 0x75, 0x6e, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, - 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, - 0x73, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xb3, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, - 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x73, 0x12, 0x47, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, - 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x48, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, - 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, + 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x52, 0x75, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, + 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, + 0x6c, 0x79, 0x73, 0x69, 0x73, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0xb3, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, - 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xad, 0x01, 0x0a, 0x1c, - 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x12, 0x45, 0x2e, 0x61, + 0x61, 0x70, 0x73, 0x12, 0x47, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, + 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, + 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x4d, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x48, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x46, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, - 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, - 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x4d, 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x44, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x45, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, - 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, - 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa4, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, - 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x42, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, + 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xad, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x41, 0x6e, + 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x12, 0x45, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, + 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x46, + 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x44, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, - 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x61, 0x6b, 0x75, - 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x8c, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3a, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, - 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, - 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, - 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x33, 0x2e, 0x61, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, + 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0xa4, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, + 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x12, 0x42, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, - 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x6e, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x30, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, - 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x68, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x2e, 0x2e, 0x61, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x72, 0x61, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x61, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x72, 0x61, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x09, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, + 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x4c, + 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x12, 0x3a, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x61, + 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0a, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x6b, 0x0a, 0x06, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x12, 0x2f, 0x2e, 0x61, 0x6b, 0x75, - 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, - 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, - 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, - 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x33, 0x2e, 0x61, 0x6b, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x61, + 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, + 0x12, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, + 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x07, 0x47, + 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x30, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, + 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, + 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, + 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x05, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x12, 0x2e, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, + 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, + 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, + 0x65, 0x73, 0x12, 0x32, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, + 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, + 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, + 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x06, 0x52, + 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x12, 0x2f, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, + 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, + 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, + 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, - 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x97, 0x02, 0x0a, 0x24, 0x63, 0x6f, 0x6d, 0x2e, 0x61, - 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, - 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, - 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x2f, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x3b, 0x73, 0x76, 0x63, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, - 0x41, 0x49, 0x4b, 0x53, 0xaa, 0x02, 0x20, 0x41, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x49, 0x6f, - 0x2e, 0x4b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x56, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x20, 0x41, 0x6b, 0x75, 0x69, 0x74, 0x79, - 0x5c, 0x49, 0x6f, 0x5c, 0x4b, 0x61, 0x72, 0x67, 0x6f, 0x5c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x2c, 0x41, 0x6b, 0x75, - 0x69, 0x74, 0x79, 0x5c, 0x49, 0x6f, 0x5c, 0x4b, 0x61, 0x72, 0x67, 0x6f, 0x5c, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, - 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x24, 0x41, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x3a, 0x3a, 0x49, 0x6f, 0x3a, 0x3a, 0x4b, 0x61, 0x72, 0x67, 0x6f, 0x3a, 0x3a, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x42, 0x97, 0x02, 0x0a, 0x24, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x0c, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2f, 0x6b, 0x61, + 0x72, 0x67, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x73, 0x76, 0x63, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x41, 0x49, 0x4b, 0x53, 0xaa, + 0x02, 0x20, 0x41, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x49, 0x6f, 0x2e, 0x4b, 0x61, 0x72, 0x67, + 0x6f, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0xca, 0x02, 0x20, 0x41, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x5c, 0x49, 0x6f, 0x5c, 0x4b, + 0x61, 0x72, 0x67, 0x6f, 0x5c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5c, 0x56, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x2c, 0x41, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x5c, 0x49, + 0x6f, 0x5c, 0x4b, 0x61, 0x72, 0x67, 0x6f, 0x5c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5c, + 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x24, 0x41, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x3a, 0x3a, 0x49, + 0x6f, 0x3a, 0x3a, 0x4b, 0x61, 0x72, 0x67, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -8648,7 +9031,7 @@ func file_service_v1alpha1_service_proto_rawDescGZIP() []byte { } var file_service_v1alpha1_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_service_v1alpha1_service_proto_msgTypes = make([]protoimpl.MessageInfo, 131) +var file_service_v1alpha1_service_proto_msgTypes = make([]protoimpl.MessageInfo, 137) var file_service_v1alpha1_service_proto_goTypes = []interface{}{ (RawFormat)(0), // 0: akuity.io.kargo.service.v1alpha1.RawFormat (*ComponentVersions)(nil), // 1: akuity.io.kargo.service.v1alpha1.ComponentVersions @@ -8748,250 +9131,266 @@ var file_service_v1alpha1_service_proto_goTypes = []interface{}{ (*ListAnalysisTemplatesResponse)(nil), // 95: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplatesResponse (*GetAnalysisTemplateRequest)(nil), // 96: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateRequest (*GetAnalysisTemplateResponse)(nil), // 97: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateResponse - (*GetAnalysisRunRequest)(nil), // 98: akuity.io.kargo.service.v1alpha1.GetAnalysisRunRequest - (*GetAnalysisRunResponse)(nil), // 99: akuity.io.kargo.service.v1alpha1.GetAnalysisRunResponse - (*DeleteAnalysisTemplateRequest)(nil), // 100: akuity.io.kargo.service.v1alpha1.DeleteAnalysisTemplateRequest - (*DeleteAnalysisTemplateResponse)(nil), // 101: akuity.io.kargo.service.v1alpha1.DeleteAnalysisTemplateResponse - (*ListProjectEventsRequest)(nil), // 102: akuity.io.kargo.service.v1alpha1.ListProjectEventsRequest - (*ListProjectEventsResponse)(nil), // 103: akuity.io.kargo.service.v1alpha1.ListProjectEventsResponse - (*CreateRoleRequest)(nil), // 104: akuity.io.kargo.service.v1alpha1.CreateRoleRequest - (*CreateRoleResponse)(nil), // 105: akuity.io.kargo.service.v1alpha1.CreateRoleResponse - (*DeleteRoleRequest)(nil), // 106: akuity.io.kargo.service.v1alpha1.DeleteRoleRequest - (*DeleteRoleResponse)(nil), // 107: akuity.io.kargo.service.v1alpha1.DeleteRoleResponse - (*GetRoleRequest)(nil), // 108: akuity.io.kargo.service.v1alpha1.GetRoleRequest - (*GetRoleResponse)(nil), // 109: akuity.io.kargo.service.v1alpha1.GetRoleResponse - (*Claims)(nil), // 110: akuity.io.kargo.service.v1alpha1.Claims - (*GrantRequest)(nil), // 111: akuity.io.kargo.service.v1alpha1.GrantRequest - (*GrantResponse)(nil), // 112: akuity.io.kargo.service.v1alpha1.GrantResponse - (*ListRolesRequest)(nil), // 113: akuity.io.kargo.service.v1alpha1.ListRolesRequest - (*ListRolesResponse)(nil), // 114: akuity.io.kargo.service.v1alpha1.ListRolesResponse - (*RevokeRequest)(nil), // 115: akuity.io.kargo.service.v1alpha1.RevokeRequest - (*RevokeResponse)(nil), // 116: akuity.io.kargo.service.v1alpha1.RevokeResponse - (*UpdateRoleRequest)(nil), // 117: akuity.io.kargo.service.v1alpha1.UpdateRoleRequest - (*UpdateRoleResponse)(nil), // 118: akuity.io.kargo.service.v1alpha1.UpdateRoleResponse - (*ListAnalysisTemplateConfigMapsRequest)(nil), // 119: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateConfigMapsRequest - (*ListAnalysisTemplateConfigMapsResponse)(nil), // 120: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateConfigMapsResponse - (*GetAnalysisTemplateConfigMapRequest)(nil), // 121: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapRequest - (*GetAnalysisTemplateConfigMapResponse)(nil), // 122: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapResponse - (*ListAnalysisTemplateSecretsRequest)(nil), // 123: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateSecretsRequest - (*ListAnalysisTemplateSecretsResponse)(nil), // 124: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateSecretsResponse - (*GetAnalysisTemplateSecretRequest)(nil), // 125: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretRequest - (*GetAnalysisTemplateSecretResponse)(nil), // 126: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretResponse - nil, // 127: akuity.io.kargo.service.v1alpha1.GetConfigResponse.ArgocdShardsEntry - nil, // 128: akuity.io.kargo.service.v1alpha1.ListImagesResponse.ImagesEntry - nil, // 129: akuity.io.kargo.service.v1alpha1.TagMap.TagsEntry - nil, // 130: akuity.io.kargo.service.v1alpha1.ImageStageMap.StagesEntry - nil, // 131: akuity.io.kargo.service.v1alpha1.QueryFreightResponse.GroupsEntry - (*timestamppb.Timestamp)(nil), // 132: google.protobuf.Timestamp - (*v1alpha1.Stage)(nil), // 133: github.com.akuity.kargo.api.v1alpha1.Stage - (*v1alpha1.Promotion)(nil), // 134: github.com.akuity.kargo.api.v1alpha1.Promotion - (*v1alpha1.Project)(nil), // 135: github.com.akuity.kargo.api.v1alpha1.Project - (*v1alpha1.Freight)(nil), // 136: github.com.akuity.kargo.api.v1alpha1.Freight - (*v1alpha1.Warehouse)(nil), // 137: github.com.akuity.kargo.api.v1alpha1.Warehouse - (*v1.Secret)(nil), // 138: k8s.io.api.core.v1.Secret - (*v1alpha11.AnalysisTemplate)(nil), // 139: github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.AnalysisTemplate - (*v1alpha11.AnalysisRun)(nil), // 140: github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.AnalysisRun - (*v1.Event)(nil), // 141: k8s.io.api.core.v1.Event - (*v1alpha12.Role)(nil), // 142: github.com.akuity.kargo.api.rbac.v1alpha1.Role - (*v1alpha12.RoleResources)(nil), // 143: github.com.akuity.kargo.api.rbac.v1alpha1.RoleResources - (*v1alpha12.Claim)(nil), // 144: github.com.akuity.kargo.api.rbac.v1alpha1.Claim - (*v1alpha12.ResourceDetails)(nil), // 145: github.com.akuity.kargo.api.rbac.v1alpha1.ResourceDetails - (*v1.ConfigMap)(nil), // 146: k8s.io.api.core.v1.ConfigMap + (*ListClusterAnalysisTemplatesRequest)(nil), // 98: akuity.io.kargo.service.v1alpha1.ListClusterAnalysisTemplatesRequest + (*ListClusterAnalysisTemplatesResponse)(nil), // 99: akuity.io.kargo.service.v1alpha1.ListClusterAnalysisTemplatesResponse + (*GetClusterAnalysisTemplateRequest)(nil), // 100: akuity.io.kargo.service.v1alpha1.GetClusterAnalysisTemplateRequest + (*GetClusterAnalysisTemplateResponse)(nil), // 101: akuity.io.kargo.service.v1alpha1.GetClusterAnalysisTemplateResponse + (*GetAnalysisRunRequest)(nil), // 102: akuity.io.kargo.service.v1alpha1.GetAnalysisRunRequest + (*GetAnalysisRunResponse)(nil), // 103: akuity.io.kargo.service.v1alpha1.GetAnalysisRunResponse + (*DeleteAnalysisTemplateRequest)(nil), // 104: akuity.io.kargo.service.v1alpha1.DeleteAnalysisTemplateRequest + (*DeleteAnalysisTemplateResponse)(nil), // 105: akuity.io.kargo.service.v1alpha1.DeleteAnalysisTemplateResponse + (*DeleteClusterAnalysisTemplateRequest)(nil), // 106: akuity.io.kargo.service.v1alpha1.DeleteClusterAnalysisTemplateRequest + (*DeleteClusterAnalysisTemplateResponse)(nil), // 107: akuity.io.kargo.service.v1alpha1.DeleteClusterAnalysisTemplateResponse + (*ListProjectEventsRequest)(nil), // 108: akuity.io.kargo.service.v1alpha1.ListProjectEventsRequest + (*ListProjectEventsResponse)(nil), // 109: akuity.io.kargo.service.v1alpha1.ListProjectEventsResponse + (*CreateRoleRequest)(nil), // 110: akuity.io.kargo.service.v1alpha1.CreateRoleRequest + (*CreateRoleResponse)(nil), // 111: akuity.io.kargo.service.v1alpha1.CreateRoleResponse + (*DeleteRoleRequest)(nil), // 112: akuity.io.kargo.service.v1alpha1.DeleteRoleRequest + (*DeleteRoleResponse)(nil), // 113: akuity.io.kargo.service.v1alpha1.DeleteRoleResponse + (*GetRoleRequest)(nil), // 114: akuity.io.kargo.service.v1alpha1.GetRoleRequest + (*GetRoleResponse)(nil), // 115: akuity.io.kargo.service.v1alpha1.GetRoleResponse + (*Claims)(nil), // 116: akuity.io.kargo.service.v1alpha1.Claims + (*GrantRequest)(nil), // 117: akuity.io.kargo.service.v1alpha1.GrantRequest + (*GrantResponse)(nil), // 118: akuity.io.kargo.service.v1alpha1.GrantResponse + (*ListRolesRequest)(nil), // 119: akuity.io.kargo.service.v1alpha1.ListRolesRequest + (*ListRolesResponse)(nil), // 120: akuity.io.kargo.service.v1alpha1.ListRolesResponse + (*RevokeRequest)(nil), // 121: akuity.io.kargo.service.v1alpha1.RevokeRequest + (*RevokeResponse)(nil), // 122: akuity.io.kargo.service.v1alpha1.RevokeResponse + (*UpdateRoleRequest)(nil), // 123: akuity.io.kargo.service.v1alpha1.UpdateRoleRequest + (*UpdateRoleResponse)(nil), // 124: akuity.io.kargo.service.v1alpha1.UpdateRoleResponse + (*ListAnalysisTemplateConfigMapsRequest)(nil), // 125: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateConfigMapsRequest + (*ListAnalysisTemplateConfigMapsResponse)(nil), // 126: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateConfigMapsResponse + (*GetAnalysisTemplateConfigMapRequest)(nil), // 127: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapRequest + (*GetAnalysisTemplateConfigMapResponse)(nil), // 128: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapResponse + (*ListAnalysisTemplateSecretsRequest)(nil), // 129: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateSecretsRequest + (*ListAnalysisTemplateSecretsResponse)(nil), // 130: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateSecretsResponse + (*GetAnalysisTemplateSecretRequest)(nil), // 131: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretRequest + (*GetAnalysisTemplateSecretResponse)(nil), // 132: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretResponse + nil, // 133: akuity.io.kargo.service.v1alpha1.GetConfigResponse.ArgocdShardsEntry + nil, // 134: akuity.io.kargo.service.v1alpha1.ListImagesResponse.ImagesEntry + nil, // 135: akuity.io.kargo.service.v1alpha1.TagMap.TagsEntry + nil, // 136: akuity.io.kargo.service.v1alpha1.ImageStageMap.StagesEntry + nil, // 137: akuity.io.kargo.service.v1alpha1.QueryFreightResponse.GroupsEntry + (*timestamppb.Timestamp)(nil), // 138: google.protobuf.Timestamp + (*v1alpha1.Stage)(nil), // 139: github.com.akuity.kargo.api.v1alpha1.Stage + (*v1alpha1.Promotion)(nil), // 140: github.com.akuity.kargo.api.v1alpha1.Promotion + (*v1alpha1.Project)(nil), // 141: github.com.akuity.kargo.api.v1alpha1.Project + (*v1alpha1.Freight)(nil), // 142: github.com.akuity.kargo.api.v1alpha1.Freight + (*v1alpha1.Warehouse)(nil), // 143: github.com.akuity.kargo.api.v1alpha1.Warehouse + (*v1.Secret)(nil), // 144: k8s.io.api.core.v1.Secret + (*v1alpha11.AnalysisTemplate)(nil), // 145: github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.AnalysisTemplate + (*v1alpha11.ClusterAnalysisTemplate)(nil), // 146: github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.ClusterAnalysisTemplate + (*v1alpha11.AnalysisRun)(nil), // 147: github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.AnalysisRun + (*v1.Event)(nil), // 148: k8s.io.api.core.v1.Event + (*v1alpha12.Role)(nil), // 149: github.com.akuity.kargo.api.rbac.v1alpha1.Role + (*v1alpha12.RoleResources)(nil), // 150: github.com.akuity.kargo.api.rbac.v1alpha1.RoleResources + (*v1alpha12.Claim)(nil), // 151: github.com.akuity.kargo.api.rbac.v1alpha1.Claim + (*v1alpha12.ResourceDetails)(nil), // 152: github.com.akuity.kargo.api.rbac.v1alpha1.ResourceDetails + (*v1.ConfigMap)(nil), // 153: k8s.io.api.core.v1.ConfigMap } var file_service_v1alpha1_service_proto_depIdxs = []int32{ 2, // 0: akuity.io.kargo.service.v1alpha1.ComponentVersions.server:type_name -> akuity.io.kargo.service.v1alpha1.VersionInfo 2, // 1: akuity.io.kargo.service.v1alpha1.ComponentVersions.cli:type_name -> akuity.io.kargo.service.v1alpha1.VersionInfo - 132, // 2: akuity.io.kargo.service.v1alpha1.VersionInfo.build_time:type_name -> google.protobuf.Timestamp + 138, // 2: akuity.io.kargo.service.v1alpha1.VersionInfo.build_time:type_name -> google.protobuf.Timestamp 2, // 3: akuity.io.kargo.service.v1alpha1.GetVersionInfoResponse.version_info:type_name -> akuity.io.kargo.service.v1alpha1.VersionInfo - 127, // 4: akuity.io.kargo.service.v1alpha1.GetConfigResponse.argocd_shards:type_name -> akuity.io.kargo.service.v1alpha1.GetConfigResponse.ArgocdShardsEntry + 133, // 4: akuity.io.kargo.service.v1alpha1.GetConfigResponse.argocd_shards:type_name -> akuity.io.kargo.service.v1alpha1.GetConfigResponse.ArgocdShardsEntry 10, // 5: akuity.io.kargo.service.v1alpha1.GetPublicConfigResponse.oidc_config:type_name -> akuity.io.kargo.service.v1alpha1.OIDCConfig 14, // 6: akuity.io.kargo.service.v1alpha1.CreateResourceResponse.results:type_name -> akuity.io.kargo.service.v1alpha1.CreateResourceResult 17, // 7: akuity.io.kargo.service.v1alpha1.CreateOrUpdateResourceResponse.results:type_name -> akuity.io.kargo.service.v1alpha1.CreateOrUpdateResourceResult 20, // 8: akuity.io.kargo.service.v1alpha1.UpdateResourceResponse.results:type_name -> akuity.io.kargo.service.v1alpha1.UpdateResourceResult 23, // 9: akuity.io.kargo.service.v1alpha1.DeleteResourceResponse.results:type_name -> akuity.io.kargo.service.v1alpha1.DeleteResourceResult - 133, // 10: akuity.io.kargo.service.v1alpha1.ListStagesResponse.stages:type_name -> github.com.akuity.kargo.api.v1alpha1.Stage - 128, // 11: akuity.io.kargo.service.v1alpha1.ListImagesResponse.images:type_name -> akuity.io.kargo.service.v1alpha1.ListImagesResponse.ImagesEntry - 129, // 12: akuity.io.kargo.service.v1alpha1.TagMap.tags:type_name -> akuity.io.kargo.service.v1alpha1.TagMap.TagsEntry - 130, // 13: akuity.io.kargo.service.v1alpha1.ImageStageMap.stages:type_name -> akuity.io.kargo.service.v1alpha1.ImageStageMap.StagesEntry + 139, // 10: akuity.io.kargo.service.v1alpha1.ListStagesResponse.stages:type_name -> github.com.akuity.kargo.api.v1alpha1.Stage + 134, // 11: akuity.io.kargo.service.v1alpha1.ListImagesResponse.images:type_name -> akuity.io.kargo.service.v1alpha1.ListImagesResponse.ImagesEntry + 135, // 12: akuity.io.kargo.service.v1alpha1.TagMap.tags:type_name -> akuity.io.kargo.service.v1alpha1.TagMap.TagsEntry + 136, // 13: akuity.io.kargo.service.v1alpha1.ImageStageMap.stages:type_name -> akuity.io.kargo.service.v1alpha1.ImageStageMap.StagesEntry 0, // 14: akuity.io.kargo.service.v1alpha1.GetStageRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 133, // 15: akuity.io.kargo.service.v1alpha1.GetStageResponse.stage:type_name -> github.com.akuity.kargo.api.v1alpha1.Stage - 133, // 16: akuity.io.kargo.service.v1alpha1.WatchStagesResponse.stage:type_name -> github.com.akuity.kargo.api.v1alpha1.Stage - 133, // 17: akuity.io.kargo.service.v1alpha1.RefreshStageResponse.stage:type_name -> github.com.akuity.kargo.api.v1alpha1.Stage - 134, // 18: akuity.io.kargo.service.v1alpha1.ListPromotionsResponse.promotions:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion - 134, // 19: akuity.io.kargo.service.v1alpha1.WatchPromotionsResponse.promotion:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion + 139, // 15: akuity.io.kargo.service.v1alpha1.GetStageResponse.stage:type_name -> github.com.akuity.kargo.api.v1alpha1.Stage + 139, // 16: akuity.io.kargo.service.v1alpha1.WatchStagesResponse.stage:type_name -> github.com.akuity.kargo.api.v1alpha1.Stage + 139, // 17: akuity.io.kargo.service.v1alpha1.RefreshStageResponse.stage:type_name -> github.com.akuity.kargo.api.v1alpha1.Stage + 140, // 18: akuity.io.kargo.service.v1alpha1.ListPromotionsResponse.promotions:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion + 140, // 19: akuity.io.kargo.service.v1alpha1.WatchPromotionsResponse.promotion:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion 0, // 20: akuity.io.kargo.service.v1alpha1.GetPromotionRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 134, // 21: akuity.io.kargo.service.v1alpha1.GetPromotionResponse.promotion:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion - 134, // 22: akuity.io.kargo.service.v1alpha1.WatchPromotionResponse.promotion:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion + 140, // 21: akuity.io.kargo.service.v1alpha1.GetPromotionResponse.promotion:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion + 140, // 22: akuity.io.kargo.service.v1alpha1.WatchPromotionResponse.promotion:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion 0, // 23: akuity.io.kargo.service.v1alpha1.GetProjectRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 135, // 24: akuity.io.kargo.service.v1alpha1.GetProjectResponse.project:type_name -> github.com.akuity.kargo.api.v1alpha1.Project - 135, // 25: akuity.io.kargo.service.v1alpha1.ListProjectsResponse.projects:type_name -> github.com.akuity.kargo.api.v1alpha1.Project + 141, // 24: akuity.io.kargo.service.v1alpha1.GetProjectResponse.project:type_name -> github.com.akuity.kargo.api.v1alpha1.Project + 141, // 25: akuity.io.kargo.service.v1alpha1.ListProjectsResponse.projects:type_name -> github.com.akuity.kargo.api.v1alpha1.Project 0, // 26: akuity.io.kargo.service.v1alpha1.GetFreightRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 136, // 27: akuity.io.kargo.service.v1alpha1.GetFreightResponse.freight:type_name -> github.com.akuity.kargo.api.v1alpha1.Freight - 134, // 28: akuity.io.kargo.service.v1alpha1.PromoteToStageResponse.promotion:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion - 134, // 29: akuity.io.kargo.service.v1alpha1.PromoteDownstreamResponse.promotions:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion - 131, // 30: akuity.io.kargo.service.v1alpha1.QueryFreightResponse.groups:type_name -> akuity.io.kargo.service.v1alpha1.QueryFreightResponse.GroupsEntry - 136, // 31: akuity.io.kargo.service.v1alpha1.FreightList.freight:type_name -> github.com.akuity.kargo.api.v1alpha1.Freight - 137, // 32: akuity.io.kargo.service.v1alpha1.ListWarehousesResponse.warehouses:type_name -> github.com.akuity.kargo.api.v1alpha1.Warehouse + 142, // 27: akuity.io.kargo.service.v1alpha1.GetFreightResponse.freight:type_name -> github.com.akuity.kargo.api.v1alpha1.Freight + 140, // 28: akuity.io.kargo.service.v1alpha1.PromoteToStageResponse.promotion:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion + 140, // 29: akuity.io.kargo.service.v1alpha1.PromoteDownstreamResponse.promotions:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion + 137, // 30: akuity.io.kargo.service.v1alpha1.QueryFreightResponse.groups:type_name -> akuity.io.kargo.service.v1alpha1.QueryFreightResponse.GroupsEntry + 142, // 31: akuity.io.kargo.service.v1alpha1.FreightList.freight:type_name -> github.com.akuity.kargo.api.v1alpha1.Freight + 143, // 32: akuity.io.kargo.service.v1alpha1.ListWarehousesResponse.warehouses:type_name -> github.com.akuity.kargo.api.v1alpha1.Warehouse 0, // 33: akuity.io.kargo.service.v1alpha1.GetWarehouseRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 137, // 34: akuity.io.kargo.service.v1alpha1.GetWarehouseResponse.warehouse:type_name -> github.com.akuity.kargo.api.v1alpha1.Warehouse - 137, // 35: akuity.io.kargo.service.v1alpha1.WatchWarehousesResponse.warehouse:type_name -> github.com.akuity.kargo.api.v1alpha1.Warehouse - 137, // 36: akuity.io.kargo.service.v1alpha1.RefreshWarehouseResponse.warehouse:type_name -> github.com.akuity.kargo.api.v1alpha1.Warehouse - 138, // 37: akuity.io.kargo.service.v1alpha1.CreateCredentialsResponse.credentials:type_name -> k8s.io.api.core.v1.Secret + 143, // 34: akuity.io.kargo.service.v1alpha1.GetWarehouseResponse.warehouse:type_name -> github.com.akuity.kargo.api.v1alpha1.Warehouse + 143, // 35: akuity.io.kargo.service.v1alpha1.WatchWarehousesResponse.warehouse:type_name -> github.com.akuity.kargo.api.v1alpha1.Warehouse + 143, // 36: akuity.io.kargo.service.v1alpha1.RefreshWarehouseResponse.warehouse:type_name -> github.com.akuity.kargo.api.v1alpha1.Warehouse + 144, // 37: akuity.io.kargo.service.v1alpha1.CreateCredentialsResponse.credentials:type_name -> k8s.io.api.core.v1.Secret 0, // 38: akuity.io.kargo.service.v1alpha1.GetCredentialsRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 138, // 39: akuity.io.kargo.service.v1alpha1.GetCredentialsResponse.credentials:type_name -> k8s.io.api.core.v1.Secret - 138, // 40: akuity.io.kargo.service.v1alpha1.ListCredentialsResponse.credentials:type_name -> k8s.io.api.core.v1.Secret - 138, // 41: akuity.io.kargo.service.v1alpha1.UpdateCredentialsResponse.credentials:type_name -> k8s.io.api.core.v1.Secret - 139, // 42: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplatesResponse.analysis_templates:type_name -> github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.AnalysisTemplate + 144, // 39: akuity.io.kargo.service.v1alpha1.GetCredentialsResponse.credentials:type_name -> k8s.io.api.core.v1.Secret + 144, // 40: akuity.io.kargo.service.v1alpha1.ListCredentialsResponse.credentials:type_name -> k8s.io.api.core.v1.Secret + 144, // 41: akuity.io.kargo.service.v1alpha1.UpdateCredentialsResponse.credentials:type_name -> k8s.io.api.core.v1.Secret + 145, // 42: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplatesResponse.analysis_templates:type_name -> github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.AnalysisTemplate 0, // 43: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 139, // 44: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateResponse.analysis_template:type_name -> github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.AnalysisTemplate - 0, // 45: akuity.io.kargo.service.v1alpha1.GetAnalysisRunRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 140, // 46: akuity.io.kargo.service.v1alpha1.GetAnalysisRunResponse.analysis_run:type_name -> github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.AnalysisRun - 141, // 47: akuity.io.kargo.service.v1alpha1.ListProjectEventsResponse.events:type_name -> k8s.io.api.core.v1.Event - 142, // 48: akuity.io.kargo.service.v1alpha1.CreateRoleRequest.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role - 142, // 49: akuity.io.kargo.service.v1alpha1.CreateRoleResponse.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role - 0, // 50: akuity.io.kargo.service.v1alpha1.GetRoleRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 142, // 51: akuity.io.kargo.service.v1alpha1.GetRoleResponse.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role - 143, // 52: akuity.io.kargo.service.v1alpha1.GetRoleResponse.resources:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.RoleResources - 144, // 53: akuity.io.kargo.service.v1alpha1.Claims.claims:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Claim - 110, // 54: akuity.io.kargo.service.v1alpha1.GrantRequest.user_claims:type_name -> akuity.io.kargo.service.v1alpha1.Claims - 145, // 55: akuity.io.kargo.service.v1alpha1.GrantRequest.resource_details:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.ResourceDetails - 142, // 56: akuity.io.kargo.service.v1alpha1.GrantResponse.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role - 142, // 57: akuity.io.kargo.service.v1alpha1.ListRolesResponse.roles:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role - 143, // 58: akuity.io.kargo.service.v1alpha1.ListRolesResponse.resources:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.RoleResources - 110, // 59: akuity.io.kargo.service.v1alpha1.RevokeRequest.user_claims:type_name -> akuity.io.kargo.service.v1alpha1.Claims - 145, // 60: akuity.io.kargo.service.v1alpha1.RevokeRequest.resource_details:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.ResourceDetails - 142, // 61: akuity.io.kargo.service.v1alpha1.RevokeResponse.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role - 142, // 62: akuity.io.kargo.service.v1alpha1.UpdateRoleRequest.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role - 142, // 63: akuity.io.kargo.service.v1alpha1.UpdateRoleResponse.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role - 146, // 64: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateConfigMapsResponse.config_maps:type_name -> k8s.io.api.core.v1.ConfigMap - 0, // 65: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 146, // 66: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapResponse.config_map:type_name -> k8s.io.api.core.v1.ConfigMap - 138, // 67: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateSecretsResponse.secrets:type_name -> k8s.io.api.core.v1.Secret - 0, // 68: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 138, // 69: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretResponse.secret:type_name -> k8s.io.api.core.v1.Secret - 6, // 70: akuity.io.kargo.service.v1alpha1.GetConfigResponse.ArgocdShardsEntry.value:type_name -> akuity.io.kargo.service.v1alpha1.ArgoCDShard - 29, // 71: akuity.io.kargo.service.v1alpha1.ListImagesResponse.ImagesEntry.value:type_name -> akuity.io.kargo.service.v1alpha1.TagMap - 30, // 72: akuity.io.kargo.service.v1alpha1.TagMap.TagsEntry.value:type_name -> akuity.io.kargo.service.v1alpha1.ImageStageMap - 67, // 73: akuity.io.kargo.service.v1alpha1.QueryFreightResponse.GroupsEntry.value:type_name -> akuity.io.kargo.service.v1alpha1.FreightList - 3, // 74: akuity.io.kargo.service.v1alpha1.KargoService.GetVersionInfo:input_type -> akuity.io.kargo.service.v1alpha1.GetVersionInfoRequest - 5, // 75: akuity.io.kargo.service.v1alpha1.KargoService.GetConfig:input_type -> akuity.io.kargo.service.v1alpha1.GetConfigRequest - 8, // 76: akuity.io.kargo.service.v1alpha1.KargoService.GetPublicConfig:input_type -> akuity.io.kargo.service.v1alpha1.GetPublicConfigRequest - 11, // 77: akuity.io.kargo.service.v1alpha1.KargoService.AdminLogin:input_type -> akuity.io.kargo.service.v1alpha1.AdminLoginRequest - 13, // 78: akuity.io.kargo.service.v1alpha1.KargoService.CreateResource:input_type -> akuity.io.kargo.service.v1alpha1.CreateResourceRequest - 16, // 79: akuity.io.kargo.service.v1alpha1.KargoService.CreateOrUpdateResource:input_type -> akuity.io.kargo.service.v1alpha1.CreateOrUpdateResourceRequest - 19, // 80: akuity.io.kargo.service.v1alpha1.KargoService.UpdateResource:input_type -> akuity.io.kargo.service.v1alpha1.UpdateResourceRequest - 22, // 81: akuity.io.kargo.service.v1alpha1.KargoService.DeleteResource:input_type -> akuity.io.kargo.service.v1alpha1.DeleteResourceRequest - 25, // 82: akuity.io.kargo.service.v1alpha1.KargoService.ListStages:input_type -> akuity.io.kargo.service.v1alpha1.ListStagesRequest - 27, // 83: akuity.io.kargo.service.v1alpha1.KargoService.ListImages:input_type -> akuity.io.kargo.service.v1alpha1.ListImagesRequest - 31, // 84: akuity.io.kargo.service.v1alpha1.KargoService.GetStage:input_type -> akuity.io.kargo.service.v1alpha1.GetStageRequest - 33, // 85: akuity.io.kargo.service.v1alpha1.KargoService.WatchStages:input_type -> akuity.io.kargo.service.v1alpha1.WatchStagesRequest - 35, // 86: akuity.io.kargo.service.v1alpha1.KargoService.DeleteStage:input_type -> akuity.io.kargo.service.v1alpha1.DeleteStageRequest - 37, // 87: akuity.io.kargo.service.v1alpha1.KargoService.RefreshStage:input_type -> akuity.io.kargo.service.v1alpha1.RefreshStageRequest - 39, // 88: akuity.io.kargo.service.v1alpha1.KargoService.ListPromotions:input_type -> akuity.io.kargo.service.v1alpha1.ListPromotionsRequest - 41, // 89: akuity.io.kargo.service.v1alpha1.KargoService.WatchPromotions:input_type -> akuity.io.kargo.service.v1alpha1.WatchPromotionsRequest - 43, // 90: akuity.io.kargo.service.v1alpha1.KargoService.GetPromotion:input_type -> akuity.io.kargo.service.v1alpha1.GetPromotionRequest - 45, // 91: akuity.io.kargo.service.v1alpha1.KargoService.WatchPromotion:input_type -> akuity.io.kargo.service.v1alpha1.WatchPromotionRequest - 47, // 92: akuity.io.kargo.service.v1alpha1.KargoService.AbortPromotion:input_type -> akuity.io.kargo.service.v1alpha1.AbortPromotionRequest - 49, // 93: akuity.io.kargo.service.v1alpha1.KargoService.DeleteProject:input_type -> akuity.io.kargo.service.v1alpha1.DeleteProjectRequest - 51, // 94: akuity.io.kargo.service.v1alpha1.KargoService.GetProject:input_type -> akuity.io.kargo.service.v1alpha1.GetProjectRequest - 53, // 95: akuity.io.kargo.service.v1alpha1.KargoService.ListProjects:input_type -> akuity.io.kargo.service.v1alpha1.ListProjectsRequest - 55, // 96: akuity.io.kargo.service.v1alpha1.KargoService.ApproveFreight:input_type -> akuity.io.kargo.service.v1alpha1.ApproveFreightRequest - 57, // 97: akuity.io.kargo.service.v1alpha1.KargoService.DeleteFreight:input_type -> akuity.io.kargo.service.v1alpha1.DeleteFreightRequest - 59, // 98: akuity.io.kargo.service.v1alpha1.KargoService.GetFreight:input_type -> akuity.io.kargo.service.v1alpha1.GetFreightRequest - 61, // 99: akuity.io.kargo.service.v1alpha1.KargoService.PromoteToStage:input_type -> akuity.io.kargo.service.v1alpha1.PromoteToStageRequest - 63, // 100: akuity.io.kargo.service.v1alpha1.KargoService.PromoteDownstream:input_type -> akuity.io.kargo.service.v1alpha1.PromoteDownstreamRequest - 65, // 101: akuity.io.kargo.service.v1alpha1.KargoService.QueryFreight:input_type -> akuity.io.kargo.service.v1alpha1.QueryFreightRequest - 68, // 102: akuity.io.kargo.service.v1alpha1.KargoService.UpdateFreightAlias:input_type -> akuity.io.kargo.service.v1alpha1.UpdateFreightAliasRequest - 70, // 103: akuity.io.kargo.service.v1alpha1.KargoService.Reverify:input_type -> akuity.io.kargo.service.v1alpha1.ReverifyRequest - 72, // 104: akuity.io.kargo.service.v1alpha1.KargoService.AbortVerification:input_type -> akuity.io.kargo.service.v1alpha1.AbortVerificationRequest - 74, // 105: akuity.io.kargo.service.v1alpha1.KargoService.ListWarehouses:input_type -> akuity.io.kargo.service.v1alpha1.ListWarehousesRequest - 76, // 106: akuity.io.kargo.service.v1alpha1.KargoService.GetWarehouse:input_type -> akuity.io.kargo.service.v1alpha1.GetWarehouseRequest - 78, // 107: akuity.io.kargo.service.v1alpha1.KargoService.WatchWarehouses:input_type -> akuity.io.kargo.service.v1alpha1.WatchWarehousesRequest - 80, // 108: akuity.io.kargo.service.v1alpha1.KargoService.DeleteWarehouse:input_type -> akuity.io.kargo.service.v1alpha1.DeleteWarehouseRequest - 82, // 109: akuity.io.kargo.service.v1alpha1.KargoService.RefreshWarehouse:input_type -> akuity.io.kargo.service.v1alpha1.RefreshWarehouseRequest - 84, // 110: akuity.io.kargo.service.v1alpha1.KargoService.CreateCredentials:input_type -> akuity.io.kargo.service.v1alpha1.CreateCredentialsRequest - 86, // 111: akuity.io.kargo.service.v1alpha1.KargoService.DeleteCredentials:input_type -> akuity.io.kargo.service.v1alpha1.DeleteCredentialsRequest - 88, // 112: akuity.io.kargo.service.v1alpha1.KargoService.GetCredentials:input_type -> akuity.io.kargo.service.v1alpha1.GetCredentialsRequest - 90, // 113: akuity.io.kargo.service.v1alpha1.KargoService.ListCredentials:input_type -> akuity.io.kargo.service.v1alpha1.ListCredentialsRequest - 92, // 114: akuity.io.kargo.service.v1alpha1.KargoService.UpdateCredentials:input_type -> akuity.io.kargo.service.v1alpha1.UpdateCredentialsRequest - 94, // 115: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplates:input_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplatesRequest - 96, // 116: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplate:input_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateRequest - 100, // 117: akuity.io.kargo.service.v1alpha1.KargoService.DeleteAnalysisTemplate:input_type -> akuity.io.kargo.service.v1alpha1.DeleteAnalysisTemplateRequest - 98, // 118: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisRun:input_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisRunRequest - 119, // 119: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplateConfigMaps:input_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateConfigMapsRequest - 121, // 120: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplateConfigMap:input_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapRequest - 123, // 121: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplateSecrets:input_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateSecretsRequest - 125, // 122: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplateSecret:input_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretRequest - 102, // 123: akuity.io.kargo.service.v1alpha1.KargoService.ListProjectEvents:input_type -> akuity.io.kargo.service.v1alpha1.ListProjectEventsRequest - 104, // 124: akuity.io.kargo.service.v1alpha1.KargoService.CreateRole:input_type -> akuity.io.kargo.service.v1alpha1.CreateRoleRequest - 106, // 125: akuity.io.kargo.service.v1alpha1.KargoService.DeleteRole:input_type -> akuity.io.kargo.service.v1alpha1.DeleteRoleRequest - 108, // 126: akuity.io.kargo.service.v1alpha1.KargoService.GetRole:input_type -> akuity.io.kargo.service.v1alpha1.GetRoleRequest - 111, // 127: akuity.io.kargo.service.v1alpha1.KargoService.Grant:input_type -> akuity.io.kargo.service.v1alpha1.GrantRequest - 113, // 128: akuity.io.kargo.service.v1alpha1.KargoService.ListRoles:input_type -> akuity.io.kargo.service.v1alpha1.ListRolesRequest - 115, // 129: akuity.io.kargo.service.v1alpha1.KargoService.Revoke:input_type -> akuity.io.kargo.service.v1alpha1.RevokeRequest - 117, // 130: akuity.io.kargo.service.v1alpha1.KargoService.UpdateRole:input_type -> akuity.io.kargo.service.v1alpha1.UpdateRoleRequest - 4, // 131: akuity.io.kargo.service.v1alpha1.KargoService.GetVersionInfo:output_type -> akuity.io.kargo.service.v1alpha1.GetVersionInfoResponse - 7, // 132: akuity.io.kargo.service.v1alpha1.KargoService.GetConfig:output_type -> akuity.io.kargo.service.v1alpha1.GetConfigResponse - 9, // 133: akuity.io.kargo.service.v1alpha1.KargoService.GetPublicConfig:output_type -> akuity.io.kargo.service.v1alpha1.GetPublicConfigResponse - 12, // 134: akuity.io.kargo.service.v1alpha1.KargoService.AdminLogin:output_type -> akuity.io.kargo.service.v1alpha1.AdminLoginResponse - 15, // 135: akuity.io.kargo.service.v1alpha1.KargoService.CreateResource:output_type -> akuity.io.kargo.service.v1alpha1.CreateResourceResponse - 18, // 136: akuity.io.kargo.service.v1alpha1.KargoService.CreateOrUpdateResource:output_type -> akuity.io.kargo.service.v1alpha1.CreateOrUpdateResourceResponse - 21, // 137: akuity.io.kargo.service.v1alpha1.KargoService.UpdateResource:output_type -> akuity.io.kargo.service.v1alpha1.UpdateResourceResponse - 24, // 138: akuity.io.kargo.service.v1alpha1.KargoService.DeleteResource:output_type -> akuity.io.kargo.service.v1alpha1.DeleteResourceResponse - 26, // 139: akuity.io.kargo.service.v1alpha1.KargoService.ListStages:output_type -> akuity.io.kargo.service.v1alpha1.ListStagesResponse - 28, // 140: akuity.io.kargo.service.v1alpha1.KargoService.ListImages:output_type -> akuity.io.kargo.service.v1alpha1.ListImagesResponse - 32, // 141: akuity.io.kargo.service.v1alpha1.KargoService.GetStage:output_type -> akuity.io.kargo.service.v1alpha1.GetStageResponse - 34, // 142: akuity.io.kargo.service.v1alpha1.KargoService.WatchStages:output_type -> akuity.io.kargo.service.v1alpha1.WatchStagesResponse - 36, // 143: akuity.io.kargo.service.v1alpha1.KargoService.DeleteStage:output_type -> akuity.io.kargo.service.v1alpha1.DeleteStageResponse - 38, // 144: akuity.io.kargo.service.v1alpha1.KargoService.RefreshStage:output_type -> akuity.io.kargo.service.v1alpha1.RefreshStageResponse - 40, // 145: akuity.io.kargo.service.v1alpha1.KargoService.ListPromotions:output_type -> akuity.io.kargo.service.v1alpha1.ListPromotionsResponse - 42, // 146: akuity.io.kargo.service.v1alpha1.KargoService.WatchPromotions:output_type -> akuity.io.kargo.service.v1alpha1.WatchPromotionsResponse - 44, // 147: akuity.io.kargo.service.v1alpha1.KargoService.GetPromotion:output_type -> akuity.io.kargo.service.v1alpha1.GetPromotionResponse - 46, // 148: akuity.io.kargo.service.v1alpha1.KargoService.WatchPromotion:output_type -> akuity.io.kargo.service.v1alpha1.WatchPromotionResponse - 48, // 149: akuity.io.kargo.service.v1alpha1.KargoService.AbortPromotion:output_type -> akuity.io.kargo.service.v1alpha1.AbortPromotionResponse - 50, // 150: akuity.io.kargo.service.v1alpha1.KargoService.DeleteProject:output_type -> akuity.io.kargo.service.v1alpha1.DeleteProjectResponse - 52, // 151: akuity.io.kargo.service.v1alpha1.KargoService.GetProject:output_type -> akuity.io.kargo.service.v1alpha1.GetProjectResponse - 54, // 152: akuity.io.kargo.service.v1alpha1.KargoService.ListProjects:output_type -> akuity.io.kargo.service.v1alpha1.ListProjectsResponse - 56, // 153: akuity.io.kargo.service.v1alpha1.KargoService.ApproveFreight:output_type -> akuity.io.kargo.service.v1alpha1.ApproveFreightResponse - 58, // 154: akuity.io.kargo.service.v1alpha1.KargoService.DeleteFreight:output_type -> akuity.io.kargo.service.v1alpha1.DeleteFreightResponse - 60, // 155: akuity.io.kargo.service.v1alpha1.KargoService.GetFreight:output_type -> akuity.io.kargo.service.v1alpha1.GetFreightResponse - 62, // 156: akuity.io.kargo.service.v1alpha1.KargoService.PromoteToStage:output_type -> akuity.io.kargo.service.v1alpha1.PromoteToStageResponse - 64, // 157: akuity.io.kargo.service.v1alpha1.KargoService.PromoteDownstream:output_type -> akuity.io.kargo.service.v1alpha1.PromoteDownstreamResponse - 66, // 158: akuity.io.kargo.service.v1alpha1.KargoService.QueryFreight:output_type -> akuity.io.kargo.service.v1alpha1.QueryFreightResponse - 69, // 159: akuity.io.kargo.service.v1alpha1.KargoService.UpdateFreightAlias:output_type -> akuity.io.kargo.service.v1alpha1.UpdateFreightAliasResponse - 71, // 160: akuity.io.kargo.service.v1alpha1.KargoService.Reverify:output_type -> akuity.io.kargo.service.v1alpha1.ReverifyResponse - 73, // 161: akuity.io.kargo.service.v1alpha1.KargoService.AbortVerification:output_type -> akuity.io.kargo.service.v1alpha1.AbortVerificationResponse - 75, // 162: akuity.io.kargo.service.v1alpha1.KargoService.ListWarehouses:output_type -> akuity.io.kargo.service.v1alpha1.ListWarehousesResponse - 77, // 163: akuity.io.kargo.service.v1alpha1.KargoService.GetWarehouse:output_type -> akuity.io.kargo.service.v1alpha1.GetWarehouseResponse - 79, // 164: akuity.io.kargo.service.v1alpha1.KargoService.WatchWarehouses:output_type -> akuity.io.kargo.service.v1alpha1.WatchWarehousesResponse - 81, // 165: akuity.io.kargo.service.v1alpha1.KargoService.DeleteWarehouse:output_type -> akuity.io.kargo.service.v1alpha1.DeleteWarehouseResponse - 83, // 166: akuity.io.kargo.service.v1alpha1.KargoService.RefreshWarehouse:output_type -> akuity.io.kargo.service.v1alpha1.RefreshWarehouseResponse - 85, // 167: akuity.io.kargo.service.v1alpha1.KargoService.CreateCredentials:output_type -> akuity.io.kargo.service.v1alpha1.CreateCredentialsResponse - 87, // 168: akuity.io.kargo.service.v1alpha1.KargoService.DeleteCredentials:output_type -> akuity.io.kargo.service.v1alpha1.DeleteCredentialsResponse - 89, // 169: akuity.io.kargo.service.v1alpha1.KargoService.GetCredentials:output_type -> akuity.io.kargo.service.v1alpha1.GetCredentialsResponse - 91, // 170: akuity.io.kargo.service.v1alpha1.KargoService.ListCredentials:output_type -> akuity.io.kargo.service.v1alpha1.ListCredentialsResponse - 93, // 171: akuity.io.kargo.service.v1alpha1.KargoService.UpdateCredentials:output_type -> akuity.io.kargo.service.v1alpha1.UpdateCredentialsResponse - 95, // 172: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplates:output_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplatesResponse - 97, // 173: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplate:output_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateResponse - 101, // 174: akuity.io.kargo.service.v1alpha1.KargoService.DeleteAnalysisTemplate:output_type -> akuity.io.kargo.service.v1alpha1.DeleteAnalysisTemplateResponse - 99, // 175: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisRun:output_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisRunResponse - 120, // 176: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplateConfigMaps:output_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateConfigMapsResponse - 122, // 177: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplateConfigMap:output_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapResponse - 124, // 178: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplateSecrets:output_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateSecretsResponse - 126, // 179: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplateSecret:output_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretResponse - 103, // 180: akuity.io.kargo.service.v1alpha1.KargoService.ListProjectEvents:output_type -> akuity.io.kargo.service.v1alpha1.ListProjectEventsResponse - 105, // 181: akuity.io.kargo.service.v1alpha1.KargoService.CreateRole:output_type -> akuity.io.kargo.service.v1alpha1.CreateRoleResponse - 107, // 182: akuity.io.kargo.service.v1alpha1.KargoService.DeleteRole:output_type -> akuity.io.kargo.service.v1alpha1.DeleteRoleResponse - 109, // 183: akuity.io.kargo.service.v1alpha1.KargoService.GetRole:output_type -> akuity.io.kargo.service.v1alpha1.GetRoleResponse - 112, // 184: akuity.io.kargo.service.v1alpha1.KargoService.Grant:output_type -> akuity.io.kargo.service.v1alpha1.GrantResponse - 114, // 185: akuity.io.kargo.service.v1alpha1.KargoService.ListRoles:output_type -> akuity.io.kargo.service.v1alpha1.ListRolesResponse - 116, // 186: akuity.io.kargo.service.v1alpha1.KargoService.Revoke:output_type -> akuity.io.kargo.service.v1alpha1.RevokeResponse - 118, // 187: akuity.io.kargo.service.v1alpha1.KargoService.UpdateRole:output_type -> akuity.io.kargo.service.v1alpha1.UpdateRoleResponse - 131, // [131:188] is the sub-list for method output_type - 74, // [74:131] is the sub-list for method input_type - 74, // [74:74] is the sub-list for extension type_name - 74, // [74:74] is the sub-list for extension extendee - 0, // [0:74] is the sub-list for field type_name + 145, // 44: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateResponse.analysis_template:type_name -> github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.AnalysisTemplate + 146, // 45: akuity.io.kargo.service.v1alpha1.ListClusterAnalysisTemplatesResponse.cluster_analysis_templates:type_name -> github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.ClusterAnalysisTemplate + 0, // 46: akuity.io.kargo.service.v1alpha1.GetClusterAnalysisTemplateRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat + 146, // 47: akuity.io.kargo.service.v1alpha1.GetClusterAnalysisTemplateResponse.cluster_analysis_template:type_name -> github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.ClusterAnalysisTemplate + 0, // 48: akuity.io.kargo.service.v1alpha1.GetAnalysisRunRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat + 147, // 49: akuity.io.kargo.service.v1alpha1.GetAnalysisRunResponse.analysis_run:type_name -> github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.AnalysisRun + 148, // 50: akuity.io.kargo.service.v1alpha1.ListProjectEventsResponse.events:type_name -> k8s.io.api.core.v1.Event + 149, // 51: akuity.io.kargo.service.v1alpha1.CreateRoleRequest.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role + 149, // 52: akuity.io.kargo.service.v1alpha1.CreateRoleResponse.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role + 0, // 53: akuity.io.kargo.service.v1alpha1.GetRoleRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat + 149, // 54: akuity.io.kargo.service.v1alpha1.GetRoleResponse.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role + 150, // 55: akuity.io.kargo.service.v1alpha1.GetRoleResponse.resources:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.RoleResources + 151, // 56: akuity.io.kargo.service.v1alpha1.Claims.claims:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Claim + 116, // 57: akuity.io.kargo.service.v1alpha1.GrantRequest.user_claims:type_name -> akuity.io.kargo.service.v1alpha1.Claims + 152, // 58: akuity.io.kargo.service.v1alpha1.GrantRequest.resource_details:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.ResourceDetails + 149, // 59: akuity.io.kargo.service.v1alpha1.GrantResponse.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role + 149, // 60: akuity.io.kargo.service.v1alpha1.ListRolesResponse.roles:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role + 150, // 61: akuity.io.kargo.service.v1alpha1.ListRolesResponse.resources:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.RoleResources + 116, // 62: akuity.io.kargo.service.v1alpha1.RevokeRequest.user_claims:type_name -> akuity.io.kargo.service.v1alpha1.Claims + 152, // 63: akuity.io.kargo.service.v1alpha1.RevokeRequest.resource_details:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.ResourceDetails + 149, // 64: akuity.io.kargo.service.v1alpha1.RevokeResponse.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role + 149, // 65: akuity.io.kargo.service.v1alpha1.UpdateRoleRequest.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role + 149, // 66: akuity.io.kargo.service.v1alpha1.UpdateRoleResponse.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role + 153, // 67: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateConfigMapsResponse.config_maps:type_name -> k8s.io.api.core.v1.ConfigMap + 0, // 68: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat + 153, // 69: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapResponse.config_map:type_name -> k8s.io.api.core.v1.ConfigMap + 144, // 70: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateSecretsResponse.secrets:type_name -> k8s.io.api.core.v1.Secret + 0, // 71: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat + 144, // 72: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretResponse.secret:type_name -> k8s.io.api.core.v1.Secret + 6, // 73: akuity.io.kargo.service.v1alpha1.GetConfigResponse.ArgocdShardsEntry.value:type_name -> akuity.io.kargo.service.v1alpha1.ArgoCDShard + 29, // 74: akuity.io.kargo.service.v1alpha1.ListImagesResponse.ImagesEntry.value:type_name -> akuity.io.kargo.service.v1alpha1.TagMap + 30, // 75: akuity.io.kargo.service.v1alpha1.TagMap.TagsEntry.value:type_name -> akuity.io.kargo.service.v1alpha1.ImageStageMap + 67, // 76: akuity.io.kargo.service.v1alpha1.QueryFreightResponse.GroupsEntry.value:type_name -> akuity.io.kargo.service.v1alpha1.FreightList + 3, // 77: akuity.io.kargo.service.v1alpha1.KargoService.GetVersionInfo:input_type -> akuity.io.kargo.service.v1alpha1.GetVersionInfoRequest + 5, // 78: akuity.io.kargo.service.v1alpha1.KargoService.GetConfig:input_type -> akuity.io.kargo.service.v1alpha1.GetConfigRequest + 8, // 79: akuity.io.kargo.service.v1alpha1.KargoService.GetPublicConfig:input_type -> akuity.io.kargo.service.v1alpha1.GetPublicConfigRequest + 11, // 80: akuity.io.kargo.service.v1alpha1.KargoService.AdminLogin:input_type -> akuity.io.kargo.service.v1alpha1.AdminLoginRequest + 13, // 81: akuity.io.kargo.service.v1alpha1.KargoService.CreateResource:input_type -> akuity.io.kargo.service.v1alpha1.CreateResourceRequest + 16, // 82: akuity.io.kargo.service.v1alpha1.KargoService.CreateOrUpdateResource:input_type -> akuity.io.kargo.service.v1alpha1.CreateOrUpdateResourceRequest + 19, // 83: akuity.io.kargo.service.v1alpha1.KargoService.UpdateResource:input_type -> akuity.io.kargo.service.v1alpha1.UpdateResourceRequest + 22, // 84: akuity.io.kargo.service.v1alpha1.KargoService.DeleteResource:input_type -> akuity.io.kargo.service.v1alpha1.DeleteResourceRequest + 25, // 85: akuity.io.kargo.service.v1alpha1.KargoService.ListStages:input_type -> akuity.io.kargo.service.v1alpha1.ListStagesRequest + 27, // 86: akuity.io.kargo.service.v1alpha1.KargoService.ListImages:input_type -> akuity.io.kargo.service.v1alpha1.ListImagesRequest + 31, // 87: akuity.io.kargo.service.v1alpha1.KargoService.GetStage:input_type -> akuity.io.kargo.service.v1alpha1.GetStageRequest + 33, // 88: akuity.io.kargo.service.v1alpha1.KargoService.WatchStages:input_type -> akuity.io.kargo.service.v1alpha1.WatchStagesRequest + 35, // 89: akuity.io.kargo.service.v1alpha1.KargoService.DeleteStage:input_type -> akuity.io.kargo.service.v1alpha1.DeleteStageRequest + 37, // 90: akuity.io.kargo.service.v1alpha1.KargoService.RefreshStage:input_type -> akuity.io.kargo.service.v1alpha1.RefreshStageRequest + 39, // 91: akuity.io.kargo.service.v1alpha1.KargoService.ListPromotions:input_type -> akuity.io.kargo.service.v1alpha1.ListPromotionsRequest + 41, // 92: akuity.io.kargo.service.v1alpha1.KargoService.WatchPromotions:input_type -> akuity.io.kargo.service.v1alpha1.WatchPromotionsRequest + 43, // 93: akuity.io.kargo.service.v1alpha1.KargoService.GetPromotion:input_type -> akuity.io.kargo.service.v1alpha1.GetPromotionRequest + 45, // 94: akuity.io.kargo.service.v1alpha1.KargoService.WatchPromotion:input_type -> akuity.io.kargo.service.v1alpha1.WatchPromotionRequest + 47, // 95: akuity.io.kargo.service.v1alpha1.KargoService.AbortPromotion:input_type -> akuity.io.kargo.service.v1alpha1.AbortPromotionRequest + 49, // 96: akuity.io.kargo.service.v1alpha1.KargoService.DeleteProject:input_type -> akuity.io.kargo.service.v1alpha1.DeleteProjectRequest + 51, // 97: akuity.io.kargo.service.v1alpha1.KargoService.GetProject:input_type -> akuity.io.kargo.service.v1alpha1.GetProjectRequest + 53, // 98: akuity.io.kargo.service.v1alpha1.KargoService.ListProjects:input_type -> akuity.io.kargo.service.v1alpha1.ListProjectsRequest + 55, // 99: akuity.io.kargo.service.v1alpha1.KargoService.ApproveFreight:input_type -> akuity.io.kargo.service.v1alpha1.ApproveFreightRequest + 57, // 100: akuity.io.kargo.service.v1alpha1.KargoService.DeleteFreight:input_type -> akuity.io.kargo.service.v1alpha1.DeleteFreightRequest + 59, // 101: akuity.io.kargo.service.v1alpha1.KargoService.GetFreight:input_type -> akuity.io.kargo.service.v1alpha1.GetFreightRequest + 61, // 102: akuity.io.kargo.service.v1alpha1.KargoService.PromoteToStage:input_type -> akuity.io.kargo.service.v1alpha1.PromoteToStageRequest + 63, // 103: akuity.io.kargo.service.v1alpha1.KargoService.PromoteDownstream:input_type -> akuity.io.kargo.service.v1alpha1.PromoteDownstreamRequest + 65, // 104: akuity.io.kargo.service.v1alpha1.KargoService.QueryFreight:input_type -> akuity.io.kargo.service.v1alpha1.QueryFreightRequest + 68, // 105: akuity.io.kargo.service.v1alpha1.KargoService.UpdateFreightAlias:input_type -> akuity.io.kargo.service.v1alpha1.UpdateFreightAliasRequest + 70, // 106: akuity.io.kargo.service.v1alpha1.KargoService.Reverify:input_type -> akuity.io.kargo.service.v1alpha1.ReverifyRequest + 72, // 107: akuity.io.kargo.service.v1alpha1.KargoService.AbortVerification:input_type -> akuity.io.kargo.service.v1alpha1.AbortVerificationRequest + 74, // 108: akuity.io.kargo.service.v1alpha1.KargoService.ListWarehouses:input_type -> akuity.io.kargo.service.v1alpha1.ListWarehousesRequest + 76, // 109: akuity.io.kargo.service.v1alpha1.KargoService.GetWarehouse:input_type -> akuity.io.kargo.service.v1alpha1.GetWarehouseRequest + 78, // 110: akuity.io.kargo.service.v1alpha1.KargoService.WatchWarehouses:input_type -> akuity.io.kargo.service.v1alpha1.WatchWarehousesRequest + 80, // 111: akuity.io.kargo.service.v1alpha1.KargoService.DeleteWarehouse:input_type -> akuity.io.kargo.service.v1alpha1.DeleteWarehouseRequest + 82, // 112: akuity.io.kargo.service.v1alpha1.KargoService.RefreshWarehouse:input_type -> akuity.io.kargo.service.v1alpha1.RefreshWarehouseRequest + 84, // 113: akuity.io.kargo.service.v1alpha1.KargoService.CreateCredentials:input_type -> akuity.io.kargo.service.v1alpha1.CreateCredentialsRequest + 86, // 114: akuity.io.kargo.service.v1alpha1.KargoService.DeleteCredentials:input_type -> akuity.io.kargo.service.v1alpha1.DeleteCredentialsRequest + 88, // 115: akuity.io.kargo.service.v1alpha1.KargoService.GetCredentials:input_type -> akuity.io.kargo.service.v1alpha1.GetCredentialsRequest + 90, // 116: akuity.io.kargo.service.v1alpha1.KargoService.ListCredentials:input_type -> akuity.io.kargo.service.v1alpha1.ListCredentialsRequest + 92, // 117: akuity.io.kargo.service.v1alpha1.KargoService.UpdateCredentials:input_type -> akuity.io.kargo.service.v1alpha1.UpdateCredentialsRequest + 94, // 118: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplates:input_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplatesRequest + 96, // 119: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplate:input_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateRequest + 104, // 120: akuity.io.kargo.service.v1alpha1.KargoService.DeleteAnalysisTemplate:input_type -> akuity.io.kargo.service.v1alpha1.DeleteAnalysisTemplateRequest + 98, // 121: akuity.io.kargo.service.v1alpha1.KargoService.ListClusterAnalysisTemplates:input_type -> akuity.io.kargo.service.v1alpha1.ListClusterAnalysisTemplatesRequest + 100, // 122: akuity.io.kargo.service.v1alpha1.KargoService.GetClusterAnalysisTemplate:input_type -> akuity.io.kargo.service.v1alpha1.GetClusterAnalysisTemplateRequest + 106, // 123: akuity.io.kargo.service.v1alpha1.KargoService.DeleteClusterAnalysisTemplate:input_type -> akuity.io.kargo.service.v1alpha1.DeleteClusterAnalysisTemplateRequest + 102, // 124: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisRun:input_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisRunRequest + 125, // 125: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplateConfigMaps:input_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateConfigMapsRequest + 127, // 126: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplateConfigMap:input_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapRequest + 129, // 127: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplateSecrets:input_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateSecretsRequest + 131, // 128: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplateSecret:input_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretRequest + 108, // 129: akuity.io.kargo.service.v1alpha1.KargoService.ListProjectEvents:input_type -> akuity.io.kargo.service.v1alpha1.ListProjectEventsRequest + 110, // 130: akuity.io.kargo.service.v1alpha1.KargoService.CreateRole:input_type -> akuity.io.kargo.service.v1alpha1.CreateRoleRequest + 112, // 131: akuity.io.kargo.service.v1alpha1.KargoService.DeleteRole:input_type -> akuity.io.kargo.service.v1alpha1.DeleteRoleRequest + 114, // 132: akuity.io.kargo.service.v1alpha1.KargoService.GetRole:input_type -> akuity.io.kargo.service.v1alpha1.GetRoleRequest + 117, // 133: akuity.io.kargo.service.v1alpha1.KargoService.Grant:input_type -> akuity.io.kargo.service.v1alpha1.GrantRequest + 119, // 134: akuity.io.kargo.service.v1alpha1.KargoService.ListRoles:input_type -> akuity.io.kargo.service.v1alpha1.ListRolesRequest + 121, // 135: akuity.io.kargo.service.v1alpha1.KargoService.Revoke:input_type -> akuity.io.kargo.service.v1alpha1.RevokeRequest + 123, // 136: akuity.io.kargo.service.v1alpha1.KargoService.UpdateRole:input_type -> akuity.io.kargo.service.v1alpha1.UpdateRoleRequest + 4, // 137: akuity.io.kargo.service.v1alpha1.KargoService.GetVersionInfo:output_type -> akuity.io.kargo.service.v1alpha1.GetVersionInfoResponse + 7, // 138: akuity.io.kargo.service.v1alpha1.KargoService.GetConfig:output_type -> akuity.io.kargo.service.v1alpha1.GetConfigResponse + 9, // 139: akuity.io.kargo.service.v1alpha1.KargoService.GetPublicConfig:output_type -> akuity.io.kargo.service.v1alpha1.GetPublicConfigResponse + 12, // 140: akuity.io.kargo.service.v1alpha1.KargoService.AdminLogin:output_type -> akuity.io.kargo.service.v1alpha1.AdminLoginResponse + 15, // 141: akuity.io.kargo.service.v1alpha1.KargoService.CreateResource:output_type -> akuity.io.kargo.service.v1alpha1.CreateResourceResponse + 18, // 142: akuity.io.kargo.service.v1alpha1.KargoService.CreateOrUpdateResource:output_type -> akuity.io.kargo.service.v1alpha1.CreateOrUpdateResourceResponse + 21, // 143: akuity.io.kargo.service.v1alpha1.KargoService.UpdateResource:output_type -> akuity.io.kargo.service.v1alpha1.UpdateResourceResponse + 24, // 144: akuity.io.kargo.service.v1alpha1.KargoService.DeleteResource:output_type -> akuity.io.kargo.service.v1alpha1.DeleteResourceResponse + 26, // 145: akuity.io.kargo.service.v1alpha1.KargoService.ListStages:output_type -> akuity.io.kargo.service.v1alpha1.ListStagesResponse + 28, // 146: akuity.io.kargo.service.v1alpha1.KargoService.ListImages:output_type -> akuity.io.kargo.service.v1alpha1.ListImagesResponse + 32, // 147: akuity.io.kargo.service.v1alpha1.KargoService.GetStage:output_type -> akuity.io.kargo.service.v1alpha1.GetStageResponse + 34, // 148: akuity.io.kargo.service.v1alpha1.KargoService.WatchStages:output_type -> akuity.io.kargo.service.v1alpha1.WatchStagesResponse + 36, // 149: akuity.io.kargo.service.v1alpha1.KargoService.DeleteStage:output_type -> akuity.io.kargo.service.v1alpha1.DeleteStageResponse + 38, // 150: akuity.io.kargo.service.v1alpha1.KargoService.RefreshStage:output_type -> akuity.io.kargo.service.v1alpha1.RefreshStageResponse + 40, // 151: akuity.io.kargo.service.v1alpha1.KargoService.ListPromotions:output_type -> akuity.io.kargo.service.v1alpha1.ListPromotionsResponse + 42, // 152: akuity.io.kargo.service.v1alpha1.KargoService.WatchPromotions:output_type -> akuity.io.kargo.service.v1alpha1.WatchPromotionsResponse + 44, // 153: akuity.io.kargo.service.v1alpha1.KargoService.GetPromotion:output_type -> akuity.io.kargo.service.v1alpha1.GetPromotionResponse + 46, // 154: akuity.io.kargo.service.v1alpha1.KargoService.WatchPromotion:output_type -> akuity.io.kargo.service.v1alpha1.WatchPromotionResponse + 48, // 155: akuity.io.kargo.service.v1alpha1.KargoService.AbortPromotion:output_type -> akuity.io.kargo.service.v1alpha1.AbortPromotionResponse + 50, // 156: akuity.io.kargo.service.v1alpha1.KargoService.DeleteProject:output_type -> akuity.io.kargo.service.v1alpha1.DeleteProjectResponse + 52, // 157: akuity.io.kargo.service.v1alpha1.KargoService.GetProject:output_type -> akuity.io.kargo.service.v1alpha1.GetProjectResponse + 54, // 158: akuity.io.kargo.service.v1alpha1.KargoService.ListProjects:output_type -> akuity.io.kargo.service.v1alpha1.ListProjectsResponse + 56, // 159: akuity.io.kargo.service.v1alpha1.KargoService.ApproveFreight:output_type -> akuity.io.kargo.service.v1alpha1.ApproveFreightResponse + 58, // 160: akuity.io.kargo.service.v1alpha1.KargoService.DeleteFreight:output_type -> akuity.io.kargo.service.v1alpha1.DeleteFreightResponse + 60, // 161: akuity.io.kargo.service.v1alpha1.KargoService.GetFreight:output_type -> akuity.io.kargo.service.v1alpha1.GetFreightResponse + 62, // 162: akuity.io.kargo.service.v1alpha1.KargoService.PromoteToStage:output_type -> akuity.io.kargo.service.v1alpha1.PromoteToStageResponse + 64, // 163: akuity.io.kargo.service.v1alpha1.KargoService.PromoteDownstream:output_type -> akuity.io.kargo.service.v1alpha1.PromoteDownstreamResponse + 66, // 164: akuity.io.kargo.service.v1alpha1.KargoService.QueryFreight:output_type -> akuity.io.kargo.service.v1alpha1.QueryFreightResponse + 69, // 165: akuity.io.kargo.service.v1alpha1.KargoService.UpdateFreightAlias:output_type -> akuity.io.kargo.service.v1alpha1.UpdateFreightAliasResponse + 71, // 166: akuity.io.kargo.service.v1alpha1.KargoService.Reverify:output_type -> akuity.io.kargo.service.v1alpha1.ReverifyResponse + 73, // 167: akuity.io.kargo.service.v1alpha1.KargoService.AbortVerification:output_type -> akuity.io.kargo.service.v1alpha1.AbortVerificationResponse + 75, // 168: akuity.io.kargo.service.v1alpha1.KargoService.ListWarehouses:output_type -> akuity.io.kargo.service.v1alpha1.ListWarehousesResponse + 77, // 169: akuity.io.kargo.service.v1alpha1.KargoService.GetWarehouse:output_type -> akuity.io.kargo.service.v1alpha1.GetWarehouseResponse + 79, // 170: akuity.io.kargo.service.v1alpha1.KargoService.WatchWarehouses:output_type -> akuity.io.kargo.service.v1alpha1.WatchWarehousesResponse + 81, // 171: akuity.io.kargo.service.v1alpha1.KargoService.DeleteWarehouse:output_type -> akuity.io.kargo.service.v1alpha1.DeleteWarehouseResponse + 83, // 172: akuity.io.kargo.service.v1alpha1.KargoService.RefreshWarehouse:output_type -> akuity.io.kargo.service.v1alpha1.RefreshWarehouseResponse + 85, // 173: akuity.io.kargo.service.v1alpha1.KargoService.CreateCredentials:output_type -> akuity.io.kargo.service.v1alpha1.CreateCredentialsResponse + 87, // 174: akuity.io.kargo.service.v1alpha1.KargoService.DeleteCredentials:output_type -> akuity.io.kargo.service.v1alpha1.DeleteCredentialsResponse + 89, // 175: akuity.io.kargo.service.v1alpha1.KargoService.GetCredentials:output_type -> akuity.io.kargo.service.v1alpha1.GetCredentialsResponse + 91, // 176: akuity.io.kargo.service.v1alpha1.KargoService.ListCredentials:output_type -> akuity.io.kargo.service.v1alpha1.ListCredentialsResponse + 93, // 177: akuity.io.kargo.service.v1alpha1.KargoService.UpdateCredentials:output_type -> akuity.io.kargo.service.v1alpha1.UpdateCredentialsResponse + 95, // 178: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplates:output_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplatesResponse + 97, // 179: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplate:output_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateResponse + 105, // 180: akuity.io.kargo.service.v1alpha1.KargoService.DeleteAnalysisTemplate:output_type -> akuity.io.kargo.service.v1alpha1.DeleteAnalysisTemplateResponse + 99, // 181: akuity.io.kargo.service.v1alpha1.KargoService.ListClusterAnalysisTemplates:output_type -> akuity.io.kargo.service.v1alpha1.ListClusterAnalysisTemplatesResponse + 101, // 182: akuity.io.kargo.service.v1alpha1.KargoService.GetClusterAnalysisTemplate:output_type -> akuity.io.kargo.service.v1alpha1.GetClusterAnalysisTemplateResponse + 107, // 183: akuity.io.kargo.service.v1alpha1.KargoService.DeleteClusterAnalysisTemplate:output_type -> akuity.io.kargo.service.v1alpha1.DeleteClusterAnalysisTemplateResponse + 103, // 184: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisRun:output_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisRunResponse + 126, // 185: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplateConfigMaps:output_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateConfigMapsResponse + 128, // 186: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplateConfigMap:output_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapResponse + 130, // 187: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplateSecrets:output_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateSecretsResponse + 132, // 188: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplateSecret:output_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretResponse + 109, // 189: akuity.io.kargo.service.v1alpha1.KargoService.ListProjectEvents:output_type -> akuity.io.kargo.service.v1alpha1.ListProjectEventsResponse + 111, // 190: akuity.io.kargo.service.v1alpha1.KargoService.CreateRole:output_type -> akuity.io.kargo.service.v1alpha1.CreateRoleResponse + 113, // 191: akuity.io.kargo.service.v1alpha1.KargoService.DeleteRole:output_type -> akuity.io.kargo.service.v1alpha1.DeleteRoleResponse + 115, // 192: akuity.io.kargo.service.v1alpha1.KargoService.GetRole:output_type -> akuity.io.kargo.service.v1alpha1.GetRoleResponse + 118, // 193: akuity.io.kargo.service.v1alpha1.KargoService.Grant:output_type -> akuity.io.kargo.service.v1alpha1.GrantResponse + 120, // 194: akuity.io.kargo.service.v1alpha1.KargoService.ListRoles:output_type -> akuity.io.kargo.service.v1alpha1.ListRolesResponse + 122, // 195: akuity.io.kargo.service.v1alpha1.KargoService.Revoke:output_type -> akuity.io.kargo.service.v1alpha1.RevokeResponse + 124, // 196: akuity.io.kargo.service.v1alpha1.KargoService.UpdateRole:output_type -> akuity.io.kargo.service.v1alpha1.UpdateRoleResponse + 137, // [137:197] is the sub-list for method output_type + 77, // [77:137] is the sub-list for method input_type + 77, // [77:77] is the sub-list for extension type_name + 77, // [77:77] is the sub-list for extension extendee + 0, // [0:77] is the sub-list for field type_name } func init() { file_service_v1alpha1_service_proto_init() } @@ -10165,7 +10564,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAnalysisRunRequest); i { + switch v := v.(*ListClusterAnalysisTemplatesRequest); i { case 0: return &v.state case 1: @@ -10177,7 +10576,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAnalysisRunResponse); i { + switch v := v.(*ListClusterAnalysisTemplatesResponse); i { case 0: return &v.state case 1: @@ -10189,7 +10588,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteAnalysisTemplateRequest); i { + switch v := v.(*GetClusterAnalysisTemplateRequest); i { case 0: return &v.state case 1: @@ -10201,7 +10600,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteAnalysisTemplateResponse); i { + switch v := v.(*GetClusterAnalysisTemplateResponse); i { case 0: return &v.state case 1: @@ -10213,7 +10612,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListProjectEventsRequest); i { + switch v := v.(*GetAnalysisRunRequest); i { case 0: return &v.state case 1: @@ -10225,7 +10624,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListProjectEventsResponse); i { + switch v := v.(*GetAnalysisRunResponse); i { case 0: return &v.state case 1: @@ -10237,7 +10636,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateRoleRequest); i { + switch v := v.(*DeleteAnalysisTemplateRequest); i { case 0: return &v.state case 1: @@ -10249,7 +10648,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateRoleResponse); i { + switch v := v.(*DeleteAnalysisTemplateResponse); i { case 0: return &v.state case 1: @@ -10261,7 +10660,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteRoleRequest); i { + switch v := v.(*DeleteClusterAnalysisTemplateRequest); i { case 0: return &v.state case 1: @@ -10273,7 +10672,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteRoleResponse); i { + switch v := v.(*DeleteClusterAnalysisTemplateResponse); i { case 0: return &v.state case 1: @@ -10285,7 +10684,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetRoleRequest); i { + switch v := v.(*ListProjectEventsRequest); i { case 0: return &v.state case 1: @@ -10297,7 +10696,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetRoleResponse); i { + switch v := v.(*ListProjectEventsResponse); i { case 0: return &v.state case 1: @@ -10309,7 +10708,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Claims); i { + switch v := v.(*CreateRoleRequest); i { case 0: return &v.state case 1: @@ -10321,7 +10720,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GrantRequest); i { + switch v := v.(*CreateRoleResponse); i { case 0: return &v.state case 1: @@ -10333,7 +10732,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GrantResponse); i { + switch v := v.(*DeleteRoleRequest); i { case 0: return &v.state case 1: @@ -10345,7 +10744,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListRolesRequest); i { + switch v := v.(*DeleteRoleResponse); i { case 0: return &v.state case 1: @@ -10357,7 +10756,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListRolesResponse); i { + switch v := v.(*GetRoleRequest); i { case 0: return &v.state case 1: @@ -10369,7 +10768,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RevokeRequest); i { + switch v := v.(*GetRoleResponse); i { case 0: return &v.state case 1: @@ -10381,7 +10780,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[115].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RevokeResponse); i { + switch v := v.(*Claims); i { case 0: return &v.state case 1: @@ -10393,7 +10792,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[116].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateRoleRequest); i { + switch v := v.(*GrantRequest); i { case 0: return &v.state case 1: @@ -10405,7 +10804,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[117].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateRoleResponse); i { + switch v := v.(*GrantResponse); i { case 0: return &v.state case 1: @@ -10417,7 +10816,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[118].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListAnalysisTemplateConfigMapsRequest); i { + switch v := v.(*ListRolesRequest); i { case 0: return &v.state case 1: @@ -10429,7 +10828,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[119].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListAnalysisTemplateConfigMapsResponse); i { + switch v := v.(*ListRolesResponse); i { case 0: return &v.state case 1: @@ -10441,7 +10840,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[120].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAnalysisTemplateConfigMapRequest); i { + switch v := v.(*RevokeRequest); i { case 0: return &v.state case 1: @@ -10453,7 +10852,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[121].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAnalysisTemplateConfigMapResponse); i { + switch v := v.(*RevokeResponse); i { case 0: return &v.state case 1: @@ -10465,7 +10864,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[122].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListAnalysisTemplateSecretsRequest); i { + switch v := v.(*UpdateRoleRequest); i { case 0: return &v.state case 1: @@ -10477,7 +10876,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[123].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListAnalysisTemplateSecretsResponse); i { + switch v := v.(*UpdateRoleResponse); i { case 0: return &v.state case 1: @@ -10489,7 +10888,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[124].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAnalysisTemplateSecretRequest); i { + switch v := v.(*ListAnalysisTemplateConfigMapsRequest); i { case 0: return &v.state case 1: @@ -10501,6 +10900,78 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[125].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListAnalysisTemplateConfigMapsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_v1alpha1_service_proto_msgTypes[126].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAnalysisTemplateConfigMapRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_v1alpha1_service_proto_msgTypes[127].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAnalysisTemplateConfigMapResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_v1alpha1_service_proto_msgTypes[128].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListAnalysisTemplateSecretsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_v1alpha1_service_proto_msgTypes[129].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListAnalysisTemplateSecretsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_v1alpha1_service_proto_msgTypes[130].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAnalysisTemplateSecretRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_v1alpha1_service_proto_msgTypes[131].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetAnalysisTemplateSecretResponse); i { case 0: return &v.state @@ -10562,28 +11033,32 @@ func file_service_v1alpha1_service_proto_init() { (*GetAnalysisTemplateResponse_AnalysisTemplate)(nil), (*GetAnalysisTemplateResponse_Raw)(nil), } - file_service_v1alpha1_service_proto_msgTypes[98].OneofWrappers = []interface{}{ + file_service_v1alpha1_service_proto_msgTypes[100].OneofWrappers = []interface{}{ + (*GetClusterAnalysisTemplateResponse_ClusterAnalysisTemplate)(nil), + (*GetClusterAnalysisTemplateResponse_Raw)(nil), + } + file_service_v1alpha1_service_proto_msgTypes[102].OneofWrappers = []interface{}{ (*GetAnalysisRunResponse_AnalysisRun)(nil), (*GetAnalysisRunResponse_Raw)(nil), } - file_service_v1alpha1_service_proto_msgTypes[108].OneofWrappers = []interface{}{ + file_service_v1alpha1_service_proto_msgTypes[114].OneofWrappers = []interface{}{ (*GetRoleResponse_Role)(nil), (*GetRoleResponse_Resources)(nil), (*GetRoleResponse_Raw)(nil), } - file_service_v1alpha1_service_proto_msgTypes[110].OneofWrappers = []interface{}{ + file_service_v1alpha1_service_proto_msgTypes[116].OneofWrappers = []interface{}{ (*GrantRequest_UserClaims)(nil), (*GrantRequest_ResourceDetails)(nil), } - file_service_v1alpha1_service_proto_msgTypes[114].OneofWrappers = []interface{}{ + file_service_v1alpha1_service_proto_msgTypes[120].OneofWrappers = []interface{}{ (*RevokeRequest_UserClaims)(nil), (*RevokeRequest_ResourceDetails)(nil), } - file_service_v1alpha1_service_proto_msgTypes[121].OneofWrappers = []interface{}{ + file_service_v1alpha1_service_proto_msgTypes[127].OneofWrappers = []interface{}{ (*GetAnalysisTemplateConfigMapResponse_ConfigMap)(nil), (*GetAnalysisTemplateConfigMapResponse_Raw)(nil), } - file_service_v1alpha1_service_proto_msgTypes[125].OneofWrappers = []interface{}{ + file_service_v1alpha1_service_proto_msgTypes[131].OneofWrappers = []interface{}{ (*GetAnalysisTemplateSecretResponse_Secret)(nil), (*GetAnalysisTemplateSecretResponse_Raw)(nil), } @@ -10593,7 +11068,7 @@ func file_service_v1alpha1_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_service_v1alpha1_service_proto_rawDesc, NumEnums: 1, - NumMessages: 131, + NumMessages: 137, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/api/service/v1alpha1/svcv1alpha1connect/service.connect.go b/pkg/api/service/v1alpha1/svcv1alpha1connect/service.connect.go index 018a809a5..2609471b6 100644 --- a/pkg/api/service/v1alpha1/svcv1alpha1connect/service.connect.go +++ b/pkg/api/service/v1alpha1/svcv1alpha1connect/service.connect.go @@ -157,6 +157,15 @@ const ( // KargoServiceDeleteAnalysisTemplateProcedure is the fully-qualified name of the KargoService's // DeleteAnalysisTemplate RPC. KargoServiceDeleteAnalysisTemplateProcedure = "/akuity.io.kargo.service.v1alpha1.KargoService/DeleteAnalysisTemplate" + // KargoServiceListClusterAnalysisTemplatesProcedure is the fully-qualified name of the + // KargoService's ListClusterAnalysisTemplates RPC. + KargoServiceListClusterAnalysisTemplatesProcedure = "/akuity.io.kargo.service.v1alpha1.KargoService/ListClusterAnalysisTemplates" + // KargoServiceGetClusterAnalysisTemplateProcedure is the fully-qualified name of the KargoService's + // GetClusterAnalysisTemplate RPC. + KargoServiceGetClusterAnalysisTemplateProcedure = "/akuity.io.kargo.service.v1alpha1.KargoService/GetClusterAnalysisTemplate" + // KargoServiceDeleteClusterAnalysisTemplateProcedure is the fully-qualified name of the + // KargoService's DeleteClusterAnalysisTemplate RPC. + KargoServiceDeleteClusterAnalysisTemplateProcedure = "/akuity.io.kargo.service.v1alpha1.KargoService/DeleteClusterAnalysisTemplate" // KargoServiceGetAnalysisRunProcedure is the fully-qualified name of the KargoService's // GetAnalysisRun RPC. KargoServiceGetAnalysisRunProcedure = "/akuity.io.kargo.service.v1alpha1.KargoService/GetAnalysisRun" @@ -238,6 +247,9 @@ var ( kargoServiceListAnalysisTemplatesMethodDescriptor = kargoServiceServiceDescriptor.Methods().ByName("ListAnalysisTemplates") kargoServiceGetAnalysisTemplateMethodDescriptor = kargoServiceServiceDescriptor.Methods().ByName("GetAnalysisTemplate") kargoServiceDeleteAnalysisTemplateMethodDescriptor = kargoServiceServiceDescriptor.Methods().ByName("DeleteAnalysisTemplate") + kargoServiceListClusterAnalysisTemplatesMethodDescriptor = kargoServiceServiceDescriptor.Methods().ByName("ListClusterAnalysisTemplates") + kargoServiceGetClusterAnalysisTemplateMethodDescriptor = kargoServiceServiceDescriptor.Methods().ByName("GetClusterAnalysisTemplate") + kargoServiceDeleteClusterAnalysisTemplateMethodDescriptor = kargoServiceServiceDescriptor.Methods().ByName("DeleteClusterAnalysisTemplate") kargoServiceGetAnalysisRunMethodDescriptor = kargoServiceServiceDescriptor.Methods().ByName("GetAnalysisRun") kargoServiceListAnalysisTemplateConfigMapsMethodDescriptor = kargoServiceServiceDescriptor.Methods().ByName("ListAnalysisTemplateConfigMaps") kargoServiceGetAnalysisTemplateConfigMapMethodDescriptor = kargoServiceServiceDescriptor.Methods().ByName("GetAnalysisTemplateConfigMap") @@ -301,6 +313,9 @@ type KargoServiceClient interface { ListAnalysisTemplates(context.Context, *connect.Request[v1alpha1.ListAnalysisTemplatesRequest]) (*connect.Response[v1alpha1.ListAnalysisTemplatesResponse], error) GetAnalysisTemplate(context.Context, *connect.Request[v1alpha1.GetAnalysisTemplateRequest]) (*connect.Response[v1alpha1.GetAnalysisTemplateResponse], error) DeleteAnalysisTemplate(context.Context, *connect.Request[v1alpha1.DeleteAnalysisTemplateRequest]) (*connect.Response[v1alpha1.DeleteAnalysisTemplateResponse], error) + ListClusterAnalysisTemplates(context.Context, *connect.Request[v1alpha1.ListClusterAnalysisTemplatesRequest]) (*connect.Response[v1alpha1.ListClusterAnalysisTemplatesResponse], error) + GetClusterAnalysisTemplate(context.Context, *connect.Request[v1alpha1.GetClusterAnalysisTemplateRequest]) (*connect.Response[v1alpha1.GetClusterAnalysisTemplateResponse], error) + DeleteClusterAnalysisTemplate(context.Context, *connect.Request[v1alpha1.DeleteClusterAnalysisTemplateRequest]) (*connect.Response[v1alpha1.DeleteClusterAnalysisTemplateResponse], error) GetAnalysisRun(context.Context, *connect.Request[v1alpha1.GetAnalysisRunRequest]) (*connect.Response[v1alpha1.GetAnalysisRunResponse], error) ListAnalysisTemplateConfigMaps(context.Context, *connect.Request[v1alpha1.ListAnalysisTemplateConfigMapsRequest]) (*connect.Response[v1alpha1.ListAnalysisTemplateConfigMapsResponse], error) GetAnalysisTemplateConfigMap(context.Context, *connect.Request[v1alpha1.GetAnalysisTemplateConfigMapRequest]) (*connect.Response[v1alpha1.GetAnalysisTemplateConfigMapResponse], error) @@ -590,6 +605,24 @@ func NewKargoServiceClient(httpClient connect.HTTPClient, baseURL string, opts . connect.WithSchema(kargoServiceDeleteAnalysisTemplateMethodDescriptor), connect.WithClientOptions(opts...), ), + listClusterAnalysisTemplates: connect.NewClient[v1alpha1.ListClusterAnalysisTemplatesRequest, v1alpha1.ListClusterAnalysisTemplatesResponse]( + httpClient, + baseURL+KargoServiceListClusterAnalysisTemplatesProcedure, + connect.WithSchema(kargoServiceListClusterAnalysisTemplatesMethodDescriptor), + connect.WithClientOptions(opts...), + ), + getClusterAnalysisTemplate: connect.NewClient[v1alpha1.GetClusterAnalysisTemplateRequest, v1alpha1.GetClusterAnalysisTemplateResponse]( + httpClient, + baseURL+KargoServiceGetClusterAnalysisTemplateProcedure, + connect.WithSchema(kargoServiceGetClusterAnalysisTemplateMethodDescriptor), + connect.WithClientOptions(opts...), + ), + deleteClusterAnalysisTemplate: connect.NewClient[v1alpha1.DeleteClusterAnalysisTemplateRequest, v1alpha1.DeleteClusterAnalysisTemplateResponse]( + httpClient, + baseURL+KargoServiceDeleteClusterAnalysisTemplateProcedure, + connect.WithSchema(kargoServiceDeleteClusterAnalysisTemplateMethodDescriptor), + connect.WithClientOptions(opts...), + ), getAnalysisRun: connect.NewClient[v1alpha1.GetAnalysisRunRequest, v1alpha1.GetAnalysisRunResponse]( httpClient, baseURL+KargoServiceGetAnalysisRunProcedure, @@ -717,6 +750,9 @@ type kargoServiceClient struct { listAnalysisTemplates *connect.Client[v1alpha1.ListAnalysisTemplatesRequest, v1alpha1.ListAnalysisTemplatesResponse] getAnalysisTemplate *connect.Client[v1alpha1.GetAnalysisTemplateRequest, v1alpha1.GetAnalysisTemplateResponse] deleteAnalysisTemplate *connect.Client[v1alpha1.DeleteAnalysisTemplateRequest, v1alpha1.DeleteAnalysisTemplateResponse] + listClusterAnalysisTemplates *connect.Client[v1alpha1.ListClusterAnalysisTemplatesRequest, v1alpha1.ListClusterAnalysisTemplatesResponse] + getClusterAnalysisTemplate *connect.Client[v1alpha1.GetClusterAnalysisTemplateRequest, v1alpha1.GetClusterAnalysisTemplateResponse] + deleteClusterAnalysisTemplate *connect.Client[v1alpha1.DeleteClusterAnalysisTemplateRequest, v1alpha1.DeleteClusterAnalysisTemplateResponse] getAnalysisRun *connect.Client[v1alpha1.GetAnalysisRunRequest, v1alpha1.GetAnalysisRunResponse] listAnalysisTemplateConfigMaps *connect.Client[v1alpha1.ListAnalysisTemplateConfigMapsRequest, v1alpha1.ListAnalysisTemplateConfigMapsResponse] getAnalysisTemplateConfigMap *connect.Client[v1alpha1.GetAnalysisTemplateConfigMapRequest, v1alpha1.GetAnalysisTemplateConfigMapResponse] @@ -954,6 +990,24 @@ func (c *kargoServiceClient) DeleteAnalysisTemplate(ctx context.Context, req *co return c.deleteAnalysisTemplate.CallUnary(ctx, req) } +// ListClusterAnalysisTemplates calls +// akuity.io.kargo.service.v1alpha1.KargoService.ListClusterAnalysisTemplates. +func (c *kargoServiceClient) ListClusterAnalysisTemplates(ctx context.Context, req *connect.Request[v1alpha1.ListClusterAnalysisTemplatesRequest]) (*connect.Response[v1alpha1.ListClusterAnalysisTemplatesResponse], error) { + return c.listClusterAnalysisTemplates.CallUnary(ctx, req) +} + +// GetClusterAnalysisTemplate calls +// akuity.io.kargo.service.v1alpha1.KargoService.GetClusterAnalysisTemplate. +func (c *kargoServiceClient) GetClusterAnalysisTemplate(ctx context.Context, req *connect.Request[v1alpha1.GetClusterAnalysisTemplateRequest]) (*connect.Response[v1alpha1.GetClusterAnalysisTemplateResponse], error) { + return c.getClusterAnalysisTemplate.CallUnary(ctx, req) +} + +// DeleteClusterAnalysisTemplate calls +// akuity.io.kargo.service.v1alpha1.KargoService.DeleteClusterAnalysisTemplate. +func (c *kargoServiceClient) DeleteClusterAnalysisTemplate(ctx context.Context, req *connect.Request[v1alpha1.DeleteClusterAnalysisTemplateRequest]) (*connect.Response[v1alpha1.DeleteClusterAnalysisTemplateResponse], error) { + return c.deleteClusterAnalysisTemplate.CallUnary(ctx, req) +} + // GetAnalysisRun calls akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisRun. func (c *kargoServiceClient) GetAnalysisRun(ctx context.Context, req *connect.Request[v1alpha1.GetAnalysisRunRequest]) (*connect.Response[v1alpha1.GetAnalysisRunResponse], error) { return c.getAnalysisRun.CallUnary(ctx, req) @@ -1072,6 +1126,9 @@ type KargoServiceHandler interface { ListAnalysisTemplates(context.Context, *connect.Request[v1alpha1.ListAnalysisTemplatesRequest]) (*connect.Response[v1alpha1.ListAnalysisTemplatesResponse], error) GetAnalysisTemplate(context.Context, *connect.Request[v1alpha1.GetAnalysisTemplateRequest]) (*connect.Response[v1alpha1.GetAnalysisTemplateResponse], error) DeleteAnalysisTemplate(context.Context, *connect.Request[v1alpha1.DeleteAnalysisTemplateRequest]) (*connect.Response[v1alpha1.DeleteAnalysisTemplateResponse], error) + ListClusterAnalysisTemplates(context.Context, *connect.Request[v1alpha1.ListClusterAnalysisTemplatesRequest]) (*connect.Response[v1alpha1.ListClusterAnalysisTemplatesResponse], error) + GetClusterAnalysisTemplate(context.Context, *connect.Request[v1alpha1.GetClusterAnalysisTemplateRequest]) (*connect.Response[v1alpha1.GetClusterAnalysisTemplateResponse], error) + DeleteClusterAnalysisTemplate(context.Context, *connect.Request[v1alpha1.DeleteClusterAnalysisTemplateRequest]) (*connect.Response[v1alpha1.DeleteClusterAnalysisTemplateResponse], error) GetAnalysisRun(context.Context, *connect.Request[v1alpha1.GetAnalysisRunRequest]) (*connect.Response[v1alpha1.GetAnalysisRunResponse], error) ListAnalysisTemplateConfigMaps(context.Context, *connect.Request[v1alpha1.ListAnalysisTemplateConfigMapsRequest]) (*connect.Response[v1alpha1.ListAnalysisTemplateConfigMapsResponse], error) GetAnalysisTemplateConfigMap(context.Context, *connect.Request[v1alpha1.GetAnalysisTemplateConfigMapRequest]) (*connect.Response[v1alpha1.GetAnalysisTemplateConfigMapResponse], error) @@ -1357,6 +1414,24 @@ func NewKargoServiceHandler(svc KargoServiceHandler, opts ...connect.HandlerOpti connect.WithSchema(kargoServiceDeleteAnalysisTemplateMethodDescriptor), connect.WithHandlerOptions(opts...), ) + kargoServiceListClusterAnalysisTemplatesHandler := connect.NewUnaryHandler( + KargoServiceListClusterAnalysisTemplatesProcedure, + svc.ListClusterAnalysisTemplates, + connect.WithSchema(kargoServiceListClusterAnalysisTemplatesMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) + kargoServiceGetClusterAnalysisTemplateHandler := connect.NewUnaryHandler( + KargoServiceGetClusterAnalysisTemplateProcedure, + svc.GetClusterAnalysisTemplate, + connect.WithSchema(kargoServiceGetClusterAnalysisTemplateMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) + kargoServiceDeleteClusterAnalysisTemplateHandler := connect.NewUnaryHandler( + KargoServiceDeleteClusterAnalysisTemplateProcedure, + svc.DeleteClusterAnalysisTemplate, + connect.WithSchema(kargoServiceDeleteClusterAnalysisTemplateMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) kargoServiceGetAnalysisRunHandler := connect.NewUnaryHandler( KargoServiceGetAnalysisRunProcedure, svc.GetAnalysisRun, @@ -1525,6 +1600,12 @@ func NewKargoServiceHandler(svc KargoServiceHandler, opts ...connect.HandlerOpti kargoServiceGetAnalysisTemplateHandler.ServeHTTP(w, r) case KargoServiceDeleteAnalysisTemplateProcedure: kargoServiceDeleteAnalysisTemplateHandler.ServeHTTP(w, r) + case KargoServiceListClusterAnalysisTemplatesProcedure: + kargoServiceListClusterAnalysisTemplatesHandler.ServeHTTP(w, r) + case KargoServiceGetClusterAnalysisTemplateProcedure: + kargoServiceGetClusterAnalysisTemplateHandler.ServeHTTP(w, r) + case KargoServiceDeleteClusterAnalysisTemplateProcedure: + kargoServiceDeleteClusterAnalysisTemplateHandler.ServeHTTP(w, r) case KargoServiceGetAnalysisRunProcedure: kargoServiceGetAnalysisRunHandler.ServeHTTP(w, r) case KargoServiceListAnalysisTemplateConfigMapsProcedure: @@ -1736,6 +1817,18 @@ func (UnimplementedKargoServiceHandler) DeleteAnalysisTemplate(context.Context, return nil, connect.NewError(connect.CodeUnimplemented, errors.New("akuity.io.kargo.service.v1alpha1.KargoService.DeleteAnalysisTemplate is not implemented")) } +func (UnimplementedKargoServiceHandler) ListClusterAnalysisTemplates(context.Context, *connect.Request[v1alpha1.ListClusterAnalysisTemplatesRequest]) (*connect.Response[v1alpha1.ListClusterAnalysisTemplatesResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("akuity.io.kargo.service.v1alpha1.KargoService.ListClusterAnalysisTemplates is not implemented")) +} + +func (UnimplementedKargoServiceHandler) GetClusterAnalysisTemplate(context.Context, *connect.Request[v1alpha1.GetClusterAnalysisTemplateRequest]) (*connect.Response[v1alpha1.GetClusterAnalysisTemplateResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("akuity.io.kargo.service.v1alpha1.KargoService.GetClusterAnalysisTemplate is not implemented")) +} + +func (UnimplementedKargoServiceHandler) DeleteClusterAnalysisTemplate(context.Context, *connect.Request[v1alpha1.DeleteClusterAnalysisTemplateRequest]) (*connect.Response[v1alpha1.DeleteClusterAnalysisTemplateResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("akuity.io.kargo.service.v1alpha1.KargoService.DeleteClusterAnalysisTemplate is not implemented")) +} + func (UnimplementedKargoServiceHandler) GetAnalysisRun(context.Context, *connect.Request[v1alpha1.GetAnalysisRunRequest]) (*connect.Response[v1alpha1.GetAnalysisRunResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisRun is not implemented")) } diff --git a/ui/src/app.tsx b/ui/src/app.tsx index dffafaf48..19b0940df 100644 --- a/ui/src/app.tsx +++ b/ui/src/app.tsx @@ -17,6 +17,7 @@ import { MainLayout } from './features/common/layout/main-layout'; import { Downloads } from './pages/downloads'; import { Login } from './pages/login/login'; import { Projects } from './pages/projects'; +import { Settings } from './pages/settings'; import { User } from './pages/user'; import './app.less'; @@ -45,6 +46,11 @@ export const App = () => ( } /> } /> } /> + } /> + } + /> } diff --git a/ui/src/config/paths.ts b/ui/src/config/paths.ts index 04dcbb84a..af9ee58e5 100644 --- a/ui/src/config/paths.ts +++ b/ui/src/config/paths.ts @@ -12,6 +12,8 @@ export const paths = { createStage: '/project/:name/create-stage', createWarehouse: '/project/:name/create-warehouse', user: '/user', + settings: '/settings/', + settingsAnalysisTemplates: '/settings/analysis-templates', downloads: '/downloads', login: '/login', diff --git a/ui/src/features/common/layout/main-layout.tsx b/ui/src/features/common/layout/main-layout.tsx index 3f201f7bb..70eb2f5d2 100644 --- a/ui/src/features/common/layout/main-layout.tsx +++ b/ui/src/features/common/layout/main-layout.tsx @@ -1,5 +1,6 @@ import { faArrowRightFromBracket, + faGear, faBook, faBoxes, faTerminal, @@ -46,6 +47,9 @@ export const MainLayout = () => { User )} + + Settings + Docs diff --git a/ui/src/features/project/analysis-templates/analysis-templates-list.tsx b/ui/src/features/project/analysis-templates/analysis-templates-list.tsx index a23f6925d..5d579b17f 100644 --- a/ui/src/features/project/analysis-templates/analysis-templates-list.tsx +++ b/ui/src/features/project/analysis-templates/analysis-templates-list.tsx @@ -31,85 +31,83 @@ export const AnalysisTemplatesList = () => { }); return ( -
- - dataSource={data?.analysisTemplates} - pagination={{ hideOnSinglePage: true }} - rowKey={(i) => i.metadata?.name || ''} - loading={isLoading} - expandable={descriptionExpandable()} - > - - title='Creation Date' - width={200} - render={(_, template) => { - const date = template.metadata?.creationTimestamp?.toDate(); - return date ? format(date, 'MMM do yyyy HH:mm:ss') : ''; - }} - /> - title='Name' dataIndex={['metadata', 'name']} /> - - width={260} - title={ -
- -
- } - render={(_, template) => ( -
- - -
- )} - /> - -
+ + dataSource={data?.analysisTemplates} + pagination={{ hideOnSinglePage: true }} + rowKey={(i) => i.metadata?.name || ''} + loading={isLoading} + expandable={descriptionExpandable()} + > + + title='Creation Date' + width={200} + render={(_, template) => { + const date = template.metadata?.creationTimestamp?.toDate(); + return date ? format(date, 'MMM do yyyy HH:mm:ss') : ''; + }} + /> + title='Name' dataIndex={['metadata', 'name']} /> + + width={260} + title={ +
+ +
+ } + render={(_, template) => ( +
+ + +
+ )} + /> + ); }; diff --git a/ui/src/features/settings/analysis-templates/analysis-templates.tsx b/ui/src/features/settings/analysis-templates/analysis-templates.tsx new file mode 100644 index 000000000..89897da95 --- /dev/null +++ b/ui/src/features/settings/analysis-templates/analysis-templates.tsx @@ -0,0 +1,118 @@ +import { useMutation, useQuery } from '@connectrpc/connect-query'; +import { faPencil, faPlus, faTrash } from '@fortawesome/free-solid-svg-icons'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { Button, Table } from 'antd'; +import { format } from 'date-fns'; + +import { useConfirmModal } from '@ui/features/common/confirm-modal/use-confirm-modal'; +import { descriptionExpandable } from '@ui/features/common/description-expandable'; +import { useModal } from '@ui/features/common/modal/use-modal'; +import { + AnalysisTemplate, + ClusterAnalysisTemplate +} from '@ui/gen/rollouts/api/v1alpha1/generated_pb'; +import { + deleteClusterAnalysisTemplate, + listClusterAnalysisTemplates +} from '@ui/gen/service/v1alpha1/service-KargoService_connectquery'; + +import { CreateClusterAnalysisTemplateModal } from './create-cluster-analysis-template-modal'; +import { EditClusterAnalysisTemplateModal } from './edit-cluster-analysis-template-modal'; + +export const ClusterAnalysisTemplatesList = () => { + const confirm = useConfirmModal(); + + const { data, isLoading, refetch } = useQuery(listClusterAnalysisTemplates); + + const { show: showEdit } = useModal(); + + const { show: showCreate } = useModal((p) => ); + + const { mutate: deleteTemplate, isPending: isDeleting } = useMutation( + deleteClusterAnalysisTemplate, + { + onSuccess: () => refetch() + } + ); + + return ( + + dataSource={data?.clusterAnalysisTemplates} + pagination={{ hideOnSinglePage: true }} + rowKey={(i) => i.metadata?.name || ''} + loading={isLoading} + expandable={descriptionExpandable()} + className='w-full' + > + + title='Creation Date' + width={200} + render={(_, template) => { + const date = template.metadata?.creationTimestamp?.toDate(); + return date ? format(date, 'MMM do yyyy HH:mm:ss') : ''; + }} + /> + title='Name' dataIndex={['metadata', 'name']} /> + + width={260} + title={ +
+ +
+ } + render={(_, template) => ( +
+ + +
+ )} + /> + + ); +}; diff --git a/ui/src/features/settings/analysis-templates/create-cluster-analysis-template-modal.tsx b/ui/src/features/settings/analysis-templates/create-cluster-analysis-template-modal.tsx new file mode 100644 index 000000000..c2db2acbe --- /dev/null +++ b/ui/src/features/settings/analysis-templates/create-cluster-analysis-template-modal.tsx @@ -0,0 +1,66 @@ +import { createConnectQueryKey, useMutation } from '@connectrpc/connect-query'; +import { useQueryClient } from '@tanstack/react-query'; +import { Modal } from 'antd'; +import { useForm } from 'react-hook-form'; + +import YamlEditor from '@ui/features/common/code-editor/yaml-editor-lazy'; +import { FieldContainer } from '@ui/features/common/form/field-container'; +import { ModalProps } from '@ui/features/common/modal/use-modal'; +import { + createResource, + listClusterAnalysisTemplates +} from '@ui/gen/service/v1alpha1/service-KargoService_connectquery'; + +import { getClusterAnalysisTemplateYAMLExample } from '../../utils/cluster-analysis-template-example'; + +export const CreateClusterAnalysisTemplateModal = ({ visible, hide }: ModalProps) => { + const queryClient = useQueryClient(); + + const { mutateAsync, isPending } = useMutation(createResource, { + onSuccess: () => hide() + }); + + const { control, handleSubmit } = useForm({ + defaultValues: { + value: getClusterAnalysisTemplateYAMLExample() + } + }); + + const onSubmit = handleSubmit(async (data) => { + const textEncoder = new TextEncoder(); + await mutateAsync( + { + manifest: textEncoder.encode(data.value) + }, + { + onSuccess: () => + queryClient.invalidateQueries({ + queryKey: createConnectQueryKey(listClusterAnalysisTemplates) + }) + } + ); + }); + + return ( + + + {({ field: { value, onChange } }) => ( + onChange(e || '')} + height='500px' + placeholder={getClusterAnalysisTemplateYAMLExample()} + /> + )} + + + ); +}; diff --git a/ui/src/features/settings/analysis-templates/edit-cluster-analysis-template-modal.tsx b/ui/src/features/settings/analysis-templates/edit-cluster-analysis-template-modal.tsx new file mode 100644 index 000000000..50906d56c --- /dev/null +++ b/ui/src/features/settings/analysis-templates/edit-cluster-analysis-template-modal.tsx @@ -0,0 +1,82 @@ +import { createConnectQueryKey, useMutation, useQuery } from '@connectrpc/connect-query'; +import { useQueryClient } from '@tanstack/react-query'; +import { Modal } from 'antd'; +import { useForm } from 'react-hook-form'; + +import YamlEditor from '@ui/features/common/code-editor/yaml-editor-lazy'; +import { FieldContainer } from '@ui/features/common/form/field-container'; +import { ModalProps } from '@ui/features/common/modal/use-modal'; +import { + getClusterAnalysisTemplate, + listClusterAnalysisTemplates, + updateResource +} from '@ui/gen/service/v1alpha1/service-KargoService_connectquery'; +import { RawFormat } from '@ui/gen/service/v1alpha1/service_pb'; +import { decodeRawData } from '@ui/utils/decode-raw-data'; + +import { getClusterAnalysisTemplateYAMLExample } from '../../utils/cluster-analysis-template-example'; + +type Props = ModalProps & { + templateName: string; +}; + +export const EditClusterAnalysisTemplateModal = ({ visible, hide, templateName }: Props) => { + const queryClient = useQueryClient(); + + const { mutateAsync, isPending } = useMutation(updateResource, { + onSuccess: () => hide() + }); + + const { data: templateResponse, isLoading } = useQuery(getClusterAnalysisTemplate, { + name: templateName, + format: RawFormat.YAML + }); + + const { control, handleSubmit } = useForm({ + values: { + value: decodeRawData(templateResponse) + } + }); + + const onSubmit = handleSubmit(async (data) => { + const textEncoder = new TextEncoder(); + + await mutateAsync( + { + manifest: textEncoder.encode(data.value) + }, + { + onSuccess: () => + queryClient.invalidateQueries({ + queryKey: createConnectQueryKey(listClusterAnalysisTemplates) + }) + } + ); + }); + + return ( + + + {({ field: { value, onChange } }) => ( + onChange(e || '')} + height='500px' + placeholder={getClusterAnalysisTemplateYAMLExample()} + isLoading={isLoading} + isHideManagedFieldsDisplayed + label='Spec' + /> + )} + + + ); +}; diff --git a/ui/src/features/utils/cluster-analysis-template-example.ts b/ui/src/features/utils/cluster-analysis-template-example.ts new file mode 100644 index 000000000..8d3da15a4 --- /dev/null +++ b/ui/src/features/utils/cluster-analysis-template-example.ts @@ -0,0 +1,19 @@ +export const getClusterAnalysisTemplateYAMLExample = () => + `apiVersion: argoproj.io/v1alpha1 +kind: ClusterAnalysisTemplate +metadata: + name: error-rate +spec: + args: + - name: service-name + metrics: + - name: error-rate + interval: 5m + successCondition: result <= 0.01 + failureLimit: 3 + provider: + datadog: + apiVersion: v2 + interval: 5m + query: | + sum:requests.error.rate{service:{{args.service-name}}}`; diff --git a/ui/src/gen/rollouts/api/v1alpha1/generated_pb.ts b/ui/src/gen/rollouts/api/v1alpha1/generated_pb.ts index fe70a644f..016e84552 100644 --- a/ui/src/gen/rollouts/api/v1alpha1/generated_pb.ts +++ b/ui/src/gen/rollouts/api/v1alpha1/generated_pb.ts @@ -721,6 +721,92 @@ export class CloudWatchMetricStatMetricDimension extends Message { + /** + * @generated from field: optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + */ + metadata?: ObjectMeta; + + /** + * @generated from field: optional github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.AnalysisTemplateSpec spec = 2; + */ + spec?: AnalysisTemplateSpec; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.ClusterAnalysisTemplate"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "metadata", kind: "message", T: ObjectMeta, opt: true }, + { no: 2, name: "spec", kind: "message", T: AnalysisTemplateSpec, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ClusterAnalysisTemplate { + return new ClusterAnalysisTemplate().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ClusterAnalysisTemplate { + return new ClusterAnalysisTemplate().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ClusterAnalysisTemplate { + return new ClusterAnalysisTemplate().fromJsonString(jsonString, options); + } + + static equals(a: ClusterAnalysisTemplate | PlainMessage | undefined, b: ClusterAnalysisTemplate | PlainMessage | undefined): boolean { + return proto2.util.equals(ClusterAnalysisTemplate, a, b); + } +} + +/** + * @generated from message github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.ClusterAnalysisTemplateList + */ +export class ClusterAnalysisTemplateList extends Message { + /** + * @generated from field: optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + */ + metadata?: ListMeta; + + /** + * @generated from field: repeated github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.ClusterAnalysisTemplate items = 2; + */ + items: ClusterAnalysisTemplate[] = []; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.ClusterAnalysisTemplateList"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "metadata", kind: "message", T: ListMeta, opt: true }, + { no: 2, name: "items", kind: "message", T: ClusterAnalysisTemplate, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ClusterAnalysisTemplateList { + return new ClusterAnalysisTemplateList().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ClusterAnalysisTemplateList { + return new ClusterAnalysisTemplateList().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ClusterAnalysisTemplateList { + return new ClusterAnalysisTemplateList().fromJsonString(jsonString, options); + } + + static equals(a: ClusterAnalysisTemplateList | PlainMessage | undefined, b: ClusterAnalysisTemplateList | PlainMessage | undefined): boolean { + return proto2.util.equals(ClusterAnalysisTemplateList, a, b); + } +} + /** * @generated from message github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.DatadogMetric */ diff --git a/ui/src/gen/schema/stages.kargo.akuity.io_v1alpha1.json b/ui/src/gen/schema/stages.kargo.akuity.io_v1alpha1.json index 40a55c066..d978c7d65 100644 --- a/ui/src/gen/schema/stages.kargo.akuity.io_v1alpha1.json +++ b/ui/src/gen/schema/stages.kargo.akuity.io_v1alpha1.json @@ -180,6 +180,10 @@ "items": { "description": "AnalysisTemplateReference is a reference to an AnalysisTemplate.", "properties": { + "clusterScope": { + "description": "ClusterScope determines whether the template is an\nAnalysisTemplate or a ClusterAnalysisTemplate resource", + "type": "boolean" + }, "name": { "description": "Name is the name of the AnalysisTemplate in the same project/namespace as\nthe Stage.", "type": "string" diff --git a/ui/src/gen/service/v1alpha1/service-KargoService_connectquery.ts b/ui/src/gen/service/v1alpha1/service-KargoService_connectquery.ts index c800c04ba..63455f9c2 100644 --- a/ui/src/gen/service/v1alpha1/service-KargoService_connectquery.ts +++ b/ui/src/gen/service/v1alpha1/service-KargoService_connectquery.ts @@ -4,7 +4,7 @@ // @ts-nocheck import { MethodKind } from "@bufbuild/protobuf"; -import { AbortPromotionRequest, AbortPromotionResponse, AbortVerificationRequest, AbortVerificationResponse, AdminLoginRequest, AdminLoginResponse, ApproveFreightRequest, ApproveFreightResponse, CreateCredentialsRequest, CreateCredentialsResponse, CreateOrUpdateResourceRequest, CreateOrUpdateResourceResponse, CreateResourceRequest, CreateResourceResponse, CreateRoleRequest, CreateRoleResponse, DeleteAnalysisTemplateRequest, DeleteAnalysisTemplateResponse, DeleteCredentialsRequest, DeleteCredentialsResponse, DeleteFreightRequest, DeleteFreightResponse, DeleteProjectRequest, DeleteProjectResponse, DeleteResourceRequest, DeleteResourceResponse, DeleteRoleRequest, DeleteRoleResponse, DeleteStageRequest, DeleteStageResponse, DeleteWarehouseRequest, DeleteWarehouseResponse, GetAnalysisRunRequest, GetAnalysisRunResponse, GetAnalysisTemplateConfigMapRequest, GetAnalysisTemplateConfigMapResponse, GetAnalysisTemplateRequest, GetAnalysisTemplateResponse, GetAnalysisTemplateSecretRequest, GetAnalysisTemplateSecretResponse, GetConfigRequest, GetConfigResponse, GetCredentialsRequest, GetCredentialsResponse, GetFreightRequest, GetFreightResponse, GetProjectRequest, GetProjectResponse, GetPromotionRequest, GetPromotionResponse, GetPublicConfigRequest, GetPublicConfigResponse, GetRoleRequest, GetRoleResponse, GetStageRequest, GetStageResponse, GetVersionInfoRequest, GetVersionInfoResponse, GetWarehouseRequest, GetWarehouseResponse, GrantRequest, GrantResponse, ListAnalysisTemplateConfigMapsRequest, ListAnalysisTemplateConfigMapsResponse, ListAnalysisTemplateSecretsRequest, ListAnalysisTemplateSecretsResponse, ListAnalysisTemplatesRequest, ListAnalysisTemplatesResponse, ListCredentialsRequest, ListCredentialsResponse, ListImagesRequest, ListImagesResponse, ListProjectEventsRequest, ListProjectEventsResponse, ListProjectsRequest, ListProjectsResponse, ListPromotionsRequest, ListPromotionsResponse, ListRolesRequest, ListRolesResponse, ListStagesRequest, ListStagesResponse, ListWarehousesRequest, ListWarehousesResponse, PromoteDownstreamRequest, PromoteDownstreamResponse, PromoteToStageRequest, PromoteToStageResponse, QueryFreightRequest, QueryFreightResponse, RefreshStageRequest, RefreshStageResponse, RefreshWarehouseRequest, RefreshWarehouseResponse, ReverifyRequest, ReverifyResponse, RevokeRequest, RevokeResponse, UpdateCredentialsRequest, UpdateCredentialsResponse, UpdateFreightAliasRequest, UpdateFreightAliasResponse, UpdateResourceRequest, UpdateResourceResponse, UpdateRoleRequest, UpdateRoleResponse } from "./service_pb.js"; +import { AbortPromotionRequest, AbortPromotionResponse, AbortVerificationRequest, AbortVerificationResponse, AdminLoginRequest, AdminLoginResponse, ApproveFreightRequest, ApproveFreightResponse, CreateCredentialsRequest, CreateCredentialsResponse, CreateOrUpdateResourceRequest, CreateOrUpdateResourceResponse, CreateResourceRequest, CreateResourceResponse, CreateRoleRequest, CreateRoleResponse, DeleteAnalysisTemplateRequest, DeleteAnalysisTemplateResponse, DeleteClusterAnalysisTemplateRequest, DeleteClusterAnalysisTemplateResponse, DeleteCredentialsRequest, DeleteCredentialsResponse, DeleteFreightRequest, DeleteFreightResponse, DeleteProjectRequest, DeleteProjectResponse, DeleteResourceRequest, DeleteResourceResponse, DeleteRoleRequest, DeleteRoleResponse, DeleteStageRequest, DeleteStageResponse, DeleteWarehouseRequest, DeleteWarehouseResponse, GetAnalysisRunRequest, GetAnalysisRunResponse, GetAnalysisTemplateConfigMapRequest, GetAnalysisTemplateConfigMapResponse, GetAnalysisTemplateRequest, GetAnalysisTemplateResponse, GetAnalysisTemplateSecretRequest, GetAnalysisTemplateSecretResponse, GetClusterAnalysisTemplateRequest, GetClusterAnalysisTemplateResponse, GetConfigRequest, GetConfigResponse, GetCredentialsRequest, GetCredentialsResponse, GetFreightRequest, GetFreightResponse, GetProjectRequest, GetProjectResponse, GetPromotionRequest, GetPromotionResponse, GetPublicConfigRequest, GetPublicConfigResponse, GetRoleRequest, GetRoleResponse, GetStageRequest, GetStageResponse, GetVersionInfoRequest, GetVersionInfoResponse, GetWarehouseRequest, GetWarehouseResponse, GrantRequest, GrantResponse, ListAnalysisTemplateConfigMapsRequest, ListAnalysisTemplateConfigMapsResponse, ListAnalysisTemplateSecretsRequest, ListAnalysisTemplateSecretsResponse, ListAnalysisTemplatesRequest, ListAnalysisTemplatesResponse, ListClusterAnalysisTemplatesRequest, ListClusterAnalysisTemplatesResponse, ListCredentialsRequest, ListCredentialsResponse, ListImagesRequest, ListImagesResponse, ListProjectEventsRequest, ListProjectEventsResponse, ListProjectsRequest, ListProjectsResponse, ListPromotionsRequest, ListPromotionsResponse, ListRolesRequest, ListRolesResponse, ListStagesRequest, ListStagesResponse, ListWarehousesRequest, ListWarehousesResponse, PromoteDownstreamRequest, PromoteDownstreamResponse, PromoteToStageRequest, PromoteToStageResponse, QueryFreightRequest, QueryFreightResponse, RefreshStageRequest, RefreshStageResponse, RefreshWarehouseRequest, RefreshWarehouseResponse, ReverifyRequest, ReverifyResponse, RevokeRequest, RevokeResponse, UpdateCredentialsRequest, UpdateCredentialsResponse, UpdateFreightAliasRequest, UpdateFreightAliasResponse, UpdateResourceRequest, UpdateResourceResponse, UpdateRoleRequest, UpdateRoleResponse } from "./service_pb.js"; /** * @generated from rpc akuity.io.kargo.service.v1alpha1.KargoService.GetVersionInfo @@ -569,6 +569,48 @@ export const deleteAnalysisTemplate = { } } as const; +/** + * @generated from rpc akuity.io.kargo.service.v1alpha1.KargoService.ListClusterAnalysisTemplates + */ +export const listClusterAnalysisTemplates = { + localName: "listClusterAnalysisTemplates", + name: "ListClusterAnalysisTemplates", + kind: MethodKind.Unary, + I: ListClusterAnalysisTemplatesRequest, + O: ListClusterAnalysisTemplatesResponse, + service: { + typeName: "akuity.io.kargo.service.v1alpha1.KargoService" + } +} as const; + +/** + * @generated from rpc akuity.io.kargo.service.v1alpha1.KargoService.GetClusterAnalysisTemplate + */ +export const getClusterAnalysisTemplate = { + localName: "getClusterAnalysisTemplate", + name: "GetClusterAnalysisTemplate", + kind: MethodKind.Unary, + I: GetClusterAnalysisTemplateRequest, + O: GetClusterAnalysisTemplateResponse, + service: { + typeName: "akuity.io.kargo.service.v1alpha1.KargoService" + } +} as const; + +/** + * @generated from rpc akuity.io.kargo.service.v1alpha1.KargoService.DeleteClusterAnalysisTemplate + */ +export const deleteClusterAnalysisTemplate = { + localName: "deleteClusterAnalysisTemplate", + name: "DeleteClusterAnalysisTemplate", + kind: MethodKind.Unary, + I: DeleteClusterAnalysisTemplateRequest, + O: DeleteClusterAnalysisTemplateResponse, + service: { + typeName: "akuity.io.kargo.service.v1alpha1.KargoService" + } +} as const; + /** * @generated from rpc akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisRun */ diff --git a/ui/src/gen/service/v1alpha1/service_connect.ts b/ui/src/gen/service/v1alpha1/service_connect.ts index 53ff9f668..706082e7f 100644 --- a/ui/src/gen/service/v1alpha1/service_connect.ts +++ b/ui/src/gen/service/v1alpha1/service_connect.ts @@ -3,7 +3,7 @@ /* eslint-disable */ // @ts-nocheck -import { AbortPromotionRequest, AbortPromotionResponse, AbortVerificationRequest, AbortVerificationResponse, AdminLoginRequest, AdminLoginResponse, ApproveFreightRequest, ApproveFreightResponse, CreateCredentialsRequest, CreateCredentialsResponse, CreateOrUpdateResourceRequest, CreateOrUpdateResourceResponse, CreateResourceRequest, CreateResourceResponse, CreateRoleRequest, CreateRoleResponse, DeleteAnalysisTemplateRequest, DeleteAnalysisTemplateResponse, DeleteCredentialsRequest, DeleteCredentialsResponse, DeleteFreightRequest, DeleteFreightResponse, DeleteProjectRequest, DeleteProjectResponse, DeleteResourceRequest, DeleteResourceResponse, DeleteRoleRequest, DeleteRoleResponse, DeleteStageRequest, DeleteStageResponse, DeleteWarehouseRequest, DeleteWarehouseResponse, GetAnalysisRunRequest, GetAnalysisRunResponse, GetAnalysisTemplateConfigMapRequest, GetAnalysisTemplateConfigMapResponse, GetAnalysisTemplateRequest, GetAnalysisTemplateResponse, GetAnalysisTemplateSecretRequest, GetAnalysisTemplateSecretResponse, GetConfigRequest, GetConfigResponse, GetCredentialsRequest, GetCredentialsResponse, GetFreightRequest, GetFreightResponse, GetProjectRequest, GetProjectResponse, GetPromotionRequest, GetPromotionResponse, GetPublicConfigRequest, GetPublicConfigResponse, GetRoleRequest, GetRoleResponse, GetStageRequest, GetStageResponse, GetVersionInfoRequest, GetVersionInfoResponse, GetWarehouseRequest, GetWarehouseResponse, GrantRequest, GrantResponse, ListAnalysisTemplateConfigMapsRequest, ListAnalysisTemplateConfigMapsResponse, ListAnalysisTemplateSecretsRequest, ListAnalysisTemplateSecretsResponse, ListAnalysisTemplatesRequest, ListAnalysisTemplatesResponse, ListCredentialsRequest, ListCredentialsResponse, ListImagesRequest, ListImagesResponse, ListProjectEventsRequest, ListProjectEventsResponse, ListProjectsRequest, ListProjectsResponse, ListPromotionsRequest, ListPromotionsResponse, ListRolesRequest, ListRolesResponse, ListStagesRequest, ListStagesResponse, ListWarehousesRequest, ListWarehousesResponse, PromoteDownstreamRequest, PromoteDownstreamResponse, PromoteToStageRequest, PromoteToStageResponse, QueryFreightRequest, QueryFreightResponse, RefreshStageRequest, RefreshStageResponse, RefreshWarehouseRequest, RefreshWarehouseResponse, ReverifyRequest, ReverifyResponse, RevokeRequest, RevokeResponse, UpdateCredentialsRequest, UpdateCredentialsResponse, UpdateFreightAliasRequest, UpdateFreightAliasResponse, UpdateResourceRequest, UpdateResourceResponse, UpdateRoleRequest, UpdateRoleResponse, WatchPromotionRequest, WatchPromotionResponse, WatchPromotionsRequest, WatchPromotionsResponse, WatchStagesRequest, WatchStagesResponse, WatchWarehousesRequest, WatchWarehousesResponse } from "./service_pb.js"; +import { AbortPromotionRequest, AbortPromotionResponse, AbortVerificationRequest, AbortVerificationResponse, AdminLoginRequest, AdminLoginResponse, ApproveFreightRequest, ApproveFreightResponse, CreateCredentialsRequest, CreateCredentialsResponse, CreateOrUpdateResourceRequest, CreateOrUpdateResourceResponse, CreateResourceRequest, CreateResourceResponse, CreateRoleRequest, CreateRoleResponse, DeleteAnalysisTemplateRequest, DeleteAnalysisTemplateResponse, DeleteClusterAnalysisTemplateRequest, DeleteClusterAnalysisTemplateResponse, DeleteCredentialsRequest, DeleteCredentialsResponse, DeleteFreightRequest, DeleteFreightResponse, DeleteProjectRequest, DeleteProjectResponse, DeleteResourceRequest, DeleteResourceResponse, DeleteRoleRequest, DeleteRoleResponse, DeleteStageRequest, DeleteStageResponse, DeleteWarehouseRequest, DeleteWarehouseResponse, GetAnalysisRunRequest, GetAnalysisRunResponse, GetAnalysisTemplateConfigMapRequest, GetAnalysisTemplateConfigMapResponse, GetAnalysisTemplateRequest, GetAnalysisTemplateResponse, GetAnalysisTemplateSecretRequest, GetAnalysisTemplateSecretResponse, GetClusterAnalysisTemplateRequest, GetClusterAnalysisTemplateResponse, GetConfigRequest, GetConfigResponse, GetCredentialsRequest, GetCredentialsResponse, GetFreightRequest, GetFreightResponse, GetProjectRequest, GetProjectResponse, GetPromotionRequest, GetPromotionResponse, GetPublicConfigRequest, GetPublicConfigResponse, GetRoleRequest, GetRoleResponse, GetStageRequest, GetStageResponse, GetVersionInfoRequest, GetVersionInfoResponse, GetWarehouseRequest, GetWarehouseResponse, GrantRequest, GrantResponse, ListAnalysisTemplateConfigMapsRequest, ListAnalysisTemplateConfigMapsResponse, ListAnalysisTemplateSecretsRequest, ListAnalysisTemplateSecretsResponse, ListAnalysisTemplatesRequest, ListAnalysisTemplatesResponse, ListClusterAnalysisTemplatesRequest, ListClusterAnalysisTemplatesResponse, ListCredentialsRequest, ListCredentialsResponse, ListImagesRequest, ListImagesResponse, ListProjectEventsRequest, ListProjectEventsResponse, ListProjectsRequest, ListProjectsResponse, ListPromotionsRequest, ListPromotionsResponse, ListRolesRequest, ListRolesResponse, ListStagesRequest, ListStagesResponse, ListWarehousesRequest, ListWarehousesResponse, PromoteDownstreamRequest, PromoteDownstreamResponse, PromoteToStageRequest, PromoteToStageResponse, QueryFreightRequest, QueryFreightResponse, RefreshStageRequest, RefreshStageResponse, RefreshWarehouseRequest, RefreshWarehouseResponse, ReverifyRequest, ReverifyResponse, RevokeRequest, RevokeResponse, UpdateCredentialsRequest, UpdateCredentialsResponse, UpdateFreightAliasRequest, UpdateFreightAliasResponse, UpdateResourceRequest, UpdateResourceResponse, UpdateRoleRequest, UpdateRoleResponse, WatchPromotionRequest, WatchPromotionResponse, WatchPromotionsRequest, WatchPromotionsResponse, WatchStagesRequest, WatchStagesResponse, WatchWarehousesRequest, WatchWarehousesResponse } from "./service_pb.js"; import { MethodKind } from "@bufbuild/protobuf"; /** @@ -411,6 +411,33 @@ export const KargoService = { O: DeleteAnalysisTemplateResponse, kind: MethodKind.Unary, }, + /** + * @generated from rpc akuity.io.kargo.service.v1alpha1.KargoService.ListClusterAnalysisTemplates + */ + listClusterAnalysisTemplates: { + name: "ListClusterAnalysisTemplates", + I: ListClusterAnalysisTemplatesRequest, + O: ListClusterAnalysisTemplatesResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc akuity.io.kargo.service.v1alpha1.KargoService.GetClusterAnalysisTemplate + */ + getClusterAnalysisTemplate: { + name: "GetClusterAnalysisTemplate", + I: GetClusterAnalysisTemplateRequest, + O: GetClusterAnalysisTemplateResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc akuity.io.kargo.service.v1alpha1.KargoService.DeleteClusterAnalysisTemplate + */ + deleteClusterAnalysisTemplate: { + name: "DeleteClusterAnalysisTemplate", + I: DeleteClusterAnalysisTemplateRequest, + O: DeleteClusterAnalysisTemplateResponse, + kind: MethodKind.Unary, + }, /** * @generated from rpc akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisRun */ diff --git a/ui/src/gen/service/v1alpha1/service_pb.ts b/ui/src/gen/service/v1alpha1/service_pb.ts index f096cf177..5aa09ac1b 100644 --- a/ui/src/gen/service/v1alpha1/service_pb.ts +++ b/ui/src/gen/service/v1alpha1/service_pb.ts @@ -7,7 +7,7 @@ import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialM import { Message, proto3, Timestamp } from "@bufbuild/protobuf"; import { Freight, Project, Promotion, Stage, Warehouse } from "../../v1alpha1/generated_pb.js"; import { ConfigMap, Event, Secret } from "../../k8s.io/api/core/v1/generated_pb.js"; -import { AnalysisRun, AnalysisTemplate } from "../../rollouts/api/v1alpha1/generated_pb.js"; +import { AnalysisRun, AnalysisTemplate, ClusterAnalysisTemplate } from "../../rollouts/api/v1alpha1/generated_pb.js"; import { Claim, ResourceDetails, Role, RoleResources } from "../../rbac/v1alpha1/generated_pb.js"; /** @@ -4215,6 +4215,167 @@ export class GetAnalysisTemplateResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "akuity.io.kargo.service.v1alpha1.ListClusterAnalysisTemplatesRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ListClusterAnalysisTemplatesRequest { + return new ListClusterAnalysisTemplatesRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ListClusterAnalysisTemplatesRequest { + return new ListClusterAnalysisTemplatesRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ListClusterAnalysisTemplatesRequest { + return new ListClusterAnalysisTemplatesRequest().fromJsonString(jsonString, options); + } + + static equals(a: ListClusterAnalysisTemplatesRequest | PlainMessage | undefined, b: ListClusterAnalysisTemplatesRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(ListClusterAnalysisTemplatesRequest, a, b); + } +} + +/** + * @generated from message akuity.io.kargo.service.v1alpha1.ListClusterAnalysisTemplatesResponse + */ +export class ListClusterAnalysisTemplatesResponse extends Message { + /** + * @generated from field: repeated github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.ClusterAnalysisTemplate cluster_analysis_templates = 1 [json_name = "clusteranalysisTemplates"]; + */ + clusterAnalysisTemplates: ClusterAnalysisTemplate[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "akuity.io.kargo.service.v1alpha1.ListClusterAnalysisTemplatesResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "cluster_analysis_templates", jsonName: "clusteranalysisTemplates", kind: "message", T: ClusterAnalysisTemplate, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ListClusterAnalysisTemplatesResponse { + return new ListClusterAnalysisTemplatesResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ListClusterAnalysisTemplatesResponse { + return new ListClusterAnalysisTemplatesResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ListClusterAnalysisTemplatesResponse { + return new ListClusterAnalysisTemplatesResponse().fromJsonString(jsonString, options); + } + + static equals(a: ListClusterAnalysisTemplatesResponse | PlainMessage | undefined, b: ListClusterAnalysisTemplatesResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(ListClusterAnalysisTemplatesResponse, a, b); + } +} + +/** + * @generated from message akuity.io.kargo.service.v1alpha1.GetClusterAnalysisTemplateRequest + */ +export class GetClusterAnalysisTemplateRequest extends Message { + /** + * @generated from field: string name = 2; + */ + name = ""; + + /** + * @generated from field: akuity.io.kargo.service.v1alpha1.RawFormat format = 3; + */ + format = RawFormat.UNSPECIFIED; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "akuity.io.kargo.service.v1alpha1.GetClusterAnalysisTemplateRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 2, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "format", kind: "enum", T: proto3.getEnumType(RawFormat) }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetClusterAnalysisTemplateRequest { + return new GetClusterAnalysisTemplateRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetClusterAnalysisTemplateRequest { + return new GetClusterAnalysisTemplateRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetClusterAnalysisTemplateRequest { + return new GetClusterAnalysisTemplateRequest().fromJsonString(jsonString, options); + } + + static equals(a: GetClusterAnalysisTemplateRequest | PlainMessage | undefined, b: GetClusterAnalysisTemplateRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(GetClusterAnalysisTemplateRequest, a, b); + } +} + +/** + * @generated from message akuity.io.kargo.service.v1alpha1.GetClusterAnalysisTemplateResponse + */ +export class GetClusterAnalysisTemplateResponse extends Message { + /** + * @generated from oneof akuity.io.kargo.service.v1alpha1.GetClusterAnalysisTemplateResponse.result + */ + result: { + /** + * @generated from field: github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.ClusterAnalysisTemplate cluster_analysis_template = 1; + */ + value: ClusterAnalysisTemplate; + case: "clusterAnalysisTemplate"; + } | { + /** + * @generated from field: bytes raw = 2; + */ + value: Uint8Array; + case: "raw"; + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "akuity.io.kargo.service.v1alpha1.GetClusterAnalysisTemplateResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "cluster_analysis_template", kind: "message", T: ClusterAnalysisTemplate, oneof: "result" }, + { no: 2, name: "raw", kind: "scalar", T: 12 /* ScalarType.BYTES */, oneof: "result" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetClusterAnalysisTemplateResponse { + return new GetClusterAnalysisTemplateResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetClusterAnalysisTemplateResponse { + return new GetClusterAnalysisTemplateResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetClusterAnalysisTemplateResponse { + return new GetClusterAnalysisTemplateResponse().fromJsonString(jsonString, options); + } + + static equals(a: GetClusterAnalysisTemplateResponse | PlainMessage | undefined, b: GetClusterAnalysisTemplateResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(GetClusterAnalysisTemplateResponse, a, b); + } +} + /** * @generated from message akuity.io.kargo.service.v1alpha1.GetAnalysisRunRequest */ @@ -4390,6 +4551,76 @@ export class DeleteAnalysisTemplateResponse extends Message { + /** + * @generated from field: string name = 2; + */ + name = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "akuity.io.kargo.service.v1alpha1.DeleteClusterAnalysisTemplateRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 2, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DeleteClusterAnalysisTemplateRequest { + return new DeleteClusterAnalysisTemplateRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DeleteClusterAnalysisTemplateRequest { + return new DeleteClusterAnalysisTemplateRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DeleteClusterAnalysisTemplateRequest { + return new DeleteClusterAnalysisTemplateRequest().fromJsonString(jsonString, options); + } + + static equals(a: DeleteClusterAnalysisTemplateRequest | PlainMessage | undefined, b: DeleteClusterAnalysisTemplateRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(DeleteClusterAnalysisTemplateRequest, a, b); + } +} + +/** + * explicitly empty + * + * @generated from message akuity.io.kargo.service.v1alpha1.DeleteClusterAnalysisTemplateResponse + */ +export class DeleteClusterAnalysisTemplateResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "akuity.io.kargo.service.v1alpha1.DeleteClusterAnalysisTemplateResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DeleteClusterAnalysisTemplateResponse { + return new DeleteClusterAnalysisTemplateResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DeleteClusterAnalysisTemplateResponse { + return new DeleteClusterAnalysisTemplateResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DeleteClusterAnalysisTemplateResponse { + return new DeleteClusterAnalysisTemplateResponse().fromJsonString(jsonString, options); + } + + static equals(a: DeleteClusterAnalysisTemplateResponse | PlainMessage | undefined, b: DeleteClusterAnalysisTemplateResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(DeleteClusterAnalysisTemplateResponse, a, b); + } +} + /** * @generated from message akuity.io.kargo.service.v1alpha1.ListProjectEventsRequest */ diff --git a/ui/src/gen/v1alpha1/generated_pb.ts b/ui/src/gen/v1alpha1/generated_pb.ts index c4ee4ec77..84bfb1599 100644 --- a/ui/src/gen/v1alpha1/generated_pb.ts +++ b/ui/src/gen/v1alpha1/generated_pb.ts @@ -186,6 +186,16 @@ export class AnalysisTemplateReference extends Message) { super(); proto2.util.initPartial(data, this); @@ -195,6 +205,7 @@ export class AnalysisTemplateReference extends Message [ { no: 1, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 2, name: "clusterScope", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): AnalysisTemplateReference { diff --git a/ui/src/pages/settings.tsx b/ui/src/pages/settings.tsx new file mode 100644 index 000000000..ef7956907 --- /dev/null +++ b/ui/src/pages/settings.tsx @@ -0,0 +1,45 @@ +import { faBarChart } from '@fortawesome/free-solid-svg-icons'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import type { MenuProps } from 'antd'; +import { Menu, Flex } from 'antd'; +import { useNavigate, generatePath } from 'react-router-dom'; + +import { paths } from '@ui/config/paths'; +import { PageTitle } from '@ui/features/common'; +import { ClusterAnalysisTemplatesList } from '@ui/features/settings/analysis-templates/analysis-templates'; + +export const Settings = ({ section = 'verification' }: { section?: string }) => { + const navigate = useNavigate(); + type MenuItem = Required['items'][number]; + + const items: MenuItem[] = [ + { + key: 'verification', + label: 'Verification', + icon: , + onClick: () => { + navigate(generatePath(paths.settingsAnalysisTemplates)); + } + } + ]; + + const renderSection = (section: string) => { + switch (section) { + case 'verification': + return ; + } + }; + + return ( +
+ + +
Cluster Analysis Templates
+
+ + + {renderSection(section)} + +
+ ); +}; diff --git a/ui/src/utils/decode-raw-data.ts b/ui/src/utils/decode-raw-data.ts index 58f47a589..703b41afd 100644 --- a/ui/src/utils/decode-raw-data.ts +++ b/ui/src/utils/decode-raw-data.ts @@ -4,7 +4,13 @@ type Data = { result: | { value: unknown; - case: 'stage' | 'project' | 'analysisRun' | 'analysisTemplate' | 'warehouse'; + case: + | 'stage' + | 'project' + | 'analysisRun' + | 'analysisTemplate' + | 'clusterAnalysisTemplate' + | 'warehouse'; } | { value: Uint8Array;