# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: chromiumos/checkpoint.proto
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)

_sym_db = _symbol_database.Default()




DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x63hromiumos/checkpoint.proto\x12\nchromiumos*\x9e\x02\n\tRetryStep\x12\r\n\tUNDEFINED\x10\x00\x12\x14\n\x10\x43REATE_BUILDSPEC\x10\n\x12\x15\n\x11PUBLIC_BUILD_LKGM\x10\x14\x12\x10\n\x0cRUN_CHILDREN\x10\x1e\x12\x17\n\x13RUN_FAILED_CHILDREN\x10\x1f\x12\x10\n\x0cLAUNCH_TESTS\x10(\x12\x14\n\x0fSTAGE_ARTIFACTS\x10\x96\x01\x12\x10\n\x0bPUSH_IMAGES\x10\xa0\x01\x12\x12\n\rDEBUG_SYMBOLS\x10\xa5\x01\x12\x11\n\x0c\x45\x42UILD_TESTS\x10\xaa\x01\x12\x14\n\x0f\x43OLLECT_SIGNING\x10\xb4\x01\x12\x0b\n\x06PAYGEN\x10\xbe\x01\x12\x13\n\x0eUPLOAD_PAYLOAD\x10\xe8\x07\x12\x11\n\x0cTEST_PAYLOAD\x10\xf2\x07\x42Y\n!com.google.chrome.crosinfra.protoZ4go.chromium.org/chromiumos/infra/proto/go/chromiumosb\x06proto3')

_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chromiumos.checkpoint_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:

  DESCRIPTOR._options = None
  DESCRIPTOR._serialized_options = b'\n!com.google.chrome.crosinfra.protoZ4go.chromium.org/chromiumos/infra/proto/go/chromiumos'
  _globals['_RETRYSTEP']._serialized_start=44
  _globals['_RETRYSTEP']._serialized_end=330
# @@protoc_insertion_point(module_scope)
