diff options
author | Patrick Steinhardt <psteinhardt@gitlab.com> | 2021-05-19 20:10:08 +0300 |
---|---|---|
committer | Patrick Steinhardt <psteinhardt@gitlab.com> | 2021-05-19 20:10:08 +0300 |
commit | 066494f2d1cff8a9764af0d583370cc2b3ffebac (patch) | |
tree | 99b75c4d55655399f88b4fd8451a86b9f8c1f022 | |
parent | 0f640a20ff16076ac7ea830bdafa38022cc9540f (diff) | |
parent | e7eeed02436d96b4a314cb260f46b9c35960a64d (diff) |
Merge branch 'pks-config-voting-replication' into 'master'
repository: Enable replication of and voting on gitconfig
See merge request gitlab-org/gitaly!3511
-rw-r--r-- | internal/git/gittest/command.go | 2 | ||||
-rw-r--r-- | internal/gitaly/service/repository/config.go | 116 | ||||
-rw-r--r-- | internal/gitaly/service/repository/config_test.go | 151 | ||||
-rw-r--r-- | internal/gitaly/service/repository/replicate.go | 67 | ||||
-rw-r--r-- | internal/gitaly/service/repository/replicate_test.go | 9 | ||||
-rw-r--r-- | internal/gitaly/service/repository/testhelper_test.go | 5 | ||||
-rw-r--r-- | internal/metadata/featureflag/feature_flags.go | 3 | ||||
-rw-r--r-- | internal/praefect/coordinator.go | 11 | ||||
-rw-r--r-- | proto/go/gitalypb/repository-service.pb.go | 650 | ||||
-rw-r--r-- | proto/repository-service.proto | 24 | ||||
-rw-r--r-- | ruby/proto/gitaly/repository-service_pb.rb | 8 | ||||
-rw-r--r-- | ruby/proto/gitaly/repository-service_services_pb.rb | 3 |
12 files changed, 787 insertions, 262 deletions
diff --git a/internal/git/gittest/command.go b/internal/git/gittest/command.go index f658b90cd..e3d98bfcc 100644 --- a/internal/git/gittest/command.go +++ b/internal/git/gittest/command.go @@ -12,6 +12,8 @@ import ( // Exec runs a git command and returns the standard output, or fails. func Exec(t testing.TB, cfg config.Cfg, args ...string) []byte { + t.Helper() + return run(t, nil, cfg, args...) } diff --git a/internal/gitaly/service/repository/config.go b/internal/gitaly/service/repository/config.go index 98f31a154..f757f5e04 100644 --- a/internal/gitaly/service/repository/config.go +++ b/internal/gitaly/service/repository/config.go @@ -2,16 +2,75 @@ package repository import ( "context" + "fmt" + "io" + "os" + "path/filepath" "gitlab.com/gitlab-org/gitaly/internal/command" "gitlab.com/gitlab-org/gitaly/internal/git" "gitlab.com/gitlab-org/gitaly/internal/gitaly/rubyserver" + "gitlab.com/gitlab-org/gitaly/internal/gitaly/transaction" + "gitlab.com/gitlab-org/gitaly/internal/helper" + "gitlab.com/gitlab-org/gitaly/internal/metadata/featureflag" + "gitlab.com/gitlab-org/gitaly/internal/transaction/txinfo" + "gitlab.com/gitlab-org/gitaly/internal/transaction/voting" "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" + "gitlab.com/gitlab-org/gitaly/streamio" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) +// GetConfig reads the repository's gitconfig file and returns its contents. +func (s *server) GetConfig( + request *gitalypb.GetConfigRequest, + stream gitalypb.RepositoryService_GetConfigServer, +) error { + repoPath, err := s.locator.GetPath(request.GetRepository()) + if err != nil { + return err + } + + configPath := filepath.Join(repoPath, "config") + + gitconfig, err := os.Open(configPath) + if err != nil { + if os.IsNotExist(err) { + return status.Errorf(codes.NotFound, "opening gitconfig: %v", err) + } + return helper.ErrInternalf("opening gitconfig: %v", err) + } + + writer := streamio.NewWriter(func(p []byte) error { + return stream.Send(&gitalypb.GetConfigResponse{ + Data: p, + }) + }) + + if _, err := io.Copy(writer, gitconfig); err != nil { + return helper.ErrInternalf("sending config: %v", err) + } + + return nil +} + func (s *server) DeleteConfig(ctx context.Context, req *gitalypb.DeleteConfigRequest) (*gitalypb.DeleteConfigResponse, error) { + /* + * We need to vote both before and after the change because we don't have proper commit + * semantics: it's not easily feasible to lock the config manually, vote on it and only + * commit the change if the vote was successful. Git automatically does this for us for ref + * updates via the reference-transaction hook, but here we'll need to use an approximation. + * + * As an approximation, we thus vote both before and after the change. Praefect requires the + * vote up front because if an RPC failed and no vote exists, it assumes no change was + * performed, and that's bad for us if we fail _after_ the modification but _before_ the + * vote on changed data. And the second vote is required such that we can assert that all + * Gitaly nodes actually did perform the same change. + */ + if err := s.voteOnConfig(ctx, req.GetRepository()); err != nil { + return nil, helper.ErrInternal(fmt.Errorf("preimage vote on config: %w", err)) + } + for _, k := range req.Keys { // We assume k does not contain any secrets; it is leaked via 'ps'. cmd, err := s.gitCmdFactory.New(ctx, req.Repository, git.SubCmd{ @@ -32,6 +91,10 @@ func (s *server) DeleteConfig(ctx context.Context, req *gitalypb.DeleteConfigReq } } + if err := s.voteOnConfig(ctx, req.GetRepository()); err != nil { + return nil, helper.ErrInternal(fmt.Errorf("postimage vote on config: %w", err)) + } + return &gitalypb.DeleteConfigResponse{}, nil } @@ -49,5 +112,56 @@ func (s *server) SetConfig(ctx context.Context, req *gitalypb.SetConfigRequest) return nil, err } - return client.SetConfig(clientCtx, req) + /* + * We're voting twice, once on the preimage and once on the postimage. Please refer to the + * comment in DeleteConfig() for the reason. + */ + if err := s.voteOnConfig(ctx, req.GetRepository()); err != nil { + return nil, helper.ErrInternalf("preimage vote on config: %v", err) + } + + response, err := client.SetConfig(clientCtx, req) + if err != nil { + return nil, err + } + + if err := s.voteOnConfig(ctx, req.GetRepository()); err != nil { + return nil, helper.ErrInternalf("postimage vote on config: %v", err) + } + + return response, nil +} + +func (s *server) voteOnConfig(ctx context.Context, repo *gitalypb.Repository) error { + if featureflag.IsDisabled(ctx, featureflag.TxConfig) { + return nil + } + + return transaction.RunOnContext(ctx, func(tx txinfo.Transaction, praefect txinfo.PraefectServer) error { + repoPath, err := s.locator.GetPath(repo) + if err != nil { + return fmt.Errorf("get repo path: %w", err) + } + + config, err := os.Open(filepath.Join(repoPath, "config")) + if err != nil { + return fmt.Errorf("open repo config: %w", err) + } + + hash := voting.NewVoteHash() + if _, err := io.Copy(hash, config); err != nil { + return fmt.Errorf("seeding vote: %w", err) + } + + vote, err := hash.Vote() + if err != nil { + return fmt.Errorf("computing vote: %w", err) + } + + if err := s.txManager.Vote(ctx, tx, praefect, vote); err != nil { + return fmt.Errorf("casting vote: %w", err) + } + + return nil + }) } diff --git a/internal/gitaly/service/repository/config_test.go b/internal/gitaly/service/repository/config_test.go index 284af9504..00a365b7f 100644 --- a/internal/gitaly/service/repository/config_test.go +++ b/internal/gitaly/service/repository/config_test.go @@ -3,6 +3,10 @@ package repository import ( "bufio" "bytes" + "context" + "io/ioutil" + "os" + "path/filepath" "strings" "testing" @@ -10,12 +14,70 @@ import ( "gitlab.com/gitlab-org/gitaly/internal/git/gittest" "gitlab.com/gitlab-org/gitaly/internal/gitaly/config" "gitlab.com/gitlab-org/gitaly/internal/gitaly/rubyserver" + "gitlab.com/gitlab-org/gitaly/internal/gitaly/transaction" + "gitlab.com/gitlab-org/gitaly/internal/helper" + "gitlab.com/gitlab-org/gitaly/internal/metadata/featureflag" "gitlab.com/gitlab-org/gitaly/internal/testhelper" + "gitlab.com/gitlab-org/gitaly/internal/testhelper/testserver" + "gitlab.com/gitlab-org/gitaly/internal/transaction/txinfo" + "gitlab.com/gitlab-org/gitaly/internal/transaction/voting" "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" + "gitlab.com/gitlab-org/gitaly/streamio" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) +func TestGetConfig(t *testing.T) { + cfg, client := setupRepositoryServiceWithoutRepo(t) + + getConfig := func( + t *testing.T, + client gitalypb.RepositoryServiceClient, + repo *gitalypb.Repository, + ) (string, error) { + ctx, cleanup := testhelper.Context() + defer cleanup() + + stream, err := client.GetConfig(ctx, &gitalypb.GetConfigRequest{ + Repository: repo, + }) + require.NoError(t, err) + + reader := streamio.NewReader(func() ([]byte, error) { + response, err := stream.Recv() + var bytes []byte + if response != nil { + bytes = response.Data + } + return bytes, err + }) + + contents, err := ioutil.ReadAll(reader) + return string(contents), err + } + + t.Run("normal repo", func(t *testing.T) { + repo, _, cleanup := gittest.InitBareRepoAt(t, cfg, cfg.Storages[0]) + defer cleanup() + + config, err := getConfig(t, client, repo) + require.NoError(t, err) + require.Equal(t, "[core]\n\trepositoryformatversion = 0\n\tfilemode = true\n\tbare = true\n", config) + }) + + t.Run("missing config", func(t *testing.T) { + repo, repoPath, cleanup := gittest.InitBareRepoAt(t, cfg, cfg.Storages[0]) + defer cleanup() + + configPath := filepath.Join(repoPath, "config") + require.NoError(t, os.Remove(configPath)) + + config, err := getConfig(t, client, repo) + require.Equal(t, status.Errorf(codes.NotFound, "opening gitconfig: open %s: no such file or directory", configPath), err) + require.Equal(t, "", config) + }) +} + func TestDeleteConfig(t *testing.T) { cfg, client := setupRepositoryServiceWithoutRepo(t) @@ -72,6 +134,47 @@ func TestDeleteConfig(t *testing.T) { } } +func TestDeleteConfigTransactional(t *testing.T) { + testhelper.NewFeatureSets([]featureflag.FeatureFlag{ + featureflag.TxConfig, + }).Run(t, func(t *testing.T, ctx context.Context) { + var votes []voting.Vote + txManager := transaction.MockManager{ + VoteFn: func(_ context.Context, _ txinfo.Transaction, _ txinfo.PraefectServer, vote voting.Vote) error { + votes = append(votes, vote) + return nil + }, + } + + cfg, repo, repoPath, client := setupRepositoryService(t, testserver.WithTransactionManager(&txManager)) + + ctx, err := (&txinfo.PraefectServer{SocketPath: "i-dont-care"}).Inject(ctx) + require.NoError(t, err) + ctx, err = txinfo.InjectTransaction(ctx, 1, "node", true) + require.NoError(t, err) + ctx = helper.IncomingToOutgoing(ctx) + + unmodifiedContents := testhelper.MustReadFile(t, filepath.Join(repoPath, "config")) + gittest.Exec(t, cfg, "-C", repoPath, "config", "delete.me", "now") + modifiedContents := testhelper.MustReadFile(t, filepath.Join(repoPath, "config")) + + _, err = client.DeleteConfig(ctx, &gitalypb.DeleteConfigRequest{ + Repository: repo, + Keys: []string{"delete.me"}, + }) + require.NoError(t, err) + + if featureflag.IsEnabled(ctx, featureflag.TxConfig) { + require.Equal(t, []voting.Vote{ + voting.VoteFromData(modifiedContents), + voting.VoteFromData(unmodifiedContents), + }, votes) + } else { + require.Len(t, votes, 0) + } + }) +} + func testSetConfig(t *testing.T, cfg config.Cfg, rubySrv *rubyserver.Server) { cfg, _, _, client := setupRepositoryServiceWithRuby(t, cfg, rubySrv) @@ -130,3 +233,51 @@ func testSetConfig(t *testing.T, cfg config.Cfg, rubySrv *rubyserver.Server) { }) } } + +func testSetConfigTransactional(t *testing.T, cfg config.Cfg, rubySrv *rubyserver.Server) { + testhelper.NewFeatureSets([]featureflag.FeatureFlag{ + featureflag.TxConfig, + }).Run(t, func(t *testing.T, ctx context.Context) { + var votes []voting.Vote + + txManager := transaction.MockManager{ + VoteFn: func(_ context.Context, _ txinfo.Transaction, _ txinfo.PraefectServer, vote voting.Vote) error { + votes = append(votes, vote) + return nil + }, + } + + _, repo, repoPath, client := setupRepositoryServiceWithRuby(t, cfg, rubySrv, testserver.WithTransactionManager(&txManager)) + + ctx, err := (&txinfo.PraefectServer{SocketPath: "i-dont-care"}).Inject(ctx) + require.NoError(t, err) + ctx, err = txinfo.InjectTransaction(ctx, 1, "node", true) + require.NoError(t, err) + ctx = helper.IncomingToOutgoing(ctx) + + unmodifiedContents := testhelper.MustReadFile(t, filepath.Join(repoPath, "config")) + + _, err = client.SetConfig(ctx, &gitalypb.SetConfigRequest{ + Repository: repo, + Entries: []*gitalypb.SetConfigRequest_Entry{ + &gitalypb.SetConfigRequest_Entry{ + Key: "set.me", + Value: &gitalypb.SetConfigRequest_Entry_ValueStr{ + "something", + }, + }, + }, + }) + require.NoError(t, err) + + if featureflag.IsEnabled(ctx, featureflag.TxConfig) { + modifiedContents := string(unmodifiedContents) + "[set]\n\tme = something\n" + require.Equal(t, []voting.Vote{ + voting.VoteFromData(unmodifiedContents), + voting.VoteFromData([]byte(modifiedContents)), + }, votes) + } else { + require.Len(t, votes, 0) + } + }) +} diff --git a/internal/gitaly/service/repository/replicate.go b/internal/gitaly/service/repository/replicate.go index 69b00de09..6d7354c5a 100644 --- a/internal/gitaly/service/repository/replicate.go +++ b/internal/gitaly/service/repository/replicate.go @@ -57,6 +57,7 @@ func (s *server) ReplicateRepository(ctx context.Context, in *gitalypb.Replicate outgoingCtx := helper.IncomingToOutgoing(ctx) syncFuncs := []func(context.Context, *gitalypb.ReplicateRepositoryRequest) error{ + s.syncGitconfig, s.syncInfoAttributes, s.syncRepository, } @@ -209,7 +210,7 @@ func (s *server) syncRepository(ctx context.Context, in *gitalypb.ReplicateRepos return nil } -func (s *server) syncInfoAttributes(ctx context.Context, in *gitalypb.ReplicateRepositoryRequest) error { +func (s *server) syncGitconfig(ctx context.Context, in *gitalypb.ReplicateRepositoryRequest) error { repoClient, err := s.newRepoClient(ctx, in.GetSource().GetStorageName()) if err != nil { return err @@ -220,18 +221,46 @@ func (s *server) syncInfoAttributes(ctx context.Context, in *gitalypb.ReplicateR return err } - infoPath := filepath.Join(repoPath, "info") - attributesPath := filepath.Join(infoPath, "attributes") + // At the point of implementing this, the `GetConfig` RPC hasn't been deployed yet and is + // thus not available for general use. In theory, we'd have to wait for this release cycle + // to finish, and only afterwards would we be able to implement replication of the + // gitconfig. In order to allow us to iterate fast, we just try to call `GetConfig()`, but + // ignore any errors for the case where the target Gitaly node doesn't support the RPC yet. + // TODO: Remove this hack and properly return the error in the next release cycle. + if err := func() error { + stream, err := repoClient.GetConfig(ctx, &gitalypb.GetConfigRequest{ + Repository: in.GetSource(), + }) + if err != nil { + return err + } + + configPath := filepath.Join(repoPath, "config") + if err := writeFile(configPath, 0644, streamio.NewReader(func() ([]byte, error) { + resp, err := stream.Recv() + return resp.GetData(), err + })); err != nil { + return err + } - if err := os.MkdirAll(infoPath, 0755); err != nil { + return nil + }(); err != nil { + ctxlogrus.Extract(ctx).WithError(err).Warn("synchronizing gitconfig failed") + } + + return nil +} + +func (s *server) syncInfoAttributes(ctx context.Context, in *gitalypb.ReplicateRepositoryRequest) error { + repoClient, err := s.newRepoClient(ctx, in.GetSource().GetStorageName()) + if err != nil { return err } - fw, err := safe.CreateFileWriter(attributesPath) + repoPath, err := s.locator.GetRepoPath(in.GetRepository()) if err != nil { return err } - defer fw.Close() stream, err := repoClient.GetInfoAttributes(ctx, &gitalypb.GetInfoAttributesRequest{ Repository: in.GetSource(), @@ -240,22 +269,42 @@ func (s *server) syncInfoAttributes(ctx context.Context, in *gitalypb.ReplicateR return err } - if _, err := io.Copy(fw, streamio.NewReader(func() ([]byte, error) { + attributesPath := filepath.Join(repoPath, "info", "attributes") + if err := writeFile(attributesPath, attributesFileMode, streamio.NewReader(func() ([]byte, error) { resp, err := stream.Recv() return resp.GetAttributes(), err })); err != nil { return err } + return nil +} + +func writeFile(path string, mode os.FileMode, reader io.Reader) error { + parentDir := filepath.Dir(path) + if err := os.MkdirAll(parentDir, 0755); err != nil { + return err + } + + fw, err := safe.CreateFileWriter(path) + if err != nil { + return err + } + defer fw.Close() + + if _, err := io.Copy(fw, reader); err != nil { + return err + } + if err = fw.Commit(); err != nil { return err } - if err := os.Chmod(attributesPath, attributesFileMode); err != nil { + if err := os.Chmod(path, mode); err != nil { return err } - return os.Rename(attributesPath, attributesPath) + return nil } // newRemoteClient creates a new RemoteClient that talks to the same gitaly server diff --git a/internal/gitaly/service/repository/replicate_test.go b/internal/gitaly/service/repository/replicate_test.go index 84a61240e..131392911 100644 --- a/internal/gitaly/service/repository/replicate_test.go +++ b/internal/gitaly/service/repository/replicate_test.go @@ -47,6 +47,11 @@ func TestReplicateRepository(t *testing.T) { attrData := []byte("*.pbxproj binary\n") require.NoError(t, ioutil.WriteFile(attrFilePath, attrData, 0644)) + // Write a modified gitconfig + gittest.Exec(t, cfg, "-C", repoPath, "config", "please.replicate", "me") + configData := testhelper.MustReadFile(t, filepath.Join(repoPath, "config")) + require.Contains(t, string(configData), "[please]\n\treplicate = me\n") + targetRepo := *repo targetRepo.StorageName = cfg.Storages[1].Name @@ -68,6 +73,10 @@ func TestReplicateRepository(t *testing.T) { replicatedAttrData := testhelper.MustReadFile(t, replicatedAttrFilePath) require.Equal(t, string(attrData), string(replicatedAttrData), "info/attributes files must match") + replicatedConfigPath := filepath.Join(targetRepoPath, "config") + replicatedConfigData := testhelper.MustReadFile(t, replicatedConfigPath) + require.Equal(t, string(configData), string(replicatedConfigData), "config files must match") + // create another branch gittest.WriteCommit(t, cfg, repoPath, gittest.WithBranch("branch")) _, err = client.ReplicateRepository(injectedCtx, &gitalypb.ReplicateRepositoryRequest{ diff --git a/internal/gitaly/service/repository/testhelper_test.go b/internal/gitaly/service/repository/testhelper_test.go index 6600f4ebc..693f0b083 100644 --- a/internal/gitaly/service/repository/testhelper_test.go +++ b/internal/gitaly/service/repository/testhelper_test.go @@ -59,6 +59,7 @@ func TestWithRubySidecar(t *testing.T) { fs := []func(t *testing.T, cfg config.Cfg, rubySrv *rubyserver.Server){ testCloneFromPoolHTTP, testSetConfig, + testSetConfigTransactional, testFetchRemoteFailure, testFetchRemoteOverHTTP, testSuccessfulFindLicenseRequest, @@ -92,8 +93,8 @@ func newMuxedRepositoryClient(t *testing.T, ctx context.Context, cfg config.Cfg, return gitalypb.NewRepositoryServiceClient(conn) } -func setupRepositoryServiceWithRuby(t testing.TB, cfg config.Cfg, rubySrv *rubyserver.Server) (config.Cfg, *gitalypb.Repository, string, gitalypb.RepositoryServiceClient) { - client, serverSocketPath := runRepositoryService(t, cfg, rubySrv) +func setupRepositoryServiceWithRuby(t testing.TB, cfg config.Cfg, rubySrv *rubyserver.Server, opts ...testserver.GitalyServerOpt) (config.Cfg, *gitalypb.Repository, string, gitalypb.RepositoryServiceClient) { + client, serverSocketPath := runRepositoryService(t, cfg, rubySrv, opts...) cfg.SocketPath = serverSocketPath repo, repoPath, cleanup := gittest.CloneRepoAtStorage(t, cfg, cfg.Storages[0], t.Name()) diff --git a/internal/metadata/featureflag/feature_flags.go b/internal/metadata/featureflag/feature_flags.go index 1be6d74a8..4fd6495b8 100644 --- a/internal/metadata/featureflag/feature_flags.go +++ b/internal/metadata/featureflag/feature_flags.go @@ -25,6 +25,8 @@ var ( GrpcTreeEntryNotFound = FeatureFlag{Name: "grpc_tree_entry_not_found", OnByDefault: false} // FetchInternalRemoteErrors makes FetchInternalRemote return actual errors instead of a boolean FetchInternalRemoteErrors = FeatureFlag{Name: "fetch_internal_remote_errors", OnByDefault: false} + // TxConfig enables transactional voting for SetConfig and DeleteConfig RPCs. + TxConfig = FeatureFlag{Name: "tx_config", OnByDefault: false} ) // All includes all feature flags. @@ -37,4 +39,5 @@ var All = []FeatureFlag{ GrpcTreeEntryNotFound, GoUpdateRemoteMirror, FetchInternalRemoteErrors, + TxConfig, } diff --git a/internal/praefect/coordinator.go b/internal/praefect/coordinator.go index 107b61f1a..ea53a5fd4 100644 --- a/internal/praefect/coordinator.go +++ b/internal/praefect/coordinator.go @@ -38,6 +38,12 @@ type transactionsCondition func(context.Context) bool func transactionsEnabled(context.Context) bool { return true } func transactionsDisabled(context.Context) bool { return false } +func transactionsFlag(flag featureflag.FeatureFlag) transactionsCondition { + return func(ctx context.Context) bool { + return featureflag.IsEnabled(ctx, flag) + } +} + // transactionRPCs contains the list of repository-scoped mutating calls which may take part in // transactions. An optional feature flag can be added to conditionally enable transactional // behaviour. If none is given, it's always enabled. @@ -82,6 +88,9 @@ var transactionRPCs = map[string]transactionsCondition{ "/gitaly.WikiService/WikiUpdatePage": transactionsEnabled, "/gitaly.WikiService/WikiWritePage": transactionsEnabled, + "/gitaly.RepositoryService/SetConfig": transactionsFlag(featureflag.TxConfig), + "/gitaly.RepositoryService/DeleteConfig": transactionsFlag(featureflag.TxConfig), + // The following RPCs don't perform any reference updates and thus // shouldn't use transactions. "/gitaly.ObjectPoolService/CreateObjectPool": transactionsDisabled, @@ -92,7 +101,6 @@ var transactionRPCs = map[string]transactionsCondition{ "/gitaly.ObjectPoolService/UnlinkRepositoryFromObjectPool": transactionsDisabled, "/gitaly.RefService/PackRefs": transactionsDisabled, "/gitaly.RepositoryService/Cleanup": transactionsDisabled, - "/gitaly.RepositoryService/DeleteConfig": transactionsDisabled, "/gitaly.RepositoryService/GarbageCollect": transactionsDisabled, "/gitaly.RepositoryService/MidxRepack": transactionsDisabled, "/gitaly.RepositoryService/OptimizeRepository": transactionsDisabled, @@ -101,7 +109,6 @@ var transactionRPCs = map[string]transactionsCondition{ "/gitaly.RepositoryService/RepackFull": transactionsDisabled, "/gitaly.RepositoryService/RepackIncremental": transactionsDisabled, "/gitaly.RepositoryService/RestoreCustomHooks": transactionsDisabled, - "/gitaly.RepositoryService/SetConfig": transactionsDisabled, "/gitaly.RepositoryService/WriteCommitGraph": transactionsDisabled, // These shouldn't ever use transactions for the sake of not creating diff --git a/proto/go/gitalypb/repository-service.pb.go b/proto/go/gitalypb/repository-service.pb.go index 75c15ecf3..5f93de8f2 100644 --- a/proto/go/gitalypb/repository-service.pb.go +++ b/proto/go/gitalypb/repository-service.pb.go @@ -117,7 +117,7 @@ func (x GetRawChangesResponse_RawChange_Operation) String() string { } func (GetRawChangesResponse_RawChange_Operation) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{65, 0, 0} + return fileDescriptor_e9b1768cf174c79b, []int{67, 0, 0} } type RepositoryExistsRequest struct { @@ -2054,6 +2054,89 @@ func (m *CreateBundleResponse) GetData() []byte { return nil } +// GetConfigRequest is a request for the GetConfig RPC. +type GetConfigRequest struct { + // Repository is the repository from which the configuration should be read + // from. + Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetConfigRequest) Reset() { *m = GetConfigRequest{} } +func (m *GetConfigRequest) String() string { return proto.CompactTextString(m) } +func (*GetConfigRequest) ProtoMessage() {} +func (*GetConfigRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_e9b1768cf174c79b, []int{44} +} + +func (m *GetConfigRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetConfigRequest.Unmarshal(m, b) +} +func (m *GetConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetConfigRequest.Marshal(b, m, deterministic) +} +func (m *GetConfigRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetConfigRequest.Merge(m, src) +} +func (m *GetConfigRequest) XXX_Size() int { + return xxx_messageInfo_GetConfigRequest.Size(m) +} +func (m *GetConfigRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetConfigRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetConfigRequest proto.InternalMessageInfo + +func (m *GetConfigRequest) GetRepository() *Repository { + if m != nil { + return m.Repository + } + return nil +} + +// GetConfigResponse is a response for the GetConfig RPC. +type GetConfigResponse struct { + // Data contains contents of the gitconfig. + Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetConfigResponse) Reset() { *m = GetConfigResponse{} } +func (m *GetConfigResponse) String() string { return proto.CompactTextString(m) } +func (*GetConfigResponse) ProtoMessage() {} +func (*GetConfigResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_e9b1768cf174c79b, []int{45} +} + +func (m *GetConfigResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetConfigResponse.Unmarshal(m, b) +} +func (m *GetConfigResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetConfigResponse.Marshal(b, m, deterministic) +} +func (m *GetConfigResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetConfigResponse.Merge(m, src) +} +func (m *GetConfigResponse) XXX_Size() int { + return xxx_messageInfo_GetConfigResponse.Size(m) +} +func (m *GetConfigResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetConfigResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetConfigResponse proto.InternalMessageInfo + +func (m *GetConfigResponse) GetData() []byte { + if m != nil { + return m.Data + } + return nil +} + type SetConfigRequest struct { Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"` Entries []*SetConfigRequest_Entry `protobuf:"bytes,2,rep,name=entries,proto3" json:"entries,omitempty"` @@ -2066,7 +2149,7 @@ func (m *SetConfigRequest) Reset() { *m = SetConfigRequest{} } func (m *SetConfigRequest) String() string { return proto.CompactTextString(m) } func (*SetConfigRequest) ProtoMessage() {} func (*SetConfigRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{44} + return fileDescriptor_e9b1768cf174c79b, []int{46} } func (m *SetConfigRequest) XXX_Unmarshal(b []byte) error { @@ -2117,7 +2200,7 @@ func (m *SetConfigRequest_Entry) Reset() { *m = SetConfigRequest_Entry{} func (m *SetConfigRequest_Entry) String() string { return proto.CompactTextString(m) } func (*SetConfigRequest_Entry) ProtoMessage() {} func (*SetConfigRequest_Entry) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{44, 0} + return fileDescriptor_e9b1768cf174c79b, []int{46, 0} } func (m *SetConfigRequest_Entry) XXX_Unmarshal(b []byte) error { @@ -2214,7 +2297,7 @@ func (m *SetConfigResponse) Reset() { *m = SetConfigResponse{} } func (m *SetConfigResponse) String() string { return proto.CompactTextString(m) } func (*SetConfigResponse) ProtoMessage() {} func (*SetConfigResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{45} + return fileDescriptor_e9b1768cf174c79b, []int{47} } func (m *SetConfigResponse) XXX_Unmarshal(b []byte) error { @@ -2247,7 +2330,7 @@ func (m *DeleteConfigRequest) Reset() { *m = DeleteConfigRequest{} } func (m *DeleteConfigRequest) String() string { return proto.CompactTextString(m) } func (*DeleteConfigRequest) ProtoMessage() {} func (*DeleteConfigRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{46} + return fileDescriptor_e9b1768cf174c79b, []int{48} } func (m *DeleteConfigRequest) XXX_Unmarshal(b []byte) error { @@ -2292,7 +2375,7 @@ func (m *DeleteConfigResponse) Reset() { *m = DeleteConfigResponse{} } func (m *DeleteConfigResponse) String() string { return proto.CompactTextString(m) } func (*DeleteConfigResponse) ProtoMessage() {} func (*DeleteConfigResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{47} + return fileDescriptor_e9b1768cf174c79b, []int{49} } func (m *DeleteConfigResponse) XXX_Unmarshal(b []byte) error { @@ -2325,7 +2408,7 @@ func (m *RestoreCustomHooksRequest) Reset() { *m = RestoreCustomHooksReq func (m *RestoreCustomHooksRequest) String() string { return proto.CompactTextString(m) } func (*RestoreCustomHooksRequest) ProtoMessage() {} func (*RestoreCustomHooksRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{48} + return fileDescriptor_e9b1768cf174c79b, []int{50} } func (m *RestoreCustomHooksRequest) XXX_Unmarshal(b []byte) error { @@ -2370,7 +2453,7 @@ func (m *RestoreCustomHooksResponse) Reset() { *m = RestoreCustomHooksRe func (m *RestoreCustomHooksResponse) String() string { return proto.CompactTextString(m) } func (*RestoreCustomHooksResponse) ProtoMessage() {} func (*RestoreCustomHooksResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{49} + return fileDescriptor_e9b1768cf174c79b, []int{51} } func (m *RestoreCustomHooksResponse) XXX_Unmarshal(b []byte) error { @@ -2402,7 +2485,7 @@ func (m *BackupCustomHooksRequest) Reset() { *m = BackupCustomHooksReque func (m *BackupCustomHooksRequest) String() string { return proto.CompactTextString(m) } func (*BackupCustomHooksRequest) ProtoMessage() {} func (*BackupCustomHooksRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{50} + return fileDescriptor_e9b1768cf174c79b, []int{52} } func (m *BackupCustomHooksRequest) XXX_Unmarshal(b []byte) error { @@ -2441,7 +2524,7 @@ func (m *BackupCustomHooksResponse) Reset() { *m = BackupCustomHooksResp func (m *BackupCustomHooksResponse) String() string { return proto.CompactTextString(m) } func (*BackupCustomHooksResponse) ProtoMessage() {} func (*BackupCustomHooksResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{51} + return fileDescriptor_e9b1768cf174c79b, []int{53} } func (m *BackupCustomHooksResponse) XXX_Unmarshal(b []byte) error { @@ -2482,7 +2565,7 @@ func (m *CreateRepositoryFromBundleRequest) Reset() { *m = CreateReposit func (m *CreateRepositoryFromBundleRequest) String() string { return proto.CompactTextString(m) } func (*CreateRepositoryFromBundleRequest) ProtoMessage() {} func (*CreateRepositoryFromBundleRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{52} + return fileDescriptor_e9b1768cf174c79b, []int{54} } func (m *CreateRepositoryFromBundleRequest) XXX_Unmarshal(b []byte) error { @@ -2527,7 +2610,7 @@ func (m *CreateRepositoryFromBundleResponse) Reset() { *m = CreateReposi func (m *CreateRepositoryFromBundleResponse) String() string { return proto.CompactTextString(m) } func (*CreateRepositoryFromBundleResponse) ProtoMessage() {} func (*CreateRepositoryFromBundleResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{53} + return fileDescriptor_e9b1768cf174c79b, []int{55} } func (m *CreateRepositoryFromBundleResponse) XXX_Unmarshal(b []byte) error { @@ -2559,7 +2642,7 @@ func (m *FindLicenseRequest) Reset() { *m = FindLicenseRequest{} } func (m *FindLicenseRequest) String() string { return proto.CompactTextString(m) } func (*FindLicenseRequest) ProtoMessage() {} func (*FindLicenseRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{54} + return fileDescriptor_e9b1768cf174c79b, []int{56} } func (m *FindLicenseRequest) XXX_Unmarshal(b []byte) error { @@ -2598,7 +2681,7 @@ func (m *FindLicenseResponse) Reset() { *m = FindLicenseResponse{} } func (m *FindLicenseResponse) String() string { return proto.CompactTextString(m) } func (*FindLicenseResponse) ProtoMessage() {} func (*FindLicenseResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{55} + return fileDescriptor_e9b1768cf174c79b, []int{57} } func (m *FindLicenseResponse) XXX_Unmarshal(b []byte) error { @@ -2637,7 +2720,7 @@ func (m *GetInfoAttributesRequest) Reset() { *m = GetInfoAttributesReque func (m *GetInfoAttributesRequest) String() string { return proto.CompactTextString(m) } func (*GetInfoAttributesRequest) ProtoMessage() {} func (*GetInfoAttributesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{56} + return fileDescriptor_e9b1768cf174c79b, []int{58} } func (m *GetInfoAttributesRequest) XXX_Unmarshal(b []byte) error { @@ -2676,7 +2759,7 @@ func (m *GetInfoAttributesResponse) Reset() { *m = GetInfoAttributesResp func (m *GetInfoAttributesResponse) String() string { return proto.CompactTextString(m) } func (*GetInfoAttributesResponse) ProtoMessage() {} func (*GetInfoAttributesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{57} + return fileDescriptor_e9b1768cf174c79b, []int{59} } func (m *GetInfoAttributesResponse) XXX_Unmarshal(b []byte) error { @@ -2715,7 +2798,7 @@ func (m *CalculateChecksumRequest) Reset() { *m = CalculateChecksumReque func (m *CalculateChecksumRequest) String() string { return proto.CompactTextString(m) } func (*CalculateChecksumRequest) ProtoMessage() {} func (*CalculateChecksumRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{58} + return fileDescriptor_e9b1768cf174c79b, []int{60} } func (m *CalculateChecksumRequest) XXX_Unmarshal(b []byte) error { @@ -2754,7 +2837,7 @@ func (m *CalculateChecksumResponse) Reset() { *m = CalculateChecksumResp func (m *CalculateChecksumResponse) String() string { return proto.CompactTextString(m) } func (*CalculateChecksumResponse) ProtoMessage() {} func (*CalculateChecksumResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{59} + return fileDescriptor_e9b1768cf174c79b, []int{61} } func (m *CalculateChecksumResponse) XXX_Unmarshal(b []byte) error { @@ -2793,7 +2876,7 @@ func (m *GetSnapshotRequest) Reset() { *m = GetSnapshotRequest{} } func (m *GetSnapshotRequest) String() string { return proto.CompactTextString(m) } func (*GetSnapshotRequest) ProtoMessage() {} func (*GetSnapshotRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{60} + return fileDescriptor_e9b1768cf174c79b, []int{62} } func (m *GetSnapshotRequest) XXX_Unmarshal(b []byte) error { @@ -2832,7 +2915,7 @@ func (m *GetSnapshotResponse) Reset() { *m = GetSnapshotResponse{} } func (m *GetSnapshotResponse) String() string { return proto.CompactTextString(m) } func (*GetSnapshotResponse) ProtoMessage() {} func (*GetSnapshotResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{61} + return fileDescriptor_e9b1768cf174c79b, []int{63} } func (m *GetSnapshotResponse) XXX_Unmarshal(b []byte) error { @@ -2873,7 +2956,7 @@ func (m *CreateRepositoryFromSnapshotRequest) Reset() { *m = CreateRepos func (m *CreateRepositoryFromSnapshotRequest) String() string { return proto.CompactTextString(m) } func (*CreateRepositoryFromSnapshotRequest) ProtoMessage() {} func (*CreateRepositoryFromSnapshotRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{62} + return fileDescriptor_e9b1768cf174c79b, []int{64} } func (m *CreateRepositoryFromSnapshotRequest) XXX_Unmarshal(b []byte) error { @@ -2925,7 +3008,7 @@ func (m *CreateRepositoryFromSnapshotResponse) Reset() { *m = CreateRepo func (m *CreateRepositoryFromSnapshotResponse) String() string { return proto.CompactTextString(m) } func (*CreateRepositoryFromSnapshotResponse) ProtoMessage() {} func (*CreateRepositoryFromSnapshotResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{63} + return fileDescriptor_e9b1768cf174c79b, []int{65} } func (m *CreateRepositoryFromSnapshotResponse) XXX_Unmarshal(b []byte) error { @@ -2959,7 +3042,7 @@ func (m *GetRawChangesRequest) Reset() { *m = GetRawChangesRequest{} } func (m *GetRawChangesRequest) String() string { return proto.CompactTextString(m) } func (*GetRawChangesRequest) ProtoMessage() {} func (*GetRawChangesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{64} + return fileDescriptor_e9b1768cf174c79b, []int{66} } func (m *GetRawChangesRequest) XXX_Unmarshal(b []byte) error { @@ -3012,7 +3095,7 @@ func (m *GetRawChangesResponse) Reset() { *m = GetRawChangesResponse{} } func (m *GetRawChangesResponse) String() string { return proto.CompactTextString(m) } func (*GetRawChangesResponse) ProtoMessage() {} func (*GetRawChangesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{65} + return fileDescriptor_e9b1768cf174c79b, []int{67} } func (m *GetRawChangesResponse) XXX_Unmarshal(b []byte) error { @@ -3062,7 +3145,7 @@ func (m *GetRawChangesResponse_RawChange) Reset() { *m = GetRawChangesRe func (m *GetRawChangesResponse_RawChange) String() string { return proto.CompactTextString(m) } func (*GetRawChangesResponse_RawChange) ProtoMessage() {} func (*GetRawChangesResponse_RawChange) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{65, 0} + return fileDescriptor_e9b1768cf174c79b, []int{67, 0} } func (m *GetRawChangesResponse_RawChange) XXX_Unmarshal(b []byte) error { @@ -3174,7 +3257,7 @@ func (m *SearchFilesByNameRequest) Reset() { *m = SearchFilesByNameReque func (m *SearchFilesByNameRequest) String() string { return proto.CompactTextString(m) } func (*SearchFilesByNameRequest) ProtoMessage() {} func (*SearchFilesByNameRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{66} + return fileDescriptor_e9b1768cf174c79b, []int{68} } func (m *SearchFilesByNameRequest) XXX_Unmarshal(b []byte) error { @@ -3234,7 +3317,7 @@ func (m *SearchFilesByNameResponse) Reset() { *m = SearchFilesByNameResp func (m *SearchFilesByNameResponse) String() string { return proto.CompactTextString(m) } func (*SearchFilesByNameResponse) ProtoMessage() {} func (*SearchFilesByNameResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{67} + return fileDescriptor_e9b1768cf174c79b, []int{69} } func (m *SearchFilesByNameResponse) XXX_Unmarshal(b []byte) error { @@ -3276,7 +3359,7 @@ func (m *SearchFilesByContentRequest) Reset() { *m = SearchFilesByConten func (m *SearchFilesByContentRequest) String() string { return proto.CompactTextString(m) } func (*SearchFilesByContentRequest) ProtoMessage() {} func (*SearchFilesByContentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{68} + return fileDescriptor_e9b1768cf174c79b, []int{70} } func (m *SearchFilesByContentRequest) XXX_Unmarshal(b []byte) error { @@ -3338,7 +3421,7 @@ func (m *SearchFilesByContentResponse) Reset() { *m = SearchFilesByConte func (m *SearchFilesByContentResponse) String() string { return proto.CompactTextString(m) } func (*SearchFilesByContentResponse) ProtoMessage() {} func (*SearchFilesByContentResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{69} + return fileDescriptor_e9b1768cf174c79b, []int{71} } func (m *SearchFilesByContentResponse) XXX_Unmarshal(b []byte) error { @@ -3408,7 +3491,7 @@ func (m *Remote) Reset() { *m = Remote{} } func (m *Remote) String() string { return proto.CompactTextString(m) } func (*Remote) ProtoMessage() {} func (*Remote) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{70} + return fileDescriptor_e9b1768cf174c79b, []int{72} } func (m *Remote) XXX_Unmarshal(b []byte) error { @@ -3461,7 +3544,7 @@ func (m *GetObjectDirectorySizeRequest) Reset() { *m = GetObjectDirector func (m *GetObjectDirectorySizeRequest) String() string { return proto.CompactTextString(m) } func (*GetObjectDirectorySizeRequest) ProtoMessage() {} func (*GetObjectDirectorySizeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{71} + return fileDescriptor_e9b1768cf174c79b, []int{73} } func (m *GetObjectDirectorySizeRequest) XXX_Unmarshal(b []byte) error { @@ -3501,7 +3584,7 @@ func (m *GetObjectDirectorySizeResponse) Reset() { *m = GetObjectDirecto func (m *GetObjectDirectorySizeResponse) String() string { return proto.CompactTextString(m) } func (*GetObjectDirectorySizeResponse) ProtoMessage() {} func (*GetObjectDirectorySizeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{72} + return fileDescriptor_e9b1768cf174c79b, []int{74} } func (m *GetObjectDirectorySizeResponse) XXX_Unmarshal(b []byte) error { @@ -3542,7 +3625,7 @@ func (m *CloneFromPoolRequest) Reset() { *m = CloneFromPoolRequest{} } func (m *CloneFromPoolRequest) String() string { return proto.CompactTextString(m) } func (*CloneFromPoolRequest) ProtoMessage() {} func (*CloneFromPoolRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{73} + return fileDescriptor_e9b1768cf174c79b, []int{75} } func (m *CloneFromPoolRequest) XXX_Unmarshal(b []byte) error { @@ -3594,7 +3677,7 @@ func (m *CloneFromPoolResponse) Reset() { *m = CloneFromPoolResponse{} } func (m *CloneFromPoolResponse) String() string { return proto.CompactTextString(m) } func (*CloneFromPoolResponse) ProtoMessage() {} func (*CloneFromPoolResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{74} + return fileDescriptor_e9b1768cf174c79b, []int{76} } func (m *CloneFromPoolResponse) XXX_Unmarshal(b []byte) error { @@ -3628,7 +3711,7 @@ func (m *CloneFromPoolInternalRequest) Reset() { *m = CloneFromPoolInter func (m *CloneFromPoolInternalRequest) String() string { return proto.CompactTextString(m) } func (*CloneFromPoolInternalRequest) ProtoMessage() {} func (*CloneFromPoolInternalRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{75} + return fileDescriptor_e9b1768cf174c79b, []int{77} } func (m *CloneFromPoolInternalRequest) XXX_Unmarshal(b []byte) error { @@ -3680,7 +3763,7 @@ func (m *CloneFromPoolInternalResponse) Reset() { *m = CloneFromPoolInte func (m *CloneFromPoolInternalResponse) String() string { return proto.CompactTextString(m) } func (*CloneFromPoolInternalResponse) ProtoMessage() {} func (*CloneFromPoolInternalResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{76} + return fileDescriptor_e9b1768cf174c79b, []int{78} } func (m *CloneFromPoolInternalResponse) XXX_Unmarshal(b []byte) error { @@ -3712,7 +3795,7 @@ func (m *RemoveRepositoryRequest) Reset() { *m = RemoveRepositoryRequest func (m *RemoveRepositoryRequest) String() string { return proto.CompactTextString(m) } func (*RemoveRepositoryRequest) ProtoMessage() {} func (*RemoveRepositoryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{77} + return fileDescriptor_e9b1768cf174c79b, []int{79} } func (m *RemoveRepositoryRequest) XXX_Unmarshal(b []byte) error { @@ -3750,7 +3833,7 @@ func (m *RemoveRepositoryResponse) Reset() { *m = RemoveRepositoryRespon func (m *RemoveRepositoryResponse) String() string { return proto.CompactTextString(m) } func (*RemoveRepositoryResponse) ProtoMessage() {} func (*RemoveRepositoryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{78} + return fileDescriptor_e9b1768cf174c79b, []int{80} } func (m *RemoveRepositoryResponse) XXX_Unmarshal(b []byte) error { @@ -3783,7 +3866,7 @@ func (m *RenameRepositoryRequest) Reset() { *m = RenameRepositoryRequest func (m *RenameRepositoryRequest) String() string { return proto.CompactTextString(m) } func (*RenameRepositoryRequest) ProtoMessage() {} func (*RenameRepositoryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{79} + return fileDescriptor_e9b1768cf174c79b, []int{81} } func (m *RenameRepositoryRequest) XXX_Unmarshal(b []byte) error { @@ -3828,7 +3911,7 @@ func (m *RenameRepositoryResponse) Reset() { *m = RenameRepositoryRespon func (m *RenameRepositoryResponse) String() string { return proto.CompactTextString(m) } func (*RenameRepositoryResponse) ProtoMessage() {} func (*RenameRepositoryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{80} + return fileDescriptor_e9b1768cf174c79b, []int{82} } func (m *RenameRepositoryResponse) XXX_Unmarshal(b []byte) error { @@ -3861,7 +3944,7 @@ func (m *ReplicateRepositoryRequest) Reset() { *m = ReplicateRepositoryR func (m *ReplicateRepositoryRequest) String() string { return proto.CompactTextString(m) } func (*ReplicateRepositoryRequest) ProtoMessage() {} func (*ReplicateRepositoryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{81} + return fileDescriptor_e9b1768cf174c79b, []int{83} } func (m *ReplicateRepositoryRequest) XXX_Unmarshal(b []byte) error { @@ -3906,7 +3989,7 @@ func (m *ReplicateRepositoryResponse) Reset() { *m = ReplicateRepository func (m *ReplicateRepositoryResponse) String() string { return proto.CompactTextString(m) } func (*ReplicateRepositoryResponse) ProtoMessage() {} func (*ReplicateRepositoryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{82} + return fileDescriptor_e9b1768cf174c79b, []int{84} } func (m *ReplicateRepositoryResponse) XXX_Unmarshal(b []byte) error { @@ -3938,7 +4021,7 @@ func (m *OptimizeRepositoryRequest) Reset() { *m = OptimizeRepositoryReq func (m *OptimizeRepositoryRequest) String() string { return proto.CompactTextString(m) } func (*OptimizeRepositoryRequest) ProtoMessage() {} func (*OptimizeRepositoryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{83} + return fileDescriptor_e9b1768cf174c79b, []int{85} } func (m *OptimizeRepositoryRequest) XXX_Unmarshal(b []byte) error { @@ -3976,7 +4059,7 @@ func (m *OptimizeRepositoryResponse) Reset() { *m = OptimizeRepositoryRe func (m *OptimizeRepositoryResponse) String() string { return proto.CompactTextString(m) } func (*OptimizeRepositoryResponse) ProtoMessage() {} func (*OptimizeRepositoryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e9b1768cf174c79b, []int{84} + return fileDescriptor_e9b1768cf174c79b, []int{86} } func (m *OptimizeRepositoryResponse) XXX_Unmarshal(b []byte) error { @@ -4045,6 +4128,8 @@ func init() { proto.RegisterType((*CreateRepositoryFromURLResponse)(nil), "gitaly.CreateRepositoryFromURLResponse") proto.RegisterType((*CreateBundleRequest)(nil), "gitaly.CreateBundleRequest") proto.RegisterType((*CreateBundleResponse)(nil), "gitaly.CreateBundleResponse") + proto.RegisterType((*GetConfigRequest)(nil), "gitaly.GetConfigRequest") + proto.RegisterType((*GetConfigResponse)(nil), "gitaly.GetConfigResponse") proto.RegisterType((*SetConfigRequest)(nil), "gitaly.SetConfigRequest") proto.RegisterType((*SetConfigRequest_Entry)(nil), "gitaly.SetConfigRequest.Entry") proto.RegisterType((*SetConfigResponse)(nil), "gitaly.SetConfigResponse") @@ -4093,204 +4178,206 @@ func init() { func init() { proto.RegisterFile("repository-service.proto", fileDescriptor_e9b1768cf174c79b) } var fileDescriptor_e9b1768cf174c79b = []byte{ - // 3146 bytes of a gzipped FileDescriptorProto + // 3177 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4b, 0x6f, 0x1b, 0xc9, - 0x11, 0x36, 0x25, 0x8a, 0x8f, 0x22, 0x65, 0x53, 0x2d, 0xd9, 0xa2, 0xc6, 0x92, 0x65, 0x8f, 0xbd, - 0x5e, 0xaf, 0xd7, 0x2b, 0xef, 0xca, 0x01, 0xe2, 0x24, 0x08, 0x02, 0x51, 0x6f, 0xdb, 0x7a, 0xec, - 0x48, 0xce, 0x62, 0x0d, 0x2c, 0xb8, 0xc3, 0x61, 0x53, 0x9c, 0x68, 0x38, 0x43, 0xf7, 0x34, 0x2d, - 0x6b, 0x81, 0x1c, 0x12, 0x20, 0x87, 0x00, 0xc1, 0x9e, 0x82, 0x6c, 0x8e, 0x39, 0xe7, 0x17, 0xe4, - 0x92, 0x43, 0x2e, 0xb9, 0xe4, 0x17, 0x2c, 0xf2, 0x0f, 0x02, 0xe4, 0x0f, 0xe4, 0x14, 0xf4, 0x63, - 0xa6, 0x67, 0x38, 0x33, 0x5c, 0x07, 0x24, 0x36, 0xb7, 0xe9, 0xaa, 0xee, 0xaa, 0xea, 0xea, 0xea, - 0x47, 0x7d, 0x35, 0x50, 0x27, 0xb8, 0xef, 0xf9, 0x36, 0xf5, 0xc8, 0xe5, 0x47, 0x3e, 0x26, 0x6f, - 0x6c, 0x0b, 0xaf, 0xf5, 0x89, 0x47, 0x3d, 0x54, 0x38, 0xb3, 0xa9, 0xe9, 0x5c, 0x6a, 0xe0, 0xd8, - 0x2e, 0x15, 0x34, 0xad, 0xea, 0x77, 0x4d, 0x82, 0xdb, 0xa2, 0xa5, 0x9f, 0xc0, 0xa2, 0x11, 0x8e, - 0xde, 0x7e, 0x6b, 0xfb, 0xd4, 0x37, 0xf0, 0xeb, 0x01, 0xf6, 0x29, 0x7a, 0x0a, 0xa0, 0x04, 0xd7, - 0x73, 0xb7, 0x73, 0x0f, 0x2a, 0xeb, 0x68, 0x4d, 0x48, 0x5c, 0x53, 0x83, 0x1a, 0xf9, 0x3f, 0xfe, - 0xfd, 0x51, 0xce, 0x88, 0xf4, 0xd5, 0xd7, 0xa1, 0x9e, 0x14, 0xea, 0xf7, 0x3d, 0xd7, 0xc7, 0xe8, - 0x06, 0x14, 0x30, 0xa7, 0x70, 0x89, 0x25, 0x43, 0xb6, 0xf4, 0x53, 0x3e, 0xc6, 0xb4, 0xce, 0xf7, - 0x5d, 0x8b, 0xe0, 0x1e, 0x76, 0xa9, 0xe9, 0x8c, 0x6f, 0xc9, 0x4d, 0x58, 0x4a, 0x91, 0x2a, 0x4c, - 0xd1, 0x09, 0xcc, 0x09, 0xe6, 0xce, 0xc0, 0x19, 0x5f, 0x17, 0xba, 0x0b, 0xb3, 0x16, 0xc1, 0x26, - 0xc5, 0xcd, 0x96, 0x4d, 0x7b, 0x66, 0xbf, 0x3e, 0xc5, 0x27, 0x58, 0x15, 0xc4, 0x06, 0xa7, 0xe9, - 0x0b, 0x80, 0xa2, 0x3a, 0xa5, 0x25, 0x07, 0x30, 0x77, 0x60, 0xb7, 0xdf, 0x0a, 0xce, 0xf8, 0xb3, - 0x5e, 0x00, 0x14, 0x15, 0x27, 0x95, 0xfc, 0x2e, 0x07, 0xd7, 0x77, 0x4d, 0xd2, 0x32, 0xcf, 0xf0, - 0xa6, 0xe7, 0x38, 0xd8, 0xa2, 0xdf, 0xcf, 0x9c, 0xd1, 0x02, 0xcc, 0xf4, 0xc9, 0xc0, 0xc5, 0xf5, - 0x69, 0xce, 0x14, 0x0d, 0xbd, 0x0e, 0x37, 0x86, 0xad, 0x91, 0x86, 0xfe, 0x23, 0x07, 0x8b, 0x9f, - 0x11, 0x9b, 0xe2, 0x4d, 0xaf, 0xd7, 0xb3, 0xe9, 0x2e, 0x31, 0xfb, 0xdd, 0xf1, 0x4d, 0x3d, 0x81, - 0x59, 0xbf, 0xef, 0xd8, 0xf4, 0x84, 0x12, 0x93, 0xe2, 0xb3, 0x4b, 0x6e, 0xea, 0xd5, 0xf5, 0x8f, - 0x82, 0xc1, 0x19, 0x1a, 0xd7, 0x4e, 0xa2, 0x83, 0x8c, 0xb8, 0x0c, 0xfd, 0x0e, 0xcc, 0xc6, 0xf8, - 0xa8, 0x06, 0xd5, 0x13, 0xfb, 0x2b, 0x7c, 0x30, 0x70, 0xa8, 0xdd, 0x77, 0x70, 0xed, 0x8a, 0xae, - 0x41, 0x3d, 0x29, 0x5a, 0xce, 0xf4, 0x19, 0x5c, 0xdd, 0x74, 0xb0, 0xe9, 0x0e, 0xfa, 0xe3, 0x2f, - 0xfa, 0x1c, 0x5c, 0x0b, 0x65, 0x49, 0xf1, 0x9f, 0xc2, 0x75, 0x35, 0x84, 0x99, 0x35, 0xbe, 0x96, - 0x47, 0x70, 0x63, 0x58, 0xa4, 0xdc, 0xd8, 0x08, 0xf2, 0xbe, 0xfd, 0x15, 0xe6, 0xd2, 0xa6, 0x0d, - 0xfe, 0xad, 0xbf, 0x86, 0xa5, 0x8d, 0x7e, 0xdf, 0xb9, 0xdc, 0xb5, 0xa9, 0x49, 0x29, 0xb1, 0x5b, - 0x03, 0x8a, 0xc7, 0x3f, 0x5f, 0x90, 0x06, 0x25, 0x82, 0xdf, 0xd8, 0xbe, 0xed, 0xb9, 0x7c, 0x15, - 0xab, 0x46, 0xd8, 0xd6, 0x97, 0x41, 0x4b, 0x53, 0x29, 0x3d, 0xf2, 0xef, 0x29, 0x40, 0x3b, 0x98, - 0x5a, 0x5d, 0x03, 0xf7, 0x3c, 0x3a, 0xbe, 0x3f, 0xd8, 0x71, 0x46, 0xb8, 0x28, 0x6e, 0x48, 0xd9, - 0x90, 0x2d, 0x16, 0xf3, 0x1d, 0x8f, 0x58, 0x61, 0xcc, 0xf3, 0x06, 0x5a, 0x84, 0xa2, 0xeb, 0x35, - 0xa9, 0x79, 0xe6, 0xd7, 0xf3, 0xe2, 0xf4, 0x73, 0xbd, 0x53, 0xf3, 0xcc, 0x47, 0x75, 0x28, 0x52, - 0xbb, 0x87, 0xbd, 0x01, 0xad, 0xcf, 0xdc, 0xce, 0x3d, 0x98, 0x31, 0x82, 0x26, 0x1b, 0xe2, 0xfb, - 0xdd, 0xe6, 0x39, 0xbe, 0xac, 0x17, 0x84, 0x06, 0xdf, 0xef, 0x3e, 0xc7, 0x97, 0x68, 0x15, 0x2a, - 0xe7, 0xae, 0x77, 0xe1, 0x36, 0xbb, 0x1e, 0x3b, 0x4d, 0x8b, 0x9c, 0x09, 0x9c, 0xb4, 0xc7, 0x28, - 0x68, 0x09, 0x4a, 0xae, 0xd7, 0x14, 0x3b, 0xaf, 0xcc, 0xb5, 0x15, 0x5d, 0xef, 0x98, 0x35, 0xd1, - 0x13, 0x98, 0x15, 0x76, 0x36, 0xfb, 0x26, 0x31, 0x7b, 0x7e, 0x1d, 0xf8, 0x94, 0xaf, 0xaa, 0x29, - 0x73, 0xef, 0x54, 0x45, 0xa7, 0x63, 0xde, 0x07, 0x3d, 0x02, 0x64, 0x75, 0xb1, 0x75, 0xce, 0xed, - 0x6f, 0x5a, 0x5d, 0xd3, 0x3d, 0xc3, 0xed, 0x7a, 0x85, 0x4b, 0xae, 0x71, 0x0e, 0x9b, 0xca, 0xa6, - 0xa0, 0x3f, 0xcb, 0x97, 0x4a, 0xb5, 0xb2, 0xfe, 0x14, 0xe6, 0x63, 0xee, 0x96, 0xb1, 0x72, 0x07, - 0xaa, 0x31, 0x21, 0xe2, 0x2a, 0xa8, 0x50, 0x35, 0x9e, 0x5d, 0x4c, 0x9b, 0xfc, 0x10, 0x51, 0xee, - 0x1f, 0x3f, 0x7a, 0x35, 0xa8, 0x27, 0x85, 0xca, 0xd0, 0xf8, 0xd7, 0x14, 0xcc, 0xed, 0x62, 0xba, - 0x41, 0xac, 0xae, 0xfd, 0x66, 0x02, 0x91, 0x71, 0x13, 0xca, 0x16, 0xdf, 0xf2, 0x4d, 0xbb, 0x2d, - 0x83, 0xa3, 0x24, 0x08, 0xfb, 0x6d, 0x16, 0x36, 0x7d, 0x82, 0x3b, 0xf6, 0x5b, 0x1e, 0x1f, 0x65, - 0x43, 0xb6, 0xd0, 0x53, 0x28, 0x74, 0x3c, 0xd2, 0x33, 0x29, 0x8f, 0x8f, 0xab, 0xeb, 0xb7, 0x03, - 0x55, 0x09, 0xcb, 0xd6, 0x76, 0x78, 0x3f, 0x43, 0xf6, 0x67, 0xdb, 0xaf, 0x6f, 0xd2, 0x2e, 0x0f, - 0x9f, 0xaa, 0xc1, 0xbf, 0x59, 0x54, 0xe1, 0xb7, 0x96, 0x33, 0x68, 0xe3, 0x7a, 0xe1, 0xf6, 0xf4, - 0x83, 0xaa, 0x11, 0x34, 0xd1, 0x0a, 0x00, 0x76, 0xec, 0x36, 0x5b, 0x7f, 0xda, 0xe5, 0xb1, 0x53, - 0x32, 0xca, 0x9c, 0x72, 0xcc, 0x06, 0x3e, 0x84, 0x39, 0xdb, 0xe5, 0x3d, 0x9b, 0x4e, 0xc7, 0x6f, - 0xb6, 0x1c, 0xaf, 0xe5, 0xd7, 0x4b, 0xbc, 0xd7, 0x35, 0xc9, 0x78, 0xd1, 0xf1, 0x1b, 0x8c, 0xac, - 0x3f, 0x81, 0x82, 0x30, 0x05, 0x15, 0x61, 0xfa, 0xd5, 0xfe, 0x71, 0xed, 0x0a, 0xfb, 0x38, 0xdd, - 0x30, 0x6a, 0x39, 0x04, 0x50, 0x38, 0xdd, 0x30, 0x9a, 0xbb, 0xaf, 0x6a, 0x53, 0xa8, 0x02, 0x45, - 0xf6, 0xdd, 0x78, 0xb5, 0x5e, 0x9b, 0xd6, 0x1f, 0x00, 0x8a, 0xce, 0x48, 0x1d, 0x21, 0x6d, 0x93, - 0x9a, 0xdc, 0xcd, 0x55, 0x83, 0x7f, 0xb3, 0x38, 0xd8, 0x33, 0xfd, 0x17, 0x9e, 0x65, 0x3a, 0x0d, - 0x62, 0xba, 0x56, 0x77, 0x02, 0x07, 0x88, 0xfe, 0x31, 0xd4, 0x93, 0x42, 0xa5, 0x11, 0x0b, 0x30, - 0xf3, 0xc6, 0x74, 0x06, 0x58, 0x06, 0xa5, 0x68, 0xe8, 0xdf, 0xe6, 0xa0, 0xce, 0x23, 0xf9, 0xc4, - 0x1b, 0x10, 0x0b, 0x8b, 0x51, 0xe3, 0x07, 0xc9, 0xcf, 0x60, 0xce, 0xe7, 0x02, 0x9b, 0x11, 0x01, - 0x53, 0x59, 0x02, 0x8c, 0x9a, 0xe8, 0x6c, 0xc4, 0x2e, 0x60, 0x29, 0xa0, 0xc5, 0x4d, 0xe2, 0xf1, - 0x54, 0x35, 0xaa, 0x7e, 0xc4, 0x4c, 0xb6, 0xda, 0xd4, 0x24, 0x67, 0x98, 0x36, 0x09, 0xee, 0xf0, - 0xc8, 0xaa, 0x1a, 0x65, 0x41, 0x31, 0x70, 0x47, 0x7f, 0x02, 0x4b, 0x29, 0x53, 0x53, 0xef, 0x35, - 0x82, 0xfd, 0x81, 0x43, 0x83, 0xf7, 0x9a, 0x68, 0xe9, 0xbb, 0x50, 0xd9, 0xf1, 0x27, 0xf1, 0x58, - 0xb9, 0x07, 0x55, 0x21, 0x48, 0xf9, 0x1f, 0x13, 0xe2, 0x11, 0x19, 0x05, 0xa2, 0xa1, 0xff, 0x25, - 0x07, 0xd7, 0xf8, 0x35, 0x6a, 0xe0, 0xce, 0xf8, 0x6e, 0xaf, 0xc1, 0x34, 0xf3, 0x84, 0xb8, 0x3b, - 0xd8, 0x67, 0xec, 0x4a, 0x99, 0x8e, 0x5f, 0x29, 0xec, 0xb4, 0xf2, 0x9c, 0x76, 0x33, 0xe4, 0x0b, - 0x07, 0x56, 0x3c, 0xa7, 0x6d, 0x04, 0x5d, 0xc2, 0xe3, 0x7e, 0x26, 0x72, 0xdc, 0x3f, 0xcb, 0x97, - 0x0a, 0xb5, 0xa2, 0x5e, 0x87, 0x9a, 0xb2, 0x5c, 0x4c, 0xf2, 0x59, 0xbe, 0x94, 0xab, 0x4d, 0xe9, - 0x2e, 0x2c, 0xec, 0xd8, 0x6e, 0xfb, 0x00, 0x93, 0x33, 0xdc, 0x30, 0xfd, 0x09, 0x1c, 0x3a, 0xcb, - 0x50, 0x0e, 0xcc, 0xf4, 0xeb, 0x53, 0x7c, 0xcf, 0x2b, 0x82, 0xfe, 0x21, 0x5c, 0x1f, 0xd2, 0xa7, - 0x36, 0x5e, 0xcb, 0xf4, 0x45, 0xc8, 0x97, 0x0d, 0xfe, 0xad, 0x7f, 0x9d, 0x83, 0x39, 0x71, 0x58, - 0xee, 0x78, 0xe4, 0xfc, 0xff, 0x1f, 0xea, 0xec, 0x55, 0x1b, 0xb5, 0x27, 0x7c, 0xc4, 0x2f, 0xed, - 0xfb, 0x06, 0x66, 0x26, 0xef, 0xbb, 0xc7, 0xc4, 0x3b, 0x23, 0xd8, 0xf7, 0x27, 0x72, 0x7a, 0x13, - 0x2e, 0x34, 0x72, 0x7a, 0x0b, 0xc2, 0x7e, 0x5b, 0xff, 0x29, 0x68, 0x69, 0x3a, 0xa5, 0x33, 0x57, - 0xa1, 0x62, 0xbb, 0xcd, 0xbe, 0x24, 0xcb, 0x6d, 0x03, 0x76, 0xd8, 0x51, 0x98, 0x7c, 0xf2, 0x7a, - 0x60, 0xfa, 0xdd, 0x09, 0x9b, 0xec, 0x73, 0xa1, 0x11, 0x93, 0x05, 0x21, 0x30, 0x39, 0xa9, 0xf3, - 0x5d, 0x4d, 0x76, 0xe0, 0xd6, 0xf0, 0xc5, 0xb9, 0x43, 0xbc, 0xde, 0x4b, 0xe3, 0xc5, 0x44, 0x36, - 0xe3, 0x80, 0x38, 0xd2, 0x62, 0xf6, 0xa9, 0xdf, 0x81, 0xd5, 0x4c, 0x6d, 0x72, 0xd9, 0x8f, 0x60, - 0x5e, 0x74, 0x69, 0x0c, 0xdc, 0xb6, 0x33, 0x81, 0x87, 0xed, 0x43, 0x58, 0x88, 0x0b, 0x1c, 0x71, - 0x27, 0x7d, 0x3d, 0x05, 0xb5, 0x13, 0x4c, 0x37, 0x3d, 0xb7, 0x63, 0x9f, 0x8d, 0xef, 0x80, 0xa7, - 0x50, 0xc4, 0x2e, 0x25, 0x36, 0x16, 0x5b, 0xb6, 0xb2, 0x7e, 0x2b, 0x18, 0x36, 0xac, 0x64, 0x6d, - 0xdb, 0xa5, 0xe4, 0xd2, 0x08, 0xba, 0x6b, 0xbf, 0xc9, 0xc1, 0x0c, 0x27, 0x31, 0x27, 0xb2, 0x27, - 0xa2, 0xd8, 0xc0, 0xec, 0x13, 0xad, 0x40, 0x99, 0x5f, 0x5d, 0x4d, 0x9f, 0x12, 0xe1, 0xdc, 0xbd, - 0x2b, 0x46, 0x89, 0x93, 0x4e, 0x28, 0x41, 0x77, 0xa0, 0x22, 0xd8, 0xb6, 0x4b, 0x9f, 0xac, 0xf3, - 0x33, 0x6f, 0x66, 0xef, 0x8a, 0x01, 0x9c, 0xb8, 0xcf, 0x68, 0x68, 0x15, 0x44, 0xab, 0xd9, 0xf2, - 0x3c, 0x47, 0x3c, 0x58, 0xf7, 0xae, 0x18, 0x42, 0x6a, 0xc3, 0xf3, 0x9c, 0x46, 0x51, 0x5e, 0x95, - 0xfa, 0x3c, 0xcc, 0x45, 0x4c, 0x95, 0x4b, 0x64, 0xc1, 0xfc, 0x16, 0x76, 0x30, 0xcb, 0x7c, 0x26, - 0xe3, 0x27, 0x04, 0xf9, 0x73, 0x7c, 0x29, 0x9c, 0x54, 0x36, 0xf8, 0xb7, 0x7e, 0x03, 0x16, 0xe2, - 0x4a, 0xa4, 0x72, 0x9b, 0x25, 0xfe, 0x3e, 0xf5, 0x08, 0xde, 0x1c, 0xf8, 0xd4, 0xeb, 0xed, 0x79, - 0xde, 0xb9, 0x3f, 0x11, 0x13, 0x78, 0x34, 0x4c, 0x45, 0xa2, 0x61, 0x19, 0xb4, 0x34, 0x55, 0xd2, - 0x90, 0x53, 0xa8, 0x37, 0x4c, 0xeb, 0x7c, 0xd0, 0x9f, 0xa4, 0x1d, 0xfa, 0x63, 0x58, 0x4a, 0x91, - 0x3a, 0x22, 0x64, 0x5f, 0xc3, 0x9d, 0xb4, 0x2d, 0x35, 0xa1, 0xdd, 0x93, 0xea, 0x97, 0x7b, 0xa0, - 0x8f, 0x52, 0x29, 0xfd, 0x73, 0x08, 0x88, 0xdd, 0x49, 0x2f, 0x6c, 0x0b, 0xbb, 0x13, 0xb8, 0x01, - 0xf5, 0x4d, 0x98, 0x8f, 0xc9, 0x93, 0x3e, 0x79, 0x04, 0xc8, 0x11, 0xa4, 0xa6, 0xdf, 0xf5, 0x08, - 0x6d, 0xba, 0x66, 0x2f, 0xb8, 0xef, 0x6a, 0x92, 0x73, 0xc2, 0x18, 0x87, 0x66, 0x8f, 0x2f, 0xda, - 0x2e, 0xa6, 0xfb, 0x6e, 0xc7, 0xdb, 0x98, 0x5c, 0xda, 0xaa, 0xff, 0x04, 0x96, 0x52, 0xa4, 0x4a, - 0x03, 0x6f, 0x01, 0xa8, 0x7c, 0x55, 0x2e, 0x5d, 0x84, 0xc2, 0x4c, 0xda, 0x34, 0x1d, 0x6b, 0xe0, - 0x98, 0x14, 0x6f, 0xb2, 0x64, 0xcb, 0x1f, 0xf4, 0xc6, 0x37, 0xe9, 0x87, 0xb0, 0x94, 0x22, 0x55, - 0x9a, 0xa4, 0x41, 0xc9, 0x92, 0x34, 0xe9, 0xa9, 0xb0, 0xcd, 0x96, 0x6d, 0x17, 0xd3, 0x13, 0xd7, - 0xec, 0xfb, 0x5d, 0x6f, 0x7c, 0x20, 0x49, 0xff, 0x00, 0xe6, 0x63, 0xf2, 0x46, 0x84, 0xf2, 0x37, - 0x39, 0xb8, 0x9b, 0x16, 0x58, 0x13, 0x33, 0x86, 0x65, 0xce, 0x5d, 0x4a, 0xfb, 0x4d, 0x75, 0x2d, - 0x15, 0x59, 0xfb, 0x25, 0x71, 0xd8, 0x25, 0xcb, 0x59, 0xe6, 0x80, 0x76, 0x65, 0xee, 0xc6, 0xfb, - 0x6e, 0x0c, 0x68, 0x57, 0xbf, 0x0f, 0xf7, 0x46, 0x1b, 0x26, 0x63, 0xfe, 0x0f, 0x39, 0x58, 0xd8, - 0xc5, 0xd4, 0x30, 0x2f, 0x44, 0xb6, 0xeb, 0x4f, 0x04, 0x88, 0xeb, 0x10, 0xaf, 0xd7, 0x8c, 0xe1, - 0x22, 0x65, 0xa3, 0xca, 0x88, 0xe1, 0x2b, 0x75, 0x15, 0x2a, 0xd4, 0x6b, 0xc6, 0xde, 0xb9, 0x65, - 0x03, 0xa8, 0x17, 0x74, 0xd0, 0xff, 0x9a, 0x87, 0xeb, 0x43, 0x86, 0xc9, 0x85, 0xd8, 0x83, 0x0a, - 0x31, 0x2f, 0x64, 0xc2, 0xce, 0xe2, 0x93, 0xdd, 0x53, 0xef, 0x47, 0xb2, 0xd3, 0xe4, 0x98, 0xb5, - 0x90, 0x64, 0x00, 0x09, 0xb9, 0xda, 0xb7, 0xd3, 0x50, 0x0e, 0x39, 0x68, 0x11, 0x8a, 0x2c, 0xbb, - 0x64, 0x4f, 0x16, 0x11, 0x62, 0x05, 0xd6, 0xdc, 0x6f, 0x87, 0x70, 0xd2, 0x94, 0x82, 0x93, 0xd0, - 0x0a, 0x94, 0x5c, 0x7c, 0x21, 0x72, 0x56, 0x6e, 0x7c, 0x63, 0xaa, 0x9e, 0x33, 0x8a, 0x2e, 0xbe, - 0xe0, 0x59, 0xeb, 0x0a, 0x94, 0xd8, 0x3b, 0x9d, 0xb3, 0xf3, 0x8a, 0xed, 0x39, 0x6d, 0xce, 0x3e, - 0x82, 0xb2, 0xd7, 0xc7, 0xc4, 0xa4, 0x6c, 0xee, 0x33, 0x3c, 0xbd, 0xfe, 0xe4, 0x1d, 0x27, 0xb0, - 0x76, 0x14, 0x0c, 0x34, 0x94, 0x0c, 0xe6, 0x73, 0xe6, 0x13, 0x25, 0x54, 0x00, 0x34, 0x55, 0x62, - 0x5e, 0x84, 0xfd, 0x59, 0x2c, 0x31, 0xa3, 0x7a, 0x5e, 0x1b, 0xf3, 0x3c, 0x7b, 0x86, 0x1b, 0x74, - 0xe0, 0xb5, 0x31, 0x07, 0x68, 0xf0, 0x85, 0x60, 0x95, 0x04, 0xcb, 0xc5, 0x17, 0x9c, 0x75, 0x0f, - 0xae, 0x06, 0x33, 0x6d, 0xb6, 0x2e, 0xd9, 0x89, 0x50, 0x16, 0x79, 0x9d, 0x9c, 0x6b, 0x83, 0xd1, - 0x58, 0xaf, 0x60, 0xc2, 0xb2, 0x17, 0x88, 0x5e, 0x72, 0xca, 0xbc, 0x97, 0x6e, 0x43, 0x59, 0x99, - 0x53, 0x81, 0xe2, 0xcb, 0xc3, 0xe7, 0x87, 0x47, 0x9f, 0x1d, 0xd6, 0xae, 0xa0, 0x32, 0xcc, 0x6c, - 0x6c, 0x6d, 0x6d, 0x6f, 0x89, 0x4c, 0x7d, 0xf3, 0xe8, 0x78, 0x7f, 0x7b, 0x4b, 0x64, 0xea, 0x5b, - 0xdb, 0x2f, 0xb6, 0x4f, 0xb7, 0xb7, 0x6a, 0xd3, 0xa8, 0x0a, 0xa5, 0x83, 0xa3, 0xad, 0xfd, 0x1d, - 0xc6, 0xca, 0x33, 0x96, 0xb1, 0x7d, 0xb8, 0x71, 0xb0, 0xbd, 0x55, 0x9b, 0x41, 0x35, 0xa8, 0x9e, - 0x7e, 0x7e, 0xbc, 0xdd, 0xdc, 0xdc, 0xdb, 0x38, 0xdc, 0xdd, 0xde, 0xaa, 0x15, 0xf4, 0xdf, 0xe7, - 0xa0, 0x7e, 0x82, 0x4d, 0x62, 0x75, 0x77, 0x6c, 0x07, 0xfb, 0x8d, 0x4b, 0x76, 0x9a, 0x8e, 0x1f, - 0xdc, 0x0b, 0x30, 0xf3, 0x7a, 0x80, 0x65, 0xba, 0x50, 0x36, 0x44, 0x23, 0x48, 0xe2, 0xa6, 0x55, - 0x12, 0x77, 0x03, 0x0a, 0x1d, 0xdb, 0xa1, 0x98, 0x88, 0xe5, 0x37, 0x64, 0x4b, 0xff, 0x04, 0x96, - 0x52, 0xac, 0x52, 0xf9, 0x66, 0x87, 0x91, 0x79, 0x4c, 0x57, 0x0d, 0xd1, 0xd0, 0xff, 0x9c, 0x83, - 0x9b, 0xb1, 0x31, 0x9b, 0x9e, 0x4b, 0xb1, 0x4b, 0xbf, 0xbf, 0xc9, 0x7c, 0x00, 0x35, 0xab, 0x3b, - 0x70, 0xcf, 0x31, 0xcb, 0x3c, 0x85, 0xad, 0x12, 0x34, 0xbc, 0x26, 0xe9, 0xe1, 0x79, 0x72, 0x09, - 0xcb, 0xe9, 0xb6, 0xca, 0x29, 0xd6, 0xa1, 0xd8, 0x33, 0xa9, 0xd5, 0x0d, 0x27, 0x19, 0x34, 0xd1, - 0x0a, 0x00, 0xff, 0x6c, 0x46, 0x6e, 0xef, 0x32, 0xa7, 0x6c, 0x99, 0xd4, 0x44, 0xb7, 0xa1, 0x8a, - 0xdd, 0x76, 0xd3, 0xeb, 0x34, 0x39, 0x4d, 0x82, 0x99, 0x80, 0xdd, 0xf6, 0x51, 0xe7, 0x80, 0x51, - 0xf4, 0xdf, 0xe6, 0xa0, 0x20, 0xc0, 0xbd, 0xe0, 0x1d, 0x9f, 0x0b, 0xdf, 0xf1, 0xe8, 0xc7, 0xb0, - 0x14, 0x1e, 0x96, 0x1e, 0xb1, 0xbf, 0xe2, 0x21, 0xd8, 0xec, 0x62, 0xb3, 0x8d, 0x89, 0x3c, 0x7d, - 0x16, 0x83, 0xc3, 0x33, 0xe4, 0xef, 0x71, 0x36, 0x7a, 0x0f, 0xae, 0xf6, 0x6c, 0x96, 0xfa, 0x37, - 0x09, 0xee, 0xf4, 0xcc, 0xbe, 0x5f, 0xcf, 0xf3, 0x67, 0xdf, 0xac, 0xa0, 0x1a, 0x82, 0xf8, 0x2c, - 0x5f, 0x9a, 0xaa, 0x4d, 0x1b, 0x79, 0x76, 0x9b, 0xeb, 0x9f, 0xc3, 0xca, 0x2e, 0xa6, 0x47, 0xad, - 0x5f, 0x60, 0x8b, 0x6e, 0xd9, 0x04, 0x5b, 0x93, 0x83, 0xbd, 0x7f, 0x00, 0xb7, 0xb2, 0x44, 0x8f, - 0x80, 0xbf, 0xff, 0x94, 0x83, 0x85, 0x4d, 0xc7, 0x73, 0x31, 0xbb, 0x05, 0x8e, 0x3d, 0x6f, 0x02, - 0x45, 0xa6, 0xfb, 0x90, 0xef, 0xb3, 0xd7, 0xf8, 0x50, 0xe2, 0x2c, 0x2c, 0xe3, 0x2a, 0x38, 0x1f, - 0xdd, 0x0f, 0x71, 0xe9, 0xe9, 0x54, 0x68, 0x57, 0x72, 0xf5, 0x45, 0xb8, 0x3e, 0x64, 0xa1, 0x8c, - 0xa9, 0xbf, 0xe5, 0x60, 0x39, 0xc6, 0xd9, 0x77, 0x29, 0x26, 0xae, 0xf9, 0x3d, 0xce, 0x21, 0x15, - 0x31, 0x98, 0xfe, 0x1f, 0x10, 0x83, 0x55, 0x58, 0xc9, 0x98, 0x82, 0x9c, 0x24, 0xaf, 0x7e, 0xf6, - 0xbc, 0x37, 0x93, 0x06, 0x99, 0x93, 0x42, 0xa5, 0xc2, 0xb7, 0x4c, 0xa1, 0xcb, 0x8f, 0x9f, 0x89, - 0x29, 0xe4, 0xf7, 0x10, 0x76, 0x4c, 0x6a, 0xbf, 0x91, 0x78, 0xae, 0xbc, 0xfb, 0x03, 0x22, 0xbb, - 0x0a, 0x84, 0x55, 0xc3, 0x9a, 0xa5, 0x55, 0xbf, 0xce, 0xb1, 0x14, 0xa6, 0xef, 0xd8, 0xd6, 0x64, - 0xf1, 0x76, 0xf4, 0x10, 0x0a, 0x62, 0x51, 0x46, 0x00, 0x3d, 0xb2, 0x87, 0xbe, 0x02, 0x37, 0x53, - 0x6d, 0x90, 0x36, 0xbe, 0x84, 0xa5, 0xa3, 0x3e, 0xb5, 0x7b, 0x7c, 0xcf, 0x4d, 0x6e, 0xb1, 0x96, - 0x41, 0x4b, 0x13, 0x2b, 0x94, 0xae, 0xff, 0xf3, 0x16, 0x2f, 0x11, 0x07, 0xe5, 0x2e, 0x51, 0x5b, - 0x47, 0x5f, 0x40, 0x6d, 0xb8, 0xbc, 0x8d, 0x56, 0x93, 0xda, 0x62, 0xd5, 0x74, 0xed, 0x76, 0x76, - 0x07, 0x39, 0xc3, 0xc2, 0x7f, 0xbe, 0x79, 0x30, 0x55, 0x9a, 0x42, 0x5f, 0x06, 0x65, 0xe9, 0x48, - 0xcd, 0x1a, 0x45, 0x87, 0xa7, 0x16, 0xc9, 0xb5, 0x3b, 0x23, 0x7a, 0xc4, 0x34, 0xe4, 0xd0, 0x73, - 0x00, 0x55, 0x84, 0x46, 0x4b, 0xf1, 0x81, 0x91, 0x62, 0xb8, 0xa6, 0xa5, 0xb1, 0x92, 0xc2, 0x54, - 0xb1, 0x59, 0x09, 0x4b, 0xd4, 0xb3, 0x95, 0xb0, 0x94, 0xda, 0x74, 0x20, 0xec, 0x33, 0xb8, 0x1a, - 0x2f, 0x0a, 0xa3, 0x95, 0xf0, 0x89, 0x96, 0x56, 0xba, 0xd6, 0x6e, 0x65, 0xb1, 0x87, 0x04, 0x7f, - 0x21, 0x41, 0xd8, 0x48, 0x15, 0x56, 0xad, 0x59, 0x46, 0xe9, 0x57, 0xad, 0x59, 0x66, 0x01, 0x37, - 0x62, 0x77, 0xbc, 0x2c, 0xaa, 0xec, 0x4e, 0xad, 0xc0, 0x2a, 0xbb, 0xd3, 0xab, 0xa9, 0x61, 0x30, - 0x58, 0x80, 0x92, 0xe5, 0x4c, 0x14, 0xae, 0x75, 0x66, 0x75, 0x55, 0xd3, 0x47, 0x75, 0x19, 0xb2, - 0xfe, 0x10, 0x2a, 0x91, 0x2a, 0x1d, 0x0a, 0x17, 0x2a, 0x59, 0x29, 0xd5, 0x6e, 0xa6, 0xf2, 0x92, - 0xce, 0x1e, 0xce, 0x83, 0x94, 0xb3, 0x33, 0xaa, 0x7a, 0xca, 0xd9, 0x99, 0x15, 0xba, 0x40, 0xfc, - 0x01, 0x80, 0x2a, 0x1e, 0xa9, 0x88, 0x4b, 0x94, 0xc8, 0x54, 0xc4, 0x25, 0x6b, 0x4d, 0x81, 0x83, - 0x3f, 0xe6, 0xd6, 0x0e, 0x17, 0x83, 0x94, 0xb5, 0x19, 0xb5, 0x27, 0x65, 0x6d, 0x56, 0x1d, 0x29, - 0xba, 0x9d, 0x13, 0xd5, 0x15, 0xb5, 0x9d, 0xb3, 0x6a, 0x4a, 0x6a, 0x3b, 0x67, 0x96, 0x66, 0x42, - 0x7f, 0xfc, 0x08, 0xf2, 0x3b, 0xbe, 0x75, 0x8e, 0xe6, 0xc3, 0x21, 0xaa, 0x30, 0xa3, 0x2d, 0xc4, - 0x89, 0x43, 0xc6, 0x6d, 0x43, 0x29, 0xa8, 0x4d, 0xa0, 0xc5, 0x58, 0xb4, 0xab, 0x3a, 0x8b, 0x56, - 0x4f, 0x32, 0x86, 0x2c, 0x38, 0x85, 0xd9, 0x58, 0x61, 0x01, 0x2d, 0x87, 0x5a, 0x53, 0xea, 0x1b, - 0xda, 0x4a, 0x06, 0x77, 0xc8, 0xb8, 0xe7, 0x00, 0x0a, 0xf0, 0x57, 0xeb, 0x9c, 0x28, 0x4a, 0xa8, - 0x75, 0x4e, 0xa9, 0x0f, 0x04, 0x26, 0x5a, 0x80, 0x92, 0x98, 0xbd, 0xda, 0x48, 0x99, 0x35, 0x04, - 0xb5, 0x91, 0xb2, 0x21, 0xff, 0xe8, 0x6e, 0x4d, 0xa2, 0xec, 0x51, 0x25, 0x19, 0xa8, 0x7f, 0x54, - 0x49, 0x16, 0x48, 0x1f, 0x2a, 0x21, 0xc9, 0xca, 0xb8, 0x44, 0xc7, 0xd1, 0xfd, 0xac, 0x3d, 0x14, - 0x07, 0xeb, 0xb5, 0xf7, 0xbf, 0xb3, 0xdf, 0x90, 0xf7, 0x4e, 0xa0, 0x1a, 0x45, 0xc7, 0xd1, 0xcd, - 0xb8, 0x80, 0x18, 0x8c, 0xa8, 0x2d, 0xa7, 0x33, 0x13, 0x1b, 0xef, 0x97, 0xa0, 0x65, 0x03, 0x84, - 0xe8, 0x83, 0x51, 0x36, 0xc6, 0x15, 0x3e, 0x7c, 0x97, 0xae, 0xf1, 0x19, 0x3d, 0xc8, 0xa1, 0x3d, - 0x28, 0x87, 0xa0, 0x35, 0xaa, 0x67, 0x41, 0xee, 0xda, 0x52, 0x0a, 0x67, 0xc8, 0x3b, 0x9f, 0x42, - 0x35, 0x0a, 0x42, 0x2b, 0xef, 0xa4, 0xe0, 0xdf, 0xca, 0x3b, 0xa9, 0xb8, 0x75, 0xf4, 0x48, 0x56, - 0x30, 0x66, 0xe4, 0x48, 0x4e, 0x60, 0xa5, 0x91, 0x23, 0x39, 0x89, 0x7b, 0x86, 0x41, 0xd3, 0xe2, - 0x3f, 0x37, 0xc4, 0xb1, 0x47, 0x14, 0xfd, 0xbb, 0x20, 0x15, 0xec, 0x54, 0xa7, 0x50, 0x26, 0x70, - 0x19, 0x59, 0xcf, 0x2f, 0x61, 0x2e, 0x01, 0x26, 0x2a, 0x1d, 0x59, 0xe8, 0xa5, 0xd2, 0x91, 0x89, - 0x44, 0x86, 0xb3, 0x68, 0x40, 0x51, 0xfe, 0xe3, 0x84, 0x6e, 0x84, 0xa3, 0x62, 0x3f, 0x50, 0x69, - 0x8b, 0x09, 0xfa, 0x90, 0x67, 0x8f, 0xa1, 0x12, 0x41, 0x1a, 0x51, 0xf4, 0x8e, 0x18, 0x42, 0x10, - 0x95, 0x67, 0x53, 0xa0, 0xc9, 0xc8, 0xbc, 0x7f, 0xc5, 0x52, 0xa5, 0x11, 0xb8, 0x1f, 0xfa, 0x70, - 0x54, 0x7c, 0x0e, 0x2b, 0x7d, 0xf4, 0x6e, 0x9d, 0x87, 0x66, 0xf5, 0x73, 0x98, 0x8d, 0x61, 0x58, - 0xea, 0x04, 0x4e, 0x03, 0x1a, 0xd5, 0x09, 0x9c, 0x0a, 0x7c, 0x45, 0xe6, 0x76, 0x0e, 0x0b, 0x69, - 0xd0, 0x02, 0xba, 0xab, 0x76, 0x45, 0x26, 0x48, 0xa2, 0xdd, 0x1b, 0xdd, 0x29, 0xa1, 0xac, 0x05, - 0x73, 0x09, 0x9c, 0x46, 0x05, 0x50, 0x16, 0xb0, 0xa4, 0x02, 0x28, 0x13, 0xe4, 0x89, 0xe8, 0xc0, - 0x80, 0x92, 0xd5, 0x1a, 0x14, 0x79, 0x3c, 0x67, 0x14, 0x8d, 0xd4, 0x11, 0x3d, 0xa2, 0xd8, 0xa3, - 0x0e, 0x97, 0x16, 0xcc, 0x25, 0x0a, 0x34, 0x6a, 0x2a, 0x59, 0x15, 0x21, 0x35, 0x95, 0xcc, 0xea, - 0x4e, 0x64, 0x2a, 0x1e, 0xdc, 0x48, 0x07, 0x25, 0xd0, 0x7b, 0x91, 0xe5, 0xcd, 0xc6, 0x43, 0xb4, - 0xfb, 0xdf, 0xd5, 0x6d, 0x68, 0xfb, 0x9d, 0xc2, 0x6c, 0x2c, 0x9f, 0x56, 0x41, 0x96, 0x86, 0x72, - 0xa8, 0x20, 0x4b, 0x47, 0x18, 0x82, 0xd0, 0x75, 0x86, 0x20, 0x88, 0x20, 0x4b, 0x47, 0xf7, 0x52, - 0xc7, 0x0f, 0xe1, 0x10, 0xda, 0x7b, 0xdf, 0xd1, 0x2b, 0xf9, 0x36, 0x1d, 0xce, 0xce, 0xa3, 0xc9, - 0x5b, 0x2a, 0x18, 0x10, 0x4d, 0xde, 0x32, 0x12, 0xfb, 0x98, 0xf8, 0x78, 0x9a, 0x1d, 0x15, 0x9f, - 0x9a, 0xfa, 0x47, 0xc5, 0x67, 0x64, 0xe8, 0x81, 0xf8, 0x0e, 0xcc, 0xa7, 0x24, 0xc9, 0x28, 0x12, - 0x9b, 0x59, 0x59, 0xbc, 0x76, 0x77, 0x64, 0x9f, 0xe4, 0x6b, 0x29, 0x99, 0x16, 0xab, 0x5d, 0x92, - 0x99, 0x89, 0xab, 0x5d, 0x92, 0x9d, 0x55, 0x07, 0x4a, 0x1a, 0x1f, 0xbf, 0x62, 0x9d, 0x1d, 0xb3, - 0xb5, 0x66, 0x79, 0xbd, 0xc7, 0xe2, 0xf3, 0x23, 0x8f, 0x9c, 0x3d, 0x16, 0x22, 0x1e, 0xf3, 0x3f, - 0xd4, 0x1f, 0x9f, 0x79, 0xb2, 0xdd, 0x6f, 0xb5, 0x0a, 0x9c, 0xf4, 0xe4, 0xbf, 0x01, 0x00, 0x00, - 0xff, 0xff, 0xd4, 0x82, 0x1d, 0xea, 0xf2, 0x2e, 0x00, 0x00, + 0x11, 0x36, 0xf5, 0xe0, 0xa3, 0x48, 0xd9, 0x54, 0x4b, 0xb6, 0xa8, 0xb1, 0x64, 0xd9, 0x63, 0xaf, + 0xd7, 0xeb, 0xf5, 0xca, 0xbb, 0x72, 0x80, 0x38, 0x09, 0x82, 0x40, 0xd4, 0xdb, 0xb6, 0x1e, 0x3b, + 0x94, 0xb3, 0x58, 0x03, 0x0b, 0xee, 0x70, 0xd8, 0x14, 0x27, 0x1a, 0xce, 0xd0, 0x3d, 0x4d, 0xcb, + 0x5a, 0x20, 0x87, 0x04, 0xc8, 0x21, 0x40, 0xb0, 0xa7, 0x20, 0x9b, 0x63, 0x6e, 0x01, 0xf2, 0x0b, + 0x72, 0xc9, 0x21, 0x97, 0x5c, 0xf2, 0x0b, 0xf6, 0x2f, 0x04, 0xc8, 0x1f, 0xc8, 0x29, 0xe8, 0xc7, + 0x4c, 0xcf, 0x70, 0x66, 0xb8, 0x0e, 0x48, 0x6c, 0x6e, 0xd3, 0x55, 0xdd, 0x55, 0xd5, 0xdd, 0xd5, + 0xd5, 0x5d, 0x5f, 0x0d, 0xd4, 0x08, 0xee, 0x7b, 0xbe, 0x4d, 0x3d, 0x72, 0xf9, 0x91, 0x8f, 0xc9, + 0x1b, 0xdb, 0xc2, 0xeb, 0x7d, 0xe2, 0x51, 0x0f, 0xe5, 0xcf, 0x6c, 0x6a, 0x3a, 0x97, 0x1a, 0x38, + 0xb6, 0x4b, 0x05, 0x4d, 0xab, 0xf8, 0x5d, 0x93, 0xe0, 0xb6, 0x68, 0xe9, 0x0d, 0x58, 0x32, 0xc2, + 0xd1, 0x3b, 0x6f, 0x6d, 0x9f, 0xfa, 0x06, 0x7e, 0x3d, 0xc0, 0x3e, 0x45, 0x4f, 0x01, 0x94, 0xe0, + 0x5a, 0xee, 0x76, 0xee, 0x41, 0x79, 0x03, 0xad, 0x0b, 0x89, 0xeb, 0x6a, 0x50, 0x7d, 0xe6, 0x8f, + 0xff, 0x78, 0x94, 0x33, 0x22, 0x7d, 0xf5, 0x0d, 0xa8, 0x25, 0x85, 0xfa, 0x7d, 0xcf, 0xf5, 0x31, + 0xba, 0x01, 0x79, 0xcc, 0x29, 0x5c, 0x62, 0xd1, 0x90, 0x2d, 0xfd, 0x94, 0x8f, 0x31, 0xad, 0xf3, + 0x03, 0xd7, 0x22, 0xb8, 0x87, 0x5d, 0x6a, 0x3a, 0xe3, 0x5b, 0x72, 0x13, 0x96, 0x53, 0xa4, 0x0a, + 0x53, 0x74, 0x02, 0xf3, 0x82, 0xb9, 0x3b, 0x70, 0xc6, 0xd7, 0x85, 0xee, 0xc2, 0x9c, 0x45, 0xb0, + 0x49, 0x71, 0xb3, 0x65, 0xd3, 0x9e, 0xd9, 0xaf, 0x4d, 0xf1, 0x09, 0x56, 0x04, 0xb1, 0xce, 0x69, + 0xfa, 0x22, 0xa0, 0xa8, 0x4e, 0x69, 0xc9, 0x21, 0xcc, 0x1f, 0xda, 0xed, 0xb7, 0x82, 0x33, 0xfe, + 0xac, 0x17, 0x01, 0x45, 0xc5, 0x49, 0x25, 0xbf, 0xcb, 0xc1, 0xf5, 0x3d, 0x93, 0xb4, 0xcc, 0x33, + 0xbc, 0xe5, 0x39, 0x0e, 0xb6, 0xe8, 0xf7, 0x33, 0x67, 0xb4, 0x08, 0xb3, 0x7d, 0x32, 0x70, 0x71, + 0x6d, 0x9a, 0x33, 0x45, 0x43, 0xaf, 0xc1, 0x8d, 0x61, 0x6b, 0xa4, 0xa1, 0xff, 0xcc, 0xc1, 0xd2, + 0x67, 0xc4, 0xa6, 0x78, 0xcb, 0xeb, 0xf5, 0x6c, 0xba, 0x47, 0xcc, 0x7e, 0x77, 0x7c, 0x53, 0x1b, + 0x30, 0xe7, 0xf7, 0x1d, 0x9b, 0x36, 0x28, 0x31, 0x29, 0x3e, 0xbb, 0xe4, 0xa6, 0x5e, 0xdd, 0xf8, + 0x28, 0x18, 0x9c, 0xa1, 0x71, 0xbd, 0x11, 0x1d, 0x64, 0xc4, 0x65, 0xe8, 0x77, 0x60, 0x2e, 0xc6, + 0x47, 0x55, 0xa8, 0x34, 0xec, 0xaf, 0xf0, 0xe1, 0xc0, 0xa1, 0x76, 0xdf, 0xc1, 0xd5, 0x2b, 0xba, + 0x06, 0xb5, 0xa4, 0x68, 0x39, 0xd3, 0x67, 0x70, 0x75, 0xcb, 0xc1, 0xa6, 0x3b, 0xe8, 0x8f, 0xbf, + 0xe9, 0xf3, 0x70, 0x2d, 0x94, 0x25, 0xc5, 0x7f, 0x0a, 0xd7, 0xd5, 0x10, 0x66, 0xd6, 0xf8, 0x5a, + 0x1e, 0xc1, 0x8d, 0x61, 0x91, 0xf2, 0x60, 0x23, 0x98, 0xf1, 0xed, 0xaf, 0x30, 0x97, 0x36, 0x6d, + 0xf0, 0x6f, 0xfd, 0x35, 0x2c, 0x6f, 0xf6, 0xfb, 0xce, 0xe5, 0x9e, 0x4d, 0x4d, 0x4a, 0x89, 0xdd, + 0x1a, 0x50, 0x3c, 0x7e, 0x7c, 0x41, 0x1a, 0x14, 0x09, 0x7e, 0x63, 0xfb, 0xb6, 0xe7, 0xf2, 0x5d, + 0xac, 0x18, 0x61, 0x5b, 0x5f, 0x01, 0x2d, 0x4d, 0xa5, 0x5c, 0x91, 0x7f, 0x4f, 0x01, 0xda, 0xc5, + 0xd4, 0xea, 0x1a, 0xb8, 0xe7, 0xd1, 0xf1, 0xd7, 0x83, 0x85, 0x33, 0xc2, 0x45, 0x71, 0x43, 0x4a, + 0x86, 0x6c, 0x31, 0x9f, 0xef, 0x78, 0xc4, 0x0a, 0x7d, 0x9e, 0x37, 0xd0, 0x12, 0x14, 0x5c, 0xaf, + 0x49, 0xcd, 0x33, 0xbf, 0x36, 0x23, 0xa2, 0x9f, 0xeb, 0x9d, 0x9a, 0x67, 0x3e, 0xaa, 0x41, 0x81, + 0xda, 0x3d, 0xec, 0x0d, 0x68, 0x6d, 0xf6, 0x76, 0xee, 0xc1, 0xac, 0x11, 0x34, 0xd9, 0x10, 0xdf, + 0xef, 0x36, 0xcf, 0xf1, 0x65, 0x2d, 0x2f, 0x34, 0xf8, 0x7e, 0xf7, 0x39, 0xbe, 0x44, 0x6b, 0x50, + 0x3e, 0x77, 0xbd, 0x0b, 0xb7, 0xd9, 0xf5, 0x58, 0x34, 0x2d, 0x70, 0x26, 0x70, 0xd2, 0x3e, 0xa3, + 0xa0, 0x65, 0x28, 0xba, 0x5e, 0x53, 0x9c, 0xbc, 0x12, 0xd7, 0x56, 0x70, 0xbd, 0x13, 0xd6, 0x44, + 0x4f, 0x60, 0x4e, 0xd8, 0xd9, 0xec, 0x9b, 0xc4, 0xec, 0xf9, 0x35, 0xe0, 0x53, 0xbe, 0xaa, 0xa6, + 0xcc, 0x57, 0xa7, 0x22, 0x3a, 0x9d, 0xf0, 0x3e, 0xe8, 0x11, 0x20, 0xab, 0x8b, 0xad, 0x73, 0x6e, + 0x7f, 0xd3, 0xea, 0x9a, 0xee, 0x19, 0x6e, 0xd7, 0xca, 0x5c, 0x72, 0x95, 0x73, 0xd8, 0x54, 0xb6, + 0x04, 0xfd, 0xd9, 0x4c, 0xb1, 0x58, 0x2d, 0xe9, 0x4f, 0x61, 0x21, 0xb6, 0xdc, 0xd2, 0x57, 0xee, + 0x40, 0x25, 0x26, 0x44, 0x5c, 0x05, 0x65, 0xaa, 0xc6, 0xb3, 0x8b, 0x69, 0x8b, 0x07, 0x11, 0xb5, + 0xfc, 0xe3, 0x7b, 0xaf, 0x06, 0xb5, 0xa4, 0x50, 0xe9, 0x1a, 0xff, 0x9a, 0x82, 0xf9, 0x3d, 0x4c, + 0x37, 0x89, 0xd5, 0xb5, 0xdf, 0x4c, 0xc0, 0x33, 0x6e, 0x42, 0xc9, 0xe2, 0x47, 0xbe, 0x69, 0xb7, + 0xa5, 0x73, 0x14, 0x05, 0xe1, 0xa0, 0xcd, 0xdc, 0xa6, 0x4f, 0x70, 0xc7, 0x7e, 0xcb, 0xfd, 0xa3, + 0x64, 0xc8, 0x16, 0x7a, 0x0a, 0xf9, 0x8e, 0x47, 0x7a, 0x26, 0xe5, 0xfe, 0x71, 0x75, 0xe3, 0x76, + 0xa0, 0x2a, 0x61, 0xd9, 0xfa, 0x2e, 0xef, 0x67, 0xc8, 0xfe, 0xec, 0xf8, 0xf5, 0x4d, 0xda, 0xe5, + 0xee, 0x53, 0x31, 0xf8, 0x37, 0xf3, 0x2a, 0xfc, 0xd6, 0x72, 0x06, 0x6d, 0x5c, 0xcb, 0xdf, 0x9e, + 0x7e, 0x50, 0x31, 0x82, 0x26, 0x5a, 0x05, 0xc0, 0x8e, 0xdd, 0x66, 0xfb, 0x4f, 0xbb, 0xdc, 0x77, + 0x8a, 0x46, 0x89, 0x53, 0x4e, 0xd8, 0xc0, 0x87, 0x30, 0x6f, 0xbb, 0xbc, 0x67, 0xd3, 0xe9, 0xf8, + 0xcd, 0x96, 0xe3, 0xb5, 0xfc, 0x5a, 0x91, 0xf7, 0xba, 0x26, 0x19, 0x2f, 0x3a, 0x7e, 0x9d, 0x91, + 0xf5, 0x27, 0x90, 0x17, 0xa6, 0xa0, 0x02, 0x4c, 0xbf, 0x3a, 0x38, 0xa9, 0x5e, 0x61, 0x1f, 0xa7, + 0x9b, 0x46, 0x35, 0x87, 0x00, 0xf2, 0xa7, 0x9b, 0x46, 0x73, 0xef, 0x55, 0x75, 0x0a, 0x95, 0xa1, + 0xc0, 0xbe, 0xeb, 0xaf, 0x36, 0xaa, 0xd3, 0xfa, 0x03, 0x40, 0xd1, 0x19, 0xa9, 0x10, 0xd2, 0x36, + 0xa9, 0xc9, 0x97, 0xb9, 0x62, 0xf0, 0x6f, 0xe6, 0x07, 0xfb, 0xa6, 0xff, 0xc2, 0xb3, 0x4c, 0xa7, + 0x4e, 0x4c, 0xd7, 0xea, 0x4e, 0x20, 0x80, 0xe8, 0x1f, 0x43, 0x2d, 0x29, 0x54, 0x1a, 0xb1, 0x08, + 0xb3, 0x6f, 0x4c, 0x67, 0x80, 0xa5, 0x53, 0x8a, 0x86, 0xfe, 0x6d, 0x0e, 0x6a, 0xdc, 0x93, 0x1b, + 0xde, 0x80, 0x58, 0x58, 0x8c, 0x1a, 0xdf, 0x49, 0x7e, 0x06, 0xf3, 0x3e, 0x17, 0xd8, 0x8c, 0x08, + 0x98, 0xca, 0x12, 0x60, 0x54, 0x45, 0x67, 0x23, 0x76, 0x01, 0x4b, 0x01, 0x2d, 0x6e, 0x12, 0xf7, + 0xa7, 0x8a, 0x51, 0xf1, 0x23, 0x66, 0xb2, 0xdd, 0xa6, 0x26, 0x39, 0xc3, 0xb4, 0x49, 0x70, 0x87, + 0x7b, 0x56, 0xc5, 0x28, 0x09, 0x8a, 0x81, 0x3b, 0xfa, 0x13, 0x58, 0x4e, 0x99, 0x9a, 0x7a, 0xaf, + 0x11, 0xec, 0x0f, 0x1c, 0x1a, 0xbc, 0xd7, 0x44, 0x4b, 0xdf, 0x83, 0xf2, 0xae, 0x3f, 0x89, 0xc7, + 0xca, 0x3d, 0xa8, 0x08, 0x41, 0x6a, 0xfd, 0x31, 0x21, 0x1e, 0x91, 0x5e, 0x20, 0x1a, 0xfa, 0x5f, + 0x73, 0x70, 0x8d, 0x5f, 0xa3, 0x06, 0xee, 0x8c, 0xbf, 0xec, 0x55, 0x98, 0x66, 0x2b, 0x21, 0xee, + 0x0e, 0xf6, 0x19, 0xbb, 0x52, 0xa6, 0xe3, 0x57, 0x0a, 0x8b, 0x56, 0x9e, 0xd3, 0x6e, 0x86, 0x7c, + 0xb1, 0x80, 0x65, 0xcf, 0x69, 0x1b, 0x41, 0x97, 0x30, 0xdc, 0xcf, 0x46, 0xc2, 0xfd, 0xb3, 0x99, + 0x62, 0xbe, 0x5a, 0xd0, 0x6b, 0x50, 0x55, 0x96, 0x8b, 0x49, 0x3e, 0x9b, 0x29, 0xe6, 0xaa, 0x53, + 0xba, 0x0b, 0x8b, 0xbb, 0xb6, 0xdb, 0x3e, 0xc4, 0xe4, 0x0c, 0xd7, 0x4d, 0x7f, 0x02, 0x41, 0x67, + 0x05, 0x4a, 0x81, 0x99, 0x7e, 0x6d, 0x8a, 0x9f, 0x79, 0x45, 0xd0, 0x3f, 0x84, 0xeb, 0x43, 0xfa, + 0xd4, 0xc1, 0x6b, 0x99, 0xbe, 0x70, 0xf9, 0x92, 0xc1, 0xbf, 0xf5, 0xaf, 0x73, 0x30, 0x2f, 0x82, + 0xe5, 0xae, 0x47, 0xce, 0xff, 0xff, 0xae, 0xce, 0x5e, 0xb5, 0x51, 0x7b, 0xc2, 0x47, 0xfc, 0xf2, + 0x81, 0x6f, 0x60, 0x66, 0xf2, 0x81, 0x7b, 0x42, 0xbc, 0x33, 0x82, 0x7d, 0x7f, 0x22, 0xd1, 0x9b, + 0x70, 0xa1, 0x91, 0xe8, 0x2d, 0x08, 0x07, 0x6d, 0xfd, 0xa7, 0xa0, 0xa5, 0xe9, 0x94, 0x8b, 0xb9, + 0x06, 0x65, 0xdb, 0x6d, 0xf6, 0x25, 0x59, 0x1e, 0x1b, 0xb0, 0xc3, 0x8e, 0xc2, 0xe4, 0xc6, 0xeb, + 0x81, 0xe9, 0x77, 0x27, 0x6c, 0xb2, 0xcf, 0x85, 0x46, 0x4c, 0x16, 0x84, 0xc0, 0xe4, 0xa4, 0xce, + 0x77, 0x35, 0xd9, 0x81, 0x5b, 0xc3, 0x17, 0xe7, 0x2e, 0xf1, 0x7a, 0x2f, 0x8d, 0x17, 0x13, 0x39, + 0x8c, 0x03, 0xe2, 0x48, 0x8b, 0xd9, 0xa7, 0x7e, 0x07, 0xd6, 0x32, 0xb5, 0xc9, 0x6d, 0x3f, 0x86, + 0x05, 0xd1, 0xa5, 0x3e, 0x70, 0xdb, 0xce, 0x04, 0x1e, 0xb6, 0x0f, 0x61, 0x31, 0x2e, 0x70, 0xc4, + 0x9d, 0xf4, 0x02, 0xaa, 0x7b, 0x98, 0x6e, 0x79, 0x6e, 0xc7, 0x3e, 0x1b, 0x5f, 0xf3, 0xfb, 0xfc, + 0xdd, 0x11, 0x48, 0x1b, 0xa1, 0xf6, 0xeb, 0x29, 0xa8, 0x36, 0x26, 0xa6, 0x17, 0x3d, 0x85, 0x02, + 0x76, 0x29, 0xb1, 0xb1, 0x88, 0x14, 0xe5, 0x8d, 0x5b, 0xc1, 0xb0, 0x61, 0x25, 0xeb, 0x3b, 0x2e, + 0x25, 0x97, 0x46, 0xd0, 0x5d, 0xfb, 0x4d, 0x0e, 0x66, 0x39, 0x89, 0xed, 0x1d, 0x7b, 0x99, 0x8a, + 0xb8, 0xc1, 0x3e, 0xd1, 0x2a, 0x94, 0xf8, 0x8d, 0xd9, 0xf4, 0x29, 0x11, 0x7b, 0xba, 0x7f, 0xc5, + 0x28, 0x72, 0x52, 0x83, 0x12, 0x74, 0x07, 0xca, 0x82, 0x6d, 0xbb, 0xf4, 0xc9, 0x06, 0x0f, 0xb5, + 0xb3, 0xfb, 0x57, 0x0c, 0xe0, 0xc4, 0x03, 0x46, 0x43, 0x6b, 0x20, 0x5a, 0xcd, 0x96, 0xe7, 0x39, + 0xe2, 0x9d, 0xbc, 0x7f, 0xc5, 0x10, 0x52, 0xeb, 0x9e, 0xe7, 0xd4, 0x0b, 0xf2, 0x86, 0xd6, 0x17, + 0x60, 0xbe, 0x31, 0xbc, 0x72, 0xba, 0x05, 0x0b, 0xdb, 0xd8, 0xc1, 0x2c, 0xe1, 0x9a, 0xcc, 0x3a, + 0x21, 0x98, 0x39, 0xc7, 0x97, 0x62, 0x91, 0x4a, 0x06, 0xff, 0xd6, 0x6f, 0xc0, 0x62, 0x5c, 0x89, + 0x54, 0x6e, 0xc3, 0xb2, 0x81, 0x7d, 0xea, 0x11, 0xbc, 0x35, 0xf0, 0xa9, 0xd7, 0xdb, 0xf7, 0xbc, + 0x73, 0x7f, 0x22, 0x26, 0x70, 0x6f, 0x98, 0x8a, 0x78, 0xc3, 0x0a, 0x68, 0x69, 0xaa, 0xa4, 0x21, + 0xa7, 0x50, 0xab, 0x9b, 0xd6, 0xf9, 0xa0, 0x3f, 0x49, 0x3b, 0xf4, 0xc7, 0xb0, 0x9c, 0x22, 0x75, + 0x84, 0xcb, 0xbe, 0x86, 0x3b, 0x69, 0x27, 0x79, 0x42, 0x87, 0x36, 0x75, 0x5d, 0xee, 0x81, 0x3e, + 0x4a, 0xa5, 0x5c, 0x9f, 0x23, 0x40, 0xec, 0x2a, 0x7c, 0x61, 0x5b, 0xd8, 0x9d, 0xc0, 0xc5, 0xab, + 0x6f, 0xc1, 0x42, 0x4c, 0x9e, 0x5c, 0x93, 0x47, 0x80, 0x1c, 0x41, 0x6a, 0xfa, 0x5d, 0x8f, 0xd0, + 0xa6, 0x6b, 0xf6, 0x82, 0x6b, 0xb6, 0x2a, 0x39, 0x0d, 0xc6, 0x38, 0x32, 0x7b, 0x7c, 0xd3, 0xf6, + 0x30, 0x3d, 0x70, 0x3b, 0xde, 0xe6, 0xe4, 0xb2, 0x65, 0xfd, 0x27, 0xb0, 0x9c, 0x22, 0x55, 0x1a, + 0x78, 0x0b, 0x40, 0xa5, 0xc9, 0x72, 0xeb, 0x22, 0x14, 0x66, 0xd2, 0x96, 0xe9, 0x58, 0x03, 0xc7, + 0xa4, 0x78, 0x8b, 0xe5, 0x78, 0xfe, 0xa0, 0x37, 0xbe, 0x49, 0x3f, 0x84, 0xe5, 0x14, 0xa9, 0xd2, + 0x24, 0x0d, 0x8a, 0x96, 0xa4, 0xc9, 0x95, 0x0a, 0xdb, 0x6c, 0xdb, 0xf6, 0x30, 0x6d, 0xb8, 0x66, + 0xdf, 0xef, 0x7a, 0xe3, 0xe3, 0x57, 0xfa, 0x07, 0xb0, 0x10, 0x93, 0x37, 0xc2, 0x95, 0xbf, 0xc9, + 0xc1, 0xdd, 0x34, 0xc7, 0x9a, 0x98, 0x31, 0x2c, 0x61, 0xef, 0x52, 0xda, 0x6f, 0xaa, 0xdb, 0xb0, + 0xc0, 0xda, 0x2f, 0x89, 0xc3, 0xee, 0x76, 0xce, 0x32, 0x07, 0xb4, 0x2b, 0x53, 0x46, 0xde, 0x77, + 0x73, 0x40, 0xbb, 0xfa, 0x7d, 0xb8, 0x37, 0xda, 0x30, 0xe9, 0xf3, 0x7f, 0xc8, 0xc1, 0xe2, 0x1e, + 0xa6, 0x86, 0x79, 0x21, 0x92, 0x6c, 0x7f, 0x22, 0xf8, 0x5f, 0x87, 0x78, 0xbd, 0x66, 0x0c, 0x8e, + 0x29, 0x19, 0x15, 0x46, 0x0c, 0x1f, 0xc7, 0x6b, 0x50, 0xa6, 0x5e, 0x33, 0xf6, 0xbc, 0x2e, 0x19, + 0x40, 0xbd, 0xa0, 0x83, 0xfe, 0xb7, 0x19, 0xb8, 0x3e, 0x64, 0x98, 0xdc, 0x88, 0x7d, 0x28, 0x13, + 0xf3, 0x42, 0xe2, 0x04, 0xcc, 0x3f, 0xd9, 0x3d, 0xf5, 0x7e, 0x24, 0x29, 0x4e, 0x8e, 0x59, 0x0f, + 0x49, 0x06, 0x90, 0x90, 0xab, 0x7d, 0x3b, 0x0d, 0xa5, 0x90, 0x83, 0x96, 0xa0, 0xc0, 0x92, 0x5a, + 0xf6, 0x52, 0x12, 0x2e, 0x96, 0x67, 0xcd, 0x83, 0x76, 0x88, 0x62, 0x4d, 0x29, 0x14, 0x0b, 0xad, + 0x42, 0xd1, 0xc5, 0x17, 0x22, 0x55, 0xe6, 0xc6, 0xd7, 0xa7, 0x6a, 0x39, 0xa3, 0xe0, 0xe2, 0x0b, + 0x9e, 0x2c, 0xaf, 0x42, 0x91, 0xa5, 0x07, 0x9c, 0x3d, 0xa3, 0xd8, 0x9e, 0xd3, 0xe6, 0xec, 0x63, + 0x28, 0x79, 0x7d, 0x4c, 0x4c, 0xca, 0xe6, 0x3e, 0xcb, 0xb3, 0xfa, 0x4f, 0xde, 0x71, 0x02, 0xeb, + 0xc7, 0xc1, 0x40, 0x43, 0xc9, 0x60, 0x6b, 0xce, 0xd6, 0x44, 0x09, 0x15, 0xb8, 0x50, 0x85, 0x98, + 0x17, 0x61, 0x7f, 0xe6, 0x4b, 0xcc, 0xa8, 0x9e, 0xd7, 0xc6, 0x3c, 0xbd, 0x9f, 0xe5, 0x06, 0x1d, + 0x7a, 0x6d, 0xcc, 0x71, 0x21, 0x7c, 0x21, 0x58, 0x45, 0xc1, 0x72, 0xf1, 0x05, 0x67, 0xdd, 0x83, + 0xab, 0xc1, 0x4c, 0x9b, 0xad, 0x4b, 0x16, 0x11, 0x4a, 0x22, 0x9d, 0x94, 0x73, 0xad, 0x33, 0x1a, + 0xeb, 0x15, 0x4c, 0x58, 0xf6, 0x02, 0xd1, 0x4b, 0x4e, 0x99, 0xf7, 0xd2, 0x6d, 0x28, 0x29, 0x73, + 0xca, 0x50, 0x78, 0x79, 0xf4, 0xfc, 0xe8, 0xf8, 0xb3, 0xa3, 0xea, 0x15, 0x54, 0x82, 0xd9, 0xcd, + 0xed, 0xed, 0x9d, 0x6d, 0x01, 0x10, 0x6c, 0x1d, 0x9f, 0x1c, 0xec, 0x6c, 0x0b, 0x80, 0x60, 0x7b, + 0xe7, 0xc5, 0xce, 0xe9, 0xce, 0x76, 0x75, 0x1a, 0x55, 0xa0, 0x78, 0x78, 0xbc, 0x7d, 0xb0, 0xcb, + 0x58, 0x33, 0x8c, 0x65, 0xec, 0x1c, 0x6d, 0x1e, 0xee, 0x6c, 0x57, 0x67, 0x51, 0x15, 0x2a, 0xa7, + 0x9f, 0x9f, 0xec, 0x34, 0xb7, 0xf6, 0x37, 0x8f, 0xf6, 0x76, 0xb6, 0xab, 0x79, 0xfd, 0xf7, 0x39, + 0xa8, 0x35, 0xb0, 0x49, 0xac, 0xee, 0xae, 0xed, 0x60, 0xbf, 0x7e, 0xc9, 0xa2, 0xe9, 0xf8, 0xce, + 0xbd, 0x08, 0xb3, 0xaf, 0x07, 0x58, 0x66, 0x29, 0x25, 0x43, 0x34, 0x82, 0xdc, 0x71, 0x5a, 0xe5, + 0x8e, 0x37, 0x20, 0xdf, 0xb1, 0x1d, 0x8a, 0x89, 0xd8, 0x7e, 0x43, 0xb6, 0xf4, 0x4f, 0x60, 0x39, + 0xc5, 0x2a, 0x95, 0xe6, 0x76, 0x18, 0x99, 0xfb, 0x74, 0xc5, 0x10, 0x0d, 0xfd, 0x2f, 0x39, 0xb8, + 0x19, 0x1b, 0xb3, 0xe5, 0xb9, 0x14, 0xbb, 0xf4, 0xfb, 0x9b, 0xcc, 0x07, 0x50, 0xb5, 0xba, 0x03, + 0xf7, 0x1c, 0xb3, 0x84, 0x57, 0xd8, 0x2a, 0xb1, 0xca, 0x6b, 0x92, 0x1e, 0xc6, 0x93, 0x4b, 0x58, + 0x49, 0xb7, 0x55, 0x4e, 0xb1, 0x06, 0x85, 0x9e, 0x49, 0xad, 0x6e, 0x38, 0xc9, 0xa0, 0x89, 0x56, + 0x01, 0xf8, 0x67, 0x33, 0x72, 0x7b, 0x97, 0x38, 0x65, 0xdb, 0xa4, 0x26, 0xba, 0x0d, 0x15, 0xec, + 0xb6, 0x9b, 0x5e, 0xa7, 0xc9, 0x69, 0x12, 0x43, 0x05, 0xec, 0xb6, 0x8f, 0x3b, 0x87, 0x8c, 0xa2, + 0xff, 0x36, 0x07, 0x79, 0x81, 0x29, 0x06, 0xe9, 0x43, 0x2e, 0x4c, 0x1f, 0xd0, 0x8f, 0x61, 0x39, + 0x0c, 0x96, 0x1e, 0xb1, 0xbf, 0xe2, 0x2e, 0xd8, 0xec, 0x62, 0xb3, 0x8d, 0x89, 0x8c, 0x3e, 0x4b, + 0x41, 0xf0, 0x0c, 0xf9, 0xfb, 0x9c, 0x8d, 0xde, 0x83, 0xab, 0x3d, 0x9b, 0x10, 0x8f, 0x34, 0x09, + 0xee, 0xf4, 0xcc, 0xbe, 0x5f, 0x9b, 0xe1, 0xcf, 0xbe, 0x39, 0x41, 0x35, 0x04, 0xf1, 0xd9, 0x4c, + 0x71, 0xaa, 0x3a, 0x6d, 0xcc, 0xb0, 0xdb, 0x5c, 0xff, 0x1c, 0x56, 0xf7, 0x30, 0x3d, 0x6e, 0xfd, + 0x02, 0x5b, 0x74, 0xdb, 0x26, 0xd8, 0x9a, 0x1c, 0xda, 0xfe, 0x03, 0xb8, 0x95, 0x25, 0x7a, 0x04, + 0xea, 0xfe, 0xa7, 0x1c, 0x2c, 0x6e, 0x39, 0x9e, 0x8b, 0xd9, 0x2d, 0x70, 0xe2, 0x79, 0x13, 0xa8, + 0x6d, 0xdd, 0x87, 0x99, 0x3e, 0x7b, 0x8d, 0x0f, 0xe5, 0xeb, 0xc2, 0x32, 0xae, 0x82, 0xf3, 0xd1, + 0xfd, 0x10, 0x0e, 0x9f, 0x4e, 0x45, 0x94, 0x25, 0x57, 0x5f, 0x82, 0xeb, 0x43, 0x16, 0x4a, 0x9f, + 0xfa, 0x7b, 0x0e, 0x56, 0x62, 0x9c, 0x03, 0x97, 0x62, 0xe2, 0x9a, 0xdf, 0xe3, 0x1c, 0x52, 0x81, + 0x8a, 0xe9, 0xff, 0x01, 0xa8, 0x58, 0x83, 0xd5, 0x8c, 0x29, 0xc8, 0x49, 0xf2, 0xa2, 0x6b, 0xcf, + 0x7b, 0x33, 0x69, 0x6c, 0x3b, 0x29, 0x54, 0x2a, 0x7c, 0xcb, 0x14, 0xba, 0x3c, 0xfc, 0x4c, 0x4c, + 0x21, 0xbf, 0x87, 0xb0, 0x63, 0x52, 0xfb, 0x8d, 0x84, 0x91, 0xe5, 0xdd, 0x1f, 0x10, 0xd9, 0x55, + 0x20, 0xac, 0x1a, 0xd6, 0x2c, 0xad, 0xfa, 0x75, 0x8e, 0xa5, 0x30, 0x7d, 0xc7, 0xb6, 0x26, 0x0b, + 0xf3, 0xa3, 0x87, 0x90, 0x17, 0x9b, 0x32, 0x02, 0x5f, 0x92, 0x3d, 0xf4, 0x55, 0xb8, 0x99, 0x6a, + 0x83, 0xb4, 0xf1, 0x25, 0x2c, 0x1f, 0xf7, 0xa9, 0xdd, 0xe3, 0x67, 0x6e, 0x72, 0x9b, 0xb5, 0x02, + 0x5a, 0x9a, 0x58, 0xa1, 0x74, 0xe3, 0xcf, 0x6b, 0xbc, 0x32, 0x1d, 0x54, 0xd9, 0x44, 0x49, 0x1f, + 0x7d, 0x01, 0xd5, 0xe1, 0xaa, 0x3a, 0x5a, 0x4b, 0x6a, 0x8b, 0x15, 0xf1, 0xb5, 0xdb, 0xd9, 0x1d, + 0xe4, 0x0c, 0xf3, 0xff, 0xf9, 0xe6, 0xc1, 0x54, 0x71, 0x0a, 0x7d, 0x19, 0x54, 0xc3, 0x23, 0xa5, + 0x72, 0x14, 0x1d, 0x9e, 0x5a, 0x9b, 0xd7, 0xee, 0x8c, 0xe8, 0x11, 0xd3, 0x90, 0x43, 0xcf, 0x01, + 0x54, 0xed, 0x1b, 0x2d, 0xc7, 0x07, 0x46, 0x6a, 0xf0, 0x9a, 0x96, 0xc6, 0x4a, 0x0a, 0x53, 0x35, + 0x6e, 0x25, 0x2c, 0x51, 0x46, 0x57, 0xc2, 0x52, 0x4a, 0xe2, 0x81, 0xb0, 0xcf, 0xe0, 0x6a, 0xbc, + 0x16, 0x8d, 0x56, 0xc3, 0x27, 0x5a, 0x5a, 0xc5, 0x5c, 0xbb, 0x95, 0xc5, 0x1e, 0x12, 0xfc, 0x85, + 0xc4, 0x7e, 0x23, 0xc5, 0x5f, 0xb5, 0x67, 0x19, 0x15, 0x67, 0xb5, 0x67, 0x99, 0x75, 0xe3, 0x88, + 0xdd, 0xf1, 0x6a, 0xac, 0xb2, 0x3b, 0xb5, 0xf0, 0xab, 0xec, 0x4e, 0x2f, 0xe2, 0x86, 0xce, 0x60, + 0x01, 0x4a, 0x56, 0x51, 0x51, 0xb8, 0xd7, 0x99, 0x45, 0x5d, 0x4d, 0x1f, 0xd5, 0x65, 0xc8, 0xfa, + 0x23, 0x28, 0x47, 0x8a, 0x83, 0x28, 0xdc, 0xa8, 0x64, 0x81, 0x56, 0xbb, 0x99, 0xca, 0x4b, 0x2e, + 0xf6, 0x70, 0x1e, 0xa4, 0x16, 0x3b, 0xa3, 0x98, 0xa8, 0x16, 0x3b, 0xb3, 0x30, 0x18, 0x88, 0x3f, + 0x04, 0x50, 0x35, 0x2b, 0xe5, 0x71, 0x89, 0xca, 0x9c, 0xf2, 0xb8, 0x64, 0x89, 0x2b, 0x58, 0xe0, + 0x8f, 0xb9, 0xb5, 0xc3, 0x35, 0x28, 0x65, 0x6d, 0x46, 0xc9, 0x4b, 0x59, 0x9b, 0x55, 0xbe, 0x8a, + 0x1e, 0xe7, 0x44, 0x51, 0x47, 0x1d, 0xe7, 0xac, 0x52, 0x96, 0x3a, 0xce, 0x99, 0x15, 0xa1, 0x70, + 0x3d, 0x7e, 0x04, 0x33, 0xbb, 0xbe, 0x75, 0x8e, 0x16, 0xc2, 0x21, 0xaa, 0x1e, 0xa4, 0x2d, 0xc6, + 0x89, 0x43, 0xc6, 0xed, 0x40, 0x31, 0x28, 0x89, 0xa0, 0xa5, 0x98, 0xb7, 0xab, 0xf2, 0x8e, 0x56, + 0x4b, 0x32, 0x86, 0x2c, 0x38, 0x85, 0xb9, 0x58, 0x3d, 0x03, 0xad, 0x84, 0x5a, 0x53, 0xca, 0x2a, + 0xda, 0x6a, 0x06, 0x77, 0xc8, 0xb8, 0xe7, 0x00, 0xaa, 0xce, 0xa0, 0xf6, 0x39, 0x51, 0x0b, 0x51, + 0xfb, 0x9c, 0x52, 0x96, 0x08, 0x4c, 0xb4, 0x00, 0x25, 0x4b, 0x05, 0xea, 0x20, 0x65, 0x96, 0x2e, + 0xd4, 0x41, 0xca, 0xae, 0x34, 0x44, 0x4f, 0x6b, 0x12, 0xdc, 0x8f, 0x2a, 0xc9, 0x28, 0x36, 0x44, + 0x95, 0x64, 0xd5, 0x06, 0x42, 0x25, 0x24, 0x59, 0x90, 0x97, 0xa0, 0x3c, 0xba, 0x9f, 0x75, 0x86, + 0xe2, 0x35, 0x02, 0xed, 0xfd, 0xef, 0xec, 0x37, 0xb4, 0x7a, 0x0d, 0xa8, 0x44, 0x41, 0x79, 0x74, + 0x33, 0x2e, 0x20, 0x06, 0x23, 0x6a, 0x2b, 0xe9, 0xcc, 0xc4, 0xc1, 0xfb, 0x25, 0x68, 0xd9, 0x00, + 0x21, 0xfa, 0x60, 0x94, 0x8d, 0x71, 0x85, 0x0f, 0xdf, 0xa5, 0x6b, 0x7c, 0x46, 0x0f, 0x72, 0xe8, + 0x19, 0x94, 0x42, 0xb8, 0x1f, 0xd5, 0x22, 0xa1, 0x22, 0x86, 0x57, 0x6b, 0xcb, 0x29, 0x9c, 0xc4, + 0x54, 0xf6, 0xa1, 0xd4, 0x48, 0xca, 0x6a, 0x64, 0xca, 0x6a, 0x64, 0xc8, 0xca, 0xa1, 0x4f, 0xa1, + 0x12, 0x05, 0xb4, 0xd5, 0x4a, 0xa7, 0x60, 0xe9, 0x6a, 0xa5, 0x53, 0x31, 0xf0, 0x68, 0x78, 0x57, + 0x90, 0x68, 0x24, 0xbc, 0x27, 0x70, 0xd7, 0x48, 0x78, 0x4f, 0x62, 0xa8, 0xa1, 0x03, 0xb6, 0x78, + 0x9d, 0x24, 0x8e, 0x63, 0xa2, 0xe8, 0x0f, 0x12, 0xa9, 0xc0, 0xa9, 0x8a, 0x68, 0x99, 0x20, 0x68, + 0x64, 0x41, 0xbf, 0x84, 0xf9, 0x04, 0x30, 0xa9, 0x74, 0x64, 0x21, 0xa1, 0x4a, 0x47, 0x26, 0xaa, + 0x19, 0xce, 0xa2, 0x0e, 0x05, 0xf9, 0x9b, 0x16, 0xba, 0x11, 0x8e, 0x8a, 0xfd, 0x03, 0xa6, 0x2d, + 0x25, 0xe8, 0x43, 0x2b, 0x7b, 0x02, 0xe5, 0x08, 0x6a, 0x89, 0xa2, 0xf7, 0xcd, 0x10, 0x1a, 0xa9, + 0x56, 0x36, 0x05, 0xe6, 0x8c, 0xcc, 0xfb, 0x57, 0x2c, 0xed, 0x1a, 0x81, 0x21, 0xa2, 0x0f, 0x47, + 0xf9, 0xfa, 0xb0, 0xd2, 0x47, 0xef, 0xd6, 0x79, 0x68, 0x56, 0x3f, 0x87, 0xb9, 0x18, 0x1e, 0xa6, + 0xa2, 0x79, 0x1a, 0x68, 0xa9, 0xa2, 0x79, 0x2a, 0x88, 0x16, 0x99, 0xdb, 0x39, 0x2c, 0xa6, 0xc1, + 0x14, 0xe8, 0xae, 0x3a, 0x15, 0x99, 0x80, 0x8b, 0x76, 0x6f, 0x74, 0xa7, 0x84, 0xb2, 0x16, 0xcc, + 0x27, 0x30, 0x1f, 0xe5, 0x40, 0x59, 0x20, 0x95, 0x72, 0xa0, 0x4c, 0xc0, 0x28, 0xa2, 0x03, 0x03, + 0x4a, 0x56, 0x7e, 0x50, 0xe4, 0x21, 0x9e, 0x51, 0x80, 0x52, 0xe1, 0x7e, 0x44, 0xe1, 0x48, 0x05, + 0xaa, 0x16, 0xcc, 0x27, 0x8a, 0x3d, 0x6a, 0x2a, 0x59, 0xd5, 0x25, 0x35, 0x95, 0xcc, 0x4a, 0x51, + 0x64, 0x2a, 0x1e, 0xdc, 0x48, 0x07, 0x38, 0xd0, 0x7b, 0x91, 0xed, 0xcd, 0xc6, 0x56, 0xb4, 0xfb, + 0xdf, 0xd5, 0x6d, 0xe8, 0xf8, 0x9d, 0xc2, 0x5c, 0x2c, 0x37, 0x57, 0x4e, 0x96, 0x86, 0x98, 0x28, + 0x27, 0x4b, 0x47, 0x2b, 0x02, 0xd7, 0x75, 0x86, 0xe0, 0x8c, 0x20, 0xe3, 0x47, 0xf7, 0x52, 0xc7, + 0x0f, 0x61, 0x1a, 0xda, 0x7b, 0xdf, 0xd1, 0x2b, 0xf9, 0xce, 0x1d, 0xce, 0xf4, 0xa3, 0x89, 0x60, + 0x2a, 0xb0, 0x10, 0x4d, 0x04, 0x33, 0x40, 0x82, 0x98, 0xf8, 0x78, 0xca, 0x1e, 0x15, 0x9f, 0x0a, + 0x23, 0x44, 0xc5, 0x67, 0x64, 0xfb, 0x81, 0xf8, 0x0e, 0x2c, 0xa4, 0x24, 0xdc, 0x28, 0xe2, 0x9b, + 0x59, 0x88, 0x80, 0x76, 0x77, 0x64, 0x9f, 0xe4, 0xcb, 0x2b, 0x99, 0x62, 0xab, 0x53, 0x92, 0x99, + 0xd5, 0xab, 0x53, 0x92, 0x9d, 0xa1, 0x07, 0x4a, 0xea, 0x1f, 0xbf, 0x62, 0x9d, 0x1d, 0xb3, 0xb5, + 0x6e, 0x79, 0xbd, 0xc7, 0xe2, 0xf3, 0x23, 0x8f, 0x9c, 0x3d, 0x16, 0x22, 0x1e, 0xf3, 0x9f, 0xec, + 0x1f, 0x9f, 0x79, 0xb2, 0xdd, 0x6f, 0xb5, 0xf2, 0x9c, 0xf4, 0xe4, 0xbf, 0x01, 0x00, 0x00, 0xff, + 0xff, 0x99, 0x62, 0x61, 0x2b, 0xb5, 0x2f, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -4331,6 +4418,9 @@ type RepositoryServiceClient interface { CreateRepositoryFromURL(ctx context.Context, in *CreateRepositoryFromURLRequest, opts ...grpc.CallOption) (*CreateRepositoryFromURLResponse, error) CreateBundle(ctx context.Context, in *CreateBundleRequest, opts ...grpc.CallOption) (RepositoryService_CreateBundleClient, error) CreateRepositoryFromBundle(ctx context.Context, opts ...grpc.CallOption) (RepositoryService_CreateRepositoryFromBundleClient, error) + // GetConfig reads the target repository's gitconfig and streams its contents + // back. Returns a NotFound error in case no gitconfig was found. + GetConfig(ctx context.Context, in *GetConfigRequest, opts ...grpc.CallOption) (RepositoryService_GetConfigClient, error) SetConfig(ctx context.Context, in *SetConfigRequest, opts ...grpc.CallOption) (*SetConfigResponse, error) DeleteConfig(ctx context.Context, in *DeleteConfigRequest, opts ...grpc.CallOption) (*DeleteConfigResponse, error) FindLicense(ctx context.Context, in *FindLicenseRequest, opts ...grpc.CallOption) (*FindLicenseResponse, error) @@ -4633,6 +4723,38 @@ func (x *repositoryServiceCreateRepositoryFromBundleClient) CloseAndRecv() (*Cre return m, nil } +func (c *repositoryServiceClient) GetConfig(ctx context.Context, in *GetConfigRequest, opts ...grpc.CallOption) (RepositoryService_GetConfigClient, error) { + stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[3], "/gitaly.RepositoryService/GetConfig", opts...) + if err != nil { + return nil, err + } + x := &repositoryServiceGetConfigClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type RepositoryService_GetConfigClient interface { + Recv() (*GetConfigResponse, error) + grpc.ClientStream +} + +type repositoryServiceGetConfigClient struct { + grpc.ClientStream +} + +func (x *repositoryServiceGetConfigClient) Recv() (*GetConfigResponse, error) { + m := new(GetConfigResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + func (c *repositoryServiceClient) SetConfig(ctx context.Context, in *SetConfigRequest, opts ...grpc.CallOption) (*SetConfigResponse, error) { out := new(SetConfigResponse) err := c.cc.Invoke(ctx, "/gitaly.RepositoryService/SetConfig", in, out, opts...) @@ -4661,7 +4783,7 @@ func (c *repositoryServiceClient) FindLicense(ctx context.Context, in *FindLicen } func (c *repositoryServiceClient) GetInfoAttributes(ctx context.Context, in *GetInfoAttributesRequest, opts ...grpc.CallOption) (RepositoryService_GetInfoAttributesClient, error) { - stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[3], "/gitaly.RepositoryService/GetInfoAttributes", opts...) + stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[4], "/gitaly.RepositoryService/GetInfoAttributes", opts...) if err != nil { return nil, err } @@ -4711,7 +4833,7 @@ func (c *repositoryServiceClient) Cleanup(ctx context.Context, in *CleanupReques } func (c *repositoryServiceClient) GetSnapshot(ctx context.Context, in *GetSnapshotRequest, opts ...grpc.CallOption) (RepositoryService_GetSnapshotClient, error) { - stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[4], "/gitaly.RepositoryService/GetSnapshot", opts...) + stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[5], "/gitaly.RepositoryService/GetSnapshot", opts...) if err != nil { return nil, err } @@ -4752,7 +4874,7 @@ func (c *repositoryServiceClient) CreateRepositoryFromSnapshot(ctx context.Conte } func (c *repositoryServiceClient) GetRawChanges(ctx context.Context, in *GetRawChangesRequest, opts ...grpc.CallOption) (RepositoryService_GetRawChangesClient, error) { - stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[5], "/gitaly.RepositoryService/GetRawChanges", opts...) + stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[6], "/gitaly.RepositoryService/GetRawChanges", opts...) if err != nil { return nil, err } @@ -4784,7 +4906,7 @@ func (x *repositoryServiceGetRawChangesClient) Recv() (*GetRawChangesResponse, e } func (c *repositoryServiceClient) SearchFilesByContent(ctx context.Context, in *SearchFilesByContentRequest, opts ...grpc.CallOption) (RepositoryService_SearchFilesByContentClient, error) { - stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[6], "/gitaly.RepositoryService/SearchFilesByContent", opts...) + stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[7], "/gitaly.RepositoryService/SearchFilesByContent", opts...) if err != nil { return nil, err } @@ -4816,7 +4938,7 @@ func (x *repositoryServiceSearchFilesByContentClient) Recv() (*SearchFilesByCont } func (c *repositoryServiceClient) SearchFilesByName(ctx context.Context, in *SearchFilesByNameRequest, opts ...grpc.CallOption) (RepositoryService_SearchFilesByNameClient, error) { - stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[7], "/gitaly.RepositoryService/SearchFilesByName", opts...) + stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[8], "/gitaly.RepositoryService/SearchFilesByName", opts...) if err != nil { return nil, err } @@ -4848,7 +4970,7 @@ func (x *repositoryServiceSearchFilesByNameClient) Recv() (*SearchFilesByNameRes } func (c *repositoryServiceClient) RestoreCustomHooks(ctx context.Context, opts ...grpc.CallOption) (RepositoryService_RestoreCustomHooksClient, error) { - stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[8], "/gitaly.RepositoryService/RestoreCustomHooks", opts...) + stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[9], "/gitaly.RepositoryService/RestoreCustomHooks", opts...) if err != nil { return nil, err } @@ -4882,7 +5004,7 @@ func (x *repositoryServiceRestoreCustomHooksClient) CloseAndRecv() (*RestoreCust } func (c *repositoryServiceClient) BackupCustomHooks(ctx context.Context, in *BackupCustomHooksRequest, opts ...grpc.CallOption) (RepositoryService_BackupCustomHooksClient, error) { - stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[9], "/gitaly.RepositoryService/BackupCustomHooks", opts...) + stream, err := c.cc.NewStream(ctx, &_RepositoryService_serviceDesc.Streams[10], "/gitaly.RepositoryService/BackupCustomHooks", opts...) if err != nil { return nil, err } @@ -5004,6 +5126,9 @@ type RepositoryServiceServer interface { CreateRepositoryFromURL(context.Context, *CreateRepositoryFromURLRequest) (*CreateRepositoryFromURLResponse, error) CreateBundle(*CreateBundleRequest, RepositoryService_CreateBundleServer) error CreateRepositoryFromBundle(RepositoryService_CreateRepositoryFromBundleServer) error + // GetConfig reads the target repository's gitconfig and streams its contents + // back. Returns a NotFound error in case no gitconfig was found. + GetConfig(*GetConfigRequest, RepositoryService_GetConfigServer) error SetConfig(context.Context, *SetConfigRequest) (*SetConfigResponse, error) DeleteConfig(context.Context, *DeleteConfigRequest) (*DeleteConfigResponse, error) FindLicense(context.Context, *FindLicenseRequest) (*FindLicenseResponse, error) @@ -5099,6 +5224,9 @@ func (*UnimplementedRepositoryServiceServer) CreateBundle(req *CreateBundleReque func (*UnimplementedRepositoryServiceServer) CreateRepositoryFromBundle(srv RepositoryService_CreateRepositoryFromBundleServer) error { return status.Errorf(codes.Unimplemented, "method CreateRepositoryFromBundle not implemented") } +func (*UnimplementedRepositoryServiceServer) GetConfig(req *GetConfigRequest, srv RepositoryService_GetConfigServer) error { + return status.Errorf(codes.Unimplemented, "method GetConfig not implemented") +} func (*UnimplementedRepositoryServiceServer) SetConfig(ctx context.Context, req *SetConfigRequest) (*SetConfigResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SetConfig not implemented") } @@ -5574,6 +5702,27 @@ func (x *repositoryServiceCreateRepositoryFromBundleServer) Recv() (*CreateRepos return m, nil } +func _RepositoryService_GetConfig_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(GetConfigRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(RepositoryServiceServer).GetConfig(m, &repositoryServiceGetConfigServer{stream}) +} + +type RepositoryService_GetConfigServer interface { + Send(*GetConfigResponse) error + grpc.ServerStream +} + +type repositoryServiceGetConfigServer struct { + grpc.ServerStream +} + +func (x *repositoryServiceGetConfigServer) Send(m *GetConfigResponse) error { + return x.ServerStream.SendMsg(m) +} + func _RepositoryService_SetConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(SetConfigRequest) if err := dec(in); err != nil { @@ -6110,6 +6259,11 @@ var _RepositoryService_serviceDesc = grpc.ServiceDesc{ ClientStreams: true, }, { + StreamName: "GetConfig", + Handler: _RepositoryService_GetConfig_Handler, + ServerStreams: true, + }, + { StreamName: "GetInfoAttributes", Handler: _RepositoryService_GetInfoAttributes_Handler, ServerStreams: true, diff --git a/proto/repository-service.proto b/proto/repository-service.proto index 6ca36ca03..6d6d580df 100644 --- a/proto/repository-service.proto +++ b/proto/repository-service.proto @@ -125,16 +125,27 @@ service RepositoryService { op: MUTATOR }; } + + // GetConfig reads the target repository's gitconfig and streams its contents + // back. Returns a NotFound error in case no gitconfig was found. + rpc GetConfig(GetConfigRequest) returns (stream GetConfigResponse) { + option (op_type) = { + op: ACCESSOR + }; + } + rpc SetConfig(SetConfigRequest) returns (SetConfigResponse) { option (op_type) = { op: MUTATOR }; } + rpc DeleteConfig(DeleteConfigRequest) returns (DeleteConfigResponse) { option (op_type) = { op: MUTATOR }; } + rpc FindLicense(FindLicenseRequest) returns (FindLicenseResponse) { option (op_type) = { op: ACCESSOR @@ -480,6 +491,19 @@ message CreateBundleResponse { bytes data = 1; } +// GetConfigRequest is a request for the GetConfig RPC. +message GetConfigRequest { + // Repository is the repository from which the configuration should be read + // from. + Repository repository = 1 [(target_repository)=true]; +} + +// GetConfigResponse is a response for the GetConfig RPC. +message GetConfigResponse { + // Data contains contents of the gitconfig. + bytes data = 1; +} + message SetConfigRequest { Repository repository = 1 [(target_repository)=true]; message Entry { diff --git a/ruby/proto/gitaly/repository-service_pb.rb b/ruby/proto/gitaly/repository-service_pb.rb index 053b8ca82..09e3de5c6 100644 --- a/ruby/proto/gitaly/repository-service_pb.rb +++ b/ruby/proto/gitaly/repository-service_pb.rb @@ -170,6 +170,12 @@ Google::Protobuf::DescriptorPool.generated_pool.build do add_message "gitaly.CreateBundleResponse" do optional :data, :bytes, 1 end + add_message "gitaly.GetConfigRequest" do + optional :repository, :message, 1, "gitaly.Repository" + end + add_message "gitaly.GetConfigResponse" do + optional :data, :bytes, 1 + end add_message "gitaly.SetConfigRequest" do optional :repository, :message, 1, "gitaly.Repository" repeated :entries, :message, 2, "gitaly.SetConfigRequest.Entry" @@ -385,6 +391,8 @@ module Gitaly CreateRepositoryFromURLResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.CreateRepositoryFromURLResponse").msgclass CreateBundleRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.CreateBundleRequest").msgclass CreateBundleResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.CreateBundleResponse").msgclass + GetConfigRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.GetConfigRequest").msgclass + GetConfigResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.GetConfigResponse").msgclass SetConfigRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.SetConfigRequest").msgclass SetConfigRequest::Entry = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.SetConfigRequest.Entry").msgclass SetConfigResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("gitaly.SetConfigResponse").msgclass diff --git a/ruby/proto/gitaly/repository-service_services_pb.rb b/ruby/proto/gitaly/repository-service_services_pb.rb index 47d1b49a7..71120a29d 100644 --- a/ruby/proto/gitaly/repository-service_services_pb.rb +++ b/ruby/proto/gitaly/repository-service_services_pb.rb @@ -40,6 +40,9 @@ module Gitaly rpc :CreateRepositoryFromURL, Gitaly::CreateRepositoryFromURLRequest, Gitaly::CreateRepositoryFromURLResponse rpc :CreateBundle, Gitaly::CreateBundleRequest, stream(Gitaly::CreateBundleResponse) rpc :CreateRepositoryFromBundle, stream(Gitaly::CreateRepositoryFromBundleRequest), Gitaly::CreateRepositoryFromBundleResponse + # GetConfig reads the target repository's gitconfig and streams its contents + # back. Returns a NotFound error in case no gitconfig was found. + rpc :GetConfig, Gitaly::GetConfigRequest, stream(Gitaly::GetConfigResponse) rpc :SetConfig, Gitaly::SetConfigRequest, Gitaly::SetConfigResponse rpc :DeleteConfig, Gitaly::DeleteConfigRequest, Gitaly::DeleteConfigResponse rpc :FindLicense, Gitaly::FindLicenseRequest, Gitaly::FindLicenseResponse |