From 2f651723149d22aa3d4f50152ec47660464262d2 Mon Sep 17 00:00:00 2001 From: Laurentiu Niculae Date: Fri, 20 Oct 2023 16:46:39 +0300 Subject: [PATCH] refactor(proto): change proto structs Signed-off-by: Laurentiu Niculae --- pkg/cli/client/cve_cmd_test.go | 2 +- pkg/extensions/search/convert/metadb.go | 42 +- pkg/extensions/search/cve/cve.go | 6 +- pkg/extensions/search/cve/cve_test.go | 2 +- pkg/extensions/search/cve/scan_test.go | 2 +- pkg/extensions/search/cve/trivy/scanner.go | 6 +- pkg/extensions/search/resolver.go | 76 +- pkg/extensions/search/resolver_test.go | 2 +- pkg/extensions/search/search_test.go | 21 +- pkg/meta/boltdb/boltdb.go | 79 +-- pkg/meta/common/common.go | 14 +- pkg/meta/convert/convert.go | 155 ++-- pkg/meta/convert/convert_proto.go | 86 ++- pkg/meta/dynamodb/dynamodb.go | 88 ++- pkg/meta/meta_test.go | 6 +- pkg/meta/proto/meta.proto | 32 +- pkg/meta/proto/oci.proto | 35 + pkg/meta/proto_go/meta.pb.go | 741 +++++++++---------- pkg/meta/proto_go/oci.pb.go | 789 ++++++++++++++++----- pkg/meta/types/types.go | 18 +- pkg/test/image-utils/images.go | 8 +- pkg/test/image-utils/multiarch.go | 13 + pkg/test/image-utils/upload.go | 12 +- 23 files changed, 1380 insertions(+), 855 deletions(-) diff --git a/pkg/cli/client/cve_cmd_test.go b/pkg/cli/client/cve_cmd_test.go index 3fc75cb4b7..4f44cc03b1 100644 --- a/pkg/cli/client/cve_cmd_test.go +++ b/pkg/cli/client/cve_cmd_test.go @@ -760,7 +760,7 @@ func getMockCveScanner(metaDB mTypes.MetaDB) cveinfo.Scanner { return false, err } - for _, imageLayer := range manifestData.Manifests[0].Layers { + for _, imageLayer := range manifestData.Manifests[0].Manifest.Layers { switch imageLayer.MediaType { case ispec.MediaTypeImageLayerGzip, ispec.MediaTypeImageLayer, string(regTypes.DockerLayer): diff --git a/pkg/extensions/search/convert/metadb.go b/pkg/extensions/search/convert/metadb.go index 4d3aa4e9a7..3fdc0372e5 100644 --- a/pkg/extensions/search/convert/metadb.go +++ b/pkg/extensions/search/convert/metadb.go @@ -498,7 +498,7 @@ func ImageIndex2ImageSummary(ctx context.Context, repo, tag, digest string, repo indexLastUpdated = *imageManifestSummary.LastUpdated } - annotations := GetAnnotations(imageManifest.Annotations, imageManifest.ConfigContent.Config.Labels) + annotations := GetAnnotations(imageManifest.Manifest.Annotations, imageManifest.Config.Config.Labels) if manifestAnnotations == nil { manifestAnnotations = &annotations @@ -586,7 +586,7 @@ func FullImageIndex2ImageSummary(ctx context.Context, imageData mTypes.FullImage indexLastUpdated = *imageManifestSummary.LastUpdated } - annotations := GetAnnotations(imageManifest.Annotations, imageManifest.ConfigContent.Config.Labels) + annotations := GetAnnotations(imageManifest.Manifest.Annotations, imageManifest.Config.Config.Labels) if manifestAnnotations == nil { manifestAnnotations = &annotations } @@ -636,28 +636,29 @@ func ImageManifest2ImageSummary(ctx context.Context, repo, tag string, repoMeta var ( repoName = repo - configDigest = manifest.Config.Digest.String() - configSize = manifest.Config.Size + configDigest = manifest.Manifest.Config.Digest.String() + configSize = manifest.Manifest.Config.Size manifestDigest = manifest.Digest.String() manifestSize = manifest.Size - mediaType = manifest.MediaType + mediaType = manifest.Manifest.MediaType artifactType = zcommon.GetManifestArtifactType(imageData.Manifests[0].Manifest) - platform = getPlatform(manifest.ConfigContent.Platform) - imageLastUpdated = zcommon.GetImageLastUpdated(manifest.ConfigContent) + platform = getPlatform(manifest.Config.Platform) + imageLastUpdated = zcommon.GetImageLastUpdated(manifest.Config) downloadCount = repoMeta.Statistics[manifest.Digest.String()].DownloadCount isSigned = isImageSigned(repoMeta.Signatures[manifest.Digest.String()]) ) - imageSize, imageBlobsMap := getImageBlobsInfo(manifestDigest, manifestSize, configDigest, configSize, manifest.Layers) + imageSize, imageBlobsMap := getImageBlobsInfo(manifestDigest, manifestSize, configDigest, configSize, + manifest.Manifest.Layers) imageSizeStr := strconv.FormatInt(imageSize, 10) - annotations := GetAnnotations(manifest.Annotations, manifest.ConfigContent.Config.Labels) + annotations := GetAnnotations(manifest.Manifest.Annotations, manifest.Config.Config.Labels) authors := annotations.Authors if authors == "" { - authors = manifest.ConfigContent.Author + authors = manifest.Config.Author } - historyEntries, err := getAllHistory(manifest.Manifest, manifest.ConfigContent) + historyEntries, err := getAllHistory(manifest.Manifest, manifest.Config) if err != nil { graphql.AddError(ctx, gqlerror.Errorf("error generating history on tag %s in repo %s: "+ "manifest digest: %s, error: %s", tag, repo, manifest.Digest, err.Error())) @@ -712,28 +713,29 @@ func FullImageManifest2ImageSummary(ctx context.Context, imageData mTypes.FullIm var ( repoName = imageData.Repo tag = imageData.Tag - configDigest = manifest.Config.Digest.String() - configSize = manifest.Config.Size + configDigest = manifest.Manifest.Config.Digest.String() + configSize = manifest.Manifest.Config.Size manifestDigest = manifest.Digest.String() manifestSize = manifest.Size - mediaType = manifest.MediaType + mediaType = manifest.Manifest.MediaType artifactType = zcommon.GetManifestArtifactType(imageData.Manifests[0].Manifest) - platform = getPlatform(manifest.ConfigContent.Platform) - imageLastUpdated = zcommon.GetImageLastUpdated(manifest.ConfigContent) + platform = getPlatform(manifest.Config.Platform) + imageLastUpdated = zcommon.GetImageLastUpdated(manifest.Config) downloadCount = imageData.Statistics.DownloadCount isSigned = isImageSigned(imageData.Signatures) ) - imageSize, imageBlobsMap := getImageBlobsInfo(manifestDigest, manifestSize, configDigest, configSize, manifest.Layers) + imageSize, imageBlobsMap := getImageBlobsInfo(manifestDigest, manifestSize, configDigest, configSize, + manifest.Manifest.Layers) imageSizeStr := strconv.FormatInt(imageSize, 10) - annotations := GetAnnotations(manifest.Annotations, manifest.ConfigContent.Config.Labels) + annotations := GetAnnotations(manifest.Manifest.Annotations, manifest.Config.Config.Labels) authors := annotations.Authors if authors == "" { - authors = manifest.ConfigContent.Author + authors = manifest.Config.Author } - historyEntries, err := getAllHistory(manifest.Manifest, manifest.ConfigContent) + historyEntries, err := getAllHistory(manifest.Manifest, manifest.Config) if err != nil { graphql.AddError(ctx, gqlerror.Errorf("error generating history on tag %s in repo %s: "+ "manifest digest: %s, error: %s", tag, repoName, manifest.Digest, err.Error())) diff --git a/pkg/extensions/search/cve/cve.go b/pkg/extensions/search/cve/cve.go index 1210ef6af5..f4d75afc68 100644 --- a/pkg/extensions/search/cve/cve.go +++ b/pkg/extensions/search/cve/cve.go @@ -310,12 +310,12 @@ func getConfigAndDigest(metaDB mTypes.MetaDB, manifestDigestStr string) (ispec.I return ispec.Image{}, "", err } - // we'll fail the execution if the config is not compatibe with ispec.Image because we can't scan this type of images. - if manifestData.Manifests[0].Config.MediaType != ispec.MediaTypeImageConfig { + // we'll fail the execution if the config is not compatible with ispec.Image because we can't scan this type of images. + if manifestData.Manifests[0].Manifest.Config.MediaType != ispec.MediaTypeImageConfig { return ispec.Image{}, "", zerr.ErrWrongMediaType } - return manifestData.Manifests[0].ConfigContent, manifestDigest, err + return manifestData.Manifests[0].Config, manifestDigest, err } func filterCVEList(cveMap map[string]cvemodel.CVE, searchedCVE string, pageFinder *CvePageFinder) { diff --git a/pkg/extensions/search/cve/cve_test.go b/pkg/extensions/search/cve/cve_test.go index 7d1dfd9337..8358104a58 100644 --- a/pkg/extensions/search/cve/cve_test.go +++ b/pkg/extensions/search/cve/cve_test.go @@ -1082,7 +1082,7 @@ func TestCVEStruct(t *testing.T) { //nolint:gocyclo return false, err } - for _, imageLayer := range manifestData.Manifests[0].Layers { + for _, imageLayer := range manifestData.Manifests[0].Manifest.Layers { switch imageLayer.MediaType { case ispec.MediaTypeImageLayerGzip, ispec.MediaTypeImageLayer, string(regTypes.DockerLayer): diff --git a/pkg/extensions/search/cve/scan_test.go b/pkg/extensions/search/cve/scan_test.go index 0b29723fa0..d008fea159 100644 --- a/pkg/extensions/search/cve/scan_test.go +++ b/pkg/extensions/search/cve/scan_test.go @@ -380,7 +380,7 @@ func TestScanGeneratorWithMockedData(t *testing.T) { //nolint: gocyclo return false, err } - for _, imageLayer := range manifestData.Manifests[0].Layers { + for _, imageLayer := range manifestData.Manifests[0].Manifest.Layers { switch imageLayer.MediaType { case ispec.MediaTypeImageLayerGzip, ispec.MediaTypeImageLayer, string(regTypes.DockerLayer): diff --git a/pkg/extensions/search/cve/trivy/scanner.go b/pkg/extensions/search/cve/trivy/scanner.go index aa43d93633..07af2d33d8 100644 --- a/pkg/extensions/search/cve/trivy/scanner.go +++ b/pkg/extensions/search/cve/trivy/scanner.go @@ -247,7 +247,7 @@ func (scanner Scanner) isManifestScanable(digestStr string) (bool, error) { return false, zerr.ErrWrongMediaType } - for _, imageLayer := range manifestData.Manifests[0].Layers { + for _, imageLayer := range manifestData.Manifests[0].Manifest.Layers { switch imageLayer.MediaType { case ispec.MediaTypeImageLayerGzip, ispec.MediaTypeImageLayer, string(regTypes.DockerLayer): continue @@ -264,11 +264,11 @@ func (scanner Scanner) isManifestDataScannable(manifestData mTypes.ManifestData) return true, nil } - if manifestData.MediaType != ispec.MediaTypeImageManifest { + if manifestData.Manifest.MediaType != ispec.MediaTypeImageManifest { return false, zerr.ErrScanNotSupported } - for _, imageLayer := range manifestData.Layers { + for _, imageLayer := range manifestData.Manifest.Layers { switch imageLayer.MediaType { case ispec.MediaTypeImageLayerGzip, ispec.MediaTypeImageLayer, string(regTypes.DockerLayer): continue diff --git a/pkg/extensions/search/resolver.go b/pkg/extensions/search/resolver.go index c716486afa..af1aec0a18 100644 --- a/pkg/extensions/search/resolver.go +++ b/pkg/extensions/search/resolver.go @@ -90,13 +90,13 @@ func FilterByDigest(digest string) mTypes.FilterFunc { // Check the image config matches the search digest // This is a blob with mediaType application/vnd.oci.image.config.v1+json - if strings.Contains(manifest.Config.Digest.String(), lookupDigest) { + if strings.Contains(manifest.Manifest.Config.Digest.String(), lookupDigest) { contains = true } // Check to see if the individual layers in the oci image manifest match the digest // These are blobs with mediaType application/vnd.oci.image.layer.v1.tar+gzip - for _, layer := range manifest.Layers { + for _, layer := range manifest.Manifest.Layers { if strings.Contains(layer.Digest.String(), lookupDigest) { contains = true } @@ -118,10 +118,10 @@ func getImageListForDigest(ctx context.Context, digest string, metaDB mTypes.Met } pageInput := pagination.PageInput{ - Limit: safeDereferencing(requestedPage.Limit, 0), - Offset: safeDereferencing(requestedPage.Offset, 0), + Limit: deref(requestedPage.Limit, 0), + Offset: deref(requestedPage.Offset, 0), SortBy: pagination.SortCriteria( - safeDereferencing(requestedPage.SortBy, gql_generated.SortCriteriaRelevance), + deref(requestedPage.SortBy, gql_generated.SortCriteriaRelevance), ), } @@ -198,10 +198,10 @@ func getCVEListForImage( } pageInput := cvemodel.PageInput{ - Limit: safeDereferencing(requestedPage.Limit, 0), - Offset: safeDereferencing(requestedPage.Offset, 0), + Limit: deref(requestedPage.Limit, 0), + Offset: deref(requestedPage.Offset, 0), SortBy: cvemodel.SortCriteria( - safeDereferencing(requestedPage.SortBy, gql_generated.SortCriteriaSeverity), + deref(requestedPage.SortBy, gql_generated.SortCriteriaSeverity), ), } @@ -365,10 +365,10 @@ func getImageListForCVE( // Actual page requested by user pageInput := pagination.PageInput{ - Limit: safeDereferencing(requestedPage.Limit, 0), - Offset: safeDereferencing(requestedPage.Offset, 0), + Limit: deref(requestedPage.Limit, 0), + Offset: deref(requestedPage.Offset, 0), SortBy: pagination.SortCriteria( - safeDereferencing(requestedPage.SortBy, gql_generated.SortCriteriaUpdateTime), + deref(requestedPage.SortBy, gql_generated.SortCriteriaUpdateTime), ), } @@ -438,10 +438,10 @@ func getImageListWithCVEFixed( // Actual page requested by user pageInput := pagination.PageInput{ - Limit: safeDereferencing(requestedPage.Limit, 0), - Offset: safeDereferencing(requestedPage.Offset, 0), + Limit: deref(requestedPage.Limit, 0), + Offset: deref(requestedPage.Offset, 0), SortBy: pagination.SortCriteria( - safeDereferencing(requestedPage.SortBy, gql_generated.SortCriteriaUpdateTime), + deref(requestedPage.SortBy, gql_generated.SortCriteriaUpdateTime), ), } @@ -484,10 +484,10 @@ func repoListWithNewestImage( } pageInput := pagination.PageInput{ - Limit: safeDereferencing(requestedPage.Limit, 0), - Offset: safeDereferencing(requestedPage.Offset, 0), + Limit: deref(requestedPage.Limit, 0), + Offset: deref(requestedPage.Offset, 0), SortBy: pagination.SortCriteria( - safeDereferencing(requestedPage.SortBy, gql_generated.SortCriteriaUpdateTime), + deref(requestedPage.SortBy, gql_generated.SortCriteriaUpdateTime), ), } @@ -576,10 +576,10 @@ func getFilteredPaginatedRepos( } pageInput := pagination.PageInput{ - Limit: safeDereferencing(requestedPage.Limit, 0), - Offset: safeDereferencing(requestedPage.Offset, 0), + Limit: deref(requestedPage.Limit, 0), + Offset: deref(requestedPage.Offset, 0), SortBy: pagination.SortCriteria( - safeDereferencing(requestedPage.SortBy, gql_generated.SortCriteriaUpdateTime), + deref(requestedPage.SortBy, gql_generated.SortCriteriaUpdateTime), ), } @@ -638,10 +638,10 @@ func globalSearch(ctx context.Context, query string, metaDB mTypes.MetaDB, filte } pageInput := pagination.PageInput{ - Limit: safeDereferencing(requestedPage.Limit, 0), - Offset: safeDereferencing(requestedPage.Offset, 0), + Limit: deref(requestedPage.Limit, 0), + Offset: deref(requestedPage.Offset, 0), SortBy: pagination.SortCriteria( - safeDereferencing(requestedPage.SortBy, gql_generated.SortCriteriaRelevance), + deref(requestedPage.SortBy, gql_generated.SortCriteriaRelevance), ), } @@ -677,10 +677,10 @@ func globalSearch(ctx context.Context, query string, metaDB mTypes.MetaDB, filte } pageInput := pagination.PageInput{ - Limit: safeDereferencing(requestedPage.Limit, 0), - Offset: safeDereferencing(requestedPage.Offset, 0), + Limit: deref(requestedPage.Limit, 0), + Offset: deref(requestedPage.Offset, 0), SortBy: pagination.SortCriteria( - safeDereferencing(requestedPage.SortBy, gql_generated.SortCriteriaRelevance), + deref(requestedPage.SortBy, gql_generated.SortCriteriaRelevance), ), } @@ -721,10 +721,10 @@ func derivedImageList(ctx context.Context, image string, digest *string, metaDB } pageInput := pagination.PageInput{ - Limit: safeDereferencing(requestedPage.Limit, 0), - Offset: safeDereferencing(requestedPage.Offset, 0), + Limit: deref(requestedPage.Limit, 0), + Offset: deref(requestedPage.Offset, 0), SortBy: pagination.SortCriteria( - safeDereferencing(requestedPage.SortBy, gql_generated.SortCriteriaUpdateTime), + deref(requestedPage.SortBy, gql_generated.SortCriteriaUpdateTime), ), } @@ -785,7 +785,7 @@ func filterDerivedImages(image *gql_generated.ImageSummary) mTypes.FilterFunc { imageLayers := image.Manifests[i].Layers addImageToList = false - layers := imageManifest.Layers + layers := imageManifest.Manifest.Layers sameLayer := 0 @@ -821,10 +821,10 @@ func baseImageList(ctx context.Context, image string, digest *string, metaDB mTy } pageInput := pagination.PageInput{ - Limit: safeDereferencing(requestedPage.Limit, 0), - Offset: safeDereferencing(requestedPage.Offset, 0), + Limit: deref(requestedPage.Limit, 0), + Offset: deref(requestedPage.Offset, 0), SortBy: pagination.SortCriteria( - safeDereferencing(requestedPage.SortBy, gql_generated.SortCriteriaUpdateTime), + deref(requestedPage.SortBy, gql_generated.SortCriteriaUpdateTime), ), } @@ -886,7 +886,7 @@ func filterBaseImages(image *gql_generated.ImageSummary) mTypes.FilterFunc { addImageToList = true - for _, l := range manifest.Layers { + for _, l := range manifest.Manifest.Layers { foundLayer := false for _, k := range image.Manifests[i].Layers { @@ -1096,7 +1096,7 @@ func (p timeSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } -func safeDereferencing[T any](pointer *T, defaultVal T) T { +func deref[T any](pointer *T, defaultVal T) T { if pointer != nil { return *pointer } @@ -1120,10 +1120,10 @@ func getImageList(ctx context.Context, repo string, metaDB mTypes.MetaDB, cveInf } pageInput := pagination.PageInput{ - Limit: safeDereferencing(requestedPage.Limit, 0), - Offset: safeDereferencing(requestedPage.Offset, 0), + Limit: deref(requestedPage.Limit, 0), + Offset: deref(requestedPage.Offset, 0), SortBy: pagination.SortCriteria( - safeDereferencing(requestedPage.SortBy, gql_generated.SortCriteriaRelevance), + deref(requestedPage.SortBy, gql_generated.SortCriteriaRelevance), ), } diff --git a/pkg/extensions/search/resolver_test.go b/pkg/extensions/search/resolver_test.go index d912c39269..ab0fb3e847 100644 --- a/pkg/extensions/search/resolver_test.go +++ b/pkg/extensions/search/resolver_test.go @@ -2065,7 +2065,7 @@ func TestMockedBaseImageList(t *testing.T) { }) } -func TestExpandedRepoInfo(t *testing.T) { +func TestExpandedRepoInfoErrors(t *testing.T) { log := log.NewLogger("debug", "") Convey("Access error", t, func() { diff --git a/pkg/extensions/search/search_test.go b/pkg/extensions/search/search_test.go index bc7d4a6a5e..19b396bdcc 100644 --- a/pkg/extensions/search/search_test.go +++ b/pkg/extensions/search/search_test.go @@ -332,7 +332,7 @@ func getMockCveScanner(metaDB mTypes.MetaDB) cveinfo.Scanner { return false, err } - for _, imageLayer := range manifestData.Manifests[0].Layers { + for _, imageLayer := range manifestData.Manifests[0].Manifest.Layers { switch imageLayer.MediaType { case ispec.MediaTypeImageLayerGzip, ispec.MediaTypeImageLayer, string(regTypes.DockerLayer): @@ -1062,24 +1062,17 @@ func TestGetReferrersGQL(t *testing.T) { defer ctlrManager.StopServer() // Upload the index referrer - - targetImg, err := deprecated.GetRandomImage() //nolint:staticcheck - So(err, ShouldBeNil) + targetImg := CreateRandomImage() targetDigest := targetImg.Digest() - err = UploadImage(targetImg, baseURL, "repo", targetDigest.String()) - So(err, ShouldBeNil) - - indexReferrer, err := deprecated.GetRandomMultiarchImage("ref") //nolint:staticcheck + err := UploadImage(targetImg, baseURL, "repo", targetImg.DigestStr()) So(err, ShouldBeNil) artifactType := "com.artifact.art/type" - indexReferrer.Index.ArtifactType = artifactType - indexReferrer.Index.Subject = &ispec.Descriptor{ - MediaType: ispec.MediaTypeImageManifest, - Digest: targetDigest, - } - + indexReferrer := CreateMultiarchWith().RandomImages(2). + ArtifactType(artifactType). + Subject(targetImg.DescriptorRef()). + Build() indexReferrerDigest := indexReferrer.Digest() err = UploadMultiarchImage(indexReferrer, baseURL, "repo", "ref") diff --git a/pkg/meta/boltdb/boltdb.go b/pkg/meta/boltdb/boltdb.go index 09d5d819ea..75d9a85bc3 100644 --- a/pkg/meta/boltdb/boltdb.go +++ b/pkg/meta/boltdb/boltdb.go @@ -94,7 +94,7 @@ func (bdw *BoltDB) SetImageData(digest godigest.Digest, imageData mTypes.ImageDa case ispec.MediaTypeImageManifest: manifest := imageData.Manifests[0] - protoImageData = mConvert.GetProtoImageManifestData(manifest.Manifest, manifest.ConfigContent, + protoImageData = mConvert.GetProtoImageManifestData(manifest.Manifest, manifest.Config, manifest.Size, manifest.Digest.String()) case ispec.MediaTypeImageIndex: protoImageData = mConvert.GetProtoImageIndexData(*imageData.Index, imageData.Size, imageData.Digest.String()) @@ -159,16 +159,16 @@ func (bdw *BoltDB) SetRepoReference(repo string, reference string, imageData mTy } // 2. Referrers - if protoImageData.Subject != nil { + if subject := mConvert.GetImageSubject(protoImageData); subject != nil { refInfo := &proto_go.ReferrersInfo{} - if protoRepoMeta.Referrers[protoImageData.Subject.Digest] != nil { - refInfo = protoRepoMeta.Referrers[protoImageData.Subject.Digest] + if protoRepoMeta.Referrers[subject.Digest.String()] != nil { + refInfo = protoRepoMeta.Referrers[subject.Digest.String()] } foundReferrer := false for i := range refInfo.List { - if refInfo.List[i].Digest == protoImageData.Digest { + if refInfo.List[i].Digest == mConvert.GetImageDigestStr(protoImageData) { foundReferrer = true refInfo.List[i].Count += 1 @@ -178,16 +178,16 @@ func (bdw *BoltDB) SetRepoReference(repo string, reference string, imageData mTy if !foundReferrer { refInfo.List = append(refInfo.List, &proto_go.ReferrerInfo{ - Digest: protoImageData.Digest, Count: 1, MediaType: protoImageData.MediaType, - ArtifactType: mConvert.GetArtifactType(protoImageData), - Size: protoImageData.Size, - Annotations: protoImageData.Annotations, + Digest: mConvert.GetImageDigestStr(protoImageData), + ArtifactType: mConvert.GetImageArtifactType(protoImageData), + Size: mConvert.GetImageManifestSize(protoImageData), + Annotations: mConvert.GetImageAnnotations(protoImageData), }) } - protoRepoMeta.Referrers[protoImageData.Subject.Digest] = refInfo + protoRepoMeta.Referrers[subject.Digest.String()] = refInfo } // 3. Update tag @@ -268,16 +268,18 @@ func (bdw *BoltDB) FilterImageData(ctx context.Context, digests []string, } if protoImageData.MediaType == ispec.MediaTypeImageIndex { - for i, manifest := range protoImageData.Manifests { - manifestDigest := manifest.Digest + manifestDataList := make([]*proto_go.ManifestData, 0, len(protoImageData.Index.Index.Manifests)) - imageManifestData, err := fetchProtoImageData(imageBuck, manifestDigest) + for _, manifest := range protoImageData.Index.Index.Manifests { + imageManifestData, err := fetchProtoImageData(imageBuck, manifest.Digest) if err != nil { return err } - protoImageData.Manifests[i] = imageManifestData.Manifests[0] + manifestDataList = append(manifestDataList, imageManifestData.Manifests[0]) } + + protoImageData.Manifests = manifestDataList } imageDataMap[digest] = mConvert.GetImageData(protoImageData) @@ -408,9 +410,6 @@ func (bdw *BoltDB) SearchTags(ctx context.Context, searchText string, manifestDigest, err) } - imageManifestData.Repo = ref(string(repoName)) - imageManifestData.Tag = &tag - protoImageData = imageManifestData case ispec.MediaTypeImageIndex: indexDigest := descriptor.Digest @@ -421,19 +420,18 @@ func (bdw *BoltDB) SearchTags(ctx context.Context, searchText string, indexDigest, err) } - for i, manifest := range imageIndexData.Manifests { - manifestDigest := manifest.Digest + manifestDataList := make([]*proto_go.ManifestData, 0, len(imageIndexData.Index.Index.Manifests)) - imageManifestData, err := fetchProtoImageData(imageBuck, manifestDigest) + for _, manifest := range imageIndexData.Index.Index.Manifests { + imageManifestData, err := fetchProtoImageData(imageBuck, manifest.Digest) if err != nil { return err } - imageIndexData.Manifests[i] = imageManifestData.Manifests[0] + manifestDataList = append(manifestDataList, imageManifestData.Manifests[0]) } - imageIndexData.Repo = ref(string(repoName)) - imageIndexData.Tag = &tag + imageIndexData.Manifests = manifestDataList protoImageData = imageIndexData default: @@ -503,9 +501,6 @@ func (bdw *BoltDB) FilterTags(ctx context.Context, filterRepoTag mTypes.FilterRe continue } - imageManifestData.Repo = ref(repoMeta.Name) - imageManifestData.Tag = ref(tag) - imageData := mConvert.GetImageData(imageManifestData) if filterFunc(repoMeta, imageData) { @@ -523,7 +518,7 @@ func (bdw *BoltDB) FilterTags(ctx context.Context, filterRepoTag mTypes.FilterRe matchedManifests := []*proto_go.ManifestData{} - for _, manifest := range imageIndexData.Manifests { + for _, manifest := range imageIndexData.Index.Index.Manifests { manifestDigest := manifest.Digest imageManifestData, err := fetchProtoImageData(imageDataBuck, manifestDigest) @@ -706,16 +701,18 @@ func (bdw *BoltDB) GetFullImageData(ctx context.Context, repo string, tag string } if protoImageData.MediaType == ispec.MediaTypeImageIndex { - for i, manifest := range protoImageData.Manifests { - manifestDigest := manifest.Digest + manifestDataList := make([]*proto_go.ManifestData, 0, len(protoImageData.Index.Index.Manifests)) - imageManifestData, err := fetchProtoImageData(imageBuck, manifestDigest) + for _, manifest := range protoImageData.Index.Index.Manifests { + imageManifestData, err := fetchProtoImageData(imageBuck, manifest.Digest) if err != nil { return err } - protoImageData.Manifests[i] = imageManifestData.Manifests[0] + manifestDataList = append(manifestDataList, imageManifestData.Manifests[0]) } + + protoImageData.Manifests = manifestDataList } return nil @@ -736,16 +733,18 @@ func (bdw *BoltDB) GetImageData(digest godigest.Digest) (mTypes.ImageData, error } if protoImageData.MediaType == ispec.MediaTypeImageIndex { - for i, manifest := range protoImageData.Manifests { - manifestDigest := manifest.Digest + manifestDataList := make([]*proto_go.ManifestData, 0, len(protoImageData.Index.Index.Manifests)) - imageManifestData, err := fetchProtoImageData(imageBuck, manifestDigest) + for _, manifest := range protoImageData.Index.Index.Manifests { + imageManifestData, err := fetchProtoImageData(imageBuck, manifest.Digest) if err != nil { return err } - protoImageData.Manifests[i] = imageManifestData.Manifests[0] + manifestDataList = append(manifestDataList, imageManifestData.Manifests[0]) } + + protoImageData.Manifests = manifestDataList } imageData = mConvert.GetImageData(protoImageData) @@ -1302,8 +1301,8 @@ func (bdw *BoltDB) RemoveRepoReference(repo, reference string, manifestDigest go } // Remove Referrers - if imageData.Subject != nil { - referredDigest := imageData.Subject.Digest + if subject := mConvert.GetImageSubject(imageData); subject != nil { + referredDigest := subject.Digest.String() refInfo := &proto_go.ReferrersInfo{} if repoMeta.Referrers[referredDigest] != nil { @@ -2043,9 +2042,3 @@ func resetBucket(transaction *bbolt.Tx, bucketName string) error { return err } - -func ref[T any](input T) *T { - ref := input - - return &ref -} diff --git a/pkg/meta/common/common.go b/pkg/meta/common/common.go index abc8710ee9..e2d3997026 100644 --- a/pkg/meta/common/common.go +++ b/pkg/meta/common/common.go @@ -203,22 +203,22 @@ func AddImageDataToRepoMeta(repoMeta *proto_go.RepoMeta, repoBlobs *proto_go.Rep vendors = append(vendors, vendor) } - platforms := []*proto_go.Platform{getProtoPlatform(&imageData.Manifests[0].ConfigContent.Platform)} + platforms := []*proto_go.Platform{getProtoPlatform(&manifestData.Config.Platform)} if platforms[0].OS == "" && platforms[0].Arch == "" { platforms = []*proto_go.Platform{} } - subBlobs := []string{manifestData.Config.Digest.String()} - repoBlobs.Blobs[manifestData.Config.Digest.String()] = &proto_go.BlobInfo{ - Size: manifestData.Config.Size, + subBlobs := []string{manifestData.Manifest.Config.Digest.String()} + repoBlobs.Blobs[manifestData.Manifest.Config.Digest.String()] = &proto_go.BlobInfo{ + Size: manifestData.Manifest.Config.Size, } - for _, layer := range manifestData.Layers { + for _, layer := range manifestData.Manifest.Layers { subBlobs = append(subBlobs, layer.Digest.String()) repoBlobs.Blobs[layer.Digest.String()] = &proto_go.BlobInfo{Size: layer.Size} } - lastUpdated := zcommon.GetImageLastUpdated(manifestData.ConfigContent) + lastUpdated := zcommon.GetImageLastUpdated(manifestData.Config) repoBlobs.Blobs[imageData.Digest.String()] = &proto_go.BlobInfo{ Size: imageData.Size, @@ -229,7 +229,7 @@ func AddImageDataToRepoMeta(repoMeta *proto_go.RepoMeta, repoBlobs *proto_go.Rep } case ispec.MediaTypeImageIndex: subBlobs := []string{} - for _, manifest := range imageData.Manifests { + for _, manifest := range imageData.Index.Manifests { subBlobs = append(subBlobs, manifest.Digest.String()) } diff --git a/pkg/meta/convert/convert.go b/pkg/meta/convert/convert.go index 4d0001988b..caccf42467 100644 --- a/pkg/meta/convert/convert.go +++ b/pkg/meta/convert/convert.go @@ -33,19 +33,105 @@ func getHistory(history []*proto_go.History) []ispec.History { return results } -func GetArtifactType(imageData *proto_go.ImageData) string { +func GetImageArtifactType(imageData *proto_go.ImageData) string { switch imageData.MediaType { case ispec.MediaTypeImageManifest: - if imageData.ArtifactType != "" { - return imageData.ArtifactType + manifestArtifactType := deref(imageData.Manifests[0].Manifest.ArtifactType, "") + if manifestArtifactType != "" { + return manifestArtifactType } - return imageData.Manifests[0].Config.MediaType + return imageData.Manifests[0].Manifest.Config.MediaType case ispec.MediaTypeImageIndex: - return imageData.ArtifactType + return deref(imageData.Index.Index.ArtifactType, "") + default: + return "" } +} + +func GetImageManifestSize(imageData *proto_go.ImageData) int64 { + switch imageData.MediaType { + case ispec.MediaTypeImageManifest: + return imageData.Manifests[0].Size + case ispec.MediaTypeImageIndex: + return imageData.Index.Size + default: + return 0 + } +} + +func GetImageDigest(imageData *proto_go.ImageData) godigest.Digest { + switch imageData.MediaType { + case ispec.MediaTypeImageManifest: + return godigest.Digest(imageData.Manifests[0].Digest) + case ispec.MediaTypeImageIndex: + return godigest.Digest(imageData.Index.Digest) + default: + return "" + } +} + +func GetImageDigestStr(imageData *proto_go.ImageData) string { + switch imageData.MediaType { + case ispec.MediaTypeImageManifest: + return imageData.Manifests[0].Digest + case ispec.MediaTypeImageIndex: + return imageData.Index.Digest + default: + return "" + } +} + +func GetImageAnnotations(imageData *proto_go.ImageData) map[string]string { + switch imageData.MediaType { + case ispec.MediaTypeImageManifest: + return imageData.Manifests[0].Manifest.Annotations + case ispec.MediaTypeImageIndex: + return imageData.Index.Index.Annotations + default: + return map[string]string{} + } +} - return "" +func GetImageSubject(imageData *proto_go.ImageData) *ispec.Descriptor { + switch imageData.MediaType { + case ispec.MediaTypeImageManifest: + if imageData.Manifests[0].Manifest.Subject == nil { + return nil + } + + return GetDescriptorRef(imageData.Manifests[0].Manifest.Subject) + case ispec.MediaTypeImageIndex: + if imageData.Index.Index.Subject == nil { + return nil + } + + return GetDescriptorRef(imageData.Index.Index.Subject) + default: + return &ispec.Descriptor{} + } +} + +func GetDescriptorRef(descriptor *proto_go.Descriptor) *ispec.Descriptor { + if descriptor == nil { + return nil + } + + var platform *ispec.Platform + if descriptor.Platform != nil { + platform = ref(getPlatform(descriptor.Platform)) + } + + return &ispec.Descriptor{ + MediaType: descriptor.MediaType, + Digest: godigest.Digest(descriptor.Digest), + Size: descriptor.Size, + URLs: descriptor.URLs, + Data: descriptor.Data, + Platform: platform, + ArtifactType: deref(descriptor.ArtifactType, ""), + Annotations: descriptor.Annotations, + } } func getPlatform(platform *proto_go.Platform) ispec.Platform { @@ -248,10 +334,10 @@ func GetImageManifestData(manifestContent ispec.Manifest, configContent ispec.Im Size: size, Manifests: []mTypes.ManifestData{ { - Digest: digest, - Size: size, - ConfigContent: configContent, - Manifest: manifestContent, + Digest: digest, + Size: size, + Config: configContent, + Manifest: manifestContent, }, }, } @@ -286,19 +372,6 @@ func getTags(tags map[string]*proto_go.TagDescriptor) map[string]mTypes.Descript return resultMap } -func getProtoManifests(descriptors []ispec.Descriptor) []*proto_go.ManifestData { - manifestList := []*proto_go.ManifestData{} - - for _, manifest := range descriptors { - manifestList = append(manifestList, &proto_go.ManifestData{ - MediaType: ref(ispec.MediaTypeImageManifest), - Digest: manifest.Digest.String(), - }) - } - - return manifestList -} - func getManifests(descriptors []ispec.Descriptor) []mTypes.ManifestData { manifestList := []mTypes.ManifestData{} @@ -460,8 +533,8 @@ func GetLastUpdatedImage(protoLastUpdated *proto_go.RepoLastUpdatedImage) *mType func GetImageData(dbImageData *proto_go.ImageData) mTypes.ImageData { imageData := mTypes.ImageData{ MediaType: dbImageData.MediaType, - Size: dbImageData.Size, - Digest: godigest.Digest(dbImageData.Digest), + Size: GetImageManifestSize(dbImageData), + Digest: GetImageDigest(dbImageData), } if dbImageData.MediaType == ispec.MediaTypeImageIndex { @@ -471,27 +544,27 @@ func GetImageData(dbImageData *proto_go.ImageData) mTypes.ImageData { for _, manifest := range dbImageData.Manifests { manifests = append(manifests, ispec.Descriptor{ - MediaType: deref(manifest.MediaType, ""), + MediaType: deref(manifest.Manifest.MediaType, ""), Digest: godigest.Digest(manifest.Digest), Size: manifest.Size, }) } - if dbImageData.Subject != nil { + if imgSubject := GetImageSubject(dbImageData); imgSubject != nil { subject = &ispec.Descriptor{ - MediaType: dbImageData.Subject.MediaType, - Digest: godigest.Digest(dbImageData.Subject.Digest), - Size: dbImageData.Subject.Size, + MediaType: imgSubject.MediaType, + Digest: imgSubject.Digest, + Size: imgSubject.Size, } } imageData.Index = &ispec.Index{ Versioned: specs.Versioned{SchemaVersion: int(dbImageData.Versioned.GetSchemaVersion())}, MediaType: ispec.MediaTypeImageIndex, - ArtifactType: dbImageData.ArtifactType, Manifests: manifests, Subject: subject, - Annotations: dbImageData.Annotations, + ArtifactType: GetImageArtifactType(dbImageData), + Annotations: GetImageAnnotations(dbImageData), } } @@ -503,18 +576,18 @@ func GetImageData(dbImageData *proto_go.ImageData) mTypes.ImageData { Digest: godigest.Digest(manifest.Digest), Manifest: ispec.Manifest{ Versioned: specs.Versioned{SchemaVersion: int(manifest.Versioned.GetSchemaVersion())}, - MediaType: deref(manifest.MediaType, ""), - ArtifactType: deref(manifest.ArtifactType, ""), + MediaType: deref(manifest.Manifest.MediaType, ""), + ArtifactType: deref(manifest.Manifest.ArtifactType, ""), Config: ispec.Descriptor{ - MediaType: manifest.Config.MediaType, - Size: manifest.Config.Size, - Digest: godigest.Digest(manifest.Config.Digest), + MediaType: manifest.Manifest.Config.MediaType, + Size: manifest.Manifest.Config.Size, + Digest: godigest.Digest(manifest.Manifest.Config.Digest), }, - Layers: getLayers(manifest.Layers), - Subject: getSubject(manifest.Subject), - Annotations: manifest.Annotations, + Layers: getLayers(manifest.Manifest.Layers), + Subject: getSubject(manifest.Manifest.Subject), + Annotations: manifest.Manifest.Annotations, }, - ConfigContent: ispec.Image{ + Config: ispec.Image{ Created: getTime(manifest.Config.Created), Author: deref(manifest.Config.Author, ""), Platform: getPlatform(manifest.Config.Platform), diff --git a/pkg/meta/convert/convert_proto.go b/pkg/meta/convert/convert_proto.go index 3645d771f4..ff29a37674 100644 --- a/pkg/meta/convert/convert_proto.go +++ b/pkg/meta/convert/convert_proto.go @@ -32,9 +32,10 @@ func GetProtoImageData(imageData mTypes.ImageData) *proto_go.ImageData { if len(imageData.Manifests) == 0 { return nil } + manifestData := imageData.Manifests[0] - return GetProtoImageManifestData(imageData.Manifests[0].Manifest, imageData.Manifests[0].ConfigContent, - imageData.Manifests[0].Size, imageData.Manifests[0].Digest.String()) + return GetProtoImageManifestData(manifestData.Manifest, manifestData.Config, manifestData.Size, + manifestData.Digest.String()) case ispec.MediaTypeImageIndex: if imageData.Index == nil { return nil @@ -49,14 +50,10 @@ func GetProtoImageData(imageData mTypes.ImageData) *proto_go.ImageData { func GetProtoImageManifestData(manifestContent ispec.Manifest, configContent ispec.Image, size int64, digest string, ) *proto_go.ImageData { return &proto_go.ImageData{ - Versioned: &proto_go.Versioned{SchemaVersion: int32(manifestContent.SchemaVersion)}, - MediaType: ispec.MediaTypeImageManifest, - Manifests: []*proto_go.ManifestData{GetProtoManifestData(manifestContent, configContent, size, digest)}, - ArtifactType: manifestContent.ArtifactType, - Subject: getProtoDesc(manifestContent.Subject), - Annotations: manifestContent.Annotations, - Size: size, - Digest: digest, + Versioned: &proto_go.Versioned{SchemaVersion: int32(manifestContent.SchemaVersion)}, + MediaType: ispec.MediaTypeImageManifest, + Manifests: []*proto_go.ManifestData{GetProtoManifestData(manifestContent, configContent, size, digest)}, + Index: nil, } } @@ -65,13 +62,22 @@ func GetProtoManifestData(manifestContent ispec.Manifest, configContent ispec.Im return &proto_go.ManifestData{ Versioned: &proto_go.Versioned{SchemaVersion: int32(manifestContent.SchemaVersion)}, Digest: digest, - MediaType: ref(ispec.MediaTypeImageManifest), - Config: &proto_go.ConfigData{ - Digest: manifestContent.Config.Digest.String(), - Size: manifestContent.Config.Size, - MediaType: manifestContent.Config.MediaType, - Created: GetProtoTime(configContent.Created), - Author: &configContent.Author, + Size: size, + Manifest: &proto_go.Manifest{ + Config: &proto_go.Descriptor{ + Digest: manifestContent.Config.Digest.String(), + Size: manifestContent.Config.Size, + MediaType: manifestContent.Config.MediaType, + }, + MediaType: ref(ispec.MediaTypeImageManifest), + ArtifactType: &manifestContent.ArtifactType, + Layers: getProtoManifestLayers(manifestContent.Layers), + Subject: getProtoDesc(manifestContent.Subject), + Annotations: manifestContent.Annotations, + }, + Config: &proto_go.Image{ + Created: GetProtoTime(configContent.Created), + Author: &configContent.Author, Platform: &proto_go.Platform{ Arch: getArch(configContent.Architecture, configContent.Variant), OS: configContent.OS, @@ -93,24 +99,25 @@ func GetProtoManifestData(manifestContent ispec.Manifest, configContent ispec.Im }, History: getProtoHistory(configContent.History), }, - Size: size, - ArtifactType: &manifestContent.ArtifactType, - Layers: getProtoManifestLayers(manifestContent.Layers), - Subject: getProtoDesc(manifestContent.Subject), - Annotations: manifestContent.Annotations, } } func GetProtoImageIndexData(indexContent ispec.Index, size int64, digest string) *proto_go.ImageData { return &proto_go.ImageData{ - Versioned: &proto_go.Versioned{SchemaVersion: int32(indexContent.SchemaVersion)}, - MediaType: ispec.MediaTypeImageIndex, - ArtifactType: common.GetIndexArtifactType(indexContent), - Manifests: getProtoManifests(indexContent.Manifests), - Subject: getProtoDesc(indexContent.Subject), - Annotations: indexContent.Annotations, - Size: size, - Digest: digest, + Versioned: &proto_go.Versioned{SchemaVersion: int32(indexContent.SchemaVersion)}, + MediaType: ispec.MediaTypeImageIndex, + Index: &proto_go.IndexData{ + Size: size, + Digest: digest, + Index: &proto_go.Index{ + Versioned: &proto_go.Versioned{SchemaVersion: int32(indexContent.Versioned.SchemaVersion)}, + MediaType: ref(ispec.MediaTypeImageIndex), + ArtifactType: ref(common.GetIndexArtifactType(indexContent)), + Manifests: getProtoManifestList(indexContent.Manifests), + Subject: getProtoDesc(indexContent.Subject), + Annotations: indexContent.Annotations, + }, + }, } } @@ -235,6 +242,25 @@ func getProtoDesc(descriptor *ispec.Descriptor) *proto_go.Descriptor { } } +func getProtoManifestList(manifests []ispec.Descriptor) []*proto_go.Descriptor { + result := make([]*proto_go.Descriptor, 0, len(manifests)) + + for _, manifest := range manifests { + result = append(result, &proto_go.Descriptor{ + MediaType: manifest.MediaType, + Digest: manifest.Digest.String(), + Size: manifest.Size, + URLs: manifest.URLs, + Annotations: manifest.Annotations, + Data: manifest.Data, + Platform: getProtoPlatform(manifest.Platform), + ArtifactType: ref(manifest.ArtifactType), + }) + } + + return result +} + func getProtoPlatform(platform *ispec.Platform) *proto_go.Platform { if platform == nil { return nil diff --git a/pkg/meta/dynamodb/dynamodb.go b/pkg/meta/dynamodb/dynamodb.go index 7caa99d8ac..6ab7c3b59a 100644 --- a/pkg/meta/dynamodb/dynamodb.go +++ b/pkg/meta/dynamodb/dynamodb.go @@ -110,7 +110,7 @@ func (dwr *DynamoDB) SetProtoImageData(digest godigest.Digest, protoImageData *p return err } - resp, err := dwr.Client.UpdateItem(context.TODO(), &dynamodb.UpdateItemInput{ + _, err = dwr.Client.UpdateItem(context.TODO(), &dynamodb.UpdateItemInput{ ExpressionAttributeNames: map[string]string{ "#ID": "ImageData", }, @@ -119,13 +119,12 @@ func (dwr *DynamoDB) SetProtoImageData(digest godigest.Digest, protoImageData *p }, Key: map[string]types.AttributeValue{ "Key": &types.AttributeValueMemberS{ - Value: protoImageData.Digest, + Value: mConvert.GetImageDigestStr(protoImageData), }, }, TableName: aws.String(dwr.ImageDataTablename), UpdateExpression: aws.String("SET #ID = :ImageData"), }) - _ = resp return err } @@ -259,16 +258,16 @@ func (dwr *DynamoDB) SetRepoReference(repo string, reference string, imageData m } // 2. Referrers - if protoImageData.Subject != nil { + if subject := mConvert.GetImageSubject(protoImageData); subject != nil { refInfo := &proto_go.ReferrersInfo{} - if repoMeta.Referrers[protoImageData.Subject.Digest] != nil { - refInfo = repoMeta.Referrers[protoImageData.Subject.Digest] + if repoMeta.Referrers[subject.Digest.String()] != nil { + refInfo = repoMeta.Referrers[subject.Digest.String()] } foundReferrer := false for i := range refInfo.List { - if refInfo.List[i].Digest == protoImageData.Digest { + if refInfo.List[i].Digest == mConvert.GetImageDigestStr(protoImageData) { foundReferrer = true refInfo.List[i].Count += 1 @@ -278,16 +277,16 @@ func (dwr *DynamoDB) SetRepoReference(repo string, reference string, imageData m if !foundReferrer { refInfo.List = append(refInfo.List, &proto_go.ReferrerInfo{ - Digest: protoImageData.Digest, Count: 1, MediaType: protoImageData.MediaType, - ArtifactType: mConvert.GetArtifactType(protoImageData), - Size: protoImageData.Size, - Annotations: protoImageData.Annotations, + Digest: mConvert.GetImageDigestStr(protoImageData), + ArtifactType: mConvert.GetImageArtifactType(protoImageData), + Size: mConvert.GetImageManifestSize(protoImageData), + Annotations: mConvert.GetImageAnnotations(protoImageData), }) } - repoMeta.Referrers[protoImageData.Subject.Digest] = refInfo + repoMeta.Referrers[subject.Digest.String()] = refInfo } // 3. Update tag @@ -494,9 +493,6 @@ func (dwr *DynamoDB) SearchTags(ctx context.Context, searchText string) ([]mType fmt.Errorf("metadb: error fetching manifest meta for manifest with digest %s %w", manifestDigest, err) } - imageManifestData.Repo = ref(searchedRepo) - imageManifestData.Tag = &tag - protoImageData = imageManifestData case ispec.MediaTypeImageIndex: indexDigest := godigest.Digest(descriptor.Digest) @@ -507,7 +503,9 @@ func (dwr *DynamoDB) SearchTags(ctx context.Context, searchText string) ([]mType fmt.Errorf("metadb: error fetching manifest meta for manifest with digest %s %w", indexDigest, err) } - for i, manifest := range imageIndexData.Manifests { + manifestDataList := make([]*proto_go.ManifestData, 0, len(imageIndexData.Index.Index.Manifests)) + + for _, manifest := range imageIndexData.Index.Index.Manifests { manifestDigest := godigest.Digest(manifest.Digest) imageManifestData, err := dwr.GetProtoImageData(ctx, manifestDigest) @@ -515,11 +513,10 @@ func (dwr *DynamoDB) SearchTags(ctx context.Context, searchText string) ([]mType return []mTypes.FullImageData{}, err } - imageIndexData.Manifests[i] = imageManifestData.Manifests[0] + manifestDataList = append(manifestDataList, imageManifestData.Manifests[0]) } - imageIndexData.Repo = ref(searchedRepo) - imageIndexData.Tag = &tag + imageIndexData.Manifests = manifestDataList protoImageData = imageIndexData default: @@ -534,12 +531,6 @@ func (dwr *DynamoDB) SearchTags(ctx context.Context, searchText string) ([]mType return images, err } -func ref[T any](input T) *T { - ref := input - - return &ref -} - func (dwr *DynamoDB) FilterTags(ctx context.Context, filterRepoTag mTypes.FilterRepoTagFunc, filterFunc mTypes.FilterFunc, ) ([]mTypes.FullImageData, error) { @@ -593,9 +584,6 @@ func (dwr *DynamoDB) FilterTags(ctx context.Context, filterRepoTag mTypes.Filter continue } - imageManifestData.Repo = ref(repoMeta.Name) - imageManifestData.Tag = &tag - imageData := mConvert.GetImageData(imageManifestData) if filterFunc(repoMeta, imageData) { @@ -613,7 +601,7 @@ func (dwr *DynamoDB) FilterTags(ctx context.Context, filterRepoTag mTypes.Filter matchedManifests := []*proto_go.ManifestData{} - for _, manifest := range imageIndexData.Manifests { + for _, manifest := range imageIndexData.Index.Index.Manifests { manifestDigest := manifest.Digest imageManifestData, err := dwr.GetProtoImageData(ctx, godigest.Digest(manifestDigest)) @@ -746,16 +734,18 @@ func (dwr *DynamoDB) GetFullImageData(ctx context.Context, repo string, tag stri } if protoImageData.MediaType == ispec.MediaTypeImageIndex { - for i, manifest := range protoImageData.Manifests { - manifestDigest := godigest.Digest(manifest.Digest) + manifestDataList := make([]*proto_go.ManifestData, 0, len(protoImageData.Index.Index.Manifests)) - imageManifestData, err := dwr.GetProtoImageData(ctx, manifestDigest) + for _, manifest := range protoImageData.Index.Index.Manifests { + imageManifestData, err := dwr.GetProtoImageData(ctx, godigest.Digest(manifest.Digest)) if err != nil { return mTypes.FullImageData{}, err } - protoImageData.Manifests[i] = imageManifestData.Manifests[0] + manifestDataList = append(manifestDataList, imageManifestData.Manifests[0]) } + + protoImageData.Manifests = manifestDataList } return mConvert.GetFullImageDataFromProto(tag, protoRepoMeta, protoImageData), nil @@ -771,13 +761,15 @@ func (dwr *DynamoDB) getUserBookmarksAndStars(ctx context.Context) ([]string, [] } func (dwr *DynamoDB) GetImageData(digest godigest.Digest) (mTypes.ImageData, error) { - imageData, err := dwr.GetProtoImageData(context.Background(), digest) + protoImageData, err := dwr.GetProtoImageData(context.Background(), digest) if err != nil { return mTypes.ImageData{}, err } - if imageData.MediaType == ispec.MediaTypeImageIndex { - for i, manifest := range imageData.Manifests { + if protoImageData.MediaType == ispec.MediaTypeImageIndex { + manifestDataList := make([]*proto_go.ManifestData, 0, len(protoImageData.Index.Index.Manifests)) + + for _, manifest := range protoImageData.Index.Index.Manifests { manifestDigest := godigest.Digest(manifest.Digest) imageManifestData, err := dwr.GetProtoImageData(context.Background(), manifestDigest) @@ -785,11 +777,13 @@ func (dwr *DynamoDB) GetImageData(digest godigest.Digest) (mTypes.ImageData, err return mTypes.ImageData{}, err } - imageData.Manifests[i] = imageManifestData.Manifests[0] + manifestDataList = append(manifestDataList, imageManifestData.Manifests[0]) } + + protoImageData.Manifests = manifestDataList } - return mConvert.GetImageData(imageData), nil + return mConvert.GetImageData(protoImageData), nil } func (dwr *DynamoDB) GetMultipleRepoMeta(ctx context.Context, filter func(repoMeta mTypes.RepoMetadata) bool, @@ -1166,8 +1160,10 @@ func (dwr *DynamoDB) FilterImageData(ctx context.Context, digests []string, } if protoImageData.MediaType == ispec.MediaTypeImageIndex { - indexDigests := []string{} - for i := range protoImageData.Manifests { + manifestDataList := make([]*proto_go.ManifestData, 0, len(protoImageData.Index.Index.Manifests)) + + indexDigests := make([]string, 0, len(protoImageData.Index.Index.Manifests)) + for i := range protoImageData.Index.Index.Manifests { indexDigests = append(indexDigests, protoImageData.Manifests[i].Digest) } @@ -1176,17 +1172,19 @@ func (dwr *DynamoDB) FilterImageData(ctx context.Context, digests []string, return nil, err } - for i, manifestAttribute := range manifestsAttributes { + for _, manifestAttribute := range manifestsAttributes { imageManifestData, err := getProtoImageDataFromAttribute(manifestAttribute["ImageData"]) if err != nil { return nil, err } - protoImageData.Manifests[i] = imageManifestData.Manifests[0] + manifestDataList = append(manifestDataList, imageManifestData.Manifests[0]) } + + protoImageData.Manifests = manifestDataList } - results[protoImageData.Digest] = mConvert.GetImageData(protoImageData) + results[mConvert.GetImageDigestStr(protoImageData)] = mConvert.GetImageData(protoImageData) } return results, nil @@ -1213,8 +1211,8 @@ func (dwr *DynamoDB) RemoveRepoReference(repo, reference string, manifestDigest } // Remove Referrers - if protoImageData.Subject != nil { - referredDigest := protoImageData.Subject.Digest + if subject := mConvert.GetImageSubject(protoImageData); subject != nil { + referredDigest := subject.Digest.String() refInfo := &proto_go.ReferrersInfo{} if protoRepoMeta.Referrers[referredDigest] != nil { diff --git a/pkg/meta/meta_test.go b/pkg/meta/meta_test.go index d9b4f14768..07eed9a2ed 100644 --- a/pkg/meta/meta_test.go +++ b/pkg/meta/meta_test.go @@ -580,7 +580,7 @@ func RunMetaDBTests(t *testing.T, metaDB mTypes.MetaDB, preparationFuncs ...func imageData1 := image1.AsImageData() layersSize := int64(2 * 10) - image1Size := imageData1.Manifests[0].Size + imageData1.Manifests[0].Config.Size + layersSize + image1Size := imageData1.Manifests[0].Size + imageData1.Manifests[0].Manifest.Config.Size + layersSize err := metaDB.SetRepoReference(repo1, tag1, imageData1) So(err, ShouldBeNil) @@ -629,7 +629,7 @@ func RunMetaDBTests(t *testing.T, metaDB mTypes.MetaDB, preparationFuncs ...func Annotations(map[string]string{ispec.AnnotationVendor: "vendor1"}). Build() imageData1 := image1.AsImageData() - image1Size := imageData1.Manifests[0].Size + imageData1.Manifests[0].Config.Size + layersSize + image1Size := imageData1.Manifests[0].Size + imageData1.Manifests[0].Manifest.Config.Size + layersSize image2 := CreateImageWith(). LayerBlobs(image1.Layers). @@ -637,7 +637,7 @@ func RunMetaDBTests(t *testing.T, metaDB mTypes.MetaDB, preparationFuncs ...func Annotations(map[string]string{ispec.AnnotationVendor: "vendor2", "annotation": "test"}). Build() imageData2 := image2.AsImageData() - image2Size := imageData2.Manifests[0].Size + imageData2.Manifests[0].Config.Size + layersSize + image2Size := imageData2.Manifests[0].Size + imageData2.Manifests[0].Manifest.Config.Size + layersSize totalRepoSize := image1Size + image2Size - layersSize diff --git a/pkg/meta/proto/meta.proto b/pkg/meta/proto/meta.proto index 1f4b8a0d5e..357842a8f1 100644 --- a/pkg/meta/proto/meta.proto +++ b/pkg/meta/proto/meta.proto @@ -12,28 +12,22 @@ message TagDescriptor { message ImageData { Versioned Versioned = 1; string MediaType = 2; - string ArtifactType = 3; - repeated ManifestData Manifests = 4; - optional Descriptor Subject = 5; - map Annotations = 6; - int64 Size = 7; - string Digest = 8; - - optional string Repo = 9; - optional string Tag = 10; + repeated ManifestData Manifests = 5; + optional IndexData Index = 6; } message ManifestData { - Versioned Versioned = 1; - string Digest = 2; - optional string MediaType = 4; - optional string ArtifactType = 5; - repeated Descriptor Layers = 6; - optional Descriptor Subject = 7; - map Annotations = 8; - - int64 Size = 10; - ConfigData Config = 11; + Versioned Versioned = 1; + string Digest = 2; + int64 Size = 3; + Manifest Manifest = 4; + Image Config = 5; +} + +message IndexData { + string Digest = 1; + int64 Size = 2; + Index Index = 3; } message RepoLastUpdatedImage { diff --git a/pkg/meta/proto/oci.proto b/pkg/meta/proto/oci.proto index 0dd90c69ed..d8ee4cda6c 100644 --- a/pkg/meta/proto/oci.proto +++ b/pkg/meta/proto/oci.proto @@ -5,6 +5,15 @@ import "timestamp.proto"; // https://github.com/opencontainers/image-spec/blob/main/specs-go/v1/config.go +message Image { + optional google.protobuf.Timestamp Created = 1; + optional string Author = 2; + Platform Platform = 3; + optional ImageConfig Config = 4; + optional RootFS RootFS = 5; + repeated History History = 6; +} + message ImageConfig { map ExposedPorts = 1; map Volumes = 2; @@ -61,6 +70,32 @@ message Descriptor { message Platform { string OS = 1; string Arch = 2; + optional string OSVersion = 3; + repeated string OSFeatures = 4; + optional string Variant = 5; +} + +// https://github.com/opencontainers/image-spec/blob/main/specs-go/v1/index.go + +message Index { + Versioned versioned = 1; + optional string MediaType = 2; + optional string ArtifactType = 3; + repeated Descriptor Manifests = 4; + optional Descriptor Subject = 5; + map Annotations = 6; +} + +// https://github.com/opencontainers/image-spec/blob/main/specs-go/v1/manifest.go + +message Manifest { + Versioned Versioned = 1; + optional string MediaType = 2; + optional string ArtifactType = 3; + Descriptor Config = 4; + repeated Descriptor Layers = 5; + optional Descriptor Subject = 6; + map Annotations = 7; } // https://github.com/opencontainers/image-spec/blob/main/specs-go/versioned.go diff --git a/pkg/meta/proto_go/meta.pb.go b/pkg/meta/proto_go/meta.pb.go index bbd52c5f10..16c5007250 100644 --- a/pkg/meta/proto_go/meta.pb.go +++ b/pkg/meta/proto_go/meta.pb.go @@ -81,16 +81,10 @@ type ImageData struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Versioned *Versioned `protobuf:"bytes,1,opt,name=Versioned,proto3" json:"Versioned,omitempty"` - MediaType string `protobuf:"bytes,2,opt,name=MediaType,proto3" json:"MediaType,omitempty"` - ArtifactType string `protobuf:"bytes,3,opt,name=ArtifactType,proto3" json:"ArtifactType,omitempty"` - Manifests []*ManifestData `protobuf:"bytes,4,rep,name=Manifests,proto3" json:"Manifests,omitempty"` - Subject *Descriptor `protobuf:"bytes,5,opt,name=Subject,proto3,oneof" json:"Subject,omitempty"` - Annotations map[string]string `protobuf:"bytes,6,rep,name=Annotations,proto3" json:"Annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Size int64 `protobuf:"varint,7,opt,name=Size,proto3" json:"Size,omitempty"` - Digest string `protobuf:"bytes,8,opt,name=Digest,proto3" json:"Digest,omitempty"` - Repo *string `protobuf:"bytes,9,opt,name=Repo,proto3,oneof" json:"Repo,omitempty"` - Tag *string `protobuf:"bytes,10,opt,name=Tag,proto3,oneof" json:"Tag,omitempty"` + Versioned *Versioned `protobuf:"bytes,1,opt,name=Versioned,proto3" json:"Versioned,omitempty"` + MediaType string `protobuf:"bytes,2,opt,name=MediaType,proto3" json:"MediaType,omitempty"` + Manifests []*ManifestData `protobuf:"bytes,5,rep,name=Manifests,proto3" json:"Manifests,omitempty"` + Index *IndexData `protobuf:"bytes,6,opt,name=Index,proto3,oneof" json:"Index,omitempty"` } func (x *ImageData) Reset() { @@ -139,13 +133,6 @@ func (x *ImageData) GetMediaType() string { return "" } -func (x *ImageData) GetArtifactType() string { - if x != nil { - return x.ArtifactType - } - return "" -} - func (x *ImageData) GetManifests() []*ManifestData { if x != nil { return x.Manifests @@ -153,62 +140,23 @@ func (x *ImageData) GetManifests() []*ManifestData { return nil } -func (x *ImageData) GetSubject() *Descriptor { - if x != nil { - return x.Subject - } - return nil -} - -func (x *ImageData) GetAnnotations() map[string]string { +func (x *ImageData) GetIndex() *IndexData { if x != nil { - return x.Annotations + return x.Index } return nil } -func (x *ImageData) GetSize() int64 { - if x != nil { - return x.Size - } - return 0 -} - -func (x *ImageData) GetDigest() string { - if x != nil { - return x.Digest - } - return "" -} - -func (x *ImageData) GetRepo() string { - if x != nil && x.Repo != nil { - return *x.Repo - } - return "" -} - -func (x *ImageData) GetTag() string { - if x != nil && x.Tag != nil { - return *x.Tag - } - return "" -} - type ManifestData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Versioned *Versioned `protobuf:"bytes,1,opt,name=Versioned,proto3" json:"Versioned,omitempty"` - Digest string `protobuf:"bytes,2,opt,name=Digest,proto3" json:"Digest,omitempty"` - MediaType *string `protobuf:"bytes,4,opt,name=MediaType,proto3,oneof" json:"MediaType,omitempty"` - ArtifactType *string `protobuf:"bytes,5,opt,name=ArtifactType,proto3,oneof" json:"ArtifactType,omitempty"` - Layers []*Descriptor `protobuf:"bytes,6,rep,name=Layers,proto3" json:"Layers,omitempty"` - Subject *Descriptor `protobuf:"bytes,7,opt,name=Subject,proto3,oneof" json:"Subject,omitempty"` - Annotations map[string]string `protobuf:"bytes,8,rep,name=Annotations,proto3" json:"Annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Size int64 `protobuf:"varint,10,opt,name=Size,proto3" json:"Size,omitempty"` - Config *ConfigData `protobuf:"bytes,11,opt,name=Config,proto3" json:"Config,omitempty"` + Versioned *Versioned `protobuf:"bytes,1,opt,name=Versioned,proto3" json:"Versioned,omitempty"` + Digest string `protobuf:"bytes,2,opt,name=Digest,proto3" json:"Digest,omitempty"` + Size int64 `protobuf:"varint,3,opt,name=Size,proto3" json:"Size,omitempty"` + Manifest *Manifest `protobuf:"bytes,4,opt,name=Manifest,proto3" json:"Manifest,omitempty"` + Config *Image `protobuf:"bytes,5,opt,name=Config,proto3" json:"Config,omitempty"` } func (x *ManifestData) Reset() { @@ -257,51 +205,86 @@ func (x *ManifestData) GetDigest() string { return "" } -func (x *ManifestData) GetMediaType() string { - if x != nil && x.MediaType != nil { - return *x.MediaType +func (x *ManifestData) GetSize() int64 { + if x != nil { + return x.Size } - return "" + return 0 } -func (x *ManifestData) GetArtifactType() string { - if x != nil && x.ArtifactType != nil { - return *x.ArtifactType +func (x *ManifestData) GetManifest() *Manifest { + if x != nil { + return x.Manifest } - return "" + return nil } -func (x *ManifestData) GetLayers() []*Descriptor { +func (x *ManifestData) GetConfig() *Image { if x != nil { - return x.Layers + return x.Config } return nil } -func (x *ManifestData) GetSubject() *Descriptor { - if x != nil { - return x.Subject +type IndexData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Digest string `protobuf:"bytes,1,opt,name=Digest,proto3" json:"Digest,omitempty"` + Size int64 `protobuf:"varint,2,opt,name=Size,proto3" json:"Size,omitempty"` + Index *Index `protobuf:"bytes,3,opt,name=Index,proto3" json:"Index,omitempty"` +} + +func (x *IndexData) Reset() { + *x = IndexData{} + if protoimpl.UnsafeEnabled { + mi := &file_meta_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (x *ManifestData) GetAnnotations() map[string]string { +func (x *IndexData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IndexData) ProtoMessage() {} + +func (x *IndexData) ProtoReflect() protoreflect.Message { + mi := &file_meta_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IndexData.ProtoReflect.Descriptor instead. +func (*IndexData) Descriptor() ([]byte, []int) { + return file_meta_proto_rawDescGZIP(), []int{3} +} + +func (x *IndexData) GetDigest() string { if x != nil { - return x.Annotations + return x.Digest } - return nil + return "" } -func (x *ManifestData) GetSize() int64 { +func (x *IndexData) GetSize() int64 { if x != nil { return x.Size } return 0 } -func (x *ManifestData) GetConfig() *ConfigData { +func (x *IndexData) GetIndex() *Index { if x != nil { - return x.Config + return x.Index } return nil } @@ -320,7 +303,7 @@ type RepoLastUpdatedImage struct { func (x *RepoLastUpdatedImage) Reset() { *x = RepoLastUpdatedImage{} if protoimpl.UnsafeEnabled { - mi := &file_meta_proto_msgTypes[3] + mi := &file_meta_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -333,7 +316,7 @@ func (x *RepoLastUpdatedImage) String() string { func (*RepoLastUpdatedImage) ProtoMessage() {} func (x *RepoLastUpdatedImage) ProtoReflect() protoreflect.Message { - mi := &file_meta_proto_msgTypes[3] + mi := &file_meta_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -346,7 +329,7 @@ func (x *RepoLastUpdatedImage) ProtoReflect() protoreflect.Message { // Deprecated: Use RepoLastUpdatedImage.ProtoReflect.Descriptor instead. func (*RepoLastUpdatedImage) Descriptor() ([]byte, []int) { - return file_meta_proto_rawDescGZIP(), []int{3} + return file_meta_proto_rawDescGZIP(), []int{4} } func (x *RepoLastUpdatedImage) GetLastUpdated() *timestamppb.Timestamp { @@ -400,7 +383,7 @@ type RepoMeta struct { func (x *RepoMeta) Reset() { *x = RepoMeta{} if protoimpl.UnsafeEnabled { - mi := &file_meta_proto_msgTypes[4] + mi := &file_meta_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -413,7 +396,7 @@ func (x *RepoMeta) String() string { func (*RepoMeta) ProtoMessage() {} func (x *RepoMeta) ProtoReflect() protoreflect.Message { - mi := &file_meta_proto_msgTypes[4] + mi := &file_meta_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -426,7 +409,7 @@ func (x *RepoMeta) ProtoReflect() protoreflect.Message { // Deprecated: Use RepoMeta.ProtoReflect.Descriptor instead. func (*RepoMeta) Descriptor() ([]byte, []int) { - return file_meta_proto_rawDescGZIP(), []int{4} + return file_meta_proto_rawDescGZIP(), []int{5} } func (x *RepoMeta) GetName() string { @@ -532,7 +515,7 @@ type RepoBlobs struct { func (x *RepoBlobs) Reset() { *x = RepoBlobs{} if protoimpl.UnsafeEnabled { - mi := &file_meta_proto_msgTypes[5] + mi := &file_meta_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -545,7 +528,7 @@ func (x *RepoBlobs) String() string { func (*RepoBlobs) ProtoMessage() {} func (x *RepoBlobs) ProtoReflect() protoreflect.Message { - mi := &file_meta_proto_msgTypes[5] + mi := &file_meta_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -558,7 +541,7 @@ func (x *RepoBlobs) ProtoReflect() protoreflect.Message { // Deprecated: Use RepoBlobs.ProtoReflect.Descriptor instead. func (*RepoBlobs) Descriptor() ([]byte, []int) { - return file_meta_proto_rawDescGZIP(), []int{5} + return file_meta_proto_rawDescGZIP(), []int{6} } func (x *RepoBlobs) GetName() string { @@ -592,7 +575,7 @@ type BlobInfo struct { func (x *BlobInfo) Reset() { *x = BlobInfo{} if protoimpl.UnsafeEnabled { - mi := &file_meta_proto_msgTypes[6] + mi := &file_meta_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -605,7 +588,7 @@ func (x *BlobInfo) String() string { func (*BlobInfo) ProtoMessage() {} func (x *BlobInfo) ProtoReflect() protoreflect.Message { - mi := &file_meta_proto_msgTypes[6] + mi := &file_meta_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -618,7 +601,7 @@ func (x *BlobInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use BlobInfo.ProtoReflect.Descriptor instead. func (*BlobInfo) Descriptor() ([]byte, []int) { - return file_meta_proto_rawDescGZIP(), []int{6} + return file_meta_proto_rawDescGZIP(), []int{7} } func (x *BlobInfo) GetSize() int64 { @@ -667,7 +650,7 @@ type DescriptorStatistics struct { func (x *DescriptorStatistics) Reset() { *x = DescriptorStatistics{} if protoimpl.UnsafeEnabled { - mi := &file_meta_proto_msgTypes[7] + mi := &file_meta_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -680,7 +663,7 @@ func (x *DescriptorStatistics) String() string { func (*DescriptorStatistics) ProtoMessage() {} func (x *DescriptorStatistics) ProtoReflect() protoreflect.Message { - mi := &file_meta_proto_msgTypes[7] + mi := &file_meta_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -693,7 +676,7 @@ func (x *DescriptorStatistics) ProtoReflect() protoreflect.Message { // Deprecated: Use DescriptorStatistics.ProtoReflect.Descriptor instead. func (*DescriptorStatistics) Descriptor() ([]byte, []int) { - return file_meta_proto_rawDescGZIP(), []int{7} + return file_meta_proto_rawDescGZIP(), []int{8} } func (x *DescriptorStatistics) GetDownloadCount() int32 { @@ -714,7 +697,7 @@ type ReferrersInfo struct { func (x *ReferrersInfo) Reset() { *x = ReferrersInfo{} if protoimpl.UnsafeEnabled { - mi := &file_meta_proto_msgTypes[8] + mi := &file_meta_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -727,7 +710,7 @@ func (x *ReferrersInfo) String() string { func (*ReferrersInfo) ProtoMessage() {} func (x *ReferrersInfo) ProtoReflect() protoreflect.Message { - mi := &file_meta_proto_msgTypes[8] + mi := &file_meta_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -740,7 +723,7 @@ func (x *ReferrersInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ReferrersInfo.ProtoReflect.Descriptor instead. func (*ReferrersInfo) Descriptor() ([]byte, []int) { - return file_meta_proto_rawDescGZIP(), []int{8} + return file_meta_proto_rawDescGZIP(), []int{9} } func (x *ReferrersInfo) GetList() []*ReferrerInfo { @@ -766,7 +749,7 @@ type ReferrerInfo struct { func (x *ReferrerInfo) Reset() { *x = ReferrerInfo{} if protoimpl.UnsafeEnabled { - mi := &file_meta_proto_msgTypes[9] + mi := &file_meta_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -779,7 +762,7 @@ func (x *ReferrerInfo) String() string { func (*ReferrerInfo) ProtoMessage() {} func (x *ReferrerInfo) ProtoReflect() protoreflect.Message { - mi := &file_meta_proto_msgTypes[9] + mi := &file_meta_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -792,7 +775,7 @@ func (x *ReferrerInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ReferrerInfo.ProtoReflect.Descriptor instead. func (*ReferrerInfo) Descriptor() ([]byte, []int) { - return file_meta_proto_rawDescGZIP(), []int{9} + return file_meta_proto_rawDescGZIP(), []int{10} } func (x *ReferrerInfo) GetDigest() string { @@ -848,7 +831,7 @@ type ManifestSignatures struct { func (x *ManifestSignatures) Reset() { *x = ManifestSignatures{} if protoimpl.UnsafeEnabled { - mi := &file_meta_proto_msgTypes[10] + mi := &file_meta_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -861,7 +844,7 @@ func (x *ManifestSignatures) String() string { func (*ManifestSignatures) ProtoMessage() {} func (x *ManifestSignatures) ProtoReflect() protoreflect.Message { - mi := &file_meta_proto_msgTypes[10] + mi := &file_meta_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -874,7 +857,7 @@ func (x *ManifestSignatures) ProtoReflect() protoreflect.Message { // Deprecated: Use ManifestSignatures.ProtoReflect.Descriptor instead. func (*ManifestSignatures) Descriptor() ([]byte, []int) { - return file_meta_proto_rawDescGZIP(), []int{10} + return file_meta_proto_rawDescGZIP(), []int{11} } func (x *ManifestSignatures) GetMap() map[string]*SignaturesInfo { @@ -895,7 +878,7 @@ type SignaturesInfo struct { func (x *SignaturesInfo) Reset() { *x = SignaturesInfo{} if protoimpl.UnsafeEnabled { - mi := &file_meta_proto_msgTypes[11] + mi := &file_meta_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -908,7 +891,7 @@ func (x *SignaturesInfo) String() string { func (*SignaturesInfo) ProtoMessage() {} func (x *SignaturesInfo) ProtoReflect() protoreflect.Message { - mi := &file_meta_proto_msgTypes[11] + mi := &file_meta_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -921,7 +904,7 @@ func (x *SignaturesInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use SignaturesInfo.ProtoReflect.Descriptor instead. func (*SignaturesInfo) Descriptor() ([]byte, []int) { - return file_meta_proto_rawDescGZIP(), []int{11} + return file_meta_proto_rawDescGZIP(), []int{12} } func (x *SignaturesInfo) GetList() []*SignatureInfo { @@ -943,7 +926,7 @@ type SignatureInfo struct { func (x *SignatureInfo) Reset() { *x = SignatureInfo{} if protoimpl.UnsafeEnabled { - mi := &file_meta_proto_msgTypes[12] + mi := &file_meta_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -956,7 +939,7 @@ func (x *SignatureInfo) String() string { func (*SignatureInfo) ProtoMessage() {} func (x *SignatureInfo) ProtoReflect() protoreflect.Message { - mi := &file_meta_proto_msgTypes[12] + mi := &file_meta_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -969,7 +952,7 @@ func (x *SignatureInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use SignatureInfo.ProtoReflect.Descriptor instead. func (*SignatureInfo) Descriptor() ([]byte, []int) { - return file_meta_proto_rawDescGZIP(), []int{12} + return file_meta_proto_rawDescGZIP(), []int{13} } func (x *SignatureInfo) GetSignatureManifestDigest() string { @@ -1001,7 +984,7 @@ type LayersInfo struct { func (x *LayersInfo) Reset() { *x = LayersInfo{} if protoimpl.UnsafeEnabled { - mi := &file_meta_proto_msgTypes[13] + mi := &file_meta_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1014,7 +997,7 @@ func (x *LayersInfo) String() string { func (*LayersInfo) ProtoMessage() {} func (x *LayersInfo) ProtoReflect() protoreflect.Message { - mi := &file_meta_proto_msgTypes[13] + mi := &file_meta_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1027,7 +1010,7 @@ func (x *LayersInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use LayersInfo.ProtoReflect.Descriptor instead. func (*LayersInfo) Descriptor() ([]byte, []int) { - return file_meta_proto_rawDescGZIP(), []int{13} + return file_meta_proto_rawDescGZIP(), []int{14} } func (x *LayersInfo) GetLayerDigest() string { @@ -1075,214 +1058,183 @@ var file_meta_proto_rawDesc = []byte{ 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x44, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x22, 0xd4, 0x03, 0x0a, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, + 0x65, 0x73, 0x74, 0x22, 0xba, 0x01, 0x0a, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x09, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x52, 0x09, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, - 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x2e, 0x0a, 0x09, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, - 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x09, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73, - 0x12, 0x2d, 0x0a, 0x07, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, - 0x72, 0x48, 0x00, 0x52, 0x07, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x88, 0x01, 0x01, 0x12, - 0x40, 0x0a, 0x0b, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x04, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, - 0x04, 0x52, 0x65, 0x70, 0x6f, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x04, 0x52, - 0x65, 0x70, 0x6f, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x03, 0x54, 0x61, 0x67, 0x88, 0x01, 0x01, 0x1a, 0x3e, 0x0a, - 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0a, 0x0a, - 0x08, 0x5f, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x52, 0x65, - 0x70, 0x6f, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x54, 0x61, 0x67, 0x22, 0xe2, 0x03, 0x0a, 0x0c, 0x4d, - 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x09, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, - 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x52, 0x09, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x12, 0x21, 0x0a, 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, - 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0c, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, 0x06, - 0x4c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x06, 0x4c, 0x61, - 0x79, 0x65, 0x72, 0x73, 0x12, 0x2d, 0x0a, 0x07, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x6f, 0x72, 0x48, 0x02, 0x52, 0x07, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x88, 0x01, 0x01, 0x12, 0x43, 0x0a, 0x0b, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, - 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x41, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x06, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, - 0x70, 0x65, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, - 0xb1, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x41, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x0b, 0x4c, 0x61, 0x73, - 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x88, 0x01, 0x01, 0x12, 0x1c, 0x0a, 0x09, 0x4d, - 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x54, 0x61, 0x67, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x4c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x22, 0xf4, 0x06, 0x0a, 0x08, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x65, 0x74, 0x61, - 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x04, 0x54, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x65, 0x74, 0x61, - 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x54, 0x61, 0x67, 0x73, - 0x12, 0x3c, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x03, + 0x09, 0x52, 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x09, + 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x09, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x05, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x22, 0xb4, 0x01, 0x0a, 0x0c, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x2b, 0x0a, 0x09, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x65, 0x64, 0x52, 0x09, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x28, 0x0a, 0x08, 0x4d, 0x61, + 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x52, 0x08, 0x4d, 0x61, 0x6e, 0x69, + 0x66, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, + 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x58, 0x0a, 0x09, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x53, 0x69, 0x7a, 0x65, + 0x12, 0x1f, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x09, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x22, 0xb1, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x61, 0x73, 0x74, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x41, 0x0a, 0x0b, 0x4c, 0x61, + 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x0b, 0x4c, + 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x88, 0x01, 0x01, 0x12, 0x1c, 0x0a, + 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x44, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x54, 0x61, 0x67, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x4c, 0x61, 0x73, 0x74, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x22, 0xf4, 0x06, 0x0a, 0x08, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x65, + 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x04, 0x54, 0x61, 0x67, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x65, + 0x74, 0x61, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x54, 0x61, + 0x67, 0x73, 0x12, 0x3c, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, + 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, + 0x12, 0x3c, 0x0a, 0x0a, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x65, - 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x3c, - 0x0a, 0x0a, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x65, 0x74, 0x61, - 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x0a, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x09, - 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x52, 0x65, - 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x52, 0x65, - 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x53, 0x74, 0x61, - 0x72, 0x72, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x49, 0x73, 0x53, 0x74, - 0x61, 0x72, 0x72, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x49, 0x73, 0x42, 0x6f, 0x6f, 0x6b, 0x6d, - 0x61, 0x72, 0x6b, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x49, 0x73, 0x42, - 0x6f, 0x6f, 0x6b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x61, 0x6e, - 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x14, 0x0a, - 0x05, 0x53, 0x74, 0x61, 0x72, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, - 0x61, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x56, 0x65, 0x6e, 0x64, 0x6f, - 0x72, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x56, 0x65, 0x6e, 0x64, 0x6f, 0x72, - 0x73, 0x12, 0x2a, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x18, 0x0c, + 0x74, 0x61, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x0a, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x39, + 0x0a, 0x09, 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x65, 0x74, 0x61, 0x2e, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x53, + 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x49, 0x73, + 0x53, 0x74, 0x61, 0x72, 0x72, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x49, 0x73, 0x42, 0x6f, 0x6f, + 0x6b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x49, + 0x73, 0x42, 0x6f, 0x6f, 0x6b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x52, + 0x61, 0x6e, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x12, + 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x53, 0x74, 0x61, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x56, 0x65, 0x6e, + 0x64, 0x6f, 0x72, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x56, 0x65, 0x6e, 0x64, + 0x6f, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, + 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x09, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x12, + 0x49, 0x0a, 0x10, 0x4c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x70, 0x6f, 0x4c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x10, 0x4c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x1a, 0x4a, 0x0a, 0x09, 0x54, 0x61, + 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, + 0x67, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x57, 0x0a, 0x0f, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, + 0x74, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2e, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x76, 0x31, 0x2e, + 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, + 0x74, 0x69, 0x63, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x55, 0x0a, 0x0f, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4f, 0x0a, 0x0e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, + 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x4c, 0x61, 0x73, 0x74, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x97, 0x01, 0x0a, + 0x09, 0x52, 0x65, 0x70, 0x6f, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, + 0x0a, 0x05, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x2e, 0x42, 0x6c, 0x6f, + 0x62, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x1a, 0x46, + 0x0a, 0x0a, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x22, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, + 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd3, 0x01, 0x0a, 0x08, 0x42, 0x6c, 0x6f, 0x62, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x56, 0x65, 0x6e, 0x64, 0x6f, + 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x56, 0x65, 0x6e, 0x64, 0x6f, 0x72, + 0x73, 0x12, 0x2a, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x52, 0x09, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x12, 0x49, 0x0a, - 0x10, 0x4c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, - 0x6f, 0x4c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x48, 0x00, 0x52, 0x10, 0x4c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x1a, 0x4a, 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x67, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x57, 0x0a, 0x0f, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, - 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2e, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, - 0x63, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, - 0x0f, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4f, 0x0a, 0x0e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x4c, 0x61, 0x73, 0x74, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x97, 0x01, 0x0a, 0x09, 0x52, - 0x65, 0x70, 0x6f, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x05, - 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x1a, 0x46, 0x0a, 0x0a, - 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x22, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x31, - 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd3, 0x01, 0x0a, 0x08, 0x42, 0x6c, 0x6f, 0x62, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x04, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x56, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x56, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x73, 0x12, - 0x2a, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x52, 0x09, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x53, - 0x75, 0x62, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x53, - 0x75, 0x62, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, 0x41, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x0b, 0x4c, 0x61, 0x73, 0x74, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x4c, - 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x22, 0x3c, 0x0a, 0x14, 0x44, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, - 0x63, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, - 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x35, 0x0a, 0x0d, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x72, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x24, 0x0a, 0x04, 0x6c, 0x69, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x72, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, - 0x97, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x16, 0x0a, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, - 0x0a, 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, - 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, - 0x53, 0x69, 0x7a, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x93, 0x01, 0x0a, 0x12, 0x4d, 0x61, - 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, - 0x12, 0x31, 0x0a, 0x03, 0x6d, 0x61, 0x70, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x03, - 0x6d, 0x61, 0x70, 0x1a, 0x4a, 0x0a, 0x08, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x72, 0x6d, 0x52, 0x09, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x12, 0x1a, 0x0a, + 0x08, 0x53, 0x75, 0x62, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x08, 0x53, 0x75, 0x62, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, 0x41, 0x0a, 0x0b, 0x4c, 0x61, 0x73, + 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x0b, 0x4c, 0x61, + 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, + 0x5f, 0x4c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x22, 0x3c, 0x0a, 0x14, + 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, + 0x74, 0x69, 0x63, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x44, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x35, 0x0a, 0x0d, 0x52, 0x65, + 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x24, 0x0a, 0x04, 0x6c, + 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x6c, 0x69, 0x73, + 0x74, 0x22, 0x97, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, + 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, + 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x41, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x28, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x37, 0x0a, 0x0e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x25, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x11, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x79, 0x0a, 0x0d, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x38, 0x0a, 0x17, 0x53, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x44, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x44, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x0a, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, - 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x79, - 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x49, - 0x6e, 0x66, 0x6f, 0x22, 0xbe, 0x01, 0x0a, 0x0a, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x4c, 0x61, 0x79, 0x65, - 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, - 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x69, - 0x67, 0x6e, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, - 0x44, 0x61, 0x74, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x93, 0x01, 0x0a, 0x12, + 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x73, 0x12, 0x31, 0x0a, 0x03, 0x6d, 0x61, 0x70, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x03, 0x6d, 0x61, 0x70, 0x1a, 0x4a, 0x0a, 0x08, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x28, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x37, 0x0a, 0x0e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x25, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x79, 0x0a, 0x0d, 0x53, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x38, 0x0a, 0x17, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, + 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x53, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x44, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x0a, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x49, + 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x61, 0x79, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x4c, 0x61, 0x79, 0x65, 0x72, + 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xbe, 0x01, 0x0a, 0x0a, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x73, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4c, 0x61, 0x79, 0x65, 0x72, + 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x4c, 0x61, + 0x79, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x16, + 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x04, 0x44, 0x61, 0x74, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1297,74 +1249,72 @@ func file_meta_proto_rawDescGZIP() []byte { return file_meta_proto_rawDescData } -var file_meta_proto_msgTypes = make([]protoimpl.MessageInfo, 23) +var file_meta_proto_msgTypes = make([]protoimpl.MessageInfo, 22) var file_meta_proto_goTypes = []interface{}{ (*TagDescriptor)(nil), // 0: v1.TagDescriptor (*ImageData)(nil), // 1: v1.ImageData (*ManifestData)(nil), // 2: v1.ManifestData - (*RepoLastUpdatedImage)(nil), // 3: v1.RepoLastUpdatedImage - (*RepoMeta)(nil), // 4: v1.RepoMeta - (*RepoBlobs)(nil), // 5: v1.RepoBlobs - (*BlobInfo)(nil), // 6: v1.BlobInfo - (*DescriptorStatistics)(nil), // 7: v1.DescriptorStatistics - (*ReferrersInfo)(nil), // 8: v1.ReferrersInfo - (*ReferrerInfo)(nil), // 9: v1.ReferrerInfo - (*ManifestSignatures)(nil), // 10: v1.ManifestSignatures - (*SignaturesInfo)(nil), // 11: v1.SignaturesInfo - (*SignatureInfo)(nil), // 12: v1.SignatureInfo - (*LayersInfo)(nil), // 13: v1.LayersInfo - nil, // 14: v1.ImageData.AnnotationsEntry - nil, // 15: v1.ManifestData.AnnotationsEntry - nil, // 16: v1.RepoMeta.TagsEntry - nil, // 17: v1.RepoMeta.StatisticsEntry - nil, // 18: v1.RepoMeta.SignaturesEntry - nil, // 19: v1.RepoMeta.ReferrersEntry - nil, // 20: v1.RepoBlobs.BlobsEntry - nil, // 21: v1.ReferrerInfo.AnnotationsEntry - nil, // 22: v1.ManifestSignatures.MapEntry - (*Versioned)(nil), // 23: v1.Versioned - (*Descriptor)(nil), // 24: v1.Descriptor - (*ConfigData)(nil), // 25: v1.ConfigData + (*IndexData)(nil), // 3: v1.IndexData + (*RepoLastUpdatedImage)(nil), // 4: v1.RepoLastUpdatedImage + (*RepoMeta)(nil), // 5: v1.RepoMeta + (*RepoBlobs)(nil), // 6: v1.RepoBlobs + (*BlobInfo)(nil), // 7: v1.BlobInfo + (*DescriptorStatistics)(nil), // 8: v1.DescriptorStatistics + (*ReferrersInfo)(nil), // 9: v1.ReferrersInfo + (*ReferrerInfo)(nil), // 10: v1.ReferrerInfo + (*ManifestSignatures)(nil), // 11: v1.ManifestSignatures + (*SignaturesInfo)(nil), // 12: v1.SignaturesInfo + (*SignatureInfo)(nil), // 13: v1.SignatureInfo + (*LayersInfo)(nil), // 14: v1.LayersInfo + nil, // 15: v1.RepoMeta.TagsEntry + nil, // 16: v1.RepoMeta.StatisticsEntry + nil, // 17: v1.RepoMeta.SignaturesEntry + nil, // 18: v1.RepoMeta.ReferrersEntry + nil, // 19: v1.RepoBlobs.BlobsEntry + nil, // 20: v1.ReferrerInfo.AnnotationsEntry + nil, // 21: v1.ManifestSignatures.MapEntry + (*Versioned)(nil), // 22: v1.Versioned + (*Manifest)(nil), // 23: v1.Manifest + (*Image)(nil), // 24: v1.Image + (*Index)(nil), // 25: v1.Index (*timestamppb.Timestamp)(nil), // 26: google.protobuf.Timestamp (*Platform)(nil), // 27: v1.Platform } var file_meta_proto_depIdxs = []int32{ - 23, // 0: v1.ImageData.Versioned:type_name -> v1.Versioned + 22, // 0: v1.ImageData.Versioned:type_name -> v1.Versioned 2, // 1: v1.ImageData.Manifests:type_name -> v1.ManifestData - 24, // 2: v1.ImageData.Subject:type_name -> v1.Descriptor - 14, // 3: v1.ImageData.Annotations:type_name -> v1.ImageData.AnnotationsEntry - 23, // 4: v1.ManifestData.Versioned:type_name -> v1.Versioned - 24, // 5: v1.ManifestData.Layers:type_name -> v1.Descriptor - 24, // 6: v1.ManifestData.Subject:type_name -> v1.Descriptor - 15, // 7: v1.ManifestData.Annotations:type_name -> v1.ManifestData.AnnotationsEntry - 25, // 8: v1.ManifestData.Config:type_name -> v1.ConfigData - 26, // 9: v1.RepoLastUpdatedImage.LastUpdated:type_name -> google.protobuf.Timestamp - 16, // 10: v1.RepoMeta.Tags:type_name -> v1.RepoMeta.TagsEntry - 17, // 11: v1.RepoMeta.Statistics:type_name -> v1.RepoMeta.StatisticsEntry - 18, // 12: v1.RepoMeta.Signatures:type_name -> v1.RepoMeta.SignaturesEntry - 19, // 13: v1.RepoMeta.Referrers:type_name -> v1.RepoMeta.ReferrersEntry - 27, // 14: v1.RepoMeta.Platforms:type_name -> v1.Platform - 3, // 15: v1.RepoMeta.LastUpdatedImage:type_name -> v1.RepoLastUpdatedImage - 20, // 16: v1.RepoBlobs.Blobs:type_name -> v1.RepoBlobs.BlobsEntry - 27, // 17: v1.BlobInfo.Platforms:type_name -> v1.Platform - 26, // 18: v1.BlobInfo.LastUpdated:type_name -> google.protobuf.Timestamp - 9, // 19: v1.ReferrersInfo.list:type_name -> v1.ReferrerInfo - 21, // 20: v1.ReferrerInfo.Annotations:type_name -> v1.ReferrerInfo.AnnotationsEntry - 22, // 21: v1.ManifestSignatures.map:type_name -> v1.ManifestSignatures.MapEntry - 12, // 22: v1.SignaturesInfo.list:type_name -> v1.SignatureInfo - 13, // 23: v1.SignatureInfo.LayersInfo:type_name -> v1.LayersInfo - 26, // 24: v1.LayersInfo.Date:type_name -> google.protobuf.Timestamp - 0, // 25: v1.RepoMeta.TagsEntry.value:type_name -> v1.TagDescriptor - 7, // 26: v1.RepoMeta.StatisticsEntry.value:type_name -> v1.DescriptorStatistics - 10, // 27: v1.RepoMeta.SignaturesEntry.value:type_name -> v1.ManifestSignatures - 8, // 28: v1.RepoMeta.ReferrersEntry.value:type_name -> v1.ReferrersInfo - 6, // 29: v1.RepoBlobs.BlobsEntry.value:type_name -> v1.BlobInfo - 11, // 30: v1.ManifestSignatures.MapEntry.value:type_name -> v1.SignaturesInfo - 31, // [31:31] is the sub-list for method output_type - 31, // [31:31] is the sub-list for method input_type - 31, // [31:31] is the sub-list for extension type_name - 31, // [31:31] is the sub-list for extension extendee - 0, // [0:31] is the sub-list for field type_name + 3, // 2: v1.ImageData.Index:type_name -> v1.IndexData + 22, // 3: v1.ManifestData.Versioned:type_name -> v1.Versioned + 23, // 4: v1.ManifestData.Manifest:type_name -> v1.Manifest + 24, // 5: v1.ManifestData.Config:type_name -> v1.Image + 25, // 6: v1.IndexData.Index:type_name -> v1.Index + 26, // 7: v1.RepoLastUpdatedImage.LastUpdated:type_name -> google.protobuf.Timestamp + 15, // 8: v1.RepoMeta.Tags:type_name -> v1.RepoMeta.TagsEntry + 16, // 9: v1.RepoMeta.Statistics:type_name -> v1.RepoMeta.StatisticsEntry + 17, // 10: v1.RepoMeta.Signatures:type_name -> v1.RepoMeta.SignaturesEntry + 18, // 11: v1.RepoMeta.Referrers:type_name -> v1.RepoMeta.ReferrersEntry + 27, // 12: v1.RepoMeta.Platforms:type_name -> v1.Platform + 4, // 13: v1.RepoMeta.LastUpdatedImage:type_name -> v1.RepoLastUpdatedImage + 19, // 14: v1.RepoBlobs.Blobs:type_name -> v1.RepoBlobs.BlobsEntry + 27, // 15: v1.BlobInfo.Platforms:type_name -> v1.Platform + 26, // 16: v1.BlobInfo.LastUpdated:type_name -> google.protobuf.Timestamp + 10, // 17: v1.ReferrersInfo.list:type_name -> v1.ReferrerInfo + 20, // 18: v1.ReferrerInfo.Annotations:type_name -> v1.ReferrerInfo.AnnotationsEntry + 21, // 19: v1.ManifestSignatures.map:type_name -> v1.ManifestSignatures.MapEntry + 13, // 20: v1.SignaturesInfo.list:type_name -> v1.SignatureInfo + 14, // 21: v1.SignatureInfo.LayersInfo:type_name -> v1.LayersInfo + 26, // 22: v1.LayersInfo.Date:type_name -> google.protobuf.Timestamp + 0, // 23: v1.RepoMeta.TagsEntry.value:type_name -> v1.TagDescriptor + 8, // 24: v1.RepoMeta.StatisticsEntry.value:type_name -> v1.DescriptorStatistics + 11, // 25: v1.RepoMeta.SignaturesEntry.value:type_name -> v1.ManifestSignatures + 9, // 26: v1.RepoMeta.ReferrersEntry.value:type_name -> v1.ReferrersInfo + 7, // 27: v1.RepoBlobs.BlobsEntry.value:type_name -> v1.BlobInfo + 12, // 28: v1.ManifestSignatures.MapEntry.value:type_name -> v1.SignaturesInfo + 29, // [29:29] is the sub-list for method output_type + 29, // [29:29] is the sub-list for method input_type + 29, // [29:29] is the sub-list for extension type_name + 29, // [29:29] is the sub-list for extension extendee + 0, // [0:29] is the sub-list for field type_name } func init() { file_meta_proto_init() } @@ -1411,7 +1361,7 @@ func file_meta_proto_init() { } } file_meta_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RepoLastUpdatedImage); i { + switch v := v.(*IndexData); i { case 0: return &v.state case 1: @@ -1423,7 +1373,7 @@ func file_meta_proto_init() { } } file_meta_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RepoMeta); i { + switch v := v.(*RepoLastUpdatedImage); i { case 0: return &v.state case 1: @@ -1435,7 +1385,7 @@ func file_meta_proto_init() { } } file_meta_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RepoBlobs); i { + switch v := v.(*RepoMeta); i { case 0: return &v.state case 1: @@ -1447,7 +1397,7 @@ func file_meta_proto_init() { } } file_meta_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlobInfo); i { + switch v := v.(*RepoBlobs); i { case 0: return &v.state case 1: @@ -1459,7 +1409,7 @@ func file_meta_proto_init() { } } file_meta_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DescriptorStatistics); i { + switch v := v.(*BlobInfo); i { case 0: return &v.state case 1: @@ -1471,7 +1421,7 @@ func file_meta_proto_init() { } } file_meta_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReferrersInfo); i { + switch v := v.(*DescriptorStatistics); i { case 0: return &v.state case 1: @@ -1483,7 +1433,7 @@ func file_meta_proto_init() { } } file_meta_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReferrerInfo); i { + switch v := v.(*ReferrersInfo); i { case 0: return &v.state case 1: @@ -1495,7 +1445,7 @@ func file_meta_proto_init() { } } file_meta_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ManifestSignatures); i { + switch v := v.(*ReferrerInfo); i { case 0: return &v.state case 1: @@ -1507,7 +1457,7 @@ func file_meta_proto_init() { } } file_meta_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignaturesInfo); i { + switch v := v.(*ManifestSignatures); i { case 0: return &v.state case 1: @@ -1519,7 +1469,7 @@ func file_meta_proto_init() { } } file_meta_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignatureInfo); i { + switch v := v.(*SignaturesInfo); i { case 0: return &v.state case 1: @@ -1531,6 +1481,18 @@ func file_meta_proto_init() { } } file_meta_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SignatureInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_meta_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LayersInfo); i { case 0: return &v.state @@ -1544,17 +1506,16 @@ func file_meta_proto_init() { } } file_meta_proto_msgTypes[1].OneofWrappers = []interface{}{} - file_meta_proto_msgTypes[2].OneofWrappers = []interface{}{} - file_meta_proto_msgTypes[3].OneofWrappers = []interface{}{} file_meta_proto_msgTypes[4].OneofWrappers = []interface{}{} - file_meta_proto_msgTypes[6].OneofWrappers = []interface{}{} + file_meta_proto_msgTypes[5].OneofWrappers = []interface{}{} + file_meta_proto_msgTypes[7].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_meta_proto_rawDesc, NumEnums: 0, - NumMessages: 23, + NumMessages: 22, NumExtensions: 0, NumServices: 0, }, diff --git a/pkg/meta/proto_go/oci.pb.go b/pkg/meta/proto_go/oci.pb.go index d305d5f8a1..f021e83e83 100644 --- a/pkg/meta/proto_go/oci.pb.go +++ b/pkg/meta/proto_go/oci.pb.go @@ -21,6 +21,93 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +type Image struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Created *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=Created,proto3,oneof" json:"Created,omitempty"` + Author *string `protobuf:"bytes,2,opt,name=Author,proto3,oneof" json:"Author,omitempty"` + Platform *Platform `protobuf:"bytes,3,opt,name=Platform,proto3" json:"Platform,omitempty"` + Config *ImageConfig `protobuf:"bytes,4,opt,name=Config,proto3,oneof" json:"Config,omitempty"` + RootFS *RootFS `protobuf:"bytes,5,opt,name=RootFS,proto3,oneof" json:"RootFS,omitempty"` + History []*History `protobuf:"bytes,6,rep,name=History,proto3" json:"History,omitempty"` +} + +func (x *Image) Reset() { + *x = Image{} + if protoimpl.UnsafeEnabled { + mi := &file_oci_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Image) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Image) ProtoMessage() {} + +func (x *Image) ProtoReflect() protoreflect.Message { + mi := &file_oci_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Image.ProtoReflect.Descriptor instead. +func (*Image) Descriptor() ([]byte, []int) { + return file_oci_proto_rawDescGZIP(), []int{0} +} + +func (x *Image) GetCreated() *timestamppb.Timestamp { + if x != nil { + return x.Created + } + return nil +} + +func (x *Image) GetAuthor() string { + if x != nil && x.Author != nil { + return *x.Author + } + return "" +} + +func (x *Image) GetPlatform() *Platform { + if x != nil { + return x.Platform + } + return nil +} + +func (x *Image) GetConfig() *ImageConfig { + if x != nil { + return x.Config + } + return nil +} + +func (x *Image) GetRootFS() *RootFS { + if x != nil { + return x.RootFS + } + return nil +} + +func (x *Image) GetHistory() []*History { + if x != nil { + return x.History + } + return nil +} + type ImageConfig struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -41,7 +128,7 @@ type ImageConfig struct { func (x *ImageConfig) Reset() { *x = ImageConfig{} if protoimpl.UnsafeEnabled { - mi := &file_oci_proto_msgTypes[0] + mi := &file_oci_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -54,7 +141,7 @@ func (x *ImageConfig) String() string { func (*ImageConfig) ProtoMessage() {} func (x *ImageConfig) ProtoReflect() protoreflect.Message { - mi := &file_oci_proto_msgTypes[0] + mi := &file_oci_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -67,7 +154,7 @@ func (x *ImageConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ImageConfig.ProtoReflect.Descriptor instead. func (*ImageConfig) Descriptor() ([]byte, []int) { - return file_oci_proto_rawDescGZIP(), []int{0} + return file_oci_proto_rawDescGZIP(), []int{1} } func (x *ImageConfig) GetExposedPorts() map[string]*EmptyMessage { @@ -152,7 +239,7 @@ type RootFS struct { func (x *RootFS) Reset() { *x = RootFS{} if protoimpl.UnsafeEnabled { - mi := &file_oci_proto_msgTypes[1] + mi := &file_oci_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -165,7 +252,7 @@ func (x *RootFS) String() string { func (*RootFS) ProtoMessage() {} func (x *RootFS) ProtoReflect() protoreflect.Message { - mi := &file_oci_proto_msgTypes[1] + mi := &file_oci_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -178,7 +265,7 @@ func (x *RootFS) ProtoReflect() protoreflect.Message { // Deprecated: Use RootFS.ProtoReflect.Descriptor instead. func (*RootFS) Descriptor() ([]byte, []int) { - return file_oci_proto_rawDescGZIP(), []int{1} + return file_oci_proto_rawDescGZIP(), []int{2} } func (x *RootFS) GetType() string { @@ -210,7 +297,7 @@ type History struct { func (x *History) Reset() { *x = History{} if protoimpl.UnsafeEnabled { - mi := &file_oci_proto_msgTypes[2] + mi := &file_oci_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -223,7 +310,7 @@ func (x *History) String() string { func (*History) ProtoMessage() {} func (x *History) ProtoReflect() protoreflect.Message { - mi := &file_oci_proto_msgTypes[2] + mi := &file_oci_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -236,7 +323,7 @@ func (x *History) ProtoReflect() protoreflect.Message { // Deprecated: Use History.ProtoReflect.Descriptor instead. func (*History) Descriptor() ([]byte, []int) { - return file_oci_proto_rawDescGZIP(), []int{2} + return file_oci_proto_rawDescGZIP(), []int{3} } func (x *History) GetCreated() *timestamppb.Timestamp { @@ -293,7 +380,7 @@ type ConfigData struct { func (x *ConfigData) Reset() { *x = ConfigData{} if protoimpl.UnsafeEnabled { - mi := &file_oci_proto_msgTypes[3] + mi := &file_oci_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -306,7 +393,7 @@ func (x *ConfigData) String() string { func (*ConfigData) ProtoMessage() {} func (x *ConfigData) ProtoReflect() protoreflect.Message { - mi := &file_oci_proto_msgTypes[3] + mi := &file_oci_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -319,7 +406,7 @@ func (x *ConfigData) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigData.ProtoReflect.Descriptor instead. func (*ConfigData) Descriptor() ([]byte, []int) { - return file_oci_proto_rawDescGZIP(), []int{3} + return file_oci_proto_rawDescGZIP(), []int{4} } func (x *ConfigData) GetCreated() *timestamppb.Timestamp { @@ -394,7 +481,7 @@ type EmptyMessage struct { func (x *EmptyMessage) Reset() { *x = EmptyMessage{} if protoimpl.UnsafeEnabled { - mi := &file_oci_proto_msgTypes[4] + mi := &file_oci_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -407,7 +494,7 @@ func (x *EmptyMessage) String() string { func (*EmptyMessage) ProtoMessage() {} func (x *EmptyMessage) ProtoReflect() protoreflect.Message { - mi := &file_oci_proto_msgTypes[4] + mi := &file_oci_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -420,7 +507,7 @@ func (x *EmptyMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use EmptyMessage.ProtoReflect.Descriptor instead. func (*EmptyMessage) Descriptor() ([]byte, []int) { - return file_oci_proto_rawDescGZIP(), []int{4} + return file_oci_proto_rawDescGZIP(), []int{5} } type Descriptor struct { @@ -441,7 +528,7 @@ type Descriptor struct { func (x *Descriptor) Reset() { *x = Descriptor{} if protoimpl.UnsafeEnabled { - mi := &file_oci_proto_msgTypes[5] + mi := &file_oci_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -454,7 +541,7 @@ func (x *Descriptor) String() string { func (*Descriptor) ProtoMessage() {} func (x *Descriptor) ProtoReflect() protoreflect.Message { - mi := &file_oci_proto_msgTypes[5] + mi := &file_oci_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -467,7 +554,7 @@ func (x *Descriptor) ProtoReflect() protoreflect.Message { // Deprecated: Use Descriptor.ProtoReflect.Descriptor instead. func (*Descriptor) Descriptor() ([]byte, []int) { - return file_oci_proto_rawDescGZIP(), []int{5} + return file_oci_proto_rawDescGZIP(), []int{6} } func (x *Descriptor) GetMediaType() string { @@ -531,14 +618,17 @@ type Platform struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - OS string `protobuf:"bytes,1,opt,name=OS,proto3" json:"OS,omitempty"` - Arch string `protobuf:"bytes,2,opt,name=Arch,proto3" json:"Arch,omitempty"` + OS string `protobuf:"bytes,1,opt,name=OS,proto3" json:"OS,omitempty"` + Arch string `protobuf:"bytes,2,opt,name=Arch,proto3" json:"Arch,omitempty"` + OSVersion *string `protobuf:"bytes,3,opt,name=OSVersion,proto3,oneof" json:"OSVersion,omitempty"` + OSFeatures []string `protobuf:"bytes,4,rep,name=OSFeatures,proto3" json:"OSFeatures,omitempty"` + Variant *string `protobuf:"bytes,5,opt,name=Variant,proto3,oneof" json:"Variant,omitempty"` } func (x *Platform) Reset() { *x = Platform{} if protoimpl.UnsafeEnabled { - mi := &file_oci_proto_msgTypes[6] + mi := &file_oci_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -551,7 +641,7 @@ func (x *Platform) String() string { func (*Platform) ProtoMessage() {} func (x *Platform) ProtoReflect() protoreflect.Message { - mi := &file_oci_proto_msgTypes[6] + mi := &file_oci_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -564,7 +654,7 @@ func (x *Platform) ProtoReflect() protoreflect.Message { // Deprecated: Use Platform.ProtoReflect.Descriptor instead. func (*Platform) Descriptor() ([]byte, []int) { - return file_oci_proto_rawDescGZIP(), []int{6} + return file_oci_proto_rawDescGZIP(), []int{7} } func (x *Platform) GetOS() string { @@ -581,6 +671,209 @@ func (x *Platform) GetArch() string { return "" } +func (x *Platform) GetOSVersion() string { + if x != nil && x.OSVersion != nil { + return *x.OSVersion + } + return "" +} + +func (x *Platform) GetOSFeatures() []string { + if x != nil { + return x.OSFeatures + } + return nil +} + +func (x *Platform) GetVariant() string { + if x != nil && x.Variant != nil { + return *x.Variant + } + return "" +} + +type Index struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Versioned *Versioned `protobuf:"bytes,1,opt,name=versioned,proto3" json:"versioned,omitempty"` + MediaType *string `protobuf:"bytes,2,opt,name=MediaType,proto3,oneof" json:"MediaType,omitempty"` + ArtifactType *string `protobuf:"bytes,3,opt,name=ArtifactType,proto3,oneof" json:"ArtifactType,omitempty"` + Manifests []*Descriptor `protobuf:"bytes,4,rep,name=Manifests,proto3" json:"Manifests,omitempty"` + Subject *Descriptor `protobuf:"bytes,5,opt,name=Subject,proto3,oneof" json:"Subject,omitempty"` + Annotations map[string]string `protobuf:"bytes,6,rep,name=Annotations,proto3" json:"Annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *Index) Reset() { + *x = Index{} + if protoimpl.UnsafeEnabled { + mi := &file_oci_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Index) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Index) ProtoMessage() {} + +func (x *Index) ProtoReflect() protoreflect.Message { + mi := &file_oci_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Index.ProtoReflect.Descriptor instead. +func (*Index) Descriptor() ([]byte, []int) { + return file_oci_proto_rawDescGZIP(), []int{8} +} + +func (x *Index) GetVersioned() *Versioned { + if x != nil { + return x.Versioned + } + return nil +} + +func (x *Index) GetMediaType() string { + if x != nil && x.MediaType != nil { + return *x.MediaType + } + return "" +} + +func (x *Index) GetArtifactType() string { + if x != nil && x.ArtifactType != nil { + return *x.ArtifactType + } + return "" +} + +func (x *Index) GetManifests() []*Descriptor { + if x != nil { + return x.Manifests + } + return nil +} + +func (x *Index) GetSubject() *Descriptor { + if x != nil { + return x.Subject + } + return nil +} + +func (x *Index) GetAnnotations() map[string]string { + if x != nil { + return x.Annotations + } + return nil +} + +type Manifest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Versioned *Versioned `protobuf:"bytes,1,opt,name=Versioned,proto3" json:"Versioned,omitempty"` + MediaType *string `protobuf:"bytes,2,opt,name=MediaType,proto3,oneof" json:"MediaType,omitempty"` + ArtifactType *string `protobuf:"bytes,3,opt,name=ArtifactType,proto3,oneof" json:"ArtifactType,omitempty"` + Config *Descriptor `protobuf:"bytes,4,opt,name=Config,proto3" json:"Config,omitempty"` + Layers []*Descriptor `protobuf:"bytes,5,rep,name=Layers,proto3" json:"Layers,omitempty"` + Subject *Descriptor `protobuf:"bytes,6,opt,name=Subject,proto3,oneof" json:"Subject,omitempty"` + Annotations map[string]string `protobuf:"bytes,7,rep,name=Annotations,proto3" json:"Annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *Manifest) Reset() { + *x = Manifest{} + if protoimpl.UnsafeEnabled { + mi := &file_oci_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Manifest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Manifest) ProtoMessage() {} + +func (x *Manifest) ProtoReflect() protoreflect.Message { + mi := &file_oci_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Manifest.ProtoReflect.Descriptor instead. +func (*Manifest) Descriptor() ([]byte, []int) { + return file_oci_proto_rawDescGZIP(), []int{9} +} + +func (x *Manifest) GetVersioned() *Versioned { + if x != nil { + return x.Versioned + } + return nil +} + +func (x *Manifest) GetMediaType() string { + if x != nil && x.MediaType != nil { + return *x.MediaType + } + return "" +} + +func (x *Manifest) GetArtifactType() string { + if x != nil && x.ArtifactType != nil { + return *x.ArtifactType + } + return "" +} + +func (x *Manifest) GetConfig() *Descriptor { + if x != nil { + return x.Config + } + return nil +} + +func (x *Manifest) GetLayers() []*Descriptor { + if x != nil { + return x.Layers + } + return nil +} + +func (x *Manifest) GetSubject() *Descriptor { + if x != nil { + return x.Subject + } + return nil +} + +func (x *Manifest) GetAnnotations() map[string]string { + if x != nil { + return x.Annotations + } + return nil +} + type Versioned struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -592,7 +885,7 @@ type Versioned struct { func (x *Versioned) Reset() { *x = Versioned{} if protoimpl.UnsafeEnabled { - mi := &file_oci_proto_msgTypes[7] + mi := &file_oci_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -605,7 +898,7 @@ func (x *Versioned) String() string { func (*Versioned) ProtoMessage() {} func (x *Versioned) ProtoReflect() protoreflect.Message { - mi := &file_oci_proto_msgTypes[7] + mi := &file_oci_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -618,7 +911,7 @@ func (x *Versioned) ProtoReflect() protoreflect.Message { // Deprecated: Use Versioned.ProtoReflect.Descriptor instead. func (*Versioned) Descriptor() ([]byte, []int) { - return file_oci_proto_rawDescGZIP(), []int{7} + return file_oci_proto_rawDescGZIP(), []int{10} } func (x *Versioned) GetSchemaVersion() int32 { @@ -633,122 +926,201 @@ var File_oci_proto protoreflect.FileDescriptor var file_oci_proto_rawDesc = []byte{ 0x0a, 0x09, 0x6f, 0x63, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x76, 0x31, 0x1a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0xff, 0x04, 0x0a, 0x0b, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x45, 0x0a, 0x0c, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, - 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x45, 0x78, 0x70, 0x6f, 0x73, - 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x07, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, - 0x33, 0x0a, 0x06, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, 0x76, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x45, 0x6e, 0x76, 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6d, - 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x43, 0x6d, 0x64, 0x12, 0x23, 0x0a, 0x0a, - 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x88, 0x01, - 0x01, 0x12, 0x23, 0x0a, 0x0a, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0a, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, - 0x6e, 0x61, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x0b, 0x41, 0x72, 0x67, 0x73, 0x45, 0x73, - 0x63, 0x61, 0x70, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x41, 0x72, 0x67, - 0x73, 0x45, 0x73, 0x63, 0x61, 0x70, 0x65, 0x64, 0x1a, 0x51, 0x0a, 0x11, 0x45, 0x78, 0x70, 0x6f, - 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4c, 0x0a, 0x0c, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, - 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, - 0x44, 0x69, 0x72, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x6c, 0x22, 0x36, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x74, 0x46, 0x53, 0x12, 0x12, 0x0a, 0x04, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, 0x66, 0x66, 0x49, 0x44, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x07, 0x44, 0x69, 0x66, 0x66, 0x49, 0x44, 0x73, 0x22, 0x88, 0x02, 0x0a, 0x07, 0x48, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x39, 0x0a, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x88, 0x01, - 0x01, 0x12, 0x21, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, - 0x79, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x06, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x88, 0x01, - 0x01, 0x12, 0x1d, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x03, 0x52, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, - 0x12, 0x23, 0x0a, 0x0a, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x48, 0x04, 0x52, 0x0a, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4c, 0x61, 0x79, - 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x42, - 0x09, 0x0a, 0x07, 0x5f, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x43, - 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x4c, 0x61, 0x79, 0x65, 0x72, 0x22, 0x83, 0x03, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x48, 0x00, 0x52, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x88, 0x01, 0x01, 0x12, - 0x1b, 0x0a, 0x06, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x01, 0x52, 0x06, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x2c, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x02, 0x52, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x74, 0x46, 0x53, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6f, 0x74, 0x46, 0x53, - 0x48, 0x03, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x74, 0x46, 0x53, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, - 0x07, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, - 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x07, 0x48, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, - 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, - 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x0a, - 0x0a, 0x08, 0x5f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x46, 0x53, 0x22, 0x0e, 0x0a, 0x0c, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xf7, 0x02, 0x0a, 0x0a, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x65, - 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4d, - 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, - 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x55, 0x52, 0x4c, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x04, 0x55, 0x52, 0x4c, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2d, 0x0a, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x48, 0x00, 0x52, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0c, 0x41, - 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x01, 0x52, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x88, 0x01, 0x01, 0x12, 0x41, 0x0a, 0x0b, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x22, 0xb4, 0x02, 0x0a, 0x05, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x39, 0x0a, 0x07, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x06, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x88, + 0x01, 0x01, 0x12, 0x28, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x2c, 0x0a, 0x06, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x02, 0x52, + 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x06, 0x52, 0x6f, + 0x6f, 0x74, 0x46, 0x53, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x6f, 0x6f, 0x74, 0x46, 0x53, 0x48, 0x03, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x74, 0x46, 0x53, + 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x07, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x52, 0x07, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x09, 0x0a, 0x07, + 0x5f, 0x52, 0x6f, 0x6f, 0x74, 0x46, 0x53, 0x22, 0xff, 0x04, 0x0a, 0x0b, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x45, 0x0a, 0x0c, 0x45, 0x78, 0x70, 0x6f, 0x73, + 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, + 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0c, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x36, + 0x0a, 0x07, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x06, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x06, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x55, + 0x73, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, + 0x10, 0x0a, 0x03, 0x45, 0x6e, 0x76, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x45, 0x6e, + 0x76, 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6d, 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, + 0x43, 0x6d, 0x64, 0x12, 0x23, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, + 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x69, + 0x6e, 0x67, 0x44, 0x69, 0x72, 0x88, 0x01, 0x01, 0x12, 0x23, 0x0a, 0x0a, 0x53, 0x74, 0x6f, 0x70, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0a, + 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, + 0x0b, 0x41, 0x72, 0x67, 0x73, 0x45, 0x73, 0x63, 0x61, 0x70, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0b, 0x41, 0x72, 0x67, 0x73, 0x45, 0x73, 0x63, 0x61, 0x70, 0x65, 0x64, 0x1a, + 0x51, 0x0a, 0x11, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x4c, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, + 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x53, + 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x22, 0x36, 0x0a, 0x06, 0x52, 0x6f, 0x6f, + 0x74, 0x46, 0x53, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, 0x66, 0x66, 0x49, + 0x44, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x44, 0x69, 0x66, 0x66, 0x49, 0x44, + 0x73, 0x22, 0x88, 0x02, 0x0a, 0x07, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x39, 0x0a, + 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x07, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x42, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x09, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x41, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x06, 0x41, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, + 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, 0x07, 0x43, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x23, 0x0a, 0x0a, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x4c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x48, 0x04, 0x52, 0x0a, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, + 0x5f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x0d, 0x0a, + 0x0b, 0x5f, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x22, 0x83, 0x03, 0x0a, + 0x0a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x07, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x06, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x2c, 0x0a, + 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, + 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x02, + 0x52, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x06, 0x52, + 0x6f, 0x6f, 0x74, 0x46, 0x53, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x6f, 0x6f, 0x74, 0x46, 0x53, 0x48, 0x03, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x74, 0x46, + 0x53, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x07, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x52, 0x07, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x44, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x44, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x04, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x42, 0x09, 0x0a, 0x07, + 0x5f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x52, 0x6f, 0x6f, 0x74, + 0x46, 0x53, 0x22, 0x0e, 0x0a, 0x0c, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x22, 0xf7, 0x02, 0x0a, 0x0a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, + 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x55, + 0x52, 0x4c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x55, 0x52, 0x4c, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x2d, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x48, 0x00, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x88, + 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0c, 0x41, 0x72, 0x74, 0x69, + 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x41, 0x0a, 0x0b, 0x41, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, + 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0b, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3e, + 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0b, + 0x0a, 0x09, 0x5f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, + 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, 0xaa, 0x01, 0x0a, + 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x53, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x4f, 0x53, 0x12, 0x12, 0x0a, 0x04, 0x41, 0x72, 0x63, + 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x41, 0x72, 0x63, 0x68, 0x12, 0x21, 0x0a, + 0x09, 0x4f, 0x53, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x09, 0x4f, 0x53, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, + 0x12, 0x1e, 0x0a, 0x0a, 0x4f, 0x53, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x4f, 0x53, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, + 0x12, 0x1d, 0x0a, 0x07, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x01, 0x52, 0x07, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, + 0x0c, 0x0a, 0x0a, 0x5f, 0x4f, 0x53, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x0a, 0x0a, + 0x08, 0x5f, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x22, 0x86, 0x03, 0x0a, 0x05, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x12, 0x2b, 0x0a, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, + 0x12, 0x21, 0x0a, 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, + 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0c, 0x41, 0x72, 0x74, + 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x09, + 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, + 0x09, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73, 0x12, 0x2d, 0x0a, 0x07, 0x53, 0x75, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x48, 0x02, 0x52, 0x07, 0x53, + 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x88, 0x01, 0x01, 0x12, 0x3c, 0x0a, 0x0b, 0x41, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, 0x2e, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x53, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x4f, - 0x53, 0x12, 0x12, 0x0a, 0x04, 0x41, 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x41, 0x72, 0x63, 0x68, 0x22, 0x31, 0x0a, 0x09, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x4d, 0x65, 0x64, 0x69, + 0x61, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, + 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x53, 0x75, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x22, 0xae, 0x03, 0x0a, 0x08, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x12, + 0x2b, 0x0a, 0x09, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, + 0x64, 0x52, 0x09, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x09, + 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, + 0x27, 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x26, 0x0a, 0x06, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, + 0x52, 0x06, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x2d, 0x0a, 0x07, 0x53, 0x75, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x48, 0x02, 0x52, 0x07, 0x53, 0x75, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x88, 0x01, 0x01, 0x12, 0x3f, 0x0a, 0x0b, 0x41, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x41, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x4d, 0x65, 0x64, + 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x41, 0x72, 0x74, 0x69, 0x66, + 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x53, 0x75, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x22, 0x31, 0x0a, 0x09, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, + 0x12, 0x24, 0x0a, 0x0d, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -763,41 +1135,60 @@ func file_oci_proto_rawDescGZIP() []byte { return file_oci_proto_rawDescData } -var file_oci_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_oci_proto_msgTypes = make([]protoimpl.MessageInfo, 17) var file_oci_proto_goTypes = []interface{}{ - (*ImageConfig)(nil), // 0: v1.ImageConfig - (*RootFS)(nil), // 1: v1.RootFS - (*History)(nil), // 2: v1.History - (*ConfigData)(nil), // 3: v1.ConfigData - (*EmptyMessage)(nil), // 4: v1.EmptyMessage - (*Descriptor)(nil), // 5: v1.Descriptor - (*Platform)(nil), // 6: v1.Platform - (*Versioned)(nil), // 7: v1.Versioned - nil, // 8: v1.ImageConfig.ExposedPortsEntry - nil, // 9: v1.ImageConfig.VolumesEntry - nil, // 10: v1.ImageConfig.LabelsEntry - nil, // 11: v1.Descriptor.AnnotationsEntry - (*timestamppb.Timestamp)(nil), // 12: google.protobuf.Timestamp + (*Image)(nil), // 0: v1.Image + (*ImageConfig)(nil), // 1: v1.ImageConfig + (*RootFS)(nil), // 2: v1.RootFS + (*History)(nil), // 3: v1.History + (*ConfigData)(nil), // 4: v1.ConfigData + (*EmptyMessage)(nil), // 5: v1.EmptyMessage + (*Descriptor)(nil), // 6: v1.Descriptor + (*Platform)(nil), // 7: v1.Platform + (*Index)(nil), // 8: v1.Index + (*Manifest)(nil), // 9: v1.Manifest + (*Versioned)(nil), // 10: v1.Versioned + nil, // 11: v1.ImageConfig.ExposedPortsEntry + nil, // 12: v1.ImageConfig.VolumesEntry + nil, // 13: v1.ImageConfig.LabelsEntry + nil, // 14: v1.Descriptor.AnnotationsEntry + nil, // 15: v1.Index.AnnotationsEntry + nil, // 16: v1.Manifest.AnnotationsEntry + (*timestamppb.Timestamp)(nil), // 17: google.protobuf.Timestamp } var file_oci_proto_depIdxs = []int32{ - 8, // 0: v1.ImageConfig.ExposedPorts:type_name -> v1.ImageConfig.ExposedPortsEntry - 9, // 1: v1.ImageConfig.Volumes:type_name -> v1.ImageConfig.VolumesEntry - 10, // 2: v1.ImageConfig.Labels:type_name -> v1.ImageConfig.LabelsEntry - 12, // 3: v1.History.Created:type_name -> google.protobuf.Timestamp - 12, // 4: v1.ConfigData.Created:type_name -> google.protobuf.Timestamp - 6, // 5: v1.ConfigData.Platform:type_name -> v1.Platform - 0, // 6: v1.ConfigData.Config:type_name -> v1.ImageConfig - 1, // 7: v1.ConfigData.RootFS:type_name -> v1.RootFS - 2, // 8: v1.ConfigData.History:type_name -> v1.History - 6, // 9: v1.Descriptor.Platform:type_name -> v1.Platform - 11, // 10: v1.Descriptor.Annotations:type_name -> v1.Descriptor.AnnotationsEntry - 4, // 11: v1.ImageConfig.ExposedPortsEntry.value:type_name -> v1.EmptyMessage - 4, // 12: v1.ImageConfig.VolumesEntry.value:type_name -> v1.EmptyMessage - 13, // [13:13] is the sub-list for method output_type - 13, // [13:13] is the sub-list for method input_type - 13, // [13:13] is the sub-list for extension type_name - 13, // [13:13] is the sub-list for extension extendee - 0, // [0:13] is the sub-list for field type_name + 17, // 0: v1.Image.Created:type_name -> google.protobuf.Timestamp + 7, // 1: v1.Image.Platform:type_name -> v1.Platform + 1, // 2: v1.Image.Config:type_name -> v1.ImageConfig + 2, // 3: v1.Image.RootFS:type_name -> v1.RootFS + 3, // 4: v1.Image.History:type_name -> v1.History + 11, // 5: v1.ImageConfig.ExposedPorts:type_name -> v1.ImageConfig.ExposedPortsEntry + 12, // 6: v1.ImageConfig.Volumes:type_name -> v1.ImageConfig.VolumesEntry + 13, // 7: v1.ImageConfig.Labels:type_name -> v1.ImageConfig.LabelsEntry + 17, // 8: v1.History.Created:type_name -> google.protobuf.Timestamp + 17, // 9: v1.ConfigData.Created:type_name -> google.protobuf.Timestamp + 7, // 10: v1.ConfigData.Platform:type_name -> v1.Platform + 1, // 11: v1.ConfigData.Config:type_name -> v1.ImageConfig + 2, // 12: v1.ConfigData.RootFS:type_name -> v1.RootFS + 3, // 13: v1.ConfigData.History:type_name -> v1.History + 7, // 14: v1.Descriptor.Platform:type_name -> v1.Platform + 14, // 15: v1.Descriptor.Annotations:type_name -> v1.Descriptor.AnnotationsEntry + 10, // 16: v1.Index.versioned:type_name -> v1.Versioned + 6, // 17: v1.Index.Manifests:type_name -> v1.Descriptor + 6, // 18: v1.Index.Subject:type_name -> v1.Descriptor + 15, // 19: v1.Index.Annotations:type_name -> v1.Index.AnnotationsEntry + 10, // 20: v1.Manifest.Versioned:type_name -> v1.Versioned + 6, // 21: v1.Manifest.Config:type_name -> v1.Descriptor + 6, // 22: v1.Manifest.Layers:type_name -> v1.Descriptor + 6, // 23: v1.Manifest.Subject:type_name -> v1.Descriptor + 16, // 24: v1.Manifest.Annotations:type_name -> v1.Manifest.AnnotationsEntry + 5, // 25: v1.ImageConfig.ExposedPortsEntry.value:type_name -> v1.EmptyMessage + 5, // 26: v1.ImageConfig.VolumesEntry.value:type_name -> v1.EmptyMessage + 27, // [27:27] is the sub-list for method output_type + 27, // [27:27] is the sub-list for method input_type + 27, // [27:27] is the sub-list for extension type_name + 27, // [27:27] is the sub-list for extension extendee + 0, // [0:27] is the sub-list for field type_name } func init() { file_oci_proto_init() } @@ -807,7 +1198,7 @@ func file_oci_proto_init() { } if !protoimpl.UnsafeEnabled { file_oci_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ImageConfig); i { + switch v := v.(*Image); i { case 0: return &v.state case 1: @@ -819,7 +1210,7 @@ func file_oci_proto_init() { } } file_oci_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RootFS); i { + switch v := v.(*ImageConfig); i { case 0: return &v.state case 1: @@ -831,7 +1222,7 @@ func file_oci_proto_init() { } } file_oci_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*History); i { + switch v := v.(*RootFS); i { case 0: return &v.state case 1: @@ -843,7 +1234,7 @@ func file_oci_proto_init() { } } file_oci_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConfigData); i { + switch v := v.(*History); i { case 0: return &v.state case 1: @@ -855,7 +1246,7 @@ func file_oci_proto_init() { } } file_oci_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EmptyMessage); i { + switch v := v.(*ConfigData); i { case 0: return &v.state case 1: @@ -867,7 +1258,7 @@ func file_oci_proto_init() { } } file_oci_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Descriptor); i { + switch v := v.(*EmptyMessage); i { case 0: return &v.state case 1: @@ -879,7 +1270,7 @@ func file_oci_proto_init() { } } file_oci_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Platform); i { + switch v := v.(*Descriptor); i { case 0: return &v.state case 1: @@ -891,6 +1282,42 @@ func file_oci_proto_init() { } } file_oci_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Platform); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_oci_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Index); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_oci_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Manifest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_oci_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Versioned); i { case 0: return &v.state @@ -904,16 +1331,20 @@ func file_oci_proto_init() { } } file_oci_proto_msgTypes[0].OneofWrappers = []interface{}{} - file_oci_proto_msgTypes[2].OneofWrappers = []interface{}{} + file_oci_proto_msgTypes[1].OneofWrappers = []interface{}{} file_oci_proto_msgTypes[3].OneofWrappers = []interface{}{} - file_oci_proto_msgTypes[5].OneofWrappers = []interface{}{} + file_oci_proto_msgTypes[4].OneofWrappers = []interface{}{} + file_oci_proto_msgTypes[6].OneofWrappers = []interface{}{} + file_oci_proto_msgTypes[7].OneofWrappers = []interface{}{} + file_oci_proto_msgTypes[8].OneofWrappers = []interface{}{} + file_oci_proto_msgTypes[9].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_oci_proto_rawDesc, NumEnums: 0, - NumMessages: 12, + NumMessages: 17, NumExtensions: 0, NumServices: 0, }, diff --git a/pkg/meta/types/types.go b/pkg/meta/types/types.go index 9cbc89edf0..f25cab4471 100644 --- a/pkg/meta/types/types.go +++ b/pkg/meta/types/types.go @@ -199,19 +199,19 @@ type ImageTrustStore interface { // ImageData can store all data related to a image, multiarch or simple. Used for writing imaged to MetaDB. type ImageData struct { - MediaType string - Digest godigest.Digest - Size int64 - Index *ispec.Index // If the image is multiarch the Index will be non-nil - Manifests []ManifestData // All manifests under the image, 1 for simple images and many for multiarch + MediaType string // MediaType refers to the image descriptor, a manifest or a index (if multiarch) + Digest godigest.Digest // Digest refers to the image descriptor, a manifest or a index (if multiarch) + Size int64 // Size refers to the image descriptor, a manifest or a index (if multiarch) + Index *ispec.Index // If the image is multiarch the Index will be non-nil + Manifests []ManifestData // All manifests under the image, 1 for simple images and many for multiarch } // ManifestData represents all data related to an image manifests. type ManifestData struct { - Size int64 - Digest godigest.Digest - ispec.Manifest - ConfigContent ispec.Image + Size int64 + Digest godigest.Digest + Manifest ispec.Manifest + Config ispec.Image } type RepoMetadata struct { diff --git a/pkg/test/image-utils/images.go b/pkg/test/image-utils/images.go index b9b13f4653..2d1e5436a8 100644 --- a/pkg/test/image-utils/images.go +++ b/pkg/test/image-utils/images.go @@ -147,10 +147,10 @@ func (img Image) AsImageData() mTypes.ImageData { Size: img.ManifestDescriptor.Size, Manifests: []mTypes.ManifestData{ { - Size: img.ManifestDescriptor.Size, - Digest: img.ManifestDescriptor.Digest, - Manifest: img.Manifest, - ConfigContent: img.Config, + Size: img.ManifestDescriptor.Size, + Digest: img.ManifestDescriptor.Digest, + Manifest: img.Manifest, + Config: img.Config, }, }, } diff --git a/pkg/test/image-utils/multiarch.go b/pkg/test/image-utils/multiarch.go index 3edc871de2..b4ae59c492 100644 --- a/pkg/test/image-utils/multiarch.go +++ b/pkg/test/image-utils/multiarch.go @@ -50,6 +50,7 @@ func (mi MultiarchImage) AsImageData() mTypes.ImageData { type ImagesBuilder interface { Images(images []Image) MultiarchBuilder + RandomImages(count int) MultiarchBuilder } type MultiarchBuilder interface { @@ -96,6 +97,18 @@ func (mb *BaseMultiarchBuilder) Images(images []Image) MultiarchBuilder { return mb } +func (mb *BaseMultiarchBuilder) RandomImages(count int) MultiarchBuilder { + images := make([]Image, count) + + for i := range images { + images[i] = CreateRandomImage() + } + + mb.images = images + + return mb +} + func (mb *BaseMultiarchBuilder) Subject(subject *ispec.Descriptor) MultiarchBuilder { mb.subject = subject diff --git a/pkg/test/image-utils/upload.go b/pkg/test/image-utils/upload.go index 2f5f581928..bda283f046 100644 --- a/pkg/test/image-utils/upload.go +++ b/pkg/test/image-utils/upload.go @@ -223,9 +223,15 @@ func UploadMultiarchImage(multiImage MultiarchImage, baseURL string, repo, ref s } // put manifest - indexBlob, err := json.Marshal(multiImage.Index) - if err = inject.Error(err); err != nil { - return err + indexBlob := multiImage.IndexDescriptor.Data + + if len(indexBlob) == 0 { + var err error + + indexBlob, err = json.Marshal(multiImage.Index) + if err = inject.Error(err); err != nil { + return err + } } resp, err := resty.R().