text: /*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/
  "use strict";
  
  var $protobuf = require("protobufjs/minimal");
  
  // Common aliases
  var $Reader = $protobuf.Reader,
  	$Writer = $protobuf.Writer,
  	$util = $protobuf.util;
  
  // Exported root namespace
  var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});
  
  $root.packets = (function () {
  	/**
  	 * Namespace packets.
  	 * @exports packets
  	 * @namespace
  	 */
  	var packets = {};
  
  	/**
  	 * DataType enum.
  	 * @name packets.DataType
  	 * @enum {string}
  	 * @property {number} DATATYPE_UNDEFINED=0 DATATYPE_UNDEFINED value
  	 * @property {number} DATATYPE_NULL=1 DATATYPE_NULL value
  	 * @property {number} DATATYPE_JSON=2 DATATYPE_JSON value
  	 * @property {number} DATATYPE_BUFFER=3 DATATYPE_BUFFER value
  	 */
  	packets.DataType = (function () {
  		var valuesById = {},
  			values = Object.create(valuesById);
  		values[(valuesById[0] = "DATATYPE_UNDEFINED")] = 0;
  		values[(valuesById[1] = "DATATYPE_NULL")] = 1;
  		values[(valuesById[2] = "DATATYPE_JSON")] = 2;
  		values[(valuesById[3] = "DATATYPE_BUFFER")] = 3;
  		return values;
  	})();
  
  	packets.PacketEvent = (function () {
  		/**
  		 * Properties of a PacketEvent.
  		 * @memberof packets
  		 * @interface IPacketEvent
  		 * @property {string|null} [ver] PacketEvent ver
  		 * @property {string|null} [sender] PacketEvent sender
  		 * @property {string|null} [id] PacketEvent id
  		 * @property {string|null} [event] PacketEvent event
  		 * @property {Uint8Array|null} [data] PacketEvent data
  		 * @property {packets.DataType|null} [dataType] PacketEvent dataType
  		 * @property {Array.<string>|null} [groups] PacketEvent groups
  		 * @property {string|null} [meta] PacketEvent meta
  		 * @property {boolean|null} [broadcast] PacketEvent broadcast
  		 * @property {number|null} [level] PacketEvent level
  		 * @property {boolean|null} [tracing] PacketEvent tracing
  		 * @property {string|null} [parentID] PacketEvent parentID
  		 * @property {string|null} [requestID] PacketEvent requestID
  		 * @property {boolean|null} [stream] PacketEvent stream
  		 * @property {number|null} [seq] PacketEvent seq
  		 * @property {string|null} [caller] PacketEvent caller
  		 * @property {boolean|null} [needAck] PacketEvent needAck
  		 */
  
  		/**
  		 * Constructs a new PacketEvent.
  		 * @memberof packets
  		 * @classdesc Represents a PacketEvent.
  		 * @implements IPacketEvent
  		 * @constructor
  		 * @param {packets.IPacketEvent=} [properties] Properties to set
  		 */
  		function PacketEvent(properties) {
  			this.groups = [];
  			if (properties)
  				for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
  					if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];
  		}
  
  		/**
  		 * PacketEvent ver.
  		 * @member {string} ver
  		 * @memberof packets.PacketEvent
  		 * @instance
  		 */
  		PacketEvent.prototype.ver = "";
  
  		/**
  		 * PacketEvent sender.
  		 * @member {string} sender
  		 * @memberof packets.PacketEvent
  		 * @instance
  		 */
  		PacketEvent.prototype.sender = "";
  
  		/**
  		 * PacketEvent id.
  		 * @member {string} id
  		 * @memberof packets.PacketEvent
  		 * @instance
  		 */
  		PacketEvent.prototype.id = "";
  
  		/**
  		 * PacketEvent event.
  		 * @member {string} event
  		 * @memberof packets.PacketEvent
  		 * @instance
  		 */
  		PacketEvent.prototype.event = "";
  
  		/**
  		 * PacketEvent data.
  		 * @member {Uint8Array} data
  		 * @memberof packets.PacketEvent
  		 * @instance
  		 */
  		PacketEvent.prototype.data = $util.newBuffer([]);
  
  		/**
  		 * PacketEvent dataType.
  		 * @member {packets.DataType} dataType
  		 * @memberof packets.PacketEvent
  		 * @instance
  		 */
  		PacketEvent.prototype.dataType = 0;
  
  		/**
  		 * PacketEvent groups.
  		 * @member {Array.<string>} groups
  		 * @memberof packets.PacketEvent
  		 * @instance
  		 */
  		PacketEvent.prototype.groups = $util.emptyArray;
  
  		/**
  		 * PacketEvent meta.
  		 * @member {string} meta
  		 * @memberof packets.PacketEvent
  		 * @instance
  		 */
  		PacketEvent.prototype.meta = "";
  
  		/**
  		 * PacketEvent broadcast.
  		 * @member {boolean} broadcast
  		 * @memberof packets.PacketEvent
  		 * @instance
  		 */
  		PacketEvent.prototype.broadcast = false;
  
  		/**
  		 * PacketEvent level.
  		 * @member {number} level
  		 * @memberof packets.PacketEvent
  		 * @instance
  		 */
  		PacketEvent.prototype.level = 0;
  
  		/**
  		 * PacketEvent tracing.
  		 * @member {boolean} tracing
  		 * @memberof packets.PacketEvent
  		 * @instance
  		 */
  		PacketEvent.prototype.tracing = false;
  
  		/**
  		 * PacketEvent parentID.
  		 * @member {string} parentID
  		 * @memberof packets.PacketEvent
  		 * @instance
  		 */
  		PacketEvent.prototype.parentID = "";
  
  		/**
  		 * PacketEvent requestID.
  		 * @member {string} requestID
  		 * @memberof packets.PacketEvent
  		 * @instance
  		 */
  		PacketEvent.prototype.requestID = "";
  
  		/**
  		 * PacketEvent stream.
  		 * @member {boolean} stream
  		 * @memberof packets.PacketEvent
  		 * @instance
  		 */
  		PacketEvent.prototype.stream = false;
  
  		/**
  		 * PacketEvent seq.
  		 * @member {number} seq
  		 * @memberof packets.PacketEvent
  		 * @instance
  		 */
  		PacketEvent.prototype.seq = 0;
  
  		/**
  		 * PacketEvent caller.
  		 * @member {string} caller
  		 * @memberof packets.PacketEvent
  		 * @instance
  		 */
  		PacketEvent.prototype.caller = "";
  
  		/**
  		 * PacketEvent needAck.
  		 * @member {boolean} needAck
  		 * @memberof packets.PacketEvent
  		 * @instance
  		 */
  		PacketEvent.prototype.needAck = false;
  
  		/**
  		 * Creates a new PacketEvent instance using the specified properties.
  		 * @function create
  		 * @memberof packets.PacketEvent
  		 * @static
  		 * @param {packets.IPacketEvent=} [properties] Properties to set
  		 * @returns {packets.PacketEvent} PacketEvent instance
  		 */
  		PacketEvent.create = function create(properties) {
  			return new PacketEvent(properties);
  		};
  
  		/**
  		 * Encodes the specified PacketEvent message. Does not implicitly {@link packets.PacketEvent.verify|verify} messages.
  		 * @function encode
  		 * @memberof packets.PacketEvent
  		 * @static
  		 * @param {packets.IPacketEvent} message PacketEvent message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketEvent.encode = function encode(message, writer) {
  			if (!writer) writer = $Writer.create();
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.ver);
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				writer.uint32(/* id 2, wireType 2 =*/ 18).string(message.sender);
  			if (message.id != null && message.hasOwnProperty("id"))
  				writer.uint32(/* id 3, wireType 2 =*/ 26).string(message.id);
  			if (message.event != null && message.hasOwnProperty("event"))
  				writer.uint32(/* id 4, wireType 2 =*/ 34).string(message.event);
  			if (message.data != null && message.hasOwnProperty("data"))
  				writer.uint32(/* id 5, wireType 2 =*/ 42).bytes(message.data);
  			if (message.dataType != null && message.hasOwnProperty("dataType"))
  				writer.uint32(/* id 6, wireType 0 =*/ 48).int32(message.dataType);
  			if (message.groups != null && message.groups.length)
  				for (var i = 0; i < message.groups.length; ++i)
  					writer.uint32(/* id 7, wireType 2 =*/ 58).string(message.groups[i]);
  			if (message.broadcast != null && message.hasOwnProperty("broadcast"))
  				writer.uint32(/* id 8, wireType 0 =*/ 64).bool(message.broadcast);
  			if (message.meta != null && message.hasOwnProperty("meta"))
  				writer.uint32(/* id 9, wireType 2 =*/ 74).string(message.meta);
  			if (message.level != null && message.hasOwnProperty("level"))
  				writer.uint32(/* id 10, wireType 0 =*/ 80).int32(message.level);
  			if (message.tracing != null && message.hasOwnProperty("tracing"))
  				writer.uint32(/* id 11, wireType 0 =*/ 88).bool(message.tracing);
  			if (message.parentID != null && message.hasOwnProperty("parentID"))
  				writer.uint32(/* id 12, wireType 2 =*/ 98).string(message.parentID);
  			if (message.requestID != null && message.hasOwnProperty("requestID"))
  				writer.uint32(/* id 13, wireType 2 =*/ 106).string(message.requestID);
  			if (message.stream != null && message.hasOwnProperty("stream"))
  				writer.uint32(/* id 14, wireType 0 =*/ 112).bool(message.stream);
  			if (message.seq != null && message.hasOwnProperty("seq"))
  				writer.uint32(/* id 15, wireType 0 =*/ 120).int32(message.seq);
  			if (message.caller != null && message.hasOwnProperty("caller"))
  				writer.uint32(/* id 16, wireType 2 =*/ 130).string(message.caller);
  			if (message.needAck != null && message.hasOwnProperty("needAck"))
  				writer.uint32(/* id 17, wireType 0 =*/ 136).bool(message.needAck);
  			return writer;
  		};
  
  		/**
  		 * Encodes the specified PacketEvent message, length delimited. Does not implicitly {@link packets.PacketEvent.verify|verify} messages.
  		 * @function encodeDelimited
  		 * @memberof packets.PacketEvent
  		 * @static
  		 * @param {packets.IPacketEvent} message PacketEvent message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketEvent.encodeDelimited = function encodeDelimited(message, writer) {
  			return this.encode(message, writer).ldelim();
  		};
  
  		/**
  		 * Decodes a PacketEvent message from the specified reader or buffer.
  		 * @function decode
  		 * @memberof packets.PacketEvent
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @param {number} [length] Message length if known beforehand
  		 * @returns {packets.PacketEvent} PacketEvent
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketEvent.decode = function decode(reader, length) {
  			if (!(reader instanceof $Reader)) reader = $Reader.create(reader);
  			var end = length === undefined ? reader.len : reader.pos + length,
  				message = new $root.packets.PacketEvent();
  			while (reader.pos < end) {
  				var tag = reader.uint32();
  				switch (tag >>> 3) {
  					case 1:
  						message.ver = reader.string();
  						break;
  					case 2:
  						message.sender = reader.string();
  						break;
  					case 3:
  						message.id = reader.string();
  						break;
  					case 4:
  						message.event = reader.string();
  						break;
  					case 5:
  						message.data = reader.bytes();
  						break;
  					case 6:
  						message.dataType = reader.int32();
  						break;
  					case 7:
  						if (!(message.groups && message.groups.length)) message.groups = [];
  						message.groups.push(reader.string());
  						break;
  					case 9:
  						message.meta = reader.string();
  						break;
  					case 8:
  						message.broadcast = reader.bool();
  						break;
  					case 10:
  						message.level = reader.int32();
  						break;
  					case 11:
  						message.tracing = reader.bool();
  						break;
  					case 12:
  						message.parentID = reader.string();
  						break;
  					case 13:
  						message.requestID = reader.string();
  						break;
  					case 14:
  						message.stream = reader.bool();
  						break;
  					case 15:
  						message.seq = reader.int32();
  						break;
  					case 16:
  						message.caller = reader.string();
  						break;
  					case 17:
  						message.needAck = reader.bool();
  						break;
  					default:
  						reader.skipType(tag & 7);
  						break;
  				}
  			}
  			return message;
  		};
  
  		/**
  		 * Decodes a PacketEvent message from the specified reader or buffer, length delimited.
  		 * @function decodeDelimited
  		 * @memberof packets.PacketEvent
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @returns {packets.PacketEvent} PacketEvent
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketEvent.decodeDelimited = function decodeDelimited(reader) {
  			if (!(reader instanceof $Reader)) reader = new $Reader(reader);
  			return this.decode(reader, reader.uint32());
  		};
  
  		/**
  		 * Verifies a PacketEvent message.
  		 * @function verify
  		 * @memberof packets.PacketEvent
  		 * @static
  		 * @param {Object.<string,*>} message Plain object to verify
  		 * @returns {string|null} `null` if valid, otherwise the reason why it is not
  		 */
  		PacketEvent.verify = function verify(message) {
  			if (typeof message !== "object" || message === null) return "object expected";
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				if (!$util.isString(message.ver)) return "ver: string expected";
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				if (!$util.isString(message.sender)) return "sender: string expected";
  			if (message.id != null && message.hasOwnProperty("id"))
  				if (!$util.isString(message.id)) return "id: string expected";
  			if (message.event != null && message.hasOwnProperty("event"))
  				if (!$util.isString(message.event)) return "event: string expected";
  			if (message.data != null && message.hasOwnProperty("data"))
  				if (
  					!(
  						(message.data && typeof message.data.length === "number") ||
  						$util.isString(message.data)
  					)
  				)
  					return "data: buffer expected";
  			if (message.dataType != null && message.hasOwnProperty("dataType"))
  				switch (message.dataType) {
  					default:
  						return "dataType: enum value expected";
  					case 0:
  					case 1:
  					case 2:
  					case 3:
  						break;
  				}
  			if (message.groups != null && message.hasOwnProperty("groups")) {
  				if (!Array.isArray(message.groups)) return "groups: array expected";
  				for (var i = 0; i < message.groups.length; ++i)
  					if (!$util.isString(message.groups[i])) return "groups: string[] expected";
  			}
  			if (message.meta != null && message.hasOwnProperty("meta"))
  				if (!$util.isString(message.meta)) return "meta: string expected";
  			if (message.broadcast != null && message.hasOwnProperty("broadcast"))
  				if (typeof message.broadcast !== "boolean") return "broadcast: boolean expected";
  			if (message.level != null && message.hasOwnProperty("level"))
  				if (!$util.isInteger(message.level)) return "level: integer expected";
  			if (message.tracing != null && message.hasOwnProperty("tracing"))
  				if (typeof message.tracing !== "boolean") return "tracing: boolean expected";
  			if (message.parentID != null && message.hasOwnProperty("parentID"))
  				if (!$util.isString(message.parentID)) return "parentID: string expected";
  			if (message.requestID != null && message.hasOwnProperty("requestID"))
  				if (!$util.isString(message.requestID)) return "requestID: string expected";
  			if (message.stream != null && message.hasOwnProperty("stream"))
  				if (typeof message.stream !== "boolean") return "stream: boolean expected";
  			if (message.seq != null && message.hasOwnProperty("seq"))
  				if (!$util.isInteger(message.seq)) return "seq: integer expected";
  			if (message.caller != null && message.hasOwnProperty("caller"))
  				if (!$util.isString(message.caller)) return "caller: string expected";
  			if (message.needAck != null && message.hasOwnProperty("needAck"))
  				if (typeof message.needAck !== "boolean") return "needAck: boolean expected";
  			return null;
  		};
  
  		/**
  		 * Creates a PacketEvent message from a plain object. Also converts values to their respective internal types.
  		 * @function fromObject
  		 * @memberof packets.PacketEvent
  		 * @static
  		 * @param {Object.<string,*>} object Plain object
  		 * @returns {packets.PacketEvent} PacketEvent
  		 */
  		PacketEvent.fromObject = function fromObject(object) {
  			if (object instanceof $root.packets.PacketEvent) return object;
  			var message = new $root.packets.PacketEvent();
  			if (object.ver != null) message.ver = String(object.ver);
  			if (object.sender != null) message.sender = String(object.sender);
  			if (object.id != null) message.id = String(object.id);
  			if (object.event != null) message.event = String(object.event);
  			if (object.data != null)
  				if (typeof object.data === "string")
  					$util.base64.decode(
  						object.data,
  						(message.data = $util.newBuffer($util.base64.length(object.data))),
  						0
  					);
  				else if (object.data.length) message.data = object.data;
  			switch (object.dataType) {
  				case "DATATYPE_UNDEFINED":
  				case 0:
  					message.dataType = 0;
  					break;
  				case "DATATYPE_NULL":
  				case 1:
  					message.dataType = 1;
  					break;
  				case "DATATYPE_JSON":
  				case 2:
  					message.dataType = 2;
  					break;
  				case "DATATYPE_BUFFER":
  				case 3:
  					message.dataType = 3;
  					break;
  			}
  			if (object.groups) {
  				if (!Array.isArray(object.groups))
  					throw TypeError(".packets.PacketEvent.groups: array expected");
  				message.groups = [];
  				for (var i = 0; i < object.groups.length; ++i)
  					message.groups[i] = String(object.groups[i]);
  			}
  			if (object.meta != null) message.meta = String(object.meta);
  			if (object.broadcast != null) message.broadcast = Boolean(object.broadcast);
  			if (object.level != null) message.level = object.level | 0;
  			if (object.tracing != null) message.tracing = Boolean(object.tracing);
  			if (object.parentID != null) message.parentID = String(object.parentID);
  			if (object.requestID != null) message.requestID = String(object.requestID);
  			if (object.stream != null) message.stream = Boolean(object.stream);
  			if (object.seq != null) message.seq = object.seq | 0;
  			if (object.caller != null) message.caller = String(object.caller);
  			if (object.needAck != null) message.needAck = Boolean(object.needAck);
  			return message;
  		};
  
  		/**
  		 * Creates a plain object from a PacketEvent message. Also converts values to other types if specified.
  		 * @function toObject
  		 * @memberof packets.PacketEvent
  		 * @static
  		 * @param {packets.PacketEvent} message PacketEvent
  		 * @param {$protobuf.IConversionOptions} [options] Conversion options
  		 * @returns {Object.<string,*>} Plain object
  		 */
  		PacketEvent.toObject = function toObject(message, options) {
  			if (!options) options = {};
  			var object = {};
  			if (options.arrays || options.defaults) object.groups = [];
  			if (options.defaults) {
  				object.ver = "";
  				object.sender = "";
  				object.id = "";
  				object.event = "";
  				if (options.bytes === String) object.data = "";
  				else {
  					object.data = [];
  					if (options.bytes !== Array) object.data = $util.newBuffer(object.data);
  				}
  				object.dataType = options.enums === String ? "DATATYPE_UNDEFINED" : 0;
  				object.broadcast = false;
  				object.meta = "";
  				object.level = 0;
  				object.tracing = false;
  				object.parentID = "";
  				object.requestID = "";
  				object.stream = false;
  				object.seq = 0;
  				object.caller = "";
  				object.needAck = false;
  			}
  			if (message.ver != null && message.hasOwnProperty("ver")) object.ver = message.ver;
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				object.sender = message.sender;
  			if (message.id != null && message.hasOwnProperty("id")) object.id = message.id;
  			if (message.event != null && message.hasOwnProperty("event"))
  				object.event = message.event;
  			if (message.data != null && message.hasOwnProperty("data"))
  				object.data =
  					options.bytes === String
  						? $util.base64.encode(message.data, 0, message.data.length)
  						: options.bytes === Array
  						? Array.prototype.slice.call(message.data)
  						: message.data;
  			if (message.dataType != null && message.hasOwnProperty("dataType"))
  				object.dataType =
  					options.enums === String
  						? $root.packets.DataType[message.dataType]
  						: message.dataType;
  			if (message.groups && message.groups.length) {
  				object.groups = [];
  				for (var j = 0; j < message.groups.length; ++j)
  					object.groups[j] = message.groups[j];
  			}
  			if (message.broadcast != null && message.hasOwnProperty("broadcast"))
  				object.broadcast = message.broadcast;
  			if (message.meta != null && message.hasOwnProperty("meta")) object.meta = message.meta;
  			if (message.level != null && message.hasOwnProperty("level"))
  				object.level = message.level;
  			if (message.tracing != null && message.hasOwnProperty("tracing"))
  				object.tracing = message.tracing;
  			if (message.parentID != null && message.hasOwnProperty("parentID"))
  				object.parentID = message.parentID;
  			if (message.requestID != null && message.hasOwnProperty("requestID"))
  				object.requestID = message.requestID;
  			if (message.stream != null && message.hasOwnProperty("stream"))
  				object.stream = message.stream;
  			if (message.seq != null && message.hasOwnProperty("seq")) object.seq = message.seq;
  			if (message.caller != null && message.hasOwnProperty("caller"))
  				object.caller = message.caller;
  			if (message.needAck != null && message.hasOwnProperty("needAck"))
  				object.needAck = message.needAck;
  			return object;
  		};
  
  		/**
  		 * Converts this PacketEvent to JSON.
  		 * @function toJSON
  		 * @memberof packets.PacketEvent
  		 * @instance
  		 * @returns {Object.<string,*>} JSON object
  		 */
  		PacketEvent.prototype.toJSON = function toJSON() {
  			return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
  		};
  
  		return PacketEvent;
  	})();
  
  	packets.PacketRequest = (function () {
  		/**
  		 * Properties of a PacketRequest.
  		 * @memberof packets
  		 * @interface IPacketRequest
  		 * @property {string|null} [ver] PacketRequest ver
  		 * @property {string|null} [sender] PacketRequest sender
  		 * @property {string|null} [id] PacketRequest id
  		 * @property {string|null} [action] PacketRequest action
  		 * @property {Uint8Array|null} [params] PacketRequest params
  		 * @property {packets.DataType|null} [paramsType] PacketRequest paramsType
  		 * @property {string|null} [meta] PacketRequest meta
  		 * @property {number|null} [timeout] PacketRequest timeout
  		 * @property {number|null} [level] PacketRequest level
  		 * @property {boolean|null} [tracing] PacketRequest tracing
  		 * @property {string|null} [parentID] PacketRequest parentID
  		 * @property {string|null} [requestID] PacketRequest requestID
  		 * @property {boolean|null} [stream] PacketRequest stream
  		 * @property {number|null} [seq] PacketRequest seq
  		 * @property {string|null} [caller] PacketRequest caller
  		 */
  
  		/**
  		 * Constructs a new PacketRequest.
  		 * @memberof packets
  		 * @classdesc Represents a PacketRequest.
  		 * @implements IPacketRequest
  		 * @constructor
  		 * @param {packets.IPacketRequest=} [properties] Properties to set
  		 */
  		function PacketRequest(properties) {
  			if (properties)
  				for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
  					if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];
  		}
  
  		/**
  		 * PacketRequest ver.
  		 * @member {string} ver
  		 * @memberof packets.PacketRequest
  		 * @instance
  		 */
  		PacketRequest.prototype.ver = "";
  
  		/**
  		 * PacketRequest sender.
  		 * @member {string} sender
  		 * @memberof packets.PacketRequest
  		 * @instance
  		 */
  		PacketRequest.prototype.sender = "";
  
  		/**
  		 * PacketRequest id.
  		 * @member {string} id
  		 * @memberof packets.PacketRequest
  		 * @instance
  		 */
  		PacketRequest.prototype.id = "";
  
  		/**
  		 * PacketRequest action.
  		 * @member {string} action
  		 * @memberof packets.PacketRequest
  		 * @instance
  		 */
  		PacketRequest.prototype.action = "";
  
  		/**
  		 * PacketRequest params.
  		 * @member {Uint8Array} params
  		 * @memberof packets.PacketRequest
  		 * @instance
  		 */
  		PacketRequest.prototype.params = $util.newBuffer([]);
  
  		/**
  		 * PacketRequest paramsType.
  		 * @member {packets.DataType} paramsType
  		 * @memberof packets.PacketRequest
  		 * @instance
  		 */
  		PacketRequest.prototype.paramsType = 0;
  
  		/**
  		 * PacketRequest meta.
  		 * @member {string} meta
  		 * @memberof packets.PacketRequest
  		 * @instance
  		 */
  		PacketRequest.prototype.meta = "";
  
  		/**
  		 * PacketRequest timeout.
  		 * @member {number} timeout
  		 * @memberof packets.PacketRequest
  		 * @instance
  		 */
  		PacketRequest.prototype.timeout = 0;
  
  		/**
  		 * PacketRequest level.
  		 * @member {number} level
  		 * @memberof packets.PacketRequest
  		 * @instance
  		 */
  		PacketRequest.prototype.level = 0;
  
  		/**
  		 * PacketRequest tracing.
  		 * @member {boolean} tracing
  		 * @memberof packets.PacketRequest
  		 * @instance
  		 */
  		PacketRequest.prototype.tracing = false;
  
  		/**
  		 * PacketRequest parentID.
  		 * @member {string} parentID
  		 * @memberof packets.PacketRequest
  		 * @instance
  		 */
  		PacketRequest.prototype.parentID = "";
  
  		/**
  		 * PacketRequest requestID.
  		 * @member {string} requestID
  		 * @memberof packets.PacketRequest
  		 * @instance
  		 */
  		PacketRequest.prototype.requestID = "";
  
  		/**
  		 * PacketRequest stream.
  		 * @member {boolean} stream
  		 * @memberof packets.PacketRequest
  		 * @instance
  		 */
  		PacketRequest.prototype.stream = false;
  
  		/**
  		 * PacketRequest seq.
  		 * @member {number} seq
  		 * @memberof packets.PacketRequest
  		 * @instance
  		 */
  		PacketRequest.prototype.seq = 0;
  
  		/**
  		 * PacketRequest caller.
  		 * @member {string} caller
  		 * @memberof packets.PacketRequest
  		 * @instance
  		 */
  		PacketRequest.prototype.caller = "";
  
  		/**
  		 * Creates a new PacketRequest instance using the specified properties.
  		 * @function create
  		 * @memberof packets.PacketRequest
  		 * @static
  		 * @param {packets.IPacketRequest=} [properties] Properties to set
  		 * @returns {packets.PacketRequest} PacketRequest instance
  		 */
  		PacketRequest.create = function create(properties) {
  			return new PacketRequest(properties);
  		};
  
  		/**
  		 * Encodes the specified PacketRequest message. Does not implicitly {@link packets.PacketRequest.verify|verify} messages.
  		 * @function encode
  		 * @memberof packets.PacketRequest
  		 * @static
  		 * @param {packets.IPacketRequest} message PacketRequest message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketRequest.encode = function encode(message, writer) {
  			if (!writer) writer = $Writer.create();
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.ver);
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				writer.uint32(/* id 2, wireType 2 =*/ 18).string(message.sender);
  			if (message.id != null && message.hasOwnProperty("id"))
  				writer.uint32(/* id 3, wireType 2 =*/ 26).string(message.id);
  			if (message.action != null && message.hasOwnProperty("action"))
  				writer.uint32(/* id 4, wireType 2 =*/ 34).string(message.action);
  			if (message.params != null && message.hasOwnProperty("params"))
  				writer.uint32(/* id 5, wireType 2 =*/ 42).bytes(message.params);
  			if (message.paramsType != null && message.hasOwnProperty("paramsType"))
  				writer.uint32(/* id 6, wireType 0 =*/ 48).int32(message.paramsType);
  			if (message.meta != null && message.hasOwnProperty("meta"))
  				writer.uint32(/* id 7, wireType 2 =*/ 58).string(message.meta);
  			if (message.timeout != null && message.hasOwnProperty("timeout"))
  				writer.uint32(/* id 8, wireType 1 =*/ 65).double(message.timeout);
  			if (message.level != null && message.hasOwnProperty("level"))
  				writer.uint32(/* id 9, wireType 0 =*/ 72).int32(message.level);
  			if (message.tracing != null && message.hasOwnProperty("tracing"))
  				writer.uint32(/* id 10, wireType 0 =*/ 80).bool(message.tracing);
  			if (message.parentID != null && message.hasOwnProperty("parentID"))
  				writer.uint32(/* id 11, wireType 2 =*/ 90).string(message.parentID);
  			if (message.requestID != null && message.hasOwnProperty("requestID"))
  				writer.uint32(/* id 12, wireType 2 =*/ 98).string(message.requestID);
  			if (message.stream != null && message.hasOwnProperty("stream"))
  				writer.uint32(/* id 13, wireType 0 =*/ 104).bool(message.stream);
  			if (message.seq != null && message.hasOwnProperty("seq"))
  				writer.uint32(/* id 14, wireType 0 =*/ 112).int32(message.seq);
  			if (message.caller != null && message.hasOwnProperty("caller"))
  				writer.uint32(/* id 15, wireType 2 =*/ 122).string(message.caller);
  			return writer;
  		};
  
  		/**
  		 * Encodes the specified PacketRequest message, length delimited. Does not implicitly {@link packets.PacketRequest.verify|verify} messages.
  		 * @function encodeDelimited
  		 * @memberof packets.PacketRequest
  		 * @static
  		 * @param {packets.IPacketRequest} message PacketRequest message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketRequest.encodeDelimited = function encodeDelimited(message, writer) {
  			return this.encode(message, writer).ldelim();
  		};
  
  		/**
  		 * Decodes a PacketRequest message from the specified reader or buffer.
  		 * @function decode
  		 * @memberof packets.PacketRequest
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @param {number} [length] Message length if known beforehand
  		 * @returns {packets.PacketRequest} PacketRequest
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketRequest.decode = function decode(reader, length) {
  			if (!(reader instanceof $Reader)) reader = $Reader.create(reader);
  			var end = length === undefined ? reader.len : reader.pos + length,
  				message = new $root.packets.PacketRequest();
  			while (reader.pos < end) {
  				var tag = reader.uint32();
  				switch (tag >>> 3) {
  					case 1:
  						message.ver = reader.string();
  						break;
  					case 2:
  						message.sender = reader.string();
  						break;
  					case 3:
  						message.id = reader.string();
  						break;
  					case 4:
  						message.action = reader.string();
  						break;
  					case 5:
  						message.params = reader.bytes();
  						break;
  					case 6:
  						message.paramsType = reader.int32();
  						break;
  					case 7:
  						message.meta = reader.string();
  						break;
  					case 8:
  						message.timeout = reader.double();
  						break;
  					case 9:
  						message.level = reader.int32();
  						break;
  					case 10:
  						message.tracing = reader.bool();
  						break;
  					case 11:
  						message.parentID = reader.string();
  						break;
  					case 12:
  						message.requestID = reader.string();
  						break;
  					case 13:
  						message.stream = reader.bool();
  						break;
  					case 14:
  						message.seq = reader.int32();
  						break;
  					case 15:
  						message.caller = reader.string();
  						break;
  					default:
  						reader.skipType(tag & 7);
  						break;
  				}
  			}
  			return message;
  		};
  
  		/**
  		 * Decodes a PacketRequest message from the specified reader or buffer, length delimited.
  		 * @function decodeDelimited
  		 * @memberof packets.PacketRequest
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @returns {packets.PacketRequest} PacketRequest
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketRequest.decodeDelimited = function decodeDelimited(reader) {
  			if (!(reader instanceof $Reader)) reader = new $Reader(reader);
  			return this.decode(reader, reader.uint32());
  		};
  
  		/**
  		 * Verifies a PacketRequest message.
  		 * @function verify
  		 * @memberof packets.PacketRequest
  		 * @static
  		 * @param {Object.<string,*>} message Plain object to verify
  		 * @returns {string|null} `null` if valid, otherwise the reason why it is not
  		 */
  		PacketRequest.verify = function verify(message) {
  			if (typeof message !== "object" || message === null) return "object expected";
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				if (!$util.isString(message.ver)) return "ver: string expected";
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				if (!$util.isString(message.sender)) return "sender: string expected";
  			if (message.id != null && message.hasOwnProperty("id"))
  				if (!$util.isString(message.id)) return "id: string expected";
  			if (message.action != null && message.hasOwnProperty("action"))
  				if (!$util.isString(message.action)) return "action: string expected";
  			if (message.params != null && message.hasOwnProperty("params"))
  				if (
  					!(
  						(message.params && typeof message.params.length === "number") ||
  						$util.isString(message.params)
  					)
  				)
  					return "params: buffer expected";
  			if (message.paramsType != null && message.hasOwnProperty("paramsType"))
  				switch (message.paramsType) {
  					default:
  						return "paramsType: enum value expected";
  					case 0:
  					case 1:
  					case 2:
  					case 3:
  						break;
  				}
  			if (message.meta != null && message.hasOwnProperty("meta"))
  				if (!$util.isString(message.meta)) return "meta: string expected";
  			if (message.timeout != null && message.hasOwnProperty("timeout"))
  				if (typeof message.timeout !== "number") return "timeout: number expected";
  			if (message.level != null && message.hasOwnProperty("level"))
  				if (!$util.isInteger(message.level)) return "level: integer expected";
  			if (message.tracing != null && message.hasOwnProperty("tracing"))
  				if (typeof message.tracing !== "boolean") return "tracing: boolean expected";
  			if (message.parentID != null && message.hasOwnProperty("parentID"))
  				if (!$util.isString(message.parentID)) return "parentID: string expected";
  			if (message.requestID != null && message.hasOwnProperty("requestID"))
  				if (!$util.isString(message.requestID)) return "requestID: string expected";
  			if (message.stream != null && message.hasOwnProperty("stream"))
  				if (typeof message.stream !== "boolean") return "stream: boolean expected";
  			if (message.seq != null && message.hasOwnProperty("seq"))
  				if (!$util.isInteger(message.seq)) return "seq: integer expected";
  			if (message.caller != null && message.hasOwnProperty("caller"))
  				if (!$util.isString(message.caller)) return "caller: string expected";
  			return null;
  		};
  
  		/**
  		 * Creates a PacketRequest message from a plain object. Also converts values to their respective internal types.
  		 * @function fromObject
  		 * @memberof packets.PacketRequest
  		 * @static
  		 * @param {Object.<string,*>} object Plain object
  		 * @returns {packets.PacketRequest} PacketRequest
  		 */
  		PacketRequest.fromObject = function fromObject(object) {
  			if (object instanceof $root.packets.PacketRequest) return object;
  			var message = new $root.packets.PacketRequest();
  			if (object.ver != null) message.ver = String(object.ver);
  			if (object.sender != null) message.sender = String(object.sender);
  			if (object.id != null) message.id = String(object.id);
  			if (object.action != null) message.action = String(object.action);
  			if (object.params != null)
  				if (typeof object.params === "string")
  					$util.base64.decode(
  						object.params,
  						(message.params = $util.newBuffer($util.base64.length(object.params))),
  						0
  					);
  				else if (object.params.length) message.params = object.params;
  			switch (object.paramsType) {
  				case "DATATYPE_UNDEFINED":
  				case 0:
  					message.paramsType = 0;
  					break;
  				case "DATATYPE_NULL":
  				case 1:
  					message.paramsType = 1;
  					break;
  				case "DATATYPE_JSON":
  				case 2:
  					message.paramsType = 2;
  					break;
  				case "DATATYPE_BUFFER":
  				case 3:
  					message.paramsType = 3;
  					break;
  			}
  			if (object.meta != null) message.meta = String(object.meta);
  			if (object.timeout != null) message.timeout = Number(object.timeout);
  			if (object.level != null) message.level = object.level | 0;
  			if (object.tracing != null) message.tracing = Boolean(object.tracing);
  			if (object.parentID != null) message.parentID = String(object.parentID);
  			if (object.requestID != null) message.requestID = String(object.requestID);
  			if (object.stream != null) message.stream = Boolean(object.stream);
  			if (object.seq != null) message.seq = object.seq | 0;
  			if (object.caller != null) message.caller = String(object.caller);
  			return message;
  		};
  
  		/**
  		 * Creates a plain object from a PacketRequest message. Also converts values to other types if specified.
  		 * @function toObject
  		 * @memberof packets.PacketRequest
  		 * @static
  		 * @param {packets.PacketRequest} message PacketRequest
  		 * @param {$protobuf.IConversionOptions} [options] Conversion options
  		 * @returns {Object.<string,*>} Plain object
  		 */
  		PacketRequest.toObject = function toObject(message, options) {
  			if (!options) options = {};
  			var object = {};
  			if (options.defaults) {
  				object.ver = "";
  				object.sender = "";
  				object.id = "";
  				object.action = "";
  				if (options.bytes === String) object.params = "";
  				else {
  					object.params = [];
  					if (options.bytes !== Array) object.params = $util.newBuffer(object.params);
  				}
  				object.paramsType = options.enums === String ? "DATATYPE_UNDEFINED" : 0;
  				object.meta = "";
  				object.timeout = 0;
  				object.level = 0;
  				object.tracing = false;
  				object.parentID = "";
  				object.requestID = "";
  				object.stream = false;
  				object.seq = 0;
  				object.caller = "";
  			}
  			if (message.ver != null && message.hasOwnProperty("ver")) object.ver = message.ver;
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				object.sender = message.sender;
  			if (message.id != null && message.hasOwnProperty("id")) object.id = message.id;
  			if (message.action != null && message.hasOwnProperty("action"))
  				object.action = message.action;
  			if (message.params != null && message.hasOwnProperty("params"))
  				object.params =
  					options.bytes === String
  						? $util.base64.encode(message.params, 0, message.params.length)
  						: options.bytes === Array
  						? Array.prototype.slice.call(message.params)
  						: message.params;
  			if (message.paramsType != null && message.hasOwnProperty("paramsType"))
  				object.paramsType =
  					options.enums === String
  						? $root.packets.DataType[message.paramsType]
  						: message.paramsType;
  			if (message.meta != null && message.hasOwnProperty("meta")) object.meta = message.meta;
  			if (message.timeout != null && message.hasOwnProperty("timeout"))
  				object.timeout =
  					options.json && !isFinite(message.timeout)
  						? String(message.timeout)
  						: message.timeout;
  			if (message.level != null && message.hasOwnProperty("level"))
  				object.level = message.level;
  			if (message.tracing != null && message.hasOwnProperty("tracing"))
  				object.tracing = message.tracing;
  			if (message.parentID != null && message.hasOwnProperty("parentID"))
  				object.parentID = message.parentID;
  			if (message.requestID != null && message.hasOwnProperty("requestID"))
  				object.requestID = message.requestID;
  			if (message.stream != null && message.hasOwnProperty("stream"))
  				object.stream = message.stream;
  			if (message.seq != null && message.hasOwnProperty("seq")) object.seq = message.seq;
  			if (message.caller != null && message.hasOwnProperty("caller"))
  				object.caller = message.caller;
  			return object;
  		};
  
  		/**
  		 * Converts this PacketRequest to JSON.
  		 * @function toJSON
  		 * @memberof packets.PacketRequest
  		 * @instance
  		 * @returns {Object.<string,*>} JSON object
  		 */
  		PacketRequest.prototype.toJSON = function toJSON() {
  			return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
  		};
  
  		return PacketRequest;
  	})();
  
  	packets.PacketResponse = (function () {
  		/**
  		 * Properties of a PacketResponse.
  		 * @memberof packets
  		 * @interface IPacketResponse
  		 * @property {string|null} [ver] PacketResponse ver
  		 * @property {string|null} [sender] PacketResponse sender
  		 * @property {string|null} [id] PacketResponse id
  		 * @property {boolean|null} [success] PacketResponse success
  		 * @property {Uint8Array|null} [data] PacketResponse data
  		 * @property {packets.DataType|null} [dataType] PacketResponse dataType
  		 * @property {string|null} [error] PacketResponse error
  		 * @property {string|null} [meta] PacketResponse meta
  		 * @property {boolean|null} [stream] PacketResponse stream
  		 * @property {number|null} [seq] PacketResponse seq
  		 */
  
  		/**
  		 * Constructs a new PacketResponse.
  		 * @memberof packets
  		 * @classdesc Represents a PacketResponse.
  		 * @implements IPacketResponse
  		 * @constructor
  		 * @param {packets.IPacketResponse=} [properties] Properties to set
  		 */
  		function PacketResponse(properties) {
  			if (properties)
  				for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
  					if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];
  		}
  
  		/**
  		 * PacketResponse ver.
  		 * @member {string} ver
  		 * @memberof packets.PacketResponse
  		 * @instance
  		 */
  		PacketResponse.prototype.ver = "";
  
  		/**
  		 * PacketResponse sender.
  		 * @member {string} sender
  		 * @memberof packets.PacketResponse
  		 * @instance
  		 */
  		PacketResponse.prototype.sender = "";
  
  		/**
  		 * PacketResponse id.
  		 * @member {string} id
  		 * @memberof packets.PacketResponse
  		 * @instance
  		 */
  		PacketResponse.prototype.id = "";
  
  		/**
  		 * PacketResponse success.
  		 * @member {boolean} success
  		 * @memberof packets.PacketResponse
  		 * @instance
  		 */
  		PacketResponse.prototype.success = false;
  
  		/**
  		 * PacketResponse data.
  		 * @member {Uint8Array} data
  		 * @memberof packets.PacketResponse
  		 * @instance
  		 */
  		PacketResponse.prototype.data = $util.newBuffer([]);
  
  		/**
  		 * PacketResponse dataType.
  		 * @member {packets.DataType} dataType
  		 * @memberof packets.PacketResponse
  		 * @instance
  		 */
  		PacketResponse.prototype.dataType = 0;
  
  		/**
  		 * PacketResponse error.
  		 * @member {string} error
  		 * @memberof packets.PacketResponse
  		 * @instance
  		 */
  		PacketResponse.prototype.error = "";
  
  		/**
  		 * PacketResponse meta.
  		 * @member {string} meta
  		 * @memberof packets.PacketResponse
  		 * @instance
  		 */
  		PacketResponse.prototype.meta = "";
  
  		/**
  		 * PacketResponse stream.
  		 * @member {boolean} stream
  		 * @memberof packets.PacketResponse
  		 * @instance
  		 */
  		PacketResponse.prototype.stream = false;
  
  		/**
  		 * PacketResponse seq.
  		 * @member {number} seq
  		 * @memberof packets.PacketResponse
  		 * @instance
  		 */
  		PacketResponse.prototype.seq = 0;
  
  		/**
  		 * Creates a new PacketResponse instance using the specified properties.
  		 * @function create
  		 * @memberof packets.PacketResponse
  		 * @static
  		 * @param {packets.IPacketResponse=} [properties] Properties to set
  		 * @returns {packets.PacketResponse} PacketResponse instance
  		 */
  		PacketResponse.create = function create(properties) {
  			return new PacketResponse(properties);
  		};
  
  		/**
  		 * Encodes the specified PacketResponse message. Does not implicitly {@link packets.PacketResponse.verify|verify} messages.
  		 * @function encode
  		 * @memberof packets.PacketResponse
  		 * @static
  		 * @param {packets.IPacketResponse} message PacketResponse message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketResponse.encode = function encode(message, writer) {
  			if (!writer) writer = $Writer.create();
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.ver);
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				writer.uint32(/* id 2, wireType 2 =*/ 18).string(message.sender);
  			if (message.id != null && message.hasOwnProperty("id"))
  				writer.uint32(/* id 3, wireType 2 =*/ 26).string(message.id);
  			if (message.success != null && message.hasOwnProperty("success"))
  				writer.uint32(/* id 4, wireType 0 =*/ 32).bool(message.success);
  			if (message.data != null && message.hasOwnProperty("data"))
  				writer.uint32(/* id 5, wireType 2 =*/ 42).bytes(message.data);
  			if (message.dataType != null && message.hasOwnProperty("dataType"))
  				writer.uint32(/* id 6, wireType 0 =*/ 48).int32(message.dataType);
  			if (message.error != null && message.hasOwnProperty("error"))
  				writer.uint32(/* id 7, wireType 2 =*/ 58).string(message.error);
  			if (message.meta != null && message.hasOwnProperty("meta"))
  				writer.uint32(/* id 8, wireType 2 =*/ 66).string(message.meta);
  			if (message.stream != null && message.hasOwnProperty("stream"))
  				writer.uint32(/* id 9, wireType 0 =*/ 72).bool(message.stream);
  			if (message.seq != null && message.hasOwnProperty("seq"))
  				writer.uint32(/* id 10, wireType 0 =*/ 80).int32(message.seq);
  			return writer;
  		};
  
  		/**
  		 * Encodes the specified PacketResponse message, length delimited. Does not implicitly {@link packets.PacketResponse.verify|verify} messages.
  		 * @function encodeDelimited
  		 * @memberof packets.PacketResponse
  		 * @static
  		 * @param {packets.IPacketResponse} message PacketResponse message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketResponse.encodeDelimited = function encodeDelimited(message, writer) {
  			return this.encode(message, writer).ldelim();
  		};
  
  		/**
  		 * Decodes a PacketResponse message from the specified reader or buffer.
  		 * @function decode
  		 * @memberof packets.PacketResponse
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @param {number} [length] Message length if known beforehand
  		 * @returns {packets.PacketResponse} PacketResponse
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketResponse.decode = function decode(reader, length) {
  			if (!(reader instanceof $Reader)) reader = $Reader.create(reader);
  			var end = length === undefined ? reader.len : reader.pos + length,
  				message = new $root.packets.PacketResponse();
  			while (reader.pos < end) {
  				var tag = reader.uint32();
  				switch (tag >>> 3) {
  					case 1:
  						message.ver = reader.string();
  						break;
  					case 2:
  						message.sender = reader.string();
  						break;
  					case 3:
  						message.id = reader.string();
  						break;
  					case 4:
  						message.success = reader.bool();
  						break;
  					case 5:
  						message.data = reader.bytes();
  						break;
  					case 6:
  						message.dataType = reader.int32();
  						break;
  					case 7:
  						message.error = reader.string();
  						break;
  					case 8:
  						message.meta = reader.string();
  						break;
  					case 9:
  						message.stream = reader.bool();
  						break;
  					case 10:
  						message.seq = reader.int32();
  						break;
  					default:
  						reader.skipType(tag & 7);
  						break;
  				}
  			}
  			return message;
  		};
  
  		/**
  		 * Decodes a PacketResponse message from the specified reader or buffer, length delimited.
  		 * @function decodeDelimited
  		 * @memberof packets.PacketResponse
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @returns {packets.PacketResponse} PacketResponse
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketResponse.decodeDelimited = function decodeDelimited(reader) {
  			if (!(reader instanceof $Reader)) reader = new $Reader(reader);
  			return this.decode(reader, reader.uint32());
  		};
  
  		/**
  		 * Verifies a PacketResponse message.
  		 * @function verify
  		 * @memberof packets.PacketResponse
  		 * @static
  		 * @param {Object.<string,*>} message Plain object to verify
  		 * @returns {string|null} `null` if valid, otherwise the reason why it is not
  		 */
  		PacketResponse.verify = function verify(message) {
  			if (typeof message !== "object" || message === null) return "object expected";
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				if (!$util.isString(message.ver)) return "ver: string expected";
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				if (!$util.isString(message.sender)) return "sender: string expected";
  			if (message.id != null && message.hasOwnProperty("id"))
  				if (!$util.isString(message.id)) return "id: string expected";
  			if (message.success != null && message.hasOwnProperty("success"))
  				if (typeof message.success !== "boolean") return "success: boolean expected";
  			if (message.data != null && message.hasOwnProperty("data"))
  				if (
  					!(
  						(message.data && typeof message.data.length === "number") ||
  						$util.isString(message.data)
  					)
  				)
  					return "data: buffer expected";
  			if (message.dataType != null && message.hasOwnProperty("dataType"))
  				switch (message.dataType) {
  					default:
  						return "dataType: enum value expected";
  					case 0:
  					case 1:
  					case 2:
  					case 3:
  						break;
  				}
  			if (message.error != null && message.hasOwnProperty("error"))
  				if (!$util.isString(message.error)) return "error: string expected";
  			if (message.meta != null && message.hasOwnProperty("meta"))
  				if (!$util.isString(message.meta)) return "meta: string expected";
  			if (message.stream != null && message.hasOwnProperty("stream"))
  				if (typeof message.stream !== "boolean") return "stream: boolean expected";
  			if (message.seq != null && message.hasOwnProperty("seq"))
  				if (!$util.isInteger(message.seq)) return "seq: integer expected";
  			return null;
  		};
  
  		/**
  		 * Creates a PacketResponse message from a plain object. Also converts values to their respective internal types.
  		 * @function fromObject
  		 * @memberof packets.PacketResponse
  		 * @static
  		 * @param {Object.<string,*>} object Plain object
  		 * @returns {packets.PacketResponse} PacketResponse
  		 */
  		PacketResponse.fromObject = function fromObject(object) {
  			if (object instanceof $root.packets.PacketResponse) return object;
  			var message = new $root.packets.PacketResponse();
  			if (object.ver != null) message.ver = String(object.ver);
  			if (object.sender != null) message.sender = String(object.sender);
  			if (object.id != null) message.id = String(object.id);
  			if (object.success != null) message.success = Boolean(object.success);
  			if (object.data != null)
  				if (typeof object.data === "string")
  					$util.base64.decode(
  						object.data,
  						(message.data = $util.newBuffer($util.base64.length(object.data))),
  						0
  					);
  				else if (object.data.length) message.data = object.data;
  			switch (object.dataType) {
  				case "DATATYPE_UNDEFINED":
  				case 0:
  					message.dataType = 0;
  					break;
  				case "DATATYPE_NULL":
  				case 1:
  					message.dataType = 1;
  					break;
  				case "DATATYPE_JSON":
  				case 2:
  					message.dataType = 2;
  					break;
  				case "DATATYPE_BUFFER":
  				case 3:
  					message.dataType = 3;
  					break;
  			}
  			if (object.error != null) message.error = String(object.error);
  			if (object.meta != null) message.meta = String(object.meta);
  			if (object.stream != null) message.stream = Boolean(object.stream);
  			if (object.seq != null) message.seq = object.seq | 0;
  			return message;
  		};
  
  		/**
  		 * Creates a plain object from a PacketResponse message. Also converts values to other types if specified.
  		 * @function toObject
  		 * @memberof packets.PacketResponse
  		 * @static
  		 * @param {packets.PacketResponse} message PacketResponse
  		 * @param {$protobuf.IConversionOptions} [options] Conversion options
  		 * @returns {Object.<string,*>} Plain object
  		 */
  		PacketResponse.toObject = function toObject(message, options) {
  			if (!options) options = {};
  			var object = {};
  			if (options.defaults) {
  				object.ver = "";
  				object.sender = "";
  				object.id = "";
  				object.success = false;
  				if (options.bytes === String) object.data = "";
  				else {
  					object.data = [];
  					if (options.bytes !== Array) object.data = $util.newBuffer(object.data);
  				}
  				object.dataType = options.enums === String ? "DATATYPE_UNDEFINED" : 0;
  				object.error = "";
  				object.meta = "";
  				object.stream = false;
  				object.seq = 0;
  			}
  			if (message.ver != null && message.hasOwnProperty("ver")) object.ver = message.ver;
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				object.sender = message.sender;
  			if (message.id != null && message.hasOwnProperty("id")) object.id = message.id;
  			if (message.success != null && message.hasOwnProperty("success"))
  				object.success = message.success;
  			if (message.data != null && message.hasOwnProperty("data"))
  				object.data =
  					options.bytes === String
  						? $util.base64.encode(message.data, 0, message.data.length)
  						: options.bytes === Array
  						? Array.prototype.slice.call(message.data)
  						: message.data;
  			if (message.dataType != null && message.hasOwnProperty("dataType"))
  				object.dataType =
  					options.enums === String
  						? $root.packets.DataType[message.dataType]
  						: message.dataType;
  			if (message.error != null && message.hasOwnProperty("error"))
  				object.error = message.error;
  			if (message.meta != null && message.hasOwnProperty("meta")) object.meta = message.meta;
  			if (message.stream != null && message.hasOwnProperty("stream"))
  				object.stream = message.stream;
  			if (message.seq != null && message.hasOwnProperty("seq")) object.seq = message.seq;
  			return object;
  		};
  
  		/**
  		 * Converts this PacketResponse to JSON.
  		 * @function toJSON
  		 * @memberof packets.PacketResponse
  		 * @instance
  		 * @returns {Object.<string,*>} JSON object
  		 */
  		PacketResponse.prototype.toJSON = function toJSON() {
  			return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
  		};
  
  		return PacketResponse;
  	})();
  
  	packets.PacketDiscover = (function () {
  		/**
  		 * Properties of a PacketDiscover.
  		 * @memberof packets
  		 * @interface IPacketDiscover
  		 * @property {string|null} [ver] PacketDiscover ver
  		 * @property {string|null} [sender] PacketDiscover sender
  		 */
  
  		/**
  		 * Constructs a new PacketDiscover.
  		 * @memberof packets
  		 * @classdesc Represents a PacketDiscover.
  		 * @implements IPacketDiscover
  		 * @constructor
  		 * @param {packets.IPacketDiscover=} [properties] Properties to set
  		 */
  		function PacketDiscover(properties) {
  			if (properties)
  				for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
  					if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];
  		}
  
  		/**
  		 * PacketDiscover ver.
  		 * @member {string} ver
  		 * @memberof packets.PacketDiscover
  		 * @instance
  		 */
  		PacketDiscover.prototype.ver = "";
  
  		/**
  		 * PacketDiscover sender.
  		 * @member {string} sender
  		 * @memberof packets.PacketDiscover
  		 * @instance
  		 */
  		PacketDiscover.prototype.sender = "";
  
  		/**
  		 * Creates a new PacketDiscover instance using the specified properties.
  		 * @function create
  		 * @memberof packets.PacketDiscover
  		 * @static
  		 * @param {packets.IPacketDiscover=} [properties] Properties to set
  		 * @returns {packets.PacketDiscover} PacketDiscover instance
  		 */
  		PacketDiscover.create = function create(properties) {
  			return new PacketDiscover(properties);
  		};
  
  		/**
  		 * Encodes the specified PacketDiscover message. Does not implicitly {@link packets.PacketDiscover.verify|verify} messages.
  		 * @function encode
  		 * @memberof packets.PacketDiscover
  		 * @static
  		 * @param {packets.IPacketDiscover} message PacketDiscover message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketDiscover.encode = function encode(message, writer) {
  			if (!writer) writer = $Writer.create();
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.ver);
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				writer.uint32(/* id 2, wireType 2 =*/ 18).string(message.sender);
  			return writer;
  		};
  
  		/**
  		 * Encodes the specified PacketDiscover message, length delimited. Does not implicitly {@link packets.PacketDiscover.verify|verify} messages.
  		 * @function encodeDelimited
  		 * @memberof packets.PacketDiscover
  		 * @static
  		 * @param {packets.IPacketDiscover} message PacketDiscover message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketDiscover.encodeDelimited = function encodeDelimited(message, writer) {
  			return this.encode(message, writer).ldelim();
  		};
  
  		/**
  		 * Decodes a PacketDiscover message from the specified reader or buffer.
  		 * @function decode
  		 * @memberof packets.PacketDiscover
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @param {number} [length] Message length if known beforehand
  		 * @returns {packets.PacketDiscover} PacketDiscover
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketDiscover.decode = function decode(reader, length) {
  			if (!(reader instanceof $Reader)) reader = $Reader.create(reader);
  			var end = length === undefined ? reader.len : reader.pos + length,
  				message = new $root.packets.PacketDiscover();
  			while (reader.pos < end) {
  				var tag = reader.uint32();
  				switch (tag >>> 3) {
  					case 1:
  						message.ver = reader.string();
  						break;
  					case 2:
  						message.sender = reader.string();
  						break;
  					default:
  						reader.skipType(tag & 7);
  						break;
  				}
  			}
  			return message;
  		};
  
  		/**
  		 * Decodes a PacketDiscover message from the specified reader or buffer, length delimited.
  		 * @function decodeDelimited
  		 * @memberof packets.PacketDiscover
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @returns {packets.PacketDiscover} PacketDiscover
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketDiscover.decodeDelimited = function decodeDelimited(reader) {
  			if (!(reader instanceof $Reader)) reader = new $Reader(reader);
  			return this.decode(reader, reader.uint32());
  		};
  
  		/**
  		 * Verifies a PacketDiscover message.
  		 * @function verify
  		 * @memberof packets.PacketDiscover
  		 * @static
  		 * @param {Object.<string,*>} message Plain object to verify
  		 * @returns {string|null} `null` if valid, otherwise the reason why it is not
  		 */
  		PacketDiscover.verify = function verify(message) {
  			if (typeof message !== "object" || message === null) return "object expected";
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				if (!$util.isString(message.ver)) return "ver: string expected";
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				if (!$util.isString(message.sender)) return "sender: string expected";
  			return null;
  		};
  
  		/**
  		 * Creates a PacketDiscover message from a plain object. Also converts values to their respective internal types.
  		 * @function fromObject
  		 * @memberof packets.PacketDiscover
  		 * @static
  		 * @param {Object.<string,*>} object Plain object
  		 * @returns {packets.PacketDiscover} PacketDiscover
  		 */
  		PacketDiscover.fromObject = function fromObject(object) {
  			if (object instanceof $root.packets.PacketDiscover) return object;
  			var message = new $root.packets.PacketDiscover();
  			if (object.ver != null) message.ver = String(object.ver);
  			if (object.sender != null) message.sender = String(object.sender);
  			return message;
  		};
  
  		/**
  		 * Creates a plain object from a PacketDiscover message. Also converts values to other types if specified.
  		 * @function toObject
  		 * @memberof packets.PacketDiscover
  		 * @static
  		 * @param {packets.PacketDiscover} message PacketDiscover
  		 * @param {$protobuf.IConversionOptions} [options] Conversion options
  		 * @returns {Object.<string,*>} Plain object
  		 */
  		PacketDiscover.toObject = function toObject(message, options) {
  			if (!options) options = {};
  			var object = {};
  			if (options.defaults) {
  				object.ver = "";
  				object.sender = "";
  			}
  			if (message.ver != null && message.hasOwnProperty("ver")) object.ver = message.ver;
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				object.sender = message.sender;
  			return object;
  		};
  
  		/**
  		 * Converts this PacketDiscover to JSON.
  		 * @function toJSON
  		 * @memberof packets.PacketDiscover
  		 * @instance
  		 * @returns {Object.<string,*>} JSON object
  		 */
  		PacketDiscover.prototype.toJSON = function toJSON() {
  			return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
  		};
  
  		return PacketDiscover;
  	})();
  
  	packets.PacketInfo = (function () {
  		/**
  		 * Properties of a PacketInfo.
  		 * @memberof packets
  		 * @interface IPacketInfo
  		 * @property {string|null} [ver] PacketInfo ver
  		 * @property {string|null} [sender] PacketInfo sender
  		 * @property {string|null} [services] PacketInfo services
  		 * @property {string|null} [config] PacketInfo config
  		 * @property {Array.<string>|null} [ipList] PacketInfo ipList
  		 * @property {string|null} [hostname] PacketInfo hostname
  		 * @property {packets.PacketInfo.IClient|null} [client] PacketInfo client
  		 * @property {number|null} [seq] PacketInfo seq
  		 * @property {string|null} [instanceID] PacketInfo instanceID
  		 * @property {string|null} [metadata] PacketInfo metadata
  		 */
  
  		/**
  		 * Constructs a new PacketInfo.
  		 * @memberof packets
  		 * @classdesc Represents a PacketInfo.
  		 * @implements IPacketInfo
  		 * @constructor
  		 * @param {packets.IPacketInfo=} [properties] Properties to set
  		 */
  		function PacketInfo(properties) {
  			this.ipList = [];
  			if (properties)
  				for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
  					if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];
  		}
  
  		/**
  		 * PacketInfo ver.
  		 * @member {string} ver
  		 * @memberof packets.PacketInfo
  		 * @instance
  		 */
  		PacketInfo.prototype.ver = "";
  
  		/**
  		 * PacketInfo sender.
  		 * @member {string} sender
  		 * @memberof packets.PacketInfo
  		 * @instance
  		 */
  		PacketInfo.prototype.sender = "";
  
  		/**
  		 * PacketInfo services.
  		 * @member {string} services
  		 * @memberof packets.PacketInfo
  		 * @instance
  		 */
  		PacketInfo.prototype.services = "";
  
  		/**
  		 * PacketInfo config.
  		 * @member {string} config
  		 * @memberof packets.PacketInfo
  		 * @instance
  		 */
  		PacketInfo.prototype.config = "";
  
  		/**
  		 * PacketInfo ipList.
  		 * @member {Array.<string>} ipList
  		 * @memberof packets.PacketInfo
  		 * @instance
  		 */
  		PacketInfo.prototype.ipList = $util.emptyArray;
  
  		/**
  		 * PacketInfo hostname.
  		 * @member {string} hostname
  		 * @memberof packets.PacketInfo
  		 * @instance
  		 */
  		PacketInfo.prototype.hostname = "";
  
  		/**
  		 * PacketInfo client.
  		 * @member {packets.PacketInfo.IClient|null|undefined} client
  		 * @memberof packets.PacketInfo
  		 * @instance
  		 */
  		PacketInfo.prototype.client = null;
  
  		/**
  		 * PacketInfo seq.
  		 * @member {number} seq
  		 * @memberof packets.PacketInfo
  		 * @instance
  		 */
  		PacketInfo.prototype.seq = 0;
  
  		/**
  		 * PacketInfo instanceID.
  		 * @member {string} instanceID
  		 * @memberof packets.PacketInfo
  		 * @instance
  		 */
  		PacketInfo.prototype.instanceID = "";
  
  		/**
  		 * PacketInfo metadata.
  		 * @member {string} metadata
  		 * @memberof packets.PacketInfo
  		 * @instance
  		 */
  		PacketInfo.prototype.metadata = "";
  
  		/**
  		 * Creates a new PacketInfo instance using the specified properties.
  		 * @function create
  		 * @memberof packets.PacketInfo
  		 * @static
  		 * @param {packets.IPacketInfo=} [properties] Properties to set
  		 * @returns {packets.PacketInfo} PacketInfo instance
  		 */
  		PacketInfo.create = function create(properties) {
  			return new PacketInfo(properties);
  		};
  
  		/**
  		 * Encodes the specified PacketInfo message. Does not implicitly {@link packets.PacketInfo.verify|verify} messages.
  		 * @function encode
  		 * @memberof packets.PacketInfo
  		 * @static
  		 * @param {packets.IPacketInfo} message PacketInfo message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketInfo.encode = function encode(message, writer) {
  			if (!writer) writer = $Writer.create();
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.ver);
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				writer.uint32(/* id 2, wireType 2 =*/ 18).string(message.sender);
  			if (message.services != null && message.hasOwnProperty("services"))
  				writer.uint32(/* id 3, wireType 2 =*/ 26).string(message.services);
  			if (message.config != null && message.hasOwnProperty("config"))
  				writer.uint32(/* id 4, wireType 2 =*/ 34).string(message.config);
  			if (message.ipList != null && message.ipList.length)
  				for (var i = 0; i < message.ipList.length; ++i)
  					writer.uint32(/* id 5, wireType 2 =*/ 42).string(message.ipList[i]);
  			if (message.hostname != null && message.hasOwnProperty("hostname"))
  				writer.uint32(/* id 6, wireType 2 =*/ 50).string(message.hostname);
  			if (message.client != null && message.hasOwnProperty("client"))
  				$root.packets.PacketInfo.Client.encode(
  					message.client,
  					writer.uint32(/* id 7, wireType 2 =*/ 58).fork()
  				).ldelim();
  			if (message.seq != null && message.hasOwnProperty("seq"))
  				writer.uint32(/* id 8, wireType 0 =*/ 64).int32(message.seq);
  			if (message.instanceID != null && message.hasOwnProperty("instanceID"))
  				writer.uint32(/* id 9, wireType 2 =*/ 74).string(message.instanceID);
  			if (message.metadata != null && message.hasOwnProperty("metadata"))
  				writer.uint32(/* id 10, wireType 2 =*/ 82).string(message.metadata);
  			return writer;
  		};
  
  		/**
  		 * Encodes the specified PacketInfo message, length delimited. Does not implicitly {@link packets.PacketInfo.verify|verify} messages.
  		 * @function encodeDelimited
  		 * @memberof packets.PacketInfo
  		 * @static
  		 * @param {packets.IPacketInfo} message PacketInfo message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketInfo.encodeDelimited = function encodeDelimited(message, writer) {
  			return this.encode(message, writer).ldelim();
  		};
  
  		/**
  		 * Decodes a PacketInfo message from the specified reader or buffer.
  		 * @function decode
  		 * @memberof packets.PacketInfo
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @param {number} [length] Message length if known beforehand
  		 * @returns {packets.PacketInfo} PacketInfo
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketInfo.decode = function decode(reader, length) {
  			if (!(reader instanceof $Reader)) reader = $Reader.create(reader);
  			var end = length === undefined ? reader.len : reader.pos + length,
  				message = new $root.packets.PacketInfo();
  			while (reader.pos < end) {
  				var tag = reader.uint32();
  				switch (tag >>> 3) {
  					case 1:
  						message.ver = reader.string();
  						break;
  					case 2:
  						message.sender = reader.string();
  						break;
  					case 3:
  						message.services = reader.string();
  						break;
  					case 4:
  						message.config = reader.string();
  						break;
  					case 5:
  						if (!(message.ipList && message.ipList.length)) message.ipList = [];
  						message.ipList.push(reader.string());
  						break;
  					case 6:
  						message.hostname = reader.string();
  						break;
  					case 7:
  						message.client = $root.packets.PacketInfo.Client.decode(
  							reader,
  							reader.uint32()
  						);
  						break;
  					case 8:
  						message.seq = reader.int32();
  						break;
  					case 9:
  						message.instanceID = reader.string();
  						break;
  					case 10:
  						message.metadata = reader.string();
  						break;
  					default:
  						reader.skipType(tag & 7);
  						break;
  				}
  			}
  			return message;
  		};
  
  		/**
  		 * Decodes a PacketInfo message from the specified reader or buffer, length delimited.
  		 * @function decodeDelimited
  		 * @memberof packets.PacketInfo
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @returns {packets.PacketInfo} PacketInfo
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketInfo.decodeDelimited = function decodeDelimited(reader) {
  			if (!(reader instanceof $Reader)) reader = new $Reader(reader);
  			return this.decode(reader, reader.uint32());
  		};
  
  		/**
  		 * Verifies a PacketInfo message.
  		 * @function verify
  		 * @memberof packets.PacketInfo
  		 * @static
  		 * @param {Object.<string,*>} message Plain object to verify
  		 * @returns {string|null} `null` if valid, otherwise the reason why it is not
  		 */
  		PacketInfo.verify = function verify(message) {
  			if (typeof message !== "object" || message === null) return "object expected";
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				if (!$util.isString(message.ver)) return "ver: string expected";
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				if (!$util.isString(message.sender)) return "sender: string expected";
  			if (message.services != null && message.hasOwnProperty("services"))
  				if (!$util.isString(message.services)) return "services: string expected";
  			if (message.config != null && message.hasOwnProperty("config"))
  				if (!$util.isString(message.config)) return "config: string expected";
  			if (message.ipList != null && message.hasOwnProperty("ipList")) {
  				if (!Array.isArray(message.ipList)) return "ipList: array expected";
  				for (var i = 0; i < message.ipList.length; ++i)
  					if (!$util.isString(message.ipList[i])) return "ipList: string[] expected";
  			}
  			if (message.hostname != null && message.hasOwnProperty("hostname"))
  				if (!$util.isString(message.hostname)) return "hostname: string expected";
  			if (message.client != null && message.hasOwnProperty("client")) {
  				var error = $root.packets.PacketInfo.Client.verify(message.client);
  				if (error) return "client." + error;
  			}
  			if (message.seq != null && message.hasOwnProperty("seq"))
  				if (!$util.isInteger(message.seq)) return "seq: integer expected";
  			if (message.instanceID != null && message.hasOwnProperty("instanceID"))
  				if (!$util.isString(message.instanceID)) return "instanceID: string expected";
  			if (message.metadata != null && message.hasOwnProperty("metadata"))
  				if (!$util.isString(message.metadata)) return "metadata: string expected";
  			return null;
  		};
  
  		/**
  		 * Creates a PacketInfo message from a plain object. Also converts values to their respective internal types.
  		 * @function fromObject
  		 * @memberof packets.PacketInfo
  		 * @static
  		 * @param {Object.<string,*>} object Plain object
  		 * @returns {packets.PacketInfo} PacketInfo
  		 */
  		PacketInfo.fromObject = function fromObject(object) {
  			if (object instanceof $root.packets.PacketInfo) return object;
  			var message = new $root.packets.PacketInfo();
  			if (object.ver != null) message.ver = String(object.ver);
  			if (object.sender != null) message.sender = String(object.sender);
  			if (object.services != null) message.services = String(object.services);
  			if (object.config != null) message.config = String(object.config);
  			if (object.ipList) {
  				if (!Array.isArray(object.ipList))
  					throw TypeError(".packets.PacketInfo.ipList: array expected");
  				message.ipList = [];
  				for (var i = 0; i < object.ipList.length; ++i)
  					message.ipList[i] = String(object.ipList[i]);
  			}
  			if (object.hostname != null) message.hostname = String(object.hostname);
  			if (object.client != null) {
  				if (typeof object.client !== "object")
  					throw TypeError(".packets.PacketInfo.client: object expected");
  				message.client = $root.packets.PacketInfo.Client.fromObject(object.client);
  			}
  			if (object.seq != null) message.seq = object.seq | 0;
  			if (object.instanceID != null) message.instanceID = String(object.instanceID);
  			if (object.metadata != null) message.metadata = String(object.metadata);
  			return message;
  		};
  
  		/**
  		 * Creates a plain object from a PacketInfo message. Also converts values to other types if specified.
  		 * @function toObject
  		 * @memberof packets.PacketInfo
  		 * @static
  		 * @param {packets.PacketInfo} message PacketInfo
  		 * @param {$protobuf.IConversionOptions} [options] Conversion options
  		 * @returns {Object.<string,*>} Plain object
  		 */
  		PacketInfo.toObject = function toObject(message, options) {
  			if (!options) options = {};
  			var object = {};
  			if (options.arrays || options.defaults) object.ipList = [];
  			if (options.defaults) {
  				object.ver = "";
  				object.sender = "";
  				object.services = "";
  				object.config = "";
  				object.hostname = "";
  				object.client = null;
  				object.seq = 0;
  				object.instanceID = "";
  				object.metadata = "";
  			}
  			if (message.ver != null && message.hasOwnProperty("ver")) object.ver = message.ver;
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				object.sender = message.sender;
  			if (message.services != null && message.hasOwnProperty("services"))
  				object.services = message.services;
  			if (message.config != null && message.hasOwnProperty("config"))
  				object.config = message.config;
  			if (message.ipList && message.ipList.length) {
  				object.ipList = [];
  				for (var j = 0; j < message.ipList.length; ++j)
  					object.ipList[j] = message.ipList[j];
  			}
  			if (message.hostname != null && message.hasOwnProperty("hostname"))
  				object.hostname = message.hostname;
  			if (message.client != null && message.hasOwnProperty("client"))
  				object.client = $root.packets.PacketInfo.Client.toObject(message.client, options);
  			if (message.seq != null && message.hasOwnProperty("seq")) object.seq = message.seq;
  			if (message.instanceID != null && message.hasOwnProperty("instanceID"))
  				object.instanceID = message.instanceID;
  			if (message.metadata != null && message.hasOwnProperty("metadata"))
  				object.metadata = message.metadata;
  			return object;
  		};
  
  		/**
  		 * Converts this PacketInfo to JSON.
  		 * @function toJSON
  		 * @memberof packets.PacketInfo
  		 * @instance
  		 * @returns {Object.<string,*>} JSON object
  		 */
  		PacketInfo.prototype.toJSON = function toJSON() {
  			return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
  		};
  
  		PacketInfo.Client = (function () {
  			/**
  			 * Properties of a Client.
  			 * @memberof packets.PacketInfo
  			 * @interface IClient
  			 * @property {string|null} [type] Client type
  			 * @property {string|null} [version] Client version
  			 * @property {string|null} [langVersion] Client langVersion
  			 */
  
  			/**
  			 * Constructs a new Client.
  			 * @memberof packets.PacketInfo
  			 * @classdesc Represents a Client.
  			 * @implements IClient
  			 * @constructor
  			 * @param {packets.PacketInfo.IClient=} [properties] Properties to set
  			 */
  			function Client(properties) {
  				if (properties)
  					for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
  						if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];
  			}
  
  			/**
  			 * Client type.
  			 * @member {string} type
  			 * @memberof packets.PacketInfo.Client
  			 * @instance
  			 */
  			Client.prototype.type = "";
  
  			/**
  			 * Client version.
  			 * @member {string} version
  			 * @memberof packets.PacketInfo.Client
  			 * @instance
  			 */
  			Client.prototype.version = "";
  
  			/**
  			 * Client langVersion.
  			 * @member {string} langVersion
  			 * @memberof packets.PacketInfo.Client
  			 * @instance
  			 */
  			Client.prototype.langVersion = "";
  
  			/**
  			 * Creates a new Client instance using the specified properties.
  			 * @function create
  			 * @memberof packets.PacketInfo.Client
  			 * @static
  			 * @param {packets.PacketInfo.IClient=} [properties] Properties to set
  			 * @returns {packets.PacketInfo.Client} Client instance
  			 */
  			Client.create = function create(properties) {
  				return new Client(properties);
  			};
  
  			/**
  			 * Encodes the specified Client message. Does not implicitly {@link packets.PacketInfo.Client.verify|verify} messages.
  			 * @function encode
  			 * @memberof packets.PacketInfo.Client
  			 * @static
  			 * @param {packets.PacketInfo.IClient} message Client message or plain object to encode
  			 * @param {$protobuf.Writer} [writer] Writer to encode to
  			 * @returns {$protobuf.Writer} Writer
  			 */
  			Client.encode = function encode(message, writer) {
  				if (!writer) writer = $Writer.create();
  				if (message.type != null && message.hasOwnProperty("type"))
  					writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.type);
  				if (message.version != null && message.hasOwnProperty("version"))
  					writer.uint32(/* id 2, wireType 2 =*/ 18).string(message.version);
  				if (message.langVersion != null && message.hasOwnProperty("langVersion"))
  					writer.uint32(/* id 3, wireType 2 =*/ 26).string(message.langVersion);
  				return writer;
  			};
  
  			/**
  			 * Encodes the specified Client message, length delimited. Does not implicitly {@link packets.PacketInfo.Client.verify|verify} messages.
  			 * @function encodeDelimited
  			 * @memberof packets.PacketInfo.Client
  			 * @static
  			 * @param {packets.PacketInfo.IClient} message Client message or plain object to encode
  			 * @param {$protobuf.Writer} [writer] Writer to encode to
  			 * @returns {$protobuf.Writer} Writer
  			 */
  			Client.encodeDelimited = function encodeDelimited(message, writer) {
  				return this.encode(message, writer).ldelim();
  			};
  
  			/**
  			 * Decodes a Client message from the specified reader or buffer.
  			 * @function decode
  			 * @memberof packets.PacketInfo.Client
  			 * @static
  			 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  			 * @param {number} [length] Message length if known beforehand
  			 * @returns {packets.PacketInfo.Client} Client
  			 * @throws {Error} If the payload is not a reader or valid buffer
  			 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  			 */
  			Client.decode = function decode(reader, length) {
  				if (!(reader instanceof $Reader)) reader = $Reader.create(reader);
  				var end = length === undefined ? reader.len : reader.pos + length,
  					message = new $root.packets.PacketInfo.Client();
  				while (reader.pos < end) {
  					var tag = reader.uint32();
  					switch (tag >>> 3) {
  						case 1:
  							message.type = reader.string();
  							break;
  						case 2:
  							message.version = reader.string();
  							break;
  						case 3:
  							message.langVersion = reader.string();
  							break;
  						default:
  							reader.skipType(tag & 7);
  							break;
  					}
  				}
  				return message;
  			};
  
  			/**
  			 * Decodes a Client message from the specified reader or buffer, length delimited.
  			 * @function decodeDelimited
  			 * @memberof packets.PacketInfo.Client
  			 * @static
  			 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  			 * @returns {packets.PacketInfo.Client} Client
  			 * @throws {Error} If the payload is not a reader or valid buffer
  			 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  			 */
  			Client.decodeDelimited = function decodeDelimited(reader) {
  				if (!(reader instanceof $Reader)) reader = new $Reader(reader);
  				return this.decode(reader, reader.uint32());
  			};
  
  			/**
  			 * Verifies a Client message.
  			 * @function verify
  			 * @memberof packets.PacketInfo.Client
  			 * @static
  			 * @param {Object.<string,*>} message Plain object to verify
  			 * @returns {string|null} `null` if valid, otherwise the reason why it is not
  			 */
  			Client.verify = function verify(message) {
  				if (typeof message !== "object" || message === null) return "object expected";
  				if (message.type != null && message.hasOwnProperty("type"))
  					if (!$util.isString(message.type)) return "type: string expected";
  				if (message.version != null && message.hasOwnProperty("version"))
  					if (!$util.isString(message.version)) return "version: string expected";
  				if (message.langVersion != null && message.hasOwnProperty("langVersion"))
  					if (!$util.isString(message.langVersion)) return "langVersion: string expected";
  				return null;
  			};
  
  			/**
  			 * Creates a Client message from a plain object. Also converts values to their respective internal types.
  			 * @function fromObject
  			 * @memberof packets.PacketInfo.Client
  			 * @static
  			 * @param {Object.<string,*>} object Plain object
  			 * @returns {packets.PacketInfo.Client} Client
  			 */
  			Client.fromObject = function fromObject(object) {
  				if (object instanceof $root.packets.PacketInfo.Client) return object;
  				var message = new $root.packets.PacketInfo.Client();
  				if (object.type != null) message.type = String(object.type);
  				if (object.version != null) message.version = String(object.version);
  				if (object.langVersion != null) message.langVersion = String(object.langVersion);
  				return message;
  			};
  
  			/**
  			 * Creates a plain object from a Client message. Also converts values to other types if specified.
  			 * @function toObject
  			 * @memberof packets.PacketInfo.Client
  			 * @static
  			 * @param {packets.PacketInfo.Client} message Client
  			 * @param {$protobuf.IConversionOptions} [options] Conversion options
  			 * @returns {Object.<string,*>} Plain object
  			 */
  			Client.toObject = function toObject(message, options) {
  				if (!options) options = {};
  				var object = {};
  				if (options.defaults) {
  					object.type = "";
  					object.version = "";
  					object.langVersion = "";
  				}
  				if (message.type != null && message.hasOwnProperty("type"))
  					object.type = message.type;
  				if (message.version != null && message.hasOwnProperty("version"))
  					object.version = message.version;
  				if (message.langVersion != null && message.hasOwnProperty("langVersion"))
  					object.langVersion = message.langVersion;
  				return object;
  			};
  
  			/**
  			 * Converts this Client to JSON.
  			 * @function toJSON
  			 * @memberof packets.PacketInfo.Client
  			 * @instance
  			 * @returns {Object.<string,*>} JSON object
  			 */
  			Client.prototype.toJSON = function toJSON() {
  				return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
  			};
  
  			return Client;
  		})();
  
  		return PacketInfo;
  	})();
  
  	packets.PacketDisconnect = (function () {
  		/**
  		 * Properties of a PacketDisconnect.
  		 * @memberof packets
  		 * @interface IPacketDisconnect
  		 * @property {string|null} [ver] PacketDisconnect ver
  		 * @property {string|null} [sender] PacketDisconnect sender
  		 */
  
  		/**
  		 * Constructs a new PacketDisconnect.
  		 * @memberof packets
  		 * @classdesc Represents a PacketDisconnect.
  		 * @implements IPacketDisconnect
  		 * @constructor
  		 * @param {packets.IPacketDisconnect=} [properties] Properties to set
  		 */
  		function PacketDisconnect(properties) {
  			if (properties)
  				for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
  					if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];
  		}
  
  		/**
  		 * PacketDisconnect ver.
  		 * @member {string} ver
  		 * @memberof packets.PacketDisconnect
  		 * @instance
  		 */
  		PacketDisconnect.prototype.ver = "";
  
  		/**
  		 * PacketDisconnect sender.
  		 * @member {string} sender
  		 * @memberof packets.PacketDisconnect
  		 * @instance
  		 */
  		PacketDisconnect.prototype.sender = "";
  
  		/**
  		 * Creates a new PacketDisconnect instance using the specified properties.
  		 * @function create
  		 * @memberof packets.PacketDisconnect
  		 * @static
  		 * @param {packets.IPacketDisconnect=} [properties] Properties to set
  		 * @returns {packets.PacketDisconnect} PacketDisconnect instance
  		 */
  		PacketDisconnect.create = function create(properties) {
  			return new PacketDisconnect(properties);
  		};
  
  		/**
  		 * Encodes the specified PacketDisconnect message. Does not implicitly {@link packets.PacketDisconnect.verify|verify} messages.
  		 * @function encode
  		 * @memberof packets.PacketDisconnect
  		 * @static
  		 * @param {packets.IPacketDisconnect} message PacketDisconnect message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketDisconnect.encode = function encode(message, writer) {
  			if (!writer) writer = $Writer.create();
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.ver);
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				writer.uint32(/* id 2, wireType 2 =*/ 18).string(message.sender);
  			return writer;
  		};
  
  		/**
  		 * Encodes the specified PacketDisconnect message, length delimited. Does not implicitly {@link packets.PacketDisconnect.verify|verify} messages.
  		 * @function encodeDelimited
  		 * @memberof packets.PacketDisconnect
  		 * @static
  		 * @param {packets.IPacketDisconnect} message PacketDisconnect message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketDisconnect.encodeDelimited = function encodeDelimited(message, writer) {
  			return this.encode(message, writer).ldelim();
  		};
  
  		/**
  		 * Decodes a PacketDisconnect message from the specified reader or buffer.
  		 * @function decode
  		 * @memberof packets.PacketDisconnect
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @param {number} [length] Message length if known beforehand
  		 * @returns {packets.PacketDisconnect} PacketDisconnect
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketDisconnect.decode = function decode(reader, length) {
  			if (!(reader instanceof $Reader)) reader = $Reader.create(reader);
  			var end = length === undefined ? reader.len : reader.pos + length,
  				message = new $root.packets.PacketDisconnect();
  			while (reader.pos < end) {
  				var tag = reader.uint32();
  				switch (tag >>> 3) {
  					case 1:
  						message.ver = reader.string();
  						break;
  					case 2:
  						message.sender = reader.string();
  						break;
  					default:
  						reader.skipType(tag & 7);
  						break;
  				}
  			}
  			return message;
  		};
  
  		/**
  		 * Decodes a PacketDisconnect message from the specified reader or buffer, length delimited.
  		 * @function decodeDelimited
  		 * @memberof packets.PacketDisconnect
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @returns {packets.PacketDisconnect} PacketDisconnect
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketDisconnect.decodeDelimited = function decodeDelimited(reader) {
  			if (!(reader instanceof $Reader)) reader = new $Reader(reader);
  			return this.decode(reader, reader.uint32());
  		};
  
  		/**
  		 * Verifies a PacketDisconnect message.
  		 * @function verify
  		 * @memberof packets.PacketDisconnect
  		 * @static
  		 * @param {Object.<string,*>} message Plain object to verify
  		 * @returns {string|null} `null` if valid, otherwise the reason why it is not
  		 */
  		PacketDisconnect.verify = function verify(message) {
  			if (typeof message !== "object" || message === null) return "object expected";
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				if (!$util.isString(message.ver)) return "ver: string expected";
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				if (!$util.isString(message.sender)) return "sender: string expected";
  			return null;
  		};
  
  		/**
  		 * Creates a PacketDisconnect message from a plain object. Also converts values to their respective internal types.
  		 * @function fromObject
  		 * @memberof packets.PacketDisconnect
  		 * @static
  		 * @param {Object.<string,*>} object Plain object
  		 * @returns {packets.PacketDisconnect} PacketDisconnect
  		 */
  		PacketDisconnect.fromObject = function fromObject(object) {
  			if (object instanceof $root.packets.PacketDisconnect) return object;
  			var message = new $root.packets.PacketDisconnect();
  			if (object.ver != null) message.ver = String(object.ver);
  			if (object.sender != null) message.sender = String(object.sender);
  			return message;
  		};
  
  		/**
  		 * Creates a plain object from a PacketDisconnect message. Also converts values to other types if specified.
  		 * @function toObject
  		 * @memberof packets.PacketDisconnect
  		 * @static
  		 * @param {packets.PacketDisconnect} message PacketDisconnect
  		 * @param {$protobuf.IConversionOptions} [options] Conversion options
  		 * @returns {Object.<string,*>} Plain object
  		 */
  		PacketDisconnect.toObject = function toObject(message, options) {
  			if (!options) options = {};
  			var object = {};
  			if (options.defaults) {
  				object.ver = "";
  				object.sender = "";
  			}
  			if (message.ver != null && message.hasOwnProperty("ver")) object.ver = message.ver;
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				object.sender = message.sender;
  			return object;
  		};
  
  		/**
  		 * Converts this PacketDisconnect to JSON.
  		 * @function toJSON
  		 * @memberof packets.PacketDisconnect
  		 * @instance
  		 * @returns {Object.<string,*>} JSON object
  		 */
  		PacketDisconnect.prototype.toJSON = function toJSON() {
  			return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
  		};
  
  		return PacketDisconnect;
  	})();
  
  	packets.PacketHeartbeat = (function () {
  		/**
  		 * Properties of a PacketHeartbeat.
  		 * @memberof packets
  		 * @interface IPacketHeartbeat
  		 * @property {string|null} [ver] PacketHeartbeat ver
  		 * @property {string|null} [sender] PacketHeartbeat sender
  		 * @property {number|null} [cpu] PacketHeartbeat cpu
  		 */
  
  		/**
  		 * Constructs a new PacketHeartbeat.
  		 * @memberof packets
  		 * @classdesc Represents a PacketHeartbeat.
  		 * @implements IPacketHeartbeat
  		 * @constructor
  		 * @param {packets.IPacketHeartbeat=} [properties] Properties to set
  		 */
  		function PacketHeartbeat(properties) {
  			if (properties)
  				for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
  					if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];
  		}
  
  		/**
  		 * PacketHeartbeat ver.
  		 * @member {string} ver
  		 * @memberof packets.PacketHeartbeat
  		 * @instance
  		 */
  		PacketHeartbeat.prototype.ver = "";
  
  		/**
  		 * PacketHeartbeat sender.
  		 * @member {string} sender
  		 * @memberof packets.PacketHeartbeat
  		 * @instance
  		 */
  		PacketHeartbeat.prototype.sender = "";
  
  		/**
  		 * PacketHeartbeat cpu.
  		 * @member {number} cpu
  		 * @memberof packets.PacketHeartbeat
  		 * @instance
  		 */
  		PacketHeartbeat.prototype.cpu = 0;
  
  		/**
  		 * Creates a new PacketHeartbeat instance using the specified properties.
  		 * @function create
  		 * @memberof packets.PacketHeartbeat
  		 * @static
  		 * @param {packets.IPacketHeartbeat=} [properties] Properties to set
  		 * @returns {packets.PacketHeartbeat} PacketHeartbeat instance
  		 */
  		PacketHeartbeat.create = function create(properties) {
  			return new PacketHeartbeat(properties);
  		};
  
  		/**
  		 * Encodes the specified PacketHeartbeat message. Does not implicitly {@link packets.PacketHeartbeat.verify|verify} messages.
  		 * @function encode
  		 * @memberof packets.PacketHeartbeat
  		 * @static
  		 * @param {packets.IPacketHeartbeat} message PacketHeartbeat message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketHeartbeat.encode = function encode(message, writer) {
  			if (!writer) writer = $Writer.create();
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.ver);
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				writer.uint32(/* id 2, wireType 2 =*/ 18).string(message.sender);
  			if (message.cpu != null && message.hasOwnProperty("cpu"))
  				writer.uint32(/* id 3, wireType 1 =*/ 25).double(message.cpu);
  			return writer;
  		};
  
  		/**
  		 * Encodes the specified PacketHeartbeat message, length delimited. Does not implicitly {@link packets.PacketHeartbeat.verify|verify} messages.
  		 * @function encodeDelimited
  		 * @memberof packets.PacketHeartbeat
  		 * @static
  		 * @param {packets.IPacketHeartbeat} message PacketHeartbeat message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketHeartbeat.encodeDelimited = function encodeDelimited(message, writer) {
  			return this.encode(message, writer).ldelim();
  		};
  
  		/**
  		 * Decodes a PacketHeartbeat message from the specified reader or buffer.
  		 * @function decode
  		 * @memberof packets.PacketHeartbeat
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @param {number} [length] Message length if known beforehand
  		 * @returns {packets.PacketHeartbeat} PacketHeartbeat
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketHeartbeat.decode = function decode(reader, length) {
  			if (!(reader instanceof $Reader)) reader = $Reader.create(reader);
  			var end = length === undefined ? reader.len : reader.pos + length,
  				message = new $root.packets.PacketHeartbeat();
  			while (reader.pos < end) {
  				var tag = reader.uint32();
  				switch (tag >>> 3) {
  					case 1:
  						message.ver = reader.string();
  						break;
  					case 2:
  						message.sender = reader.string();
  						break;
  					case 3:
  						message.cpu = reader.double();
  						break;
  					default:
  						reader.skipType(tag & 7);
  						break;
  				}
  			}
  			return message;
  		};
  
  		/**
  		 * Decodes a PacketHeartbeat message from the specified reader or buffer, length delimited.
  		 * @function decodeDelimited
  		 * @memberof packets.PacketHeartbeat
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @returns {packets.PacketHeartbeat} PacketHeartbeat
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketHeartbeat.decodeDelimited = function decodeDelimited(reader) {
  			if (!(reader instanceof $Reader)) reader = new $Reader(reader);
  			return this.decode(reader, reader.uint32());
  		};
  
  		/**
  		 * Verifies a PacketHeartbeat message.
  		 * @function verify
  		 * @memberof packets.PacketHeartbeat
  		 * @static
  		 * @param {Object.<string,*>} message Plain object to verify
  		 * @returns {string|null} `null` if valid, otherwise the reason why it is not
  		 */
  		PacketHeartbeat.verify = function verify(message) {
  			if (typeof message !== "object" || message === null) return "object expected";
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				if (!$util.isString(message.ver)) return "ver: string expected";
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				if (!$util.isString(message.sender)) return "sender: string expected";
  			if (message.cpu != null && message.hasOwnProperty("cpu"))
  				if (typeof message.cpu !== "number") return "cpu: number expected";
  			return null;
  		};
  
  		/**
  		 * Creates a PacketHeartbeat message from a plain object. Also converts values to their respective internal types.
  		 * @function fromObject
  		 * @memberof packets.PacketHeartbeat
  		 * @static
  		 * @param {Object.<string,*>} object Plain object
  		 * @returns {packets.PacketHeartbeat} PacketHeartbeat
  		 */
  		PacketHeartbeat.fromObject = function fromObject(object) {
  			if (object instanceof $root.packets.PacketHeartbeat) return object;
  			var message = new $root.packets.PacketHeartbeat();
  			if (object.ver != null) message.ver = String(object.ver);
  			if (object.sender != null) message.sender = String(object.sender);
  			if (object.cpu != null) message.cpu = Number(object.cpu);
  			return message;
  		};
  
  		/**
  		 * Creates a plain object from a PacketHeartbeat message. Also converts values to other types if specified.
  		 * @function toObject
  		 * @memberof packets.PacketHeartbeat
  		 * @static
  		 * @param {packets.PacketHeartbeat} message PacketHeartbeat
  		 * @param {$protobuf.IConversionOptions} [options] Conversion options
  		 * @returns {Object.<string,*>} Plain object
  		 */
  		PacketHeartbeat.toObject = function toObject(message, options) {
  			if (!options) options = {};
  			var object = {};
  			if (options.defaults) {
  				object.ver = "";
  				object.sender = "";
  				object.cpu = 0;
  			}
  			if (message.ver != null && message.hasOwnProperty("ver")) object.ver = message.ver;
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				object.sender = message.sender;
  			if (message.cpu != null && message.hasOwnProperty("cpu"))
  				object.cpu =
  					options.json && !isFinite(message.cpu) ? String(message.cpu) : message.cpu;
  			return object;
  		};
  
  		/**
  		 * Converts this PacketHeartbeat to JSON.
  		 * @function toJSON
  		 * @memberof packets.PacketHeartbeat
  		 * @instance
  		 * @returns {Object.<string,*>} JSON object
  		 */
  		PacketHeartbeat.prototype.toJSON = function toJSON() {
  			return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
  		};
  
  		return PacketHeartbeat;
  	})();
  
  	packets.PacketPing = (function () {
  		/**
  		 * Properties of a PacketPing.
  		 * @memberof packets
  		 * @interface IPacketPing
  		 * @property {string|null} [ver] PacketPing ver
  		 * @property {string|null} [sender] PacketPing sender
  		 * @property {number|Long|null} [time] PacketPing time
  		 * @property {string|null} [id] PacketPing id
  		 */
  
  		/**
  		 * Constructs a new PacketPing.
  		 * @memberof packets
  		 * @classdesc Represents a PacketPing.
  		 * @implements IPacketPing
  		 * @constructor
  		 * @param {packets.IPacketPing=} [properties] Properties to set
  		 */
  		function PacketPing(properties) {
  			if (properties)
  				for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
  					if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];
  		}
  
  		/**
  		 * PacketPing ver.
  		 * @member {string} ver
  		 * @memberof packets.PacketPing
  		 * @instance
  		 */
  		PacketPing.prototype.ver = "";
  
  		/**
  		 * PacketPing sender.
  		 * @member {string} sender
  		 * @memberof packets.PacketPing
  		 * @instance
  		 */
  		PacketPing.prototype.sender = "";
  
  		/**
  		 * PacketPing time.
  		 * @member {number|Long} time
  		 * @memberof packets.PacketPing
  		 * @instance
  		 */
  		PacketPing.prototype.time = $util.Long ? $util.Long.fromBits(0, 0, false) : 0;
  
  		/**
  		 * PacketPing id.
  		 * @member {string} id
  		 * @memberof packets.PacketPing
  		 * @instance
  		 */
  		PacketPing.prototype.id = "";
  
  		/**
  		 * Creates a new PacketPing instance using the specified properties.
  		 * @function create
  		 * @memberof packets.PacketPing
  		 * @static
  		 * @param {packets.IPacketPing=} [properties] Properties to set
  		 * @returns {packets.PacketPing} PacketPing instance
  		 */
  		PacketPing.create = function create(properties) {
  			return new PacketPing(properties);
  		};
  
  		/**
  		 * Encodes the specified PacketPing message. Does not implicitly {@link packets.PacketPing.verify|verify} messages.
  		 * @function encode
  		 * @memberof packets.PacketPing
  		 * @static
  		 * @param {packets.IPacketPing} message PacketPing message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketPing.encode = function encode(message, writer) {
  			if (!writer) writer = $Writer.create();
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.ver);
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				writer.uint32(/* id 2, wireType 2 =*/ 18).string(message.sender);
  			if (message.time != null && message.hasOwnProperty("time"))
  				writer.uint32(/* id 3, wireType 0 =*/ 24).int64(message.time);
  			if (message.id != null && message.hasOwnProperty("id"))
  				writer.uint32(/* id 4, wireType 2 =*/ 34).string(message.id);
  			return writer;
  		};
  
  		/**
  		 * Encodes the specified PacketPing message, length delimited. Does not implicitly {@link packets.PacketPing.verify|verify} messages.
  		 * @function encodeDelimited
  		 * @memberof packets.PacketPing
  		 * @static
  		 * @param {packets.IPacketPing} message PacketPing message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketPing.encodeDelimited = function encodeDelimited(message, writer) {
  			return this.encode(message, writer).ldelim();
  		};
  
  		/**
  		 * Decodes a PacketPing message from the specified reader or buffer.
  		 * @function decode
  		 * @memberof packets.PacketPing
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @param {number} [length] Message length if known beforehand
  		 * @returns {packets.PacketPing} PacketPing
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketPing.decode = function decode(reader, length) {
  			if (!(reader instanceof $Reader)) reader = $Reader.create(reader);
  			var end = length === undefined ? reader.len : reader.pos + length,
  				message = new $root.packets.PacketPing();
  			while (reader.pos < end) {
  				var tag = reader.uint32();
  				switch (tag >>> 3) {
  					case 1:
  						message.ver = reader.string();
  						break;
  					case 2:
  						message.sender = reader.string();
  						break;
  					case 3:
  						message.time = reader.int64();
  						break;
  					case 4:
  						message.id = reader.string();
  						break;
  					default:
  						reader.skipType(tag & 7);
  						break;
  				}
  			}
  			return message;
  		};
  
  		/**
  		 * Decodes a PacketPing message from the specified reader or buffer, length delimited.
  		 * @function decodeDelimited
  		 * @memberof packets.PacketPing
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @returns {packets.PacketPing} PacketPing
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketPing.decodeDelimited = function decodeDelimited(reader) {
  			if (!(reader instanceof $Reader)) reader = new $Reader(reader);
  			return this.decode(reader, reader.uint32());
  		};
  
  		/**
  		 * Verifies a PacketPing message.
  		 * @function verify
  		 * @memberof packets.PacketPing
  		 * @static
  		 * @param {Object.<string,*>} message Plain object to verify
  		 * @returns {string|null} `null` if valid, otherwise the reason why it is not
  		 */
  		PacketPing.verify = function verify(message) {
  			if (typeof message !== "object" || message === null) return "object expected";
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				if (!$util.isString(message.ver)) return "ver: string expected";
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				if (!$util.isString(message.sender)) return "sender: string expected";
  			if (message.time != null && message.hasOwnProperty("time"))
  				if (
  					!$util.isInteger(message.time) &&
  					!(
  						message.time &&
  						$util.isInteger(message.time.low) &&
  						$util.isInteger(message.time.high)
  					)
  				)
  					return "time: integer|Long expected";
  			if (message.id != null && message.hasOwnProperty("id"))
  				if (!$util.isString(message.id)) return "id: string expected";
  			return null;
  		};
  
  		/**
  		 * Creates a PacketPing message from a plain object. Also converts values to their respective internal types.
  		 * @function fromObject
  		 * @memberof packets.PacketPing
  		 * @static
  		 * @param {Object.<string,*>} object Plain object
  		 * @returns {packets.PacketPing} PacketPing
  		 */
  		PacketPing.fromObject = function fromObject(object) {
  			if (object instanceof $root.packets.PacketPing) return object;
  			var message = new $root.packets.PacketPing();
  			if (object.ver != null) message.ver = String(object.ver);
  			if (object.sender != null) message.sender = String(object.sender);
  			if (object.time != null)
  				if ($util.Long) (message.time = $util.Long.fromValue(object.time)).unsigned = false;
  				else if (typeof object.time === "string") message.time = parseInt(object.time, 10);
  				else if (typeof object.time === "number") message.time = object.time;
  				else if (typeof object.time === "object")
  					message.time = new $util.LongBits(
  						object.time.low >>> 0,
  						object.time.high >>> 0
  					).toNumber();
  			if (object.id != null) message.id = String(object.id);
  			return message;
  		};
  
  		/**
  		 * Creates a plain object from a PacketPing message. Also converts values to other types if specified.
  		 * @function toObject
  		 * @memberof packets.PacketPing
  		 * @static
  		 * @param {packets.PacketPing} message PacketPing
  		 * @param {$protobuf.IConversionOptions} [options] Conversion options
  		 * @returns {Object.<string,*>} Plain object
  		 */
  		PacketPing.toObject = function toObject(message, options) {
  			if (!options) options = {};
  			var object = {};
  			if (options.defaults) {
  				object.ver = "";
  				object.sender = "";
  				if ($util.Long) {
  					var long = new $util.Long(0, 0, false);
  					object.time =
  						options.longs === String
  							? long.toString()
  							: options.longs === Number
  							? long.toNumber()
  							: long;
  				} else object.time = options.longs === String ? "0" : 0;
  				object.id = "";
  			}
  			if (message.ver != null && message.hasOwnProperty("ver")) object.ver = message.ver;
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				object.sender = message.sender;
  			if (message.time != null && message.hasOwnProperty("time"))
  				if (typeof message.time === "number")
  					object.time = options.longs === String ? String(message.time) : message.time;
  				else
  					object.time =
  						options.longs === String
  							? $util.Long.prototype.toString.call(message.time)
  							: options.longs === Number
  							? new $util.LongBits(
  									message.time.low >>> 0,
  									message.time.high >>> 0
  							  ).toNumber()
  							: message.time;
  			if (message.id != null && message.hasOwnProperty("id")) object.id = message.id;
  			return object;
  		};
  
  		/**
  		 * Converts this PacketPing to JSON.
  		 * @function toJSON
  		 * @memberof packets.PacketPing
  		 * @instance
  		 * @returns {Object.<string,*>} JSON object
  		 */
  		PacketPing.prototype.toJSON = function toJSON() {
  			return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
  		};
  
  		return PacketPing;
  	})();
  
  	packets.PacketPong = (function () {
  		/**
  		 * Properties of a PacketPong.
  		 * @memberof packets
  		 * @interface IPacketPong
  		 * @property {string|null} [ver] PacketPong ver
  		 * @property {string|null} [sender] PacketPong sender
  		 * @property {number|Long|null} [time] PacketPong time
  		 * @property {number|Long|null} [arrived] PacketPong arrived
  		 * @property {string|null} [id] PacketPong id
  		 */
  
  		/**
  		 * Constructs a new PacketPong.
  		 * @memberof packets
  		 * @classdesc Represents a PacketPong.
  		 * @implements IPacketPong
  		 * @constructor
  		 * @param {packets.IPacketPong=} [properties] Properties to set
  		 */
  		function PacketPong(properties) {
  			if (properties)
  				for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
  					if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];
  		}
  
  		/**
  		 * PacketPong ver.
  		 * @member {string} ver
  		 * @memberof packets.PacketPong
  		 * @instance
  		 */
  		PacketPong.prototype.ver = "";
  
  		/**
  		 * PacketPong sender.
  		 * @member {string} sender
  		 * @memberof packets.PacketPong
  		 * @instance
  		 */
  		PacketPong.prototype.sender = "";
  
  		/**
  		 * PacketPong time.
  		 * @member {number|Long} time
  		 * @memberof packets.PacketPong
  		 * @instance
  		 */
  		PacketPong.prototype.time = $util.Long ? $util.Long.fromBits(0, 0, false) : 0;
  
  		/**
  		 * PacketPong arrived.
  		 * @member {number|Long} arrived
  		 * @memberof packets.PacketPong
  		 * @instance
  		 */
  		PacketPong.prototype.arrived = $util.Long ? $util.Long.fromBits(0, 0, false) : 0;
  
  		/**
  		 * PacketPong id.
  		 * @member {string} id
  		 * @memberof packets.PacketPong
  		 * @instance
  		 */
  		PacketPong.prototype.id = "";
  
  		/**
  		 * Creates a new PacketPong instance using the specified properties.
  		 * @function create
  		 * @memberof packets.PacketPong
  		 * @static
  		 * @param {packets.IPacketPong=} [properties] Properties to set
  		 * @returns {packets.PacketPong} PacketPong instance
  		 */
  		PacketPong.create = function create(properties) {
  			return new PacketPong(properties);
  		};
  
  		/**
  		 * Encodes the specified PacketPong message. Does not implicitly {@link packets.PacketPong.verify|verify} messages.
  		 * @function encode
  		 * @memberof packets.PacketPong
  		 * @static
  		 * @param {packets.IPacketPong} message PacketPong message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketPong.encode = function encode(message, writer) {
  			if (!writer) writer = $Writer.create();
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.ver);
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				writer.uint32(/* id 2, wireType 2 =*/ 18).string(message.sender);
  			if (message.time != null && message.hasOwnProperty("time"))
  				writer.uint32(/* id 3, wireType 0 =*/ 24).int64(message.time);
  			if (message.arrived != null && message.hasOwnProperty("arrived"))
  				writer.uint32(/* id 4, wireType 0 =*/ 32).int64(message.arrived);
  			if (message.id != null && message.hasOwnProperty("id"))
  				writer.uint32(/* id 5, wireType 2 =*/ 42).string(message.id);
  			return writer;
  		};
  
  		/**
  		 * Encodes the specified PacketPong message, length delimited. Does not implicitly {@link packets.PacketPong.verify|verify} messages.
  		 * @function encodeDelimited
  		 * @memberof packets.PacketPong
  		 * @static
  		 * @param {packets.IPacketPong} message PacketPong message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketPong.encodeDelimited = function encodeDelimited(message, writer) {
  			return this.encode(message, writer).ldelim();
  		};
  
  		/**
  		 * Decodes a PacketPong message from the specified reader or buffer.
  		 * @function decode
  		 * @memberof packets.PacketPong
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @param {number} [length] Message length if known beforehand
  		 * @returns {packets.PacketPong} PacketPong
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketPong.decode = function decode(reader, length) {
  			if (!(reader instanceof $Reader)) reader = $Reader.create(reader);
  			var end = length === undefined ? reader.len : reader.pos + length,
  				message = new $root.packets.PacketPong();
  			while (reader.pos < end) {
  				var tag = reader.uint32();
  				switch (tag >>> 3) {
  					case 1:
  						message.ver = reader.string();
  						break;
  					case 2:
  						message.sender = reader.string();
  						break;
  					case 3:
  						message.time = reader.int64();
  						break;
  					case 4:
  						message.arrived = reader.int64();
  						break;
  					case 5:
  						message.id = reader.string();
  						break;
  					default:
  						reader.skipType(tag & 7);
  						break;
  				}
  			}
  			return message;
  		};
  
  		/**
  		 * Decodes a PacketPong message from the specified reader or buffer, length delimited.
  		 * @function decodeDelimited
  		 * @memberof packets.PacketPong
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @returns {packets.PacketPong} PacketPong
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketPong.decodeDelimited = function decodeDelimited(reader) {
  			if (!(reader instanceof $Reader)) reader = new $Reader(reader);
  			return this.decode(reader, reader.uint32());
  		};
  
  		/**
  		 * Verifies a PacketPong message.
  		 * @function verify
  		 * @memberof packets.PacketPong
  		 * @static
  		 * @param {Object.<string,*>} message Plain object to verify
  		 * @returns {string|null} `null` if valid, otherwise the reason why it is not
  		 */
  		PacketPong.verify = function verify(message) {
  			if (typeof message !== "object" || message === null) return "object expected";
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				if (!$util.isString(message.ver)) return "ver: string expected";
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				if (!$util.isString(message.sender)) return "sender: string expected";
  			if (message.time != null && message.hasOwnProperty("time"))
  				if (
  					!$util.isInteger(message.time) &&
  					!(
  						message.time &&
  						$util.isInteger(message.time.low) &&
  						$util.isInteger(message.time.high)
  					)
  				)
  					return "time: integer|Long expected";
  			if (message.arrived != null && message.hasOwnProperty("arrived"))
  				if (
  					!$util.isInteger(message.arrived) &&
  					!(
  						message.arrived &&
  						$util.isInteger(message.arrived.low) &&
  						$util.isInteger(message.arrived.high)
  					)
  				)
  					return "arrived: integer|Long expected";
  			if (message.id != null && message.hasOwnProperty("id"))
  				if (!$util.isString(message.id)) return "id: string expected";
  			return null;
  		};
  
  		/**
  		 * Creates a PacketPong message from a plain object. Also converts values to their respective internal types.
  		 * @function fromObject
  		 * @memberof packets.PacketPong
  		 * @static
  		 * @param {Object.<string,*>} object Plain object
  		 * @returns {packets.PacketPong} PacketPong
  		 */
  		PacketPong.fromObject = function fromObject(object) {
  			if (object instanceof $root.packets.PacketPong) return object;
  			var message = new $root.packets.PacketPong();
  			if (object.ver != null) message.ver = String(object.ver);
  			if (object.sender != null) message.sender = String(object.sender);
  			if (object.time != null)
  				if ($util.Long) (message.time = $util.Long.fromValue(object.time)).unsigned = false;
  				else if (typeof object.time === "string") message.time = parseInt(object.time, 10);
  				else if (typeof object.time === "number") message.time = object.time;
  				else if (typeof object.time === "object")
  					message.time = new $util.LongBits(
  						object.time.low >>> 0,
  						object.time.high >>> 0
  					).toNumber();
  			if (object.arrived != null)
  				if ($util.Long)
  					(message.arrived = $util.Long.fromValue(object.arrived)).unsigned = false;
  				else if (typeof object.arrived === "string")
  					message.arrived = parseInt(object.arrived, 10);
  				else if (typeof object.arrived === "number") message.arrived = object.arrived;
  				else if (typeof object.arrived === "object")
  					message.arrived = new $util.LongBits(
  						object.arrived.low >>> 0,
  						object.arrived.high >>> 0
  					).toNumber();
  			if (object.id != null) message.id = String(object.id);
  			return message;
  		};
  
  		/**
  		 * Creates a plain object from a PacketPong message. Also converts values to other types if specified.
  		 * @function toObject
  		 * @memberof packets.PacketPong
  		 * @static
  		 * @param {packets.PacketPong} message PacketPong
  		 * @param {$protobuf.IConversionOptions} [options] Conversion options
  		 * @returns {Object.<string,*>} Plain object
  		 */
  		PacketPong.toObject = function toObject(message, options) {
  			if (!options) options = {};
  			var object = {};
  			if (options.defaults) {
  				object.ver = "";
  				object.sender = "";
  				if ($util.Long) {
  					var long = new $util.Long(0, 0, false);
  					object.time =
  						options.longs === String
  							? long.toString()
  							: options.longs === Number
  							? long.toNumber()
  							: long;
  				} else object.time = options.longs === String ? "0" : 0;
  				if ($util.Long) {
  					var long = new $util.Long(0, 0, false);
  					object.arrived =
  						options.longs === String
  							? long.toString()
  							: options.longs === Number
  							? long.toNumber()
  							: long;
  				} else object.arrived = options.longs === String ? "0" : 0;
  				object.id = "";
  			}
  			if (message.ver != null && message.hasOwnProperty("ver")) object.ver = message.ver;
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				object.sender = message.sender;
  			if (message.time != null && message.hasOwnProperty("time"))
  				if (typeof message.time === "number")
  					object.time = options.longs === String ? String(message.time) : message.time;
  				else
  					object.time =
  						options.longs === String
  							? $util.Long.prototype.toString.call(message.time)
  							: options.longs === Number
  							? new $util.LongBits(
  									message.time.low >>> 0,
  									message.time.high >>> 0
  							  ).toNumber()
  							: message.time;
  			if (message.arrived != null && message.hasOwnProperty("arrived"))
  				if (typeof message.arrived === "number")
  					object.arrived =
  						options.longs === String ? String(message.arrived) : message.arrived;
  				else
  					object.arrived =
  						options.longs === String
  							? $util.Long.prototype.toString.call(message.arrived)
  							: options.longs === Number
  							? new $util.LongBits(
  									message.arrived.low >>> 0,
  									message.arrived.high >>> 0
  							  ).toNumber()
  							: message.arrived;
  			if (message.id != null && message.hasOwnProperty("id")) object.id = message.id;
  			return object;
  		};
  
  		/**
  		 * Converts this PacketPong to JSON.
  		 * @function toJSON
  		 * @memberof packets.PacketPong
  		 * @instance
  		 * @returns {Object.<string,*>} JSON object
  		 */
  		PacketPong.prototype.toJSON = function toJSON() {
  			return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
  		};
  
  		return PacketPong;
  	})();
  
  	packets.PacketGossipHello = (function () {
  		/**
  		 * Properties of a PacketGossipHello.
  		 * @memberof packets
  		 * @interface IPacketGossipHello
  		 * @property {string|null} [ver] PacketGossipHello ver
  		 * @property {string|null} [sender] PacketGossipHello sender
  		 * @property {string|null} [host] PacketGossipHello host
  		 * @property {number|null} [port] PacketGossipHello port
  		 */
  
  		/**
  		 * Constructs a new PacketGossipHello.
  		 * @memberof packets
  		 * @classdesc Represents a PacketGossipHello.
  		 * @implements IPacketGossipHello
  		 * @constructor
  		 * @param {packets.IPacketGossipHello=} [properties] Properties to set
  		 */
  		function PacketGossipHello(properties) {
  			if (properties)
  				for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
  					if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];
  		}
  
  		/**
  		 * PacketGossipHello ver.
  		 * @member {string} ver
  		 * @memberof packets.PacketGossipHello
  		 * @instance
  		 */
  		PacketGossipHello.prototype.ver = "";
  
  		/**
  		 * PacketGossipHello sender.
  		 * @member {string} sender
  		 * @memberof packets.PacketGossipHello
  		 * @instance
  		 */
  		PacketGossipHello.prototype.sender = "";
  
  		/**
  		 * PacketGossipHello host.
  		 * @member {string} host
  		 * @memberof packets.PacketGossipHello
  		 * @instance
  		 */
  		PacketGossipHello.prototype.host = "";
  
  		/**
  		 * PacketGossipHello port.
  		 * @member {number} port
  		 * @memberof packets.PacketGossipHello
  		 * @instance
  		 */
  		PacketGossipHello.prototype.port = 0;
  
  		/**
  		 * Creates a new PacketGossipHello instance using the specified properties.
  		 * @function create
  		 * @memberof packets.PacketGossipHello
  		 * @static
  		 * @param {packets.IPacketGossipHello=} [properties] Properties to set
  		 * @returns {packets.PacketGossipHello} PacketGossipHello instance
  		 */
  		PacketGossipHello.create = function create(properties) {
  			return new PacketGossipHello(properties);
  		};
  
  		/**
  		 * Encodes the specified PacketGossipHello message. Does not implicitly {@link packets.PacketGossipHello.verify|verify} messages.
  		 * @function encode
  		 * @memberof packets.PacketGossipHello
  		 * @static
  		 * @param {packets.IPacketGossipHello} message PacketGossipHello message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketGossipHello.encode = function encode(message, writer) {
  			if (!writer) writer = $Writer.create();
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.ver);
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				writer.uint32(/* id 2, wireType 2 =*/ 18).string(message.sender);
  			if (message.host != null && message.hasOwnProperty("host"))
  				writer.uint32(/* id 3, wireType 2 =*/ 26).string(message.host);
  			if (message.port != null && message.hasOwnProperty("port"))
  				writer.uint32(/* id 4, wireType 0 =*/ 32).int32(message.port);
  			return writer;
  		};
  
  		/**
  		 * Encodes the specified PacketGossipHello message, length delimited. Does not implicitly {@link packets.PacketGossipHello.verify|verify} messages.
  		 * @function encodeDelimited
  		 * @memberof packets.PacketGossipHello
  		 * @static
  		 * @param {packets.IPacketGossipHello} message PacketGossipHello message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketGossipHello.encodeDelimited = function encodeDelimited(message, writer) {
  			return this.encode(message, writer).ldelim();
  		};
  
  		/**
  		 * Decodes a PacketGossipHello message from the specified reader or buffer.
  		 * @function decode
  		 * @memberof packets.PacketGossipHello
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @param {number} [length] Message length if known beforehand
  		 * @returns {packets.PacketGossipHello} PacketGossipHello
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketGossipHello.decode = function decode(reader, length) {
  			if (!(reader instanceof $Reader)) reader = $Reader.create(reader);
  			var end = length === undefined ? reader.len : reader.pos + length,
  				message = new $root.packets.PacketGossipHello();
  			while (reader.pos < end) {
  				var tag = reader.uint32();
  				switch (tag >>> 3) {
  					case 1:
  						message.ver = reader.string();
  						break;
  					case 2:
  						message.sender = reader.string();
  						break;
  					case 3:
  						message.host = reader.string();
  						break;
  					case 4:
  						message.port = reader.int32();
  						break;
  					default:
  						reader.skipType(tag & 7);
  						break;
  				}
  			}
  			return message;
  		};
  
  		/**
  		 * Decodes a PacketGossipHello message from the specified reader or buffer, length delimited.
  		 * @function decodeDelimited
  		 * @memberof packets.PacketGossipHello
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @returns {packets.PacketGossipHello} PacketGossipHello
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketGossipHello.decodeDelimited = function decodeDelimited(reader) {
  			if (!(reader instanceof $Reader)) reader = new $Reader(reader);
  			return this.decode(reader, reader.uint32());
  		};
  
  		/**
  		 * Verifies a PacketGossipHello message.
  		 * @function verify
  		 * @memberof packets.PacketGossipHello
  		 * @static
  		 * @param {Object.<string,*>} message Plain object to verify
  		 * @returns {string|null} `null` if valid, otherwise the reason why it is not
  		 */
  		PacketGossipHello.verify = function verify(message) {
  			if (typeof message !== "object" || message === null) return "object expected";
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				if (!$util.isString(message.ver)) return "ver: string expected";
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				if (!$util.isString(message.sender)) return "sender: string expected";
  			if (message.host != null && message.hasOwnProperty("host"))
  				if (!$util.isString(message.host)) return "host: string expected";
  			if (message.port != null && message.hasOwnProperty("port"))
  				if (!$util.isInteger(message.port)) return "port: integer expected";
  			return null;
  		};
  
  		/**
  		 * Creates a PacketGossipHello message from a plain object. Also converts values to their respective internal types.
  		 * @function fromObject
  		 * @memberof packets.PacketGossipHello
  		 * @static
  		 * @param {Object.<string,*>} object Plain object
  		 * @returns {packets.PacketGossipHello} PacketGossipHello
  		 */
  		PacketGossipHello.fromObject = function fromObject(object) {
  			if (object instanceof $root.packets.PacketGossipHello) return object;
  			var message = new $root.packets.PacketGossipHello();
  			if (object.ver != null) message.ver = String(object.ver);
  			if (object.sender != null) message.sender = String(object.sender);
  			if (object.host != null) message.host = String(object.host);
  			if (object.port != null) message.port = object.port | 0;
  			return message;
  		};
  
  		/**
  		 * Creates a plain object from a PacketGossipHello message. Also converts values to other types if specified.
  		 * @function toObject
  		 * @memberof packets.PacketGossipHello
  		 * @static
  		 * @param {packets.PacketGossipHello} message PacketGossipHello
  		 * @param {$protobuf.IConversionOptions} [options] Conversion options
  		 * @returns {Object.<string,*>} Plain object
  		 */
  		PacketGossipHello.toObject = function toObject(message, options) {
  			if (!options) options = {};
  			var object = {};
  			if (options.defaults) {
  				object.ver = "";
  				object.sender = "";
  				object.host = "";
  				object.port = 0;
  			}
  			if (message.ver != null && message.hasOwnProperty("ver")) object.ver = message.ver;
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				object.sender = message.sender;
  			if (message.host != null && message.hasOwnProperty("host")) object.host = message.host;
  			if (message.port != null && message.hasOwnProperty("port")) object.port = message.port;
  			return object;
  		};
  
  		/**
  		 * Converts this PacketGossipHello to JSON.
  		 * @function toJSON
  		 * @memberof packets.PacketGossipHello
  		 * @instance
  		 * @returns {Object.<string,*>} JSON object
  		 */
  		PacketGossipHello.prototype.toJSON = function toJSON() {
  			return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
  		};
  
  		return PacketGossipHello;
  	})();
  
  	packets.PacketGossipRequest = (function () {
  		/**
  		 * Properties of a PacketGossipRequest.
  		 * @memberof packets
  		 * @interface IPacketGossipRequest
  		 * @property {string|null} [ver] PacketGossipRequest ver
  		 * @property {string|null} [sender] PacketGossipRequest sender
  		 * @property {string|null} [online] PacketGossipRequest online
  		 * @property {string|null} [offline] PacketGossipRequest offline
  		 */
  
  		/**
  		 * Constructs a new PacketGossipRequest.
  		 * @memberof packets
  		 * @classdesc Represents a PacketGossipRequest.
  		 * @implements IPacketGossipRequest
  		 * @constructor
  		 * @param {packets.IPacketGossipRequest=} [properties] Properties to set
  		 */
  		function PacketGossipRequest(properties) {
  			if (properties)
  				for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
  					if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];
  		}
  
  		/**
  		 * PacketGossipRequest ver.
  		 * @member {string} ver
  		 * @memberof packets.PacketGossipRequest
  		 * @instance
  		 */
  		PacketGossipRequest.prototype.ver = "";
  
  		/**
  		 * PacketGossipRequest sender.
  		 * @member {string} sender
  		 * @memberof packets.PacketGossipRequest
  		 * @instance
  		 */
  		PacketGossipRequest.prototype.sender = "";
  
  		/**
  		 * PacketGossipRequest online.
  		 * @member {string} online
  		 * @memberof packets.PacketGossipRequest
  		 * @instance
  		 */
  		PacketGossipRequest.prototype.online = "";
  
  		/**
  		 * PacketGossipRequest offline.
  		 * @member {string} offline
  		 * @memberof packets.PacketGossipRequest
  		 * @instance
  		 */
  		PacketGossipRequest.prototype.offline = "";
  
  		/**
  		 * Creates a new PacketGossipRequest instance using the specified properties.
  		 * @function create
  		 * @memberof packets.PacketGossipRequest
  		 * @static
  		 * @param {packets.IPacketGossipRequest=} [properties] Properties to set
  		 * @returns {packets.PacketGossipRequest} PacketGossipRequest instance
  		 */
  		PacketGossipRequest.create = function create(properties) {
  			return new PacketGossipRequest(properties);
  		};
  
  		/**
  		 * Encodes the specified PacketGossipRequest message. Does not implicitly {@link packets.PacketGossipRequest.verify|verify} messages.
  		 * @function encode
  		 * @memberof packets.PacketGossipRequest
  		 * @static
  		 * @param {packets.IPacketGossipRequest} message PacketGossipRequest message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketGossipRequest.encode = function encode(message, writer) {
  			if (!writer) writer = $Writer.create();
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.ver);
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				writer.uint32(/* id 2, wireType 2 =*/ 18).string(message.sender);
  			if (message.online != null && message.hasOwnProperty("online"))
  				writer.uint32(/* id 3, wireType 2 =*/ 26).string(message.online);
  			if (message.offline != null && message.hasOwnProperty("offline"))
  				writer.uint32(/* id 4, wireType 2 =*/ 34).string(message.offline);
  			return writer;
  		};
  
  		/**
  		 * Encodes the specified PacketGossipRequest message, length delimited. Does not implicitly {@link packets.PacketGossipRequest.verify|verify} messages.
  		 * @function encodeDelimited
  		 * @memberof packets.PacketGossipRequest
  		 * @static
  		 * @param {packets.IPacketGossipRequest} message PacketGossipRequest message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketGossipRequest.encodeDelimited = function encodeDelimited(message, writer) {
  			return this.encode(message, writer).ldelim();
  		};
  
  		/**
  		 * Decodes a PacketGossipRequest message from the specified reader or buffer.
  		 * @function decode
  		 * @memberof packets.PacketGossipRequest
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @param {number} [length] Message length if known beforehand
  		 * @returns {packets.PacketGossipRequest} PacketGossipRequest
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketGossipRequest.decode = function decode(reader, length) {
  			if (!(reader instanceof $Reader)) reader = $Reader.create(reader);
  			var end = length === undefined ? reader.len : reader.pos + length,
  				message = new $root.packets.PacketGossipRequest();
  			while (reader.pos < end) {
  				var tag = reader.uint32();
  				switch (tag >>> 3) {
  					case 1:
  						message.ver = reader.string();
  						break;
  					case 2:
  						message.sender = reader.string();
  						break;
  					case 3:
  						message.online = reader.string();
  						break;
  					case 4:
  						message.offline = reader.string();
  						break;
  					default:
  						reader.skipType(tag & 7);
  						break;
  				}
  			}
  			return message;
  		};
  
  		/**
  		 * Decodes a PacketGossipRequest message from the specified reader or buffer, length delimited.
  		 * @function decodeDelimited
  		 * @memberof packets.PacketGossipRequest
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @returns {packets.PacketGossipRequest} PacketGossipRequest
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketGossipRequest.decodeDelimited = function decodeDelimited(reader) {
  			if (!(reader instanceof $Reader)) reader = new $Reader(reader);
  			return this.decode(reader, reader.uint32());
  		};
  
  		/**
  		 * Verifies a PacketGossipRequest message.
  		 * @function verify
  		 * @memberof packets.PacketGossipRequest
  		 * @static
  		 * @param {Object.<string,*>} message Plain object to verify
  		 * @returns {string|null} `null` if valid, otherwise the reason why it is not
  		 */
  		PacketGossipRequest.verify = function verify(message) {
  			if (typeof message !== "object" || message === null) return "object expected";
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				if (!$util.isString(message.ver)) return "ver: string expected";
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				if (!$util.isString(message.sender)) return "sender: string expected";
  			if (message.online != null && message.hasOwnProperty("online"))
  				if (!$util.isString(message.online)) return "online: string expected";
  			if (message.offline != null && message.hasOwnProperty("offline"))
  				if (!$util.isString(message.offline)) return "offline: string expected";
  			return null;
  		};
  
  		/**
  		 * Creates a PacketGossipRequest message from a plain object. Also converts values to their respective internal types.
  		 * @function fromObject
  		 * @memberof packets.PacketGossipRequest
  		 * @static
  		 * @param {Object.<string,*>} object Plain object
  		 * @returns {packets.PacketGossipRequest} PacketGossipRequest
  		 */
  		PacketGossipRequest.fromObject = function fromObject(object) {
  			if (object instanceof $root.packets.PacketGossipRequest) return object;
  			var message = new $root.packets.PacketGossipRequest();
  			if (object.ver != null) message.ver = String(object.ver);
  			if (object.sender != null) message.sender = String(object.sender);
  			if (object.online != null) message.online = String(object.online);
  			if (object.offline != null) message.offline = String(object.offline);
  			return message;
  		};
  
  		/**
  		 * Creates a plain object from a PacketGossipRequest message. Also converts values to other types if specified.
  		 * @function toObject
  		 * @memberof packets.PacketGossipRequest
  		 * @static
  		 * @param {packets.PacketGossipRequest} message PacketGossipRequest
  		 * @param {$protobuf.IConversionOptions} [options] Conversion options
  		 * @returns {Object.<string,*>} Plain object
  		 */
  		PacketGossipRequest.toObject = function toObject(message, options) {
  			if (!options) options = {};
  			var object = {};
  			if (options.defaults) {
  				object.ver = "";
  				object.sender = "";
  				object.online = "";
  				object.offline = "";
  			}
  			if (message.ver != null && message.hasOwnProperty("ver")) object.ver = message.ver;
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				object.sender = message.sender;
  			if (message.online != null && message.hasOwnProperty("online"))
  				object.online = message.online;
  			if (message.offline != null && message.hasOwnProperty("offline"))
  				object.offline = message.offline;
  			return object;
  		};
  
  		/**
  		 * Converts this PacketGossipRequest to JSON.
  		 * @function toJSON
  		 * @memberof packets.PacketGossipRequest
  		 * @instance
  		 * @returns {Object.<string,*>} JSON object
  		 */
  		PacketGossipRequest.prototype.toJSON = function toJSON() {
  			return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
  		};
  
  		return PacketGossipRequest;
  	})();
  
  	packets.PacketGossipResponse = (function () {
  		/**
  		 * Properties of a PacketGossipResponse.
  		 * @memberof packets
  		 * @interface IPacketGossipResponse
  		 * @property {string|null} [ver] PacketGossipResponse ver
  		 * @property {string|null} [sender] PacketGossipResponse sender
  		 * @property {string|null} [online] PacketGossipResponse online
  		 * @property {string|null} [offline] PacketGossipResponse offline
  		 */
  
  		/**
  		 * Constructs a new PacketGossipResponse.
  		 * @memberof packets
  		 * @classdesc Represents a PacketGossipResponse.
  		 * @implements IPacketGossipResponse
  		 * @constructor
  		 * @param {packets.IPacketGossipResponse=} [properties] Properties to set
  		 */
  		function PacketGossipResponse(properties) {
  			if (properties)
  				for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
  					if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];
  		}
  
  		/**
  		 * PacketGossipResponse ver.
  		 * @member {string} ver
  		 * @memberof packets.PacketGossipResponse
  		 * @instance
  		 */
  		PacketGossipResponse.prototype.ver = "";
  
  		/**
  		 * PacketGossipResponse sender.
  		 * @member {string} sender
  		 * @memberof packets.PacketGossipResponse
  		 * @instance
  		 */
  		PacketGossipResponse.prototype.sender = "";
  
  		/**
  		 * PacketGossipResponse online.
  		 * @member {string} online
  		 * @memberof packets.PacketGossipResponse
  		 * @instance
  		 */
  		PacketGossipResponse.prototype.online = "";
  
  		/**
  		 * PacketGossipResponse offline.
  		 * @member {string} offline
  		 * @memberof packets.PacketGossipResponse
  		 * @instance
  		 */
  		PacketGossipResponse.prototype.offline = "";
  
  		/**
  		 * Creates a new PacketGossipResponse instance using the specified properties.
  		 * @function create
  		 * @memberof packets.PacketGossipResponse
  		 * @static
  		 * @param {packets.IPacketGossipResponse=} [properties] Properties to set
  		 * @returns {packets.PacketGossipResponse} PacketGossipResponse instance
  		 */
  		PacketGossipResponse.create = function create(properties) {
  			return new PacketGossipResponse(properties);
  		};
  
  		/**
  		 * Encodes the specified PacketGossipResponse message. Does not implicitly {@link packets.PacketGossipResponse.verify|verify} messages.
  		 * @function encode
  		 * @memberof packets.PacketGossipResponse
  		 * @static
  		 * @param {packets.IPacketGossipResponse} message PacketGossipResponse message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketGossipResponse.encode = function encode(message, writer) {
  			if (!writer) writer = $Writer.create();
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.ver);
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				writer.uint32(/* id 2, wireType 2 =*/ 18).string(message.sender);
  			if (message.online != null && message.hasOwnProperty("online"))
  				writer.uint32(/* id 3, wireType 2 =*/ 26).string(message.online);
  			if (message.offline != null && message.hasOwnProperty("offline"))
  				writer.uint32(/* id 4, wireType 2 =*/ 34).string(message.offline);
  			return writer;
  		};
  
  		/**
  		 * Encodes the specified PacketGossipResponse message, length delimited. Does not implicitly {@link packets.PacketGossipResponse.verify|verify} messages.
  		 * @function encodeDelimited
  		 * @memberof packets.PacketGossipResponse
  		 * @static
  		 * @param {packets.IPacketGossipResponse} message PacketGossipResponse message or plain object to encode
  		 * @param {$protobuf.Writer} [writer] Writer to encode to
  		 * @returns {$protobuf.Writer} Writer
  		 */
  		PacketGossipResponse.encodeDelimited = function encodeDelimited(message, writer) {
  			return this.encode(message, writer).ldelim();
  		};
  
  		/**
  		 * Decodes a PacketGossipResponse message from the specified reader or buffer.
  		 * @function decode
  		 * @memberof packets.PacketGossipResponse
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @param {number} [length] Message length if known beforehand
  		 * @returns {packets.PacketGossipResponse} PacketGossipResponse
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketGossipResponse.decode = function decode(reader, length) {
  			if (!(reader instanceof $Reader)) reader = $Reader.create(reader);
  			var end = length === undefined ? reader.len : reader.pos + length,
  				message = new $root.packets.PacketGossipResponse();
  			while (reader.pos < end) {
  				var tag = reader.uint32();
  				switch (tag >>> 3) {
  					case 1:
  						message.ver = reader.string();
  						break;
  					case 2:
  						message.sender = reader.string();
  						break;
  					case 3:
  						message.online = reader.string();
  						break;
  					case 4:
  						message.offline = reader.string();
  						break;
  					default:
  						reader.skipType(tag & 7);
  						break;
  				}
  			}
  			return message;
  		};
  
  		/**
  		 * Decodes a PacketGossipResponse message from the specified reader or buffer, length delimited.
  		 * @function decodeDelimited
  		 * @memberof packets.PacketGossipResponse
  		 * @static
  		 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
  		 * @returns {packets.PacketGossipResponse} PacketGossipResponse
  		 * @throws {Error} If the payload is not a reader or valid buffer
  		 * @throws {$protobuf.util.ProtocolError} If required fields are missing
  		 */
  		PacketGossipResponse.decodeDelimited = function decodeDelimited(reader) {
  			if (!(reader instanceof $Reader)) reader = new $Reader(reader);
  			return this.decode(reader, reader.uint32());
  		};
  
  		/**
  		 * Verifies a PacketGossipResponse message.
  		 * @function verify
  		 * @memberof packets.PacketGossipResponse
  		 * @static
  		 * @param {Object.<string,*>} message Plain object to verify
  		 * @returns {string|null} `null` if valid, otherwise the reason why it is not
  		 */
  		PacketGossipResponse.verify = function verify(message) {
  			if (typeof message !== "object" || message === null) return "object expected";
  			if (message.ver != null && message.hasOwnProperty("ver"))
  				if (!$util.isString(message.ver)) return "ver: string expected";
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				if (!$util.isString(message.sender)) return "sender: string expected";
  			if (message.online != null && message.hasOwnProperty("online"))
  				if (!$util.isString(message.online)) return "online: string expected";
  			if (message.offline != null && message.hasOwnProperty("offline"))
  				if (!$util.isString(message.offline)) return "offline: string expected";
  			return null;
  		};
  
  		/**
  		 * Creates a PacketGossipResponse message from a plain object. Also converts values to their respective internal types.
  		 * @function fromObject
  		 * @memberof packets.PacketGossipResponse
  		 * @static
  		 * @param {Object.<string,*>} object Plain object
  		 * @returns {packets.PacketGossipResponse} PacketGossipResponse
  		 */
  		PacketGossipResponse.fromObject = function fromObject(object) {
  			if (object instanceof $root.packets.PacketGossipResponse) return object;
  			var message = new $root.packets.PacketGossipResponse();
  			if (object.ver != null) message.ver = String(object.ver);
  			if (object.sender != null) message.sender = String(object.sender);
  			if (object.online != null) message.online = String(object.online);
  			if (object.offline != null) message.offline = String(object.offline);
  			return message;
  		};
  
  		/**
  		 * Creates a plain object from a PacketGossipResponse message. Also converts values to other types if specified.
  		 * @function toObject
  		 * @memberof packets.PacketGossipResponse
  		 * @static
  		 * @param {packets.PacketGossipResponse} message PacketGossipResponse
  		 * @param {$protobuf.IConversionOptions} [options] Conversion options
  		 * @returns {Object.<string,*>} Plain object
  		 */
  		PacketGossipResponse.toObject = function toObject(message, options) {
  			if (!options) options = {};
  			var object = {};
  			if (options.defaults) {
  				object.ver = "";
  				object.sender = "";
  				object.online = "";
  				object.offline = "";
  			}
  			if (message.ver != null && message.hasOwnProperty("ver")) object.ver = message.ver;
  			if (message.sender != null && message.hasOwnProperty("sender"))
  				object.sender = message.sender;
  			if (message.online != null && message.hasOwnProperty("online"))
  				object.online = message.online;
  			if (message.offline != null && message.hasOwnProperty("offline"))
  				object.offline = message.offline;
  			return object;
  		};
  
  		/**
  		 * Converts this PacketGossipResponse to JSON.
  		 * @function toJSON
  		 * @memberof packets.PacketGossipResponse
  		 * @instance
  		 * @returns {Object.<string,*>} JSON object
  		 */
  		PacketGossipResponse.prototype.toJSON = function toJSON() {
  			return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
  		};
  
  		return PacketGossipResponse;
  	})();
  
  	return packets;
  })();
  
  module.exports = $root;
  