1// Code generated by protoc-gen-go. DO NOT EDIT. 2// source: google/devtools/remoteexecution/v1test/remote_execution.proto 3 4/* 5Package remoteexecution is a generated protocol buffer package. 6 7It is generated from these files: 8 google/devtools/remoteexecution/v1test/remote_execution.proto 9 10It has these top-level messages: 11 Action 12 Command 13 Platform 14 Directory 15 FileNode 16 DirectoryNode 17 Digest 18 ActionResult 19 OutputFile 20 OutputDirectory 21 ExecuteRequest 22 ExecuteResponse 23 ExecuteOperationMetadata 24 GetActionResultRequest 25 UpdateActionResultRequest 26 FindMissingBlobsRequest 27 FindMissingBlobsResponse 28 UpdateBlobRequest 29 BatchUpdateBlobsRequest 30 BatchUpdateBlobsResponse 31 GetTreeRequest 32 GetTreeResponse 33 ToolDetails 34 RequestMetadata 35*/ 36package remoteexecution 37 38import proto "github.com/golang/protobuf/proto" 39import fmt "fmt" 40import math "math" 41import _ "google.golang.org/genproto/googleapis/api/annotations" 42import google_longrunning "google.golang.org/genproto/googleapis/longrunning" 43import google_protobuf3 "github.com/golang/protobuf/ptypes/duration" 44import google_rpc "google.golang.org/genproto/googleapis/rpc/status" 45 46import ( 47 context "golang.org/x/net/context" 48 grpc "google.golang.org/grpc" 49) 50 51// Reference imports to suppress errors if they are not otherwise used. 52var _ = proto.Marshal 53var _ = fmt.Errorf 54var _ = math.Inf 55 56// This is a compile-time assertion to ensure that this generated file 57// is compatible with the proto package it is being compiled against. 58// A compilation error at this line likely means your copy of the 59// proto package needs to be updated. 60const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package 61 62// The current stage of execution. 63type ExecuteOperationMetadata_Stage int32 64 65const ( 66 ExecuteOperationMetadata_UNKNOWN ExecuteOperationMetadata_Stage = 0 67 // Checking the result against the cache. 68 ExecuteOperationMetadata_CACHE_CHECK ExecuteOperationMetadata_Stage = 1 69 // Currently idle, awaiting a free machine to execute. 70 ExecuteOperationMetadata_QUEUED ExecuteOperationMetadata_Stage = 2 71 // Currently being executed by a worker. 72 ExecuteOperationMetadata_EXECUTING ExecuteOperationMetadata_Stage = 3 73 // Finished execution. 74 ExecuteOperationMetadata_COMPLETED ExecuteOperationMetadata_Stage = 4 75) 76 77var ExecuteOperationMetadata_Stage_name = map[int32]string{ 78 0: "UNKNOWN", 79 1: "CACHE_CHECK", 80 2: "QUEUED", 81 3: "EXECUTING", 82 4: "COMPLETED", 83} 84var ExecuteOperationMetadata_Stage_value = map[string]int32{ 85 "UNKNOWN": 0, 86 "CACHE_CHECK": 1, 87 "QUEUED": 2, 88 "EXECUTING": 3, 89 "COMPLETED": 4, 90} 91 92func (x ExecuteOperationMetadata_Stage) String() string { 93 return proto.EnumName(ExecuteOperationMetadata_Stage_name, int32(x)) 94} 95func (ExecuteOperationMetadata_Stage) EnumDescriptor() ([]byte, []int) { 96 return fileDescriptor0, []int{12, 0} 97} 98 99// An `Action` captures all the information about an execution which is required 100// to reproduce it. 101// 102// `Action`s are the core component of the [Execution] service. A single 103// `Action` represents a repeatable action that can be performed by the 104// execution service. `Action`s can be succinctly identified by the digest of 105// their wire format encoding and, once an `Action` has been executed, will be 106// cached in the action cache. Future requests can then use the cached result 107// rather than needing to run afresh. 108// 109// When a server completes execution of an [Action][google.devtools.remoteexecution.v1test.Action], 110// it MAY choose to cache the [result][google.devtools.remoteexecution.v1test.ActionResult] 111// in the [ActionCache][google.devtools.remoteexecution.v1test.ActionCache] 112// unless `do_not_cache` is `true`. Clients SHOULD expect the server to do so. 113// By default, future calls to [Execute][] the same `Action` will also serve 114// their results from the cache. Clients must take care to understand the 115// caching behaviour. Ideally, all `Action`s will be reproducible so that 116// serving a result from cache is always desirable and correct. 117type Action struct { 118 // The digest of the [Command][google.devtools.remoteexecution.v1test.Command] 119 // to run, which MUST be present in the 120 // [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage]. 121 CommandDigest *Digest `protobuf:"bytes,1,opt,name=command_digest,json=commandDigest" json:"command_digest,omitempty"` 122 // The digest of the root [Directory][google.devtools.remoteexecution.v1test.Directory] 123 // for the input files. The files in the directory tree are available in the 124 // correct location on the build machine before the command is executed. The 125 // root directory, as well as every subdirectory and content blob referred to, 126 // MUST be in the [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage]. 127 InputRootDigest *Digest `protobuf:"bytes,2,opt,name=input_root_digest,json=inputRootDigest" json:"input_root_digest,omitempty"` 128 // A list of the output files that the client expects to retrieve from the 129 // action. Only the listed files, as well as directories listed in 130 // `output_directories`, will be returned to the client as output. 131 // Other files that may be created during command execution are discarded. 132 // 133 // The paths are specified using forward slashes (`/`) as path separators, 134 // even if the execution platform natively uses a different separator. The 135 // path MUST NOT include a trailing slash. 136 // 137 // In order to ensure consistent hashing of the same Action, the output paths 138 // MUST be sorted lexicographically by code point (or, equivalently, by UTF-8 139 // bytes). 140 OutputFiles []string `protobuf:"bytes,3,rep,name=output_files,json=outputFiles" json:"output_files,omitempty"` 141 // A list of the output directories that the client expects to retrieve from 142 // the action. Only the contents of the indicated directories (recursively 143 // including the contents of their subdirectories) will be 144 // returned, as well as files listed in `output_files`. Other files that may 145 // be created during command execution are discarded. 146 // 147 // The paths are specified using forward slashes (`/`) as path separators, 148 // even if the execution platform natively uses a different separator. The 149 // path MUST NOT include a trailing slash, unless the path is `"/"` (which, 150 // although not recommended, can be used to capture the entire working 151 // directory tree, including inputs). 152 // 153 // In order to ensure consistent hashing of the same Action, the output paths 154 // MUST be sorted lexicographically by code point (or, equivalently, by UTF-8 155 // bytes). 156 OutputDirectories []string `protobuf:"bytes,4,rep,name=output_directories,json=outputDirectories" json:"output_directories,omitempty"` 157 // The platform requirements for the execution environment. The server MAY 158 // choose to execute the action on any worker satisfying the requirements, so 159 // the client SHOULD ensure that running the action on any such worker will 160 // have the same result. 161 Platform *Platform `protobuf:"bytes,5,opt,name=platform" json:"platform,omitempty"` 162 // A timeout after which the execution should be killed. If the timeout is 163 // absent, then the client is specifying that the execution should continue 164 // as long as the server will let it. The server SHOULD impose a timeout if 165 // the client does not specify one, however, if the client does specify a 166 // timeout that is longer than the server's maximum timeout, the server MUST 167 // reject the request. 168 // 169 // The timeout is a part of the 170 // [Action][google.devtools.remoteexecution.v1test.Action] message, and 171 // therefore two `Actions` with different timeouts are different, even if they 172 // are otherwise identical. This is because, if they were not, running an 173 // `Action` with a lower timeout than is required might result in a cache hit 174 // from an execution run with a longer timeout, hiding the fact that the 175 // timeout is too short. By encoding it directly in the `Action`, a lower 176 // timeout will result in a cache miss and the execution timeout will fail 177 // immediately, rather than whenever the cache entry gets evicted. 178 Timeout *google_protobuf3.Duration `protobuf:"bytes,6,opt,name=timeout" json:"timeout,omitempty"` 179 // If true, then the `Action`'s result cannot be cached. 180 DoNotCache bool `protobuf:"varint,7,opt,name=do_not_cache,json=doNotCache" json:"do_not_cache,omitempty"` 181} 182 183func (m *Action) Reset() { *m = Action{} } 184func (m *Action) String() string { return proto.CompactTextString(m) } 185func (*Action) ProtoMessage() {} 186func (*Action) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } 187 188func (m *Action) GetCommandDigest() *Digest { 189 if m != nil { 190 return m.CommandDigest 191 } 192 return nil 193} 194 195func (m *Action) GetInputRootDigest() *Digest { 196 if m != nil { 197 return m.InputRootDigest 198 } 199 return nil 200} 201 202func (m *Action) GetOutputFiles() []string { 203 if m != nil { 204 return m.OutputFiles 205 } 206 return nil 207} 208 209func (m *Action) GetOutputDirectories() []string { 210 if m != nil { 211 return m.OutputDirectories 212 } 213 return nil 214} 215 216func (m *Action) GetPlatform() *Platform { 217 if m != nil { 218 return m.Platform 219 } 220 return nil 221} 222 223func (m *Action) GetTimeout() *google_protobuf3.Duration { 224 if m != nil { 225 return m.Timeout 226 } 227 return nil 228} 229 230func (m *Action) GetDoNotCache() bool { 231 if m != nil { 232 return m.DoNotCache 233 } 234 return false 235} 236 237// A `Command` is the actual command executed by a worker running an 238// [Action][google.devtools.remoteexecution.v1test.Action]. 239// 240// Except as otherwise required, the environment (such as which system 241// libraries or binaries are available, and what filesystems are mounted where) 242// is defined by and specific to the implementation of the remote execution API. 243type Command struct { 244 // The arguments to the command. The first argument must be the path to the 245 // executable, which must be either a relative path, in which case it is 246 // evaluated with respect to the input root, or an absolute path. The `PATH` 247 // environment variable, or similar functionality on other systems, is not 248 // used to determine which executable to run. 249 // 250 // The working directory will always be the input root. 251 Arguments []string `protobuf:"bytes,1,rep,name=arguments" json:"arguments,omitempty"` 252 // The environment variables to set when running the program. The worker may 253 // provide its own default environment variables; these defaults can be 254 // overridden using this field. Additional variables can also be specified. 255 // 256 // In order to ensure that equivalent `Command`s always hash to the same 257 // value, the environment variables MUST be lexicographically sorted by name. 258 // Sorting of strings is done by code point, equivalently, by the UTF-8 bytes. 259 EnvironmentVariables []*Command_EnvironmentVariable `protobuf:"bytes,2,rep,name=environment_variables,json=environmentVariables" json:"environment_variables,omitempty"` 260} 261 262func (m *Command) Reset() { *m = Command{} } 263func (m *Command) String() string { return proto.CompactTextString(m) } 264func (*Command) ProtoMessage() {} 265func (*Command) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } 266 267func (m *Command) GetArguments() []string { 268 if m != nil { 269 return m.Arguments 270 } 271 return nil 272} 273 274func (m *Command) GetEnvironmentVariables() []*Command_EnvironmentVariable { 275 if m != nil { 276 return m.EnvironmentVariables 277 } 278 return nil 279} 280 281// An `EnvironmentVariable` is one variable to set in the running program's 282// environment. 283type Command_EnvironmentVariable struct { 284 // The variable name. 285 Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` 286 // The variable value. 287 Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` 288} 289 290func (m *Command_EnvironmentVariable) Reset() { *m = Command_EnvironmentVariable{} } 291func (m *Command_EnvironmentVariable) String() string { return proto.CompactTextString(m) } 292func (*Command_EnvironmentVariable) ProtoMessage() {} 293func (*Command_EnvironmentVariable) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1, 0} } 294 295func (m *Command_EnvironmentVariable) GetName() string { 296 if m != nil { 297 return m.Name 298 } 299 return "" 300} 301 302func (m *Command_EnvironmentVariable) GetValue() string { 303 if m != nil { 304 return m.Value 305 } 306 return "" 307} 308 309// A `Platform` is a set of requirements, such as hardware, operation system, or 310// compiler toolchain, for an 311// [Action][google.devtools.remoteexecution.v1test.Action]'s execution 312// environment. A `Platform` is represented as a series of key-value pairs 313// representing the properties that are required of the platform. 314// 315// This message is currently being redeveloped since it is an overly simplistic 316// model of platforms. 317type Platform struct { 318 // The properties that make up this platform. In order to ensure that 319 // equivalent `Platform`s always hash to the same value, the properties MUST 320 // be lexicographically sorted by name, and then by value. Sorting of strings 321 // is done by code point, equivalently, by the UTF-8 bytes. 322 Properties []*Platform_Property `protobuf:"bytes,1,rep,name=properties" json:"properties,omitempty"` 323} 324 325func (m *Platform) Reset() { *m = Platform{} } 326func (m *Platform) String() string { return proto.CompactTextString(m) } 327func (*Platform) ProtoMessage() {} 328func (*Platform) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } 329 330func (m *Platform) GetProperties() []*Platform_Property { 331 if m != nil { 332 return m.Properties 333 } 334 return nil 335} 336 337// A single property for the environment. The server is responsible for 338// specifying the property `name`s that it accepts. If an unknown `name` is 339// provided in the requirements for an 340// [Action][google.devtools.remoteexecution.v1test.Action], the server SHOULD 341// reject the execution request. If permitted by the server, the same `name` 342// may occur multiple times. 343// 344// The server is also responsible for specifying the interpretation of 345// property `value`s. For instance, a property describing how much RAM must be 346// available may be interpreted as allowing a worker with 16GB to fulfill a 347// request for 8GB, while a property describing the OS environment on which 348// the action must be performed may require an exact match with the worker's 349// OS. 350// 351// The server MAY use the `value` of one or more properties to determine how 352// it sets up the execution environment, such as by making specific system 353// files available to the worker. 354type Platform_Property struct { 355 // The property name. 356 Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` 357 // The property value. 358 Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` 359} 360 361func (m *Platform_Property) Reset() { *m = Platform_Property{} } 362func (m *Platform_Property) String() string { return proto.CompactTextString(m) } 363func (*Platform_Property) ProtoMessage() {} 364func (*Platform_Property) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } 365 366func (m *Platform_Property) GetName() string { 367 if m != nil { 368 return m.Name 369 } 370 return "" 371} 372 373func (m *Platform_Property) GetValue() string { 374 if m != nil { 375 return m.Value 376 } 377 return "" 378} 379 380// A `Directory` represents a directory node in a file tree, containing zero or 381// more children [FileNodes][google.devtools.remoteexecution.v1test.FileNode] and 382// [DirectoryNodes][google.devtools.remoteexecution.v1test.DirectoryNode]. 383// Each `Node` contains its name in the directory, the digest of its content 384// (either a file blob or a `Directory` proto), as well as possibly some 385// metadata about the file or directory. 386// 387// In order to ensure that two equivalent directory trees hash to the same 388// value, the following restrictions MUST be obeyed when constructing a 389// a `Directory`: 390// - Every child in the directory must have a path of exactly one segment. 391// Multiple levels of directory hierarchy may not be collapsed. 392// - Each child in the directory must have a unique path segment (file name). 393// - The files and directories in the directory must each be sorted in 394// lexicographical order by path. The path strings must be sorted by code 395// point, equivalently, by UTF-8 bytes. 396// 397// A `Directory` that obeys the restrictions is said to be in canonical form. 398// 399// As an example, the following could be used for a file named `bar` and a 400// directory named `foo` with an executable file named `baz` (hashes shortened 401// for readability): 402// 403// ```json 404// // (Directory proto) 405// { 406// files: [ 407// { 408// name: "bar", 409// digest: { 410// hash: "4a73bc9d03...", 411// size: 65534 412// } 413// } 414// ], 415// directories: [ 416// { 417// name: "foo", 418// digest: { 419// hash: "4cf2eda940...", 420// size: 43 421// } 422// } 423// ] 424// } 425// 426// // (Directory proto with hash "4cf2eda940..." and size 43) 427// { 428// files: [ 429// { 430// name: "baz", 431// digest: { 432// hash: "b2c941073e...", 433// size: 1294, 434// }, 435// is_executable: true 436// } 437// ] 438// } 439// ``` 440type Directory struct { 441 // The files in the directory. 442 Files []*FileNode `protobuf:"bytes,1,rep,name=files" json:"files,omitempty"` 443 // The subdirectories in the directory. 444 Directories []*DirectoryNode `protobuf:"bytes,2,rep,name=directories" json:"directories,omitempty"` 445} 446 447func (m *Directory) Reset() { *m = Directory{} } 448func (m *Directory) String() string { return proto.CompactTextString(m) } 449func (*Directory) ProtoMessage() {} 450func (*Directory) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } 451 452func (m *Directory) GetFiles() []*FileNode { 453 if m != nil { 454 return m.Files 455 } 456 return nil 457} 458 459func (m *Directory) GetDirectories() []*DirectoryNode { 460 if m != nil { 461 return m.Directories 462 } 463 return nil 464} 465 466// A `FileNode` represents a single file and associated metadata. 467type FileNode struct { 468 // The name of the file. 469 Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` 470 // The digest of the file's content. 471 Digest *Digest `protobuf:"bytes,2,opt,name=digest" json:"digest,omitempty"` 472 // True if file is executable, false otherwise. 473 IsExecutable bool `protobuf:"varint,4,opt,name=is_executable,json=isExecutable" json:"is_executable,omitempty"` 474} 475 476func (m *FileNode) Reset() { *m = FileNode{} } 477func (m *FileNode) String() string { return proto.CompactTextString(m) } 478func (*FileNode) ProtoMessage() {} 479func (*FileNode) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } 480 481func (m *FileNode) GetName() string { 482 if m != nil { 483 return m.Name 484 } 485 return "" 486} 487 488func (m *FileNode) GetDigest() *Digest { 489 if m != nil { 490 return m.Digest 491 } 492 return nil 493} 494 495func (m *FileNode) GetIsExecutable() bool { 496 if m != nil { 497 return m.IsExecutable 498 } 499 return false 500} 501 502// A `DirectoryNode` represents a child of a 503// [Directory][google.devtools.remoteexecution.v1test.Directory] which is itself 504// a `Directory` and its associated metadata. 505type DirectoryNode struct { 506 // The name of the directory. 507 Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` 508 // The digest of the [Directory][google.devtools.remoteexecution.v1test.Directory] 509 // object represented. See [Digest][google.devtools.remoteexecution.v1test.Digest] 510 // for information about how to take the digest of a proto message. 511 Digest *Digest `protobuf:"bytes,2,opt,name=digest" json:"digest,omitempty"` 512} 513 514func (m *DirectoryNode) Reset() { *m = DirectoryNode{} } 515func (m *DirectoryNode) String() string { return proto.CompactTextString(m) } 516func (*DirectoryNode) ProtoMessage() {} 517func (*DirectoryNode) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } 518 519func (m *DirectoryNode) GetName() string { 520 if m != nil { 521 return m.Name 522 } 523 return "" 524} 525 526func (m *DirectoryNode) GetDigest() *Digest { 527 if m != nil { 528 return m.Digest 529 } 530 return nil 531} 532 533// A content digest. A digest for a given blob consists of the size of the blob 534// and its hash. The hash algorithm to use is defined by the server, but servers 535// SHOULD use SHA-256. 536// 537// The size is considered to be an integral part of the digest and cannot be 538// separated. That is, even if the `hash` field is correctly specified but 539// `size_bytes` is not, the server MUST reject the request. 540// 541// The reason for including the size in the digest is as follows: in a great 542// many cases, the server needs to know the size of the blob it is about to work 543// with prior to starting an operation with it, such as flattening Merkle tree 544// structures or streaming it to a worker. Technically, the server could 545// implement a separate metadata store, but this results in a significantly more 546// complicated implementation as opposed to having the client specify the size 547// up-front (or storing the size along with the digest in every message where 548// digests are embedded). This does mean that the API leaks some implementation 549// details of (what we consider to be) a reasonable server implementation, but 550// we consider this to be a worthwhile tradeoff. 551// 552// When a `Digest` is used to refer to a proto message, it always refers to the 553// message in binary encoded form. To ensure consistent hashing, clients and 554// servers MUST ensure that they serialize messages according to the following 555// rules, even if there are alternate valid encodings for the same message. 556// - Fields are serialized in tag order. 557// - There are no unknown fields. 558// - There are no duplicate fields. 559// - Fields are serialized according to the default semantics for their type. 560// 561// Most protocol buffer implementations will always follow these rules when 562// serializing, but care should be taken to avoid shortcuts. For instance, 563// concatenating two messages to merge them may produce duplicate fields. 564type Digest struct { 565 // The hash. In the case of SHA-256, it will always be a lowercase hex string 566 // exactly 64 characters long. 567 Hash string `protobuf:"bytes,1,opt,name=hash" json:"hash,omitempty"` 568 // The size of the blob, in bytes. 569 SizeBytes int64 `protobuf:"varint,2,opt,name=size_bytes,json=sizeBytes" json:"size_bytes,omitempty"` 570} 571 572func (m *Digest) Reset() { *m = Digest{} } 573func (m *Digest) String() string { return proto.CompactTextString(m) } 574func (*Digest) ProtoMessage() {} 575func (*Digest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } 576 577func (m *Digest) GetHash() string { 578 if m != nil { 579 return m.Hash 580 } 581 return "" 582} 583 584func (m *Digest) GetSizeBytes() int64 { 585 if m != nil { 586 return m.SizeBytes 587 } 588 return 0 589} 590 591// An ActionResult represents the result of an 592// [Action][google.devtools.remoteexecution.v1test.Action] being run. 593type ActionResult struct { 594 // The output files of the action. For each output file requested, if the 595 // corresponding file existed after the action completed, a single entry will 596 // be present in the output list. 597 // 598 // If the action does not produce the requested output, or produces a 599 // directory where a regular file is expected or vice versa, then that output 600 // will be omitted from the list. The server is free to arrange the output 601 // list as desired; clients MUST NOT assume that the output list is sorted. 602 OutputFiles []*OutputFile `protobuf:"bytes,2,rep,name=output_files,json=outputFiles" json:"output_files,omitempty"` 603 // The output directories of the action. For each output directory requested, 604 // if the corresponding directory existed after the action completed, a single 605 // entry will be present in the output list. The client can retrieve the full 606 // [Directory][google.devtools.remoteexecution.v1test.Directory] structure 607 // using [ContentAddressableStorage.GetTree][google.devtools.remoteexecution.v1test.ContentAddressableStorage.GetTree]. 608 // 609 // If the action does not produce the requested output, or produces a 610 // directory where a regular file is expected or vice versa, then that output 611 // will be omitted from the list. The server is free to arrange the output 612 // list as desired; clients MUST NOT assume that the output list is sorted. 613 OutputDirectories []*OutputDirectory `protobuf:"bytes,3,rep,name=output_directories,json=outputDirectories" json:"output_directories,omitempty"` 614 // The exit code of the command. 615 ExitCode int32 `protobuf:"varint,4,opt,name=exit_code,json=exitCode" json:"exit_code,omitempty"` 616 // The standard output buffer of the action. The server will determine, based 617 // on the size of the buffer, whether to return it in raw form or to return 618 // a digest in `stdout_digest` that points to the buffer. If neither is set, 619 // then the buffer is empty. The client SHOULD NOT assume it will get one of 620 // the raw buffer or a digest on any given request and should be prepared to 621 // handle either. 622 StdoutRaw []byte `protobuf:"bytes,5,opt,name=stdout_raw,json=stdoutRaw,proto3" json:"stdout_raw,omitempty"` 623 // The digest for a blob containing the standard output of the action, which 624 // can be retrieved from the 625 // [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage]. 626 // See `stdout_raw` for when this will be set. 627 StdoutDigest *Digest `protobuf:"bytes,6,opt,name=stdout_digest,json=stdoutDigest" json:"stdout_digest,omitempty"` 628 // The standard error buffer of the action. The server will determine, based 629 // on the size of the buffer, whether to return it in raw form or to return 630 // a digest in `stderr_digest` that points to the buffer. If neither is set, 631 // then the buffer is empty. The client SHOULD NOT assume it will get one of 632 // the raw buffer or a digest on any given request and should be prepared to 633 // handle either. 634 StderrRaw []byte `protobuf:"bytes,7,opt,name=stderr_raw,json=stderrRaw,proto3" json:"stderr_raw,omitempty"` 635 // The digest for a blob containing the standard error of the action, which 636 // can be retrieved from the 637 // [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage]. 638 // See `stderr_raw` for when this will be set. 639 StderrDigest *Digest `protobuf:"bytes,8,opt,name=stderr_digest,json=stderrDigest" json:"stderr_digest,omitempty"` 640} 641 642func (m *ActionResult) Reset() { *m = ActionResult{} } 643func (m *ActionResult) String() string { return proto.CompactTextString(m) } 644func (*ActionResult) ProtoMessage() {} 645func (*ActionResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } 646 647func (m *ActionResult) GetOutputFiles() []*OutputFile { 648 if m != nil { 649 return m.OutputFiles 650 } 651 return nil 652} 653 654func (m *ActionResult) GetOutputDirectories() []*OutputDirectory { 655 if m != nil { 656 return m.OutputDirectories 657 } 658 return nil 659} 660 661func (m *ActionResult) GetExitCode() int32 { 662 if m != nil { 663 return m.ExitCode 664 } 665 return 0 666} 667 668func (m *ActionResult) GetStdoutRaw() []byte { 669 if m != nil { 670 return m.StdoutRaw 671 } 672 return nil 673} 674 675func (m *ActionResult) GetStdoutDigest() *Digest { 676 if m != nil { 677 return m.StdoutDigest 678 } 679 return nil 680} 681 682func (m *ActionResult) GetStderrRaw() []byte { 683 if m != nil { 684 return m.StderrRaw 685 } 686 return nil 687} 688 689func (m *ActionResult) GetStderrDigest() *Digest { 690 if m != nil { 691 return m.StderrDigest 692 } 693 return nil 694} 695 696// An `OutputFile` is similar to a 697// [FileNode][google.devtools.remoteexecution.v1test.FileNode], but it is 698// tailored for output as part of an `ActionResult`. It allows a full file path 699// rather than only a name, and allows the server to include content inline. 700// 701// `OutputFile` is binary-compatible with `FileNode`. 702type OutputFile struct { 703 // The full path of the file relative to the input root, including the 704 // filename. The path separator is a forward slash `/`. 705 Path string `protobuf:"bytes,1,opt,name=path" json:"path,omitempty"` 706 // The digest of the file's content. 707 Digest *Digest `protobuf:"bytes,2,opt,name=digest" json:"digest,omitempty"` 708 // The raw content of the file. 709 // 710 // This field may be used by the server to provide the content of a file 711 // inline in an [ActionResult][google.devtools.remoteexecution.v1test.ActionResult] 712 // and avoid requiring that the client make a separate call to 713 // [ContentAddressableStorage.GetBlob] to retrieve it. 714 // 715 // The client SHOULD NOT assume that it will get raw content with any request, 716 // and always be prepared to retrieve it via `digest`. 717 Content []byte `protobuf:"bytes,3,opt,name=content,proto3" json:"content,omitempty"` 718 // True if file is executable, false otherwise. 719 IsExecutable bool `protobuf:"varint,4,opt,name=is_executable,json=isExecutable" json:"is_executable,omitempty"` 720} 721 722func (m *OutputFile) Reset() { *m = OutputFile{} } 723func (m *OutputFile) String() string { return proto.CompactTextString(m) } 724func (*OutputFile) ProtoMessage() {} 725func (*OutputFile) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } 726 727func (m *OutputFile) GetPath() string { 728 if m != nil { 729 return m.Path 730 } 731 return "" 732} 733 734func (m *OutputFile) GetDigest() *Digest { 735 if m != nil { 736 return m.Digest 737 } 738 return nil 739} 740 741func (m *OutputFile) GetContent() []byte { 742 if m != nil { 743 return m.Content 744 } 745 return nil 746} 747 748func (m *OutputFile) GetIsExecutable() bool { 749 if m != nil { 750 return m.IsExecutable 751 } 752 return false 753} 754 755// An `OutputDirectory` is similar to a 756// [DirectoryNode][google.devtools.remoteexecution.v1test.DirectoryNode], 757// but it is tailored for output as part of an `ActionResult`. It allows a full 758// file path rather than only a name. It contains the digest of a 759// [Directory][google.devtools.remoteexecution.v1test.Directory] which will meet 760// all the usual requirements for a `Directory`. 761// 762// `OutputDirectory` is binary-compatible with `DirectoryNode`. 763type OutputDirectory struct { 764 // The full path of the directory relative to the input root, including the 765 // filename. The path separator is a forward slash `/`. 766 Path string `protobuf:"bytes,1,opt,name=path" json:"path,omitempty"` 767 // The digest of the [Directory][google.devtools.remoteexecution.v1test.Directory] 768 // proto describing the directory's contents. 769 Digest *Digest `protobuf:"bytes,2,opt,name=digest" json:"digest,omitempty"` 770} 771 772func (m *OutputDirectory) Reset() { *m = OutputDirectory{} } 773func (m *OutputDirectory) String() string { return proto.CompactTextString(m) } 774func (*OutputDirectory) ProtoMessage() {} 775func (*OutputDirectory) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } 776 777func (m *OutputDirectory) GetPath() string { 778 if m != nil { 779 return m.Path 780 } 781 return "" 782} 783 784func (m *OutputDirectory) GetDigest() *Digest { 785 if m != nil { 786 return m.Digest 787 } 788 return nil 789} 790 791// A request message for 792// [Execution.Execute][google.devtools.remoteexecution.v1test.Execution.Execute]. 793type ExecuteRequest struct { 794 // The instance of the execution system to operate against. A server may 795 // support multiple instances of the execution system (with their own workers, 796 // storage, caches, etc.). The server MAY require use of this field to select 797 // between them in an implementation-defined fashion, otherwise it can be 798 // omitted. 799 InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName" json:"instance_name,omitempty"` 800 // The action to be performed. 801 Action *Action `protobuf:"bytes,2,opt,name=action" json:"action,omitempty"` 802 // If true, the action will be executed anew even if its result was already 803 // present in the cache. If false, the result may be served from the 804 // [ActionCache][google.devtools.remoteexecution.v1test.ActionCache]. 805 SkipCacheLookup bool `protobuf:"varint,3,opt,name=skip_cache_lookup,json=skipCacheLookup" json:"skip_cache_lookup,omitempty"` 806 // The total count of input files, not counting directories. This must be 807 // provided so that the server can do resource allocation and, on servers with 808 // quotas, quota checking. It is also used as a safety check: servers MUST 809 // return an error if the total number of input files described in the 810 // `action` is different. 811 TotalInputFileCount int32 `protobuf:"varint,4,opt,name=total_input_file_count,json=totalInputFileCount" json:"total_input_file_count,omitempty"` 812 // The total size of input file content, provided as a hint and check. This 813 // must be provided so that the server can do resource allocation and, on 814 // servers with quotas, quota checking. It is also used as a safety check: 815 // servers MUST return an error if the total size of input files described in 816 // the `action` is different. 817 TotalInputFileBytes int64 `protobuf:"varint,5,opt,name=total_input_file_bytes,json=totalInputFileBytes" json:"total_input_file_bytes,omitempty"` 818} 819 820func (m *ExecuteRequest) Reset() { *m = ExecuteRequest{} } 821func (m *ExecuteRequest) String() string { return proto.CompactTextString(m) } 822func (*ExecuteRequest) ProtoMessage() {} 823func (*ExecuteRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } 824 825func (m *ExecuteRequest) GetInstanceName() string { 826 if m != nil { 827 return m.InstanceName 828 } 829 return "" 830} 831 832func (m *ExecuteRequest) GetAction() *Action { 833 if m != nil { 834 return m.Action 835 } 836 return nil 837} 838 839func (m *ExecuteRequest) GetSkipCacheLookup() bool { 840 if m != nil { 841 return m.SkipCacheLookup 842 } 843 return false 844} 845 846func (m *ExecuteRequest) GetTotalInputFileCount() int32 { 847 if m != nil { 848 return m.TotalInputFileCount 849 } 850 return 0 851} 852 853func (m *ExecuteRequest) GetTotalInputFileBytes() int64 { 854 if m != nil { 855 return m.TotalInputFileBytes 856 } 857 return 0 858} 859 860// The response message for 861// [Execution.Execute][google.devtools.remoteexecution.v1test.Execution.Execute], 862// which will be contained in the [response field][google.longrunning.Operation.response] of the 863// [Operation][google.longrunning.Operation]. 864type ExecuteResponse struct { 865 // The result of the action. 866 Result *ActionResult `protobuf:"bytes,1,opt,name=result" json:"result,omitempty"` 867 // True if the result was served from cache, false if it was executed. 868 CachedResult bool `protobuf:"varint,2,opt,name=cached_result,json=cachedResult" json:"cached_result,omitempty"` 869} 870 871func (m *ExecuteResponse) Reset() { *m = ExecuteResponse{} } 872func (m *ExecuteResponse) String() string { return proto.CompactTextString(m) } 873func (*ExecuteResponse) ProtoMessage() {} 874func (*ExecuteResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } 875 876func (m *ExecuteResponse) GetResult() *ActionResult { 877 if m != nil { 878 return m.Result 879 } 880 return nil 881} 882 883func (m *ExecuteResponse) GetCachedResult() bool { 884 if m != nil { 885 return m.CachedResult 886 } 887 return false 888} 889 890// Metadata about an ongoing [execution][google.devtools.remoteexecution.v1test.Execution.Execute], 891// which will be 892// contained in the [metadata field][google.longrunning.Operation.response] of 893// the [Operation][google.longrunning.Operation]. 894type ExecuteOperationMetadata struct { 895 Stage ExecuteOperationMetadata_Stage `protobuf:"varint,1,opt,name=stage,enum=google.devtools.remoteexecution.v1test.ExecuteOperationMetadata_Stage" json:"stage,omitempty"` 896 // The digest of the [Action][google.devtools.remoteexecution.v1test.Action] 897 // being executed. 898 ActionDigest *Digest `protobuf:"bytes,2,opt,name=action_digest,json=actionDigest" json:"action_digest,omitempty"` 899 // If set, the client can use this name with 900 // [ByteStream.Read][google.bytestream.ByteStream.Read] to stream the 901 // standard output. 902 StdoutStreamName string `protobuf:"bytes,3,opt,name=stdout_stream_name,json=stdoutStreamName" json:"stdout_stream_name,omitempty"` 903 // If set, the client can use this name with 904 // [ByteStream.Read][google.bytestream.ByteStream.Read] to stream the 905 // standard error. 906 StderrStreamName string `protobuf:"bytes,4,opt,name=stderr_stream_name,json=stderrStreamName" json:"stderr_stream_name,omitempty"` 907} 908 909func (m *ExecuteOperationMetadata) Reset() { *m = ExecuteOperationMetadata{} } 910func (m *ExecuteOperationMetadata) String() string { return proto.CompactTextString(m) } 911func (*ExecuteOperationMetadata) ProtoMessage() {} 912func (*ExecuteOperationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } 913 914func (m *ExecuteOperationMetadata) GetStage() ExecuteOperationMetadata_Stage { 915 if m != nil { 916 return m.Stage 917 } 918 return ExecuteOperationMetadata_UNKNOWN 919} 920 921func (m *ExecuteOperationMetadata) GetActionDigest() *Digest { 922 if m != nil { 923 return m.ActionDigest 924 } 925 return nil 926} 927 928func (m *ExecuteOperationMetadata) GetStdoutStreamName() string { 929 if m != nil { 930 return m.StdoutStreamName 931 } 932 return "" 933} 934 935func (m *ExecuteOperationMetadata) GetStderrStreamName() string { 936 if m != nil { 937 return m.StderrStreamName 938 } 939 return "" 940} 941 942// A request message for 943// [ActionCache.GetActionResult][google.devtools.remoteexecution.v1test.ActionCache.GetActionResult]. 944type GetActionResultRequest struct { 945 // The instance of the execution system to operate against. A server may 946 // support multiple instances of the execution system (with their own workers, 947 // storage, caches, etc.). The server MAY require use of this field to select 948 // between them in an implementation-defined fashion, otherwise it can be 949 // omitted. 950 InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName" json:"instance_name,omitempty"` 951 // The digest of the [Action][google.devtools.remoteexecution.v1test.Action] 952 // whose result is requested. 953 ActionDigest *Digest `protobuf:"bytes,2,opt,name=action_digest,json=actionDigest" json:"action_digest,omitempty"` 954} 955 956func (m *GetActionResultRequest) Reset() { *m = GetActionResultRequest{} } 957func (m *GetActionResultRequest) String() string { return proto.CompactTextString(m) } 958func (*GetActionResultRequest) ProtoMessage() {} 959func (*GetActionResultRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } 960 961func (m *GetActionResultRequest) GetInstanceName() string { 962 if m != nil { 963 return m.InstanceName 964 } 965 return "" 966} 967 968func (m *GetActionResultRequest) GetActionDigest() *Digest { 969 if m != nil { 970 return m.ActionDigest 971 } 972 return nil 973} 974 975// A request message for 976// [ActionCache.UpdateActionResult][google.devtools.remoteexecution.v1test.ActionCache.UpdateActionResult]. 977type UpdateActionResultRequest struct { 978 // The instance of the execution system to operate against. A server may 979 // support multiple instances of the execution system (with their own workers, 980 // storage, caches, etc.). The server MAY require use of this field to select 981 // between them in an implementation-defined fashion, otherwise it can be 982 // omitted. 983 InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName" json:"instance_name,omitempty"` 984 // The digest of the [Action][google.devtools.remoteexecution.v1test.Action] 985 // whose result is being uploaded. 986 ActionDigest *Digest `protobuf:"bytes,2,opt,name=action_digest,json=actionDigest" json:"action_digest,omitempty"` 987 // The [ActionResult][google.devtools.remoteexecution.v1test.ActionResult] 988 // to store in the cache. 989 ActionResult *ActionResult `protobuf:"bytes,3,opt,name=action_result,json=actionResult" json:"action_result,omitempty"` 990} 991 992func (m *UpdateActionResultRequest) Reset() { *m = UpdateActionResultRequest{} } 993func (m *UpdateActionResultRequest) String() string { return proto.CompactTextString(m) } 994func (*UpdateActionResultRequest) ProtoMessage() {} 995func (*UpdateActionResultRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } 996 997func (m *UpdateActionResultRequest) GetInstanceName() string { 998 if m != nil { 999 return m.InstanceName 1000 } 1001 return "" 1002} 1003 1004func (m *UpdateActionResultRequest) GetActionDigest() *Digest { 1005 if m != nil { 1006 return m.ActionDigest 1007 } 1008 return nil 1009} 1010 1011func (m *UpdateActionResultRequest) GetActionResult() *ActionResult { 1012 if m != nil { 1013 return m.ActionResult 1014 } 1015 return nil 1016} 1017 1018// A request message for 1019// [ContentAddressableStorage.FindMissingBlobs][google.devtools.remoteexecution.v1test.ContentAddressableStorage.FindMissingBlobs]. 1020type FindMissingBlobsRequest struct { 1021 // The instance of the execution system to operate against. A server may 1022 // support multiple instances of the execution system (with their own workers, 1023 // storage, caches, etc.). The server MAY require use of this field to select 1024 // between them in an implementation-defined fashion, otherwise it can be 1025 // omitted. 1026 InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName" json:"instance_name,omitempty"` 1027 // A list of the blobs to check. 1028 BlobDigests []*Digest `protobuf:"bytes,2,rep,name=blob_digests,json=blobDigests" json:"blob_digests,omitempty"` 1029} 1030 1031func (m *FindMissingBlobsRequest) Reset() { *m = FindMissingBlobsRequest{} } 1032func (m *FindMissingBlobsRequest) String() string { return proto.CompactTextString(m) } 1033func (*FindMissingBlobsRequest) ProtoMessage() {} 1034func (*FindMissingBlobsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } 1035 1036func (m *FindMissingBlobsRequest) GetInstanceName() string { 1037 if m != nil { 1038 return m.InstanceName 1039 } 1040 return "" 1041} 1042 1043func (m *FindMissingBlobsRequest) GetBlobDigests() []*Digest { 1044 if m != nil { 1045 return m.BlobDigests 1046 } 1047 return nil 1048} 1049 1050// A response message for 1051// [ContentAddressableStorage.FindMissingBlobs][google.devtools.remoteexecution.v1test.ContentAddressableStorage.FindMissingBlobs]. 1052type FindMissingBlobsResponse struct { 1053 // A list of the blobs requested *not* present in the storage. 1054 MissingBlobDigests []*Digest `protobuf:"bytes,2,rep,name=missing_blob_digests,json=missingBlobDigests" json:"missing_blob_digests,omitempty"` 1055} 1056 1057func (m *FindMissingBlobsResponse) Reset() { *m = FindMissingBlobsResponse{} } 1058func (m *FindMissingBlobsResponse) String() string { return proto.CompactTextString(m) } 1059func (*FindMissingBlobsResponse) ProtoMessage() {} 1060func (*FindMissingBlobsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } 1061 1062func (m *FindMissingBlobsResponse) GetMissingBlobDigests() []*Digest { 1063 if m != nil { 1064 return m.MissingBlobDigests 1065 } 1066 return nil 1067} 1068 1069// A single request message for 1070// [ContentAddressableStorage.BatchUpdateBlobs][google.devtools.remoteexecution.v1test.ContentAddressableStorage.BatchUpdateBlobs]. 1071type UpdateBlobRequest struct { 1072 // The digest of the blob. This MUST be the digest of `data`. 1073 ContentDigest *Digest `protobuf:"bytes,1,opt,name=content_digest,json=contentDigest" json:"content_digest,omitempty"` 1074 // The raw binary data. 1075 Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` 1076} 1077 1078func (m *UpdateBlobRequest) Reset() { *m = UpdateBlobRequest{} } 1079func (m *UpdateBlobRequest) String() string { return proto.CompactTextString(m) } 1080func (*UpdateBlobRequest) ProtoMessage() {} 1081func (*UpdateBlobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } 1082 1083func (m *UpdateBlobRequest) GetContentDigest() *Digest { 1084 if m != nil { 1085 return m.ContentDigest 1086 } 1087 return nil 1088} 1089 1090func (m *UpdateBlobRequest) GetData() []byte { 1091 if m != nil { 1092 return m.Data 1093 } 1094 return nil 1095} 1096 1097// A request message for 1098// [ContentAddressableStorage.BatchUpdateBlobs][google.devtools.remoteexecution.v1test.ContentAddressableStorage.BatchUpdateBlobs]. 1099type BatchUpdateBlobsRequest struct { 1100 // The instance of the execution system to operate against. A server may 1101 // support multiple instances of the execution system (with their own workers, 1102 // storage, caches, etc.). The server MAY require use of this field to select 1103 // between them in an implementation-defined fashion, otherwise it can be 1104 // omitted. 1105 InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName" json:"instance_name,omitempty"` 1106 // The individual upload requests. 1107 Requests []*UpdateBlobRequest `protobuf:"bytes,2,rep,name=requests" json:"requests,omitempty"` 1108} 1109 1110func (m *BatchUpdateBlobsRequest) Reset() { *m = BatchUpdateBlobsRequest{} } 1111func (m *BatchUpdateBlobsRequest) String() string { return proto.CompactTextString(m) } 1112func (*BatchUpdateBlobsRequest) ProtoMessage() {} 1113func (*BatchUpdateBlobsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } 1114 1115func (m *BatchUpdateBlobsRequest) GetInstanceName() string { 1116 if m != nil { 1117 return m.InstanceName 1118 } 1119 return "" 1120} 1121 1122func (m *BatchUpdateBlobsRequest) GetRequests() []*UpdateBlobRequest { 1123 if m != nil { 1124 return m.Requests 1125 } 1126 return nil 1127} 1128 1129// A response message for 1130// [ContentAddressableStorage.BatchUpdateBlobs][google.devtools.remoteexecution.v1test.ContentAddressableStorage.BatchUpdateBlobs]. 1131type BatchUpdateBlobsResponse struct { 1132 // The responses to the requests. 1133 Responses []*BatchUpdateBlobsResponse_Response `protobuf:"bytes,1,rep,name=responses" json:"responses,omitempty"` 1134} 1135 1136func (m *BatchUpdateBlobsResponse) Reset() { *m = BatchUpdateBlobsResponse{} } 1137func (m *BatchUpdateBlobsResponse) String() string { return proto.CompactTextString(m) } 1138func (*BatchUpdateBlobsResponse) ProtoMessage() {} 1139func (*BatchUpdateBlobsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } 1140 1141func (m *BatchUpdateBlobsResponse) GetResponses() []*BatchUpdateBlobsResponse_Response { 1142 if m != nil { 1143 return m.Responses 1144 } 1145 return nil 1146} 1147 1148// A response corresponding to a single blob that the client tried to upload. 1149type BatchUpdateBlobsResponse_Response struct { 1150 // The digest to which this response corresponds. 1151 BlobDigest *Digest `protobuf:"bytes,1,opt,name=blob_digest,json=blobDigest" json:"blob_digest,omitempty"` 1152 // The result of attempting to upload that blob. 1153 Status *google_rpc.Status `protobuf:"bytes,2,opt,name=status" json:"status,omitempty"` 1154} 1155 1156func (m *BatchUpdateBlobsResponse_Response) Reset() { *m = BatchUpdateBlobsResponse_Response{} } 1157func (m *BatchUpdateBlobsResponse_Response) String() string { return proto.CompactTextString(m) } 1158func (*BatchUpdateBlobsResponse_Response) ProtoMessage() {} 1159func (*BatchUpdateBlobsResponse_Response) Descriptor() ([]byte, []int) { 1160 return fileDescriptor0, []int{19, 0} 1161} 1162 1163func (m *BatchUpdateBlobsResponse_Response) GetBlobDigest() *Digest { 1164 if m != nil { 1165 return m.BlobDigest 1166 } 1167 return nil 1168} 1169 1170func (m *BatchUpdateBlobsResponse_Response) GetStatus() *google_rpc.Status { 1171 if m != nil { 1172 return m.Status 1173 } 1174 return nil 1175} 1176 1177// A request message for 1178// [ContentAddressableStorage.GetTree][google.devtools.remoteexecution.v1test.ContentAddressableStorage.GetTree]. 1179type GetTreeRequest struct { 1180 // The instance of the execution system to operate against. A server may 1181 // support multiple instances of the execution system (with their own workers, 1182 // storage, caches, etc.). The server MAY require use of this field to select 1183 // between them in an implementation-defined fashion, otherwise it can be 1184 // omitted. 1185 InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName" json:"instance_name,omitempty"` 1186 // The digest of the root, which must be an encoded 1187 // [Directory][google.devtools.remoteexecution.v1test.Directory] message 1188 // stored in the [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage]. 1189 RootDigest *Digest `protobuf:"bytes,2,opt,name=root_digest,json=rootDigest" json:"root_digest,omitempty"` 1190 // A maximum page size to request. If present, the server will request no more 1191 // than this many items. Regardless of whether a page size is specified, the 1192 // server may place its own limit on the number of items to be returned and 1193 // require the client to retrieve more items using a subsequent request. 1194 PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` 1195 // A page token, which must be a value received in a previous 1196 // [GetTreeResponse][google.devtools.remoteexecution.v1test.GetTreeResponse]. 1197 // If present, the server will use it to return the following page of results. 1198 PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` 1199} 1200 1201func (m *GetTreeRequest) Reset() { *m = GetTreeRequest{} } 1202func (m *GetTreeRequest) String() string { return proto.CompactTextString(m) } 1203func (*GetTreeRequest) ProtoMessage() {} 1204func (*GetTreeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } 1205 1206func (m *GetTreeRequest) GetInstanceName() string { 1207 if m != nil { 1208 return m.InstanceName 1209 } 1210 return "" 1211} 1212 1213func (m *GetTreeRequest) GetRootDigest() *Digest { 1214 if m != nil { 1215 return m.RootDigest 1216 } 1217 return nil 1218} 1219 1220func (m *GetTreeRequest) GetPageSize() int32 { 1221 if m != nil { 1222 return m.PageSize 1223 } 1224 return 0 1225} 1226 1227func (m *GetTreeRequest) GetPageToken() string { 1228 if m != nil { 1229 return m.PageToken 1230 } 1231 return "" 1232} 1233 1234// A response message for 1235// [ContentAddressableStorage.GetTree][google.devtools.remoteexecution.v1test.ContentAddressableStorage.GetTree]. 1236type GetTreeResponse struct { 1237 // The directories descended from the requested root. 1238 Directories []*Directory `protobuf:"bytes,1,rep,name=directories" json:"directories,omitempty"` 1239 // If present, signifies that there are more results which the client can 1240 // retrieve by passing this as the page_token in a subsequent 1241 // [request][google.devtools.remoteexecution.v1test.GetTreeRequest]. 1242 // If empty, signifies that this is the last page of results. 1243 NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` 1244} 1245 1246func (m *GetTreeResponse) Reset() { *m = GetTreeResponse{} } 1247func (m *GetTreeResponse) String() string { return proto.CompactTextString(m) } 1248func (*GetTreeResponse) ProtoMessage() {} 1249func (*GetTreeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } 1250 1251func (m *GetTreeResponse) GetDirectories() []*Directory { 1252 if m != nil { 1253 return m.Directories 1254 } 1255 return nil 1256} 1257 1258func (m *GetTreeResponse) GetNextPageToken() string { 1259 if m != nil { 1260 return m.NextPageToken 1261 } 1262 return "" 1263} 1264 1265// Details for the tool used to call the API. 1266type ToolDetails struct { 1267 // Name of the tool, e.g. bazel. 1268 ToolName string `protobuf:"bytes,1,opt,name=tool_name,json=toolName" json:"tool_name,omitempty"` 1269 // Version of the tool used for the request, e.g. 5.0.3. 1270 ToolVersion string `protobuf:"bytes,2,opt,name=tool_version,json=toolVersion" json:"tool_version,omitempty"` 1271} 1272 1273func (m *ToolDetails) Reset() { *m = ToolDetails{} } 1274func (m *ToolDetails) String() string { return proto.CompactTextString(m) } 1275func (*ToolDetails) ProtoMessage() {} 1276func (*ToolDetails) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } 1277 1278func (m *ToolDetails) GetToolName() string { 1279 if m != nil { 1280 return m.ToolName 1281 } 1282 return "" 1283} 1284 1285func (m *ToolDetails) GetToolVersion() string { 1286 if m != nil { 1287 return m.ToolVersion 1288 } 1289 return "" 1290} 1291 1292// An optional Metadata to attach to a RPC request to tell the server about an 1293// external context of the request. 1294// If used, the header name should be remote-request-metadata-bin and the 1295// contents the base64 encoded binary RequestMetadata message. 1296type RequestMetadata struct { 1297 // The details for the tool invoking the requests. 1298 ToolDetails *ToolDetails `protobuf:"bytes,1,opt,name=tool_details,json=toolDetails" json:"tool_details,omitempty"` 1299 // An identifier that ties multiple requests to the same action. 1300 // For example, multiple requests to the CAS, Action Cache, and Execution 1301 // API are used in order to compile foo.cc. 1302 ActionId string `protobuf:"bytes,2,opt,name=action_id,json=actionId" json:"action_id,omitempty"` 1303 // An identifier that ties multiple actions together to a final result. 1304 // For example, multiple actions are required to build and run foo_test. 1305 ToolInvocationId string `protobuf:"bytes,3,opt,name=tool_invocation_id,json=toolInvocationId" json:"tool_invocation_id,omitempty"` 1306 // An identifier to tie multiple tool invocations together. For example, 1307 // runs of foo_test, bar_test and baz_test on a post-submit of a given patch. 1308 CorrelatedInvocationsId string `protobuf:"bytes,4,opt,name=correlated_invocations_id,json=correlatedInvocationsId" json:"correlated_invocations_id,omitempty"` 1309} 1310 1311func (m *RequestMetadata) Reset() { *m = RequestMetadata{} } 1312func (m *RequestMetadata) String() string { return proto.CompactTextString(m) } 1313func (*RequestMetadata) ProtoMessage() {} 1314func (*RequestMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } 1315 1316func (m *RequestMetadata) GetToolDetails() *ToolDetails { 1317 if m != nil { 1318 return m.ToolDetails 1319 } 1320 return nil 1321} 1322 1323func (m *RequestMetadata) GetActionId() string { 1324 if m != nil { 1325 return m.ActionId 1326 } 1327 return "" 1328} 1329 1330func (m *RequestMetadata) GetToolInvocationId() string { 1331 if m != nil { 1332 return m.ToolInvocationId 1333 } 1334 return "" 1335} 1336 1337func (m *RequestMetadata) GetCorrelatedInvocationsId() string { 1338 if m != nil { 1339 return m.CorrelatedInvocationsId 1340 } 1341 return "" 1342} 1343 1344func init() { 1345 proto.RegisterType((*Action)(nil), "google.devtools.remoteexecution.v1test.Action") 1346 proto.RegisterType((*Command)(nil), "google.devtools.remoteexecution.v1test.Command") 1347 proto.RegisterType((*Command_EnvironmentVariable)(nil), "google.devtools.remoteexecution.v1test.Command.EnvironmentVariable") 1348 proto.RegisterType((*Platform)(nil), "google.devtools.remoteexecution.v1test.Platform") 1349 proto.RegisterType((*Platform_Property)(nil), "google.devtools.remoteexecution.v1test.Platform.Property") 1350 proto.RegisterType((*Directory)(nil), "google.devtools.remoteexecution.v1test.Directory") 1351 proto.RegisterType((*FileNode)(nil), "google.devtools.remoteexecution.v1test.FileNode") 1352 proto.RegisterType((*DirectoryNode)(nil), "google.devtools.remoteexecution.v1test.DirectoryNode") 1353 proto.RegisterType((*Digest)(nil), "google.devtools.remoteexecution.v1test.Digest") 1354 proto.RegisterType((*ActionResult)(nil), "google.devtools.remoteexecution.v1test.ActionResult") 1355 proto.RegisterType((*OutputFile)(nil), "google.devtools.remoteexecution.v1test.OutputFile") 1356 proto.RegisterType((*OutputDirectory)(nil), "google.devtools.remoteexecution.v1test.OutputDirectory") 1357 proto.RegisterType((*ExecuteRequest)(nil), "google.devtools.remoteexecution.v1test.ExecuteRequest") 1358 proto.RegisterType((*ExecuteResponse)(nil), "google.devtools.remoteexecution.v1test.ExecuteResponse") 1359 proto.RegisterType((*ExecuteOperationMetadata)(nil), "google.devtools.remoteexecution.v1test.ExecuteOperationMetadata") 1360 proto.RegisterType((*GetActionResultRequest)(nil), "google.devtools.remoteexecution.v1test.GetActionResultRequest") 1361 proto.RegisterType((*UpdateActionResultRequest)(nil), "google.devtools.remoteexecution.v1test.UpdateActionResultRequest") 1362 proto.RegisterType((*FindMissingBlobsRequest)(nil), "google.devtools.remoteexecution.v1test.FindMissingBlobsRequest") 1363 proto.RegisterType((*FindMissingBlobsResponse)(nil), "google.devtools.remoteexecution.v1test.FindMissingBlobsResponse") 1364 proto.RegisterType((*UpdateBlobRequest)(nil), "google.devtools.remoteexecution.v1test.UpdateBlobRequest") 1365 proto.RegisterType((*BatchUpdateBlobsRequest)(nil), "google.devtools.remoteexecution.v1test.BatchUpdateBlobsRequest") 1366 proto.RegisterType((*BatchUpdateBlobsResponse)(nil), "google.devtools.remoteexecution.v1test.BatchUpdateBlobsResponse") 1367 proto.RegisterType((*BatchUpdateBlobsResponse_Response)(nil), "google.devtools.remoteexecution.v1test.BatchUpdateBlobsResponse.Response") 1368 proto.RegisterType((*GetTreeRequest)(nil), "google.devtools.remoteexecution.v1test.GetTreeRequest") 1369 proto.RegisterType((*GetTreeResponse)(nil), "google.devtools.remoteexecution.v1test.GetTreeResponse") 1370 proto.RegisterType((*ToolDetails)(nil), "google.devtools.remoteexecution.v1test.ToolDetails") 1371 proto.RegisterType((*RequestMetadata)(nil), "google.devtools.remoteexecution.v1test.RequestMetadata") 1372 proto.RegisterEnum("google.devtools.remoteexecution.v1test.ExecuteOperationMetadata_Stage", ExecuteOperationMetadata_Stage_name, ExecuteOperationMetadata_Stage_value) 1373} 1374 1375// Reference imports to suppress errors if they are not otherwise used. 1376var _ context.Context 1377var _ grpc.ClientConn 1378 1379// This is a compile-time assertion to ensure that this generated file 1380// is compatible with the grpc package it is being compiled against. 1381const _ = grpc.SupportPackageIsVersion4 1382 1383// Client API for Execution service 1384 1385type ExecutionClient interface { 1386 // Execute an action remotely. 1387 // 1388 // In order to execute an action, the client must first upload all of the 1389 // inputs, as well as the [Command][google.devtools.remoteexecution.v1test.Command] 1390 // to run, into the [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage]. 1391 // It then calls `Execute` with an [Action][google.devtools.remoteexecution.v1test.Action] 1392 // referring to them. The server will run the action and eventually return the 1393 // result. 1394 // 1395 // The input `Action`'s fields MUST meet the various canonicalization 1396 // requirements specified in the documentation for their types so that it has 1397 // the same digest as other logically equivalent `Action`s. The server MAY 1398 // enforce the requirements and return errors if a non-canonical input is 1399 // received. It MAY also proceed without verifying some or all of the 1400 // requirements, such as for performance reasons. If the server does not 1401 // verify the requirement, then it will treat the `Action` as distinct from 1402 // another logically equivalent action if they hash differently. 1403 // 1404 // Returns a [google.longrunning.Operation][google.longrunning.Operation] 1405 // describing the resulting execution, with eventual `response` 1406 // [ExecuteResponse][google.devtools.remoteexecution.v1test.ExecuteResponse]. 1407 // The `metadata` on the operation is of type 1408 // [ExecuteOperationMetadata][google.devtools.remoteexecution.v1test.ExecuteOperationMetadata]. 1409 // 1410 // To query the operation, you can use the 1411 // [Operations API][google.longrunning.Operations.GetOperation]. If you wish 1412 // to allow the server to stream operations updates, rather than requiring 1413 // client polling, you can use the 1414 // [Watcher API][google.watcher.v1.Watcher.Watch] with the Operation's `name` 1415 // as the `target`. 1416 // 1417 // When using the Watcher API, the initial `data` will be the `Operation` at 1418 // the time of the request. Updates will be provided periodically by the 1419 // server until the `Operation` completes, at which point the response message 1420 // will (assuming no error) be at `data.response`. 1421 // 1422 // The server NEED NOT implement other methods or functionality of the 1423 // Operation and Watcher APIs. 1424 // 1425 // Errors discovered during creation of the `Operation` will be reported 1426 // as gRPC Status errors, while errors that occurred while running the 1427 // `Operation` will be reported in the `Operation` error field. 1428 // The possible errors include: 1429 // * `INVALID_ARGUMENT`: One or more arguments are invalid. 1430 // * `FAILED_PRECONDITION`: One or more errors occurred in setting up the 1431 // action requested, such as a missing input or no worker being available. 1432 // The client may be able to fix the errors and retry. 1433 // * `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to run 1434 // the action. 1435 // * `UNAVAILABLE`: Due to a transient condition, such as all workers being 1436 // occupied (and the server does not support a queue), the action could not 1437 // be started. The client should retry. 1438 // * `INTERNAL`: An internal error occurred in the execution engine or the 1439 // worker. 1440 // * `DEADLINE_EXCEEDED`: The execution timed out. 1441 Execute(ctx context.Context, in *ExecuteRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) 1442} 1443 1444type executionClient struct { 1445 cc *grpc.ClientConn 1446} 1447 1448func NewExecutionClient(cc *grpc.ClientConn) ExecutionClient { 1449 return &executionClient{cc} 1450} 1451 1452func (c *executionClient) Execute(ctx context.Context, in *ExecuteRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { 1453 out := new(google_longrunning.Operation) 1454 err := grpc.Invoke(ctx, "/google.devtools.remoteexecution.v1test.Execution/Execute", in, out, c.cc, opts...) 1455 if err != nil { 1456 return nil, err 1457 } 1458 return out, nil 1459} 1460 1461// Server API for Execution service 1462 1463type ExecutionServer interface { 1464 // Execute an action remotely. 1465 // 1466 // In order to execute an action, the client must first upload all of the 1467 // inputs, as well as the [Command][google.devtools.remoteexecution.v1test.Command] 1468 // to run, into the [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage]. 1469 // It then calls `Execute` with an [Action][google.devtools.remoteexecution.v1test.Action] 1470 // referring to them. The server will run the action and eventually return the 1471 // result. 1472 // 1473 // The input `Action`'s fields MUST meet the various canonicalization 1474 // requirements specified in the documentation for their types so that it has 1475 // the same digest as other logically equivalent `Action`s. The server MAY 1476 // enforce the requirements and return errors if a non-canonical input is 1477 // received. It MAY also proceed without verifying some or all of the 1478 // requirements, such as for performance reasons. If the server does not 1479 // verify the requirement, then it will treat the `Action` as distinct from 1480 // another logically equivalent action if they hash differently. 1481 // 1482 // Returns a [google.longrunning.Operation][google.longrunning.Operation] 1483 // describing the resulting execution, with eventual `response` 1484 // [ExecuteResponse][google.devtools.remoteexecution.v1test.ExecuteResponse]. 1485 // The `metadata` on the operation is of type 1486 // [ExecuteOperationMetadata][google.devtools.remoteexecution.v1test.ExecuteOperationMetadata]. 1487 // 1488 // To query the operation, you can use the 1489 // [Operations API][google.longrunning.Operations.GetOperation]. If you wish 1490 // to allow the server to stream operations updates, rather than requiring 1491 // client polling, you can use the 1492 // [Watcher API][google.watcher.v1.Watcher.Watch] with the Operation's `name` 1493 // as the `target`. 1494 // 1495 // When using the Watcher API, the initial `data` will be the `Operation` at 1496 // the time of the request. Updates will be provided periodically by the 1497 // server until the `Operation` completes, at which point the response message 1498 // will (assuming no error) be at `data.response`. 1499 // 1500 // The server NEED NOT implement other methods or functionality of the 1501 // Operation and Watcher APIs. 1502 // 1503 // Errors discovered during creation of the `Operation` will be reported 1504 // as gRPC Status errors, while errors that occurred while running the 1505 // `Operation` will be reported in the `Operation` error field. 1506 // The possible errors include: 1507 // * `INVALID_ARGUMENT`: One or more arguments are invalid. 1508 // * `FAILED_PRECONDITION`: One or more errors occurred in setting up the 1509 // action requested, such as a missing input or no worker being available. 1510 // The client may be able to fix the errors and retry. 1511 // * `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to run 1512 // the action. 1513 // * `UNAVAILABLE`: Due to a transient condition, such as all workers being 1514 // occupied (and the server does not support a queue), the action could not 1515 // be started. The client should retry. 1516 // * `INTERNAL`: An internal error occurred in the execution engine or the 1517 // worker. 1518 // * `DEADLINE_EXCEEDED`: The execution timed out. 1519 Execute(context.Context, *ExecuteRequest) (*google_longrunning.Operation, error) 1520} 1521 1522func RegisterExecutionServer(s *grpc.Server, srv ExecutionServer) { 1523 s.RegisterService(&_Execution_serviceDesc, srv) 1524} 1525 1526func _Execution_Execute_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { 1527 in := new(ExecuteRequest) 1528 if err := dec(in); err != nil { 1529 return nil, err 1530 } 1531 if interceptor == nil { 1532 return srv.(ExecutionServer).Execute(ctx, in) 1533 } 1534 info := &grpc.UnaryServerInfo{ 1535 Server: srv, 1536 FullMethod: "/google.devtools.remoteexecution.v1test.Execution/Execute", 1537 } 1538 handler := func(ctx context.Context, req interface{}) (interface{}, error) { 1539 return srv.(ExecutionServer).Execute(ctx, req.(*ExecuteRequest)) 1540 } 1541 return interceptor(ctx, in, info, handler) 1542} 1543 1544var _Execution_serviceDesc = grpc.ServiceDesc{ 1545 ServiceName: "google.devtools.remoteexecution.v1test.Execution", 1546 HandlerType: (*ExecutionServer)(nil), 1547 Methods: []grpc.MethodDesc{ 1548 { 1549 MethodName: "Execute", 1550 Handler: _Execution_Execute_Handler, 1551 }, 1552 }, 1553 Streams: []grpc.StreamDesc{}, 1554 Metadata: "google/devtools/remoteexecution/v1test/remote_execution.proto", 1555} 1556 1557// Client API for ActionCache service 1558 1559type ActionCacheClient interface { 1560 // Retrieve a cached execution result. 1561 // 1562 // Errors: 1563 // * `NOT_FOUND`: The requested `ActionResult` is not in the cache. 1564 GetActionResult(ctx context.Context, in *GetActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error) 1565 // Upload a new execution result. 1566 // 1567 // This method is intended for servers which implement the distributed cache 1568 // independently of the [Execution][google.devtools.remoteexecution.v1test.Execution] 1569 // API. As a result, it is OPTIONAL for servers to implement. 1570 // 1571 // Errors: 1572 // * `NOT_IMPLEMENTED`: This method is not supported by the server. 1573 // * `RESOURCE_EXHAUSTED`: There is insufficient storage space to add the 1574 // entry to the cache. 1575 UpdateActionResult(ctx context.Context, in *UpdateActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error) 1576} 1577 1578type actionCacheClient struct { 1579 cc *grpc.ClientConn 1580} 1581 1582func NewActionCacheClient(cc *grpc.ClientConn) ActionCacheClient { 1583 return &actionCacheClient{cc} 1584} 1585 1586func (c *actionCacheClient) GetActionResult(ctx context.Context, in *GetActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error) { 1587 out := new(ActionResult) 1588 err := grpc.Invoke(ctx, "/google.devtools.remoteexecution.v1test.ActionCache/GetActionResult", in, out, c.cc, opts...) 1589 if err != nil { 1590 return nil, err 1591 } 1592 return out, nil 1593} 1594 1595func (c *actionCacheClient) UpdateActionResult(ctx context.Context, in *UpdateActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error) { 1596 out := new(ActionResult) 1597 err := grpc.Invoke(ctx, "/google.devtools.remoteexecution.v1test.ActionCache/UpdateActionResult", in, out, c.cc, opts...) 1598 if err != nil { 1599 return nil, err 1600 } 1601 return out, nil 1602} 1603 1604// Server API for ActionCache service 1605 1606type ActionCacheServer interface { 1607 // Retrieve a cached execution result. 1608 // 1609 // Errors: 1610 // * `NOT_FOUND`: The requested `ActionResult` is not in the cache. 1611 GetActionResult(context.Context, *GetActionResultRequest) (*ActionResult, error) 1612 // Upload a new execution result. 1613 // 1614 // This method is intended for servers which implement the distributed cache 1615 // independently of the [Execution][google.devtools.remoteexecution.v1test.Execution] 1616 // API. As a result, it is OPTIONAL for servers to implement. 1617 // 1618 // Errors: 1619 // * `NOT_IMPLEMENTED`: This method is not supported by the server. 1620 // * `RESOURCE_EXHAUSTED`: There is insufficient storage space to add the 1621 // entry to the cache. 1622 UpdateActionResult(context.Context, *UpdateActionResultRequest) (*ActionResult, error) 1623} 1624 1625func RegisterActionCacheServer(s *grpc.Server, srv ActionCacheServer) { 1626 s.RegisterService(&_ActionCache_serviceDesc, srv) 1627} 1628 1629func _ActionCache_GetActionResult_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { 1630 in := new(GetActionResultRequest) 1631 if err := dec(in); err != nil { 1632 return nil, err 1633 } 1634 if interceptor == nil { 1635 return srv.(ActionCacheServer).GetActionResult(ctx, in) 1636 } 1637 info := &grpc.UnaryServerInfo{ 1638 Server: srv, 1639 FullMethod: "/google.devtools.remoteexecution.v1test.ActionCache/GetActionResult", 1640 } 1641 handler := func(ctx context.Context, req interface{}) (interface{}, error) { 1642 return srv.(ActionCacheServer).GetActionResult(ctx, req.(*GetActionResultRequest)) 1643 } 1644 return interceptor(ctx, in, info, handler) 1645} 1646 1647func _ActionCache_UpdateActionResult_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { 1648 in := new(UpdateActionResultRequest) 1649 if err := dec(in); err != nil { 1650 return nil, err 1651 } 1652 if interceptor == nil { 1653 return srv.(ActionCacheServer).UpdateActionResult(ctx, in) 1654 } 1655 info := &grpc.UnaryServerInfo{ 1656 Server: srv, 1657 FullMethod: "/google.devtools.remoteexecution.v1test.ActionCache/UpdateActionResult", 1658 } 1659 handler := func(ctx context.Context, req interface{}) (interface{}, error) { 1660 return srv.(ActionCacheServer).UpdateActionResult(ctx, req.(*UpdateActionResultRequest)) 1661 } 1662 return interceptor(ctx, in, info, handler) 1663} 1664 1665var _ActionCache_serviceDesc = grpc.ServiceDesc{ 1666 ServiceName: "google.devtools.remoteexecution.v1test.ActionCache", 1667 HandlerType: (*ActionCacheServer)(nil), 1668 Methods: []grpc.MethodDesc{ 1669 { 1670 MethodName: "GetActionResult", 1671 Handler: _ActionCache_GetActionResult_Handler, 1672 }, 1673 { 1674 MethodName: "UpdateActionResult", 1675 Handler: _ActionCache_UpdateActionResult_Handler, 1676 }, 1677 }, 1678 Streams: []grpc.StreamDesc{}, 1679 Metadata: "google/devtools/remoteexecution/v1test/remote_execution.proto", 1680} 1681 1682// Client API for ContentAddressableStorage service 1683 1684type ContentAddressableStorageClient interface { 1685 // Determine if blobs are present in the CAS. 1686 // 1687 // Clients can use this API before uploading blobs to determine which ones are 1688 // already present in the CAS and do not need to be uploaded again. 1689 // 1690 // There are no method-specific errors. 1691 FindMissingBlobs(ctx context.Context, in *FindMissingBlobsRequest, opts ...grpc.CallOption) (*FindMissingBlobsResponse, error) 1692 // Upload many blobs at once. 1693 // 1694 // The client MUST NOT upload blobs with a combined total size of more than 10 1695 // MiB using this API. Such requests should either be split into smaller 1696 // chunks or uploaded using the 1697 // [ByteStream API][google.bytestream.ByteStream], as appropriate. 1698 // 1699 // This request is equivalent to calling [UpdateBlob][] on each individual 1700 // blob, in parallel. The requests may succeed or fail independently. 1701 // 1702 // Errors: 1703 // * `INVALID_ARGUMENT`: The client attempted to upload more than 10 MiB of 1704 // data. 1705 // 1706 // Individual requests may return the following errors, additionally: 1707 // * `RESOURCE_EXHAUSTED`: There is insufficient disk quota to store the blob. 1708 // * `INVALID_ARGUMENT`: The [Digest][google.devtools.remoteexecution.v1test.Digest] 1709 // does not match the provided data. 1710 BatchUpdateBlobs(ctx context.Context, in *BatchUpdateBlobsRequest, opts ...grpc.CallOption) (*BatchUpdateBlobsResponse, error) 1711 // Fetch the entire directory tree rooted at a node. 1712 // 1713 // This request must be targeted at a 1714 // [Directory][google.devtools.remoteexecution.v1test.Directory] stored in the 1715 // [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage] 1716 // (CAS). The server will enumerate the `Directory` tree recursively and 1717 // return every node descended from the root. 1718 // The exact traversal order is unspecified and, unless retrieving subsequent 1719 // pages from an earlier request, is not guaranteed to be stable across 1720 // multiple invocations of `GetTree`. 1721 // 1722 // If part of the tree is missing from the CAS, the server will return the 1723 // portion present and omit the rest. 1724 // 1725 // * `NOT_FOUND`: The requested tree root is not present in the CAS. 1726 GetTree(ctx context.Context, in *GetTreeRequest, opts ...grpc.CallOption) (*GetTreeResponse, error) 1727} 1728 1729type contentAddressableStorageClient struct { 1730 cc *grpc.ClientConn 1731} 1732 1733func NewContentAddressableStorageClient(cc *grpc.ClientConn) ContentAddressableStorageClient { 1734 return &contentAddressableStorageClient{cc} 1735} 1736 1737func (c *contentAddressableStorageClient) FindMissingBlobs(ctx context.Context, in *FindMissingBlobsRequest, opts ...grpc.CallOption) (*FindMissingBlobsResponse, error) { 1738 out := new(FindMissingBlobsResponse) 1739 err := grpc.Invoke(ctx, "/google.devtools.remoteexecution.v1test.ContentAddressableStorage/FindMissingBlobs", in, out, c.cc, opts...) 1740 if err != nil { 1741 return nil, err 1742 } 1743 return out, nil 1744} 1745 1746func (c *contentAddressableStorageClient) BatchUpdateBlobs(ctx context.Context, in *BatchUpdateBlobsRequest, opts ...grpc.CallOption) (*BatchUpdateBlobsResponse, error) { 1747 out := new(BatchUpdateBlobsResponse) 1748 err := grpc.Invoke(ctx, "/google.devtools.remoteexecution.v1test.ContentAddressableStorage/BatchUpdateBlobs", in, out, c.cc, opts...) 1749 if err != nil { 1750 return nil, err 1751 } 1752 return out, nil 1753} 1754 1755func (c *contentAddressableStorageClient) GetTree(ctx context.Context, in *GetTreeRequest, opts ...grpc.CallOption) (*GetTreeResponse, error) { 1756 out := new(GetTreeResponse) 1757 err := grpc.Invoke(ctx, "/google.devtools.remoteexecution.v1test.ContentAddressableStorage/GetTree", in, out, c.cc, opts...) 1758 if err != nil { 1759 return nil, err 1760 } 1761 return out, nil 1762} 1763 1764// Server API for ContentAddressableStorage service 1765 1766type ContentAddressableStorageServer interface { 1767 // Determine if blobs are present in the CAS. 1768 // 1769 // Clients can use this API before uploading blobs to determine which ones are 1770 // already present in the CAS and do not need to be uploaded again. 1771 // 1772 // There are no method-specific errors. 1773 FindMissingBlobs(context.Context, *FindMissingBlobsRequest) (*FindMissingBlobsResponse, error) 1774 // Upload many blobs at once. 1775 // 1776 // The client MUST NOT upload blobs with a combined total size of more than 10 1777 // MiB using this API. Such requests should either be split into smaller 1778 // chunks or uploaded using the 1779 // [ByteStream API][google.bytestream.ByteStream], as appropriate. 1780 // 1781 // This request is equivalent to calling [UpdateBlob][] on each individual 1782 // blob, in parallel. The requests may succeed or fail independently. 1783 // 1784 // Errors: 1785 // * `INVALID_ARGUMENT`: The client attempted to upload more than 10 MiB of 1786 // data. 1787 // 1788 // Individual requests may return the following errors, additionally: 1789 // * `RESOURCE_EXHAUSTED`: There is insufficient disk quota to store the blob. 1790 // * `INVALID_ARGUMENT`: The [Digest][google.devtools.remoteexecution.v1test.Digest] 1791 // does not match the provided data. 1792 BatchUpdateBlobs(context.Context, *BatchUpdateBlobsRequest) (*BatchUpdateBlobsResponse, error) 1793 // Fetch the entire directory tree rooted at a node. 1794 // 1795 // This request must be targeted at a 1796 // [Directory][google.devtools.remoteexecution.v1test.Directory] stored in the 1797 // [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage] 1798 // (CAS). The server will enumerate the `Directory` tree recursively and 1799 // return every node descended from the root. 1800 // The exact traversal order is unspecified and, unless retrieving subsequent 1801 // pages from an earlier request, is not guaranteed to be stable across 1802 // multiple invocations of `GetTree`. 1803 // 1804 // If part of the tree is missing from the CAS, the server will return the 1805 // portion present and omit the rest. 1806 // 1807 // * `NOT_FOUND`: The requested tree root is not present in the CAS. 1808 GetTree(context.Context, *GetTreeRequest) (*GetTreeResponse, error) 1809} 1810 1811func RegisterContentAddressableStorageServer(s *grpc.Server, srv ContentAddressableStorageServer) { 1812 s.RegisterService(&_ContentAddressableStorage_serviceDesc, srv) 1813} 1814 1815func _ContentAddressableStorage_FindMissingBlobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { 1816 in := new(FindMissingBlobsRequest) 1817 if err := dec(in); err != nil { 1818 return nil, err 1819 } 1820 if interceptor == nil { 1821 return srv.(ContentAddressableStorageServer).FindMissingBlobs(ctx, in) 1822 } 1823 info := &grpc.UnaryServerInfo{ 1824 Server: srv, 1825 FullMethod: "/google.devtools.remoteexecution.v1test.ContentAddressableStorage/FindMissingBlobs", 1826 } 1827 handler := func(ctx context.Context, req interface{}) (interface{}, error) { 1828 return srv.(ContentAddressableStorageServer).FindMissingBlobs(ctx, req.(*FindMissingBlobsRequest)) 1829 } 1830 return interceptor(ctx, in, info, handler) 1831} 1832 1833func _ContentAddressableStorage_BatchUpdateBlobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { 1834 in := new(BatchUpdateBlobsRequest) 1835 if err := dec(in); err != nil { 1836 return nil, err 1837 } 1838 if interceptor == nil { 1839 return srv.(ContentAddressableStorageServer).BatchUpdateBlobs(ctx, in) 1840 } 1841 info := &grpc.UnaryServerInfo{ 1842 Server: srv, 1843 FullMethod: "/google.devtools.remoteexecution.v1test.ContentAddressableStorage/BatchUpdateBlobs", 1844 } 1845 handler := func(ctx context.Context, req interface{}) (interface{}, error) { 1846 return srv.(ContentAddressableStorageServer).BatchUpdateBlobs(ctx, req.(*BatchUpdateBlobsRequest)) 1847 } 1848 return interceptor(ctx, in, info, handler) 1849} 1850 1851func _ContentAddressableStorage_GetTree_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { 1852 in := new(GetTreeRequest) 1853 if err := dec(in); err != nil { 1854 return nil, err 1855 } 1856 if interceptor == nil { 1857 return srv.(ContentAddressableStorageServer).GetTree(ctx, in) 1858 } 1859 info := &grpc.UnaryServerInfo{ 1860 Server: srv, 1861 FullMethod: "/google.devtools.remoteexecution.v1test.ContentAddressableStorage/GetTree", 1862 } 1863 handler := func(ctx context.Context, req interface{}) (interface{}, error) { 1864 return srv.(ContentAddressableStorageServer).GetTree(ctx, req.(*GetTreeRequest)) 1865 } 1866 return interceptor(ctx, in, info, handler) 1867} 1868 1869var _ContentAddressableStorage_serviceDesc = grpc.ServiceDesc{ 1870 ServiceName: "google.devtools.remoteexecution.v1test.ContentAddressableStorage", 1871 HandlerType: (*ContentAddressableStorageServer)(nil), 1872 Methods: []grpc.MethodDesc{ 1873 { 1874 MethodName: "FindMissingBlobs", 1875 Handler: _ContentAddressableStorage_FindMissingBlobs_Handler, 1876 }, 1877 { 1878 MethodName: "BatchUpdateBlobs", 1879 Handler: _ContentAddressableStorage_BatchUpdateBlobs_Handler, 1880 }, 1881 { 1882 MethodName: "GetTree", 1883 Handler: _ContentAddressableStorage_GetTree_Handler, 1884 }, 1885 }, 1886 Streams: []grpc.StreamDesc{}, 1887 Metadata: "google/devtools/remoteexecution/v1test/remote_execution.proto", 1888} 1889 1890func init() { 1891 proto.RegisterFile("google/devtools/remoteexecution/v1test/remote_execution.proto", fileDescriptor0) 1892} 1893 1894var fileDescriptor0 = []byte{ 1895 // 1868 bytes of a gzipped FileDescriptorProto 1896 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0xcf, 0x6f, 0x1c, 0x57, 1897 0x1d, 0x67, 0x76, 0xbd, 0xeb, 0xdd, 0xef, 0xae, 0x63, 0xe7, 0x35, 0x34, 0x9b, 0x6d, 0x83, 0xdc, 1898 0xa9, 0x54, 0x59, 0x56, 0x3b, 0x4b, 0x9c, 0x96, 0x08, 0x57, 0xa5, 0xc4, 0xeb, 0x75, 0x6a, 0x35, 1899 0xb1, 0xdd, 0xb1, 0xd7, 0x6d, 0x4a, 0xa5, 0xe1, 0xed, 0xcc, 0xf3, 0x66, 0xc8, 0xee, 0xbc, 0xe1, 1900 0xbd, 0xb7, 0x6e, 0xd2, 0x10, 0x0e, 0x08, 0x89, 0x03, 0x02, 0x09, 0x2a, 0x04, 0x12, 0x37, 0x24, 1901 0x84, 0x84, 0x38, 0xf1, 0x1f, 0xc0, 0x1f, 0xc0, 0x01, 0x2e, 0x9c, 0x11, 0x27, 0x4e, 0x9c, 0x11, 1902 0x12, 0xe8, 0xfd, 0x98, 0x99, 0xdd, 0xb5, 0x43, 0x66, 0xed, 0x44, 0xe2, 0xb6, 0xf3, 0x7d, 0xef, 1903 0xfb, 0xf9, 0xfe, 0xfe, 0xf1, 0x6c, 0x78, 0xa7, 0x4f, 0x69, 0x7f, 0x40, 0x5a, 0x01, 0x39, 0x16, 1904 0x94, 0x0e, 0x78, 0x8b, 0x91, 0x21, 0x15, 0x84, 0x3c, 0x20, 0xfe, 0x48, 0x84, 0x34, 0x6a, 0x1d, 1905 0x5f, 0x13, 0x84, 0x0b, 0x43, 0xf6, 0x52, 0xba, 0x13, 0x33, 0x2a, 0x28, 0x7a, 0x4d, 0xb3, 0x3b, 1906 0x09, 0xbb, 0x33, 0xc5, 0xee, 0x68, 0xf6, 0xe6, 0xcb, 0x46, 0x0c, 0x8e, 0xc3, 0x16, 0x8e, 0x22, 1907 0x2a, 0xb0, 0x3c, 0xe5, 0x1a, 0xa5, 0xf9, 0xaa, 0x39, 0x1d, 0xd0, 0xa8, 0xcf, 0x46, 0x51, 0x14, 1908 0x46, 0xfd, 0x16, 0x8d, 0x09, 0x9b, 0xb8, 0xf4, 0x25, 0x73, 0x49, 0x7d, 0xf5, 0x46, 0x47, 0xad, 1909 0x60, 0xa4, 0x2f, 0x98, 0xf3, 0xcb, 0xe6, 0x9c, 0xc5, 0x7e, 0x8b, 0x0b, 0x2c, 0x46, 0x86, 0xd1, 1910 0xfe, 0x7d, 0x11, 0xca, 0x37, 0x7d, 0x79, 0x13, 0x75, 0xe1, 0x82, 0x4f, 0x87, 0x43, 0x1c, 0x05, 1911 0x5e, 0x10, 0xf6, 0x09, 0x17, 0x0d, 0x6b, 0xd9, 0x5a, 0xa9, 0xad, 0x39, 0x4e, 0x3e, 0x3b, 0x9c, 1912 0x4d, 0xc5, 0xe5, 0x2e, 0x18, 0x14, 0xfd, 0x89, 0x3e, 0x86, 0x8b, 0x61, 0x14, 0x8f, 0x84, 0xc7, 1913 0x28, 0x15, 0x09, 0x72, 0xe1, 0x4c, 0xc8, 0x8b, 0x0a, 0xc8, 0xa5, 0x54, 0x18, 0xec, 0x57, 0xa0, 1914 0x4e, 0x47, 0x42, 0x82, 0x1f, 0x85, 0x03, 0xc2, 0x1b, 0xc5, 0xe5, 0xe2, 0x4a, 0xd5, 0xad, 0x69, 1915 0xda, 0x96, 0x24, 0xa1, 0x37, 0x00, 0x99, 0x2b, 0x41, 0xc8, 0x88, 0x2f, 0x28, 0x0b, 0x09, 0x6f, 1916 0xcc, 0xa9, 0x8b, 0x17, 0xf5, 0xc9, 0x66, 0x76, 0x80, 0x6e, 0x43, 0x25, 0x1e, 0x60, 0x71, 0x44, 1917 0xd9, 0xb0, 0x51, 0x52, 0x4a, 0x7e, 0x39, 0xaf, 0x92, 0x7b, 0x86, 0xcf, 0x4d, 0x11, 0xd0, 0x75, 1918 0x98, 0x17, 0xe1, 0x90, 0xd0, 0x91, 0x68, 0x94, 0x15, 0xd8, 0x95, 0x04, 0x2c, 0x09, 0x94, 0xb3, 1919 0x69, 0x02, 0xe5, 0x26, 0x37, 0xd1, 0x32, 0xd4, 0x03, 0xea, 0x45, 0x54, 0x78, 0x3e, 0xf6, 0xef, 1920 0x91, 0xc6, 0xfc, 0xb2, 0xb5, 0x52, 0x71, 0x21, 0xa0, 0x3b, 0x54, 0xb4, 0x25, 0xc5, 0xfe, 0x9b, 1921 0x05, 0xf3, 0x6d, 0xed, 0x64, 0xf4, 0x32, 0x54, 0x31, 0xeb, 0x8f, 0x86, 0x24, 0x12, 0xbc, 0x61, 1922 0x29, 0xb3, 0x32, 0x02, 0x7a, 0x00, 0x5f, 0x24, 0xd1, 0x71, 0xc8, 0x68, 0x24, 0xbf, 0xbd, 0x63, 1923 0xcc, 0x42, 0xdc, 0x93, 0x9e, 0x2a, 0x2c, 0x17, 0x57, 0x6a, 0x6b, 0xed, 0xbc, 0xb6, 0x19, 0x69, 1924 0x4e, 0x27, 0x03, 0x3b, 0x34, 0x58, 0xee, 0x25, 0x72, 0x92, 0xc8, 0x9b, 0xef, 0xc2, 0x0b, 0xa7, 1925 0x5c, 0x46, 0x08, 0xe6, 0x22, 0x3c, 0x24, 0x2a, 0xb5, 0xaa, 0xae, 0xfa, 0x8d, 0x2e, 0x41, 0xe9, 1926 0x18, 0x0f, 0x46, 0x44, 0x65, 0x45, 0xd5, 0xd5, 0x1f, 0xf6, 0x2f, 0x2d, 0xa8, 0x24, 0x2e, 0x45, 1927 0x77, 0x01, 0x62, 0x26, 0xb3, 0x5e, 0xc8, 0xe8, 0x59, 0x4a, 0xf9, 0xaf, 0xce, 0x1a, 0x18, 0x67, 1928 0x4f, 0x43, 0x3c, 0x74, 0xc7, 0xc0, 0x9a, 0x6f, 0x42, 0x25, 0xa1, 0xcf, 0xa0, 0xdd, 0xef, 0x2c, 1929 0xa8, 0x26, 0x79, 0xf3, 0x10, 0x6d, 0x41, 0x49, 0x27, 0xa0, 0xd6, 0x2c, 0x77, 0xca, 0xc8, 0x14, 1930 0xdd, 0xa1, 0x01, 0x71, 0x35, 0x3b, 0xfa, 0x10, 0x6a, 0xe3, 0x59, 0xaa, 0x83, 0xf4, 0x56, 0xfe, 1931 0x2a, 0x31, 0xfa, 0x28, 0xc8, 0x71, 0x24, 0xfb, 0x87, 0x16, 0x54, 0x12, 0x61, 0xa7, 0x5a, 0xb9, 1932 0x05, 0xe5, 0x73, 0x95, 0xa6, 0xe1, 0x46, 0xaf, 0xc2, 0x42, 0xc8, 0x4d, 0x27, 0x94, 0x01, 0x6f, 1933 0xcc, 0xa9, 0xec, 0xad, 0x87, 0xbc, 0x93, 0xd2, 0xec, 0xfb, 0xb0, 0x30, 0xa1, 0xeb, 0xf3, 0xd4, 1934 0xc8, 0x7e, 0x1b, 0xca, 0xa6, 0x5b, 0x20, 0x98, 0xbb, 0x87, 0xf9, 0xbd, 0x44, 0x8a, 0xfc, 0x8d, 1935 0xae, 0x02, 0xf0, 0xf0, 0x33, 0xe2, 0xf5, 0x1e, 0x0a, 0xe5, 0x70, 0x6b, 0xa5, 0xe8, 0x56, 0x25, 1936 0x65, 0x43, 0x12, 0xec, 0x3f, 0x17, 0xa1, 0xae, 0xdb, 0xa3, 0x4b, 0xf8, 0x68, 0x20, 0x50, 0x77, 1937 0xaa, 0xe3, 0xe8, 0x10, 0xad, 0xe5, 0xd5, 0x6d, 0x37, 0xed, 0x4c, 0x93, 0x5d, 0xea, 0xe8, 0xd4, 1938 0x2e, 0x55, 0x54, 0xe0, 0x37, 0x66, 0x03, 0x4f, 0x3d, 0x7b, 0x5a, 0x7b, 0x7b, 0x09, 0xaa, 0xe4, 1939 0x41, 0x28, 0x3c, 0x9f, 0x06, 0x3a, 0x34, 0x25, 0xb7, 0x22, 0x09, 0x6d, 0x19, 0x05, 0xe9, 0x0b, 1940 0x11, 0x50, 0xd9, 0xaa, 0xf1, 0xa7, 0xaa, 0xfb, 0xd5, 0xdd, 0xaa, 0xa6, 0xb8, 0xf8, 0x53, 0xb4, 1941 0x0f, 0x0b, 0xe6, 0xd8, 0xc4, 0xa5, 0x7c, 0xa6, 0xb8, 0xd4, 0x35, 0x88, 0x89, 0x89, 0x96, 0x49, 1942 0x18, 0x53, 0x32, 0xe7, 0x53, 0x99, 0x84, 0xb1, 0x4c, 0xa6, 0x3c, 0x36, 0x32, 0x2b, 0x67, 0x96, 1943 0x49, 0x18, 0xd3, 0x5f, 0xf6, 0x6f, 0x2c, 0x80, 0x2c, 0x10, 0x32, 0x2d, 0x62, 0x2c, 0xd2, 0xb4, 1944 0x90, 0xbf, 0x9f, 0x59, 0x39, 0x34, 0x60, 0xde, 0xa7, 0x91, 0x20, 0x91, 0x68, 0x14, 0x95, 0x6d, 1945 0xc9, 0x67, 0xbe, 0x42, 0x19, 0xc2, 0xe2, 0x54, 0x50, 0x9f, 0xa7, 0xb6, 0xf6, 0xe7, 0x05, 0xb8, 1946 0xa0, 0xa5, 0x13, 0x97, 0x7c, 0x7b, 0x94, 0xd4, 0x73, 0xc4, 0x05, 0x8e, 0x7c, 0xe2, 0x8d, 0x95, 1947 0x68, 0x3d, 0x21, 0xee, 0x98, 0x52, 0xc5, 0xaa, 0x48, 0x66, 0x95, 0x6f, 0x4a, 0xcb, 0x70, 0xa3, 1948 0x55, 0xb8, 0xc8, 0xef, 0x87, 0xb1, 0x9e, 0x7b, 0xde, 0x80, 0xd2, 0xfb, 0xa3, 0x58, 0xf9, 0xad, 1949 0xe2, 0x2e, 0xca, 0x03, 0x35, 0xfd, 0x6e, 0x2b, 0x32, 0xba, 0x0e, 0x2f, 0x0a, 0x2a, 0xf0, 0xc0, 1950 0xd3, 0xcb, 0x85, 0xac, 0x46, 0xcf, 0xa7, 0xa3, 0x48, 0x98, 0xb4, 0x7e, 0x41, 0x9d, 0x6e, 0x47, 1951 0x26, 0xca, 0x6d, 0x79, 0x74, 0x2a, 0x93, 0xae, 0xfc, 0x92, 0xaa, 0xfc, 0x29, 0x26, 0xdd, 0x03, 1952 0xbe, 0x6f, 0xc1, 0x62, 0xea, 0x15, 0x1e, 0xd3, 0x88, 0x13, 0x74, 0x1b, 0xca, 0x4c, 0x35, 0x04, 1953 0xb3, 0x23, 0xbd, 0x39, 0xa3, 0xc5, 0x8a, 0xd7, 0x35, 0x18, 0xd2, 0xc9, 0xca, 0xe4, 0xc0, 0x33, 1954 0xa0, 0x05, 0x9d, 0x0b, 0x9a, 0xa8, 0x2f, 0xdb, 0xff, 0x2a, 0x40, 0xc3, 0xa8, 0xb1, 0x9b, 0xac, 1955 0x7f, 0x77, 0x88, 0xc0, 0x01, 0x16, 0x18, 0x7d, 0x02, 0x25, 0x2e, 0x70, 0x5f, 0x87, 0xe7, 0xc2, 1956 0xda, 0x56, 0x5e, 0x75, 0x9e, 0x04, 0xe8, 0xec, 0x4b, 0x34, 0x57, 0x83, 0xca, 0x2a, 0xd4, 0x11, 1957 0x3a, 0xdf, 0xfa, 0x56, 0xd7, 0x20, 0xa6, 0xf2, 0x5f, 0x07, 0x64, 0xda, 0x09, 0x17, 0x8c, 0xe0, 1958 0xa1, 0x4e, 0xaf, 0xa2, 0x4a, 0xaf, 0x25, 0x7d, 0xb2, 0xaf, 0x0e, 0x54, 0x8a, 0xe9, 0xdb, 0xb2, 1959 0x11, 0x8c, 0xdf, 0x9e, 0x4b, 0x6f, 0x13, 0xc6, 0xb2, 0xdb, 0xf6, 0x2e, 0x94, 0x94, 0x01, 0xa8, 1960 0x06, 0xf3, 0xdd, 0x9d, 0xf7, 0x77, 0x76, 0x3f, 0xdc, 0x59, 0xfa, 0x02, 0x5a, 0x84, 0x5a, 0xfb, 1961 0x66, 0xfb, 0xbd, 0x8e, 0xd7, 0x7e, 0xaf, 0xd3, 0x7e, 0x7f, 0xc9, 0x42, 0x00, 0xe5, 0x0f, 0xba, 1962 0x9d, 0x6e, 0x67, 0x73, 0xa9, 0x80, 0x16, 0xa0, 0xda, 0xf9, 0xa8, 0xd3, 0xee, 0x1e, 0x6c, 0xef, 1963 0xdc, 0x5a, 0x2a, 0xca, 0xcf, 0xf6, 0xee, 0x9d, 0xbd, 0xdb, 0x9d, 0x83, 0xce, 0xe6, 0xd2, 0x9c, 1964 0xfd, 0x53, 0x0b, 0x5e, 0xbc, 0x45, 0xc4, 0x44, 0xf4, 0x66, 0xa9, 0x90, 0xe7, 0xe1, 0x41, 0xfb, 1965 0x9f, 0x16, 0x5c, 0xe9, 0xc6, 0x01, 0x16, 0xe4, 0xff, 0x4a, 0x2f, 0x74, 0x37, 0x05, 0x35, 0xe9, 1966 0x5c, 0x3c, 0x47, 0x8d, 0x18, 0x68, 0x53, 0x04, 0x3f, 0xb1, 0xe0, 0xf2, 0x56, 0x18, 0x05, 0x77, 1967 0x42, 0xce, 0xc3, 0xa8, 0xbf, 0x31, 0xa0, 0x3d, 0x3e, 0x93, 0xc1, 0x1f, 0x40, 0xbd, 0x37, 0xa0, 1968 0x3d, 0x63, 0x6e, 0x32, 0xbf, 0x67, 0xb5, 0xb7, 0x26, 0x31, 0xf4, 0x6f, 0x6e, 0x7f, 0x07, 0x1a, 1969 0x27, 0x55, 0x32, 0x7d, 0xe2, 0x9b, 0x70, 0x69, 0xa8, 0xe9, 0xde, 0x33, 0x10, 0x8b, 0x86, 0x99, 1970 0x8c, 0x44, 0xfa, 0x77, 0xe1, 0xa2, 0xce, 0x01, 0x49, 0x4c, 0x5c, 0xa1, 0x9e, 0x72, 0x6a, 0xce, 1971 0x9c, 0xfb, 0x29, 0xa7, 0x50, 0xb2, 0x05, 0x4a, 0x36, 0x07, 0x95, 0x24, 0x75, 0x57, 0xfd, 0xb6, 1972 0x7f, 0x66, 0xc1, 0xe5, 0x0d, 0x2c, 0xfc, 0x7b, 0x99, 0x16, 0xb3, 0x45, 0xa4, 0x0b, 0x15, 0xa6, 1973 0xef, 0x27, 0x6e, 0xc9, 0xbd, 0xd8, 0x9f, 0x30, 0xdc, 0x4d, 0xa1, 0xec, 0x1f, 0x15, 0xa0, 0x71, 1974 0x52, 0x2f, 0x13, 0x96, 0x3e, 0x54, 0x99, 0xf9, 0x9d, 0xec, 0xec, 0xdb, 0x79, 0x85, 0x3e, 0x09, 1975 0xd4, 0x49, 0x7e, 0xb8, 0x19, 0x76, 0xf3, 0x07, 0x16, 0x54, 0x52, 0xa9, 0xbb, 0x50, 0x1b, 0x4b, 1976 0x82, 0x33, 0x86, 0x04, 0xb2, 0xd4, 0x43, 0xab, 0x50, 0xd6, 0x8f, 0x79, 0x53, 0xb6, 0x28, 0xc1, 1977 0x62, 0xb1, 0x2f, 0x3b, 0xb8, 0x18, 0x71, 0xd7, 0xdc, 0xb0, 0xff, 0x68, 0xc1, 0x85, 0x5b, 0x44, 1978 0x1c, 0x30, 0x32, 0xdb, 0x6c, 0xdf, 0x85, 0xda, 0xf9, 0x1f, 0xee, 0xc0, 0xb2, 0x37, 0xfb, 0x4b, 1979 0x50, 0x8d, 0x71, 0x9f, 0x78, 0x72, 0xc9, 0x56, 0x9d, 0xa1, 0xe4, 0x56, 0x24, 0x61, 0x3f, 0xfc, 1980 0x4c, 0xad, 0xa0, 0xea, 0x50, 0xd0, 0xfb, 0x24, 0x32, 0xed, 0x5d, 0x5d, 0x3f, 0x90, 0x04, 0xfb, 1981 0xc7, 0x16, 0x2c, 0xa6, 0x46, 0x18, 0xaf, 0xee, 0x4f, 0xbe, 0x99, 0x74, 0x34, 0xaf, 0xcd, 0xfc, 1982 0x66, 0x9a, 0x78, 0x2f, 0xa1, 0xd7, 0x60, 0x31, 0x22, 0x0f, 0x84, 0x37, 0xa6, 0x8c, 0x7e, 0xfe, 1983 0x2d, 0x48, 0xf2, 0x5e, 0xaa, 0xd0, 0x1d, 0xa8, 0x1d, 0x50, 0x3a, 0xd8, 0x24, 0x02, 0x87, 0x03, 1984 0xb5, 0x5e, 0x4b, 0x69, 0xe3, 0xde, 0xac, 0x48, 0x82, 0xf2, 0xe4, 0x2b, 0x50, 0x57, 0x87, 0xc7, 1985 0x84, 0xf1, 0x64, 0x57, 0xaa, 0xba, 0x35, 0x49, 0x3b, 0xd4, 0x24, 0xd9, 0xd1, 0x17, 0x4d, 0x74, 1986 0xd2, 0xd1, 0x7e, 0x68, 0xd8, 0x02, 0x2d, 0xc3, 0xa4, 0xcd, 0xf5, 0xbc, 0x06, 0x8e, 0xa9, 0xa7, 1987 0x65, 0x8d, 0xe9, 0x6a, 0xba, 0x74, 0x18, 0x18, 0x5d, 0x2a, 0x9a, 0xb0, 0x1d, 0xc8, 0x71, 0xab, 1988 0x84, 0x86, 0xd1, 0x31, 0xf5, 0x71, 0x72, 0xcb, 0x0c, 0x67, 0x79, 0xb2, 0x9d, 0x1e, 0x6c, 0x07, 1989 0x68, 0x1d, 0xae, 0xf8, 0x94, 0x31, 0x32, 0xc0, 0x82, 0x04, 0x63, 0x3c, 0x5c, 0x32, 0xe9, 0x20, 1990 0x5e, 0xce, 0x2e, 0x64, 0xac, 0x7c, 0x3b, 0x58, 0xfb, 0xb5, 0x05, 0xd5, 0x4e, 0xa2, 0x34, 0xfa, 1991 0xb9, 0x05, 0xf3, 0x66, 0x27, 0x41, 0x5f, 0x99, 0x71, 0x89, 0x31, 0x8e, 0x6b, 0x5e, 0x4d, 0xf8, 1992 0xc6, 0xfe, 0x62, 0xe6, 0xa4, 0x1b, 0x8e, 0xfd, 0xd6, 0xf7, 0xfe, 0xf2, 0xf7, 0xcf, 0x0b, 0x2d, 1993 0x7b, 0x35, 0xf9, 0xeb, 0xdd, 0xa3, 0x89, 0x22, 0x78, 0x67, 0x75, 0xf5, 0x71, 0x4b, 0xfb, 0x81, 1994 0xaf, 0x6b, 0x51, 0x64, 0xdd, 0x5a, 0x5d, 0xfb, 0x77, 0x11, 0x6a, 0x7a, 0x30, 0xa9, 0x2d, 0x14, 1995 0xfd, 0x43, 0xa7, 0xe2, 0xc4, 0xe3, 0xf0, 0x6b, 0x79, 0x35, 0x3e, 0x7d, 0x95, 0x68, 0x9e, 0x69, 1996 0x42, 0xda, 0x58, 0x19, 0xf4, 0x0d, 0x74, 0xf7, 0xa9, 0x06, 0xbd, 0xa1, 0xe7, 0x31, 0x6f, 0x3d, 1997 0x9a, 0x18, 0xfa, 0x8e, 0x7c, 0x09, 0x3f, 0x9e, 0x26, 0x66, 0xcf, 0xe2, 0xc7, 0xe8, 0x3f, 0x16, 1998 0xa0, 0x93, 0x9b, 0x06, 0xba, 0x39, 0x5b, 0xa3, 0x7e, 0x76, 0x26, 0xc7, 0xca, 0xe4, 0x6f, 0x35, 1999 0x9f, 0x9f, 0xc9, 0xeb, 0x93, 0x2b, 0xcc, 0xda, 0x2f, 0x4a, 0x70, 0xa5, 0xad, 0x87, 0xe1, 0xcd, 2000 0x20, 0x60, 0x84, 0x73, 0xf9, 0x40, 0xdb, 0x17, 0x94, 0xc9, 0x35, 0xf3, 0x4f, 0x16, 0x2c, 0x4d, 2001 0xef, 0x00, 0xe8, 0xdd, 0xfc, 0x7f, 0x05, 0x3a, 0x75, 0xa1, 0x69, 0x7e, 0xfd, 0xec, 0x00, 0xba, 2002 0x37, 0xda, 0x37, 0x94, 0x9f, 0xae, 0xd9, 0xaf, 0xff, 0x0f, 0x3f, 0xc9, 0x79, 0xc2, 0xd7, 0x8f, 2003 0x32, 0x88, 0x75, 0x6b, 0x55, 0x19, 0x34, 0x3d, 0xe8, 0xf2, 0x1b, 0xf4, 0x84, 0x7d, 0x20, 0xbf, 2004 0x41, 0x4f, 0x9a, 0xb1, 0x33, 0x18, 0xd4, 0xcb, 0x20, 0xa4, 0x41, 0x7f, 0xb5, 0x60, 0xde, 0x4c, 2005 0x8e, 0xfc, 0x8d, 0x65, 0x72, 0x5e, 0x36, 0x6f, 0xcc, 0xcc, 0x67, 0xb4, 0xfe, 0x44, 0x69, 0x7d, 2006 0x88, 0x0e, 0x9e, 0xa6, 0x75, 0xeb, 0xd1, 0xd8, 0xac, 0x4d, 0x72, 0x74, 0x9c, 0x34, 0x9e, 0xa1, 2007 0x7d, 0x2d, 0x65, 0xe3, 0x0f, 0x16, 0xac, 0xfa, 0x74, 0x98, 0x53, 0xb9, 0x8d, 0x4b, 0xae, 0xa2, 2008 0xa7, 0x3d, 0x77, 0x8f, 0x51, 0x41, 0xf7, 0xac, 0x8f, 0xbb, 0x86, 0xbf, 0x4f, 0x07, 0x38, 0xea, 2009 0x3b, 0x94, 0xf5, 0x5b, 0x7d, 0x12, 0xa9, 0xbf, 0x53, 0xb7, 0xf4, 0x11, 0x8e, 0x43, 0xfe, 0xb4, 2010 0xff, 0x85, 0xbc, 0x3d, 0x45, 0xfe, 0x55, 0xa1, 0xe8, 0x76, 0x3e, 0xfa, 0x6d, 0xe1, 0xea, 0x2d, 2011 0x8d, 0x3e, 0x25, 0xdc, 0x39, 0xbc, 0x76, 0x40, 0xb8, 0xe8, 0x95, 0x95, 0x9c, 0xeb, 0xff, 0x0d, 2012 0x00, 0x00, 0xff, 0xff, 0xe9, 0x9c, 0x6f, 0xd3, 0x72, 0x19, 0x00, 0x00, 2013} 2014