text: // source: src/apis/metadata/metadata_store.proto
  /**
   * @fileoverview
   * @enhanceable
   * @suppress {messageConventions} JS Compiler reports an error if a variable or
   *     field starts with 'MSG_' and isn't a translatable message.
   * @public
   */
  // GENERATED CODE -- DO NOT EDIT!
  
  var jspb = require('google-protobuf');
  var goog = jspb;
  var global = Function('return this')();
  
  goog.exportSymbol('proto.ml_metadata.AnyArtifactStructType', null, global);
  goog.exportSymbol('proto.ml_metadata.Artifact', null, global);
  goog.exportSymbol('proto.ml_metadata.ArtifactStructType', null, global);
  goog.exportSymbol('proto.ml_metadata.ArtifactStructType.KindCase', null, global);
  goog.exportSymbol('proto.ml_metadata.ArtifactType', null, global);
  goog.exportSymbol('proto.ml_metadata.Association', null, global);
  goog.exportSymbol('proto.ml_metadata.Attribution', null, global);
  goog.exportSymbol('proto.ml_metadata.ConnectionConfig', null, global);
  goog.exportSymbol('proto.ml_metadata.ConnectionConfig.ConfigCase', null, global);
  goog.exportSymbol('proto.ml_metadata.Context', null, global);
  goog.exportSymbol('proto.ml_metadata.ContextType', null, global);
  goog.exportSymbol('proto.ml_metadata.DictArtifactStructType', null, global);
  goog.exportSymbol('proto.ml_metadata.Event', null, global);
  goog.exportSymbol('proto.ml_metadata.Event.Path', null, global);
  goog.exportSymbol('proto.ml_metadata.Event.Path.Step', null, global);
  goog.exportSymbol('proto.ml_metadata.Event.Path.Step.ValueCase', null, global);
  goog.exportSymbol('proto.ml_metadata.Event.Type', null, global);
  goog.exportSymbol('proto.ml_metadata.Execution', null, global);
  goog.exportSymbol('proto.ml_metadata.Execution.State', null, global);
  goog.exportSymbol('proto.ml_metadata.ExecutionType', null, global);
  goog.exportSymbol('proto.ml_metadata.FakeDatabaseConfig', null, global);
  goog.exportSymbol('proto.ml_metadata.IntersectionArtifactStructType', null, global);
  goog.exportSymbol('proto.ml_metadata.ListArtifactStructType', null, global);
  goog.exportSymbol('proto.ml_metadata.MetadataStoreServerConfig', null, global);
  goog.exportSymbol('proto.ml_metadata.MetadataStoreServerConfig.SSLConfig', null, global);
  goog.exportSymbol('proto.ml_metadata.MySQLDatabaseConfig', null, global);
  goog.exportSymbol('proto.ml_metadata.NoneArtifactStructType', null, global);
  goog.exportSymbol('proto.ml_metadata.ParentContext', null, global);
  goog.exportSymbol('proto.ml_metadata.PropertyType', null, global);
  goog.exportSymbol('proto.ml_metadata.SqliteMetadataSourceConfig', null, global);
  goog.exportSymbol('proto.ml_metadata.SqliteMetadataSourceConfig.ConnectionMode', null, global);
  goog.exportSymbol('proto.ml_metadata.TupleArtifactStructType', null, global);
  goog.exportSymbol('proto.ml_metadata.UnionArtifactStructType', null, global);
  goog.exportSymbol('proto.ml_metadata.Value', null, global);
  goog.exportSymbol('proto.ml_metadata.Value.ValueCase', null, global);
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.Value = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, proto.ml_metadata.Value.oneofGroups_);
  };
  goog.inherits(proto.ml_metadata.Value, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.Value.displayName = 'proto.ml_metadata.Value';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.Artifact = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
  };
  goog.inherits(proto.ml_metadata.Artifact, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.Artifact.displayName = 'proto.ml_metadata.Artifact';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.ArtifactType = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
  };
  goog.inherits(proto.ml_metadata.ArtifactType, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.ArtifactType.displayName = 'proto.ml_metadata.ArtifactType';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.Event = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
  };
  goog.inherits(proto.ml_metadata.Event, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.Event.displayName = 'proto.ml_metadata.Event';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.Event.Path = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.Event.Path.repeatedFields_, null);
  };
  goog.inherits(proto.ml_metadata.Event.Path, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.Event.Path.displayName = 'proto.ml_metadata.Event.Path';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.Event.Path.Step = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, proto.ml_metadata.Event.Path.Step.oneofGroups_);
  };
  goog.inherits(proto.ml_metadata.Event.Path.Step, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.Event.Path.Step.displayName = 'proto.ml_metadata.Event.Path.Step';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.Execution = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
  };
  goog.inherits(proto.ml_metadata.Execution, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.Execution.displayName = 'proto.ml_metadata.Execution';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.ExecutionType = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
  };
  goog.inherits(proto.ml_metadata.ExecutionType, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.ExecutionType.displayName = 'proto.ml_metadata.ExecutionType';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.ContextType = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
  };
  goog.inherits(proto.ml_metadata.ContextType, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.ContextType.displayName = 'proto.ml_metadata.ContextType';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.Context = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
  };
  goog.inherits(proto.ml_metadata.Context, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.Context.displayName = 'proto.ml_metadata.Context';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.Attribution = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
  };
  goog.inherits(proto.ml_metadata.Attribution, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.Attribution.displayName = 'proto.ml_metadata.Attribution';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.Association = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
  };
  goog.inherits(proto.ml_metadata.Association, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.Association.displayName = 'proto.ml_metadata.Association';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.ParentContext = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
  };
  goog.inherits(proto.ml_metadata.ParentContext, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.ParentContext.displayName = 'proto.ml_metadata.ParentContext';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.ArtifactStructType = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, proto.ml_metadata.ArtifactStructType.oneofGroups_);
  };
  goog.inherits(proto.ml_metadata.ArtifactStructType, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.ArtifactStructType.displayName = 'proto.ml_metadata.ArtifactStructType';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.UnionArtifactStructType = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.UnionArtifactStructType.repeatedFields_, null);
  };
  goog.inherits(proto.ml_metadata.UnionArtifactStructType, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.UnionArtifactStructType.displayName = 'proto.ml_metadata.UnionArtifactStructType';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.IntersectionArtifactStructType = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.IntersectionArtifactStructType.repeatedFields_, null);
  };
  goog.inherits(proto.ml_metadata.IntersectionArtifactStructType, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.IntersectionArtifactStructType.displayName = 'proto.ml_metadata.IntersectionArtifactStructType';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.ListArtifactStructType = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
  };
  goog.inherits(proto.ml_metadata.ListArtifactStructType, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.ListArtifactStructType.displayName = 'proto.ml_metadata.ListArtifactStructType';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.NoneArtifactStructType = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
  };
  goog.inherits(proto.ml_metadata.NoneArtifactStructType, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.NoneArtifactStructType.displayName = 'proto.ml_metadata.NoneArtifactStructType';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.AnyArtifactStructType = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
  };
  goog.inherits(proto.ml_metadata.AnyArtifactStructType, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.AnyArtifactStructType.displayName = 'proto.ml_metadata.AnyArtifactStructType';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.TupleArtifactStructType = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, proto.ml_metadata.TupleArtifactStructType.repeatedFields_, null);
  };
  goog.inherits(proto.ml_metadata.TupleArtifactStructType, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.TupleArtifactStructType.displayName = 'proto.ml_metadata.TupleArtifactStructType';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.DictArtifactStructType = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
  };
  goog.inherits(proto.ml_metadata.DictArtifactStructType, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.DictArtifactStructType.displayName = 'proto.ml_metadata.DictArtifactStructType';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.FakeDatabaseConfig = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
  };
  goog.inherits(proto.ml_metadata.FakeDatabaseConfig, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.FakeDatabaseConfig.displayName = 'proto.ml_metadata.FakeDatabaseConfig';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.MySQLDatabaseConfig = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
  };
  goog.inherits(proto.ml_metadata.MySQLDatabaseConfig, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.MySQLDatabaseConfig.displayName = 'proto.ml_metadata.MySQLDatabaseConfig';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.SqliteMetadataSourceConfig = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
  };
  goog.inherits(proto.ml_metadata.SqliteMetadataSourceConfig, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.SqliteMetadataSourceConfig.displayName = 'proto.ml_metadata.SqliteMetadataSourceConfig';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.ConnectionConfig = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, proto.ml_metadata.ConnectionConfig.oneofGroups_);
  };
  goog.inherits(proto.ml_metadata.ConnectionConfig, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.ConnectionConfig.displayName = 'proto.ml_metadata.ConnectionConfig';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.MetadataStoreServerConfig = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
  };
  goog.inherits(proto.ml_metadata.MetadataStoreServerConfig, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.MetadataStoreServerConfig.displayName = 'proto.ml_metadata.MetadataStoreServerConfig';
  }
  /**
   * Generated by JsPbCodeGenerator.
   * @param {Array=} opt_data Optional initial data array, typically from a
   * server response, or constructed directly in Javascript. The array is used
   * in place and becomes part of the constructed object. It is not cloned.
   * If no data is provided, the constructed object will be empty, but still
   * valid.
   * @extends {jspb.Message}
   * @constructor
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig = function(opt_data) {
    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
  };
  goog.inherits(proto.ml_metadata.MetadataStoreServerConfig.SSLConfig, jspb.Message);
  if (goog.DEBUG && !COMPILED) {
    /**
     * @public
     * @override
     */
    proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.displayName = 'proto.ml_metadata.MetadataStoreServerConfig.SSLConfig';
  }
  
  /**
   * Oneof group definitions for this message. Each group defines the field
   * numbers belonging to that group. When of these fields' value is set, all
   * other fields in the group are cleared. During deserialization, if multiple
   * fields are encountered for a group, only the last value seen will be kept.
   * @private {!Array<!Array<number>>}
   * @const
   */
  proto.ml_metadata.Value.oneofGroups_ = [[1,2,3]];
  
  /**
   * @enum {number}
   */
  proto.ml_metadata.Value.ValueCase = {
    VALUE_NOT_SET: 0,
    INT_VALUE: 1,
    DOUBLE_VALUE: 2,
    STRING_VALUE: 3
  };
  
  /**
   * @return {proto.ml_metadata.Value.ValueCase}
   */
  proto.ml_metadata.Value.prototype.getValueCase = function() {
    return /** @type {proto.ml_metadata.Value.ValueCase} */(jspb.Message.computeOneofCase(this, proto.ml_metadata.Value.oneofGroups_[0]));
  };
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.Value.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.Value.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.Value} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.Value.toObject = function(includeInstance, msg) {
    var f, obj = {
      intValue: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f,
      doubleValue: (f = jspb.Message.getOptionalFloatingPointField(msg, 2)) == null ? undefined : f,
      stringValue: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.Value}
   */
  proto.ml_metadata.Value.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.Value;
    return proto.ml_metadata.Value.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.Value} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.Value}
   */
  proto.ml_metadata.Value.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = /** @type {number} */ (reader.readInt64());
        msg.setIntValue(value);
        break;
      case 2:
        var value = /** @type {number} */ (reader.readDouble());
        msg.setDoubleValue(value);
        break;
      case 3:
        var value = /** @type {string} */ (reader.readString());
        msg.setStringValue(value);
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.Value.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.Value.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.Value} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.Value.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = /** @type {number} */ (jspb.Message.getField(message, 1));
    if (f != null) {
      writer.writeInt64(
        1,
        f
      );
    }
    f = /** @type {number} */ (jspb.Message.getField(message, 2));
    if (f != null) {
      writer.writeDouble(
        2,
        f
      );
    }
    f = /** @type {string} */ (jspb.Message.getField(message, 3));
    if (f != null) {
      writer.writeString(
        3,
        f
      );
    }
  };
  
  
  /**
   * optional int64 int_value = 1;
   * @return {number}
   */
  proto.ml_metadata.Value.prototype.getIntValue = function() {
    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.Value} returns this
   */
  proto.ml_metadata.Value.prototype.setIntValue = function(value) {
    return jspb.Message.setOneofField(this, 1, proto.ml_metadata.Value.oneofGroups_[0], value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Value} returns this
   */
  proto.ml_metadata.Value.prototype.clearIntValue = function() {
    return jspb.Message.setOneofField(this, 1, proto.ml_metadata.Value.oneofGroups_[0], undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Value.prototype.hasIntValue = function() {
    return jspb.Message.getField(this, 1) != null;
  };
  
  
  /**
   * optional double double_value = 2;
   * @return {number}
   */
  proto.ml_metadata.Value.prototype.getDoubleValue = function() {
    return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 2, 0.0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.Value} returns this
   */
  proto.ml_metadata.Value.prototype.setDoubleValue = function(value) {
    return jspb.Message.setOneofField(this, 2, proto.ml_metadata.Value.oneofGroups_[0], value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Value} returns this
   */
  proto.ml_metadata.Value.prototype.clearDoubleValue = function() {
    return jspb.Message.setOneofField(this, 2, proto.ml_metadata.Value.oneofGroups_[0], undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Value.prototype.hasDoubleValue = function() {
    return jspb.Message.getField(this, 2) != null;
  };
  
  
  /**
   * optional string string_value = 3;
   * @return {string}
   */
  proto.ml_metadata.Value.prototype.getStringValue = function() {
    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
  };
  
  
  /**
   * @param {string} value
   * @return {!proto.ml_metadata.Value} returns this
   */
  proto.ml_metadata.Value.prototype.setStringValue = function(value) {
    return jspb.Message.setOneofField(this, 3, proto.ml_metadata.Value.oneofGroups_[0], value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Value} returns this
   */
  proto.ml_metadata.Value.prototype.clearStringValue = function() {
    return jspb.Message.setOneofField(this, 3, proto.ml_metadata.Value.oneofGroups_[0], undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Value.prototype.hasStringValue = function() {
    return jspb.Message.getField(this, 3) != null;
  };
  
  
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.Artifact.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.Artifact.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.Artifact} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.Artifact.toObject = function(includeInstance, msg) {
    var f, obj = {
      id: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f,
      typeId: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f,
      uri: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f,
      propertiesMap: (f = msg.getPropertiesMap()) ? f.toObject(includeInstance, proto.ml_metadata.Value.toObject) : [],
      customPropertiesMap: (f = msg.getCustomPropertiesMap()) ? f.toObject(includeInstance, proto.ml_metadata.Value.toObject) : []
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.Artifact}
   */
  proto.ml_metadata.Artifact.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.Artifact;
    return proto.ml_metadata.Artifact.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.Artifact} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.Artifact}
   */
  proto.ml_metadata.Artifact.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = /** @type {number} */ (reader.readInt64());
        msg.setId(value);
        break;
      case 2:
        var value = /** @type {number} */ (reader.readInt64());
        msg.setTypeId(value);
        break;
      case 3:
        var value = /** @type {string} */ (reader.readString());
        msg.setUri(value);
        break;
      case 4:
        var value = msg.getPropertiesMap();
        reader.readMessage(value, function(message, reader) {
          jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_metadata.Value.deserializeBinaryFromReader, "", new proto.ml_metadata.Value());
           });
        break;
      case 5:
        var value = msg.getCustomPropertiesMap();
        reader.readMessage(value, function(message, reader) {
          jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_metadata.Value.deserializeBinaryFromReader, "", new proto.ml_metadata.Value());
           });
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.Artifact.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.Artifact.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.Artifact} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.Artifact.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = /** @type {number} */ (jspb.Message.getField(message, 1));
    if (f != null) {
      writer.writeInt64(
        1,
        f
      );
    }
    f = /** @type {number} */ (jspb.Message.getField(message, 2));
    if (f != null) {
      writer.writeInt64(
        2,
        f
      );
    }
    f = /** @type {string} */ (jspb.Message.getField(message, 3));
    if (f != null) {
      writer.writeString(
        3,
        f
      );
    }
    f = message.getPropertiesMap(true);
    if (f && f.getLength() > 0) {
      f.serializeBinary(4, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_metadata.Value.serializeBinaryToWriter);
    }
    f = message.getCustomPropertiesMap(true);
    if (f && f.getLength() > 0) {
      f.serializeBinary(5, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_metadata.Value.serializeBinaryToWriter);
    }
  };
  
  
  /**
   * optional int64 id = 1;
   * @return {number}
   */
  proto.ml_metadata.Artifact.prototype.getId = function() {
    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.Artifact} returns this
   */
  proto.ml_metadata.Artifact.prototype.setId = function(value) {
    return jspb.Message.setField(this, 1, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Artifact} returns this
   */
  proto.ml_metadata.Artifact.prototype.clearId = function() {
    return jspb.Message.setField(this, 1, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Artifact.prototype.hasId = function() {
    return jspb.Message.getField(this, 1) != null;
  };
  
  
  /**
   * optional int64 type_id = 2;
   * @return {number}
   */
  proto.ml_metadata.Artifact.prototype.getTypeId = function() {
    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.Artifact} returns this
   */
  proto.ml_metadata.Artifact.prototype.setTypeId = function(value) {
    return jspb.Message.setField(this, 2, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Artifact} returns this
   */
  proto.ml_metadata.Artifact.prototype.clearTypeId = function() {
    return jspb.Message.setField(this, 2, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Artifact.prototype.hasTypeId = function() {
    return jspb.Message.getField(this, 2) != null;
  };
  
  
  /**
   * optional string uri = 3;
   * @return {string}
   */
  proto.ml_metadata.Artifact.prototype.getUri = function() {
    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
  };
  
  
  /**
   * @param {string} value
   * @return {!proto.ml_metadata.Artifact} returns this
   */
  proto.ml_metadata.Artifact.prototype.setUri = function(value) {
    return jspb.Message.setField(this, 3, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Artifact} returns this
   */
  proto.ml_metadata.Artifact.prototype.clearUri = function() {
    return jspb.Message.setField(this, 3, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Artifact.prototype.hasUri = function() {
    return jspb.Message.getField(this, 3) != null;
  };
  
  
  /**
   * map<string, Value> properties = 4;
   * @param {boolean=} opt_noLazyCreate Do not create the map if
   * empty, instead returning `undefined`
   * @return {!jspb.Map<string,!proto.ml_metadata.Value>}
   */
  proto.ml_metadata.Artifact.prototype.getPropertiesMap = function(opt_noLazyCreate) {
    return /** @type {!jspb.Map<string,!proto.ml_metadata.Value>} */ (
        jspb.Message.getMapField(this, 4, opt_noLazyCreate,
        proto.ml_metadata.Value));
  };
  
  
  /**
   * Clears values from the map. The map will be non-null.
   * @return {!proto.ml_metadata.Artifact} returns this
   */
  proto.ml_metadata.Artifact.prototype.clearPropertiesMap = function() {
    this.getPropertiesMap().clear();
    return this;};
  
  
  /**
   * map<string, Value> custom_properties = 5;
   * @param {boolean=} opt_noLazyCreate Do not create the map if
   * empty, instead returning `undefined`
   * @return {!jspb.Map<string,!proto.ml_metadata.Value>}
   */
  proto.ml_metadata.Artifact.prototype.getCustomPropertiesMap = function(opt_noLazyCreate) {
    return /** @type {!jspb.Map<string,!proto.ml_metadata.Value>} */ (
        jspb.Message.getMapField(this, 5, opt_noLazyCreate,
        proto.ml_metadata.Value));
  };
  
  
  /**
   * Clears values from the map. The map will be non-null.
   * @return {!proto.ml_metadata.Artifact} returns this
   */
  proto.ml_metadata.Artifact.prototype.clearCustomPropertiesMap = function() {
    this.getCustomPropertiesMap().clear();
    return this;};
  
  
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.ArtifactType.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.ArtifactType.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.ArtifactType} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.ArtifactType.toObject = function(includeInstance, msg) {
    var f, obj = {
      id: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f,
      name: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f,
      propertiesMap: (f = msg.getPropertiesMap()) ? f.toObject(includeInstance, undefined) : []
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.ArtifactType}
   */
  proto.ml_metadata.ArtifactType.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.ArtifactType;
    return proto.ml_metadata.ArtifactType.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.ArtifactType} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.ArtifactType}
   */
  proto.ml_metadata.ArtifactType.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = /** @type {number} */ (reader.readInt64());
        msg.setId(value);
        break;
      case 2:
        var value = /** @type {string} */ (reader.readString());
        msg.setName(value);
        break;
      case 3:
        var value = msg.getPropertiesMap();
        reader.readMessage(value, function(message, reader) {
          jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readEnum, null, "", 0);
           });
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.ArtifactType.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.ArtifactType.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.ArtifactType} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.ArtifactType.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = /** @type {number} */ (jspb.Message.getField(message, 1));
    if (f != null) {
      writer.writeInt64(
        1,
        f
      );
    }
    f = /** @type {string} */ (jspb.Message.getField(message, 2));
    if (f != null) {
      writer.writeString(
        2,
        f
      );
    }
    f = message.getPropertiesMap(true);
    if (f && f.getLength() > 0) {
      f.serializeBinary(3, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeEnum);
    }
  };
  
  
  /**
   * optional int64 id = 1;
   * @return {number}
   */
  proto.ml_metadata.ArtifactType.prototype.getId = function() {
    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.ArtifactType} returns this
   */
  proto.ml_metadata.ArtifactType.prototype.setId = function(value) {
    return jspb.Message.setField(this, 1, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.ArtifactType} returns this
   */
  proto.ml_metadata.ArtifactType.prototype.clearId = function() {
    return jspb.Message.setField(this, 1, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ArtifactType.prototype.hasId = function() {
    return jspb.Message.getField(this, 1) != null;
  };
  
  
  /**
   * optional string name = 2;
   * @return {string}
   */
  proto.ml_metadata.ArtifactType.prototype.getName = function() {
    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
  };
  
  
  /**
   * @param {string} value
   * @return {!proto.ml_metadata.ArtifactType} returns this
   */
  proto.ml_metadata.ArtifactType.prototype.setName = function(value) {
    return jspb.Message.setField(this, 2, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.ArtifactType} returns this
   */
  proto.ml_metadata.ArtifactType.prototype.clearName = function() {
    return jspb.Message.setField(this, 2, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ArtifactType.prototype.hasName = function() {
    return jspb.Message.getField(this, 2) != null;
  };
  
  
  /**
   * map<string, PropertyType> properties = 3;
   * @param {boolean=} opt_noLazyCreate Do not create the map if
   * empty, instead returning `undefined`
   * @return {!jspb.Map<string,!proto.ml_metadata.PropertyType>}
   */
  proto.ml_metadata.ArtifactType.prototype.getPropertiesMap = function(opt_noLazyCreate) {
    return /** @type {!jspb.Map<string,!proto.ml_metadata.PropertyType>} */ (
        jspb.Message.getMapField(this, 3, opt_noLazyCreate,
        null));
  };
  
  
  /**
   * Clears values from the map. The map will be non-null.
   * @return {!proto.ml_metadata.ArtifactType} returns this
   */
  proto.ml_metadata.ArtifactType.prototype.clearPropertiesMap = function() {
    this.getPropertiesMap().clear();
    return this;};
  
  
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.Event.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.Event.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.Event} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.Event.toObject = function(includeInstance, msg) {
    var f, obj = {
      artifactId: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f,
      executionId: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f,
      path: (f = msg.getPath()) && proto.ml_metadata.Event.Path.toObject(includeInstance, f),
      type: (f = jspb.Message.getField(msg, 4)) == null ? undefined : f,
      millisecondsSinceEpoch: (f = jspb.Message.getField(msg, 5)) == null ? undefined : f
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.Event}
   */
  proto.ml_metadata.Event.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.Event;
    return proto.ml_metadata.Event.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.Event} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.Event}
   */
  proto.ml_metadata.Event.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = /** @type {number} */ (reader.readInt64());
        msg.setArtifactId(value);
        break;
      case 2:
        var value = /** @type {number} */ (reader.readInt64());
        msg.setExecutionId(value);
        break;
      case 3:
        var value = new proto.ml_metadata.Event.Path;
        reader.readMessage(value,proto.ml_metadata.Event.Path.deserializeBinaryFromReader);
        msg.setPath(value);
        break;
      case 4:
        var value = /** @type {!proto.ml_metadata.Event.Type} */ (reader.readEnum());
        msg.setType(value);
        break;
      case 5:
        var value = /** @type {number} */ (reader.readInt64());
        msg.setMillisecondsSinceEpoch(value);
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.Event.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.Event.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.Event} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.Event.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = /** @type {number} */ (jspb.Message.getField(message, 1));
    if (f != null) {
      writer.writeInt64(
        1,
        f
      );
    }
    f = /** @type {number} */ (jspb.Message.getField(message, 2));
    if (f != null) {
      writer.writeInt64(
        2,
        f
      );
    }
    f = message.getPath();
    if (f != null) {
      writer.writeMessage(
        3,
        f,
        proto.ml_metadata.Event.Path.serializeBinaryToWriter
      );
    }
    f = /** @type {!proto.ml_metadata.Event.Type} */ (jspb.Message.getField(message, 4));
    if (f != null) {
      writer.writeEnum(
        4,
        f
      );
    }
    f = /** @type {number} */ (jspb.Message.getField(message, 5));
    if (f != null) {
      writer.writeInt64(
        5,
        f
      );
    }
  };
  
  
  /**
   * @enum {number}
   */
  proto.ml_metadata.Event.Type = {
    UNKNOWN: 0,
    DECLARED_OUTPUT: 1,
    DECLARED_INPUT: 2,
    INPUT: 3,
    OUTPUT: 4
  };
  
  
  /**
   * List of repeated fields within this message type.
   * @private {!Array<number>}
   * @const
   */
  proto.ml_metadata.Event.Path.repeatedFields_ = [1];
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.Event.Path.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.Event.Path.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.Event.Path} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.Event.Path.toObject = function(includeInstance, msg) {
    var f, obj = {
      stepsList: jspb.Message.toObjectList(msg.getStepsList(),
      proto.ml_metadata.Event.Path.Step.toObject, includeInstance)
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.Event.Path}
   */
  proto.ml_metadata.Event.Path.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.Event.Path;
    return proto.ml_metadata.Event.Path.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.Event.Path} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.Event.Path}
   */
  proto.ml_metadata.Event.Path.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = new proto.ml_metadata.Event.Path.Step;
        reader.readMessage(value,proto.ml_metadata.Event.Path.Step.deserializeBinaryFromReader);
        msg.addSteps(value);
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.Event.Path.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.Event.Path.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.Event.Path} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.Event.Path.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = message.getStepsList();
    if (f.length > 0) {
      writer.writeRepeatedMessage(
        1,
        f,
        proto.ml_metadata.Event.Path.Step.serializeBinaryToWriter
      );
    }
  };
  
  
  
  /**
   * Oneof group definitions for this message. Each group defines the field
   * numbers belonging to that group. When of these fields' value is set, all
   * other fields in the group are cleared. During deserialization, if multiple
   * fields are encountered for a group, only the last value seen will be kept.
   * @private {!Array<!Array<number>>}
   * @const
   */
  proto.ml_metadata.Event.Path.Step.oneofGroups_ = [[1,2]];
  
  /**
   * @enum {number}
   */
  proto.ml_metadata.Event.Path.Step.ValueCase = {
    VALUE_NOT_SET: 0,
    INDEX: 1,
    KEY: 2
  };
  
  /**
   * @return {proto.ml_metadata.Event.Path.Step.ValueCase}
   */
  proto.ml_metadata.Event.Path.Step.prototype.getValueCase = function() {
    return /** @type {proto.ml_metadata.Event.Path.Step.ValueCase} */(jspb.Message.computeOneofCase(this, proto.ml_metadata.Event.Path.Step.oneofGroups_[0]));
  };
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.Event.Path.Step.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.Event.Path.Step.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.Event.Path.Step} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.Event.Path.Step.toObject = function(includeInstance, msg) {
    var f, obj = {
      index: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f,
      key: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.Event.Path.Step}
   */
  proto.ml_metadata.Event.Path.Step.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.Event.Path.Step;
    return proto.ml_metadata.Event.Path.Step.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.Event.Path.Step} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.Event.Path.Step}
   */
  proto.ml_metadata.Event.Path.Step.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = /** @type {number} */ (reader.readInt64());
        msg.setIndex(value);
        break;
      case 2:
        var value = /** @type {string} */ (reader.readString());
        msg.setKey(value);
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.Event.Path.Step.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.Event.Path.Step.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.Event.Path.Step} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.Event.Path.Step.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = /** @type {number} */ (jspb.Message.getField(message, 1));
    if (f != null) {
      writer.writeInt64(
        1,
        f
      );
    }
    f = /** @type {string} */ (jspb.Message.getField(message, 2));
    if (f != null) {
      writer.writeString(
        2,
        f
      );
    }
  };
  
  
  /**
   * optional int64 index = 1;
   * @return {number}
   */
  proto.ml_metadata.Event.Path.Step.prototype.getIndex = function() {
    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.Event.Path.Step} returns this
   */
  proto.ml_metadata.Event.Path.Step.prototype.setIndex = function(value) {
    return jspb.Message.setOneofField(this, 1, proto.ml_metadata.Event.Path.Step.oneofGroups_[0], value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Event.Path.Step} returns this
   */
  proto.ml_metadata.Event.Path.Step.prototype.clearIndex = function() {
    return jspb.Message.setOneofField(this, 1, proto.ml_metadata.Event.Path.Step.oneofGroups_[0], undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Event.Path.Step.prototype.hasIndex = function() {
    return jspb.Message.getField(this, 1) != null;
  };
  
  
  /**
   * optional string key = 2;
   * @return {string}
   */
  proto.ml_metadata.Event.Path.Step.prototype.getKey = function() {
    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
  };
  
  
  /**
   * @param {string} value
   * @return {!proto.ml_metadata.Event.Path.Step} returns this
   */
  proto.ml_metadata.Event.Path.Step.prototype.setKey = function(value) {
    return jspb.Message.setOneofField(this, 2, proto.ml_metadata.Event.Path.Step.oneofGroups_[0], value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Event.Path.Step} returns this
   */
  proto.ml_metadata.Event.Path.Step.prototype.clearKey = function() {
    return jspb.Message.setOneofField(this, 2, proto.ml_metadata.Event.Path.Step.oneofGroups_[0], undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Event.Path.Step.prototype.hasKey = function() {
    return jspb.Message.getField(this, 2) != null;
  };
  
  
  /**
   * repeated Step steps = 1;
   * @return {!Array<!proto.ml_metadata.Event.Path.Step>}
   */
  proto.ml_metadata.Event.Path.prototype.getStepsList = function() {
    return /** @type{!Array<!proto.ml_metadata.Event.Path.Step>} */ (
      jspb.Message.getRepeatedWrapperField(this, proto.ml_metadata.Event.Path.Step, 1));
  };
  
  
  /**
   * @param {!Array<!proto.ml_metadata.Event.Path.Step>} value
   * @return {!proto.ml_metadata.Event.Path} returns this
  */
  proto.ml_metadata.Event.Path.prototype.setStepsList = function(value) {
    return jspb.Message.setRepeatedWrapperField(this, 1, value);
  };
  
  
  /**
   * @param {!proto.ml_metadata.Event.Path.Step=} opt_value
   * @param {number=} opt_index
   * @return {!proto.ml_metadata.Event.Path.Step}
   */
  proto.ml_metadata.Event.Path.prototype.addSteps = function(opt_value, opt_index) {
    return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.Event.Path.Step, opt_index);
  };
  
  
  /**
   * Clears the list making it empty but non-null.
   * @return {!proto.ml_metadata.Event.Path} returns this
   */
  proto.ml_metadata.Event.Path.prototype.clearStepsList = function() {
    return this.setStepsList([]);
  };
  
  
  /**
   * optional int64 artifact_id = 1;
   * @return {number}
   */
  proto.ml_metadata.Event.prototype.getArtifactId = function() {
    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.Event} returns this
   */
  proto.ml_metadata.Event.prototype.setArtifactId = function(value) {
    return jspb.Message.setField(this, 1, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Event} returns this
   */
  proto.ml_metadata.Event.prototype.clearArtifactId = function() {
    return jspb.Message.setField(this, 1, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Event.prototype.hasArtifactId = function() {
    return jspb.Message.getField(this, 1) != null;
  };
  
  
  /**
   * optional int64 execution_id = 2;
   * @return {number}
   */
  proto.ml_metadata.Event.prototype.getExecutionId = function() {
    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.Event} returns this
   */
  proto.ml_metadata.Event.prototype.setExecutionId = function(value) {
    return jspb.Message.setField(this, 2, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Event} returns this
   */
  proto.ml_metadata.Event.prototype.clearExecutionId = function() {
    return jspb.Message.setField(this, 2, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Event.prototype.hasExecutionId = function() {
    return jspb.Message.getField(this, 2) != null;
  };
  
  
  /**
   * optional Path path = 3;
   * @return {?proto.ml_metadata.Event.Path}
   */
  proto.ml_metadata.Event.prototype.getPath = function() {
    return /** @type{?proto.ml_metadata.Event.Path} */ (
      jspb.Message.getWrapperField(this, proto.ml_metadata.Event.Path, 3));
  };
  
  
  /**
   * @param {?proto.ml_metadata.Event.Path|undefined} value
   * @return {!proto.ml_metadata.Event} returns this
  */
  proto.ml_metadata.Event.prototype.setPath = function(value) {
    return jspb.Message.setWrapperField(this, 3, value);
  };
  
  
  /**
   * Clears the message field making it undefined.
   * @return {!proto.ml_metadata.Event} returns this
   */
  proto.ml_metadata.Event.prototype.clearPath = function() {
    return this.setPath(undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Event.prototype.hasPath = function() {
    return jspb.Message.getField(this, 3) != null;
  };
  
  
  /**
   * optional Type type = 4;
   * @return {!proto.ml_metadata.Event.Type}
   */
  proto.ml_metadata.Event.prototype.getType = function() {
    return /** @type {!proto.ml_metadata.Event.Type} */ (jspb.Message.getFieldWithDefault(this, 4, 0));
  };
  
  
  /**
   * @param {!proto.ml_metadata.Event.Type} value
   * @return {!proto.ml_metadata.Event} returns this
   */
  proto.ml_metadata.Event.prototype.setType = function(value) {
    return jspb.Message.setField(this, 4, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Event} returns this
   */
  proto.ml_metadata.Event.prototype.clearType = function() {
    return jspb.Message.setField(this, 4, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Event.prototype.hasType = function() {
    return jspb.Message.getField(this, 4) != null;
  };
  
  
  /**
   * optional int64 milliseconds_since_epoch = 5;
   * @return {number}
   */
  proto.ml_metadata.Event.prototype.getMillisecondsSinceEpoch = function() {
    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.Event} returns this
   */
  proto.ml_metadata.Event.prototype.setMillisecondsSinceEpoch = function(value) {
    return jspb.Message.setField(this, 5, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Event} returns this
   */
  proto.ml_metadata.Event.prototype.clearMillisecondsSinceEpoch = function() {
    return jspb.Message.setField(this, 5, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Event.prototype.hasMillisecondsSinceEpoch = function() {
    return jspb.Message.getField(this, 5) != null;
  };
  
  
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.Execution.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.Execution.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.Execution} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.Execution.toObject = function(includeInstance, msg) {
    var f, obj = {
      id: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f,
      typeId: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f,
      lastKnownState: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f,
      propertiesMap: (f = msg.getPropertiesMap()) ? f.toObject(includeInstance, proto.ml_metadata.Value.toObject) : [],
      customPropertiesMap: (f = msg.getCustomPropertiesMap()) ? f.toObject(includeInstance, proto.ml_metadata.Value.toObject) : []
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.Execution}
   */
  proto.ml_metadata.Execution.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.Execution;
    return proto.ml_metadata.Execution.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.Execution} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.Execution}
   */
  proto.ml_metadata.Execution.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = /** @type {number} */ (reader.readInt64());
        msg.setId(value);
        break;
      case 2:
        var value = /** @type {number} */ (reader.readInt64());
        msg.setTypeId(value);
        break;
      case 3:
        var value = /** @type {!proto.ml_metadata.Execution.State} */ (reader.readEnum());
        msg.setLastKnownState(value);
        break;
      case 4:
        var value = msg.getPropertiesMap();
        reader.readMessage(value, function(message, reader) {
          jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_metadata.Value.deserializeBinaryFromReader, "", new proto.ml_metadata.Value());
           });
        break;
      case 5:
        var value = msg.getCustomPropertiesMap();
        reader.readMessage(value, function(message, reader) {
          jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_metadata.Value.deserializeBinaryFromReader, "", new proto.ml_metadata.Value());
           });
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.Execution.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.Execution.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.Execution} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.Execution.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = /** @type {number} */ (jspb.Message.getField(message, 1));
    if (f != null) {
      writer.writeInt64(
        1,
        f
      );
    }
    f = /** @type {number} */ (jspb.Message.getField(message, 2));
    if (f != null) {
      writer.writeInt64(
        2,
        f
      );
    }
    f = /** @type {!proto.ml_metadata.Execution.State} */ (jspb.Message.getField(message, 3));
    if (f != null) {
      writer.writeEnum(
        3,
        f
      );
    }
    f = message.getPropertiesMap(true);
    if (f && f.getLength() > 0) {
      f.serializeBinary(4, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_metadata.Value.serializeBinaryToWriter);
    }
    f = message.getCustomPropertiesMap(true);
    if (f && f.getLength() > 0) {
      f.serializeBinary(5, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_metadata.Value.serializeBinaryToWriter);
    }
  };
  
  
  /**
   * @enum {number}
   */
  proto.ml_metadata.Execution.State = {
    UNKNOWN: 0,
    NEW: 1,
    RUNNING: 2,
    COMPLETE: 3,
    FAILED: 4,
    CACHED: 5
  };
  
  /**
   * optional int64 id = 1;
   * @return {number}
   */
  proto.ml_metadata.Execution.prototype.getId = function() {
    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.Execution} returns this
   */
  proto.ml_metadata.Execution.prototype.setId = function(value) {
    return jspb.Message.setField(this, 1, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Execution} returns this
   */
  proto.ml_metadata.Execution.prototype.clearId = function() {
    return jspb.Message.setField(this, 1, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Execution.prototype.hasId = function() {
    return jspb.Message.getField(this, 1) != null;
  };
  
  
  /**
   * optional int64 type_id = 2;
   * @return {number}
   */
  proto.ml_metadata.Execution.prototype.getTypeId = function() {
    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.Execution} returns this
   */
  proto.ml_metadata.Execution.prototype.setTypeId = function(value) {
    return jspb.Message.setField(this, 2, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Execution} returns this
   */
  proto.ml_metadata.Execution.prototype.clearTypeId = function() {
    return jspb.Message.setField(this, 2, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Execution.prototype.hasTypeId = function() {
    return jspb.Message.getField(this, 2) != null;
  };
  
  
  /**
   * optional State last_known_state = 3;
   * @return {!proto.ml_metadata.Execution.State}
   */
  proto.ml_metadata.Execution.prototype.getLastKnownState = function() {
    return /** @type {!proto.ml_metadata.Execution.State} */ (jspb.Message.getFieldWithDefault(this, 3, 0));
  };
  
  
  /**
   * @param {!proto.ml_metadata.Execution.State} value
   * @return {!proto.ml_metadata.Execution} returns this
   */
  proto.ml_metadata.Execution.prototype.setLastKnownState = function(value) {
    return jspb.Message.setField(this, 3, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Execution} returns this
   */
  proto.ml_metadata.Execution.prototype.clearLastKnownState = function() {
    return jspb.Message.setField(this, 3, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Execution.prototype.hasLastKnownState = function() {
    return jspb.Message.getField(this, 3) != null;
  };
  
  
  /**
   * map<string, Value> properties = 4;
   * @param {boolean=} opt_noLazyCreate Do not create the map if
   * empty, instead returning `undefined`
   * @return {!jspb.Map<string,!proto.ml_metadata.Value>}
   */
  proto.ml_metadata.Execution.prototype.getPropertiesMap = function(opt_noLazyCreate) {
    return /** @type {!jspb.Map<string,!proto.ml_metadata.Value>} */ (
        jspb.Message.getMapField(this, 4, opt_noLazyCreate,
        proto.ml_metadata.Value));
  };
  
  
  /**
   * Clears values from the map. The map will be non-null.
   * @return {!proto.ml_metadata.Execution} returns this
   */
  proto.ml_metadata.Execution.prototype.clearPropertiesMap = function() {
    this.getPropertiesMap().clear();
    return this;};
  
  
  /**
   * map<string, Value> custom_properties = 5;
   * @param {boolean=} opt_noLazyCreate Do not create the map if
   * empty, instead returning `undefined`
   * @return {!jspb.Map<string,!proto.ml_metadata.Value>}
   */
  proto.ml_metadata.Execution.prototype.getCustomPropertiesMap = function(opt_noLazyCreate) {
    return /** @type {!jspb.Map<string,!proto.ml_metadata.Value>} */ (
        jspb.Message.getMapField(this, 5, opt_noLazyCreate,
        proto.ml_metadata.Value));
  };
  
  
  /**
   * Clears values from the map. The map will be non-null.
   * @return {!proto.ml_metadata.Execution} returns this
   */
  proto.ml_metadata.Execution.prototype.clearCustomPropertiesMap = function() {
    this.getCustomPropertiesMap().clear();
    return this;};
  
  
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.ExecutionType.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.ExecutionType.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.ExecutionType} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.ExecutionType.toObject = function(includeInstance, msg) {
    var f, obj = {
      id: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f,
      name: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f,
      propertiesMap: (f = msg.getPropertiesMap()) ? f.toObject(includeInstance, undefined) : [],
      inputType: (f = msg.getInputType()) && proto.ml_metadata.ArtifactStructType.toObject(includeInstance, f),
      outputType: (f = msg.getOutputType()) && proto.ml_metadata.ArtifactStructType.toObject(includeInstance, f)
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.ExecutionType}
   */
  proto.ml_metadata.ExecutionType.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.ExecutionType;
    return proto.ml_metadata.ExecutionType.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.ExecutionType} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.ExecutionType}
   */
  proto.ml_metadata.ExecutionType.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = /** @type {number} */ (reader.readInt64());
        msg.setId(value);
        break;
      case 2:
        var value = /** @type {string} */ (reader.readString());
        msg.setName(value);
        break;
      case 3:
        var value = msg.getPropertiesMap();
        reader.readMessage(value, function(message, reader) {
          jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readEnum, null, "", 0);
           });
        break;
      case 4:
        var value = new proto.ml_metadata.ArtifactStructType;
        reader.readMessage(value,proto.ml_metadata.ArtifactStructType.deserializeBinaryFromReader);
        msg.setInputType(value);
        break;
      case 5:
        var value = new proto.ml_metadata.ArtifactStructType;
        reader.readMessage(value,proto.ml_metadata.ArtifactStructType.deserializeBinaryFromReader);
        msg.setOutputType(value);
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.ExecutionType.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.ExecutionType.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.ExecutionType} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.ExecutionType.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = /** @type {number} */ (jspb.Message.getField(message, 1));
    if (f != null) {
      writer.writeInt64(
        1,
        f
      );
    }
    f = /** @type {string} */ (jspb.Message.getField(message, 2));
    if (f != null) {
      writer.writeString(
        2,
        f
      );
    }
    f = message.getPropertiesMap(true);
    if (f && f.getLength() > 0) {
      f.serializeBinary(3, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeEnum);
    }
    f = message.getInputType();
    if (f != null) {
      writer.writeMessage(
        4,
        f,
        proto.ml_metadata.ArtifactStructType.serializeBinaryToWriter
      );
    }
    f = message.getOutputType();
    if (f != null) {
      writer.writeMessage(
        5,
        f,
        proto.ml_metadata.ArtifactStructType.serializeBinaryToWriter
      );
    }
  };
  
  
  /**
   * optional int64 id = 1;
   * @return {number}
   */
  proto.ml_metadata.ExecutionType.prototype.getId = function() {
    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.ExecutionType} returns this
   */
  proto.ml_metadata.ExecutionType.prototype.setId = function(value) {
    return jspb.Message.setField(this, 1, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.ExecutionType} returns this
   */
  proto.ml_metadata.ExecutionType.prototype.clearId = function() {
    return jspb.Message.setField(this, 1, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ExecutionType.prototype.hasId = function() {
    return jspb.Message.getField(this, 1) != null;
  };
  
  
  /**
   * optional string name = 2;
   * @return {string}
   */
  proto.ml_metadata.ExecutionType.prototype.getName = function() {
    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
  };
  
  
  /**
   * @param {string} value
   * @return {!proto.ml_metadata.ExecutionType} returns this
   */
  proto.ml_metadata.ExecutionType.prototype.setName = function(value) {
    return jspb.Message.setField(this, 2, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.ExecutionType} returns this
   */
  proto.ml_metadata.ExecutionType.prototype.clearName = function() {
    return jspb.Message.setField(this, 2, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ExecutionType.prototype.hasName = function() {
    return jspb.Message.getField(this, 2) != null;
  };
  
  
  /**
   * map<string, PropertyType> properties = 3;
   * @param {boolean=} opt_noLazyCreate Do not create the map if
   * empty, instead returning `undefined`
   * @return {!jspb.Map<string,!proto.ml_metadata.PropertyType>}
   */
  proto.ml_metadata.ExecutionType.prototype.getPropertiesMap = function(opt_noLazyCreate) {
    return /** @type {!jspb.Map<string,!proto.ml_metadata.PropertyType>} */ (
        jspb.Message.getMapField(this, 3, opt_noLazyCreate,
        null));
  };
  
  
  /**
   * Clears values from the map. The map will be non-null.
   * @return {!proto.ml_metadata.ExecutionType} returns this
   */
  proto.ml_metadata.ExecutionType.prototype.clearPropertiesMap = function() {
    this.getPropertiesMap().clear();
    return this;};
  
  
  /**
   * optional ArtifactStructType input_type = 4;
   * @return {?proto.ml_metadata.ArtifactStructType}
   */
  proto.ml_metadata.ExecutionType.prototype.getInputType = function() {
    return /** @type{?proto.ml_metadata.ArtifactStructType} */ (
      jspb.Message.getWrapperField(this, proto.ml_metadata.ArtifactStructType, 4));
  };
  
  
  /**
   * @param {?proto.ml_metadata.ArtifactStructType|undefined} value
   * @return {!proto.ml_metadata.ExecutionType} returns this
  */
  proto.ml_metadata.ExecutionType.prototype.setInputType = function(value) {
    return jspb.Message.setWrapperField(this, 4, value);
  };
  
  
  /**
   * Clears the message field making it undefined.
   * @return {!proto.ml_metadata.ExecutionType} returns this
   */
  proto.ml_metadata.ExecutionType.prototype.clearInputType = function() {
    return this.setInputType(undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ExecutionType.prototype.hasInputType = function() {
    return jspb.Message.getField(this, 4) != null;
  };
  
  
  /**
   * optional ArtifactStructType output_type = 5;
   * @return {?proto.ml_metadata.ArtifactStructType}
   */
  proto.ml_metadata.ExecutionType.prototype.getOutputType = function() {
    return /** @type{?proto.ml_metadata.ArtifactStructType} */ (
      jspb.Message.getWrapperField(this, proto.ml_metadata.ArtifactStructType, 5));
  };
  
  
  /**
   * @param {?proto.ml_metadata.ArtifactStructType|undefined} value
   * @return {!proto.ml_metadata.ExecutionType} returns this
  */
  proto.ml_metadata.ExecutionType.prototype.setOutputType = function(value) {
    return jspb.Message.setWrapperField(this, 5, value);
  };
  
  
  /**
   * Clears the message field making it undefined.
   * @return {!proto.ml_metadata.ExecutionType} returns this
   */
  proto.ml_metadata.ExecutionType.prototype.clearOutputType = function() {
    return this.setOutputType(undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ExecutionType.prototype.hasOutputType = function() {
    return jspb.Message.getField(this, 5) != null;
  };
  
  
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.ContextType.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.ContextType.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.ContextType} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.ContextType.toObject = function(includeInstance, msg) {
    var f, obj = {
      id: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f,
      name: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f,
      propertiesMap: (f = msg.getPropertiesMap()) ? f.toObject(includeInstance, undefined) : []
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.ContextType}
   */
  proto.ml_metadata.ContextType.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.ContextType;
    return proto.ml_metadata.ContextType.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.ContextType} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.ContextType}
   */
  proto.ml_metadata.ContextType.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = /** @type {number} */ (reader.readInt64());
        msg.setId(value);
        break;
      case 2:
        var value = /** @type {string} */ (reader.readString());
        msg.setName(value);
        break;
      case 3:
        var value = msg.getPropertiesMap();
        reader.readMessage(value, function(message, reader) {
          jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readEnum, null, "", 0);
           });
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.ContextType.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.ContextType.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.ContextType} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.ContextType.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = /** @type {number} */ (jspb.Message.getField(message, 1));
    if (f != null) {
      writer.writeInt64(
        1,
        f
      );
    }
    f = /** @type {string} */ (jspb.Message.getField(message, 2));
    if (f != null) {
      writer.writeString(
        2,
        f
      );
    }
    f = message.getPropertiesMap(true);
    if (f && f.getLength() > 0) {
      f.serializeBinary(3, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeEnum);
    }
  };
  
  
  /**
   * optional int64 id = 1;
   * @return {number}
   */
  proto.ml_metadata.ContextType.prototype.getId = function() {
    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.ContextType} returns this
   */
  proto.ml_metadata.ContextType.prototype.setId = function(value) {
    return jspb.Message.setField(this, 1, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.ContextType} returns this
   */
  proto.ml_metadata.ContextType.prototype.clearId = function() {
    return jspb.Message.setField(this, 1, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ContextType.prototype.hasId = function() {
    return jspb.Message.getField(this, 1) != null;
  };
  
  
  /**
   * optional string name = 2;
   * @return {string}
   */
  proto.ml_metadata.ContextType.prototype.getName = function() {
    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
  };
  
  
  /**
   * @param {string} value
   * @return {!proto.ml_metadata.ContextType} returns this
   */
  proto.ml_metadata.ContextType.prototype.setName = function(value) {
    return jspb.Message.setField(this, 2, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.ContextType} returns this
   */
  proto.ml_metadata.ContextType.prototype.clearName = function() {
    return jspb.Message.setField(this, 2, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ContextType.prototype.hasName = function() {
    return jspb.Message.getField(this, 2) != null;
  };
  
  
  /**
   * map<string, PropertyType> properties = 3;
   * @param {boolean=} opt_noLazyCreate Do not create the map if
   * empty, instead returning `undefined`
   * @return {!jspb.Map<string,!proto.ml_metadata.PropertyType>}
   */
  proto.ml_metadata.ContextType.prototype.getPropertiesMap = function(opt_noLazyCreate) {
    return /** @type {!jspb.Map<string,!proto.ml_metadata.PropertyType>} */ (
        jspb.Message.getMapField(this, 3, opt_noLazyCreate,
        null));
  };
  
  
  /**
   * Clears values from the map. The map will be non-null.
   * @return {!proto.ml_metadata.ContextType} returns this
   */
  proto.ml_metadata.ContextType.prototype.clearPropertiesMap = function() {
    this.getPropertiesMap().clear();
    return this;};
  
  
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.Context.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.Context.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.Context} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.Context.toObject = function(includeInstance, msg) {
    var f, obj = {
      id: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f,
      typeId: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f,
      name: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f,
      propertiesMap: (f = msg.getPropertiesMap()) ? f.toObject(includeInstance, proto.ml_metadata.Value.toObject) : [],
      customPropertiesMap: (f = msg.getCustomPropertiesMap()) ? f.toObject(includeInstance, proto.ml_metadata.Value.toObject) : []
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.Context}
   */
  proto.ml_metadata.Context.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.Context;
    return proto.ml_metadata.Context.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.Context} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.Context}
   */
  proto.ml_metadata.Context.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = /** @type {number} */ (reader.readInt64());
        msg.setId(value);
        break;
      case 2:
        var value = /** @type {number} */ (reader.readInt64());
        msg.setTypeId(value);
        break;
      case 3:
        var value = /** @type {string} */ (reader.readString());
        msg.setName(value);
        break;
      case 4:
        var value = msg.getPropertiesMap();
        reader.readMessage(value, function(message, reader) {
          jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_metadata.Value.deserializeBinaryFromReader, "", new proto.ml_metadata.Value());
           });
        break;
      case 5:
        var value = msg.getCustomPropertiesMap();
        reader.readMessage(value, function(message, reader) {
          jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_metadata.Value.deserializeBinaryFromReader, "", new proto.ml_metadata.Value());
           });
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.Context.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.Context.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.Context} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.Context.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = /** @type {number} */ (jspb.Message.getField(message, 1));
    if (f != null) {
      writer.writeInt64(
        1,
        f
      );
    }
    f = /** @type {number} */ (jspb.Message.getField(message, 2));
    if (f != null) {
      writer.writeInt64(
        2,
        f
      );
    }
    f = /** @type {string} */ (jspb.Message.getField(message, 3));
    if (f != null) {
      writer.writeString(
        3,
        f
      );
    }
    f = message.getPropertiesMap(true);
    if (f && f.getLength() > 0) {
      f.serializeBinary(4, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_metadata.Value.serializeBinaryToWriter);
    }
    f = message.getCustomPropertiesMap(true);
    if (f && f.getLength() > 0) {
      f.serializeBinary(5, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_metadata.Value.serializeBinaryToWriter);
    }
  };
  
  
  /**
   * optional int64 id = 1;
   * @return {number}
   */
  proto.ml_metadata.Context.prototype.getId = function() {
    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.Context} returns this
   */
  proto.ml_metadata.Context.prototype.setId = function(value) {
    return jspb.Message.setField(this, 1, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Context} returns this
   */
  proto.ml_metadata.Context.prototype.clearId = function() {
    return jspb.Message.setField(this, 1, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Context.prototype.hasId = function() {
    return jspb.Message.getField(this, 1) != null;
  };
  
  
  /**
   * optional int64 type_id = 2;
   * @return {number}
   */
  proto.ml_metadata.Context.prototype.getTypeId = function() {
    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.Context} returns this
   */
  proto.ml_metadata.Context.prototype.setTypeId = function(value) {
    return jspb.Message.setField(this, 2, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Context} returns this
   */
  proto.ml_metadata.Context.prototype.clearTypeId = function() {
    return jspb.Message.setField(this, 2, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Context.prototype.hasTypeId = function() {
    return jspb.Message.getField(this, 2) != null;
  };
  
  
  /**
   * optional string name = 3;
   * @return {string}
   */
  proto.ml_metadata.Context.prototype.getName = function() {
    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
  };
  
  
  /**
   * @param {string} value
   * @return {!proto.ml_metadata.Context} returns this
   */
  proto.ml_metadata.Context.prototype.setName = function(value) {
    return jspb.Message.setField(this, 3, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Context} returns this
   */
  proto.ml_metadata.Context.prototype.clearName = function() {
    return jspb.Message.setField(this, 3, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Context.prototype.hasName = function() {
    return jspb.Message.getField(this, 3) != null;
  };
  
  
  /**
   * map<string, Value> properties = 4;
   * @param {boolean=} opt_noLazyCreate Do not create the map if
   * empty, instead returning `undefined`
   * @return {!jspb.Map<string,!proto.ml_metadata.Value>}
   */
  proto.ml_metadata.Context.prototype.getPropertiesMap = function(opt_noLazyCreate) {
    return /** @type {!jspb.Map<string,!proto.ml_metadata.Value>} */ (
        jspb.Message.getMapField(this, 4, opt_noLazyCreate,
        proto.ml_metadata.Value));
  };
  
  
  /**
   * Clears values from the map. The map will be non-null.
   * @return {!proto.ml_metadata.Context} returns this
   */
  proto.ml_metadata.Context.prototype.clearPropertiesMap = function() {
    this.getPropertiesMap().clear();
    return this;};
  
  
  /**
   * map<string, Value> custom_properties = 5;
   * @param {boolean=} opt_noLazyCreate Do not create the map if
   * empty, instead returning `undefined`
   * @return {!jspb.Map<string,!proto.ml_metadata.Value>}
   */
  proto.ml_metadata.Context.prototype.getCustomPropertiesMap = function(opt_noLazyCreate) {
    return /** @type {!jspb.Map<string,!proto.ml_metadata.Value>} */ (
        jspb.Message.getMapField(this, 5, opt_noLazyCreate,
        proto.ml_metadata.Value));
  };
  
  
  /**
   * Clears values from the map. The map will be non-null.
   * @return {!proto.ml_metadata.Context} returns this
   */
  proto.ml_metadata.Context.prototype.clearCustomPropertiesMap = function() {
    this.getCustomPropertiesMap().clear();
    return this;};
  
  
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.Attribution.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.Attribution.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.Attribution} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.Attribution.toObject = function(includeInstance, msg) {
    var f, obj = {
      artifactId: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f,
      contextId: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.Attribution}
   */
  proto.ml_metadata.Attribution.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.Attribution;
    return proto.ml_metadata.Attribution.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.Attribution} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.Attribution}
   */
  proto.ml_metadata.Attribution.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = /** @type {number} */ (reader.readInt64());
        msg.setArtifactId(value);
        break;
      case 2:
        var value = /** @type {number} */ (reader.readInt64());
        msg.setContextId(value);
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.Attribution.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.Attribution.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.Attribution} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.Attribution.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = /** @type {number} */ (jspb.Message.getField(message, 1));
    if (f != null) {
      writer.writeInt64(
        1,
        f
      );
    }
    f = /** @type {number} */ (jspb.Message.getField(message, 2));
    if (f != null) {
      writer.writeInt64(
        2,
        f
      );
    }
  };
  
  
  /**
   * optional int64 artifact_id = 1;
   * @return {number}
   */
  proto.ml_metadata.Attribution.prototype.getArtifactId = function() {
    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.Attribution} returns this
   */
  proto.ml_metadata.Attribution.prototype.setArtifactId = function(value) {
    return jspb.Message.setField(this, 1, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Attribution} returns this
   */
  proto.ml_metadata.Attribution.prototype.clearArtifactId = function() {
    return jspb.Message.setField(this, 1, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Attribution.prototype.hasArtifactId = function() {
    return jspb.Message.getField(this, 1) != null;
  };
  
  
  /**
   * optional int64 context_id = 2;
   * @return {number}
   */
  proto.ml_metadata.Attribution.prototype.getContextId = function() {
    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.Attribution} returns this
   */
  proto.ml_metadata.Attribution.prototype.setContextId = function(value) {
    return jspb.Message.setField(this, 2, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Attribution} returns this
   */
  proto.ml_metadata.Attribution.prototype.clearContextId = function() {
    return jspb.Message.setField(this, 2, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Attribution.prototype.hasContextId = function() {
    return jspb.Message.getField(this, 2) != null;
  };
  
  
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.Association.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.Association.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.Association} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.Association.toObject = function(includeInstance, msg) {
    var f, obj = {
      executionId: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f,
      contextId: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.Association}
   */
  proto.ml_metadata.Association.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.Association;
    return proto.ml_metadata.Association.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.Association} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.Association}
   */
  proto.ml_metadata.Association.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = /** @type {number} */ (reader.readInt64());
        msg.setExecutionId(value);
        break;
      case 2:
        var value = /** @type {number} */ (reader.readInt64());
        msg.setContextId(value);
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.Association.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.Association.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.Association} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.Association.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = /** @type {number} */ (jspb.Message.getField(message, 1));
    if (f != null) {
      writer.writeInt64(
        1,
        f
      );
    }
    f = /** @type {number} */ (jspb.Message.getField(message, 2));
    if (f != null) {
      writer.writeInt64(
        2,
        f
      );
    }
  };
  
  
  /**
   * optional int64 execution_id = 1;
   * @return {number}
   */
  proto.ml_metadata.Association.prototype.getExecutionId = function() {
    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.Association} returns this
   */
  proto.ml_metadata.Association.prototype.setExecutionId = function(value) {
    return jspb.Message.setField(this, 1, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Association} returns this
   */
  proto.ml_metadata.Association.prototype.clearExecutionId = function() {
    return jspb.Message.setField(this, 1, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Association.prototype.hasExecutionId = function() {
    return jspb.Message.getField(this, 1) != null;
  };
  
  
  /**
   * optional int64 context_id = 2;
   * @return {number}
   */
  proto.ml_metadata.Association.prototype.getContextId = function() {
    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.Association} returns this
   */
  proto.ml_metadata.Association.prototype.setContextId = function(value) {
    return jspb.Message.setField(this, 2, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.Association} returns this
   */
  proto.ml_metadata.Association.prototype.clearContextId = function() {
    return jspb.Message.setField(this, 2, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.Association.prototype.hasContextId = function() {
    return jspb.Message.getField(this, 2) != null;
  };
  
  
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.ParentContext.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.ParentContext.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.ParentContext} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.ParentContext.toObject = function(includeInstance, msg) {
    var f, obj = {
      childId: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f,
      parentId: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.ParentContext}
   */
  proto.ml_metadata.ParentContext.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.ParentContext;
    return proto.ml_metadata.ParentContext.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.ParentContext} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.ParentContext}
   */
  proto.ml_metadata.ParentContext.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = /** @type {number} */ (reader.readInt64());
        msg.setChildId(value);
        break;
      case 2:
        var value = /** @type {number} */ (reader.readInt64());
        msg.setParentId(value);
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.ParentContext.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.ParentContext.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.ParentContext} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.ParentContext.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = /** @type {number} */ (jspb.Message.getField(message, 1));
    if (f != null) {
      writer.writeInt64(
        1,
        f
      );
    }
    f = /** @type {number} */ (jspb.Message.getField(message, 2));
    if (f != null) {
      writer.writeInt64(
        2,
        f
      );
    }
  };
  
  
  /**
   * optional int64 child_id = 1;
   * @return {number}
   */
  proto.ml_metadata.ParentContext.prototype.getChildId = function() {
    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.ParentContext} returns this
   */
  proto.ml_metadata.ParentContext.prototype.setChildId = function(value) {
    return jspb.Message.setField(this, 1, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.ParentContext} returns this
   */
  proto.ml_metadata.ParentContext.prototype.clearChildId = function() {
    return jspb.Message.setField(this, 1, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ParentContext.prototype.hasChildId = function() {
    return jspb.Message.getField(this, 1) != null;
  };
  
  
  /**
   * optional int64 parent_id = 2;
   * @return {number}
   */
  proto.ml_metadata.ParentContext.prototype.getParentId = function() {
    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.ParentContext} returns this
   */
  proto.ml_metadata.ParentContext.prototype.setParentId = function(value) {
    return jspb.Message.setField(this, 2, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.ParentContext} returns this
   */
  proto.ml_metadata.ParentContext.prototype.clearParentId = function() {
    return jspb.Message.setField(this, 2, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ParentContext.prototype.hasParentId = function() {
    return jspb.Message.getField(this, 2) != null;
  };
  
  
  
  /**
   * Oneof group definitions for this message. Each group defines the field
   * numbers belonging to that group. When of these fields' value is set, all
   * other fields in the group are cleared. During deserialization, if multiple
   * fields are encountered for a group, only the last value seen will be kept.
   * @private {!Array<!Array<number>>}
   * @const
   */
  proto.ml_metadata.ArtifactStructType.oneofGroups_ = [[1,2,3,4,5,6,7,8]];
  
  /**
   * @enum {number}
   */
  proto.ml_metadata.ArtifactStructType.KindCase = {
    KIND_NOT_SET: 0,
    SIMPLE: 1,
    UNION_TYPE: 2,
    INTERSECTION: 3,
    LIST: 4,
    NONE: 5,
    ANY: 6,
    TUPLE: 7,
    DICT: 8
  };
  
  /**
   * @return {proto.ml_metadata.ArtifactStructType.KindCase}
   */
  proto.ml_metadata.ArtifactStructType.prototype.getKindCase = function() {
    return /** @type {proto.ml_metadata.ArtifactStructType.KindCase} */(jspb.Message.computeOneofCase(this, proto.ml_metadata.ArtifactStructType.oneofGroups_[0]));
  };
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.ArtifactStructType.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.ArtifactStructType.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.ArtifactStructType} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.ArtifactStructType.toObject = function(includeInstance, msg) {
    var f, obj = {
      simple: (f = msg.getSimple()) && proto.ml_metadata.ArtifactType.toObject(includeInstance, f),
      unionType: (f = msg.getUnionType()) && proto.ml_metadata.UnionArtifactStructType.toObject(includeInstance, f),
      intersection: (f = msg.getIntersection()) && proto.ml_metadata.IntersectionArtifactStructType.toObject(includeInstance, f),
      list: (f = msg.getList()) && proto.ml_metadata.ListArtifactStructType.toObject(includeInstance, f),
      none: (f = msg.getNone()) && proto.ml_metadata.NoneArtifactStructType.toObject(includeInstance, f),
      any: (f = msg.getAny()) && proto.ml_metadata.AnyArtifactStructType.toObject(includeInstance, f),
      tuple: (f = msg.getTuple()) && proto.ml_metadata.TupleArtifactStructType.toObject(includeInstance, f),
      dict: (f = msg.getDict()) && proto.ml_metadata.DictArtifactStructType.toObject(includeInstance, f)
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.ArtifactStructType}
   */
  proto.ml_metadata.ArtifactStructType.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.ArtifactStructType;
    return proto.ml_metadata.ArtifactStructType.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.ArtifactStructType} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.ArtifactStructType}
   */
  proto.ml_metadata.ArtifactStructType.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = new proto.ml_metadata.ArtifactType;
        reader.readMessage(value,proto.ml_metadata.ArtifactType.deserializeBinaryFromReader);
        msg.setSimple(value);
        break;
      case 2:
        var value = new proto.ml_metadata.UnionArtifactStructType;
        reader.readMessage(value,proto.ml_metadata.UnionArtifactStructType.deserializeBinaryFromReader);
        msg.setUnionType(value);
        break;
      case 3:
        var value = new proto.ml_metadata.IntersectionArtifactStructType;
        reader.readMessage(value,proto.ml_metadata.IntersectionArtifactStructType.deserializeBinaryFromReader);
        msg.setIntersection(value);
        break;
      case 4:
        var value = new proto.ml_metadata.ListArtifactStructType;
        reader.readMessage(value,proto.ml_metadata.ListArtifactStructType.deserializeBinaryFromReader);
        msg.setList(value);
        break;
      case 5:
        var value = new proto.ml_metadata.NoneArtifactStructType;
        reader.readMessage(value,proto.ml_metadata.NoneArtifactStructType.deserializeBinaryFromReader);
        msg.setNone(value);
        break;
      case 6:
        var value = new proto.ml_metadata.AnyArtifactStructType;
        reader.readMessage(value,proto.ml_metadata.AnyArtifactStructType.deserializeBinaryFromReader);
        msg.setAny(value);
        break;
      case 7:
        var value = new proto.ml_metadata.TupleArtifactStructType;
        reader.readMessage(value,proto.ml_metadata.TupleArtifactStructType.deserializeBinaryFromReader);
        msg.setTuple(value);
        break;
      case 8:
        var value = new proto.ml_metadata.DictArtifactStructType;
        reader.readMessage(value,proto.ml_metadata.DictArtifactStructType.deserializeBinaryFromReader);
        msg.setDict(value);
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.ArtifactStructType.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.ArtifactStructType.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.ArtifactStructType} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.ArtifactStructType.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = message.getSimple();
    if (f != null) {
      writer.writeMessage(
        1,
        f,
        proto.ml_metadata.ArtifactType.serializeBinaryToWriter
      );
    }
    f = message.getUnionType();
    if (f != null) {
      writer.writeMessage(
        2,
        f,
        proto.ml_metadata.UnionArtifactStructType.serializeBinaryToWriter
      );
    }
    f = message.getIntersection();
    if (f != null) {
      writer.writeMessage(
        3,
        f,
        proto.ml_metadata.IntersectionArtifactStructType.serializeBinaryToWriter
      );
    }
    f = message.getList();
    if (f != null) {
      writer.writeMessage(
        4,
        f,
        proto.ml_metadata.ListArtifactStructType.serializeBinaryToWriter
      );
    }
    f = message.getNone();
    if (f != null) {
      writer.writeMessage(
        5,
        f,
        proto.ml_metadata.NoneArtifactStructType.serializeBinaryToWriter
      );
    }
    f = message.getAny();
    if (f != null) {
      writer.writeMessage(
        6,
        f,
        proto.ml_metadata.AnyArtifactStructType.serializeBinaryToWriter
      );
    }
    f = message.getTuple();
    if (f != null) {
      writer.writeMessage(
        7,
        f,
        proto.ml_metadata.TupleArtifactStructType.serializeBinaryToWriter
      );
    }
    f = message.getDict();
    if (f != null) {
      writer.writeMessage(
        8,
        f,
        proto.ml_metadata.DictArtifactStructType.serializeBinaryToWriter
      );
    }
  };
  
  
  /**
   * optional ArtifactType simple = 1;
   * @return {?proto.ml_metadata.ArtifactType}
   */
  proto.ml_metadata.ArtifactStructType.prototype.getSimple = function() {
    return /** @type{?proto.ml_metadata.ArtifactType} */ (
      jspb.Message.getWrapperField(this, proto.ml_metadata.ArtifactType, 1));
  };
  
  
  /**
   * @param {?proto.ml_metadata.ArtifactType|undefined} value
   * @return {!proto.ml_metadata.ArtifactStructType} returns this
  */
  proto.ml_metadata.ArtifactStructType.prototype.setSimple = function(value) {
    return jspb.Message.setOneofWrapperField(this, 1, proto.ml_metadata.ArtifactStructType.oneofGroups_[0], value);
  };
  
  
  /**
   * Clears the message field making it undefined.
   * @return {!proto.ml_metadata.ArtifactStructType} returns this
   */
  proto.ml_metadata.ArtifactStructType.prototype.clearSimple = function() {
    return this.setSimple(undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ArtifactStructType.prototype.hasSimple = function() {
    return jspb.Message.getField(this, 1) != null;
  };
  
  
  /**
   * optional UnionArtifactStructType union_type = 2;
   * @return {?proto.ml_metadata.UnionArtifactStructType}
   */
  proto.ml_metadata.ArtifactStructType.prototype.getUnionType = function() {
    return /** @type{?proto.ml_metadata.UnionArtifactStructType} */ (
      jspb.Message.getWrapperField(this, proto.ml_metadata.UnionArtifactStructType, 2));
  };
  
  
  /**
   * @param {?proto.ml_metadata.UnionArtifactStructType|undefined} value
   * @return {!proto.ml_metadata.ArtifactStructType} returns this
  */
  proto.ml_metadata.ArtifactStructType.prototype.setUnionType = function(value) {
    return jspb.Message.setOneofWrapperField(this, 2, proto.ml_metadata.ArtifactStructType.oneofGroups_[0], value);
  };
  
  
  /**
   * Clears the message field making it undefined.
   * @return {!proto.ml_metadata.ArtifactStructType} returns this
   */
  proto.ml_metadata.ArtifactStructType.prototype.clearUnionType = function() {
    return this.setUnionType(undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ArtifactStructType.prototype.hasUnionType = function() {
    return jspb.Message.getField(this, 2) != null;
  };
  
  
  /**
   * optional IntersectionArtifactStructType intersection = 3;
   * @return {?proto.ml_metadata.IntersectionArtifactStructType}
   */
  proto.ml_metadata.ArtifactStructType.prototype.getIntersection = function() {
    return /** @type{?proto.ml_metadata.IntersectionArtifactStructType} */ (
      jspb.Message.getWrapperField(this, proto.ml_metadata.IntersectionArtifactStructType, 3));
  };
  
  
  /**
   * @param {?proto.ml_metadata.IntersectionArtifactStructType|undefined} value
   * @return {!proto.ml_metadata.ArtifactStructType} returns this
  */
  proto.ml_metadata.ArtifactStructType.prototype.setIntersection = function(value) {
    return jspb.Message.setOneofWrapperField(this, 3, proto.ml_metadata.ArtifactStructType.oneofGroups_[0], value);
  };
  
  
  /**
   * Clears the message field making it undefined.
   * @return {!proto.ml_metadata.ArtifactStructType} returns this
   */
  proto.ml_metadata.ArtifactStructType.prototype.clearIntersection = function() {
    return this.setIntersection(undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ArtifactStructType.prototype.hasIntersection = function() {
    return jspb.Message.getField(this, 3) != null;
  };
  
  
  /**
   * optional ListArtifactStructType list = 4;
   * @return {?proto.ml_metadata.ListArtifactStructType}
   */
  proto.ml_metadata.ArtifactStructType.prototype.getList = function() {
    return /** @type{?proto.ml_metadata.ListArtifactStructType} */ (
      jspb.Message.getWrapperField(this, proto.ml_metadata.ListArtifactStructType, 4));
  };
  
  
  /**
   * @param {?proto.ml_metadata.ListArtifactStructType|undefined} value
   * @return {!proto.ml_metadata.ArtifactStructType} returns this
  */
  proto.ml_metadata.ArtifactStructType.prototype.setList = function(value) {
    return jspb.Message.setOneofWrapperField(this, 4, proto.ml_metadata.ArtifactStructType.oneofGroups_[0], value);
  };
  
  
  /**
   * Clears the message field making it undefined.
   * @return {!proto.ml_metadata.ArtifactStructType} returns this
   */
  proto.ml_metadata.ArtifactStructType.prototype.clearList = function() {
    return this.setList(undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ArtifactStructType.prototype.hasList = function() {
    return jspb.Message.getField(this, 4) != null;
  };
  
  
  /**
   * optional NoneArtifactStructType none = 5;
   * @return {?proto.ml_metadata.NoneArtifactStructType}
   */
  proto.ml_metadata.ArtifactStructType.prototype.getNone = function() {
    return /** @type{?proto.ml_metadata.NoneArtifactStructType} */ (
      jspb.Message.getWrapperField(this, proto.ml_metadata.NoneArtifactStructType, 5));
  };
  
  
  /**
   * @param {?proto.ml_metadata.NoneArtifactStructType|undefined} value
   * @return {!proto.ml_metadata.ArtifactStructType} returns this
  */
  proto.ml_metadata.ArtifactStructType.prototype.setNone = function(value) {
    return jspb.Message.setOneofWrapperField(this, 5, proto.ml_metadata.ArtifactStructType.oneofGroups_[0], value);
  };
  
  
  /**
   * Clears the message field making it undefined.
   * @return {!proto.ml_metadata.ArtifactStructType} returns this
   */
  proto.ml_metadata.ArtifactStructType.prototype.clearNone = function() {
    return this.setNone(undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ArtifactStructType.prototype.hasNone = function() {
    return jspb.Message.getField(this, 5) != null;
  };
  
  
  /**
   * optional AnyArtifactStructType any = 6;
   * @return {?proto.ml_metadata.AnyArtifactStructType}
   */
  proto.ml_metadata.ArtifactStructType.prototype.getAny = function() {
    return /** @type{?proto.ml_metadata.AnyArtifactStructType} */ (
      jspb.Message.getWrapperField(this, proto.ml_metadata.AnyArtifactStructType, 6));
  };
  
  
  /**
   * @param {?proto.ml_metadata.AnyArtifactStructType|undefined} value
   * @return {!proto.ml_metadata.ArtifactStructType} returns this
  */
  proto.ml_metadata.ArtifactStructType.prototype.setAny = function(value) {
    return jspb.Message.setOneofWrapperField(this, 6, proto.ml_metadata.ArtifactStructType.oneofGroups_[0], value);
  };
  
  
  /**
   * Clears the message field making it undefined.
   * @return {!proto.ml_metadata.ArtifactStructType} returns this
   */
  proto.ml_metadata.ArtifactStructType.prototype.clearAny = function() {
    return this.setAny(undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ArtifactStructType.prototype.hasAny = function() {
    return jspb.Message.getField(this, 6) != null;
  };
  
  
  /**
   * optional TupleArtifactStructType tuple = 7;
   * @return {?proto.ml_metadata.TupleArtifactStructType}
   */
  proto.ml_metadata.ArtifactStructType.prototype.getTuple = function() {
    return /** @type{?proto.ml_metadata.TupleArtifactStructType} */ (
      jspb.Message.getWrapperField(this, proto.ml_metadata.TupleArtifactStructType, 7));
  };
  
  
  /**
   * @param {?proto.ml_metadata.TupleArtifactStructType|undefined} value
   * @return {!proto.ml_metadata.ArtifactStructType} returns this
  */
  proto.ml_metadata.ArtifactStructType.prototype.setTuple = function(value) {
    return jspb.Message.setOneofWrapperField(this, 7, proto.ml_metadata.ArtifactStructType.oneofGroups_[0], value);
  };
  
  
  /**
   * Clears the message field making it undefined.
   * @return {!proto.ml_metadata.ArtifactStructType} returns this
   */
  proto.ml_metadata.ArtifactStructType.prototype.clearTuple = function() {
    return this.setTuple(undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ArtifactStructType.prototype.hasTuple = function() {
    return jspb.Message.getField(this, 7) != null;
  };
  
  
  /**
   * optional DictArtifactStructType dict = 8;
   * @return {?proto.ml_metadata.DictArtifactStructType}
   */
  proto.ml_metadata.ArtifactStructType.prototype.getDict = function() {
    return /** @type{?proto.ml_metadata.DictArtifactStructType} */ (
      jspb.Message.getWrapperField(this, proto.ml_metadata.DictArtifactStructType, 8));
  };
  
  
  /**
   * @param {?proto.ml_metadata.DictArtifactStructType|undefined} value
   * @return {!proto.ml_metadata.ArtifactStructType} returns this
  */
  proto.ml_metadata.ArtifactStructType.prototype.setDict = function(value) {
    return jspb.Message.setOneofWrapperField(this, 8, proto.ml_metadata.ArtifactStructType.oneofGroups_[0], value);
  };
  
  
  /**
   * Clears the message field making it undefined.
   * @return {!proto.ml_metadata.ArtifactStructType} returns this
   */
  proto.ml_metadata.ArtifactStructType.prototype.clearDict = function() {
    return this.setDict(undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ArtifactStructType.prototype.hasDict = function() {
    return jspb.Message.getField(this, 8) != null;
  };
  
  
  
  /**
   * List of repeated fields within this message type.
   * @private {!Array<number>}
   * @const
   */
  proto.ml_metadata.UnionArtifactStructType.repeatedFields_ = [1];
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.UnionArtifactStructType.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.UnionArtifactStructType.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.UnionArtifactStructType} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.UnionArtifactStructType.toObject = function(includeInstance, msg) {
    var f, obj = {
      candidatesList: jspb.Message.toObjectList(msg.getCandidatesList(),
      proto.ml_metadata.ArtifactStructType.toObject, includeInstance)
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.UnionArtifactStructType}
   */
  proto.ml_metadata.UnionArtifactStructType.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.UnionArtifactStructType;
    return proto.ml_metadata.UnionArtifactStructType.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.UnionArtifactStructType} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.UnionArtifactStructType}
   */
  proto.ml_metadata.UnionArtifactStructType.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = new proto.ml_metadata.ArtifactStructType;
        reader.readMessage(value,proto.ml_metadata.ArtifactStructType.deserializeBinaryFromReader);
        msg.addCandidates(value);
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.UnionArtifactStructType.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.UnionArtifactStructType.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.UnionArtifactStructType} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.UnionArtifactStructType.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = message.getCandidatesList();
    if (f.length > 0) {
      writer.writeRepeatedMessage(
        1,
        f,
        proto.ml_metadata.ArtifactStructType.serializeBinaryToWriter
      );
    }
  };
  
  
  /**
   * repeated ArtifactStructType candidates = 1;
   * @return {!Array<!proto.ml_metadata.ArtifactStructType>}
   */
  proto.ml_metadata.UnionArtifactStructType.prototype.getCandidatesList = function() {
    return /** @type{!Array<!proto.ml_metadata.ArtifactStructType>} */ (
      jspb.Message.getRepeatedWrapperField(this, proto.ml_metadata.ArtifactStructType, 1));
  };
  
  
  /**
   * @param {!Array<!proto.ml_metadata.ArtifactStructType>} value
   * @return {!proto.ml_metadata.UnionArtifactStructType} returns this
  */
  proto.ml_metadata.UnionArtifactStructType.prototype.setCandidatesList = function(value) {
    return jspb.Message.setRepeatedWrapperField(this, 1, value);
  };
  
  
  /**
   * @param {!proto.ml_metadata.ArtifactStructType=} opt_value
   * @param {number=} opt_index
   * @return {!proto.ml_metadata.ArtifactStructType}
   */
  proto.ml_metadata.UnionArtifactStructType.prototype.addCandidates = function(opt_value, opt_index) {
    return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.ArtifactStructType, opt_index);
  };
  
  
  /**
   * Clears the list making it empty but non-null.
   * @return {!proto.ml_metadata.UnionArtifactStructType} returns this
   */
  proto.ml_metadata.UnionArtifactStructType.prototype.clearCandidatesList = function() {
    return this.setCandidatesList([]);
  };
  
  
  
  /**
   * List of repeated fields within this message type.
   * @private {!Array<number>}
   * @const
   */
  proto.ml_metadata.IntersectionArtifactStructType.repeatedFields_ = [1];
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.IntersectionArtifactStructType.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.IntersectionArtifactStructType.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.IntersectionArtifactStructType} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.IntersectionArtifactStructType.toObject = function(includeInstance, msg) {
    var f, obj = {
      constraintsList: jspb.Message.toObjectList(msg.getConstraintsList(),
      proto.ml_metadata.ArtifactStructType.toObject, includeInstance)
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.IntersectionArtifactStructType}
   */
  proto.ml_metadata.IntersectionArtifactStructType.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.IntersectionArtifactStructType;
    return proto.ml_metadata.IntersectionArtifactStructType.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.IntersectionArtifactStructType} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.IntersectionArtifactStructType}
   */
  proto.ml_metadata.IntersectionArtifactStructType.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = new proto.ml_metadata.ArtifactStructType;
        reader.readMessage(value,proto.ml_metadata.ArtifactStructType.deserializeBinaryFromReader);
        msg.addConstraints(value);
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.IntersectionArtifactStructType.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.IntersectionArtifactStructType.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.IntersectionArtifactStructType} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.IntersectionArtifactStructType.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = message.getConstraintsList();
    if (f.length > 0) {
      writer.writeRepeatedMessage(
        1,
        f,
        proto.ml_metadata.ArtifactStructType.serializeBinaryToWriter
      );
    }
  };
  
  
  /**
   * repeated ArtifactStructType constraints = 1;
   * @return {!Array<!proto.ml_metadata.ArtifactStructType>}
   */
  proto.ml_metadata.IntersectionArtifactStructType.prototype.getConstraintsList = function() {
    return /** @type{!Array<!proto.ml_metadata.ArtifactStructType>} */ (
      jspb.Message.getRepeatedWrapperField(this, proto.ml_metadata.ArtifactStructType, 1));
  };
  
  
  /**
   * @param {!Array<!proto.ml_metadata.ArtifactStructType>} value
   * @return {!proto.ml_metadata.IntersectionArtifactStructType} returns this
  */
  proto.ml_metadata.IntersectionArtifactStructType.prototype.setConstraintsList = function(value) {
    return jspb.Message.setRepeatedWrapperField(this, 1, value);
  };
  
  
  /**
   * @param {!proto.ml_metadata.ArtifactStructType=} opt_value
   * @param {number=} opt_index
   * @return {!proto.ml_metadata.ArtifactStructType}
   */
  proto.ml_metadata.IntersectionArtifactStructType.prototype.addConstraints = function(opt_value, opt_index) {
    return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.ArtifactStructType, opt_index);
  };
  
  
  /**
   * Clears the list making it empty but non-null.
   * @return {!proto.ml_metadata.IntersectionArtifactStructType} returns this
   */
  proto.ml_metadata.IntersectionArtifactStructType.prototype.clearConstraintsList = function() {
    return this.setConstraintsList([]);
  };
  
  
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.ListArtifactStructType.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.ListArtifactStructType.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.ListArtifactStructType} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.ListArtifactStructType.toObject = function(includeInstance, msg) {
    var f, obj = {
      element: (f = msg.getElement()) && proto.ml_metadata.ArtifactStructType.toObject(includeInstance, f)
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.ListArtifactStructType}
   */
  proto.ml_metadata.ListArtifactStructType.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.ListArtifactStructType;
    return proto.ml_metadata.ListArtifactStructType.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.ListArtifactStructType} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.ListArtifactStructType}
   */
  proto.ml_metadata.ListArtifactStructType.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = new proto.ml_metadata.ArtifactStructType;
        reader.readMessage(value,proto.ml_metadata.ArtifactStructType.deserializeBinaryFromReader);
        msg.setElement(value);
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.ListArtifactStructType.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.ListArtifactStructType.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.ListArtifactStructType} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.ListArtifactStructType.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = message.getElement();
    if (f != null) {
      writer.writeMessage(
        1,
        f,
        proto.ml_metadata.ArtifactStructType.serializeBinaryToWriter
      );
    }
  };
  
  
  /**
   * optional ArtifactStructType element = 1;
   * @return {?proto.ml_metadata.ArtifactStructType}
   */
  proto.ml_metadata.ListArtifactStructType.prototype.getElement = function() {
    return /** @type{?proto.ml_metadata.ArtifactStructType} */ (
      jspb.Message.getWrapperField(this, proto.ml_metadata.ArtifactStructType, 1));
  };
  
  
  /**
   * @param {?proto.ml_metadata.ArtifactStructType|undefined} value
   * @return {!proto.ml_metadata.ListArtifactStructType} returns this
  */
  proto.ml_metadata.ListArtifactStructType.prototype.setElement = function(value) {
    return jspb.Message.setWrapperField(this, 1, value);
  };
  
  
  /**
   * Clears the message field making it undefined.
   * @return {!proto.ml_metadata.ListArtifactStructType} returns this
   */
  proto.ml_metadata.ListArtifactStructType.prototype.clearElement = function() {
    return this.setElement(undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ListArtifactStructType.prototype.hasElement = function() {
    return jspb.Message.getField(this, 1) != null;
  };
  
  
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.NoneArtifactStructType.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.NoneArtifactStructType.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.NoneArtifactStructType} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.NoneArtifactStructType.toObject = function(includeInstance, msg) {
    var f, obj = {
  
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.NoneArtifactStructType}
   */
  proto.ml_metadata.NoneArtifactStructType.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.NoneArtifactStructType;
    return proto.ml_metadata.NoneArtifactStructType.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.NoneArtifactStructType} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.NoneArtifactStructType}
   */
  proto.ml_metadata.NoneArtifactStructType.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.NoneArtifactStructType.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.NoneArtifactStructType.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.NoneArtifactStructType} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.NoneArtifactStructType.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
  };
  
  
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.AnyArtifactStructType.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.AnyArtifactStructType.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.AnyArtifactStructType} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.AnyArtifactStructType.toObject = function(includeInstance, msg) {
    var f, obj = {
  
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.AnyArtifactStructType}
   */
  proto.ml_metadata.AnyArtifactStructType.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.AnyArtifactStructType;
    return proto.ml_metadata.AnyArtifactStructType.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.AnyArtifactStructType} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.AnyArtifactStructType}
   */
  proto.ml_metadata.AnyArtifactStructType.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.AnyArtifactStructType.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.AnyArtifactStructType.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.AnyArtifactStructType} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.AnyArtifactStructType.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
  };
  
  
  
  /**
   * List of repeated fields within this message type.
   * @private {!Array<number>}
   * @const
   */
  proto.ml_metadata.TupleArtifactStructType.repeatedFields_ = [1];
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.TupleArtifactStructType.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.TupleArtifactStructType.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.TupleArtifactStructType} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.TupleArtifactStructType.toObject = function(includeInstance, msg) {
    var f, obj = {
      elementsList: jspb.Message.toObjectList(msg.getElementsList(),
      proto.ml_metadata.ArtifactStructType.toObject, includeInstance)
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.TupleArtifactStructType}
   */
  proto.ml_metadata.TupleArtifactStructType.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.TupleArtifactStructType;
    return proto.ml_metadata.TupleArtifactStructType.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.TupleArtifactStructType} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.TupleArtifactStructType}
   */
  proto.ml_metadata.TupleArtifactStructType.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = new proto.ml_metadata.ArtifactStructType;
        reader.readMessage(value,proto.ml_metadata.ArtifactStructType.deserializeBinaryFromReader);
        msg.addElements(value);
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.TupleArtifactStructType.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.TupleArtifactStructType.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.TupleArtifactStructType} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.TupleArtifactStructType.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = message.getElementsList();
    if (f.length > 0) {
      writer.writeRepeatedMessage(
        1,
        f,
        proto.ml_metadata.ArtifactStructType.serializeBinaryToWriter
      );
    }
  };
  
  
  /**
   * repeated ArtifactStructType elements = 1;
   * @return {!Array<!proto.ml_metadata.ArtifactStructType>}
   */
  proto.ml_metadata.TupleArtifactStructType.prototype.getElementsList = function() {
    return /** @type{!Array<!proto.ml_metadata.ArtifactStructType>} */ (
      jspb.Message.getRepeatedWrapperField(this, proto.ml_metadata.ArtifactStructType, 1));
  };
  
  
  /**
   * @param {!Array<!proto.ml_metadata.ArtifactStructType>} value
   * @return {!proto.ml_metadata.TupleArtifactStructType} returns this
  */
  proto.ml_metadata.TupleArtifactStructType.prototype.setElementsList = function(value) {
    return jspb.Message.setRepeatedWrapperField(this, 1, value);
  };
  
  
  /**
   * @param {!proto.ml_metadata.ArtifactStructType=} opt_value
   * @param {number=} opt_index
   * @return {!proto.ml_metadata.ArtifactStructType}
   */
  proto.ml_metadata.TupleArtifactStructType.prototype.addElements = function(opt_value, opt_index) {
    return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.ml_metadata.ArtifactStructType, opt_index);
  };
  
  
  /**
   * Clears the list making it empty but non-null.
   * @return {!proto.ml_metadata.TupleArtifactStructType} returns this
   */
  proto.ml_metadata.TupleArtifactStructType.prototype.clearElementsList = function() {
    return this.setElementsList([]);
  };
  
  
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.DictArtifactStructType.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.DictArtifactStructType.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.DictArtifactStructType} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.DictArtifactStructType.toObject = function(includeInstance, msg) {
    var f, obj = {
      propertiesMap: (f = msg.getPropertiesMap()) ? f.toObject(includeInstance, proto.ml_metadata.ArtifactStructType.toObject) : [],
      noneTypeNotRequired: (f = jspb.Message.getBooleanField(msg, 2)) == null ? undefined : f,
      extraPropertiesType: (f = msg.getExtraPropertiesType()) && proto.ml_metadata.ArtifactStructType.toObject(includeInstance, f)
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.DictArtifactStructType}
   */
  proto.ml_metadata.DictArtifactStructType.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.DictArtifactStructType;
    return proto.ml_metadata.DictArtifactStructType.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.DictArtifactStructType} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.DictArtifactStructType}
   */
  proto.ml_metadata.DictArtifactStructType.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = msg.getPropertiesMap();
        reader.readMessage(value, function(message, reader) {
          jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.ml_metadata.ArtifactStructType.deserializeBinaryFromReader, "", new proto.ml_metadata.ArtifactStructType());
           });
        break;
      case 2:
        var value = /** @type {boolean} */ (reader.readBool());
        msg.setNoneTypeNotRequired(value);
        break;
      case 3:
        var value = new proto.ml_metadata.ArtifactStructType;
        reader.readMessage(value,proto.ml_metadata.ArtifactStructType.deserializeBinaryFromReader);
        msg.setExtraPropertiesType(value);
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.DictArtifactStructType.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.DictArtifactStructType.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.DictArtifactStructType} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.DictArtifactStructType.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = message.getPropertiesMap(true);
    if (f && f.getLength() > 0) {
      f.serializeBinary(1, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.ml_metadata.ArtifactStructType.serializeBinaryToWriter);
    }
    f = /** @type {boolean} */ (jspb.Message.getField(message, 2));
    if (f != null) {
      writer.writeBool(
        2,
        f
      );
    }
    f = message.getExtraPropertiesType();
    if (f != null) {
      writer.writeMessage(
        3,
        f,
        proto.ml_metadata.ArtifactStructType.serializeBinaryToWriter
      );
    }
  };
  
  
  /**
   * map<string, ArtifactStructType> properties = 1;
   * @param {boolean=} opt_noLazyCreate Do not create the map if
   * empty, instead returning `undefined`
   * @return {!jspb.Map<string,!proto.ml_metadata.ArtifactStructType>}
   */
  proto.ml_metadata.DictArtifactStructType.prototype.getPropertiesMap = function(opt_noLazyCreate) {
    return /** @type {!jspb.Map<string,!proto.ml_metadata.ArtifactStructType>} */ (
        jspb.Message.getMapField(this, 1, opt_noLazyCreate,
        proto.ml_metadata.ArtifactStructType));
  };
  
  
  /**
   * Clears values from the map. The map will be non-null.
   * @return {!proto.ml_metadata.DictArtifactStructType} returns this
   */
  proto.ml_metadata.DictArtifactStructType.prototype.clearPropertiesMap = function() {
    this.getPropertiesMap().clear();
    return this;};
  
  
  /**
   * optional bool none_type_not_required = 2;
   * @return {boolean}
   */
  proto.ml_metadata.DictArtifactStructType.prototype.getNoneTypeNotRequired = function() {
    return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 2, false));
  };
  
  
  /**
   * @param {boolean} value
   * @return {!proto.ml_metadata.DictArtifactStructType} returns this
   */
  proto.ml_metadata.DictArtifactStructType.prototype.setNoneTypeNotRequired = function(value) {
    return jspb.Message.setField(this, 2, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.DictArtifactStructType} returns this
   */
  proto.ml_metadata.DictArtifactStructType.prototype.clearNoneTypeNotRequired = function() {
    return jspb.Message.setField(this, 2, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.DictArtifactStructType.prototype.hasNoneTypeNotRequired = function() {
    return jspb.Message.getField(this, 2) != null;
  };
  
  
  /**
   * optional ArtifactStructType extra_properties_type = 3;
   * @return {?proto.ml_metadata.ArtifactStructType}
   */
  proto.ml_metadata.DictArtifactStructType.prototype.getExtraPropertiesType = function() {
    return /** @type{?proto.ml_metadata.ArtifactStructType} */ (
      jspb.Message.getWrapperField(this, proto.ml_metadata.ArtifactStructType, 3));
  };
  
  
  /**
   * @param {?proto.ml_metadata.ArtifactStructType|undefined} value
   * @return {!proto.ml_metadata.DictArtifactStructType} returns this
  */
  proto.ml_metadata.DictArtifactStructType.prototype.setExtraPropertiesType = function(value) {
    return jspb.Message.setWrapperField(this, 3, value);
  };
  
  
  /**
   * Clears the message field making it undefined.
   * @return {!proto.ml_metadata.DictArtifactStructType} returns this
   */
  proto.ml_metadata.DictArtifactStructType.prototype.clearExtraPropertiesType = function() {
    return this.setExtraPropertiesType(undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.DictArtifactStructType.prototype.hasExtraPropertiesType = function() {
    return jspb.Message.getField(this, 3) != null;
  };
  
  
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.FakeDatabaseConfig.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.FakeDatabaseConfig.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.FakeDatabaseConfig} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.FakeDatabaseConfig.toObject = function(includeInstance, msg) {
    var f, obj = {
  
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.FakeDatabaseConfig}
   */
  proto.ml_metadata.FakeDatabaseConfig.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.FakeDatabaseConfig;
    return proto.ml_metadata.FakeDatabaseConfig.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.FakeDatabaseConfig} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.FakeDatabaseConfig}
   */
  proto.ml_metadata.FakeDatabaseConfig.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.FakeDatabaseConfig.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.FakeDatabaseConfig.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.FakeDatabaseConfig} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.FakeDatabaseConfig.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
  };
  
  
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.MySQLDatabaseConfig.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.MySQLDatabaseConfig} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.MySQLDatabaseConfig.toObject = function(includeInstance, msg) {
    var f, obj = {
      host: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f,
      port: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f,
      database: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f,
      user: (f = jspb.Message.getField(msg, 4)) == null ? undefined : f,
      password: (f = jspb.Message.getField(msg, 5)) == null ? undefined : f
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.MySQLDatabaseConfig}
   */
  proto.ml_metadata.MySQLDatabaseConfig.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.MySQLDatabaseConfig;
    return proto.ml_metadata.MySQLDatabaseConfig.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.MySQLDatabaseConfig} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.MySQLDatabaseConfig}
   */
  proto.ml_metadata.MySQLDatabaseConfig.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = /** @type {string} */ (reader.readString());
        msg.setHost(value);
        break;
      case 2:
        var value = /** @type {number} */ (reader.readUint32());
        msg.setPort(value);
        break;
      case 3:
        var value = /** @type {string} */ (reader.readString());
        msg.setDatabase(value);
        break;
      case 4:
        var value = /** @type {string} */ (reader.readString());
        msg.setUser(value);
        break;
      case 5:
        var value = /** @type {string} */ (reader.readString());
        msg.setPassword(value);
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.MySQLDatabaseConfig.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.MySQLDatabaseConfig} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.MySQLDatabaseConfig.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = /** @type {string} */ (jspb.Message.getField(message, 1));
    if (f != null) {
      writer.writeString(
        1,
        f
      );
    }
    f = /** @type {number} */ (jspb.Message.getField(message, 2));
    if (f != null) {
      writer.writeUint32(
        2,
        f
      );
    }
    f = /** @type {string} */ (jspb.Message.getField(message, 3));
    if (f != null) {
      writer.writeString(
        3,
        f
      );
    }
    f = /** @type {string} */ (jspb.Message.getField(message, 4));
    if (f != null) {
      writer.writeString(
        4,
        f
      );
    }
    f = /** @type {string} */ (jspb.Message.getField(message, 5));
    if (f != null) {
      writer.writeString(
        5,
        f
      );
    }
  };
  
  
  /**
   * optional string host = 1;
   * @return {string}
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.getHost = function() {
    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
  };
  
  
  /**
   * @param {string} value
   * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.setHost = function(value) {
    return jspb.Message.setField(this, 1, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.clearHost = function() {
    return jspb.Message.setField(this, 1, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.hasHost = function() {
    return jspb.Message.getField(this, 1) != null;
  };
  
  
  /**
   * optional uint32 port = 2;
   * @return {number}
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.getPort = function() {
    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
  };
  
  
  /**
   * @param {number} value
   * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.setPort = function(value) {
    return jspb.Message.setField(this, 2, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.clearPort = function() {
    return jspb.Message.setField(this, 2, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.hasPort = function() {
    return jspb.Message.getField(this, 2) != null;
  };
  
  
  /**
   * optional string database = 3;
   * @return {string}
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.getDatabase = function() {
    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
  };
  
  
  /**
   * @param {string} value
   * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.setDatabase = function(value) {
    return jspb.Message.setField(this, 3, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.clearDatabase = function() {
    return jspb.Message.setField(this, 3, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.hasDatabase = function() {
    return jspb.Message.getField(this, 3) != null;
  };
  
  
  /**
   * optional string user = 4;
   * @return {string}
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.getUser = function() {
    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, ""));
  };
  
  
  /**
   * @param {string} value
   * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.setUser = function(value) {
    return jspb.Message.setField(this, 4, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.clearUser = function() {
    return jspb.Message.setField(this, 4, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.hasUser = function() {
    return jspb.Message.getField(this, 4) != null;
  };
  
  
  /**
   * optional string password = 5;
   * @return {string}
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.getPassword = function() {
    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
  };
  
  
  /**
   * @param {string} value
   * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.setPassword = function(value) {
    return jspb.Message.setField(this, 5, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.MySQLDatabaseConfig} returns this
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.clearPassword = function() {
    return jspb.Message.setField(this, 5, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.MySQLDatabaseConfig.prototype.hasPassword = function() {
    return jspb.Message.getField(this, 5) != null;
  };
  
  
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.SqliteMetadataSourceConfig.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.SqliteMetadataSourceConfig.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.SqliteMetadataSourceConfig} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.SqliteMetadataSourceConfig.toObject = function(includeInstance, msg) {
    var f, obj = {
      filenameUri: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f,
      connectionMode: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.SqliteMetadataSourceConfig}
   */
  proto.ml_metadata.SqliteMetadataSourceConfig.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.SqliteMetadataSourceConfig;
    return proto.ml_metadata.SqliteMetadataSourceConfig.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.SqliteMetadataSourceConfig} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.SqliteMetadataSourceConfig}
   */
  proto.ml_metadata.SqliteMetadataSourceConfig.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = /** @type {string} */ (reader.readString());
        msg.setFilenameUri(value);
        break;
      case 2:
        var value = /** @type {!proto.ml_metadata.SqliteMetadataSourceConfig.ConnectionMode} */ (reader.readEnum());
        msg.setConnectionMode(value);
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.SqliteMetadataSourceConfig.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.SqliteMetadataSourceConfig.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.SqliteMetadataSourceConfig} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.SqliteMetadataSourceConfig.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = /** @type {string} */ (jspb.Message.getField(message, 1));
    if (f != null) {
      writer.writeString(
        1,
        f
      );
    }
    f = /** @type {!proto.ml_metadata.SqliteMetadataSourceConfig.ConnectionMode} */ (jspb.Message.getField(message, 2));
    if (f != null) {
      writer.writeEnum(
        2,
        f
      );
    }
  };
  
  
  /**
   * @enum {number}
   */
  proto.ml_metadata.SqliteMetadataSourceConfig.ConnectionMode = {
    UNKNOWN: 0,
    READONLY: 1,
    READWRITE: 2,
    READWRITE_OPENCREATE: 3
  };
  
  /**
   * optional string filename_uri = 1;
   * @return {string}
   */
  proto.ml_metadata.SqliteMetadataSourceConfig.prototype.getFilenameUri = function() {
    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
  };
  
  
  /**
   * @param {string} value
   * @return {!proto.ml_metadata.SqliteMetadataSourceConfig} returns this
   */
  proto.ml_metadata.SqliteMetadataSourceConfig.prototype.setFilenameUri = function(value) {
    return jspb.Message.setField(this, 1, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.SqliteMetadataSourceConfig} returns this
   */
  proto.ml_metadata.SqliteMetadataSourceConfig.prototype.clearFilenameUri = function() {
    return jspb.Message.setField(this, 1, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.SqliteMetadataSourceConfig.prototype.hasFilenameUri = function() {
    return jspb.Message.getField(this, 1) != null;
  };
  
  
  /**
   * optional ConnectionMode connection_mode = 2;
   * @return {!proto.ml_metadata.SqliteMetadataSourceConfig.ConnectionMode}
   */
  proto.ml_metadata.SqliteMetadataSourceConfig.prototype.getConnectionMode = function() {
    return /** @type {!proto.ml_metadata.SqliteMetadataSourceConfig.ConnectionMode} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
  };
  
  
  /**
   * @param {!proto.ml_metadata.SqliteMetadataSourceConfig.ConnectionMode} value
   * @return {!proto.ml_metadata.SqliteMetadataSourceConfig} returns this
   */
  proto.ml_metadata.SqliteMetadataSourceConfig.prototype.setConnectionMode = function(value) {
    return jspb.Message.setField(this, 2, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.SqliteMetadataSourceConfig} returns this
   */
  proto.ml_metadata.SqliteMetadataSourceConfig.prototype.clearConnectionMode = function() {
    return jspb.Message.setField(this, 2, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.SqliteMetadataSourceConfig.prototype.hasConnectionMode = function() {
    return jspb.Message.getField(this, 2) != null;
  };
  
  
  
  /**
   * Oneof group definitions for this message. Each group defines the field
   * numbers belonging to that group. When of these fields' value is set, all
   * other fields in the group are cleared. During deserialization, if multiple
   * fields are encountered for a group, only the last value seen will be kept.
   * @private {!Array<!Array<number>>}
   * @const
   */
  proto.ml_metadata.ConnectionConfig.oneofGroups_ = [[1,2,3]];
  
  /**
   * @enum {number}
   */
  proto.ml_metadata.ConnectionConfig.ConfigCase = {
    CONFIG_NOT_SET: 0,
    FAKE_DATABASE: 1,
    MYSQL: 2,
    SQLITE: 3
  };
  
  /**
   * @return {proto.ml_metadata.ConnectionConfig.ConfigCase}
   */
  proto.ml_metadata.ConnectionConfig.prototype.getConfigCase = function() {
    return /** @type {proto.ml_metadata.ConnectionConfig.ConfigCase} */(jspb.Message.computeOneofCase(this, proto.ml_metadata.ConnectionConfig.oneofGroups_[0]));
  };
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.ConnectionConfig.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.ConnectionConfig.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.ConnectionConfig} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.ConnectionConfig.toObject = function(includeInstance, msg) {
    var f, obj = {
      fakeDatabase: (f = msg.getFakeDatabase()) && proto.ml_metadata.FakeDatabaseConfig.toObject(includeInstance, f),
      mysql: (f = msg.getMysql()) && proto.ml_metadata.MySQLDatabaseConfig.toObject(includeInstance, f),
      sqlite: (f = msg.getSqlite()) && proto.ml_metadata.SqliteMetadataSourceConfig.toObject(includeInstance, f)
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.ConnectionConfig}
   */
  proto.ml_metadata.ConnectionConfig.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.ConnectionConfig;
    return proto.ml_metadata.ConnectionConfig.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.ConnectionConfig} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.ConnectionConfig}
   */
  proto.ml_metadata.ConnectionConfig.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = new proto.ml_metadata.FakeDatabaseConfig;
        reader.readMessage(value,proto.ml_metadata.FakeDatabaseConfig.deserializeBinaryFromReader);
        msg.setFakeDatabase(value);
        break;
      case 2:
        var value = new proto.ml_metadata.MySQLDatabaseConfig;
        reader.readMessage(value,proto.ml_metadata.MySQLDatabaseConfig.deserializeBinaryFromReader);
        msg.setMysql(value);
        break;
      case 3:
        var value = new proto.ml_metadata.SqliteMetadataSourceConfig;
        reader.readMessage(value,proto.ml_metadata.SqliteMetadataSourceConfig.deserializeBinaryFromReader);
        msg.setSqlite(value);
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.ConnectionConfig.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.ConnectionConfig.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.ConnectionConfig} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.ConnectionConfig.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = message.getFakeDatabase();
    if (f != null) {
      writer.writeMessage(
        1,
        f,
        proto.ml_metadata.FakeDatabaseConfig.serializeBinaryToWriter
      );
    }
    f = message.getMysql();
    if (f != null) {
      writer.writeMessage(
        2,
        f,
        proto.ml_metadata.MySQLDatabaseConfig.serializeBinaryToWriter
      );
    }
    f = message.getSqlite();
    if (f != null) {
      writer.writeMessage(
        3,
        f,
        proto.ml_metadata.SqliteMetadataSourceConfig.serializeBinaryToWriter
      );
    }
  };
  
  
  /**
   * optional FakeDatabaseConfig fake_database = 1;
   * @return {?proto.ml_metadata.FakeDatabaseConfig}
   */
  proto.ml_metadata.ConnectionConfig.prototype.getFakeDatabase = function() {
    return /** @type{?proto.ml_metadata.FakeDatabaseConfig} */ (
      jspb.Message.getWrapperField(this, proto.ml_metadata.FakeDatabaseConfig, 1));
  };
  
  
  /**
   * @param {?proto.ml_metadata.FakeDatabaseConfig|undefined} value
   * @return {!proto.ml_metadata.ConnectionConfig} returns this
  */
  proto.ml_metadata.ConnectionConfig.prototype.setFakeDatabase = function(value) {
    return jspb.Message.setOneofWrapperField(this, 1, proto.ml_metadata.ConnectionConfig.oneofGroups_[0], value);
  };
  
  
  /**
   * Clears the message field making it undefined.
   * @return {!proto.ml_metadata.ConnectionConfig} returns this
   */
  proto.ml_metadata.ConnectionConfig.prototype.clearFakeDatabase = function() {
    return this.setFakeDatabase(undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ConnectionConfig.prototype.hasFakeDatabase = function() {
    return jspb.Message.getField(this, 1) != null;
  };
  
  
  /**
   * optional MySQLDatabaseConfig mysql = 2;
   * @return {?proto.ml_metadata.MySQLDatabaseConfig}
   */
  proto.ml_metadata.ConnectionConfig.prototype.getMysql = function() {
    return /** @type{?proto.ml_metadata.MySQLDatabaseConfig} */ (
      jspb.Message.getWrapperField(this, proto.ml_metadata.MySQLDatabaseConfig, 2));
  };
  
  
  /**
   * @param {?proto.ml_metadata.MySQLDatabaseConfig|undefined} value
   * @return {!proto.ml_metadata.ConnectionConfig} returns this
  */
  proto.ml_metadata.ConnectionConfig.prototype.setMysql = function(value) {
    return jspb.Message.setOneofWrapperField(this, 2, proto.ml_metadata.ConnectionConfig.oneofGroups_[0], value);
  };
  
  
  /**
   * Clears the message field making it undefined.
   * @return {!proto.ml_metadata.ConnectionConfig} returns this
   */
  proto.ml_metadata.ConnectionConfig.prototype.clearMysql = function() {
    return this.setMysql(undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ConnectionConfig.prototype.hasMysql = function() {
    return jspb.Message.getField(this, 2) != null;
  };
  
  
  /**
   * optional SqliteMetadataSourceConfig sqlite = 3;
   * @return {?proto.ml_metadata.SqliteMetadataSourceConfig}
   */
  proto.ml_metadata.ConnectionConfig.prototype.getSqlite = function() {
    return /** @type{?proto.ml_metadata.SqliteMetadataSourceConfig} */ (
      jspb.Message.getWrapperField(this, proto.ml_metadata.SqliteMetadataSourceConfig, 3));
  };
  
  
  /**
   * @param {?proto.ml_metadata.SqliteMetadataSourceConfig|undefined} value
   * @return {!proto.ml_metadata.ConnectionConfig} returns this
  */
  proto.ml_metadata.ConnectionConfig.prototype.setSqlite = function(value) {
    return jspb.Message.setOneofWrapperField(this, 3, proto.ml_metadata.ConnectionConfig.oneofGroups_[0], value);
  };
  
  
  /**
   * Clears the message field making it undefined.
   * @return {!proto.ml_metadata.ConnectionConfig} returns this
   */
  proto.ml_metadata.ConnectionConfig.prototype.clearSqlite = function() {
    return this.setSqlite(undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.ConnectionConfig.prototype.hasSqlite = function() {
    return jspb.Message.getField(this, 3) != null;
  };
  
  
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.MetadataStoreServerConfig.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.MetadataStoreServerConfig.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.MetadataStoreServerConfig} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.MetadataStoreServerConfig.toObject = function(includeInstance, msg) {
    var f, obj = {
      connectionConfig: (f = msg.getConnectionConfig()) && proto.ml_metadata.ConnectionConfig.toObject(includeInstance, f),
      sslConfig: (f = msg.getSslConfig()) && proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.toObject(includeInstance, f)
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.MetadataStoreServerConfig}
   */
  proto.ml_metadata.MetadataStoreServerConfig.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.MetadataStoreServerConfig;
    return proto.ml_metadata.MetadataStoreServerConfig.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.MetadataStoreServerConfig} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.MetadataStoreServerConfig}
   */
  proto.ml_metadata.MetadataStoreServerConfig.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = new proto.ml_metadata.ConnectionConfig;
        reader.readMessage(value,proto.ml_metadata.ConnectionConfig.deserializeBinaryFromReader);
        msg.setConnectionConfig(value);
        break;
      case 2:
        var value = new proto.ml_metadata.MetadataStoreServerConfig.SSLConfig;
        reader.readMessage(value,proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.deserializeBinaryFromReader);
        msg.setSslConfig(value);
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.MetadataStoreServerConfig.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.MetadataStoreServerConfig.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.MetadataStoreServerConfig} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.MetadataStoreServerConfig.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = message.getConnectionConfig();
    if (f != null) {
      writer.writeMessage(
        1,
        f,
        proto.ml_metadata.ConnectionConfig.serializeBinaryToWriter
      );
    }
    f = message.getSslConfig();
    if (f != null) {
      writer.writeMessage(
        2,
        f,
        proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.serializeBinaryToWriter
      );
    }
  };
  
  
  
  
  
  if (jspb.Message.GENERATE_TO_OBJECT) {
  /**
   * Creates an object representation of this proto.
   * Field names that are reserved in JavaScript and will be renamed to pb_name.
   * Optional fields that are not set will be set to undefined.
   * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
   * For the list of reserved names please see:
   *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
   * @param {boolean=} opt_includeInstance Deprecated. whether to include the
   *     JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @return {!Object}
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.toObject = function(opt_includeInstance) {
    return proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.toObject(opt_includeInstance, this);
  };
  
  
  /**
   * Static version of the {@see toObject} method.
   * @param {boolean|undefined} includeInstance Deprecated. Whether to include
   *     the JSPB instance for transitional soy proto support:
   *     http://goto/soy-param-migration
   * @param {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} msg The msg instance to transform.
   * @return {!Object}
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.toObject = function(includeInstance, msg) {
    var f, obj = {
      serverKey: (f = jspb.Message.getField(msg, 1)) == null ? undefined : f,
      serverCert: (f = jspb.Message.getField(msg, 2)) == null ? undefined : f,
      customCa: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f,
      clientVerify: (f = jspb.Message.getBooleanField(msg, 4)) == null ? undefined : f
    };
  
    if (includeInstance) {
      obj.$jspbMessageInstance = msg;
    }
    return obj;
  };
  }
  
  
  /**
   * Deserializes binary data (in protobuf wire format).
   * @param {jspb.ByteSource} bytes The bytes to deserialize.
   * @return {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig}
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.deserializeBinary = function(bytes) {
    var reader = new jspb.BinaryReader(bytes);
    var msg = new proto.ml_metadata.MetadataStoreServerConfig.SSLConfig;
    return proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.deserializeBinaryFromReader(msg, reader);
  };
  
  
  /**
   * Deserializes binary data (in protobuf wire format) from the
   * given reader into the given message object.
   * @param {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} msg The message object to deserialize into.
   * @param {!jspb.BinaryReader} reader The BinaryReader to use.
   * @return {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig}
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.deserializeBinaryFromReader = function(msg, reader) {
    while (reader.nextField()) {
      if (reader.isEndGroup()) {
        break;
      }
      var field = reader.getFieldNumber();
      switch (field) {
      case 1:
        var value = /** @type {string} */ (reader.readString());
        msg.setServerKey(value);
        break;
      case 2:
        var value = /** @type {string} */ (reader.readString());
        msg.setServerCert(value);
        break;
      case 3:
        var value = /** @type {string} */ (reader.readString());
        msg.setCustomCa(value);
        break;
      case 4:
        var value = /** @type {boolean} */ (reader.readBool());
        msg.setClientVerify(value);
        break;
      default:
        reader.skipField();
        break;
      }
    }
    return msg;
  };
  
  
  /**
   * Serializes the message to binary data (in protobuf wire format).
   * @return {!Uint8Array}
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.serializeBinary = function() {
    var writer = new jspb.BinaryWriter();
    proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.serializeBinaryToWriter(this, writer);
    return writer.getResultBuffer();
  };
  
  
  /**
   * Serializes the given message to binary data (in protobuf wire
   * format), writing to the given BinaryWriter.
   * @param {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} message
   * @param {!jspb.BinaryWriter} writer
   * @suppress {unusedLocalVariables} f is only used for nested messages
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.serializeBinaryToWriter = function(message, writer) {
    var f = undefined;
    f = /** @type {string} */ (jspb.Message.getField(message, 1));
    if (f != null) {
      writer.writeString(
        1,
        f
      );
    }
    f = /** @type {string} */ (jspb.Message.getField(message, 2));
    if (f != null) {
      writer.writeString(
        2,
        f
      );
    }
    f = /** @type {string} */ (jspb.Message.getField(message, 3));
    if (f != null) {
      writer.writeString(
        3,
        f
      );
    }
    f = /** @type {boolean} */ (jspb.Message.getField(message, 4));
    if (f != null) {
      writer.writeBool(
        4,
        f
      );
    }
  };
  
  
  /**
   * optional string server_key = 1;
   * @return {string}
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.getServerKey = function() {
    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
  };
  
  
  /**
   * @param {string} value
   * @return {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} returns this
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.setServerKey = function(value) {
    return jspb.Message.setField(this, 1, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} returns this
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.clearServerKey = function() {
    return jspb.Message.setField(this, 1, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.hasServerKey = function() {
    return jspb.Message.getField(this, 1) != null;
  };
  
  
  /**
   * optional string server_cert = 2;
   * @return {string}
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.getServerCert = function() {
    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
  };
  
  
  /**
   * @param {string} value
   * @return {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} returns this
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.setServerCert = function(value) {
    return jspb.Message.setField(this, 2, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} returns this
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.clearServerCert = function() {
    return jspb.Message.setField(this, 2, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.hasServerCert = function() {
    return jspb.Message.getField(this, 2) != null;
  };
  
  
  /**
   * optional string custom_ca = 3;
   * @return {string}
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.getCustomCa = function() {
    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
  };
  
  
  /**
   * @param {string} value
   * @return {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} returns this
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.setCustomCa = function(value) {
    return jspb.Message.setField(this, 3, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} returns this
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.clearCustomCa = function() {
    return jspb.Message.setField(this, 3, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.hasCustomCa = function() {
    return jspb.Message.getField(this, 3) != null;
  };
  
  
  /**
   * optional bool client_verify = 4;
   * @return {boolean}
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.getClientVerify = function() {
    return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false));
  };
  
  
  /**
   * @param {boolean} value
   * @return {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} returns this
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.setClientVerify = function(value) {
    return jspb.Message.setField(this, 4, value);
  };
  
  
  /**
   * Clears the field making it undefined.
   * @return {!proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} returns this
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.clearClientVerify = function() {
    return jspb.Message.setField(this, 4, undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.MetadataStoreServerConfig.SSLConfig.prototype.hasClientVerify = function() {
    return jspb.Message.getField(this, 4) != null;
  };
  
  
  /**
   * optional ConnectionConfig connection_config = 1;
   * @return {?proto.ml_metadata.ConnectionConfig}
   */
  proto.ml_metadata.MetadataStoreServerConfig.prototype.getConnectionConfig = function() {
    return /** @type{?proto.ml_metadata.ConnectionConfig} */ (
      jspb.Message.getWrapperField(this, proto.ml_metadata.ConnectionConfig, 1));
  };
  
  
  /**
   * @param {?proto.ml_metadata.ConnectionConfig|undefined} value
   * @return {!proto.ml_metadata.MetadataStoreServerConfig} returns this
  */
  proto.ml_metadata.MetadataStoreServerConfig.prototype.setConnectionConfig = function(value) {
    return jspb.Message.setWrapperField(this, 1, value);
  };
  
  
  /**
   * Clears the message field making it undefined.
   * @return {!proto.ml_metadata.MetadataStoreServerConfig} returns this
   */
  proto.ml_metadata.MetadataStoreServerConfig.prototype.clearConnectionConfig = function() {
    return this.setConnectionConfig(undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.MetadataStoreServerConfig.prototype.hasConnectionConfig = function() {
    return jspb.Message.getField(this, 1) != null;
  };
  
  
  /**
   * optional SSLConfig ssl_config = 2;
   * @return {?proto.ml_metadata.MetadataStoreServerConfig.SSLConfig}
   */
  proto.ml_metadata.MetadataStoreServerConfig.prototype.getSslConfig = function() {
    return /** @type{?proto.ml_metadata.MetadataStoreServerConfig.SSLConfig} */ (
      jspb.Message.getWrapperField(this, proto.ml_metadata.MetadataStoreServerConfig.SSLConfig, 2));
  };
  
  
  /**
   * @param {?proto.ml_metadata.MetadataStoreServerConfig.SSLConfig|undefined} value
   * @return {!proto.ml_metadata.MetadataStoreServerConfig} returns this
  */
  proto.ml_metadata.MetadataStoreServerConfig.prototype.setSslConfig = function(value) {
    return jspb.Message.setWrapperField(this, 2, value);
  };
  
  
  /**
   * Clears the message field making it undefined.
   * @return {!proto.ml_metadata.MetadataStoreServerConfig} returns this
   */
  proto.ml_metadata.MetadataStoreServerConfig.prototype.clearSslConfig = function() {
    return this.setSslConfig(undefined);
  };
  
  
  /**
   * Returns whether this field is set.
   * @return {boolean}
   */
  proto.ml_metadata.MetadataStoreServerConfig.prototype.hasSslConfig = function() {
    return jspb.Message.getField(this, 2) != null;
  };
  
  
  /**
   * @enum {number}
   */
  proto.ml_metadata.PropertyType = {
    UNKNOWN: 0,
    INT: 1,
    DOUBLE: 2,
    STRING: 3
  };
  
  goog.object.extend(exports, proto.ml_metadata);
  