{"version":3,"file":"vendors-8dd577a2.f584a1446b2fc034d810.bundle.js","mappings":"AAGA","sources":["webpack://lernplattform-admin-frontend/./node_modules/amazon-chime-sdk-js/build/signalingprotocol/SignalingProtocol.js"],"sourcesContent":["/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/\n\"use strict\";\n\nvar $protobuf = require(\"protobufjs/minimal\");\n\n// Common aliases\nvar $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n\n// Exported root namespace\nvar $root = $protobuf.roots[\"default\"] || ($protobuf.roots[\"default\"] = {});\n\n$root.SdkSignalFrame = (function() {\n\n    /**\n     * Properties of a SdkSignalFrame.\n     * @name ISdkSignalFrame\n     * @interface ISdkSignalFrame\n     * @property {number|Long} timestampMs SdkSignalFrame timestampMs\n     * @property {SdkSignalFrame.Type} type SdkSignalFrame type\n     * @property {ISdkErrorFrame|null} [error] SdkSignalFrame error\n     * @property {ISdkJoinFrame|null} [join] SdkSignalFrame join\n     * @property {ISdkJoinAckFrame|null} [joinack] SdkSignalFrame joinack\n     * @property {ISdkSubscribeFrame|null} [sub] SdkSignalFrame sub\n     * @property {ISdkSubscribeAckFrame|null} [suback] SdkSignalFrame suback\n     * @property {ISdkIndexFrame|null} [index] SdkSignalFrame index\n     * @property {ISdkPauseResumeFrame|null} [pause] SdkSignalFrame pause\n     * @property {ISdkLeaveFrame|null} [leave] SdkSignalFrame leave\n     * @property {ISdkLeaveAckFrame|null} [leaveAck] SdkSignalFrame leaveAck\n     * @property {ISdkBitrateFrame|null} [bitrates] SdkSignalFrame bitrates\n     * @property {ISdkAudioControlFrame|null} [audioControl] SdkSignalFrame audioControl\n     * @property {ISdkAudioMetadataFrame|null} [audioMetadata] SdkSignalFrame audioMetadata\n     * @property {ISdkAudioStreamIdInfoFrame|null} [audioStreamIdInfo] SdkSignalFrame audioStreamIdInfo\n     * @property {ISdkPingPongFrame|null} [pingPong] SdkSignalFrame pingPong\n     * @property {ISdkAudioStatusFrame|null} [audioStatus] SdkSignalFrame audioStatus\n     * @property {ISdkClientMetricFrame|null} [clientMetric] SdkSignalFrame clientMetric\n     * @property {ISdkDataMessageFrame|null} [dataMessage] SdkSignalFrame dataMessage\n     * @property {ISdkRemoteVideoUpdateFrame|null} [remoteVideoUpdate] SdkSignalFrame remoteVideoUpdate\n     * @property {ISdkPrimaryMeetingJoinFrame|null} [primaryMeetingJoin] SdkSignalFrame primaryMeetingJoin\n     * @property {ISdkPrimaryMeetingJoinAckFrame|null} [primaryMeetingJoinAck] SdkSignalFrame primaryMeetingJoinAck\n     * @property {ISdkPrimaryMeetingLeaveFrame|null} [primaryMeetingLeave] SdkSignalFrame primaryMeetingLeave\n     * @property {ISdkNotificationFrame|null} [notification] SdkSignalFrame notification\n     */\n\n    /**\n     * Constructs a new SdkSignalFrame.\n     * @name SdkSignalFrame\n     * @classdesc Represents a SdkSignalFrame.\n     * @implements ISdkSignalFrame\n     * @constructor\n     * @param {ISdkSignalFrame=} [properties] Properties to set\n     */\n    function SdkSignalFrame(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkSignalFrame timestampMs.\n     * @member {number|Long} timestampMs\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.timestampMs = $util.Long ? $util.Long.fromBits(0,0,true) : 0;\n\n    /**\n     * SdkSignalFrame type.\n     * @member {SdkSignalFrame.Type} type\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.type = 1;\n\n    /**\n     * SdkSignalFrame error.\n     * @member {ISdkErrorFrame|null|undefined} error\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.error = null;\n\n    /**\n     * SdkSignalFrame join.\n     * @member {ISdkJoinFrame|null|undefined} join\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.join = null;\n\n    /**\n     * SdkSignalFrame joinack.\n     * @member {ISdkJoinAckFrame|null|undefined} joinack\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.joinack = null;\n\n    /**\n     * SdkSignalFrame sub.\n     * @member {ISdkSubscribeFrame|null|undefined} sub\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.sub = null;\n\n    /**\n     * SdkSignalFrame suback.\n     * @member {ISdkSubscribeAckFrame|null|undefined} suback\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.suback = null;\n\n    /**\n     * SdkSignalFrame index.\n     * @member {ISdkIndexFrame|null|undefined} index\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.index = null;\n\n    /**\n     * SdkSignalFrame pause.\n     * @member {ISdkPauseResumeFrame|null|undefined} pause\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.pause = null;\n\n    /**\n     * SdkSignalFrame leave.\n     * @member {ISdkLeaveFrame|null|undefined} leave\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.leave = null;\n\n    /**\n     * SdkSignalFrame leaveAck.\n     * @member {ISdkLeaveAckFrame|null|undefined} leaveAck\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.leaveAck = null;\n\n    /**\n     * SdkSignalFrame bitrates.\n     * @member {ISdkBitrateFrame|null|undefined} bitrates\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.bitrates = null;\n\n    /**\n     * SdkSignalFrame audioControl.\n     * @member {ISdkAudioControlFrame|null|undefined} audioControl\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.audioControl = null;\n\n    /**\n     * SdkSignalFrame audioMetadata.\n     * @member {ISdkAudioMetadataFrame|null|undefined} audioMetadata\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.audioMetadata = null;\n\n    /**\n     * SdkSignalFrame audioStreamIdInfo.\n     * @member {ISdkAudioStreamIdInfoFrame|null|undefined} audioStreamIdInfo\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.audioStreamIdInfo = null;\n\n    /**\n     * SdkSignalFrame pingPong.\n     * @member {ISdkPingPongFrame|null|undefined} pingPong\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.pingPong = null;\n\n    /**\n     * SdkSignalFrame audioStatus.\n     * @member {ISdkAudioStatusFrame|null|undefined} audioStatus\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.audioStatus = null;\n\n    /**\n     * SdkSignalFrame clientMetric.\n     * @member {ISdkClientMetricFrame|null|undefined} clientMetric\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.clientMetric = null;\n\n    /**\n     * SdkSignalFrame dataMessage.\n     * @member {ISdkDataMessageFrame|null|undefined} dataMessage\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.dataMessage = null;\n\n    /**\n     * SdkSignalFrame remoteVideoUpdate.\n     * @member {ISdkRemoteVideoUpdateFrame|null|undefined} remoteVideoUpdate\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.remoteVideoUpdate = null;\n\n    /**\n     * SdkSignalFrame primaryMeetingJoin.\n     * @member {ISdkPrimaryMeetingJoinFrame|null|undefined} primaryMeetingJoin\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.primaryMeetingJoin = null;\n\n    /**\n     * SdkSignalFrame primaryMeetingJoinAck.\n     * @member {ISdkPrimaryMeetingJoinAckFrame|null|undefined} primaryMeetingJoinAck\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.primaryMeetingJoinAck = null;\n\n    /**\n     * SdkSignalFrame primaryMeetingLeave.\n     * @member {ISdkPrimaryMeetingLeaveFrame|null|undefined} primaryMeetingLeave\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.primaryMeetingLeave = null;\n\n    /**\n     * SdkSignalFrame notification.\n     * @member {ISdkNotificationFrame|null|undefined} notification\n     * @memberof SdkSignalFrame\n     * @instance\n     */\n    SdkSignalFrame.prototype.notification = null;\n\n    /**\n     * Creates a new SdkSignalFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkSignalFrame\n     * @static\n     * @param {ISdkSignalFrame=} [properties] Properties to set\n     * @returns {SdkSignalFrame} SdkSignalFrame instance\n     */\n    SdkSignalFrame.create = function create(properties) {\n        return new SdkSignalFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkSignalFrame message. Does not implicitly {@link SdkSignalFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkSignalFrame\n     * @static\n     * @param {ISdkSignalFrame} message SdkSignalFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkSignalFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.timestampMs);\n        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.type);\n        if (message.error != null && Object.hasOwnProperty.call(message, \"error\"))\n            $root.SdkErrorFrame.encode(message.error, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();\n        if (message.join != null && Object.hasOwnProperty.call(message, \"join\"))\n            $root.SdkJoinFrame.encode(message.join, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();\n        if (message.joinack != null && Object.hasOwnProperty.call(message, \"joinack\"))\n            $root.SdkJoinAckFrame.encode(message.joinack, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();\n        if (message.sub != null && Object.hasOwnProperty.call(message, \"sub\"))\n            $root.SdkSubscribeFrame.encode(message.sub, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();\n        if (message.suback != null && Object.hasOwnProperty.call(message, \"suback\"))\n            $root.SdkSubscribeAckFrame.encode(message.suback, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();\n        if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\n            $root.SdkIndexFrame.encode(message.index, writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim();\n        if (message.pause != null && Object.hasOwnProperty.call(message, \"pause\"))\n            $root.SdkPauseResumeFrame.encode(message.pause, writer.uint32(/* id 10, wireType 2 =*/82).fork()).ldelim();\n        if (message.leave != null && Object.hasOwnProperty.call(message, \"leave\"))\n            $root.SdkLeaveFrame.encode(message.leave, writer.uint32(/* id 11, wireType 2 =*/90).fork()).ldelim();\n        if (message.leaveAck != null && Object.hasOwnProperty.call(message, \"leaveAck\"))\n            $root.SdkLeaveAckFrame.encode(message.leaveAck, writer.uint32(/* id 12, wireType 2 =*/98).fork()).ldelim();\n        if (message.bitrates != null && Object.hasOwnProperty.call(message, \"bitrates\"))\n            $root.SdkBitrateFrame.encode(message.bitrates, writer.uint32(/* id 14, wireType 2 =*/114).fork()).ldelim();\n        if (message.audioControl != null && Object.hasOwnProperty.call(message, \"audioControl\"))\n            $root.SdkAudioControlFrame.encode(message.audioControl, writer.uint32(/* id 17, wireType 2 =*/138).fork()).ldelim();\n        if (message.audioMetadata != null && Object.hasOwnProperty.call(message, \"audioMetadata\"))\n            $root.SdkAudioMetadataFrame.encode(message.audioMetadata, writer.uint32(/* id 18, wireType 2 =*/146).fork()).ldelim();\n        if (message.audioStreamIdInfo != null && Object.hasOwnProperty.call(message, \"audioStreamIdInfo\"))\n            $root.SdkAudioStreamIdInfoFrame.encode(message.audioStreamIdInfo, writer.uint32(/* id 19, wireType 2 =*/154).fork()).ldelim();\n        if (message.pingPong != null && Object.hasOwnProperty.call(message, \"pingPong\"))\n            $root.SdkPingPongFrame.encode(message.pingPong, writer.uint32(/* id 20, wireType 2 =*/162).fork()).ldelim();\n        if (message.audioStatus != null && Object.hasOwnProperty.call(message, \"audioStatus\"))\n            $root.SdkAudioStatusFrame.encode(message.audioStatus, writer.uint32(/* id 21, wireType 2 =*/170).fork()).ldelim();\n        if (message.clientMetric != null && Object.hasOwnProperty.call(message, \"clientMetric\"))\n            $root.SdkClientMetricFrame.encode(message.clientMetric, writer.uint32(/* id 22, wireType 2 =*/178).fork()).ldelim();\n        if (message.dataMessage != null && Object.hasOwnProperty.call(message, \"dataMessage\"))\n            $root.SdkDataMessageFrame.encode(message.dataMessage, writer.uint32(/* id 23, wireType 2 =*/186).fork()).ldelim();\n        if (message.remoteVideoUpdate != null && Object.hasOwnProperty.call(message, \"remoteVideoUpdate\"))\n            $root.SdkRemoteVideoUpdateFrame.encode(message.remoteVideoUpdate, writer.uint32(/* id 25, wireType 2 =*/202).fork()).ldelim();\n        if (message.primaryMeetingJoin != null && Object.hasOwnProperty.call(message, \"primaryMeetingJoin\"))\n            $root.SdkPrimaryMeetingJoinFrame.encode(message.primaryMeetingJoin, writer.uint32(/* id 26, wireType 2 =*/210).fork()).ldelim();\n        if (message.primaryMeetingJoinAck != null && Object.hasOwnProperty.call(message, \"primaryMeetingJoinAck\"))\n            $root.SdkPrimaryMeetingJoinAckFrame.encode(message.primaryMeetingJoinAck, writer.uint32(/* id 27, wireType 2 =*/218).fork()).ldelim();\n        if (message.primaryMeetingLeave != null && Object.hasOwnProperty.call(message, \"primaryMeetingLeave\"))\n            $root.SdkPrimaryMeetingLeaveFrame.encode(message.primaryMeetingLeave, writer.uint32(/* id 28, wireType 2 =*/226).fork()).ldelim();\n        if (message.notification != null && Object.hasOwnProperty.call(message, \"notification\"))\n            $root.SdkNotificationFrame.encode(message.notification, writer.uint32(/* id 35, wireType 2 =*/282).fork()).ldelim();\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkSignalFrame message, length delimited. Does not implicitly {@link SdkSignalFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkSignalFrame\n     * @static\n     * @param {ISdkSignalFrame} message SdkSignalFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkSignalFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkSignalFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkSignalFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkSignalFrame} SdkSignalFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkSignalFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkSignalFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.timestampMs = reader.uint64();\n                    break;\n                }\n            case 2: {\n                    message.type = reader.int32();\n                    break;\n                }\n            case 3: {\n                    message.error = $root.SdkErrorFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            case 4: {\n                    message.join = $root.SdkJoinFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            case 5: {\n                    message.joinack = $root.SdkJoinAckFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            case 6: {\n                    message.sub = $root.SdkSubscribeFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            case 7: {\n                    message.suback = $root.SdkSubscribeAckFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            case 8: {\n                    message.index = $root.SdkIndexFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            case 10: {\n                    message.pause = $root.SdkPauseResumeFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            case 11: {\n                    message.leave = $root.SdkLeaveFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            case 12: {\n                    message.leaveAck = $root.SdkLeaveAckFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            case 14: {\n                    message.bitrates = $root.SdkBitrateFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            case 17: {\n                    message.audioControl = $root.SdkAudioControlFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            case 18: {\n                    message.audioMetadata = $root.SdkAudioMetadataFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            case 19: {\n                    message.audioStreamIdInfo = $root.SdkAudioStreamIdInfoFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            case 20: {\n                    message.pingPong = $root.SdkPingPongFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            case 21: {\n                    message.audioStatus = $root.SdkAudioStatusFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            case 22: {\n                    message.clientMetric = $root.SdkClientMetricFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            case 23: {\n                    message.dataMessage = $root.SdkDataMessageFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            case 25: {\n                    message.remoteVideoUpdate = $root.SdkRemoteVideoUpdateFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            case 26: {\n                    message.primaryMeetingJoin = $root.SdkPrimaryMeetingJoinFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            case 27: {\n                    message.primaryMeetingJoinAck = $root.SdkPrimaryMeetingJoinAckFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            case 28: {\n                    message.primaryMeetingLeave = $root.SdkPrimaryMeetingLeaveFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            case 35: {\n                    message.notification = $root.SdkNotificationFrame.decode(reader, reader.uint32());\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        if (!message.hasOwnProperty(\"timestampMs\"))\n            throw $util.ProtocolError(\"missing required 'timestampMs'\", { instance: message });\n        if (!message.hasOwnProperty(\"type\"))\n            throw $util.ProtocolError(\"missing required 'type'\", { instance: message });\n        return message;\n    };\n\n    /**\n     * Decodes a SdkSignalFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkSignalFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkSignalFrame} SdkSignalFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkSignalFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkSignalFrame message.\n     * @function verify\n     * @memberof SdkSignalFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkSignalFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (!$util.isInteger(message.timestampMs) && !(message.timestampMs && $util.isInteger(message.timestampMs.low) && $util.isInteger(message.timestampMs.high)))\n            return \"timestampMs: integer|Long expected\";\n        switch (message.type) {\n        default:\n            return \"type: enum value expected\";\n        case 1:\n        case 2:\n        case 3:\n        case 4:\n        case 5:\n        case 7:\n        case 8:\n        case 9:\n        case 10:\n        case 13:\n        case 16:\n        case 17:\n        case 18:\n        case 19:\n        case 20:\n        case 21:\n        case 22:\n        case 24:\n        case 25:\n        case 26:\n        case 27:\n        case 34:\n            break;\n        }\n        if (message.error != null && message.hasOwnProperty(\"error\")) {\n            var error = $root.SdkErrorFrame.verify(message.error);\n            if (error)\n                return \"error.\" + error;\n        }\n        if (message.join != null && message.hasOwnProperty(\"join\")) {\n            var error = $root.SdkJoinFrame.verify(message.join);\n            if (error)\n                return \"join.\" + error;\n        }\n        if (message.joinack != null && message.hasOwnProperty(\"joinack\")) {\n            var error = $root.SdkJoinAckFrame.verify(message.joinack);\n            if (error)\n                return \"joinack.\" + error;\n        }\n        if (message.sub != null && message.hasOwnProperty(\"sub\")) {\n            var error = $root.SdkSubscribeFrame.verify(message.sub);\n            if (error)\n                return \"sub.\" + error;\n        }\n        if (message.suback != null && message.hasOwnProperty(\"suback\")) {\n            var error = $root.SdkSubscribeAckFrame.verify(message.suback);\n            if (error)\n                return \"suback.\" + error;\n        }\n        if (message.index != null && message.hasOwnProperty(\"index\")) {\n            var error = $root.SdkIndexFrame.verify(message.index);\n            if (error)\n                return \"index.\" + error;\n        }\n        if (message.pause != null && message.hasOwnProperty(\"pause\")) {\n            var error = $root.SdkPauseResumeFrame.verify(message.pause);\n            if (error)\n                return \"pause.\" + error;\n        }\n        if (message.leave != null && message.hasOwnProperty(\"leave\")) {\n            var error = $root.SdkLeaveFrame.verify(message.leave);\n            if (error)\n                return \"leave.\" + error;\n        }\n        if (message.leaveAck != null && message.hasOwnProperty(\"leaveAck\")) {\n            var error = $root.SdkLeaveAckFrame.verify(message.leaveAck);\n            if (error)\n                return \"leaveAck.\" + error;\n        }\n        if (message.bitrates != null && message.hasOwnProperty(\"bitrates\")) {\n            var error = $root.SdkBitrateFrame.verify(message.bitrates);\n            if (error)\n                return \"bitrates.\" + error;\n        }\n        if (message.audioControl != null && message.hasOwnProperty(\"audioControl\")) {\n            var error = $root.SdkAudioControlFrame.verify(message.audioControl);\n            if (error)\n                return \"audioControl.\" + error;\n        }\n        if (message.audioMetadata != null && message.hasOwnProperty(\"audioMetadata\")) {\n            var error = $root.SdkAudioMetadataFrame.verify(message.audioMetadata);\n            if (error)\n                return \"audioMetadata.\" + error;\n        }\n        if (message.audioStreamIdInfo != null && message.hasOwnProperty(\"audioStreamIdInfo\")) {\n            var error = $root.SdkAudioStreamIdInfoFrame.verify(message.audioStreamIdInfo);\n            if (error)\n                return \"audioStreamIdInfo.\" + error;\n        }\n        if (message.pingPong != null && message.hasOwnProperty(\"pingPong\")) {\n            var error = $root.SdkPingPongFrame.verify(message.pingPong);\n            if (error)\n                return \"pingPong.\" + error;\n        }\n        if (message.audioStatus != null && message.hasOwnProperty(\"audioStatus\")) {\n            var error = $root.SdkAudioStatusFrame.verify(message.audioStatus);\n            if (error)\n                return \"audioStatus.\" + error;\n        }\n        if (message.clientMetric != null && message.hasOwnProperty(\"clientMetric\")) {\n            var error = $root.SdkClientMetricFrame.verify(message.clientMetric);\n            if (error)\n                return \"clientMetric.\" + error;\n        }\n        if (message.dataMessage != null && message.hasOwnProperty(\"dataMessage\")) {\n            var error = $root.SdkDataMessageFrame.verify(message.dataMessage);\n            if (error)\n                return \"dataMessage.\" + error;\n        }\n        if (message.remoteVideoUpdate != null && message.hasOwnProperty(\"remoteVideoUpdate\")) {\n            var error = $root.SdkRemoteVideoUpdateFrame.verify(message.remoteVideoUpdate);\n            if (error)\n                return \"remoteVideoUpdate.\" + error;\n        }\n        if (message.primaryMeetingJoin != null && message.hasOwnProperty(\"primaryMeetingJoin\")) {\n            var error = $root.SdkPrimaryMeetingJoinFrame.verify(message.primaryMeetingJoin);\n            if (error)\n                return \"primaryMeetingJoin.\" + error;\n        }\n        if (message.primaryMeetingJoinAck != null && message.hasOwnProperty(\"primaryMeetingJoinAck\")) {\n            var error = $root.SdkPrimaryMeetingJoinAckFrame.verify(message.primaryMeetingJoinAck);\n            if (error)\n                return \"primaryMeetingJoinAck.\" + error;\n        }\n        if (message.primaryMeetingLeave != null && message.hasOwnProperty(\"primaryMeetingLeave\")) {\n            var error = $root.SdkPrimaryMeetingLeaveFrame.verify(message.primaryMeetingLeave);\n            if (error)\n                return \"primaryMeetingLeave.\" + error;\n        }\n        if (message.notification != null && message.hasOwnProperty(\"notification\")) {\n            var error = $root.SdkNotificationFrame.verify(message.notification);\n            if (error)\n                return \"notification.\" + error;\n        }\n        return null;\n    };\n\n    /**\n     * Creates a SdkSignalFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkSignalFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkSignalFrame} SdkSignalFrame\n     */\n    SdkSignalFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkSignalFrame)\n            return object;\n        var message = new $root.SdkSignalFrame();\n        if (object.timestampMs != null)\n            if ($util.Long)\n                (message.timestampMs = $util.Long.fromValue(object.timestampMs)).unsigned = true;\n            else if (typeof object.timestampMs === \"string\")\n                message.timestampMs = parseInt(object.timestampMs, 10);\n            else if (typeof object.timestampMs === \"number\")\n                message.timestampMs = object.timestampMs;\n            else if (typeof object.timestampMs === \"object\")\n                message.timestampMs = new $util.LongBits(object.timestampMs.low >>> 0, object.timestampMs.high >>> 0).toNumber(true);\n        switch (object.type) {\n        default:\n            if (typeof object.type === \"number\") {\n                message.type = object.type;\n                break;\n            }\n            break;\n        case \"JOIN\":\n        case 1:\n            message.type = 1;\n            break;\n        case \"JOIN_ACK\":\n        case 2:\n            message.type = 2;\n            break;\n        case \"SUBSCRIBE\":\n        case 3:\n            message.type = 3;\n            break;\n        case \"SUBSCRIBE_ACK\":\n        case 4:\n            message.type = 4;\n            break;\n        case \"INDEX\":\n        case 5:\n            message.type = 5;\n            break;\n        case \"PAUSE\":\n        case 7:\n            message.type = 7;\n            break;\n        case \"RESUME\":\n        case 8:\n            message.type = 8;\n            break;\n        case \"LEAVE\":\n        case 9:\n            message.type = 9;\n            break;\n        case \"LEAVE_ACK\":\n        case 10:\n            message.type = 10;\n            break;\n        case \"BITRATES\":\n        case 13:\n            message.type = 13;\n            break;\n        case \"AUDIO_CONTROL\":\n        case 16:\n            message.type = 16;\n            break;\n        case \"AUDIO_METADATA\":\n        case 17:\n            message.type = 17;\n            break;\n        case \"AUDIO_STREAM_ID_INFO\":\n        case 18:\n            message.type = 18;\n            break;\n        case \"PING_PONG\":\n        case 19:\n            message.type = 19;\n            break;\n        case \"AUDIO_STATUS\":\n        case 20:\n            message.type = 20;\n            break;\n        case \"CLIENT_METRIC\":\n        case 21:\n            message.type = 21;\n            break;\n        case \"DATA_MESSAGE\":\n        case 22:\n            message.type = 22;\n            break;\n        case \"REMOTE_VIDEO_UPDATE\":\n        case 24:\n            message.type = 24;\n            break;\n        case \"PRIMARY_MEETING_JOIN\":\n        case 25:\n            message.type = 25;\n            break;\n        case \"PRIMARY_MEETING_JOIN_ACK\":\n        case 26:\n            message.type = 26;\n            break;\n        case \"PRIMARY_MEETING_LEAVE\":\n        case 27:\n            message.type = 27;\n            break;\n        case \"NOTIFICATION\":\n        case 34:\n            message.type = 34;\n            break;\n        }\n        if (object.error != null) {\n            if (typeof object.error !== \"object\")\n                throw TypeError(\".SdkSignalFrame.error: object expected\");\n            message.error = $root.SdkErrorFrame.fromObject(object.error);\n        }\n        if (object.join != null) {\n            if (typeof object.join !== \"object\")\n                throw TypeError(\".SdkSignalFrame.join: object expected\");\n            message.join = $root.SdkJoinFrame.fromObject(object.join);\n        }\n        if (object.joinack != null) {\n            if (typeof object.joinack !== \"object\")\n                throw TypeError(\".SdkSignalFrame.joinack: object expected\");\n            message.joinack = $root.SdkJoinAckFrame.fromObject(object.joinack);\n        }\n        if (object.sub != null) {\n            if (typeof object.sub !== \"object\")\n                throw TypeError(\".SdkSignalFrame.sub: object expected\");\n            message.sub = $root.SdkSubscribeFrame.fromObject(object.sub);\n        }\n        if (object.suback != null) {\n            if (typeof object.suback !== \"object\")\n                throw TypeError(\".SdkSignalFrame.suback: object expected\");\n            message.suback = $root.SdkSubscribeAckFrame.fromObject(object.suback);\n        }\n        if (object.index != null) {\n            if (typeof object.index !== \"object\")\n                throw TypeError(\".SdkSignalFrame.index: object expected\");\n            message.index = $root.SdkIndexFrame.fromObject(object.index);\n        }\n        if (object.pause != null) {\n            if (typeof object.pause !== \"object\")\n                throw TypeError(\".SdkSignalFrame.pause: object expected\");\n            message.pause = $root.SdkPauseResumeFrame.fromObject(object.pause);\n        }\n        if (object.leave != null) {\n            if (typeof object.leave !== \"object\")\n                throw TypeError(\".SdkSignalFrame.leave: object expected\");\n            message.leave = $root.SdkLeaveFrame.fromObject(object.leave);\n        }\n        if (object.leaveAck != null) {\n            if (typeof object.leaveAck !== \"object\")\n                throw TypeError(\".SdkSignalFrame.leaveAck: object expected\");\n            message.leaveAck = $root.SdkLeaveAckFrame.fromObject(object.leaveAck);\n        }\n        if (object.bitrates != null) {\n            if (typeof object.bitrates !== \"object\")\n                throw TypeError(\".SdkSignalFrame.bitrates: object expected\");\n            message.bitrates = $root.SdkBitrateFrame.fromObject(object.bitrates);\n        }\n        if (object.audioControl != null) {\n            if (typeof object.audioControl !== \"object\")\n                throw TypeError(\".SdkSignalFrame.audioControl: object expected\");\n            message.audioControl = $root.SdkAudioControlFrame.fromObject(object.audioControl);\n        }\n        if (object.audioMetadata != null) {\n            if (typeof object.audioMetadata !== \"object\")\n                throw TypeError(\".SdkSignalFrame.audioMetadata: object expected\");\n            message.audioMetadata = $root.SdkAudioMetadataFrame.fromObject(object.audioMetadata);\n        }\n        if (object.audioStreamIdInfo != null) {\n            if (typeof object.audioStreamIdInfo !== \"object\")\n                throw TypeError(\".SdkSignalFrame.audioStreamIdInfo: object expected\");\n            message.audioStreamIdInfo = $root.SdkAudioStreamIdInfoFrame.fromObject(object.audioStreamIdInfo);\n        }\n        if (object.pingPong != null) {\n            if (typeof object.pingPong !== \"object\")\n                throw TypeError(\".SdkSignalFrame.pingPong: object expected\");\n            message.pingPong = $root.SdkPingPongFrame.fromObject(object.pingPong);\n        }\n        if (object.audioStatus != null) {\n            if (typeof object.audioStatus !== \"object\")\n                throw TypeError(\".SdkSignalFrame.audioStatus: object expected\");\n            message.audioStatus = $root.SdkAudioStatusFrame.fromObject(object.audioStatus);\n        }\n        if (object.clientMetric != null) {\n            if (typeof object.clientMetric !== \"object\")\n                throw TypeError(\".SdkSignalFrame.clientMetric: object expected\");\n            message.clientMetric = $root.SdkClientMetricFrame.fromObject(object.clientMetric);\n        }\n        if (object.dataMessage != null) {\n            if (typeof object.dataMessage !== \"object\")\n                throw TypeError(\".SdkSignalFrame.dataMessage: object expected\");\n            message.dataMessage = $root.SdkDataMessageFrame.fromObject(object.dataMessage);\n        }\n        if (object.remoteVideoUpdate != null) {\n            if (typeof object.remoteVideoUpdate !== \"object\")\n                throw TypeError(\".SdkSignalFrame.remoteVideoUpdate: object expected\");\n            message.remoteVideoUpdate = $root.SdkRemoteVideoUpdateFrame.fromObject(object.remoteVideoUpdate);\n        }\n        if (object.primaryMeetingJoin != null) {\n            if (typeof object.primaryMeetingJoin !== \"object\")\n                throw TypeError(\".SdkSignalFrame.primaryMeetingJoin: object expected\");\n            message.primaryMeetingJoin = $root.SdkPrimaryMeetingJoinFrame.fromObject(object.primaryMeetingJoin);\n        }\n        if (object.primaryMeetingJoinAck != null) {\n            if (typeof object.primaryMeetingJoinAck !== \"object\")\n                throw TypeError(\".SdkSignalFrame.primaryMeetingJoinAck: object expected\");\n            message.primaryMeetingJoinAck = $root.SdkPrimaryMeetingJoinAckFrame.fromObject(object.primaryMeetingJoinAck);\n        }\n        if (object.primaryMeetingLeave != null) {\n            if (typeof object.primaryMeetingLeave !== \"object\")\n                throw TypeError(\".SdkSignalFrame.primaryMeetingLeave: object expected\");\n            message.primaryMeetingLeave = $root.SdkPrimaryMeetingLeaveFrame.fromObject(object.primaryMeetingLeave);\n        }\n        if (object.notification != null) {\n            if (typeof object.notification !== \"object\")\n                throw TypeError(\".SdkSignalFrame.notification: object expected\");\n            message.notification = $root.SdkNotificationFrame.fromObject(object.notification);\n        }\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkSignalFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkSignalFrame\n     * @static\n     * @param {SdkSignalFrame} message SdkSignalFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkSignalFrame.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            if ($util.Long) {\n                var long = new $util.Long(0, 0, true);\n                object.timestampMs = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n            } else\n                object.timestampMs = options.longs === String ? \"0\" : 0;\n            object.type = options.enums === String ? \"JOIN\" : 1;\n            object.error = null;\n            object.join = null;\n            object.joinack = null;\n            object.sub = null;\n            object.suback = null;\n            object.index = null;\n            object.pause = null;\n            object.leave = null;\n            object.leaveAck = null;\n            object.bitrates = null;\n            object.audioControl = null;\n            object.audioMetadata = null;\n            object.audioStreamIdInfo = null;\n            object.pingPong = null;\n            object.audioStatus = null;\n            object.clientMetric = null;\n            object.dataMessage = null;\n            object.remoteVideoUpdate = null;\n            object.primaryMeetingJoin = null;\n            object.primaryMeetingJoinAck = null;\n            object.primaryMeetingLeave = null;\n            object.notification = null;\n        }\n        if (message.timestampMs != null && message.hasOwnProperty(\"timestampMs\"))\n            if (typeof message.timestampMs === \"number\")\n                object.timestampMs = options.longs === String ? String(message.timestampMs) : message.timestampMs;\n            else\n                object.timestampMs = options.longs === String ? $util.Long.prototype.toString.call(message.timestampMs) : options.longs === Number ? new $util.LongBits(message.timestampMs.low >>> 0, message.timestampMs.high >>> 0).toNumber(true) : message.timestampMs;\n        if (message.type != null && message.hasOwnProperty(\"type\"))\n            object.type = options.enums === String ? $root.SdkSignalFrame.Type[message.type] === undefined ? message.type : $root.SdkSignalFrame.Type[message.type] : message.type;\n        if (message.error != null && message.hasOwnProperty(\"error\"))\n            object.error = $root.SdkErrorFrame.toObject(message.error, options);\n        if (message.join != null && message.hasOwnProperty(\"join\"))\n            object.join = $root.SdkJoinFrame.toObject(message.join, options);\n        if (message.joinack != null && message.hasOwnProperty(\"joinack\"))\n            object.joinack = $root.SdkJoinAckFrame.toObject(message.joinack, options);\n        if (message.sub != null && message.hasOwnProperty(\"sub\"))\n            object.sub = $root.SdkSubscribeFrame.toObject(message.sub, options);\n        if (message.suback != null && message.hasOwnProperty(\"suback\"))\n            object.suback = $root.SdkSubscribeAckFrame.toObject(message.suback, options);\n        if (message.index != null && message.hasOwnProperty(\"index\"))\n            object.index = $root.SdkIndexFrame.toObject(message.index, options);\n        if (message.pause != null && message.hasOwnProperty(\"pause\"))\n            object.pause = $root.SdkPauseResumeFrame.toObject(message.pause, options);\n        if (message.leave != null && message.hasOwnProperty(\"leave\"))\n            object.leave = $root.SdkLeaveFrame.toObject(message.leave, options);\n        if (message.leaveAck != null && message.hasOwnProperty(\"leaveAck\"))\n            object.leaveAck = $root.SdkLeaveAckFrame.toObject(message.leaveAck, options);\n        if (message.bitrates != null && message.hasOwnProperty(\"bitrates\"))\n            object.bitrates = $root.SdkBitrateFrame.toObject(message.bitrates, options);\n        if (message.audioControl != null && message.hasOwnProperty(\"audioControl\"))\n            object.audioControl = $root.SdkAudioControlFrame.toObject(message.audioControl, options);\n        if (message.audioMetadata != null && message.hasOwnProperty(\"audioMetadata\"))\n            object.audioMetadata = $root.SdkAudioMetadataFrame.toObject(message.audioMetadata, options);\n        if (message.audioStreamIdInfo != null && message.hasOwnProperty(\"audioStreamIdInfo\"))\n            object.audioStreamIdInfo = $root.SdkAudioStreamIdInfoFrame.toObject(message.audioStreamIdInfo, options);\n        if (message.pingPong != null && message.hasOwnProperty(\"pingPong\"))\n            object.pingPong = $root.SdkPingPongFrame.toObject(message.pingPong, options);\n        if (message.audioStatus != null && message.hasOwnProperty(\"audioStatus\"))\n            object.audioStatus = $root.SdkAudioStatusFrame.toObject(message.audioStatus, options);\n        if (message.clientMetric != null && message.hasOwnProperty(\"clientMetric\"))\n            object.clientMetric = $root.SdkClientMetricFrame.toObject(message.clientMetric, options);\n        if (message.dataMessage != null && message.hasOwnProperty(\"dataMessage\"))\n            object.dataMessage = $root.SdkDataMessageFrame.toObject(message.dataMessage, options);\n        if (message.remoteVideoUpdate != null && message.hasOwnProperty(\"remoteVideoUpdate\"))\n            object.remoteVideoUpdate = $root.SdkRemoteVideoUpdateFrame.toObject(message.remoteVideoUpdate, options);\n        if (message.primaryMeetingJoin != null && message.hasOwnProperty(\"primaryMeetingJoin\"))\n            object.primaryMeetingJoin = $root.SdkPrimaryMeetingJoinFrame.toObject(message.primaryMeetingJoin, options);\n        if (message.primaryMeetingJoinAck != null && message.hasOwnProperty(\"primaryMeetingJoinAck\"))\n            object.primaryMeetingJoinAck = $root.SdkPrimaryMeetingJoinAckFrame.toObject(message.primaryMeetingJoinAck, options);\n        if (message.primaryMeetingLeave != null && message.hasOwnProperty(\"primaryMeetingLeave\"))\n            object.primaryMeetingLeave = $root.SdkPrimaryMeetingLeaveFrame.toObject(message.primaryMeetingLeave, options);\n        if (message.notification != null && message.hasOwnProperty(\"notification\"))\n            object.notification = $root.SdkNotificationFrame.toObject(message.notification, options);\n        return object;\n    };\n\n    /**\n     * Converts this SdkSignalFrame to JSON.\n     * @function toJSON\n     * @memberof SdkSignalFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkSignalFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkSignalFrame\n     * @function getTypeUrl\n     * @memberof SdkSignalFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkSignalFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkSignalFrame\";\n    };\n\n    /**\n     * Type enum.\n     * @name SdkSignalFrame.Type\n     * @enum {number}\n     * @property {number} JOIN=1 JOIN value\n     * @property {number} JOIN_ACK=2 JOIN_ACK value\n     * @property {number} SUBSCRIBE=3 SUBSCRIBE value\n     * @property {number} SUBSCRIBE_ACK=4 SUBSCRIBE_ACK value\n     * @property {number} INDEX=5 INDEX value\n     * @property {number} PAUSE=7 PAUSE value\n     * @property {number} RESUME=8 RESUME value\n     * @property {number} LEAVE=9 LEAVE value\n     * @property {number} LEAVE_ACK=10 LEAVE_ACK value\n     * @property {number} BITRATES=13 BITRATES value\n     * @property {number} AUDIO_CONTROL=16 AUDIO_CONTROL value\n     * @property {number} AUDIO_METADATA=17 AUDIO_METADATA value\n     * @property {number} AUDIO_STREAM_ID_INFO=18 AUDIO_STREAM_ID_INFO value\n     * @property {number} PING_PONG=19 PING_PONG value\n     * @property {number} AUDIO_STATUS=20 AUDIO_STATUS value\n     * @property {number} CLIENT_METRIC=21 CLIENT_METRIC value\n     * @property {number} DATA_MESSAGE=22 DATA_MESSAGE value\n     * @property {number} REMOTE_VIDEO_UPDATE=24 REMOTE_VIDEO_UPDATE value\n     * @property {number} PRIMARY_MEETING_JOIN=25 PRIMARY_MEETING_JOIN value\n     * @property {number} PRIMARY_MEETING_JOIN_ACK=26 PRIMARY_MEETING_JOIN_ACK value\n     * @property {number} PRIMARY_MEETING_LEAVE=27 PRIMARY_MEETING_LEAVE value\n     * @property {number} NOTIFICATION=34 NOTIFICATION value\n     */\n    SdkSignalFrame.Type = (function() {\n        var valuesById = {}, values = Object.create(valuesById);\n        values[valuesById[1] = \"JOIN\"] = 1;\n        values[valuesById[2] = \"JOIN_ACK\"] = 2;\n        values[valuesById[3] = \"SUBSCRIBE\"] = 3;\n        values[valuesById[4] = \"SUBSCRIBE_ACK\"] = 4;\n        values[valuesById[5] = \"INDEX\"] = 5;\n        values[valuesById[7] = \"PAUSE\"] = 7;\n        values[valuesById[8] = \"RESUME\"] = 8;\n        values[valuesById[9] = \"LEAVE\"] = 9;\n        values[valuesById[10] = \"LEAVE_ACK\"] = 10;\n        values[valuesById[13] = \"BITRATES\"] = 13;\n        values[valuesById[16] = \"AUDIO_CONTROL\"] = 16;\n        values[valuesById[17] = \"AUDIO_METADATA\"] = 17;\n        values[valuesById[18] = \"AUDIO_STREAM_ID_INFO\"] = 18;\n        values[valuesById[19] = \"PING_PONG\"] = 19;\n        values[valuesById[20] = \"AUDIO_STATUS\"] = 20;\n        values[valuesById[21] = \"CLIENT_METRIC\"] = 21;\n        values[valuesById[22] = \"DATA_MESSAGE\"] = 22;\n        values[valuesById[24] = \"REMOTE_VIDEO_UPDATE\"] = 24;\n        values[valuesById[25] = \"PRIMARY_MEETING_JOIN\"] = 25;\n        values[valuesById[26] = \"PRIMARY_MEETING_JOIN_ACK\"] = 26;\n        values[valuesById[27] = \"PRIMARY_MEETING_LEAVE\"] = 27;\n        values[valuesById[34] = \"NOTIFICATION\"] = 34;\n        return values;\n    })();\n\n    return SdkSignalFrame;\n})();\n\n$root.SdkErrorFrame = (function() {\n\n    /**\n     * Properties of a SdkErrorFrame.\n     * @name ISdkErrorFrame\n     * @interface ISdkErrorFrame\n     * @property {number|null} [status] SdkErrorFrame status\n     * @property {string|null} [description] SdkErrorFrame description\n     */\n\n    /**\n     * Constructs a new SdkErrorFrame.\n     * @name SdkErrorFrame\n     * @classdesc Represents a SdkErrorFrame.\n     * @implements ISdkErrorFrame\n     * @constructor\n     * @param {ISdkErrorFrame=} [properties] Properties to set\n     */\n    function SdkErrorFrame(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkErrorFrame status.\n     * @member {number} status\n     * @memberof SdkErrorFrame\n     * @instance\n     */\n    SdkErrorFrame.prototype.status = 0;\n\n    /**\n     * SdkErrorFrame description.\n     * @member {string} description\n     * @memberof SdkErrorFrame\n     * @instance\n     */\n    SdkErrorFrame.prototype.description = \"\";\n\n    /**\n     * Creates a new SdkErrorFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkErrorFrame\n     * @static\n     * @param {ISdkErrorFrame=} [properties] Properties to set\n     * @returns {SdkErrorFrame} SdkErrorFrame instance\n     */\n    SdkErrorFrame.create = function create(properties) {\n        return new SdkErrorFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkErrorFrame message. Does not implicitly {@link SdkErrorFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkErrorFrame\n     * @static\n     * @param {ISdkErrorFrame} message SdkErrorFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkErrorFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.status != null && Object.hasOwnProperty.call(message, \"status\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.status);\n        if (message.description != null && Object.hasOwnProperty.call(message, \"description\"))\n            writer.uint32(/* id 2, wireType 2 =*/18).string(message.description);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkErrorFrame message, length delimited. Does not implicitly {@link SdkErrorFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkErrorFrame\n     * @static\n     * @param {ISdkErrorFrame} message SdkErrorFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkErrorFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkErrorFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkErrorFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkErrorFrame} SdkErrorFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkErrorFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkErrorFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.status = reader.uint32();\n                    break;\n                }\n            case 2: {\n                    message.description = reader.string();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkErrorFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkErrorFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkErrorFrame} SdkErrorFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkErrorFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkErrorFrame message.\n     * @function verify\n     * @memberof SdkErrorFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkErrorFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.status != null && message.hasOwnProperty(\"status\"))\n            if (!$util.isInteger(message.status))\n                return \"status: integer expected\";\n        if (message.description != null && message.hasOwnProperty(\"description\"))\n            if (!$util.isString(message.description))\n                return \"description: string expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkErrorFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkErrorFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkErrorFrame} SdkErrorFrame\n     */\n    SdkErrorFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkErrorFrame)\n            return object;\n        var message = new $root.SdkErrorFrame();\n        if (object.status != null)\n            message.status = object.status >>> 0;\n        if (object.description != null)\n            message.description = String(object.description);\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkErrorFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkErrorFrame\n     * @static\n     * @param {SdkErrorFrame} message SdkErrorFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkErrorFrame.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            object.status = 0;\n            object.description = \"\";\n        }\n        if (message.status != null && message.hasOwnProperty(\"status\"))\n            object.status = message.status;\n        if (message.description != null && message.hasOwnProperty(\"description\"))\n            object.description = message.description;\n        return object;\n    };\n\n    /**\n     * Converts this SdkErrorFrame to JSON.\n     * @function toJSON\n     * @memberof SdkErrorFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkErrorFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkErrorFrame\n     * @function getTypeUrl\n     * @memberof SdkErrorFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkErrorFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkErrorFrame\";\n    };\n\n    return SdkErrorFrame;\n})();\n\n/**\n * SdkJoinFlags enum.\n * @name SdkJoinFlags\n * @enum {number}\n * @property {number} HAS_STREAM_UPDATE=2 HAS_STREAM_UPDATE value\n * @property {number} COMPLETE_VIDEO_SOURCES_LIST=16 COMPLETE_VIDEO_SOURCES_LIST value\n * @property {number} EXCLUDE_SELF_CONTENT_IN_INDEX=32 EXCLUDE_SELF_CONTENT_IN_INDEX value\n */\n$root.SdkJoinFlags = (function() {\n    var valuesById = {}, values = Object.create(valuesById);\n    values[valuesById[2] = \"HAS_STREAM_UPDATE\"] = 2;\n    values[valuesById[16] = \"COMPLETE_VIDEO_SOURCES_LIST\"] = 16;\n    values[valuesById[32] = \"EXCLUDE_SELF_CONTENT_IN_INDEX\"] = 32;\n    return values;\n})();\n\n$root.SdkClientDetails = (function() {\n\n    /**\n     * Properties of a SdkClientDetails.\n     * @name ISdkClientDetails\n     * @interface ISdkClientDetails\n     * @property {string|null} [appName] SdkClientDetails appName\n     * @property {string|null} [appVersion] SdkClientDetails appVersion\n     * @property {string|null} [deviceModel] SdkClientDetails deviceModel\n     * @property {string|null} [deviceMake] SdkClientDetails deviceMake\n     * @property {string|null} [platformName] SdkClientDetails platformName\n     * @property {string|null} [platformVersion] SdkClientDetails platformVersion\n     * @property {string|null} [clientSource] SdkClientDetails clientSource\n     * @property {string|null} [chimeSdkVersion] SdkClientDetails chimeSdkVersion\n     * @property {string|null} [clientUtcOffset] SdkClientDetails clientUtcOffset\n     */\n\n    /**\n     * Constructs a new SdkClientDetails.\n     * @name SdkClientDetails\n     * @classdesc Represents a SdkClientDetails.\n     * @implements ISdkClientDetails\n     * @constructor\n     * @param {ISdkClientDetails=} [properties] Properties to set\n     */\n    function SdkClientDetails(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkClientDetails appName.\n     * @member {string} appName\n     * @memberof SdkClientDetails\n     * @instance\n     */\n    SdkClientDetails.prototype.appName = \"\";\n\n    /**\n     * SdkClientDetails appVersion.\n     * @member {string} appVersion\n     * @memberof SdkClientDetails\n     * @instance\n     */\n    SdkClientDetails.prototype.appVersion = \"\";\n\n    /**\n     * SdkClientDetails deviceModel.\n     * @member {string} deviceModel\n     * @memberof SdkClientDetails\n     * @instance\n     */\n    SdkClientDetails.prototype.deviceModel = \"\";\n\n    /**\n     * SdkClientDetails deviceMake.\n     * @member {string} deviceMake\n     * @memberof SdkClientDetails\n     * @instance\n     */\n    SdkClientDetails.prototype.deviceMake = \"\";\n\n    /**\n     * SdkClientDetails platformName.\n     * @member {string} platformName\n     * @memberof SdkClientDetails\n     * @instance\n     */\n    SdkClientDetails.prototype.platformName = \"\";\n\n    /**\n     * SdkClientDetails platformVersion.\n     * @member {string} platformVersion\n     * @memberof SdkClientDetails\n     * @instance\n     */\n    SdkClientDetails.prototype.platformVersion = \"\";\n\n    /**\n     * SdkClientDetails clientSource.\n     * @member {string} clientSource\n     * @memberof SdkClientDetails\n     * @instance\n     */\n    SdkClientDetails.prototype.clientSource = \"\";\n\n    /**\n     * SdkClientDetails chimeSdkVersion.\n     * @member {string} chimeSdkVersion\n     * @memberof SdkClientDetails\n     * @instance\n     */\n    SdkClientDetails.prototype.chimeSdkVersion = \"\";\n\n    /**\n     * SdkClientDetails clientUtcOffset.\n     * @member {string} clientUtcOffset\n     * @memberof SdkClientDetails\n     * @instance\n     */\n    SdkClientDetails.prototype.clientUtcOffset = \"\";\n\n    /**\n     * Creates a new SdkClientDetails instance using the specified properties.\n     * @function create\n     * @memberof SdkClientDetails\n     * @static\n     * @param {ISdkClientDetails=} [properties] Properties to set\n     * @returns {SdkClientDetails} SdkClientDetails instance\n     */\n    SdkClientDetails.create = function create(properties) {\n        return new SdkClientDetails(properties);\n    };\n\n    /**\n     * Encodes the specified SdkClientDetails message. Does not implicitly {@link SdkClientDetails.verify|verify} messages.\n     * @function encode\n     * @memberof SdkClientDetails\n     * @static\n     * @param {ISdkClientDetails} message SdkClientDetails message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkClientDetails.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.appName != null && Object.hasOwnProperty.call(message, \"appName\"))\n            writer.uint32(/* id 1, wireType 2 =*/10).string(message.appName);\n        if (message.appVersion != null && Object.hasOwnProperty.call(message, \"appVersion\"))\n            writer.uint32(/* id 2, wireType 2 =*/18).string(message.appVersion);\n        if (message.deviceModel != null && Object.hasOwnProperty.call(message, \"deviceModel\"))\n            writer.uint32(/* id 3, wireType 2 =*/26).string(message.deviceModel);\n        if (message.deviceMake != null && Object.hasOwnProperty.call(message, \"deviceMake\"))\n            writer.uint32(/* id 4, wireType 2 =*/34).string(message.deviceMake);\n        if (message.platformName != null && Object.hasOwnProperty.call(message, \"platformName\"))\n            writer.uint32(/* id 5, wireType 2 =*/42).string(message.platformName);\n        if (message.platformVersion != null && Object.hasOwnProperty.call(message, \"platformVersion\"))\n            writer.uint32(/* id 6, wireType 2 =*/50).string(message.platformVersion);\n        if (message.clientSource != null && Object.hasOwnProperty.call(message, \"clientSource\"))\n            writer.uint32(/* id 7, wireType 2 =*/58).string(message.clientSource);\n        if (message.chimeSdkVersion != null && Object.hasOwnProperty.call(message, \"chimeSdkVersion\"))\n            writer.uint32(/* id 8, wireType 2 =*/66).string(message.chimeSdkVersion);\n        if (message.clientUtcOffset != null && Object.hasOwnProperty.call(message, \"clientUtcOffset\"))\n            writer.uint32(/* id 9, wireType 2 =*/74).string(message.clientUtcOffset);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkClientDetails message, length delimited. Does not implicitly {@link SdkClientDetails.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkClientDetails\n     * @static\n     * @param {ISdkClientDetails} message SdkClientDetails message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkClientDetails.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkClientDetails message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkClientDetails\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkClientDetails} SdkClientDetails\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkClientDetails.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkClientDetails();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.appName = reader.string();\n                    break;\n                }\n            case 2: {\n                    message.appVersion = reader.string();\n                    break;\n                }\n            case 3: {\n                    message.deviceModel = reader.string();\n                    break;\n                }\n            case 4: {\n                    message.deviceMake = reader.string();\n                    break;\n                }\n            case 5: {\n                    message.platformName = reader.string();\n                    break;\n                }\n            case 6: {\n                    message.platformVersion = reader.string();\n                    break;\n                }\n            case 7: {\n                    message.clientSource = reader.string();\n                    break;\n                }\n            case 8: {\n                    message.chimeSdkVersion = reader.string();\n                    break;\n                }\n            case 9: {\n                    message.clientUtcOffset = reader.string();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkClientDetails message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkClientDetails\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkClientDetails} SdkClientDetails\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkClientDetails.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkClientDetails message.\n     * @function verify\n     * @memberof SdkClientDetails\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkClientDetails.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.appName != null && message.hasOwnProperty(\"appName\"))\n            if (!$util.isString(message.appName))\n                return \"appName: string expected\";\n        if (message.appVersion != null && message.hasOwnProperty(\"appVersion\"))\n            if (!$util.isString(message.appVersion))\n                return \"appVersion: string expected\";\n        if (message.deviceModel != null && message.hasOwnProperty(\"deviceModel\"))\n            if (!$util.isString(message.deviceModel))\n                return \"deviceModel: string expected\";\n        if (message.deviceMake != null && message.hasOwnProperty(\"deviceMake\"))\n            if (!$util.isString(message.deviceMake))\n                return \"deviceMake: string expected\";\n        if (message.platformName != null && message.hasOwnProperty(\"platformName\"))\n            if (!$util.isString(message.platformName))\n                return \"platformName: string expected\";\n        if (message.platformVersion != null && message.hasOwnProperty(\"platformVersion\"))\n            if (!$util.isString(message.platformVersion))\n                return \"platformVersion: string expected\";\n        if (message.clientSource != null && message.hasOwnProperty(\"clientSource\"))\n            if (!$util.isString(message.clientSource))\n                return \"clientSource: string expected\";\n        if (message.chimeSdkVersion != null && message.hasOwnProperty(\"chimeSdkVersion\"))\n            if (!$util.isString(message.chimeSdkVersion))\n                return \"chimeSdkVersion: string expected\";\n        if (message.clientUtcOffset != null && message.hasOwnProperty(\"clientUtcOffset\"))\n            if (!$util.isString(message.clientUtcOffset))\n                return \"clientUtcOffset: string expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkClientDetails message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkClientDetails\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkClientDetails} SdkClientDetails\n     */\n    SdkClientDetails.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkClientDetails)\n            return object;\n        var message = new $root.SdkClientDetails();\n        if (object.appName != null)\n            message.appName = String(object.appName);\n        if (object.appVersion != null)\n            message.appVersion = String(object.appVersion);\n        if (object.deviceModel != null)\n            message.deviceModel = String(object.deviceModel);\n        if (object.deviceMake != null)\n            message.deviceMake = String(object.deviceMake);\n        if (object.platformName != null)\n            message.platformName = String(object.platformName);\n        if (object.platformVersion != null)\n            message.platformVersion = String(object.platformVersion);\n        if (object.clientSource != null)\n            message.clientSource = String(object.clientSource);\n        if (object.chimeSdkVersion != null)\n            message.chimeSdkVersion = String(object.chimeSdkVersion);\n        if (object.clientUtcOffset != null)\n            message.clientUtcOffset = String(object.clientUtcOffset);\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkClientDetails message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkClientDetails\n     * @static\n     * @param {SdkClientDetails} message SdkClientDetails\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkClientDetails.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            object.appName = \"\";\n            object.appVersion = \"\";\n            object.deviceModel = \"\";\n            object.deviceMake = \"\";\n            object.platformName = \"\";\n            object.platformVersion = \"\";\n            object.clientSource = \"\";\n            object.chimeSdkVersion = \"\";\n            object.clientUtcOffset = \"\";\n        }\n        if (message.appName != null && message.hasOwnProperty(\"appName\"))\n            object.appName = message.appName;\n        if (message.appVersion != null && message.hasOwnProperty(\"appVersion\"))\n            object.appVersion = message.appVersion;\n        if (message.deviceModel != null && message.hasOwnProperty(\"deviceModel\"))\n            object.deviceModel = message.deviceModel;\n        if (message.deviceMake != null && message.hasOwnProperty(\"deviceMake\"))\n            object.deviceMake = message.deviceMake;\n        if (message.platformName != null && message.hasOwnProperty(\"platformName\"))\n            object.platformName = message.platformName;\n        if (message.platformVersion != null && message.hasOwnProperty(\"platformVersion\"))\n            object.platformVersion = message.platformVersion;\n        if (message.clientSource != null && message.hasOwnProperty(\"clientSource\"))\n            object.clientSource = message.clientSource;\n        if (message.chimeSdkVersion != null && message.hasOwnProperty(\"chimeSdkVersion\"))\n            object.chimeSdkVersion = message.chimeSdkVersion;\n        if (message.clientUtcOffset != null && message.hasOwnProperty(\"clientUtcOffset\"))\n            object.clientUtcOffset = message.clientUtcOffset;\n        return object;\n    };\n\n    /**\n     * Converts this SdkClientDetails to JSON.\n     * @function toJSON\n     * @memberof SdkClientDetails\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkClientDetails.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkClientDetails\n     * @function getTypeUrl\n     * @memberof SdkClientDetails\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkClientDetails.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkClientDetails\";\n    };\n\n    return SdkClientDetails;\n})();\n\n/**\n * SdkServerSideNetworkAdaption enum.\n * @name SdkServerSideNetworkAdaption\n * @enum {number}\n * @property {number} DEFAULT=1 DEFAULT value\n * @property {number} NONE=2 NONE value\n * @property {number} BANDWIDTH_PROBING=3 BANDWIDTH_PROBING value\n * @property {number} BANDWIDTH_PROBING_AND_VIDEO_QUALITY_ADAPTION=4 BANDWIDTH_PROBING_AND_VIDEO_QUALITY_ADAPTION value\n */\n$root.SdkServerSideNetworkAdaption = (function() {\n    var valuesById = {}, values = Object.create(valuesById);\n    values[valuesById[1] = \"DEFAULT\"] = 1;\n    values[valuesById[2] = \"NONE\"] = 2;\n    values[valuesById[3] = \"BANDWIDTH_PROBING\"] = 3;\n    values[valuesById[4] = \"BANDWIDTH_PROBING_AND_VIDEO_QUALITY_ADAPTION\"] = 4;\n    return values;\n})();\n\n$root.SdkJoinFrame = (function() {\n\n    /**\n     * Properties of a SdkJoinFrame.\n     * @name ISdkJoinFrame\n     * @interface ISdkJoinFrame\n     * @property {number|null} [protocolVersion] SdkJoinFrame protocolVersion\n     * @property {number|null} [maxNumOfVideos] SdkJoinFrame maxNumOfVideos\n     * @property {number|null} [flags] SdkJoinFrame flags\n     * @property {ISdkClientDetails|null} [clientDetails] SdkJoinFrame clientDetails\n     * @property {number|Long|null} [audioSessionId] SdkJoinFrame audioSessionId\n     * @property {boolean|null} [wantsCompressedSdp] SdkJoinFrame wantsCompressedSdp\n     * @property {SdkServerSideNetworkAdaption|null} [serverSideNetworkAdaption] SdkJoinFrame serverSideNetworkAdaption\n     * @property {Array.<SdkServerSideNetworkAdaption>|null} [supportedServerSideNetworkAdaptions] SdkJoinFrame supportedServerSideNetworkAdaptions\n     * @property {boolean|null} [wantsAllTemporalLayersInIndex] SdkJoinFrame wantsAllTemporalLayersInIndex\n     * @property {boolean|null} [disablePeriodicKeyframeRequestOnContentSender] SdkJoinFrame disablePeriodicKeyframeRequestOnContentSender\n     */\n\n    /**\n     * Constructs a new SdkJoinFrame.\n     * @name SdkJoinFrame\n     * @classdesc Represents a SdkJoinFrame.\n     * @implements ISdkJoinFrame\n     * @constructor\n     * @param {ISdkJoinFrame=} [properties] Properties to set\n     */\n    function SdkJoinFrame(properties) {\n        this.supportedServerSideNetworkAdaptions = [];\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkJoinFrame protocolVersion.\n     * @member {number} protocolVersion\n     * @memberof SdkJoinFrame\n     * @instance\n     */\n    SdkJoinFrame.prototype.protocolVersion = 2;\n\n    /**\n     * SdkJoinFrame maxNumOfVideos.\n     * @member {number} maxNumOfVideos\n     * @memberof SdkJoinFrame\n     * @instance\n     */\n    SdkJoinFrame.prototype.maxNumOfVideos = 0;\n\n    /**\n     * SdkJoinFrame flags.\n     * @member {number} flags\n     * @memberof SdkJoinFrame\n     * @instance\n     */\n    SdkJoinFrame.prototype.flags = 0;\n\n    /**\n     * SdkJoinFrame clientDetails.\n     * @member {ISdkClientDetails|null|undefined} clientDetails\n     * @memberof SdkJoinFrame\n     * @instance\n     */\n    SdkJoinFrame.prototype.clientDetails = null;\n\n    /**\n     * SdkJoinFrame audioSessionId.\n     * @member {number|Long} audioSessionId\n     * @memberof SdkJoinFrame\n     * @instance\n     */\n    SdkJoinFrame.prototype.audioSessionId = $util.Long ? $util.Long.fromBits(0,0,true) : 0;\n\n    /**\n     * SdkJoinFrame wantsCompressedSdp.\n     * @member {boolean} wantsCompressedSdp\n     * @memberof SdkJoinFrame\n     * @instance\n     */\n    SdkJoinFrame.prototype.wantsCompressedSdp = false;\n\n    /**\n     * SdkJoinFrame serverSideNetworkAdaption.\n     * @member {SdkServerSideNetworkAdaption} serverSideNetworkAdaption\n     * @memberof SdkJoinFrame\n     * @instance\n     */\n    SdkJoinFrame.prototype.serverSideNetworkAdaption = 1;\n\n    /**\n     * SdkJoinFrame supportedServerSideNetworkAdaptions.\n     * @member {Array.<SdkServerSideNetworkAdaption>} supportedServerSideNetworkAdaptions\n     * @memberof SdkJoinFrame\n     * @instance\n     */\n    SdkJoinFrame.prototype.supportedServerSideNetworkAdaptions = $util.emptyArray;\n\n    /**\n     * SdkJoinFrame wantsAllTemporalLayersInIndex.\n     * @member {boolean} wantsAllTemporalLayersInIndex\n     * @memberof SdkJoinFrame\n     * @instance\n     */\n    SdkJoinFrame.prototype.wantsAllTemporalLayersInIndex = false;\n\n    /**\n     * SdkJoinFrame disablePeriodicKeyframeRequestOnContentSender.\n     * @member {boolean} disablePeriodicKeyframeRequestOnContentSender\n     * @memberof SdkJoinFrame\n     * @instance\n     */\n    SdkJoinFrame.prototype.disablePeriodicKeyframeRequestOnContentSender = false;\n\n    /**\n     * Creates a new SdkJoinFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkJoinFrame\n     * @static\n     * @param {ISdkJoinFrame=} [properties] Properties to set\n     * @returns {SdkJoinFrame} SdkJoinFrame instance\n     */\n    SdkJoinFrame.create = function create(properties) {\n        return new SdkJoinFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkJoinFrame message. Does not implicitly {@link SdkJoinFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkJoinFrame\n     * @static\n     * @param {ISdkJoinFrame} message SdkJoinFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkJoinFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.protocolVersion != null && Object.hasOwnProperty.call(message, \"protocolVersion\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.protocolVersion);\n        if (message.maxNumOfVideos != null && Object.hasOwnProperty.call(message, \"maxNumOfVideos\"))\n            writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.maxNumOfVideos);\n        if (message.flags != null && Object.hasOwnProperty.call(message, \"flags\"))\n            writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.flags);\n        if (message.clientDetails != null && Object.hasOwnProperty.call(message, \"clientDetails\"))\n            $root.SdkClientDetails.encode(message.clientDetails, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();\n        if (message.audioSessionId != null && Object.hasOwnProperty.call(message, \"audioSessionId\"))\n            writer.uint32(/* id 6, wireType 0 =*/48).uint64(message.audioSessionId);\n        if (message.wantsCompressedSdp != null && Object.hasOwnProperty.call(message, \"wantsCompressedSdp\"))\n            writer.uint32(/* id 7, wireType 0 =*/56).bool(message.wantsCompressedSdp);\n        if (message.serverSideNetworkAdaption != null && Object.hasOwnProperty.call(message, \"serverSideNetworkAdaption\"))\n            writer.uint32(/* id 10, wireType 0 =*/80).int32(message.serverSideNetworkAdaption);\n        if (message.supportedServerSideNetworkAdaptions != null && message.supportedServerSideNetworkAdaptions.length)\n            for (var i = 0; i < message.supportedServerSideNetworkAdaptions.length; ++i)\n                writer.uint32(/* id 11, wireType 0 =*/88).int32(message.supportedServerSideNetworkAdaptions[i]);\n        if (message.wantsAllTemporalLayersInIndex != null && Object.hasOwnProperty.call(message, \"wantsAllTemporalLayersInIndex\"))\n            writer.uint32(/* id 12, wireType 0 =*/96).bool(message.wantsAllTemporalLayersInIndex);\n        if (message.disablePeriodicKeyframeRequestOnContentSender != null && Object.hasOwnProperty.call(message, \"disablePeriodicKeyframeRequestOnContentSender\"))\n            writer.uint32(/* id 13, wireType 0 =*/104).bool(message.disablePeriodicKeyframeRequestOnContentSender);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkJoinFrame message, length delimited. Does not implicitly {@link SdkJoinFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkJoinFrame\n     * @static\n     * @param {ISdkJoinFrame} message SdkJoinFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkJoinFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkJoinFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkJoinFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkJoinFrame} SdkJoinFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkJoinFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkJoinFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.protocolVersion = reader.uint32();\n                    break;\n                }\n            case 2: {\n                    message.maxNumOfVideos = reader.uint32();\n                    break;\n                }\n            case 3: {\n                    message.flags = reader.uint32();\n                    break;\n                }\n            case 4: {\n                    message.clientDetails = $root.SdkClientDetails.decode(reader, reader.uint32());\n                    break;\n                }\n            case 6: {\n                    message.audioSessionId = reader.uint64();\n                    break;\n                }\n            case 7: {\n                    message.wantsCompressedSdp = reader.bool();\n                    break;\n                }\n            case 10: {\n                    message.serverSideNetworkAdaption = reader.int32();\n                    break;\n                }\n            case 11: {\n                    if (!(message.supportedServerSideNetworkAdaptions && message.supportedServerSideNetworkAdaptions.length))\n                        message.supportedServerSideNetworkAdaptions = [];\n                    if ((tag & 7) === 2) {\n                        var end2 = reader.uint32() + reader.pos;\n                        while (reader.pos < end2)\n                            message.supportedServerSideNetworkAdaptions.push(reader.int32());\n                    } else\n                        message.supportedServerSideNetworkAdaptions.push(reader.int32());\n                    break;\n                }\n            case 12: {\n                    message.wantsAllTemporalLayersInIndex = reader.bool();\n                    break;\n                }\n            case 13: {\n                    message.disablePeriodicKeyframeRequestOnContentSender = reader.bool();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkJoinFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkJoinFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkJoinFrame} SdkJoinFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkJoinFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkJoinFrame message.\n     * @function verify\n     * @memberof SdkJoinFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkJoinFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.protocolVersion != null && message.hasOwnProperty(\"protocolVersion\"))\n            if (!$util.isInteger(message.protocolVersion))\n                return \"protocolVersion: integer expected\";\n        if (message.maxNumOfVideos != null && message.hasOwnProperty(\"maxNumOfVideos\"))\n            if (!$util.isInteger(message.maxNumOfVideos))\n                return \"maxNumOfVideos: integer expected\";\n        if (message.flags != null && message.hasOwnProperty(\"flags\"))\n            if (!$util.isInteger(message.flags))\n                return \"flags: integer expected\";\n        if (message.clientDetails != null && message.hasOwnProperty(\"clientDetails\")) {\n            var error = $root.SdkClientDetails.verify(message.clientDetails);\n            if (error)\n                return \"clientDetails.\" + error;\n        }\n        if (message.audioSessionId != null && message.hasOwnProperty(\"audioSessionId\"))\n            if (!$util.isInteger(message.audioSessionId) && !(message.audioSessionId && $util.isInteger(message.audioSessionId.low) && $util.isInteger(message.audioSessionId.high)))\n                return \"audioSessionId: integer|Long expected\";\n        if (message.wantsCompressedSdp != null && message.hasOwnProperty(\"wantsCompressedSdp\"))\n            if (typeof message.wantsCompressedSdp !== \"boolean\")\n                return \"wantsCompressedSdp: boolean expected\";\n        if (message.serverSideNetworkAdaption != null && message.hasOwnProperty(\"serverSideNetworkAdaption\"))\n            switch (message.serverSideNetworkAdaption) {\n            default:\n                return \"serverSideNetworkAdaption: enum value expected\";\n            case 1:\n            case 2:\n            case 3:\n            case 4:\n                break;\n            }\n        if (message.supportedServerSideNetworkAdaptions != null && message.hasOwnProperty(\"supportedServerSideNetworkAdaptions\")) {\n            if (!Array.isArray(message.supportedServerSideNetworkAdaptions))\n                return \"supportedServerSideNetworkAdaptions: array expected\";\n            for (var i = 0; i < message.supportedServerSideNetworkAdaptions.length; ++i)\n                switch (message.supportedServerSideNetworkAdaptions[i]) {\n                default:\n                    return \"supportedServerSideNetworkAdaptions: enum value[] expected\";\n                case 1:\n                case 2:\n                case 3:\n                case 4:\n                    break;\n                }\n        }\n        if (message.wantsAllTemporalLayersInIndex != null && message.hasOwnProperty(\"wantsAllTemporalLayersInIndex\"))\n            if (typeof message.wantsAllTemporalLayersInIndex !== \"boolean\")\n                return \"wantsAllTemporalLayersInIndex: boolean expected\";\n        if (message.disablePeriodicKeyframeRequestOnContentSender != null && message.hasOwnProperty(\"disablePeriodicKeyframeRequestOnContentSender\"))\n            if (typeof message.disablePeriodicKeyframeRequestOnContentSender !== \"boolean\")\n                return \"disablePeriodicKeyframeRequestOnContentSender: boolean expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkJoinFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkJoinFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkJoinFrame} SdkJoinFrame\n     */\n    SdkJoinFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkJoinFrame)\n            return object;\n        var message = new $root.SdkJoinFrame();\n        if (object.protocolVersion != null)\n            message.protocolVersion = object.protocolVersion >>> 0;\n        if (object.maxNumOfVideos != null)\n            message.maxNumOfVideos = object.maxNumOfVideos >>> 0;\n        if (object.flags != null)\n            message.flags = object.flags >>> 0;\n        if (object.clientDetails != null) {\n            if (typeof object.clientDetails !== \"object\")\n                throw TypeError(\".SdkJoinFrame.clientDetails: object expected\");\n            message.clientDetails = $root.SdkClientDetails.fromObject(object.clientDetails);\n        }\n        if (object.audioSessionId != null)\n            if ($util.Long)\n                (message.audioSessionId = $util.Long.fromValue(object.audioSessionId)).unsigned = true;\n            else if (typeof object.audioSessionId === \"string\")\n                message.audioSessionId = parseInt(object.audioSessionId, 10);\n            else if (typeof object.audioSessionId === \"number\")\n                message.audioSessionId = object.audioSessionId;\n            else if (typeof object.audioSessionId === \"object\")\n                message.audioSessionId = new $util.LongBits(object.audioSessionId.low >>> 0, object.audioSessionId.high >>> 0).toNumber(true);\n        if (object.wantsCompressedSdp != null)\n            message.wantsCompressedSdp = Boolean(object.wantsCompressedSdp);\n        switch (object.serverSideNetworkAdaption) {\n        default:\n            if (typeof object.serverSideNetworkAdaption === \"number\") {\n                message.serverSideNetworkAdaption = object.serverSideNetworkAdaption;\n                break;\n            }\n            break;\n        case \"DEFAULT\":\n        case 1:\n            message.serverSideNetworkAdaption = 1;\n            break;\n        case \"NONE\":\n        case 2:\n            message.serverSideNetworkAdaption = 2;\n            break;\n        case \"BANDWIDTH_PROBING\":\n        case 3:\n            message.serverSideNetworkAdaption = 3;\n            break;\n        case \"BANDWIDTH_PROBING_AND_VIDEO_QUALITY_ADAPTION\":\n        case 4:\n            message.serverSideNetworkAdaption = 4;\n            break;\n        }\n        if (object.supportedServerSideNetworkAdaptions) {\n            if (!Array.isArray(object.supportedServerSideNetworkAdaptions))\n                throw TypeError(\".SdkJoinFrame.supportedServerSideNetworkAdaptions: array expected\");\n            message.supportedServerSideNetworkAdaptions = [];\n            for (var i = 0; i < object.supportedServerSideNetworkAdaptions.length; ++i)\n                switch (object.supportedServerSideNetworkAdaptions[i]) {\n                default:\n                    if (typeof object.supportedServerSideNetworkAdaptions[i] === \"number\") {\n                        message.supportedServerSideNetworkAdaptions[i] = object.supportedServerSideNetworkAdaptions[i];\n                        break;\n                    }\n                case \"DEFAULT\":\n                case 1:\n                    message.supportedServerSideNetworkAdaptions[i] = 1;\n                    break;\n                case \"NONE\":\n                case 2:\n                    message.supportedServerSideNetworkAdaptions[i] = 2;\n                    break;\n                case \"BANDWIDTH_PROBING\":\n                case 3:\n                    message.supportedServerSideNetworkAdaptions[i] = 3;\n                    break;\n                case \"BANDWIDTH_PROBING_AND_VIDEO_QUALITY_ADAPTION\":\n                case 4:\n                    message.supportedServerSideNetworkAdaptions[i] = 4;\n                    break;\n                }\n        }\n        if (object.wantsAllTemporalLayersInIndex != null)\n            message.wantsAllTemporalLayersInIndex = Boolean(object.wantsAllTemporalLayersInIndex);\n        if (object.disablePeriodicKeyframeRequestOnContentSender != null)\n            message.disablePeriodicKeyframeRequestOnContentSender = Boolean(object.disablePeriodicKeyframeRequestOnContentSender);\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkJoinFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkJoinFrame\n     * @static\n     * @param {SdkJoinFrame} message SdkJoinFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkJoinFrame.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.arrays || options.defaults)\n            object.supportedServerSideNetworkAdaptions = [];\n        if (options.defaults) {\n            object.protocolVersion = 2;\n            object.maxNumOfVideos = 0;\n            object.flags = 0;\n            object.clientDetails = null;\n            if ($util.Long) {\n                var long = new $util.Long(0, 0, true);\n                object.audioSessionId = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n            } else\n                object.audioSessionId = options.longs === String ? \"0\" : 0;\n            object.wantsCompressedSdp = false;\n            object.serverSideNetworkAdaption = options.enums === String ? \"DEFAULT\" : 1;\n            object.wantsAllTemporalLayersInIndex = false;\n            object.disablePeriodicKeyframeRequestOnContentSender = false;\n        }\n        if (message.protocolVersion != null && message.hasOwnProperty(\"protocolVersion\"))\n            object.protocolVersion = message.protocolVersion;\n        if (message.maxNumOfVideos != null && message.hasOwnProperty(\"maxNumOfVideos\"))\n            object.maxNumOfVideos = message.maxNumOfVideos;\n        if (message.flags != null && message.hasOwnProperty(\"flags\"))\n            object.flags = message.flags;\n        if (message.clientDetails != null && message.hasOwnProperty(\"clientDetails\"))\n            object.clientDetails = $root.SdkClientDetails.toObject(message.clientDetails, options);\n        if (message.audioSessionId != null && message.hasOwnProperty(\"audioSessionId\"))\n            if (typeof message.audioSessionId === \"number\")\n                object.audioSessionId = options.longs === String ? String(message.audioSessionId) : message.audioSessionId;\n            else\n                object.audioSessionId = options.longs === String ? $util.Long.prototype.toString.call(message.audioSessionId) : options.longs === Number ? new $util.LongBits(message.audioSessionId.low >>> 0, message.audioSessionId.high >>> 0).toNumber(true) : message.audioSessionId;\n        if (message.wantsCompressedSdp != null && message.hasOwnProperty(\"wantsCompressedSdp\"))\n            object.wantsCompressedSdp = message.wantsCompressedSdp;\n        if (message.serverSideNetworkAdaption != null && message.hasOwnProperty(\"serverSideNetworkAdaption\"))\n            object.serverSideNetworkAdaption = options.enums === String ? $root.SdkServerSideNetworkAdaption[message.serverSideNetworkAdaption] === undefined ? message.serverSideNetworkAdaption : $root.SdkServerSideNetworkAdaption[message.serverSideNetworkAdaption] : message.serverSideNetworkAdaption;\n        if (message.supportedServerSideNetworkAdaptions && message.supportedServerSideNetworkAdaptions.length) {\n            object.supportedServerSideNetworkAdaptions = [];\n            for (var j = 0; j < message.supportedServerSideNetworkAdaptions.length; ++j)\n                object.supportedServerSideNetworkAdaptions[j] = options.enums === String ? $root.SdkServerSideNetworkAdaption[message.supportedServerSideNetworkAdaptions[j]] === undefined ? message.supportedServerSideNetworkAdaptions[j] : $root.SdkServerSideNetworkAdaption[message.supportedServerSideNetworkAdaptions[j]] : message.supportedServerSideNetworkAdaptions[j];\n        }\n        if (message.wantsAllTemporalLayersInIndex != null && message.hasOwnProperty(\"wantsAllTemporalLayersInIndex\"))\n            object.wantsAllTemporalLayersInIndex = message.wantsAllTemporalLayersInIndex;\n        if (message.disablePeriodicKeyframeRequestOnContentSender != null && message.hasOwnProperty(\"disablePeriodicKeyframeRequestOnContentSender\"))\n            object.disablePeriodicKeyframeRequestOnContentSender = message.disablePeriodicKeyframeRequestOnContentSender;\n        return object;\n    };\n\n    /**\n     * Converts this SdkJoinFrame to JSON.\n     * @function toJSON\n     * @memberof SdkJoinFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkJoinFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkJoinFrame\n     * @function getTypeUrl\n     * @memberof SdkJoinFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkJoinFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkJoinFrame\";\n    };\n\n    return SdkJoinFrame;\n})();\n\n$root.SdkJoinAckFrame = (function() {\n\n    /**\n     * Properties of a SdkJoinAckFrame.\n     * @name ISdkJoinAckFrame\n     * @interface ISdkJoinAckFrame\n     * @property {ISdkTurnCredentials|null} [turnCredentials] SdkJoinAckFrame turnCredentials\n     * @property {number|null} [videoSubscriptionLimit] SdkJoinAckFrame videoSubscriptionLimit\n     * @property {boolean|null} [wantsCompressedSdp] SdkJoinAckFrame wantsCompressedSdp\n     * @property {SdkServerSideNetworkAdaption|null} [defaultServerSideNetworkAdaption] SdkJoinAckFrame defaultServerSideNetworkAdaption\n     */\n\n    /**\n     * Constructs a new SdkJoinAckFrame.\n     * @name SdkJoinAckFrame\n     * @classdesc Represents a SdkJoinAckFrame.\n     * @implements ISdkJoinAckFrame\n     * @constructor\n     * @param {ISdkJoinAckFrame=} [properties] Properties to set\n     */\n    function SdkJoinAckFrame(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkJoinAckFrame turnCredentials.\n     * @member {ISdkTurnCredentials|null|undefined} turnCredentials\n     * @memberof SdkJoinAckFrame\n     * @instance\n     */\n    SdkJoinAckFrame.prototype.turnCredentials = null;\n\n    /**\n     * SdkJoinAckFrame videoSubscriptionLimit.\n     * @member {number} videoSubscriptionLimit\n     * @memberof SdkJoinAckFrame\n     * @instance\n     */\n    SdkJoinAckFrame.prototype.videoSubscriptionLimit = 0;\n\n    /**\n     * SdkJoinAckFrame wantsCompressedSdp.\n     * @member {boolean} wantsCompressedSdp\n     * @memberof SdkJoinAckFrame\n     * @instance\n     */\n    SdkJoinAckFrame.prototype.wantsCompressedSdp = false;\n\n    /**\n     * SdkJoinAckFrame defaultServerSideNetworkAdaption.\n     * @member {SdkServerSideNetworkAdaption} defaultServerSideNetworkAdaption\n     * @memberof SdkJoinAckFrame\n     * @instance\n     */\n    SdkJoinAckFrame.prototype.defaultServerSideNetworkAdaption = 1;\n\n    /**\n     * Creates a new SdkJoinAckFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkJoinAckFrame\n     * @static\n     * @param {ISdkJoinAckFrame=} [properties] Properties to set\n     * @returns {SdkJoinAckFrame} SdkJoinAckFrame instance\n     */\n    SdkJoinAckFrame.create = function create(properties) {\n        return new SdkJoinAckFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkJoinAckFrame message. Does not implicitly {@link SdkJoinAckFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkJoinAckFrame\n     * @static\n     * @param {ISdkJoinAckFrame} message SdkJoinAckFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkJoinAckFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.turnCredentials != null && Object.hasOwnProperty.call(message, \"turnCredentials\"))\n            $root.SdkTurnCredentials.encode(message.turnCredentials, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n        if (message.videoSubscriptionLimit != null && Object.hasOwnProperty.call(message, \"videoSubscriptionLimit\"))\n            writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.videoSubscriptionLimit);\n        if (message.wantsCompressedSdp != null && Object.hasOwnProperty.call(message, \"wantsCompressedSdp\"))\n            writer.uint32(/* id 3, wireType 0 =*/24).bool(message.wantsCompressedSdp);\n        if (message.defaultServerSideNetworkAdaption != null && Object.hasOwnProperty.call(message, \"defaultServerSideNetworkAdaption\"))\n            writer.uint32(/* id 4, wireType 0 =*/32).int32(message.defaultServerSideNetworkAdaption);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkJoinAckFrame message, length delimited. Does not implicitly {@link SdkJoinAckFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkJoinAckFrame\n     * @static\n     * @param {ISdkJoinAckFrame} message SdkJoinAckFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkJoinAckFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkJoinAckFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkJoinAckFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkJoinAckFrame} SdkJoinAckFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkJoinAckFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkJoinAckFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.turnCredentials = $root.SdkTurnCredentials.decode(reader, reader.uint32());\n                    break;\n                }\n            case 2: {\n                    message.videoSubscriptionLimit = reader.uint32();\n                    break;\n                }\n            case 3: {\n                    message.wantsCompressedSdp = reader.bool();\n                    break;\n                }\n            case 4: {\n                    message.defaultServerSideNetworkAdaption = reader.int32();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkJoinAckFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkJoinAckFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkJoinAckFrame} SdkJoinAckFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkJoinAckFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkJoinAckFrame message.\n     * @function verify\n     * @memberof SdkJoinAckFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkJoinAckFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.turnCredentials != null && message.hasOwnProperty(\"turnCredentials\")) {\n            var error = $root.SdkTurnCredentials.verify(message.turnCredentials);\n            if (error)\n                return \"turnCredentials.\" + error;\n        }\n        if (message.videoSubscriptionLimit != null && message.hasOwnProperty(\"videoSubscriptionLimit\"))\n            if (!$util.isInteger(message.videoSubscriptionLimit))\n                return \"videoSubscriptionLimit: integer expected\";\n        if (message.wantsCompressedSdp != null && message.hasOwnProperty(\"wantsCompressedSdp\"))\n            if (typeof message.wantsCompressedSdp !== \"boolean\")\n                return \"wantsCompressedSdp: boolean expected\";\n        if (message.defaultServerSideNetworkAdaption != null && message.hasOwnProperty(\"defaultServerSideNetworkAdaption\"))\n            switch (message.defaultServerSideNetworkAdaption) {\n            default:\n                return \"defaultServerSideNetworkAdaption: enum value expected\";\n            case 1:\n            case 2:\n            case 3:\n            case 4:\n                break;\n            }\n        return null;\n    };\n\n    /**\n     * Creates a SdkJoinAckFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkJoinAckFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkJoinAckFrame} SdkJoinAckFrame\n     */\n    SdkJoinAckFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkJoinAckFrame)\n            return object;\n        var message = new $root.SdkJoinAckFrame();\n        if (object.turnCredentials != null) {\n            if (typeof object.turnCredentials !== \"object\")\n                throw TypeError(\".SdkJoinAckFrame.turnCredentials: object expected\");\n            message.turnCredentials = $root.SdkTurnCredentials.fromObject(object.turnCredentials);\n        }\n        if (object.videoSubscriptionLimit != null)\n            message.videoSubscriptionLimit = object.videoSubscriptionLimit >>> 0;\n        if (object.wantsCompressedSdp != null)\n            message.wantsCompressedSdp = Boolean(object.wantsCompressedSdp);\n        switch (object.defaultServerSideNetworkAdaption) {\n        default:\n            if (typeof object.defaultServerSideNetworkAdaption === \"number\") {\n                message.defaultServerSideNetworkAdaption = object.defaultServerSideNetworkAdaption;\n                break;\n            }\n            break;\n        case \"DEFAULT\":\n        case 1:\n            message.defaultServerSideNetworkAdaption = 1;\n            break;\n        case \"NONE\":\n        case 2:\n            message.defaultServerSideNetworkAdaption = 2;\n            break;\n        case \"BANDWIDTH_PROBING\":\n        case 3:\n            message.defaultServerSideNetworkAdaption = 3;\n            break;\n        case \"BANDWIDTH_PROBING_AND_VIDEO_QUALITY_ADAPTION\":\n        case 4:\n            message.defaultServerSideNetworkAdaption = 4;\n            break;\n        }\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkJoinAckFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkJoinAckFrame\n     * @static\n     * @param {SdkJoinAckFrame} message SdkJoinAckFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkJoinAckFrame.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            object.turnCredentials = null;\n            object.videoSubscriptionLimit = 0;\n            object.wantsCompressedSdp = false;\n            object.defaultServerSideNetworkAdaption = options.enums === String ? \"DEFAULT\" : 1;\n        }\n        if (message.turnCredentials != null && message.hasOwnProperty(\"turnCredentials\"))\n            object.turnCredentials = $root.SdkTurnCredentials.toObject(message.turnCredentials, options);\n        if (message.videoSubscriptionLimit != null && message.hasOwnProperty(\"videoSubscriptionLimit\"))\n            object.videoSubscriptionLimit = message.videoSubscriptionLimit;\n        if (message.wantsCompressedSdp != null && message.hasOwnProperty(\"wantsCompressedSdp\"))\n            object.wantsCompressedSdp = message.wantsCompressedSdp;\n        if (message.defaultServerSideNetworkAdaption != null && message.hasOwnProperty(\"defaultServerSideNetworkAdaption\"))\n            object.defaultServerSideNetworkAdaption = options.enums === String ? $root.SdkServerSideNetworkAdaption[message.defaultServerSideNetworkAdaption] === undefined ? message.defaultServerSideNetworkAdaption : $root.SdkServerSideNetworkAdaption[message.defaultServerSideNetworkAdaption] : message.defaultServerSideNetworkAdaption;\n        return object;\n    };\n\n    /**\n     * Converts this SdkJoinAckFrame to JSON.\n     * @function toJSON\n     * @memberof SdkJoinAckFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkJoinAckFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkJoinAckFrame\n     * @function getTypeUrl\n     * @memberof SdkJoinAckFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkJoinAckFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkJoinAckFrame\";\n    };\n\n    return SdkJoinAckFrame;\n})();\n\n$root.SdkLeaveFrame = (function() {\n\n    /**\n     * Properties of a SdkLeaveFrame.\n     * @name ISdkLeaveFrame\n     * @interface ISdkLeaveFrame\n     */\n\n    /**\n     * Constructs a new SdkLeaveFrame.\n     * @name SdkLeaveFrame\n     * @classdesc Represents a SdkLeaveFrame.\n     * @implements ISdkLeaveFrame\n     * @constructor\n     * @param {ISdkLeaveFrame=} [properties] Properties to set\n     */\n    function SdkLeaveFrame(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * Creates a new SdkLeaveFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkLeaveFrame\n     * @static\n     * @param {ISdkLeaveFrame=} [properties] Properties to set\n     * @returns {SdkLeaveFrame} SdkLeaveFrame instance\n     */\n    SdkLeaveFrame.create = function create(properties) {\n        return new SdkLeaveFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkLeaveFrame message. Does not implicitly {@link SdkLeaveFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkLeaveFrame\n     * @static\n     * @param {ISdkLeaveFrame} message SdkLeaveFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkLeaveFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkLeaveFrame message, length delimited. Does not implicitly {@link SdkLeaveFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkLeaveFrame\n     * @static\n     * @param {ISdkLeaveFrame} message SdkLeaveFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkLeaveFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkLeaveFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkLeaveFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkLeaveFrame} SdkLeaveFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkLeaveFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkLeaveFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkLeaveFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkLeaveFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkLeaveFrame} SdkLeaveFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkLeaveFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkLeaveFrame message.\n     * @function verify\n     * @memberof SdkLeaveFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkLeaveFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkLeaveFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkLeaveFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkLeaveFrame} SdkLeaveFrame\n     */\n    SdkLeaveFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkLeaveFrame)\n            return object;\n        return new $root.SdkLeaveFrame();\n    };\n\n    /**\n     * Creates a plain object from a SdkLeaveFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkLeaveFrame\n     * @static\n     * @param {SdkLeaveFrame} message SdkLeaveFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkLeaveFrame.toObject = function toObject() {\n        return {};\n    };\n\n    /**\n     * Converts this SdkLeaveFrame to JSON.\n     * @function toJSON\n     * @memberof SdkLeaveFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkLeaveFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkLeaveFrame\n     * @function getTypeUrl\n     * @memberof SdkLeaveFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkLeaveFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkLeaveFrame\";\n    };\n\n    return SdkLeaveFrame;\n})();\n\n$root.SdkLeaveAckFrame = (function() {\n\n    /**\n     * Properties of a SdkLeaveAckFrame.\n     * @name ISdkLeaveAckFrame\n     * @interface ISdkLeaveAckFrame\n     */\n\n    /**\n     * Constructs a new SdkLeaveAckFrame.\n     * @name SdkLeaveAckFrame\n     * @classdesc Represents a SdkLeaveAckFrame.\n     * @implements ISdkLeaveAckFrame\n     * @constructor\n     * @param {ISdkLeaveAckFrame=} [properties] Properties to set\n     */\n    function SdkLeaveAckFrame(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * Creates a new SdkLeaveAckFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkLeaveAckFrame\n     * @static\n     * @param {ISdkLeaveAckFrame=} [properties] Properties to set\n     * @returns {SdkLeaveAckFrame} SdkLeaveAckFrame instance\n     */\n    SdkLeaveAckFrame.create = function create(properties) {\n        return new SdkLeaveAckFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkLeaveAckFrame message. Does not implicitly {@link SdkLeaveAckFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkLeaveAckFrame\n     * @static\n     * @param {ISdkLeaveAckFrame} message SdkLeaveAckFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkLeaveAckFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkLeaveAckFrame message, length delimited. Does not implicitly {@link SdkLeaveAckFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkLeaveAckFrame\n     * @static\n     * @param {ISdkLeaveAckFrame} message SdkLeaveAckFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkLeaveAckFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkLeaveAckFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkLeaveAckFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkLeaveAckFrame} SdkLeaveAckFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkLeaveAckFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkLeaveAckFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkLeaveAckFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkLeaveAckFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkLeaveAckFrame} SdkLeaveAckFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkLeaveAckFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkLeaveAckFrame message.\n     * @function verify\n     * @memberof SdkLeaveAckFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkLeaveAckFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkLeaveAckFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkLeaveAckFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkLeaveAckFrame} SdkLeaveAckFrame\n     */\n    SdkLeaveAckFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkLeaveAckFrame)\n            return object;\n        return new $root.SdkLeaveAckFrame();\n    };\n\n    /**\n     * Creates a plain object from a SdkLeaveAckFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkLeaveAckFrame\n     * @static\n     * @param {SdkLeaveAckFrame} message SdkLeaveAckFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkLeaveAckFrame.toObject = function toObject() {\n        return {};\n    };\n\n    /**\n     * Converts this SdkLeaveAckFrame to JSON.\n     * @function toJSON\n     * @memberof SdkLeaveAckFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkLeaveAckFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkLeaveAckFrame\n     * @function getTypeUrl\n     * @memberof SdkLeaveAckFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkLeaveAckFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkLeaveAckFrame\";\n    };\n\n    return SdkLeaveAckFrame;\n})();\n\n/**\n * SdkStreamServiceType enum.\n * @name SdkStreamServiceType\n * @enum {number}\n * @property {number} RX=1 RX value\n * @property {number} TX=2 TX value\n * @property {number} DUPLEX=3 DUPLEX value\n */\n$root.SdkStreamServiceType = (function() {\n    var valuesById = {}, values = Object.create(valuesById);\n    values[valuesById[1] = \"RX\"] = 1;\n    values[valuesById[2] = \"TX\"] = 2;\n    values[valuesById[3] = \"DUPLEX\"] = 3;\n    return values;\n})();\n\n/**\n * SdkStreamMediaType enum.\n * @name SdkStreamMediaType\n * @enum {number}\n * @property {number} AUDIO=1 AUDIO value\n * @property {number} VIDEO=2 VIDEO value\n */\n$root.SdkStreamMediaType = (function() {\n    var valuesById = {}, values = Object.create(valuesById);\n    values[valuesById[1] = \"AUDIO\"] = 1;\n    values[valuesById[2] = \"VIDEO\"] = 2;\n    return values;\n})();\n\n$root.SdkSubscribeFrame = (function() {\n\n    /**\n     * Properties of a SdkSubscribeFrame.\n     * @name ISdkSubscribeFrame\n     * @interface ISdkSubscribeFrame\n     * @property {SdkStreamServiceType|null} [duplex] SdkSubscribeFrame duplex\n     * @property {Array.<ISdkStreamDescriptor>|null} [sendStreams] SdkSubscribeFrame sendStreams\n     * @property {Array.<number>|null} [receiveStreamIds] SdkSubscribeFrame receiveStreamIds\n     * @property {string|null} [sdpOffer] SdkSubscribeFrame sdpOffer\n     * @property {string|null} [audioHost] SdkSubscribeFrame audioHost\n     * @property {boolean|null} [audioCheckin] SdkSubscribeFrame audioCheckin\n     * @property {boolean|null} [audioMuted] SdkSubscribeFrame audioMuted\n     * @property {Uint8Array|null} [compressedSdpOffer] SdkSubscribeFrame compressedSdpOffer\n     * @property {Array.<ISdkVideoSubscriptionConfiguration>|null} [videoSubscriptionConfiguration] SdkSubscribeFrame videoSubscriptionConfiguration\n     */\n\n    /**\n     * Constructs a new SdkSubscribeFrame.\n     * @name SdkSubscribeFrame\n     * @classdesc Represents a SdkSubscribeFrame.\n     * @implements ISdkSubscribeFrame\n     * @constructor\n     * @param {ISdkSubscribeFrame=} [properties] Properties to set\n     */\n    function SdkSubscribeFrame(properties) {\n        this.sendStreams = [];\n        this.receiveStreamIds = [];\n        this.videoSubscriptionConfiguration = [];\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkSubscribeFrame duplex.\n     * @member {SdkStreamServiceType} duplex\n     * @memberof SdkSubscribeFrame\n     * @instance\n     */\n    SdkSubscribeFrame.prototype.duplex = 1;\n\n    /**\n     * SdkSubscribeFrame sendStreams.\n     * @member {Array.<ISdkStreamDescriptor>} sendStreams\n     * @memberof SdkSubscribeFrame\n     * @instance\n     */\n    SdkSubscribeFrame.prototype.sendStreams = $util.emptyArray;\n\n    /**\n     * SdkSubscribeFrame receiveStreamIds.\n     * @member {Array.<number>} receiveStreamIds\n     * @memberof SdkSubscribeFrame\n     * @instance\n     */\n    SdkSubscribeFrame.prototype.receiveStreamIds = $util.emptyArray;\n\n    /**\n     * SdkSubscribeFrame sdpOffer.\n     * @member {string} sdpOffer\n     * @memberof SdkSubscribeFrame\n     * @instance\n     */\n    SdkSubscribeFrame.prototype.sdpOffer = \"\";\n\n    /**\n     * SdkSubscribeFrame audioHost.\n     * @member {string} audioHost\n     * @memberof SdkSubscribeFrame\n     * @instance\n     */\n    SdkSubscribeFrame.prototype.audioHost = \"\";\n\n    /**\n     * SdkSubscribeFrame audioCheckin.\n     * @member {boolean} audioCheckin\n     * @memberof SdkSubscribeFrame\n     * @instance\n     */\n    SdkSubscribeFrame.prototype.audioCheckin = false;\n\n    /**\n     * SdkSubscribeFrame audioMuted.\n     * @member {boolean} audioMuted\n     * @memberof SdkSubscribeFrame\n     * @instance\n     */\n    SdkSubscribeFrame.prototype.audioMuted = false;\n\n    /**\n     * SdkSubscribeFrame compressedSdpOffer.\n     * @member {Uint8Array} compressedSdpOffer\n     * @memberof SdkSubscribeFrame\n     * @instance\n     */\n    SdkSubscribeFrame.prototype.compressedSdpOffer = $util.newBuffer([]);\n\n    /**\n     * SdkSubscribeFrame videoSubscriptionConfiguration.\n     * @member {Array.<ISdkVideoSubscriptionConfiguration>} videoSubscriptionConfiguration\n     * @memberof SdkSubscribeFrame\n     * @instance\n     */\n    SdkSubscribeFrame.prototype.videoSubscriptionConfiguration = $util.emptyArray;\n\n    /**\n     * Creates a new SdkSubscribeFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkSubscribeFrame\n     * @static\n     * @param {ISdkSubscribeFrame=} [properties] Properties to set\n     * @returns {SdkSubscribeFrame} SdkSubscribeFrame instance\n     */\n    SdkSubscribeFrame.create = function create(properties) {\n        return new SdkSubscribeFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkSubscribeFrame message. Does not implicitly {@link SdkSubscribeFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkSubscribeFrame\n     * @static\n     * @param {ISdkSubscribeFrame} message SdkSubscribeFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkSubscribeFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.duplex != null && Object.hasOwnProperty.call(message, \"duplex\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).int32(message.duplex);\n        if (message.sendStreams != null && message.sendStreams.length)\n            for (var i = 0; i < message.sendStreams.length; ++i)\n                $root.SdkStreamDescriptor.encode(message.sendStreams[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\n        if (message.receiveStreamIds != null && message.receiveStreamIds.length)\n            for (var i = 0; i < message.receiveStreamIds.length; ++i)\n                writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.receiveStreamIds[i]);\n        if (message.sdpOffer != null && Object.hasOwnProperty.call(message, \"sdpOffer\"))\n            writer.uint32(/* id 4, wireType 2 =*/34).string(message.sdpOffer);\n        if (message.audioHost != null && Object.hasOwnProperty.call(message, \"audioHost\"))\n            writer.uint32(/* id 5, wireType 2 =*/42).string(message.audioHost);\n        if (message.audioCheckin != null && Object.hasOwnProperty.call(message, \"audioCheckin\"))\n            writer.uint32(/* id 6, wireType 0 =*/48).bool(message.audioCheckin);\n        if (message.audioMuted != null && Object.hasOwnProperty.call(message, \"audioMuted\"))\n            writer.uint32(/* id 7, wireType 0 =*/56).bool(message.audioMuted);\n        if (message.compressedSdpOffer != null && Object.hasOwnProperty.call(message, \"compressedSdpOffer\"))\n            writer.uint32(/* id 8, wireType 2 =*/66).bytes(message.compressedSdpOffer);\n        if (message.videoSubscriptionConfiguration != null && message.videoSubscriptionConfiguration.length)\n            for (var i = 0; i < message.videoSubscriptionConfiguration.length; ++i)\n                $root.SdkVideoSubscriptionConfiguration.encode(message.videoSubscriptionConfiguration[i], writer.uint32(/* id 9, wireType 2 =*/74).fork()).ldelim();\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkSubscribeFrame message, length delimited. Does not implicitly {@link SdkSubscribeFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkSubscribeFrame\n     * @static\n     * @param {ISdkSubscribeFrame} message SdkSubscribeFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkSubscribeFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkSubscribeFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkSubscribeFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkSubscribeFrame} SdkSubscribeFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkSubscribeFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkSubscribeFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.duplex = reader.int32();\n                    break;\n                }\n            case 2: {\n                    if (!(message.sendStreams && message.sendStreams.length))\n                        message.sendStreams = [];\n                    message.sendStreams.push($root.SdkStreamDescriptor.decode(reader, reader.uint32()));\n                    break;\n                }\n            case 3: {\n                    if (!(message.receiveStreamIds && message.receiveStreamIds.length))\n                        message.receiveStreamIds = [];\n                    if ((tag & 7) === 2) {\n                        var end2 = reader.uint32() + reader.pos;\n                        while (reader.pos < end2)\n                            message.receiveStreamIds.push(reader.uint32());\n                    } else\n                        message.receiveStreamIds.push(reader.uint32());\n                    break;\n                }\n            case 4: {\n                    message.sdpOffer = reader.string();\n                    break;\n                }\n            case 5: {\n                    message.audioHost = reader.string();\n                    break;\n                }\n            case 6: {\n                    message.audioCheckin = reader.bool();\n                    break;\n                }\n            case 7: {\n                    message.audioMuted = reader.bool();\n                    break;\n                }\n            case 8: {\n                    message.compressedSdpOffer = reader.bytes();\n                    break;\n                }\n            case 9: {\n                    if (!(message.videoSubscriptionConfiguration && message.videoSubscriptionConfiguration.length))\n                        message.videoSubscriptionConfiguration = [];\n                    message.videoSubscriptionConfiguration.push($root.SdkVideoSubscriptionConfiguration.decode(reader, reader.uint32()));\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkSubscribeFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkSubscribeFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkSubscribeFrame} SdkSubscribeFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkSubscribeFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkSubscribeFrame message.\n     * @function verify\n     * @memberof SdkSubscribeFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkSubscribeFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.duplex != null && message.hasOwnProperty(\"duplex\"))\n            switch (message.duplex) {\n            default:\n                return \"duplex: enum value expected\";\n            case 1:\n            case 2:\n            case 3:\n                break;\n            }\n        if (message.sendStreams != null && message.hasOwnProperty(\"sendStreams\")) {\n            if (!Array.isArray(message.sendStreams))\n                return \"sendStreams: array expected\";\n            for (var i = 0; i < message.sendStreams.length; ++i) {\n                var error = $root.SdkStreamDescriptor.verify(message.sendStreams[i]);\n                if (error)\n                    return \"sendStreams.\" + error;\n            }\n        }\n        if (message.receiveStreamIds != null && message.hasOwnProperty(\"receiveStreamIds\")) {\n            if (!Array.isArray(message.receiveStreamIds))\n                return \"receiveStreamIds: array expected\";\n            for (var i = 0; i < message.receiveStreamIds.length; ++i)\n                if (!$util.isInteger(message.receiveStreamIds[i]))\n                    return \"receiveStreamIds: integer[] expected\";\n        }\n        if (message.sdpOffer != null && message.hasOwnProperty(\"sdpOffer\"))\n            if (!$util.isString(message.sdpOffer))\n                return \"sdpOffer: string expected\";\n        if (message.audioHost != null && message.hasOwnProperty(\"audioHost\"))\n            if (!$util.isString(message.audioHost))\n                return \"audioHost: string expected\";\n        if (message.audioCheckin != null && message.hasOwnProperty(\"audioCheckin\"))\n            if (typeof message.audioCheckin !== \"boolean\")\n                return \"audioCheckin: boolean expected\";\n        if (message.audioMuted != null && message.hasOwnProperty(\"audioMuted\"))\n            if (typeof message.audioMuted !== \"boolean\")\n                return \"audioMuted: boolean expected\";\n        if (message.compressedSdpOffer != null && message.hasOwnProperty(\"compressedSdpOffer\"))\n            if (!(message.compressedSdpOffer && typeof message.compressedSdpOffer.length === \"number\" || $util.isString(message.compressedSdpOffer)))\n                return \"compressedSdpOffer: buffer expected\";\n        if (message.videoSubscriptionConfiguration != null && message.hasOwnProperty(\"videoSubscriptionConfiguration\")) {\n            if (!Array.isArray(message.videoSubscriptionConfiguration))\n                return \"videoSubscriptionConfiguration: array expected\";\n            for (var i = 0; i < message.videoSubscriptionConfiguration.length; ++i) {\n                var error = $root.SdkVideoSubscriptionConfiguration.verify(message.videoSubscriptionConfiguration[i]);\n                if (error)\n                    return \"videoSubscriptionConfiguration.\" + error;\n            }\n        }\n        return null;\n    };\n\n    /**\n     * Creates a SdkSubscribeFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkSubscribeFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkSubscribeFrame} SdkSubscribeFrame\n     */\n    SdkSubscribeFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkSubscribeFrame)\n            return object;\n        var message = new $root.SdkSubscribeFrame();\n        switch (object.duplex) {\n        default:\n            if (typeof object.duplex === \"number\") {\n                message.duplex = object.duplex;\n                break;\n            }\n            break;\n        case \"RX\":\n        case 1:\n            message.duplex = 1;\n            break;\n        case \"TX\":\n        case 2:\n            message.duplex = 2;\n            break;\n        case \"DUPLEX\":\n        case 3:\n            message.duplex = 3;\n            break;\n        }\n        if (object.sendStreams) {\n            if (!Array.isArray(object.sendStreams))\n                throw TypeError(\".SdkSubscribeFrame.sendStreams: array expected\");\n            message.sendStreams = [];\n            for (var i = 0; i < object.sendStreams.length; ++i) {\n                if (typeof object.sendStreams[i] !== \"object\")\n                    throw TypeError(\".SdkSubscribeFrame.sendStreams: object expected\");\n                message.sendStreams[i] = $root.SdkStreamDescriptor.fromObject(object.sendStreams[i]);\n            }\n        }\n        if (object.receiveStreamIds) {\n            if (!Array.isArray(object.receiveStreamIds))\n                throw TypeError(\".SdkSubscribeFrame.receiveStreamIds: array expected\");\n            message.receiveStreamIds = [];\n            for (var i = 0; i < object.receiveStreamIds.length; ++i)\n                message.receiveStreamIds[i] = object.receiveStreamIds[i] >>> 0;\n        }\n        if (object.sdpOffer != null)\n            message.sdpOffer = String(object.sdpOffer);\n        if (object.audioHost != null)\n            message.audioHost = String(object.audioHost);\n        if (object.audioCheckin != null)\n            message.audioCheckin = Boolean(object.audioCheckin);\n        if (object.audioMuted != null)\n            message.audioMuted = Boolean(object.audioMuted);\n        if (object.compressedSdpOffer != null)\n            if (typeof object.compressedSdpOffer === \"string\")\n                $util.base64.decode(object.compressedSdpOffer, message.compressedSdpOffer = $util.newBuffer($util.base64.length(object.compressedSdpOffer)), 0);\n            else if (object.compressedSdpOffer.length >= 0)\n                message.compressedSdpOffer = object.compressedSdpOffer;\n        if (object.videoSubscriptionConfiguration) {\n            if (!Array.isArray(object.videoSubscriptionConfiguration))\n                throw TypeError(\".SdkSubscribeFrame.videoSubscriptionConfiguration: array expected\");\n            message.videoSubscriptionConfiguration = [];\n            for (var i = 0; i < object.videoSubscriptionConfiguration.length; ++i) {\n                if (typeof object.videoSubscriptionConfiguration[i] !== \"object\")\n                    throw TypeError(\".SdkSubscribeFrame.videoSubscriptionConfiguration: object expected\");\n                message.videoSubscriptionConfiguration[i] = $root.SdkVideoSubscriptionConfiguration.fromObject(object.videoSubscriptionConfiguration[i]);\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkSubscribeFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkSubscribeFrame\n     * @static\n     * @param {SdkSubscribeFrame} message SdkSubscribeFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkSubscribeFrame.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.arrays || options.defaults) {\n            object.sendStreams = [];\n            object.receiveStreamIds = [];\n            object.videoSubscriptionConfiguration = [];\n        }\n        if (options.defaults) {\n            object.duplex = options.enums === String ? \"RX\" : 1;\n            object.sdpOffer = \"\";\n            object.audioHost = \"\";\n            object.audioCheckin = false;\n            object.audioMuted = false;\n            if (options.bytes === String)\n                object.compressedSdpOffer = \"\";\n            else {\n                object.compressedSdpOffer = [];\n                if (options.bytes !== Array)\n                    object.compressedSdpOffer = $util.newBuffer(object.compressedSdpOffer);\n            }\n        }\n        if (message.duplex != null && message.hasOwnProperty(\"duplex\"))\n            object.duplex = options.enums === String ? $root.SdkStreamServiceType[message.duplex] === undefined ? message.duplex : $root.SdkStreamServiceType[message.duplex] : message.duplex;\n        if (message.sendStreams && message.sendStreams.length) {\n            object.sendStreams = [];\n            for (var j = 0; j < message.sendStreams.length; ++j)\n                object.sendStreams[j] = $root.SdkStreamDescriptor.toObject(message.sendStreams[j], options);\n        }\n        if (message.receiveStreamIds && message.receiveStreamIds.length) {\n            object.receiveStreamIds = [];\n            for (var j = 0; j < message.receiveStreamIds.length; ++j)\n                object.receiveStreamIds[j] = message.receiveStreamIds[j];\n        }\n        if (message.sdpOffer != null && message.hasOwnProperty(\"sdpOffer\"))\n            object.sdpOffer = message.sdpOffer;\n        if (message.audioHost != null && message.hasOwnProperty(\"audioHost\"))\n            object.audioHost = message.audioHost;\n        if (message.audioCheckin != null && message.hasOwnProperty(\"audioCheckin\"))\n            object.audioCheckin = message.audioCheckin;\n        if (message.audioMuted != null && message.hasOwnProperty(\"audioMuted\"))\n            object.audioMuted = message.audioMuted;\n        if (message.compressedSdpOffer != null && message.hasOwnProperty(\"compressedSdpOffer\"))\n            object.compressedSdpOffer = options.bytes === String ? $util.base64.encode(message.compressedSdpOffer, 0, message.compressedSdpOffer.length) : options.bytes === Array ? Array.prototype.slice.call(message.compressedSdpOffer) : message.compressedSdpOffer;\n        if (message.videoSubscriptionConfiguration && message.videoSubscriptionConfiguration.length) {\n            object.videoSubscriptionConfiguration = [];\n            for (var j = 0; j < message.videoSubscriptionConfiguration.length; ++j)\n                object.videoSubscriptionConfiguration[j] = $root.SdkVideoSubscriptionConfiguration.toObject(message.videoSubscriptionConfiguration[j], options);\n        }\n        return object;\n    };\n\n    /**\n     * Converts this SdkSubscribeFrame to JSON.\n     * @function toJSON\n     * @memberof SdkSubscribeFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkSubscribeFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkSubscribeFrame\n     * @function getTypeUrl\n     * @memberof SdkSubscribeFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkSubscribeFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkSubscribeFrame\";\n    };\n\n    return SdkSubscribeFrame;\n})();\n\n$root.SdkSubscribeAckFrame = (function() {\n\n    /**\n     * Properties of a SdkSubscribeAckFrame.\n     * @name ISdkSubscribeAckFrame\n     * @interface ISdkSubscribeAckFrame\n     * @property {SdkStreamServiceType|null} [duplex] SdkSubscribeAckFrame duplex\n     * @property {Array.<ISdkStreamAllocation>|null} [allocations] SdkSubscribeAckFrame allocations\n     * @property {string|null} [sdpAnswer] SdkSubscribeAckFrame sdpAnswer\n     * @property {Array.<ISdkTrackMapping>|null} [tracks] SdkSubscribeAckFrame tracks\n     * @property {Uint8Array|null} [compressedSdpAnswer] SdkSubscribeAckFrame compressedSdpAnswer\n     */\n\n    /**\n     * Constructs a new SdkSubscribeAckFrame.\n     * @name SdkSubscribeAckFrame\n     * @classdesc Represents a SdkSubscribeAckFrame.\n     * @implements ISdkSubscribeAckFrame\n     * @constructor\n     * @param {ISdkSubscribeAckFrame=} [properties] Properties to set\n     */\n    function SdkSubscribeAckFrame(properties) {\n        this.allocations = [];\n        this.tracks = [];\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkSubscribeAckFrame duplex.\n     * @member {SdkStreamServiceType} duplex\n     * @memberof SdkSubscribeAckFrame\n     * @instance\n     */\n    SdkSubscribeAckFrame.prototype.duplex = 1;\n\n    /**\n     * SdkSubscribeAckFrame allocations.\n     * @member {Array.<ISdkStreamAllocation>} allocations\n     * @memberof SdkSubscribeAckFrame\n     * @instance\n     */\n    SdkSubscribeAckFrame.prototype.allocations = $util.emptyArray;\n\n    /**\n     * SdkSubscribeAckFrame sdpAnswer.\n     * @member {string} sdpAnswer\n     * @memberof SdkSubscribeAckFrame\n     * @instance\n     */\n    SdkSubscribeAckFrame.prototype.sdpAnswer = \"\";\n\n    /**\n     * SdkSubscribeAckFrame tracks.\n     * @member {Array.<ISdkTrackMapping>} tracks\n     * @memberof SdkSubscribeAckFrame\n     * @instance\n     */\n    SdkSubscribeAckFrame.prototype.tracks = $util.emptyArray;\n\n    /**\n     * SdkSubscribeAckFrame compressedSdpAnswer.\n     * @member {Uint8Array} compressedSdpAnswer\n     * @memberof SdkSubscribeAckFrame\n     * @instance\n     */\n    SdkSubscribeAckFrame.prototype.compressedSdpAnswer = $util.newBuffer([]);\n\n    /**\n     * Creates a new SdkSubscribeAckFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkSubscribeAckFrame\n     * @static\n     * @param {ISdkSubscribeAckFrame=} [properties] Properties to set\n     * @returns {SdkSubscribeAckFrame} SdkSubscribeAckFrame instance\n     */\n    SdkSubscribeAckFrame.create = function create(properties) {\n        return new SdkSubscribeAckFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkSubscribeAckFrame message. Does not implicitly {@link SdkSubscribeAckFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkSubscribeAckFrame\n     * @static\n     * @param {ISdkSubscribeAckFrame} message SdkSubscribeAckFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkSubscribeAckFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.duplex != null && Object.hasOwnProperty.call(message, \"duplex\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).int32(message.duplex);\n        if (message.allocations != null && message.allocations.length)\n            for (var i = 0; i < message.allocations.length; ++i)\n                $root.SdkStreamAllocation.encode(message.allocations[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\n        if (message.sdpAnswer != null && Object.hasOwnProperty.call(message, \"sdpAnswer\"))\n            writer.uint32(/* id 3, wireType 2 =*/26).string(message.sdpAnswer);\n        if (message.tracks != null && message.tracks.length)\n            for (var i = 0; i < message.tracks.length; ++i)\n                $root.SdkTrackMapping.encode(message.tracks[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();\n        if (message.compressedSdpAnswer != null && Object.hasOwnProperty.call(message, \"compressedSdpAnswer\"))\n            writer.uint32(/* id 5, wireType 2 =*/42).bytes(message.compressedSdpAnswer);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkSubscribeAckFrame message, length delimited. Does not implicitly {@link SdkSubscribeAckFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkSubscribeAckFrame\n     * @static\n     * @param {ISdkSubscribeAckFrame} message SdkSubscribeAckFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkSubscribeAckFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkSubscribeAckFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkSubscribeAckFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkSubscribeAckFrame} SdkSubscribeAckFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkSubscribeAckFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkSubscribeAckFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.duplex = reader.int32();\n                    break;\n                }\n            case 2: {\n                    if (!(message.allocations && message.allocations.length))\n                        message.allocations = [];\n                    message.allocations.push($root.SdkStreamAllocation.decode(reader, reader.uint32()));\n                    break;\n                }\n            case 3: {\n                    message.sdpAnswer = reader.string();\n                    break;\n                }\n            case 4: {\n                    if (!(message.tracks && message.tracks.length))\n                        message.tracks = [];\n                    message.tracks.push($root.SdkTrackMapping.decode(reader, reader.uint32()));\n                    break;\n                }\n            case 5: {\n                    message.compressedSdpAnswer = reader.bytes();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkSubscribeAckFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkSubscribeAckFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkSubscribeAckFrame} SdkSubscribeAckFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkSubscribeAckFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkSubscribeAckFrame message.\n     * @function verify\n     * @memberof SdkSubscribeAckFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkSubscribeAckFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.duplex != null && message.hasOwnProperty(\"duplex\"))\n            switch (message.duplex) {\n            default:\n                return \"duplex: enum value expected\";\n            case 1:\n            case 2:\n            case 3:\n                break;\n            }\n        if (message.allocations != null && message.hasOwnProperty(\"allocations\")) {\n            if (!Array.isArray(message.allocations))\n                return \"allocations: array expected\";\n            for (var i = 0; i < message.allocations.length; ++i) {\n                var error = $root.SdkStreamAllocation.verify(message.allocations[i]);\n                if (error)\n                    return \"allocations.\" + error;\n            }\n        }\n        if (message.sdpAnswer != null && message.hasOwnProperty(\"sdpAnswer\"))\n            if (!$util.isString(message.sdpAnswer))\n                return \"sdpAnswer: string expected\";\n        if (message.tracks != null && message.hasOwnProperty(\"tracks\")) {\n            if (!Array.isArray(message.tracks))\n                return \"tracks: array expected\";\n            for (var i = 0; i < message.tracks.length; ++i) {\n                var error = $root.SdkTrackMapping.verify(message.tracks[i]);\n                if (error)\n                    return \"tracks.\" + error;\n            }\n        }\n        if (message.compressedSdpAnswer != null && message.hasOwnProperty(\"compressedSdpAnswer\"))\n            if (!(message.compressedSdpAnswer && typeof message.compressedSdpAnswer.length === \"number\" || $util.isString(message.compressedSdpAnswer)))\n                return \"compressedSdpAnswer: buffer expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkSubscribeAckFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkSubscribeAckFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkSubscribeAckFrame} SdkSubscribeAckFrame\n     */\n    SdkSubscribeAckFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkSubscribeAckFrame)\n            return object;\n        var message = new $root.SdkSubscribeAckFrame();\n        switch (object.duplex) {\n        default:\n            if (typeof object.duplex === \"number\") {\n                message.duplex = object.duplex;\n                break;\n            }\n            break;\n        case \"RX\":\n        case 1:\n            message.duplex = 1;\n            break;\n        case \"TX\":\n        case 2:\n            message.duplex = 2;\n            break;\n        case \"DUPLEX\":\n        case 3:\n            message.duplex = 3;\n            break;\n        }\n        if (object.allocations) {\n            if (!Array.isArray(object.allocations))\n                throw TypeError(\".SdkSubscribeAckFrame.allocations: array expected\");\n            message.allocations = [];\n            for (var i = 0; i < object.allocations.length; ++i) {\n                if (typeof object.allocations[i] !== \"object\")\n                    throw TypeError(\".SdkSubscribeAckFrame.allocations: object expected\");\n                message.allocations[i] = $root.SdkStreamAllocation.fromObject(object.allocations[i]);\n            }\n        }\n        if (object.sdpAnswer != null)\n            message.sdpAnswer = String(object.sdpAnswer);\n        if (object.tracks) {\n            if (!Array.isArray(object.tracks))\n                throw TypeError(\".SdkSubscribeAckFrame.tracks: array expected\");\n            message.tracks = [];\n            for (var i = 0; i < object.tracks.length; ++i) {\n                if (typeof object.tracks[i] !== \"object\")\n                    throw TypeError(\".SdkSubscribeAckFrame.tracks: object expected\");\n                message.tracks[i] = $root.SdkTrackMapping.fromObject(object.tracks[i]);\n            }\n        }\n        if (object.compressedSdpAnswer != null)\n            if (typeof object.compressedSdpAnswer === \"string\")\n                $util.base64.decode(object.compressedSdpAnswer, message.compressedSdpAnswer = $util.newBuffer($util.base64.length(object.compressedSdpAnswer)), 0);\n            else if (object.compressedSdpAnswer.length >= 0)\n                message.compressedSdpAnswer = object.compressedSdpAnswer;\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkSubscribeAckFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkSubscribeAckFrame\n     * @static\n     * @param {SdkSubscribeAckFrame} message SdkSubscribeAckFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkSubscribeAckFrame.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.arrays || options.defaults) {\n            object.allocations = [];\n            object.tracks = [];\n        }\n        if (options.defaults) {\n            object.duplex = options.enums === String ? \"RX\" : 1;\n            object.sdpAnswer = \"\";\n            if (options.bytes === String)\n                object.compressedSdpAnswer = \"\";\n            else {\n                object.compressedSdpAnswer = [];\n                if (options.bytes !== Array)\n                    object.compressedSdpAnswer = $util.newBuffer(object.compressedSdpAnswer);\n            }\n        }\n        if (message.duplex != null && message.hasOwnProperty(\"duplex\"))\n            object.duplex = options.enums === String ? $root.SdkStreamServiceType[message.duplex] === undefined ? message.duplex : $root.SdkStreamServiceType[message.duplex] : message.duplex;\n        if (message.allocations && message.allocations.length) {\n            object.allocations = [];\n            for (var j = 0; j < message.allocations.length; ++j)\n                object.allocations[j] = $root.SdkStreamAllocation.toObject(message.allocations[j], options);\n        }\n        if (message.sdpAnswer != null && message.hasOwnProperty(\"sdpAnswer\"))\n            object.sdpAnswer = message.sdpAnswer;\n        if (message.tracks && message.tracks.length) {\n            object.tracks = [];\n            for (var j = 0; j < message.tracks.length; ++j)\n                object.tracks[j] = $root.SdkTrackMapping.toObject(message.tracks[j], options);\n        }\n        if (message.compressedSdpAnswer != null && message.hasOwnProperty(\"compressedSdpAnswer\"))\n            object.compressedSdpAnswer = options.bytes === String ? $util.base64.encode(message.compressedSdpAnswer, 0, message.compressedSdpAnswer.length) : options.bytes === Array ? Array.prototype.slice.call(message.compressedSdpAnswer) : message.compressedSdpAnswer;\n        return object;\n    };\n\n    /**\n     * Converts this SdkSubscribeAckFrame to JSON.\n     * @function toJSON\n     * @memberof SdkSubscribeAckFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkSubscribeAckFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkSubscribeAckFrame\n     * @function getTypeUrl\n     * @memberof SdkSubscribeAckFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkSubscribeAckFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkSubscribeAckFrame\";\n    };\n\n    return SdkSubscribeAckFrame;\n})();\n\n$root.SdkIndexFrame = (function() {\n\n    /**\n     * Properties of a SdkIndexFrame.\n     * @name ISdkIndexFrame\n     * @interface ISdkIndexFrame\n     * @property {boolean|null} [atCapacity] SdkIndexFrame atCapacity\n     * @property {Array.<ISdkStreamDescriptor>|null} [sources] SdkIndexFrame sources\n     * @property {Array.<number>|null} [pausedAtSourceIds] SdkIndexFrame pausedAtSourceIds\n     * @property {number|null} [numParticipants] SdkIndexFrame numParticipants\n     * @property {Array.<SdkVideoCodecCapability>|null} [supportedReceiveCodecIntersection] SdkIndexFrame supportedReceiveCodecIntersection\n     */\n\n    /**\n     * Constructs a new SdkIndexFrame.\n     * @name SdkIndexFrame\n     * @classdesc Represents a SdkIndexFrame.\n     * @implements ISdkIndexFrame\n     * @constructor\n     * @param {ISdkIndexFrame=} [properties] Properties to set\n     */\n    function SdkIndexFrame(properties) {\n        this.sources = [];\n        this.pausedAtSourceIds = [];\n        this.supportedReceiveCodecIntersection = [];\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkIndexFrame atCapacity.\n     * @member {boolean} atCapacity\n     * @memberof SdkIndexFrame\n     * @instance\n     */\n    SdkIndexFrame.prototype.atCapacity = false;\n\n    /**\n     * SdkIndexFrame sources.\n     * @member {Array.<ISdkStreamDescriptor>} sources\n     * @memberof SdkIndexFrame\n     * @instance\n     */\n    SdkIndexFrame.prototype.sources = $util.emptyArray;\n\n    /**\n     * SdkIndexFrame pausedAtSourceIds.\n     * @member {Array.<number>} pausedAtSourceIds\n     * @memberof SdkIndexFrame\n     * @instance\n     */\n    SdkIndexFrame.prototype.pausedAtSourceIds = $util.emptyArray;\n\n    /**\n     * SdkIndexFrame numParticipants.\n     * @member {number} numParticipants\n     * @memberof SdkIndexFrame\n     * @instance\n     */\n    SdkIndexFrame.prototype.numParticipants = 0;\n\n    /**\n     * SdkIndexFrame supportedReceiveCodecIntersection.\n     * @member {Array.<SdkVideoCodecCapability>} supportedReceiveCodecIntersection\n     * @memberof SdkIndexFrame\n     * @instance\n     */\n    SdkIndexFrame.prototype.supportedReceiveCodecIntersection = $util.emptyArray;\n\n    /**\n     * Creates a new SdkIndexFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkIndexFrame\n     * @static\n     * @param {ISdkIndexFrame=} [properties] Properties to set\n     * @returns {SdkIndexFrame} SdkIndexFrame instance\n     */\n    SdkIndexFrame.create = function create(properties) {\n        return new SdkIndexFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkIndexFrame message. Does not implicitly {@link SdkIndexFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkIndexFrame\n     * @static\n     * @param {ISdkIndexFrame} message SdkIndexFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkIndexFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.atCapacity != null && Object.hasOwnProperty.call(message, \"atCapacity\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).bool(message.atCapacity);\n        if (message.sources != null && message.sources.length)\n            for (var i = 0; i < message.sources.length; ++i)\n                $root.SdkStreamDescriptor.encode(message.sources[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\n        if (message.pausedAtSourceIds != null && message.pausedAtSourceIds.length)\n            for (var i = 0; i < message.pausedAtSourceIds.length; ++i)\n                writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.pausedAtSourceIds[i]);\n        if (message.numParticipants != null && Object.hasOwnProperty.call(message, \"numParticipants\"))\n            writer.uint32(/* id 4, wireType 0 =*/32).uint32(message.numParticipants);\n        if (message.supportedReceiveCodecIntersection != null && message.supportedReceiveCodecIntersection.length)\n            for (var i = 0; i < message.supportedReceiveCodecIntersection.length; ++i)\n                writer.uint32(/* id 5, wireType 0 =*/40).int32(message.supportedReceiveCodecIntersection[i]);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkIndexFrame message, length delimited. Does not implicitly {@link SdkIndexFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkIndexFrame\n     * @static\n     * @param {ISdkIndexFrame} message SdkIndexFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkIndexFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkIndexFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkIndexFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkIndexFrame} SdkIndexFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkIndexFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkIndexFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.atCapacity = reader.bool();\n                    break;\n                }\n            case 2: {\n                    if (!(message.sources && message.sources.length))\n                        message.sources = [];\n                    message.sources.push($root.SdkStreamDescriptor.decode(reader, reader.uint32()));\n                    break;\n                }\n            case 3: {\n                    if (!(message.pausedAtSourceIds && message.pausedAtSourceIds.length))\n                        message.pausedAtSourceIds = [];\n                    if ((tag & 7) === 2) {\n                        var end2 = reader.uint32() + reader.pos;\n                        while (reader.pos < end2)\n                            message.pausedAtSourceIds.push(reader.uint32());\n                    } else\n                        message.pausedAtSourceIds.push(reader.uint32());\n                    break;\n                }\n            case 4: {\n                    message.numParticipants = reader.uint32();\n                    break;\n                }\n            case 5: {\n                    if (!(message.supportedReceiveCodecIntersection && message.supportedReceiveCodecIntersection.length))\n                        message.supportedReceiveCodecIntersection = [];\n                    if ((tag & 7) === 2) {\n                        var end2 = reader.uint32() + reader.pos;\n                        while (reader.pos < end2)\n                            message.supportedReceiveCodecIntersection.push(reader.int32());\n                    } else\n                        message.supportedReceiveCodecIntersection.push(reader.int32());\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkIndexFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkIndexFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkIndexFrame} SdkIndexFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkIndexFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkIndexFrame message.\n     * @function verify\n     * @memberof SdkIndexFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkIndexFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.atCapacity != null && message.hasOwnProperty(\"atCapacity\"))\n            if (typeof message.atCapacity !== \"boolean\")\n                return \"atCapacity: boolean expected\";\n        if (message.sources != null && message.hasOwnProperty(\"sources\")) {\n            if (!Array.isArray(message.sources))\n                return \"sources: array expected\";\n            for (var i = 0; i < message.sources.length; ++i) {\n                var error = $root.SdkStreamDescriptor.verify(message.sources[i]);\n                if (error)\n                    return \"sources.\" + error;\n            }\n        }\n        if (message.pausedAtSourceIds != null && message.hasOwnProperty(\"pausedAtSourceIds\")) {\n            if (!Array.isArray(message.pausedAtSourceIds))\n                return \"pausedAtSourceIds: array expected\";\n            for (var i = 0; i < message.pausedAtSourceIds.length; ++i)\n                if (!$util.isInteger(message.pausedAtSourceIds[i]))\n                    return \"pausedAtSourceIds: integer[] expected\";\n        }\n        if (message.numParticipants != null && message.hasOwnProperty(\"numParticipants\"))\n            if (!$util.isInteger(message.numParticipants))\n                return \"numParticipants: integer expected\";\n        if (message.supportedReceiveCodecIntersection != null && message.hasOwnProperty(\"supportedReceiveCodecIntersection\")) {\n            if (!Array.isArray(message.supportedReceiveCodecIntersection))\n                return \"supportedReceiveCodecIntersection: array expected\";\n            for (var i = 0; i < message.supportedReceiveCodecIntersection.length; ++i)\n                switch (message.supportedReceiveCodecIntersection[i]) {\n                default:\n                    return \"supportedReceiveCodecIntersection: enum value[] expected\";\n                case 1:\n                case 2:\n                case 3:\n                case 4:\n                case 5:\n                case 6:\n                case 8:\n                case 11:\n                    break;\n                }\n        }\n        return null;\n    };\n\n    /**\n     * Creates a SdkIndexFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkIndexFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkIndexFrame} SdkIndexFrame\n     */\n    SdkIndexFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkIndexFrame)\n            return object;\n        var message = new $root.SdkIndexFrame();\n        if (object.atCapacity != null)\n            message.atCapacity = Boolean(object.atCapacity);\n        if (object.sources) {\n            if (!Array.isArray(object.sources))\n                throw TypeError(\".SdkIndexFrame.sources: array expected\");\n            message.sources = [];\n            for (var i = 0; i < object.sources.length; ++i) {\n                if (typeof object.sources[i] !== \"object\")\n                    throw TypeError(\".SdkIndexFrame.sources: object expected\");\n                message.sources[i] = $root.SdkStreamDescriptor.fromObject(object.sources[i]);\n            }\n        }\n        if (object.pausedAtSourceIds) {\n            if (!Array.isArray(object.pausedAtSourceIds))\n                throw TypeError(\".SdkIndexFrame.pausedAtSourceIds: array expected\");\n            message.pausedAtSourceIds = [];\n            for (var i = 0; i < object.pausedAtSourceIds.length; ++i)\n                message.pausedAtSourceIds[i] = object.pausedAtSourceIds[i] >>> 0;\n        }\n        if (object.numParticipants != null)\n            message.numParticipants = object.numParticipants >>> 0;\n        if (object.supportedReceiveCodecIntersection) {\n            if (!Array.isArray(object.supportedReceiveCodecIntersection))\n                throw TypeError(\".SdkIndexFrame.supportedReceiveCodecIntersection: array expected\");\n            message.supportedReceiveCodecIntersection = [];\n            for (var i = 0; i < object.supportedReceiveCodecIntersection.length; ++i)\n                switch (object.supportedReceiveCodecIntersection[i]) {\n                default:\n                    if (typeof object.supportedReceiveCodecIntersection[i] === \"number\") {\n                        message.supportedReceiveCodecIntersection[i] = object.supportedReceiveCodecIntersection[i];\n                        break;\n                    }\n                case \"VP8\":\n                case 1:\n                    message.supportedReceiveCodecIntersection[i] = 1;\n                    break;\n                case \"H264_BASELINE_PROFILE\":\n                case 2:\n                    message.supportedReceiveCodecIntersection[i] = 2;\n                    break;\n                case \"H264_CONSTRAINED_BASELINE_PROFILE\":\n                case 3:\n                    message.supportedReceiveCodecIntersection[i] = 3;\n                    break;\n                case \"H264_MAIN_PROFILE\":\n                case 4:\n                    message.supportedReceiveCodecIntersection[i] = 4;\n                    break;\n                case \"H264_HIGH_PROFILE\":\n                case 5:\n                    message.supportedReceiveCodecIntersection[i] = 5;\n                    break;\n                case \"H264_CONSTRAINED_HIGH_PROFILE\":\n                case 6:\n                    message.supportedReceiveCodecIntersection[i] = 6;\n                    break;\n                case \"VP9_PROFILE_0\":\n                case 8:\n                    message.supportedReceiveCodecIntersection[i] = 8;\n                    break;\n                case \"AV1_MAIN_PROFILE\":\n                case 11:\n                    message.supportedReceiveCodecIntersection[i] = 11;\n                    break;\n                }\n        }\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkIndexFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkIndexFrame\n     * @static\n     * @param {SdkIndexFrame} message SdkIndexFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkIndexFrame.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.arrays || options.defaults) {\n            object.sources = [];\n            object.pausedAtSourceIds = [];\n            object.supportedReceiveCodecIntersection = [];\n        }\n        if (options.defaults) {\n            object.atCapacity = false;\n            object.numParticipants = 0;\n        }\n        if (message.atCapacity != null && message.hasOwnProperty(\"atCapacity\"))\n            object.atCapacity = message.atCapacity;\n        if (message.sources && message.sources.length) {\n            object.sources = [];\n            for (var j = 0; j < message.sources.length; ++j)\n                object.sources[j] = $root.SdkStreamDescriptor.toObject(message.sources[j], options);\n        }\n        if (message.pausedAtSourceIds && message.pausedAtSourceIds.length) {\n            object.pausedAtSourceIds = [];\n            for (var j = 0; j < message.pausedAtSourceIds.length; ++j)\n                object.pausedAtSourceIds[j] = message.pausedAtSourceIds[j];\n        }\n        if (message.numParticipants != null && message.hasOwnProperty(\"numParticipants\"))\n            object.numParticipants = message.numParticipants;\n        if (message.supportedReceiveCodecIntersection && message.supportedReceiveCodecIntersection.length) {\n            object.supportedReceiveCodecIntersection = [];\n            for (var j = 0; j < message.supportedReceiveCodecIntersection.length; ++j)\n                object.supportedReceiveCodecIntersection[j] = options.enums === String ? $root.SdkVideoCodecCapability[message.supportedReceiveCodecIntersection[j]] === undefined ? message.supportedReceiveCodecIntersection[j] : $root.SdkVideoCodecCapability[message.supportedReceiveCodecIntersection[j]] : message.supportedReceiveCodecIntersection[j];\n        }\n        return object;\n    };\n\n    /**\n     * Converts this SdkIndexFrame to JSON.\n     * @function toJSON\n     * @memberof SdkIndexFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkIndexFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkIndexFrame\n     * @function getTypeUrl\n     * @memberof SdkIndexFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkIndexFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkIndexFrame\";\n    };\n\n    return SdkIndexFrame;\n})();\n\n$root.SdkPauseResumeFrame = (function() {\n\n    /**\n     * Properties of a SdkPauseResumeFrame.\n     * @name ISdkPauseResumeFrame\n     * @interface ISdkPauseResumeFrame\n     * @property {Array.<number>|null} [streamIds] SdkPauseResumeFrame streamIds\n     * @property {Array.<number>|null} [groupIds] SdkPauseResumeFrame groupIds\n     */\n\n    /**\n     * Constructs a new SdkPauseResumeFrame.\n     * @name SdkPauseResumeFrame\n     * @classdesc Represents a SdkPauseResumeFrame.\n     * @implements ISdkPauseResumeFrame\n     * @constructor\n     * @param {ISdkPauseResumeFrame=} [properties] Properties to set\n     */\n    function SdkPauseResumeFrame(properties) {\n        this.streamIds = [];\n        this.groupIds = [];\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkPauseResumeFrame streamIds.\n     * @member {Array.<number>} streamIds\n     * @memberof SdkPauseResumeFrame\n     * @instance\n     */\n    SdkPauseResumeFrame.prototype.streamIds = $util.emptyArray;\n\n    /**\n     * SdkPauseResumeFrame groupIds.\n     * @member {Array.<number>} groupIds\n     * @memberof SdkPauseResumeFrame\n     * @instance\n     */\n    SdkPauseResumeFrame.prototype.groupIds = $util.emptyArray;\n\n    /**\n     * Creates a new SdkPauseResumeFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkPauseResumeFrame\n     * @static\n     * @param {ISdkPauseResumeFrame=} [properties] Properties to set\n     * @returns {SdkPauseResumeFrame} SdkPauseResumeFrame instance\n     */\n    SdkPauseResumeFrame.create = function create(properties) {\n        return new SdkPauseResumeFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkPauseResumeFrame message. Does not implicitly {@link SdkPauseResumeFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkPauseResumeFrame\n     * @static\n     * @param {ISdkPauseResumeFrame} message SdkPauseResumeFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkPauseResumeFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.streamIds != null && message.streamIds.length)\n            for (var i = 0; i < message.streamIds.length; ++i)\n                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.streamIds[i]);\n        if (message.groupIds != null && message.groupIds.length)\n            for (var i = 0; i < message.groupIds.length; ++i)\n                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.groupIds[i]);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkPauseResumeFrame message, length delimited. Does not implicitly {@link SdkPauseResumeFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkPauseResumeFrame\n     * @static\n     * @param {ISdkPauseResumeFrame} message SdkPauseResumeFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkPauseResumeFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkPauseResumeFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkPauseResumeFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkPauseResumeFrame} SdkPauseResumeFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkPauseResumeFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkPauseResumeFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    if (!(message.streamIds && message.streamIds.length))\n                        message.streamIds = [];\n                    if ((tag & 7) === 2) {\n                        var end2 = reader.uint32() + reader.pos;\n                        while (reader.pos < end2)\n                            message.streamIds.push(reader.uint32());\n                    } else\n                        message.streamIds.push(reader.uint32());\n                    break;\n                }\n            case 2: {\n                    if (!(message.groupIds && message.groupIds.length))\n                        message.groupIds = [];\n                    if ((tag & 7) === 2) {\n                        var end2 = reader.uint32() + reader.pos;\n                        while (reader.pos < end2)\n                            message.groupIds.push(reader.uint32());\n                    } else\n                        message.groupIds.push(reader.uint32());\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkPauseResumeFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkPauseResumeFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkPauseResumeFrame} SdkPauseResumeFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkPauseResumeFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkPauseResumeFrame message.\n     * @function verify\n     * @memberof SdkPauseResumeFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkPauseResumeFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.streamIds != null && message.hasOwnProperty(\"streamIds\")) {\n            if (!Array.isArray(message.streamIds))\n                return \"streamIds: array expected\";\n            for (var i = 0; i < message.streamIds.length; ++i)\n                if (!$util.isInteger(message.streamIds[i]))\n                    return \"streamIds: integer[] expected\";\n        }\n        if (message.groupIds != null && message.hasOwnProperty(\"groupIds\")) {\n            if (!Array.isArray(message.groupIds))\n                return \"groupIds: array expected\";\n            for (var i = 0; i < message.groupIds.length; ++i)\n                if (!$util.isInteger(message.groupIds[i]))\n                    return \"groupIds: integer[] expected\";\n        }\n        return null;\n    };\n\n    /**\n     * Creates a SdkPauseResumeFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkPauseResumeFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkPauseResumeFrame} SdkPauseResumeFrame\n     */\n    SdkPauseResumeFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkPauseResumeFrame)\n            return object;\n        var message = new $root.SdkPauseResumeFrame();\n        if (object.streamIds) {\n            if (!Array.isArray(object.streamIds))\n                throw TypeError(\".SdkPauseResumeFrame.streamIds: array expected\");\n            message.streamIds = [];\n            for (var i = 0; i < object.streamIds.length; ++i)\n                message.streamIds[i] = object.streamIds[i] >>> 0;\n        }\n        if (object.groupIds) {\n            if (!Array.isArray(object.groupIds))\n                throw TypeError(\".SdkPauseResumeFrame.groupIds: array expected\");\n            message.groupIds = [];\n            for (var i = 0; i < object.groupIds.length; ++i)\n                message.groupIds[i] = object.groupIds[i] >>> 0;\n        }\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkPauseResumeFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkPauseResumeFrame\n     * @static\n     * @param {SdkPauseResumeFrame} message SdkPauseResumeFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkPauseResumeFrame.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.arrays || options.defaults) {\n            object.streamIds = [];\n            object.groupIds = [];\n        }\n        if (message.streamIds && message.streamIds.length) {\n            object.streamIds = [];\n            for (var j = 0; j < message.streamIds.length; ++j)\n                object.streamIds[j] = message.streamIds[j];\n        }\n        if (message.groupIds && message.groupIds.length) {\n            object.groupIds = [];\n            for (var j = 0; j < message.groupIds.length; ++j)\n                object.groupIds[j] = message.groupIds[j];\n        }\n        return object;\n    };\n\n    /**\n     * Converts this SdkPauseResumeFrame to JSON.\n     * @function toJSON\n     * @memberof SdkPauseResumeFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkPauseResumeFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkPauseResumeFrame\n     * @function getTypeUrl\n     * @memberof SdkPauseResumeFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkPauseResumeFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkPauseResumeFrame\";\n    };\n\n    return SdkPauseResumeFrame;\n})();\n\n$root.SdkBitrateFrame = (function() {\n\n    /**\n     * Properties of a SdkBitrateFrame.\n     * @name ISdkBitrateFrame\n     * @interface ISdkBitrateFrame\n     * @property {Array.<ISdkBitrate>|null} [bitrates] SdkBitrateFrame bitrates\n     * @property {number|null} [serverAvailableOutgoingBitrate] SdkBitrateFrame serverAvailableOutgoingBitrate\n     */\n\n    /**\n     * Constructs a new SdkBitrateFrame.\n     * @name SdkBitrateFrame\n     * @classdesc Represents a SdkBitrateFrame.\n     * @implements ISdkBitrateFrame\n     * @constructor\n     * @param {ISdkBitrateFrame=} [properties] Properties to set\n     */\n    function SdkBitrateFrame(properties) {\n        this.bitrates = [];\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkBitrateFrame bitrates.\n     * @member {Array.<ISdkBitrate>} bitrates\n     * @memberof SdkBitrateFrame\n     * @instance\n     */\n    SdkBitrateFrame.prototype.bitrates = $util.emptyArray;\n\n    /**\n     * SdkBitrateFrame serverAvailableOutgoingBitrate.\n     * @member {number} serverAvailableOutgoingBitrate\n     * @memberof SdkBitrateFrame\n     * @instance\n     */\n    SdkBitrateFrame.prototype.serverAvailableOutgoingBitrate = 0;\n\n    /**\n     * Creates a new SdkBitrateFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkBitrateFrame\n     * @static\n     * @param {ISdkBitrateFrame=} [properties] Properties to set\n     * @returns {SdkBitrateFrame} SdkBitrateFrame instance\n     */\n    SdkBitrateFrame.create = function create(properties) {\n        return new SdkBitrateFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkBitrateFrame message. Does not implicitly {@link SdkBitrateFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkBitrateFrame\n     * @static\n     * @param {ISdkBitrateFrame} message SdkBitrateFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkBitrateFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.bitrates != null && message.bitrates.length)\n            for (var i = 0; i < message.bitrates.length; ++i)\n                $root.SdkBitrate.encode(message.bitrates[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n        if (message.serverAvailableOutgoingBitrate != null && Object.hasOwnProperty.call(message, \"serverAvailableOutgoingBitrate\"))\n            writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.serverAvailableOutgoingBitrate);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkBitrateFrame message, length delimited. Does not implicitly {@link SdkBitrateFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkBitrateFrame\n     * @static\n     * @param {ISdkBitrateFrame} message SdkBitrateFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkBitrateFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkBitrateFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkBitrateFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkBitrateFrame} SdkBitrateFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkBitrateFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkBitrateFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    if (!(message.bitrates && message.bitrates.length))\n                        message.bitrates = [];\n                    message.bitrates.push($root.SdkBitrate.decode(reader, reader.uint32()));\n                    break;\n                }\n            case 2: {\n                    message.serverAvailableOutgoingBitrate = reader.uint32();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkBitrateFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkBitrateFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkBitrateFrame} SdkBitrateFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkBitrateFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkBitrateFrame message.\n     * @function verify\n     * @memberof SdkBitrateFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkBitrateFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.bitrates != null && message.hasOwnProperty(\"bitrates\")) {\n            if (!Array.isArray(message.bitrates))\n                return \"bitrates: array expected\";\n            for (var i = 0; i < message.bitrates.length; ++i) {\n                var error = $root.SdkBitrate.verify(message.bitrates[i]);\n                if (error)\n                    return \"bitrates.\" + error;\n            }\n        }\n        if (message.serverAvailableOutgoingBitrate != null && message.hasOwnProperty(\"serverAvailableOutgoingBitrate\"))\n            if (!$util.isInteger(message.serverAvailableOutgoingBitrate))\n                return \"serverAvailableOutgoingBitrate: integer expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkBitrateFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkBitrateFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkBitrateFrame} SdkBitrateFrame\n     */\n    SdkBitrateFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkBitrateFrame)\n            return object;\n        var message = new $root.SdkBitrateFrame();\n        if (object.bitrates) {\n            if (!Array.isArray(object.bitrates))\n                throw TypeError(\".SdkBitrateFrame.bitrates: array expected\");\n            message.bitrates = [];\n            for (var i = 0; i < object.bitrates.length; ++i) {\n                if (typeof object.bitrates[i] !== \"object\")\n                    throw TypeError(\".SdkBitrateFrame.bitrates: object expected\");\n                message.bitrates[i] = $root.SdkBitrate.fromObject(object.bitrates[i]);\n            }\n        }\n        if (object.serverAvailableOutgoingBitrate != null)\n            message.serverAvailableOutgoingBitrate = object.serverAvailableOutgoingBitrate >>> 0;\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkBitrateFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkBitrateFrame\n     * @static\n     * @param {SdkBitrateFrame} message SdkBitrateFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkBitrateFrame.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.arrays || options.defaults)\n            object.bitrates = [];\n        if (options.defaults)\n            object.serverAvailableOutgoingBitrate = 0;\n        if (message.bitrates && message.bitrates.length) {\n            object.bitrates = [];\n            for (var j = 0; j < message.bitrates.length; ++j)\n                object.bitrates[j] = $root.SdkBitrate.toObject(message.bitrates[j], options);\n        }\n        if (message.serverAvailableOutgoingBitrate != null && message.hasOwnProperty(\"serverAvailableOutgoingBitrate\"))\n            object.serverAvailableOutgoingBitrate = message.serverAvailableOutgoingBitrate;\n        return object;\n    };\n\n    /**\n     * Converts this SdkBitrateFrame to JSON.\n     * @function toJSON\n     * @memberof SdkBitrateFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkBitrateFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkBitrateFrame\n     * @function getTypeUrl\n     * @memberof SdkBitrateFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkBitrateFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkBitrateFrame\";\n    };\n\n    return SdkBitrateFrame;\n})();\n\n$root.SdkStreamDescriptor = (function() {\n\n    /**\n     * Properties of a SdkStreamDescriptor.\n     * @name ISdkStreamDescriptor\n     * @interface ISdkStreamDescriptor\n     * @property {number|null} [streamId] SdkStreamDescriptor streamId\n     * @property {number|null} [framerate] SdkStreamDescriptor framerate\n     * @property {number|null} [maxBitrateKbps] SdkStreamDescriptor maxBitrateKbps\n     * @property {string|null} [trackLabel] SdkStreamDescriptor trackLabel\n     * @property {number|null} [groupId] SdkStreamDescriptor groupId\n     * @property {number|null} [avgBitrateBps] SdkStreamDescriptor avgBitrateBps\n     * @property {string|null} [attendeeId] SdkStreamDescriptor attendeeId\n     * @property {SdkStreamMediaType|null} [mediaType] SdkStreamDescriptor mediaType\n     * @property {string|null} [externalUserId] SdkStreamDescriptor externalUserId\n     * @property {number|null} [width] SdkStreamDescriptor width\n     * @property {number|null} [height] SdkStreamDescriptor height\n     */\n\n    /**\n     * Constructs a new SdkStreamDescriptor.\n     * @name SdkStreamDescriptor\n     * @classdesc Represents a SdkStreamDescriptor.\n     * @implements ISdkStreamDescriptor\n     * @constructor\n     * @param {ISdkStreamDescriptor=} [properties] Properties to set\n     */\n    function SdkStreamDescriptor(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkStreamDescriptor streamId.\n     * @member {number} streamId\n     * @memberof SdkStreamDescriptor\n     * @instance\n     */\n    SdkStreamDescriptor.prototype.streamId = 0;\n\n    /**\n     * SdkStreamDescriptor framerate.\n     * @member {number} framerate\n     * @memberof SdkStreamDescriptor\n     * @instance\n     */\n    SdkStreamDescriptor.prototype.framerate = 0;\n\n    /**\n     * SdkStreamDescriptor maxBitrateKbps.\n     * @member {number} maxBitrateKbps\n     * @memberof SdkStreamDescriptor\n     * @instance\n     */\n    SdkStreamDescriptor.prototype.maxBitrateKbps = 0;\n\n    /**\n     * SdkStreamDescriptor trackLabel.\n     * @member {string} trackLabel\n     * @memberof SdkStreamDescriptor\n     * @instance\n     */\n    SdkStreamDescriptor.prototype.trackLabel = \"\";\n\n    /**\n     * SdkStreamDescriptor groupId.\n     * @member {number} groupId\n     * @memberof SdkStreamDescriptor\n     * @instance\n     */\n    SdkStreamDescriptor.prototype.groupId = 0;\n\n    /**\n     * SdkStreamDescriptor avgBitrateBps.\n     * @member {number} avgBitrateBps\n     * @memberof SdkStreamDescriptor\n     * @instance\n     */\n    SdkStreamDescriptor.prototype.avgBitrateBps = 0;\n\n    /**\n     * SdkStreamDescriptor attendeeId.\n     * @member {string} attendeeId\n     * @memberof SdkStreamDescriptor\n     * @instance\n     */\n    SdkStreamDescriptor.prototype.attendeeId = \"\";\n\n    /**\n     * SdkStreamDescriptor mediaType.\n     * @member {SdkStreamMediaType} mediaType\n     * @memberof SdkStreamDescriptor\n     * @instance\n     */\n    SdkStreamDescriptor.prototype.mediaType = 1;\n\n    /**\n     * SdkStreamDescriptor externalUserId.\n     * @member {string} externalUserId\n     * @memberof SdkStreamDescriptor\n     * @instance\n     */\n    SdkStreamDescriptor.prototype.externalUserId = \"\";\n\n    /**\n     * SdkStreamDescriptor width.\n     * @member {number} width\n     * @memberof SdkStreamDescriptor\n     * @instance\n     */\n    SdkStreamDescriptor.prototype.width = 0;\n\n    /**\n     * SdkStreamDescriptor height.\n     * @member {number} height\n     * @memberof SdkStreamDescriptor\n     * @instance\n     */\n    SdkStreamDescriptor.prototype.height = 0;\n\n    /**\n     * Creates a new SdkStreamDescriptor instance using the specified properties.\n     * @function create\n     * @memberof SdkStreamDescriptor\n     * @static\n     * @param {ISdkStreamDescriptor=} [properties] Properties to set\n     * @returns {SdkStreamDescriptor} SdkStreamDescriptor instance\n     */\n    SdkStreamDescriptor.create = function create(properties) {\n        return new SdkStreamDescriptor(properties);\n    };\n\n    /**\n     * Encodes the specified SdkStreamDescriptor message. Does not implicitly {@link SdkStreamDescriptor.verify|verify} messages.\n     * @function encode\n     * @memberof SdkStreamDescriptor\n     * @static\n     * @param {ISdkStreamDescriptor} message SdkStreamDescriptor message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkStreamDescriptor.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.streamId != null && Object.hasOwnProperty.call(message, \"streamId\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.streamId);\n        if (message.framerate != null && Object.hasOwnProperty.call(message, \"framerate\"))\n            writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.framerate);\n        if (message.maxBitrateKbps != null && Object.hasOwnProperty.call(message, \"maxBitrateKbps\"))\n            writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.maxBitrateKbps);\n        if (message.trackLabel != null && Object.hasOwnProperty.call(message, \"trackLabel\"))\n            writer.uint32(/* id 4, wireType 2 =*/34).string(message.trackLabel);\n        if (message.groupId != null && Object.hasOwnProperty.call(message, \"groupId\"))\n            writer.uint32(/* id 6, wireType 0 =*/48).uint32(message.groupId);\n        if (message.avgBitrateBps != null && Object.hasOwnProperty.call(message, \"avgBitrateBps\"))\n            writer.uint32(/* id 7, wireType 0 =*/56).uint32(message.avgBitrateBps);\n        if (message.attendeeId != null && Object.hasOwnProperty.call(message, \"attendeeId\"))\n            writer.uint32(/* id 8, wireType 2 =*/66).string(message.attendeeId);\n        if (message.mediaType != null && Object.hasOwnProperty.call(message, \"mediaType\"))\n            writer.uint32(/* id 9, wireType 0 =*/72).int32(message.mediaType);\n        if (message.externalUserId != null && Object.hasOwnProperty.call(message, \"externalUserId\"))\n            writer.uint32(/* id 10, wireType 2 =*/82).string(message.externalUserId);\n        if (message.width != null && Object.hasOwnProperty.call(message, \"width\"))\n            writer.uint32(/* id 11, wireType 0 =*/88).uint32(message.width);\n        if (message.height != null && Object.hasOwnProperty.call(message, \"height\"))\n            writer.uint32(/* id 12, wireType 0 =*/96).uint32(message.height);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkStreamDescriptor message, length delimited. Does not implicitly {@link SdkStreamDescriptor.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkStreamDescriptor\n     * @static\n     * @param {ISdkStreamDescriptor} message SdkStreamDescriptor message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkStreamDescriptor.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkStreamDescriptor message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkStreamDescriptor\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkStreamDescriptor} SdkStreamDescriptor\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkStreamDescriptor.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkStreamDescriptor();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.streamId = reader.uint32();\n                    break;\n                }\n            case 2: {\n                    message.framerate = reader.uint32();\n                    break;\n                }\n            case 3: {\n                    message.maxBitrateKbps = reader.uint32();\n                    break;\n                }\n            case 4: {\n                    message.trackLabel = reader.string();\n                    break;\n                }\n            case 6: {\n                    message.groupId = reader.uint32();\n                    break;\n                }\n            case 7: {\n                    message.avgBitrateBps = reader.uint32();\n                    break;\n                }\n            case 8: {\n                    message.attendeeId = reader.string();\n                    break;\n                }\n            case 9: {\n                    message.mediaType = reader.int32();\n                    break;\n                }\n            case 10: {\n                    message.externalUserId = reader.string();\n                    break;\n                }\n            case 11: {\n                    message.width = reader.uint32();\n                    break;\n                }\n            case 12: {\n                    message.height = reader.uint32();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkStreamDescriptor message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkStreamDescriptor\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkStreamDescriptor} SdkStreamDescriptor\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkStreamDescriptor.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkStreamDescriptor message.\n     * @function verify\n     * @memberof SdkStreamDescriptor\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkStreamDescriptor.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n            if (!$util.isInteger(message.streamId))\n                return \"streamId: integer expected\";\n        if (message.framerate != null && message.hasOwnProperty(\"framerate\"))\n            if (!$util.isInteger(message.framerate))\n                return \"framerate: integer expected\";\n        if (message.maxBitrateKbps != null && message.hasOwnProperty(\"maxBitrateKbps\"))\n            if (!$util.isInteger(message.maxBitrateKbps))\n                return \"maxBitrateKbps: integer expected\";\n        if (message.trackLabel != null && message.hasOwnProperty(\"trackLabel\"))\n            if (!$util.isString(message.trackLabel))\n                return \"trackLabel: string expected\";\n        if (message.groupId != null && message.hasOwnProperty(\"groupId\"))\n            if (!$util.isInteger(message.groupId))\n                return \"groupId: integer expected\";\n        if (message.avgBitrateBps != null && message.hasOwnProperty(\"avgBitrateBps\"))\n            if (!$util.isInteger(message.avgBitrateBps))\n                return \"avgBitrateBps: integer expected\";\n        if (message.attendeeId != null && message.hasOwnProperty(\"attendeeId\"))\n            if (!$util.isString(message.attendeeId))\n                return \"attendeeId: string expected\";\n        if (message.mediaType != null && message.hasOwnProperty(\"mediaType\"))\n            switch (message.mediaType) {\n            default:\n                return \"mediaType: enum value expected\";\n            case 1:\n            case 2:\n                break;\n            }\n        if (message.externalUserId != null && message.hasOwnProperty(\"externalUserId\"))\n            if (!$util.isString(message.externalUserId))\n                return \"externalUserId: string expected\";\n        if (message.width != null && message.hasOwnProperty(\"width\"))\n            if (!$util.isInteger(message.width))\n                return \"width: integer expected\";\n        if (message.height != null && message.hasOwnProperty(\"height\"))\n            if (!$util.isInteger(message.height))\n                return \"height: integer expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkStreamDescriptor message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkStreamDescriptor\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkStreamDescriptor} SdkStreamDescriptor\n     */\n    SdkStreamDescriptor.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkStreamDescriptor)\n            return object;\n        var message = new $root.SdkStreamDescriptor();\n        if (object.streamId != null)\n            message.streamId = object.streamId >>> 0;\n        if (object.framerate != null)\n            message.framerate = object.framerate >>> 0;\n        if (object.maxBitrateKbps != null)\n            message.maxBitrateKbps = object.maxBitrateKbps >>> 0;\n        if (object.trackLabel != null)\n            message.trackLabel = String(object.trackLabel);\n        if (object.groupId != null)\n            message.groupId = object.groupId >>> 0;\n        if (object.avgBitrateBps != null)\n            message.avgBitrateBps = object.avgBitrateBps >>> 0;\n        if (object.attendeeId != null)\n            message.attendeeId = String(object.attendeeId);\n        switch (object.mediaType) {\n        default:\n            if (typeof object.mediaType === \"number\") {\n                message.mediaType = object.mediaType;\n                break;\n            }\n            break;\n        case \"AUDIO\":\n        case 1:\n            message.mediaType = 1;\n            break;\n        case \"VIDEO\":\n        case 2:\n            message.mediaType = 2;\n            break;\n        }\n        if (object.externalUserId != null)\n            message.externalUserId = String(object.externalUserId);\n        if (object.width != null)\n            message.width = object.width >>> 0;\n        if (object.height != null)\n            message.height = object.height >>> 0;\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkStreamDescriptor message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkStreamDescriptor\n     * @static\n     * @param {SdkStreamDescriptor} message SdkStreamDescriptor\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkStreamDescriptor.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            object.streamId = 0;\n            object.framerate = 0;\n            object.maxBitrateKbps = 0;\n            object.trackLabel = \"\";\n            object.groupId = 0;\n            object.avgBitrateBps = 0;\n            object.attendeeId = \"\";\n            object.mediaType = options.enums === String ? \"AUDIO\" : 1;\n            object.externalUserId = \"\";\n            object.width = 0;\n            object.height = 0;\n        }\n        if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n            object.streamId = message.streamId;\n        if (message.framerate != null && message.hasOwnProperty(\"framerate\"))\n            object.framerate = message.framerate;\n        if (message.maxBitrateKbps != null && message.hasOwnProperty(\"maxBitrateKbps\"))\n            object.maxBitrateKbps = message.maxBitrateKbps;\n        if (message.trackLabel != null && message.hasOwnProperty(\"trackLabel\"))\n            object.trackLabel = message.trackLabel;\n        if (message.groupId != null && message.hasOwnProperty(\"groupId\"))\n            object.groupId = message.groupId;\n        if (message.avgBitrateBps != null && message.hasOwnProperty(\"avgBitrateBps\"))\n            object.avgBitrateBps = message.avgBitrateBps;\n        if (message.attendeeId != null && message.hasOwnProperty(\"attendeeId\"))\n            object.attendeeId = message.attendeeId;\n        if (message.mediaType != null && message.hasOwnProperty(\"mediaType\"))\n            object.mediaType = options.enums === String ? $root.SdkStreamMediaType[message.mediaType] === undefined ? message.mediaType : $root.SdkStreamMediaType[message.mediaType] : message.mediaType;\n        if (message.externalUserId != null && message.hasOwnProperty(\"externalUserId\"))\n            object.externalUserId = message.externalUserId;\n        if (message.width != null && message.hasOwnProperty(\"width\"))\n            object.width = message.width;\n        if (message.height != null && message.hasOwnProperty(\"height\"))\n            object.height = message.height;\n        return object;\n    };\n\n    /**\n     * Converts this SdkStreamDescriptor to JSON.\n     * @function toJSON\n     * @memberof SdkStreamDescriptor\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkStreamDescriptor.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkStreamDescriptor\n     * @function getTypeUrl\n     * @memberof SdkStreamDescriptor\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkStreamDescriptor.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkStreamDescriptor\";\n    };\n\n    return SdkStreamDescriptor;\n})();\n\n$root.SdkStreamAllocation = (function() {\n\n    /**\n     * Properties of a SdkStreamAllocation.\n     * @name ISdkStreamAllocation\n     * @interface ISdkStreamAllocation\n     * @property {string|null} [trackLabel] SdkStreamAllocation trackLabel\n     * @property {number|null} [streamId] SdkStreamAllocation streamId\n     * @property {number|null} [groupId] SdkStreamAllocation groupId\n     */\n\n    /**\n     * Constructs a new SdkStreamAllocation.\n     * @name SdkStreamAllocation\n     * @classdesc Represents a SdkStreamAllocation.\n     * @implements ISdkStreamAllocation\n     * @constructor\n     * @param {ISdkStreamAllocation=} [properties] Properties to set\n     */\n    function SdkStreamAllocation(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkStreamAllocation trackLabel.\n     * @member {string} trackLabel\n     * @memberof SdkStreamAllocation\n     * @instance\n     */\n    SdkStreamAllocation.prototype.trackLabel = \"\";\n\n    /**\n     * SdkStreamAllocation streamId.\n     * @member {number} streamId\n     * @memberof SdkStreamAllocation\n     * @instance\n     */\n    SdkStreamAllocation.prototype.streamId = 0;\n\n    /**\n     * SdkStreamAllocation groupId.\n     * @member {number} groupId\n     * @memberof SdkStreamAllocation\n     * @instance\n     */\n    SdkStreamAllocation.prototype.groupId = 0;\n\n    /**\n     * Creates a new SdkStreamAllocation instance using the specified properties.\n     * @function create\n     * @memberof SdkStreamAllocation\n     * @static\n     * @param {ISdkStreamAllocation=} [properties] Properties to set\n     * @returns {SdkStreamAllocation} SdkStreamAllocation instance\n     */\n    SdkStreamAllocation.create = function create(properties) {\n        return new SdkStreamAllocation(properties);\n    };\n\n    /**\n     * Encodes the specified SdkStreamAllocation message. Does not implicitly {@link SdkStreamAllocation.verify|verify} messages.\n     * @function encode\n     * @memberof SdkStreamAllocation\n     * @static\n     * @param {ISdkStreamAllocation} message SdkStreamAllocation message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkStreamAllocation.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.trackLabel != null && Object.hasOwnProperty.call(message, \"trackLabel\"))\n            writer.uint32(/* id 1, wireType 2 =*/10).string(message.trackLabel);\n        if (message.streamId != null && Object.hasOwnProperty.call(message, \"streamId\"))\n            writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.streamId);\n        if (message.groupId != null && Object.hasOwnProperty.call(message, \"groupId\"))\n            writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.groupId);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkStreamAllocation message, length delimited. Does not implicitly {@link SdkStreamAllocation.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkStreamAllocation\n     * @static\n     * @param {ISdkStreamAllocation} message SdkStreamAllocation message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkStreamAllocation.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkStreamAllocation message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkStreamAllocation\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkStreamAllocation} SdkStreamAllocation\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkStreamAllocation.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkStreamAllocation();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.trackLabel = reader.string();\n                    break;\n                }\n            case 2: {\n                    message.streamId = reader.uint32();\n                    break;\n                }\n            case 3: {\n                    message.groupId = reader.uint32();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkStreamAllocation message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkStreamAllocation\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkStreamAllocation} SdkStreamAllocation\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkStreamAllocation.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkStreamAllocation message.\n     * @function verify\n     * @memberof SdkStreamAllocation\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkStreamAllocation.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.trackLabel != null && message.hasOwnProperty(\"trackLabel\"))\n            if (!$util.isString(message.trackLabel))\n                return \"trackLabel: string expected\";\n        if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n            if (!$util.isInteger(message.streamId))\n                return \"streamId: integer expected\";\n        if (message.groupId != null && message.hasOwnProperty(\"groupId\"))\n            if (!$util.isInteger(message.groupId))\n                return \"groupId: integer expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkStreamAllocation message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkStreamAllocation\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkStreamAllocation} SdkStreamAllocation\n     */\n    SdkStreamAllocation.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkStreamAllocation)\n            return object;\n        var message = new $root.SdkStreamAllocation();\n        if (object.trackLabel != null)\n            message.trackLabel = String(object.trackLabel);\n        if (object.streamId != null)\n            message.streamId = object.streamId >>> 0;\n        if (object.groupId != null)\n            message.groupId = object.groupId >>> 0;\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkStreamAllocation message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkStreamAllocation\n     * @static\n     * @param {SdkStreamAllocation} message SdkStreamAllocation\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkStreamAllocation.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            object.trackLabel = \"\";\n            object.streamId = 0;\n            object.groupId = 0;\n        }\n        if (message.trackLabel != null && message.hasOwnProperty(\"trackLabel\"))\n            object.trackLabel = message.trackLabel;\n        if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n            object.streamId = message.streamId;\n        if (message.groupId != null && message.hasOwnProperty(\"groupId\"))\n            object.groupId = message.groupId;\n        return object;\n    };\n\n    /**\n     * Converts this SdkStreamAllocation to JSON.\n     * @function toJSON\n     * @memberof SdkStreamAllocation\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkStreamAllocation.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkStreamAllocation\n     * @function getTypeUrl\n     * @memberof SdkStreamAllocation\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkStreamAllocation.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkStreamAllocation\";\n    };\n\n    return SdkStreamAllocation;\n})();\n\n$root.SdkTrackMapping = (function() {\n\n    /**\n     * Properties of a SdkTrackMapping.\n     * @name ISdkTrackMapping\n     * @interface ISdkTrackMapping\n     * @property {number|null} [streamId] SdkTrackMapping streamId\n     * @property {number|null} [ssrc] SdkTrackMapping ssrc\n     * @property {string|null} [trackLabel] SdkTrackMapping trackLabel\n     */\n\n    /**\n     * Constructs a new SdkTrackMapping.\n     * @name SdkTrackMapping\n     * @classdesc Represents a SdkTrackMapping.\n     * @implements ISdkTrackMapping\n     * @constructor\n     * @param {ISdkTrackMapping=} [properties] Properties to set\n     */\n    function SdkTrackMapping(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkTrackMapping streamId.\n     * @member {number} streamId\n     * @memberof SdkTrackMapping\n     * @instance\n     */\n    SdkTrackMapping.prototype.streamId = 0;\n\n    /**\n     * SdkTrackMapping ssrc.\n     * @member {number} ssrc\n     * @memberof SdkTrackMapping\n     * @instance\n     */\n    SdkTrackMapping.prototype.ssrc = 0;\n\n    /**\n     * SdkTrackMapping trackLabel.\n     * @member {string} trackLabel\n     * @memberof SdkTrackMapping\n     * @instance\n     */\n    SdkTrackMapping.prototype.trackLabel = \"\";\n\n    /**\n     * Creates a new SdkTrackMapping instance using the specified properties.\n     * @function create\n     * @memberof SdkTrackMapping\n     * @static\n     * @param {ISdkTrackMapping=} [properties] Properties to set\n     * @returns {SdkTrackMapping} SdkTrackMapping instance\n     */\n    SdkTrackMapping.create = function create(properties) {\n        return new SdkTrackMapping(properties);\n    };\n\n    /**\n     * Encodes the specified SdkTrackMapping message. Does not implicitly {@link SdkTrackMapping.verify|verify} messages.\n     * @function encode\n     * @memberof SdkTrackMapping\n     * @static\n     * @param {ISdkTrackMapping} message SdkTrackMapping message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTrackMapping.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.streamId != null && Object.hasOwnProperty.call(message, \"streamId\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.streamId);\n        if (message.ssrc != null && Object.hasOwnProperty.call(message, \"ssrc\"))\n            writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.ssrc);\n        if (message.trackLabel != null && Object.hasOwnProperty.call(message, \"trackLabel\"))\n            writer.uint32(/* id 3, wireType 2 =*/26).string(message.trackLabel);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkTrackMapping message, length delimited. Does not implicitly {@link SdkTrackMapping.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkTrackMapping\n     * @static\n     * @param {ISdkTrackMapping} message SdkTrackMapping message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTrackMapping.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkTrackMapping message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkTrackMapping\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkTrackMapping} SdkTrackMapping\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTrackMapping.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTrackMapping();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.streamId = reader.uint32();\n                    break;\n                }\n            case 2: {\n                    message.ssrc = reader.uint32();\n                    break;\n                }\n            case 3: {\n                    message.trackLabel = reader.string();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkTrackMapping message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkTrackMapping\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkTrackMapping} SdkTrackMapping\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTrackMapping.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkTrackMapping message.\n     * @function verify\n     * @memberof SdkTrackMapping\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkTrackMapping.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n            if (!$util.isInteger(message.streamId))\n                return \"streamId: integer expected\";\n        if (message.ssrc != null && message.hasOwnProperty(\"ssrc\"))\n            if (!$util.isInteger(message.ssrc))\n                return \"ssrc: integer expected\";\n        if (message.trackLabel != null && message.hasOwnProperty(\"trackLabel\"))\n            if (!$util.isString(message.trackLabel))\n                return \"trackLabel: string expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkTrackMapping message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkTrackMapping\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkTrackMapping} SdkTrackMapping\n     */\n    SdkTrackMapping.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkTrackMapping)\n            return object;\n        var message = new $root.SdkTrackMapping();\n        if (object.streamId != null)\n            message.streamId = object.streamId >>> 0;\n        if (object.ssrc != null)\n            message.ssrc = object.ssrc >>> 0;\n        if (object.trackLabel != null)\n            message.trackLabel = String(object.trackLabel);\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkTrackMapping message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkTrackMapping\n     * @static\n     * @param {SdkTrackMapping} message SdkTrackMapping\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkTrackMapping.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            object.streamId = 0;\n            object.ssrc = 0;\n            object.trackLabel = \"\";\n        }\n        if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n            object.streamId = message.streamId;\n        if (message.ssrc != null && message.hasOwnProperty(\"ssrc\"))\n            object.ssrc = message.ssrc;\n        if (message.trackLabel != null && message.hasOwnProperty(\"trackLabel\"))\n            object.trackLabel = message.trackLabel;\n        return object;\n    };\n\n    /**\n     * Converts this SdkTrackMapping to JSON.\n     * @function toJSON\n     * @memberof SdkTrackMapping\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkTrackMapping.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkTrackMapping\n     * @function getTypeUrl\n     * @memberof SdkTrackMapping\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkTrackMapping.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkTrackMapping\";\n    };\n\n    return SdkTrackMapping;\n})();\n\n$root.SdkBitrate = (function() {\n\n    /**\n     * Properties of a SdkBitrate.\n     * @name ISdkBitrate\n     * @interface ISdkBitrate\n     * @property {number|null} [sourceStreamId] SdkBitrate sourceStreamId\n     * @property {number|null} [avgBitrateBps] SdkBitrate avgBitrateBps\n     */\n\n    /**\n     * Constructs a new SdkBitrate.\n     * @name SdkBitrate\n     * @classdesc Represents a SdkBitrate.\n     * @implements ISdkBitrate\n     * @constructor\n     * @param {ISdkBitrate=} [properties] Properties to set\n     */\n    function SdkBitrate(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkBitrate sourceStreamId.\n     * @member {number} sourceStreamId\n     * @memberof SdkBitrate\n     * @instance\n     */\n    SdkBitrate.prototype.sourceStreamId = 0;\n\n    /**\n     * SdkBitrate avgBitrateBps.\n     * @member {number} avgBitrateBps\n     * @memberof SdkBitrate\n     * @instance\n     */\n    SdkBitrate.prototype.avgBitrateBps = 0;\n\n    /**\n     * Creates a new SdkBitrate instance using the specified properties.\n     * @function create\n     * @memberof SdkBitrate\n     * @static\n     * @param {ISdkBitrate=} [properties] Properties to set\n     * @returns {SdkBitrate} SdkBitrate instance\n     */\n    SdkBitrate.create = function create(properties) {\n        return new SdkBitrate(properties);\n    };\n\n    /**\n     * Encodes the specified SdkBitrate message. Does not implicitly {@link SdkBitrate.verify|verify} messages.\n     * @function encode\n     * @memberof SdkBitrate\n     * @static\n     * @param {ISdkBitrate} message SdkBitrate message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkBitrate.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.sourceStreamId != null && Object.hasOwnProperty.call(message, \"sourceStreamId\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.sourceStreamId);\n        if (message.avgBitrateBps != null && Object.hasOwnProperty.call(message, \"avgBitrateBps\"))\n            writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.avgBitrateBps);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkBitrate message, length delimited. Does not implicitly {@link SdkBitrate.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkBitrate\n     * @static\n     * @param {ISdkBitrate} message SdkBitrate message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkBitrate.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkBitrate message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkBitrate\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkBitrate} SdkBitrate\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkBitrate.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkBitrate();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.sourceStreamId = reader.uint32();\n                    break;\n                }\n            case 2: {\n                    message.avgBitrateBps = reader.uint32();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkBitrate message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkBitrate\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkBitrate} SdkBitrate\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkBitrate.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkBitrate message.\n     * @function verify\n     * @memberof SdkBitrate\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkBitrate.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.sourceStreamId != null && message.hasOwnProperty(\"sourceStreamId\"))\n            if (!$util.isInteger(message.sourceStreamId))\n                return \"sourceStreamId: integer expected\";\n        if (message.avgBitrateBps != null && message.hasOwnProperty(\"avgBitrateBps\"))\n            if (!$util.isInteger(message.avgBitrateBps))\n                return \"avgBitrateBps: integer expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkBitrate message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkBitrate\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkBitrate} SdkBitrate\n     */\n    SdkBitrate.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkBitrate)\n            return object;\n        var message = new $root.SdkBitrate();\n        if (object.sourceStreamId != null)\n            message.sourceStreamId = object.sourceStreamId >>> 0;\n        if (object.avgBitrateBps != null)\n            message.avgBitrateBps = object.avgBitrateBps >>> 0;\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkBitrate message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkBitrate\n     * @static\n     * @param {SdkBitrate} message SdkBitrate\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkBitrate.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            object.sourceStreamId = 0;\n            object.avgBitrateBps = 0;\n        }\n        if (message.sourceStreamId != null && message.hasOwnProperty(\"sourceStreamId\"))\n            object.sourceStreamId = message.sourceStreamId;\n        if (message.avgBitrateBps != null && message.hasOwnProperty(\"avgBitrateBps\"))\n            object.avgBitrateBps = message.avgBitrateBps;\n        return object;\n    };\n\n    /**\n     * Converts this SdkBitrate to JSON.\n     * @function toJSON\n     * @memberof SdkBitrate\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkBitrate.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkBitrate\n     * @function getTypeUrl\n     * @memberof SdkBitrate\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkBitrate.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkBitrate\";\n    };\n\n    return SdkBitrate;\n})();\n\n$root.SdkAudioControlFrame = (function() {\n\n    /**\n     * Properties of a SdkAudioControlFrame.\n     * @name ISdkAudioControlFrame\n     * @interface ISdkAudioControlFrame\n     * @property {boolean|null} [muted] SdkAudioControlFrame muted\n     */\n\n    /**\n     * Constructs a new SdkAudioControlFrame.\n     * @name SdkAudioControlFrame\n     * @classdesc Represents a SdkAudioControlFrame.\n     * @implements ISdkAudioControlFrame\n     * @constructor\n     * @param {ISdkAudioControlFrame=} [properties] Properties to set\n     */\n    function SdkAudioControlFrame(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkAudioControlFrame muted.\n     * @member {boolean} muted\n     * @memberof SdkAudioControlFrame\n     * @instance\n     */\n    SdkAudioControlFrame.prototype.muted = false;\n\n    /**\n     * Creates a new SdkAudioControlFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkAudioControlFrame\n     * @static\n     * @param {ISdkAudioControlFrame=} [properties] Properties to set\n     * @returns {SdkAudioControlFrame} SdkAudioControlFrame instance\n     */\n    SdkAudioControlFrame.create = function create(properties) {\n        return new SdkAudioControlFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkAudioControlFrame message. Does not implicitly {@link SdkAudioControlFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkAudioControlFrame\n     * @static\n     * @param {ISdkAudioControlFrame} message SdkAudioControlFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkAudioControlFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.muted != null && Object.hasOwnProperty.call(message, \"muted\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).bool(message.muted);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkAudioControlFrame message, length delimited. Does not implicitly {@link SdkAudioControlFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkAudioControlFrame\n     * @static\n     * @param {ISdkAudioControlFrame} message SdkAudioControlFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkAudioControlFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkAudioControlFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkAudioControlFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkAudioControlFrame} SdkAudioControlFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkAudioControlFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkAudioControlFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.muted = reader.bool();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkAudioControlFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkAudioControlFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkAudioControlFrame} SdkAudioControlFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkAudioControlFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkAudioControlFrame message.\n     * @function verify\n     * @memberof SdkAudioControlFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkAudioControlFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.muted != null && message.hasOwnProperty(\"muted\"))\n            if (typeof message.muted !== \"boolean\")\n                return \"muted: boolean expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkAudioControlFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkAudioControlFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkAudioControlFrame} SdkAudioControlFrame\n     */\n    SdkAudioControlFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkAudioControlFrame)\n            return object;\n        var message = new $root.SdkAudioControlFrame();\n        if (object.muted != null)\n            message.muted = Boolean(object.muted);\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkAudioControlFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkAudioControlFrame\n     * @static\n     * @param {SdkAudioControlFrame} message SdkAudioControlFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkAudioControlFrame.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults)\n            object.muted = false;\n        if (message.muted != null && message.hasOwnProperty(\"muted\"))\n            object.muted = message.muted;\n        return object;\n    };\n\n    /**\n     * Converts this SdkAudioControlFrame to JSON.\n     * @function toJSON\n     * @memberof SdkAudioControlFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkAudioControlFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkAudioControlFrame\n     * @function getTypeUrl\n     * @memberof SdkAudioControlFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkAudioControlFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkAudioControlFrame\";\n    };\n\n    return SdkAudioControlFrame;\n})();\n\n$root.SdkAudioMetadataFrame = (function() {\n\n    /**\n     * Properties of a SdkAudioMetadataFrame.\n     * @name ISdkAudioMetadataFrame\n     * @interface ISdkAudioMetadataFrame\n     * @property {Array.<ISdkAudioAttendeeState>|null} [attendeeStates] SdkAudioMetadataFrame attendeeStates\n     */\n\n    /**\n     * Constructs a new SdkAudioMetadataFrame.\n     * @name SdkAudioMetadataFrame\n     * @classdesc Represents a SdkAudioMetadataFrame.\n     * @implements ISdkAudioMetadataFrame\n     * @constructor\n     * @param {ISdkAudioMetadataFrame=} [properties] Properties to set\n     */\n    function SdkAudioMetadataFrame(properties) {\n        this.attendeeStates = [];\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkAudioMetadataFrame attendeeStates.\n     * @member {Array.<ISdkAudioAttendeeState>} attendeeStates\n     * @memberof SdkAudioMetadataFrame\n     * @instance\n     */\n    SdkAudioMetadataFrame.prototype.attendeeStates = $util.emptyArray;\n\n    /**\n     * Creates a new SdkAudioMetadataFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkAudioMetadataFrame\n     * @static\n     * @param {ISdkAudioMetadataFrame=} [properties] Properties to set\n     * @returns {SdkAudioMetadataFrame} SdkAudioMetadataFrame instance\n     */\n    SdkAudioMetadataFrame.create = function create(properties) {\n        return new SdkAudioMetadataFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkAudioMetadataFrame message. Does not implicitly {@link SdkAudioMetadataFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkAudioMetadataFrame\n     * @static\n     * @param {ISdkAudioMetadataFrame} message SdkAudioMetadataFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkAudioMetadataFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.attendeeStates != null && message.attendeeStates.length)\n            for (var i = 0; i < message.attendeeStates.length; ++i)\n                $root.SdkAudioAttendeeState.encode(message.attendeeStates[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkAudioMetadataFrame message, length delimited. Does not implicitly {@link SdkAudioMetadataFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkAudioMetadataFrame\n     * @static\n     * @param {ISdkAudioMetadataFrame} message SdkAudioMetadataFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkAudioMetadataFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkAudioMetadataFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkAudioMetadataFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkAudioMetadataFrame} SdkAudioMetadataFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkAudioMetadataFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkAudioMetadataFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    if (!(message.attendeeStates && message.attendeeStates.length))\n                        message.attendeeStates = [];\n                    message.attendeeStates.push($root.SdkAudioAttendeeState.decode(reader, reader.uint32()));\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkAudioMetadataFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkAudioMetadataFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkAudioMetadataFrame} SdkAudioMetadataFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkAudioMetadataFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkAudioMetadataFrame message.\n     * @function verify\n     * @memberof SdkAudioMetadataFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkAudioMetadataFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.attendeeStates != null && message.hasOwnProperty(\"attendeeStates\")) {\n            if (!Array.isArray(message.attendeeStates))\n                return \"attendeeStates: array expected\";\n            for (var i = 0; i < message.attendeeStates.length; ++i) {\n                var error = $root.SdkAudioAttendeeState.verify(message.attendeeStates[i]);\n                if (error)\n                    return \"attendeeStates.\" + error;\n            }\n        }\n        return null;\n    };\n\n    /**\n     * Creates a SdkAudioMetadataFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkAudioMetadataFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkAudioMetadataFrame} SdkAudioMetadataFrame\n     */\n    SdkAudioMetadataFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkAudioMetadataFrame)\n            return object;\n        var message = new $root.SdkAudioMetadataFrame();\n        if (object.attendeeStates) {\n            if (!Array.isArray(object.attendeeStates))\n                throw TypeError(\".SdkAudioMetadataFrame.attendeeStates: array expected\");\n            message.attendeeStates = [];\n            for (var i = 0; i < object.attendeeStates.length; ++i) {\n                if (typeof object.attendeeStates[i] !== \"object\")\n                    throw TypeError(\".SdkAudioMetadataFrame.attendeeStates: object expected\");\n                message.attendeeStates[i] = $root.SdkAudioAttendeeState.fromObject(object.attendeeStates[i]);\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkAudioMetadataFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkAudioMetadataFrame\n     * @static\n     * @param {SdkAudioMetadataFrame} message SdkAudioMetadataFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkAudioMetadataFrame.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.arrays || options.defaults)\n            object.attendeeStates = [];\n        if (message.attendeeStates && message.attendeeStates.length) {\n            object.attendeeStates = [];\n            for (var j = 0; j < message.attendeeStates.length; ++j)\n                object.attendeeStates[j] = $root.SdkAudioAttendeeState.toObject(message.attendeeStates[j], options);\n        }\n        return object;\n    };\n\n    /**\n     * Converts this SdkAudioMetadataFrame to JSON.\n     * @function toJSON\n     * @memberof SdkAudioMetadataFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkAudioMetadataFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkAudioMetadataFrame\n     * @function getTypeUrl\n     * @memberof SdkAudioMetadataFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkAudioMetadataFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkAudioMetadataFrame\";\n    };\n\n    return SdkAudioMetadataFrame;\n})();\n\n$root.SdkAudioAttendeeState = (function() {\n\n    /**\n     * Properties of a SdkAudioAttendeeState.\n     * @name ISdkAudioAttendeeState\n     * @interface ISdkAudioAttendeeState\n     * @property {number|null} [audioStreamId] SdkAudioAttendeeState audioStreamId\n     * @property {number|null} [volume] SdkAudioAttendeeState volume\n     * @property {boolean|null} [muted] SdkAudioAttendeeState muted\n     * @property {number|null} [signalStrength] SdkAudioAttendeeState signalStrength\n     */\n\n    /**\n     * Constructs a new SdkAudioAttendeeState.\n     * @name SdkAudioAttendeeState\n     * @classdesc Represents a SdkAudioAttendeeState.\n     * @implements ISdkAudioAttendeeState\n     * @constructor\n     * @param {ISdkAudioAttendeeState=} [properties] Properties to set\n     */\n    function SdkAudioAttendeeState(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkAudioAttendeeState audioStreamId.\n     * @member {number} audioStreamId\n     * @memberof SdkAudioAttendeeState\n     * @instance\n     */\n    SdkAudioAttendeeState.prototype.audioStreamId = 0;\n\n    /**\n     * SdkAudioAttendeeState volume.\n     * @member {number} volume\n     * @memberof SdkAudioAttendeeState\n     * @instance\n     */\n    SdkAudioAttendeeState.prototype.volume = 0;\n\n    /**\n     * SdkAudioAttendeeState muted.\n     * @member {boolean} muted\n     * @memberof SdkAudioAttendeeState\n     * @instance\n     */\n    SdkAudioAttendeeState.prototype.muted = false;\n\n    /**\n     * SdkAudioAttendeeState signalStrength.\n     * @member {number} signalStrength\n     * @memberof SdkAudioAttendeeState\n     * @instance\n     */\n    SdkAudioAttendeeState.prototype.signalStrength = 0;\n\n    /**\n     * Creates a new SdkAudioAttendeeState instance using the specified properties.\n     * @function create\n     * @memberof SdkAudioAttendeeState\n     * @static\n     * @param {ISdkAudioAttendeeState=} [properties] Properties to set\n     * @returns {SdkAudioAttendeeState} SdkAudioAttendeeState instance\n     */\n    SdkAudioAttendeeState.create = function create(properties) {\n        return new SdkAudioAttendeeState(properties);\n    };\n\n    /**\n     * Encodes the specified SdkAudioAttendeeState message. Does not implicitly {@link SdkAudioAttendeeState.verify|verify} messages.\n     * @function encode\n     * @memberof SdkAudioAttendeeState\n     * @static\n     * @param {ISdkAudioAttendeeState} message SdkAudioAttendeeState message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkAudioAttendeeState.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.audioStreamId != null && Object.hasOwnProperty.call(message, \"audioStreamId\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.audioStreamId);\n        if (message.volume != null && Object.hasOwnProperty.call(message, \"volume\"))\n            writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.volume);\n        if (message.muted != null && Object.hasOwnProperty.call(message, \"muted\"))\n            writer.uint32(/* id 3, wireType 0 =*/24).bool(message.muted);\n        if (message.signalStrength != null && Object.hasOwnProperty.call(message, \"signalStrength\"))\n            writer.uint32(/* id 4, wireType 0 =*/32).uint32(message.signalStrength);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkAudioAttendeeState message, length delimited. Does not implicitly {@link SdkAudioAttendeeState.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkAudioAttendeeState\n     * @static\n     * @param {ISdkAudioAttendeeState} message SdkAudioAttendeeState message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkAudioAttendeeState.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkAudioAttendeeState message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkAudioAttendeeState\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkAudioAttendeeState} SdkAudioAttendeeState\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkAudioAttendeeState.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkAudioAttendeeState();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.audioStreamId = reader.uint32();\n                    break;\n                }\n            case 2: {\n                    message.volume = reader.uint32();\n                    break;\n                }\n            case 3: {\n                    message.muted = reader.bool();\n                    break;\n                }\n            case 4: {\n                    message.signalStrength = reader.uint32();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkAudioAttendeeState message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkAudioAttendeeState\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkAudioAttendeeState} SdkAudioAttendeeState\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkAudioAttendeeState.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkAudioAttendeeState message.\n     * @function verify\n     * @memberof SdkAudioAttendeeState\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkAudioAttendeeState.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.audioStreamId != null && message.hasOwnProperty(\"audioStreamId\"))\n            if (!$util.isInteger(message.audioStreamId))\n                return \"audioStreamId: integer expected\";\n        if (message.volume != null && message.hasOwnProperty(\"volume\"))\n            if (!$util.isInteger(message.volume))\n                return \"volume: integer expected\";\n        if (message.muted != null && message.hasOwnProperty(\"muted\"))\n            if (typeof message.muted !== \"boolean\")\n                return \"muted: boolean expected\";\n        if (message.signalStrength != null && message.hasOwnProperty(\"signalStrength\"))\n            if (!$util.isInteger(message.signalStrength))\n                return \"signalStrength: integer expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkAudioAttendeeState message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkAudioAttendeeState\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkAudioAttendeeState} SdkAudioAttendeeState\n     */\n    SdkAudioAttendeeState.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkAudioAttendeeState)\n            return object;\n        var message = new $root.SdkAudioAttendeeState();\n        if (object.audioStreamId != null)\n            message.audioStreamId = object.audioStreamId >>> 0;\n        if (object.volume != null)\n            message.volume = object.volume >>> 0;\n        if (object.muted != null)\n            message.muted = Boolean(object.muted);\n        if (object.signalStrength != null)\n            message.signalStrength = object.signalStrength >>> 0;\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkAudioAttendeeState message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkAudioAttendeeState\n     * @static\n     * @param {SdkAudioAttendeeState} message SdkAudioAttendeeState\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkAudioAttendeeState.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            object.audioStreamId = 0;\n            object.volume = 0;\n            object.muted = false;\n            object.signalStrength = 0;\n        }\n        if (message.audioStreamId != null && message.hasOwnProperty(\"audioStreamId\"))\n            object.audioStreamId = message.audioStreamId;\n        if (message.volume != null && message.hasOwnProperty(\"volume\"))\n            object.volume = message.volume;\n        if (message.muted != null && message.hasOwnProperty(\"muted\"))\n            object.muted = message.muted;\n        if (message.signalStrength != null && message.hasOwnProperty(\"signalStrength\"))\n            object.signalStrength = message.signalStrength;\n        return object;\n    };\n\n    /**\n     * Converts this SdkAudioAttendeeState to JSON.\n     * @function toJSON\n     * @memberof SdkAudioAttendeeState\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkAudioAttendeeState.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkAudioAttendeeState\n     * @function getTypeUrl\n     * @memberof SdkAudioAttendeeState\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkAudioAttendeeState.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkAudioAttendeeState\";\n    };\n\n    return SdkAudioAttendeeState;\n})();\n\n$root.SdkAudioStreamIdInfoFrame = (function() {\n\n    /**\n     * Properties of a SdkAudioStreamIdInfoFrame.\n     * @name ISdkAudioStreamIdInfoFrame\n     * @interface ISdkAudioStreamIdInfoFrame\n     * @property {Array.<ISdkAudioStreamIdInfo>|null} [streams] SdkAudioStreamIdInfoFrame streams\n     */\n\n    /**\n     * Constructs a new SdkAudioStreamIdInfoFrame.\n     * @name SdkAudioStreamIdInfoFrame\n     * @classdesc Represents a SdkAudioStreamIdInfoFrame.\n     * @implements ISdkAudioStreamIdInfoFrame\n     * @constructor\n     * @param {ISdkAudioStreamIdInfoFrame=} [properties] Properties to set\n     */\n    function SdkAudioStreamIdInfoFrame(properties) {\n        this.streams = [];\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkAudioStreamIdInfoFrame streams.\n     * @member {Array.<ISdkAudioStreamIdInfo>} streams\n     * @memberof SdkAudioStreamIdInfoFrame\n     * @instance\n     */\n    SdkAudioStreamIdInfoFrame.prototype.streams = $util.emptyArray;\n\n    /**\n     * Creates a new SdkAudioStreamIdInfoFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkAudioStreamIdInfoFrame\n     * @static\n     * @param {ISdkAudioStreamIdInfoFrame=} [properties] Properties to set\n     * @returns {SdkAudioStreamIdInfoFrame} SdkAudioStreamIdInfoFrame instance\n     */\n    SdkAudioStreamIdInfoFrame.create = function create(properties) {\n        return new SdkAudioStreamIdInfoFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkAudioStreamIdInfoFrame message. Does not implicitly {@link SdkAudioStreamIdInfoFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkAudioStreamIdInfoFrame\n     * @static\n     * @param {ISdkAudioStreamIdInfoFrame} message SdkAudioStreamIdInfoFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkAudioStreamIdInfoFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.streams != null && message.streams.length)\n            for (var i = 0; i < message.streams.length; ++i)\n                $root.SdkAudioStreamIdInfo.encode(message.streams[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkAudioStreamIdInfoFrame message, length delimited. Does not implicitly {@link SdkAudioStreamIdInfoFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkAudioStreamIdInfoFrame\n     * @static\n     * @param {ISdkAudioStreamIdInfoFrame} message SdkAudioStreamIdInfoFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkAudioStreamIdInfoFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkAudioStreamIdInfoFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkAudioStreamIdInfoFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkAudioStreamIdInfoFrame} SdkAudioStreamIdInfoFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkAudioStreamIdInfoFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkAudioStreamIdInfoFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    if (!(message.streams && message.streams.length))\n                        message.streams = [];\n                    message.streams.push($root.SdkAudioStreamIdInfo.decode(reader, reader.uint32()));\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkAudioStreamIdInfoFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkAudioStreamIdInfoFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkAudioStreamIdInfoFrame} SdkAudioStreamIdInfoFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkAudioStreamIdInfoFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkAudioStreamIdInfoFrame message.\n     * @function verify\n     * @memberof SdkAudioStreamIdInfoFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkAudioStreamIdInfoFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.streams != null && message.hasOwnProperty(\"streams\")) {\n            if (!Array.isArray(message.streams))\n                return \"streams: array expected\";\n            for (var i = 0; i < message.streams.length; ++i) {\n                var error = $root.SdkAudioStreamIdInfo.verify(message.streams[i]);\n                if (error)\n                    return \"streams.\" + error;\n            }\n        }\n        return null;\n    };\n\n    /**\n     * Creates a SdkAudioStreamIdInfoFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkAudioStreamIdInfoFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkAudioStreamIdInfoFrame} SdkAudioStreamIdInfoFrame\n     */\n    SdkAudioStreamIdInfoFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkAudioStreamIdInfoFrame)\n            return object;\n        var message = new $root.SdkAudioStreamIdInfoFrame();\n        if (object.streams) {\n            if (!Array.isArray(object.streams))\n                throw TypeError(\".SdkAudioStreamIdInfoFrame.streams: array expected\");\n            message.streams = [];\n            for (var i = 0; i < object.streams.length; ++i) {\n                if (typeof object.streams[i] !== \"object\")\n                    throw TypeError(\".SdkAudioStreamIdInfoFrame.streams: object expected\");\n                message.streams[i] = $root.SdkAudioStreamIdInfo.fromObject(object.streams[i]);\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkAudioStreamIdInfoFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkAudioStreamIdInfoFrame\n     * @static\n     * @param {SdkAudioStreamIdInfoFrame} message SdkAudioStreamIdInfoFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkAudioStreamIdInfoFrame.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.arrays || options.defaults)\n            object.streams = [];\n        if (message.streams && message.streams.length) {\n            object.streams = [];\n            for (var j = 0; j < message.streams.length; ++j)\n                object.streams[j] = $root.SdkAudioStreamIdInfo.toObject(message.streams[j], options);\n        }\n        return object;\n    };\n\n    /**\n     * Converts this SdkAudioStreamIdInfoFrame to JSON.\n     * @function toJSON\n     * @memberof SdkAudioStreamIdInfoFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkAudioStreamIdInfoFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkAudioStreamIdInfoFrame\n     * @function getTypeUrl\n     * @memberof SdkAudioStreamIdInfoFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkAudioStreamIdInfoFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkAudioStreamIdInfoFrame\";\n    };\n\n    return SdkAudioStreamIdInfoFrame;\n})();\n\n$root.SdkAudioStreamIdInfo = (function() {\n\n    /**\n     * Properties of a SdkAudioStreamIdInfo.\n     * @name ISdkAudioStreamIdInfo\n     * @interface ISdkAudioStreamIdInfo\n     * @property {number|null} [audioStreamId] SdkAudioStreamIdInfo audioStreamId\n     * @property {string|null} [attendeeId] SdkAudioStreamIdInfo attendeeId\n     * @property {boolean|null} [muted] SdkAudioStreamIdInfo muted\n     * @property {string|null} [externalUserId] SdkAudioStreamIdInfo externalUserId\n     * @property {boolean|null} [dropped] SdkAudioStreamIdInfo dropped\n     */\n\n    /**\n     * Constructs a new SdkAudioStreamIdInfo.\n     * @name SdkAudioStreamIdInfo\n     * @classdesc Represents a SdkAudioStreamIdInfo.\n     * @implements ISdkAudioStreamIdInfo\n     * @constructor\n     * @param {ISdkAudioStreamIdInfo=} [properties] Properties to set\n     */\n    function SdkAudioStreamIdInfo(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkAudioStreamIdInfo audioStreamId.\n     * @member {number} audioStreamId\n     * @memberof SdkAudioStreamIdInfo\n     * @instance\n     */\n    SdkAudioStreamIdInfo.prototype.audioStreamId = 0;\n\n    /**\n     * SdkAudioStreamIdInfo attendeeId.\n     * @member {string} attendeeId\n     * @memberof SdkAudioStreamIdInfo\n     * @instance\n     */\n    SdkAudioStreamIdInfo.prototype.attendeeId = \"\";\n\n    /**\n     * SdkAudioStreamIdInfo muted.\n     * @member {boolean} muted\n     * @memberof SdkAudioStreamIdInfo\n     * @instance\n     */\n    SdkAudioStreamIdInfo.prototype.muted = false;\n\n    /**\n     * SdkAudioStreamIdInfo externalUserId.\n     * @member {string} externalUserId\n     * @memberof SdkAudioStreamIdInfo\n     * @instance\n     */\n    SdkAudioStreamIdInfo.prototype.externalUserId = \"\";\n\n    /**\n     * SdkAudioStreamIdInfo dropped.\n     * @member {boolean} dropped\n     * @memberof SdkAudioStreamIdInfo\n     * @instance\n     */\n    SdkAudioStreamIdInfo.prototype.dropped = false;\n\n    /**\n     * Creates a new SdkAudioStreamIdInfo instance using the specified properties.\n     * @function create\n     * @memberof SdkAudioStreamIdInfo\n     * @static\n     * @param {ISdkAudioStreamIdInfo=} [properties] Properties to set\n     * @returns {SdkAudioStreamIdInfo} SdkAudioStreamIdInfo instance\n     */\n    SdkAudioStreamIdInfo.create = function create(properties) {\n        return new SdkAudioStreamIdInfo(properties);\n    };\n\n    /**\n     * Encodes the specified SdkAudioStreamIdInfo message. Does not implicitly {@link SdkAudioStreamIdInfo.verify|verify} messages.\n     * @function encode\n     * @memberof SdkAudioStreamIdInfo\n     * @static\n     * @param {ISdkAudioStreamIdInfo} message SdkAudioStreamIdInfo message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkAudioStreamIdInfo.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.audioStreamId != null && Object.hasOwnProperty.call(message, \"audioStreamId\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.audioStreamId);\n        if (message.attendeeId != null && Object.hasOwnProperty.call(message, \"attendeeId\"))\n            writer.uint32(/* id 2, wireType 2 =*/18).string(message.attendeeId);\n        if (message.muted != null && Object.hasOwnProperty.call(message, \"muted\"))\n            writer.uint32(/* id 3, wireType 0 =*/24).bool(message.muted);\n        if (message.externalUserId != null && Object.hasOwnProperty.call(message, \"externalUserId\"))\n            writer.uint32(/* id 4, wireType 2 =*/34).string(message.externalUserId);\n        if (message.dropped != null && Object.hasOwnProperty.call(message, \"dropped\"))\n            writer.uint32(/* id 5, wireType 0 =*/40).bool(message.dropped);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkAudioStreamIdInfo message, length delimited. Does not implicitly {@link SdkAudioStreamIdInfo.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkAudioStreamIdInfo\n     * @static\n     * @param {ISdkAudioStreamIdInfo} message SdkAudioStreamIdInfo message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkAudioStreamIdInfo.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkAudioStreamIdInfo message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkAudioStreamIdInfo\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkAudioStreamIdInfo} SdkAudioStreamIdInfo\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkAudioStreamIdInfo.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkAudioStreamIdInfo();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.audioStreamId = reader.uint32();\n                    break;\n                }\n            case 2: {\n                    message.attendeeId = reader.string();\n                    break;\n                }\n            case 3: {\n                    message.muted = reader.bool();\n                    break;\n                }\n            case 4: {\n                    message.externalUserId = reader.string();\n                    break;\n                }\n            case 5: {\n                    message.dropped = reader.bool();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkAudioStreamIdInfo message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkAudioStreamIdInfo\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkAudioStreamIdInfo} SdkAudioStreamIdInfo\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkAudioStreamIdInfo.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkAudioStreamIdInfo message.\n     * @function verify\n     * @memberof SdkAudioStreamIdInfo\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkAudioStreamIdInfo.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.audioStreamId != null && message.hasOwnProperty(\"audioStreamId\"))\n            if (!$util.isInteger(message.audioStreamId))\n                return \"audioStreamId: integer expected\";\n        if (message.attendeeId != null && message.hasOwnProperty(\"attendeeId\"))\n            if (!$util.isString(message.attendeeId))\n                return \"attendeeId: string expected\";\n        if (message.muted != null && message.hasOwnProperty(\"muted\"))\n            if (typeof message.muted !== \"boolean\")\n                return \"muted: boolean expected\";\n        if (message.externalUserId != null && message.hasOwnProperty(\"externalUserId\"))\n            if (!$util.isString(message.externalUserId))\n                return \"externalUserId: string expected\";\n        if (message.dropped != null && message.hasOwnProperty(\"dropped\"))\n            if (typeof message.dropped !== \"boolean\")\n                return \"dropped: boolean expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkAudioStreamIdInfo message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkAudioStreamIdInfo\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkAudioStreamIdInfo} SdkAudioStreamIdInfo\n     */\n    SdkAudioStreamIdInfo.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkAudioStreamIdInfo)\n            return object;\n        var message = new $root.SdkAudioStreamIdInfo();\n        if (object.audioStreamId != null)\n            message.audioStreamId = object.audioStreamId >>> 0;\n        if (object.attendeeId != null)\n            message.attendeeId = String(object.attendeeId);\n        if (object.muted != null)\n            message.muted = Boolean(object.muted);\n        if (object.externalUserId != null)\n            message.externalUserId = String(object.externalUserId);\n        if (object.dropped != null)\n            message.dropped = Boolean(object.dropped);\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkAudioStreamIdInfo message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkAudioStreamIdInfo\n     * @static\n     * @param {SdkAudioStreamIdInfo} message SdkAudioStreamIdInfo\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkAudioStreamIdInfo.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            object.audioStreamId = 0;\n            object.attendeeId = \"\";\n            object.muted = false;\n            object.externalUserId = \"\";\n            object.dropped = false;\n        }\n        if (message.audioStreamId != null && message.hasOwnProperty(\"audioStreamId\"))\n            object.audioStreamId = message.audioStreamId;\n        if (message.attendeeId != null && message.hasOwnProperty(\"attendeeId\"))\n            object.attendeeId = message.attendeeId;\n        if (message.muted != null && message.hasOwnProperty(\"muted\"))\n            object.muted = message.muted;\n        if (message.externalUserId != null && message.hasOwnProperty(\"externalUserId\"))\n            object.externalUserId = message.externalUserId;\n        if (message.dropped != null && message.hasOwnProperty(\"dropped\"))\n            object.dropped = message.dropped;\n        return object;\n    };\n\n    /**\n     * Converts this SdkAudioStreamIdInfo to JSON.\n     * @function toJSON\n     * @memberof SdkAudioStreamIdInfo\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkAudioStreamIdInfo.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkAudioStreamIdInfo\n     * @function getTypeUrl\n     * @memberof SdkAudioStreamIdInfo\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkAudioStreamIdInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkAudioStreamIdInfo\";\n    };\n\n    return SdkAudioStreamIdInfo;\n})();\n\n/**\n * SdkPingPongType enum.\n * @name SdkPingPongType\n * @enum {number}\n * @property {number} PING=1 PING value\n * @property {number} PONG=2 PONG value\n */\n$root.SdkPingPongType = (function() {\n    var valuesById = {}, values = Object.create(valuesById);\n    values[valuesById[1] = \"PING\"] = 1;\n    values[valuesById[2] = \"PONG\"] = 2;\n    return values;\n})();\n\n$root.SdkPingPongFrame = (function() {\n\n    /**\n     * Properties of a SdkPingPongFrame.\n     * @name ISdkPingPongFrame\n     * @interface ISdkPingPongFrame\n     * @property {SdkPingPongType} type SdkPingPongFrame type\n     * @property {number} pingId SdkPingPongFrame pingId\n     */\n\n    /**\n     * Constructs a new SdkPingPongFrame.\n     * @name SdkPingPongFrame\n     * @classdesc Represents a SdkPingPongFrame.\n     * @implements ISdkPingPongFrame\n     * @constructor\n     * @param {ISdkPingPongFrame=} [properties] Properties to set\n     */\n    function SdkPingPongFrame(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkPingPongFrame type.\n     * @member {SdkPingPongType} type\n     * @memberof SdkPingPongFrame\n     * @instance\n     */\n    SdkPingPongFrame.prototype.type = 1;\n\n    /**\n     * SdkPingPongFrame pingId.\n     * @member {number} pingId\n     * @memberof SdkPingPongFrame\n     * @instance\n     */\n    SdkPingPongFrame.prototype.pingId = 0;\n\n    /**\n     * Creates a new SdkPingPongFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkPingPongFrame\n     * @static\n     * @param {ISdkPingPongFrame=} [properties] Properties to set\n     * @returns {SdkPingPongFrame} SdkPingPongFrame instance\n     */\n    SdkPingPongFrame.create = function create(properties) {\n        return new SdkPingPongFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkPingPongFrame message. Does not implicitly {@link SdkPingPongFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkPingPongFrame\n     * @static\n     * @param {ISdkPingPongFrame} message SdkPingPongFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkPingPongFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.type);\n        writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.pingId);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkPingPongFrame message, length delimited. Does not implicitly {@link SdkPingPongFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkPingPongFrame\n     * @static\n     * @param {ISdkPingPongFrame} message SdkPingPongFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkPingPongFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkPingPongFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkPingPongFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkPingPongFrame} SdkPingPongFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkPingPongFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkPingPongFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.type = reader.int32();\n                    break;\n                }\n            case 2: {\n                    message.pingId = reader.uint32();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        if (!message.hasOwnProperty(\"type\"))\n            throw $util.ProtocolError(\"missing required 'type'\", { instance: message });\n        if (!message.hasOwnProperty(\"pingId\"))\n            throw $util.ProtocolError(\"missing required 'pingId'\", { instance: message });\n        return message;\n    };\n\n    /**\n     * Decodes a SdkPingPongFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkPingPongFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkPingPongFrame} SdkPingPongFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkPingPongFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkPingPongFrame message.\n     * @function verify\n     * @memberof SdkPingPongFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkPingPongFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        switch (message.type) {\n        default:\n            return \"type: enum value expected\";\n        case 1:\n        case 2:\n            break;\n        }\n        if (!$util.isInteger(message.pingId))\n            return \"pingId: integer expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkPingPongFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkPingPongFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkPingPongFrame} SdkPingPongFrame\n     */\n    SdkPingPongFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkPingPongFrame)\n            return object;\n        var message = new $root.SdkPingPongFrame();\n        switch (object.type) {\n        default:\n            if (typeof object.type === \"number\") {\n                message.type = object.type;\n                break;\n            }\n            break;\n        case \"PING\":\n        case 1:\n            message.type = 1;\n            break;\n        case \"PONG\":\n        case 2:\n            message.type = 2;\n            break;\n        }\n        if (object.pingId != null)\n            message.pingId = object.pingId >>> 0;\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkPingPongFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkPingPongFrame\n     * @static\n     * @param {SdkPingPongFrame} message SdkPingPongFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkPingPongFrame.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            object.type = options.enums === String ? \"PING\" : 1;\n            object.pingId = 0;\n        }\n        if (message.type != null && message.hasOwnProperty(\"type\"))\n            object.type = options.enums === String ? $root.SdkPingPongType[message.type] === undefined ? message.type : $root.SdkPingPongType[message.type] : message.type;\n        if (message.pingId != null && message.hasOwnProperty(\"pingId\"))\n            object.pingId = message.pingId;\n        return object;\n    };\n\n    /**\n     * Converts this SdkPingPongFrame to JSON.\n     * @function toJSON\n     * @memberof SdkPingPongFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkPingPongFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkPingPongFrame\n     * @function getTypeUrl\n     * @memberof SdkPingPongFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkPingPongFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkPingPongFrame\";\n    };\n\n    return SdkPingPongFrame;\n})();\n\n$root.SdkAudioStatusFrame = (function() {\n\n    /**\n     * Properties of a SdkAudioStatusFrame.\n     * @name ISdkAudioStatusFrame\n     * @interface ISdkAudioStatusFrame\n     * @property {number|null} [audioStatus] SdkAudioStatusFrame audioStatus\n     */\n\n    /**\n     * Constructs a new SdkAudioStatusFrame.\n     * @name SdkAudioStatusFrame\n     * @classdesc Represents a SdkAudioStatusFrame.\n     * @implements ISdkAudioStatusFrame\n     * @constructor\n     * @param {ISdkAudioStatusFrame=} [properties] Properties to set\n     */\n    function SdkAudioStatusFrame(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkAudioStatusFrame audioStatus.\n     * @member {number} audioStatus\n     * @memberof SdkAudioStatusFrame\n     * @instance\n     */\n    SdkAudioStatusFrame.prototype.audioStatus = 0;\n\n    /**\n     * Creates a new SdkAudioStatusFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkAudioStatusFrame\n     * @static\n     * @param {ISdkAudioStatusFrame=} [properties] Properties to set\n     * @returns {SdkAudioStatusFrame} SdkAudioStatusFrame instance\n     */\n    SdkAudioStatusFrame.create = function create(properties) {\n        return new SdkAudioStatusFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkAudioStatusFrame message. Does not implicitly {@link SdkAudioStatusFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkAudioStatusFrame\n     * @static\n     * @param {ISdkAudioStatusFrame} message SdkAudioStatusFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkAudioStatusFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.audioStatus != null && Object.hasOwnProperty.call(message, \"audioStatus\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.audioStatus);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkAudioStatusFrame message, length delimited. Does not implicitly {@link SdkAudioStatusFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkAudioStatusFrame\n     * @static\n     * @param {ISdkAudioStatusFrame} message SdkAudioStatusFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkAudioStatusFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkAudioStatusFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkAudioStatusFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkAudioStatusFrame} SdkAudioStatusFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkAudioStatusFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkAudioStatusFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.audioStatus = reader.uint32();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkAudioStatusFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkAudioStatusFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkAudioStatusFrame} SdkAudioStatusFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkAudioStatusFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkAudioStatusFrame message.\n     * @function verify\n     * @memberof SdkAudioStatusFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkAudioStatusFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.audioStatus != null && message.hasOwnProperty(\"audioStatus\"))\n            if (!$util.isInteger(message.audioStatus))\n                return \"audioStatus: integer expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkAudioStatusFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkAudioStatusFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkAudioStatusFrame} SdkAudioStatusFrame\n     */\n    SdkAudioStatusFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkAudioStatusFrame)\n            return object;\n        var message = new $root.SdkAudioStatusFrame();\n        if (object.audioStatus != null)\n            message.audioStatus = object.audioStatus >>> 0;\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkAudioStatusFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkAudioStatusFrame\n     * @static\n     * @param {SdkAudioStatusFrame} message SdkAudioStatusFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkAudioStatusFrame.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults)\n            object.audioStatus = 0;\n        if (message.audioStatus != null && message.hasOwnProperty(\"audioStatus\"))\n            object.audioStatus = message.audioStatus;\n        return object;\n    };\n\n    /**\n     * Converts this SdkAudioStatusFrame to JSON.\n     * @function toJSON\n     * @memberof SdkAudioStatusFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkAudioStatusFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkAudioStatusFrame\n     * @function getTypeUrl\n     * @memberof SdkAudioStatusFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkAudioStatusFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkAudioStatusFrame\";\n    };\n\n    return SdkAudioStatusFrame;\n})();\n\n$root.SdkMetric = (function() {\n\n    /**\n     * Properties of a SdkMetric.\n     * @name ISdkMetric\n     * @interface ISdkMetric\n     * @property {SdkMetric.Type|null} [type] SdkMetric type\n     * @property {number|null} [value] SdkMetric value\n     */\n\n    /**\n     * Constructs a new SdkMetric.\n     * @name SdkMetric\n     * @classdesc Represents a SdkMetric.\n     * @implements ISdkMetric\n     * @constructor\n     * @param {ISdkMetric=} [properties] Properties to set\n     */\n    function SdkMetric(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkMetric type.\n     * @member {SdkMetric.Type} type\n     * @memberof SdkMetric\n     * @instance\n     */\n    SdkMetric.prototype.type = 1;\n\n    /**\n     * SdkMetric value.\n     * @member {number} value\n     * @memberof SdkMetric\n     * @instance\n     */\n    SdkMetric.prototype.value = 0;\n\n    /**\n     * Creates a new SdkMetric instance using the specified properties.\n     * @function create\n     * @memberof SdkMetric\n     * @static\n     * @param {ISdkMetric=} [properties] Properties to set\n     * @returns {SdkMetric} SdkMetric instance\n     */\n    SdkMetric.create = function create(properties) {\n        return new SdkMetric(properties);\n    };\n\n    /**\n     * Encodes the specified SdkMetric message. Does not implicitly {@link SdkMetric.verify|verify} messages.\n     * @function encode\n     * @memberof SdkMetric\n     * @static\n     * @param {ISdkMetric} message SdkMetric message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkMetric.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.type != null && Object.hasOwnProperty.call(message, \"type\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).int32(message.type);\n        if (message.value != null && Object.hasOwnProperty.call(message, \"value\"))\n            writer.uint32(/* id 2, wireType 1 =*/17).double(message.value);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkMetric message, length delimited. Does not implicitly {@link SdkMetric.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkMetric\n     * @static\n     * @param {ISdkMetric} message SdkMetric message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkMetric.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkMetric message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkMetric\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkMetric} SdkMetric\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkMetric.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkMetric();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.type = reader.int32();\n                    break;\n                }\n            case 2: {\n                    message.value = reader.double();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkMetric message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkMetric\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkMetric} SdkMetric\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkMetric.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkMetric message.\n     * @function verify\n     * @memberof SdkMetric\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkMetric.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.type != null && message.hasOwnProperty(\"type\"))\n            switch (message.type) {\n            default:\n                return \"type: enum value expected\";\n            case 1:\n            case 2:\n            case 3:\n            case 4:\n            case 5:\n            case 6:\n            case 7:\n            case 8:\n            case 9:\n            case 10:\n            case 11:\n            case 12:\n            case 13:\n            case 14:\n            case 15:\n            case 16:\n            case 17:\n            case 18:\n            case 19:\n            case 20:\n            case 21:\n            case 22:\n            case 23:\n            case 24:\n            case 25:\n            case 26:\n            case 27:\n            case 28:\n            case 29:\n            case 30:\n            case 31:\n            case 32:\n            case 33:\n            case 34:\n            case 35:\n            case 36:\n            case 37:\n            case 38:\n            case 39:\n            case 40:\n            case 41:\n            case 42:\n            case 43:\n            case 44:\n            case 45:\n            case 46:\n            case 47:\n            case 48:\n            case 49:\n            case 60:\n            case 64:\n            case 66:\n            case 69:\n            case 72:\n            case 86:\n            case 87:\n            case 88:\n            case 89:\n            case 90:\n            case 91:\n            case 92:\n            case 93:\n            case 94:\n            case 95:\n            case 96:\n            case 97:\n            case 98:\n            case 99:\n            case 100:\n            case 101:\n            case 102:\n            case 103:\n            case 104:\n            case 105:\n            case 106:\n            case 107:\n            case 108:\n                break;\n            }\n        if (message.value != null && message.hasOwnProperty(\"value\"))\n            if (typeof message.value !== \"number\")\n                return \"value: number expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkMetric message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkMetric\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkMetric} SdkMetric\n     */\n    SdkMetric.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkMetric)\n            return object;\n        var message = new $root.SdkMetric();\n        switch (object.type) {\n        default:\n            if (typeof object.type === \"number\") {\n                message.type = object.type;\n                break;\n            }\n            break;\n        case \"VIDEO_ACTUAL_ENCODER_BITRATE\":\n        case 1:\n            message.type = 1;\n            break;\n        case \"VIDEO_AVAILABLE_SEND_BANDWIDTH\":\n        case 2:\n            message.type = 2;\n            break;\n        case \"VIDEO_RETRANSMIT_BITRATE\":\n        case 3:\n            message.type = 3;\n            break;\n        case \"VIDEO_AVAILABLE_RECEIVE_BANDWIDTH\":\n        case 4:\n            message.type = 4;\n            break;\n        case \"VIDEO_TARGET_ENCODER_BITRATE\":\n        case 5:\n            message.type = 5;\n            break;\n        case \"VIDEO_BUCKET_DELAY_MS\":\n        case 6:\n            message.type = 6;\n            break;\n        case \"STUN_RTT_MS\":\n        case 7:\n            message.type = 7;\n            break;\n        case \"SOCKET_DISCARDED_PPS\":\n        case 8:\n            message.type = 8;\n            break;\n        case \"RTC_MIC_JITTER_MS\":\n        case 9:\n            message.type = 9;\n            break;\n        case \"RTC_MIC_PPS\":\n        case 10:\n            message.type = 10;\n            break;\n        case \"RTC_MIC_FRACTION_PACKET_LOST_PERCENT\":\n        case 11:\n            message.type = 11;\n            break;\n        case \"RTC_MIC_BITRATE\":\n        case 12:\n            message.type = 12;\n            break;\n        case \"RTC_MIC_RTT_MS\":\n        case 13:\n            message.type = 13;\n            break;\n        case \"RTC_SPK_PPS\":\n        case 14:\n            message.type = 14;\n            break;\n        case \"RTC_SPK_FRACTION_PACKET_LOST_PERCENT\":\n        case 15:\n            message.type = 15;\n            break;\n        case \"RTC_SPK_JITTER_MS\":\n        case 16:\n            message.type = 16;\n            break;\n        case \"RTC_SPK_FRACTION_DECODER_LOSS_PERCENT\":\n        case 17:\n            message.type = 17;\n            break;\n        case \"RTC_SPK_BITRATE\":\n        case 18:\n            message.type = 18;\n            break;\n        case \"RTC_SPK_CURRENT_DELAY_MS\":\n        case 19:\n            message.type = 19;\n            break;\n        case \"RTC_SPK_JITTER_BUFFER_MS\":\n        case 20:\n            message.type = 20;\n            break;\n        case \"VIDEO_SENT_RTT_MS\":\n        case 21:\n            message.type = 21;\n            break;\n        case \"VIDEO_ENCODE_USAGE_PERCENT\":\n        case 22:\n            message.type = 22;\n            break;\n        case \"VIDEO_NACKS_RECEIVED\":\n        case 23:\n            message.type = 23;\n            break;\n        case \"VIDEO_PLIS_RECEIVED\":\n        case 24:\n            message.type = 24;\n            break;\n        case \"VIDEO_ENCODE_MS\":\n        case 25:\n            message.type = 25;\n            break;\n        case \"VIDEO_INPUT_FPS\":\n        case 26:\n            message.type = 26;\n            break;\n        case \"VIDEO_ENCODE_FPS\":\n        case 27:\n            message.type = 27;\n            break;\n        case \"VIDEO_SENT_FPS\":\n        case 28:\n            message.type = 28;\n            break;\n        case \"VIDEO_FIRS_RECEIVED\":\n        case 29:\n            message.type = 29;\n            break;\n        case \"VIDEO_SENT_PPS\":\n        case 30:\n            message.type = 30;\n            break;\n        case \"VIDEO_SENT_FRACTION_PACKET_LOST_PERCENT\":\n        case 31:\n            message.type = 31;\n            break;\n        case \"VIDEO_SENT_BITRATE\":\n        case 32:\n            message.type = 32;\n            break;\n        case \"VIDEO_DROPPED_FPS\":\n        case 33:\n            message.type = 33;\n            break;\n        case \"VIDEO_TARGET_DELAY_MS\":\n        case 34:\n            message.type = 34;\n            break;\n        case \"VIDEO_DECODE_MS\":\n        case 35:\n            message.type = 35;\n            break;\n        case \"VIDEO_OUTPUT_FPS\":\n        case 36:\n            message.type = 36;\n            break;\n        case \"VIDEO_RECEIVED_PPS\":\n        case 37:\n            message.type = 37;\n            break;\n        case \"VIDEO_RECEIVED_FRACTION_PACKET_LOST_PERCENT\":\n        case 38:\n            message.type = 38;\n            break;\n        case \"VIDEO_RENDER_DELAY_MS\":\n        case 39:\n            message.type = 39;\n            break;\n        case \"VIDEO_RECEIVED_FPS\":\n        case 40:\n            message.type = 40;\n            break;\n        case \"VIDEO_DECODE_FPS\":\n        case 41:\n            message.type = 41;\n            break;\n        case \"VIDEO_NACKS_SENT\":\n        case 42:\n            message.type = 42;\n            break;\n        case \"VIDEO_FIRS_SENT\":\n        case 43:\n            message.type = 43;\n            break;\n        case \"VIDEO_RECEIVED_BITRATE\":\n        case 44:\n            message.type = 44;\n            break;\n        case \"VIDEO_CURRENT_DELAY_MS\":\n        case 45:\n            message.type = 45;\n            break;\n        case \"VIDEO_JITTER_BUFFER_MS\":\n        case 46:\n            message.type = 46;\n            break;\n        case \"VIDEO_DISCARDED_PPS\":\n        case 47:\n            message.type = 47;\n            break;\n        case \"VIDEO_PLIS_SENT\":\n        case 48:\n            message.type = 48;\n            break;\n        case \"VIDEO_RECEIVED_JITTER_MS\":\n        case 49:\n            message.type = 49;\n            break;\n        case \"VIDEO_INPUT_HEIGHT\":\n        case 60:\n            message.type = 60;\n            break;\n        case \"VIDEO_ENCODE_HEIGHT\":\n        case 64:\n            message.type = 64;\n            break;\n        case \"VIDEO_SENT_QP_SUM\":\n        case 66:\n            message.type = 66;\n            break;\n        case \"VIDEO_DECODE_HEIGHT\":\n        case 69:\n            message.type = 69;\n            break;\n        case \"VIDEO_RECEIVED_QP_SUM\":\n        case 72:\n            message.type = 72;\n            break;\n        case \"VIDEO_ENCODE_WIDTH\":\n        case 86:\n            message.type = 86;\n            break;\n        case \"VIDEO_DECODE_WIDTH\":\n        case 87:\n            message.type = 87;\n            break;\n        case \"VIDEO_ENCODER_IS_HARDWARE\":\n        case 88:\n            message.type = 88;\n            break;\n        case \"VIDEO_DECODER_IS_HARDWARE\":\n        case 89:\n            message.type = 89;\n            break;\n        case \"VIDEO_FREEZE_COUNT\":\n        case 90:\n            message.type = 90;\n            break;\n        case \"VIDEO_FREEZE_DURATION\":\n        case 91:\n            message.type = 91;\n            break;\n        case \"VIDEO_PAUSE_COUNT\":\n        case 92:\n            message.type = 92;\n            break;\n        case \"VIDEO_PAUSE_DURATION\":\n        case 93:\n            message.type = 93;\n            break;\n        case \"VIDEO_QUALITY_REASON\":\n        case 94:\n            message.type = 94;\n            break;\n        case \"VIDEO_PROCESSING_TIME\":\n        case 95:\n            message.type = 95;\n            break;\n        case \"RTC_SPK_AUDIO_LEVEL\":\n        case 96:\n            message.type = 96;\n            break;\n        case \"RTC_MIC_AUDIO_LEVEL\":\n        case 97:\n            message.type = 97;\n            break;\n        case \"RTC_SPK_TOTAL_LOST\":\n        case 98:\n            message.type = 98;\n            break;\n        case \"RTC_SPK_TOTAL_EXPECTED\":\n        case 99:\n            message.type = 99;\n            break;\n        case \"RTC_SPK_TOTAL_RECOVERED_RED\":\n        case 100:\n            message.type = 100;\n            break;\n        case \"RTC_SPK_TOTAL_RECOVERED_FEC\":\n        case 101:\n            message.type = 101;\n            break;\n        case \"VIDEO_QUALITY_LIMITATION_DURATION_CPU\":\n        case 102:\n            message.type = 102;\n            break;\n        case \"VIDEO_CODEC_DEGRADATION_HIGH_ENCODE_CPU\":\n        case 103:\n            message.type = 103;\n            break;\n        case \"VIDEO_CODEC_DEGRADATION_ENCODE_FAILURE\":\n        case 104:\n            message.type = 104;\n            break;\n        case \"VIDEO_RENDER_HEIGHT\":\n        case 105:\n            message.type = 105;\n            break;\n        case \"VIDEO_RENDER_WIDTH\":\n        case 106:\n            message.type = 106;\n            break;\n        case \"VIDEO_INPUT_WIDTH\":\n        case 107:\n            message.type = 107;\n            break;\n        case \"VIDEO_SENT_JITTER_MS\":\n        case 108:\n            message.type = 108;\n            break;\n        }\n        if (object.value != null)\n            message.value = Number(object.value);\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkMetric message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkMetric\n     * @static\n     * @param {SdkMetric} message SdkMetric\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkMetric.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            object.type = options.enums === String ? \"VIDEO_ACTUAL_ENCODER_BITRATE\" : 1;\n            object.value = 0;\n        }\n        if (message.type != null && message.hasOwnProperty(\"type\"))\n            object.type = options.enums === String ? $root.SdkMetric.Type[message.type] === undefined ? message.type : $root.SdkMetric.Type[message.type] : message.type;\n        if (message.value != null && message.hasOwnProperty(\"value\"))\n            object.value = options.json && !isFinite(message.value) ? String(message.value) : message.value;\n        return object;\n    };\n\n    /**\n     * Converts this SdkMetric to JSON.\n     * @function toJSON\n     * @memberof SdkMetric\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkMetric.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkMetric\n     * @function getTypeUrl\n     * @memberof SdkMetric\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkMetric.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkMetric\";\n    };\n\n    /**\n     * Type enum.\n     * @name SdkMetric.Type\n     * @enum {number}\n     * @property {number} VIDEO_ACTUAL_ENCODER_BITRATE=1 VIDEO_ACTUAL_ENCODER_BITRATE value\n     * @property {number} VIDEO_AVAILABLE_SEND_BANDWIDTH=2 VIDEO_AVAILABLE_SEND_BANDWIDTH value\n     * @property {number} VIDEO_RETRANSMIT_BITRATE=3 VIDEO_RETRANSMIT_BITRATE value\n     * @property {number} VIDEO_AVAILABLE_RECEIVE_BANDWIDTH=4 VIDEO_AVAILABLE_RECEIVE_BANDWIDTH value\n     * @property {number} VIDEO_TARGET_ENCODER_BITRATE=5 VIDEO_TARGET_ENCODER_BITRATE value\n     * @property {number} VIDEO_BUCKET_DELAY_MS=6 VIDEO_BUCKET_DELAY_MS value\n     * @property {number} STUN_RTT_MS=7 STUN_RTT_MS value\n     * @property {number} SOCKET_DISCARDED_PPS=8 SOCKET_DISCARDED_PPS value\n     * @property {number} RTC_MIC_JITTER_MS=9 RTC_MIC_JITTER_MS value\n     * @property {number} RTC_MIC_PPS=10 RTC_MIC_PPS value\n     * @property {number} RTC_MIC_FRACTION_PACKET_LOST_PERCENT=11 RTC_MIC_FRACTION_PACKET_LOST_PERCENT value\n     * @property {number} RTC_MIC_BITRATE=12 RTC_MIC_BITRATE value\n     * @property {number} RTC_MIC_RTT_MS=13 RTC_MIC_RTT_MS value\n     * @property {number} RTC_SPK_PPS=14 RTC_SPK_PPS value\n     * @property {number} RTC_SPK_FRACTION_PACKET_LOST_PERCENT=15 RTC_SPK_FRACTION_PACKET_LOST_PERCENT value\n     * @property {number} RTC_SPK_JITTER_MS=16 RTC_SPK_JITTER_MS value\n     * @property {number} RTC_SPK_FRACTION_DECODER_LOSS_PERCENT=17 RTC_SPK_FRACTION_DECODER_LOSS_PERCENT value\n     * @property {number} RTC_SPK_BITRATE=18 RTC_SPK_BITRATE value\n     * @property {number} RTC_SPK_CURRENT_DELAY_MS=19 RTC_SPK_CURRENT_DELAY_MS value\n     * @property {number} RTC_SPK_JITTER_BUFFER_MS=20 RTC_SPK_JITTER_BUFFER_MS value\n     * @property {number} VIDEO_SENT_RTT_MS=21 VIDEO_SENT_RTT_MS value\n     * @property {number} VIDEO_ENCODE_USAGE_PERCENT=22 VIDEO_ENCODE_USAGE_PERCENT value\n     * @property {number} VIDEO_NACKS_RECEIVED=23 VIDEO_NACKS_RECEIVED value\n     * @property {number} VIDEO_PLIS_RECEIVED=24 VIDEO_PLIS_RECEIVED value\n     * @property {number} VIDEO_ENCODE_MS=25 VIDEO_ENCODE_MS value\n     * @property {number} VIDEO_INPUT_FPS=26 VIDEO_INPUT_FPS value\n     * @property {number} VIDEO_ENCODE_FPS=27 VIDEO_ENCODE_FPS value\n     * @property {number} VIDEO_SENT_FPS=28 VIDEO_SENT_FPS value\n     * @property {number} VIDEO_FIRS_RECEIVED=29 VIDEO_FIRS_RECEIVED value\n     * @property {number} VIDEO_SENT_PPS=30 VIDEO_SENT_PPS value\n     * @property {number} VIDEO_SENT_FRACTION_PACKET_LOST_PERCENT=31 VIDEO_SENT_FRACTION_PACKET_LOST_PERCENT value\n     * @property {number} VIDEO_SENT_BITRATE=32 VIDEO_SENT_BITRATE value\n     * @property {number} VIDEO_DROPPED_FPS=33 VIDEO_DROPPED_FPS value\n     * @property {number} VIDEO_TARGET_DELAY_MS=34 VIDEO_TARGET_DELAY_MS value\n     * @property {number} VIDEO_DECODE_MS=35 VIDEO_DECODE_MS value\n     * @property {number} VIDEO_OUTPUT_FPS=36 VIDEO_OUTPUT_FPS value\n     * @property {number} VIDEO_RECEIVED_PPS=37 VIDEO_RECEIVED_PPS value\n     * @property {number} VIDEO_RECEIVED_FRACTION_PACKET_LOST_PERCENT=38 VIDEO_RECEIVED_FRACTION_PACKET_LOST_PERCENT value\n     * @property {number} VIDEO_RENDER_DELAY_MS=39 VIDEO_RENDER_DELAY_MS value\n     * @property {number} VIDEO_RECEIVED_FPS=40 VIDEO_RECEIVED_FPS value\n     * @property {number} VIDEO_DECODE_FPS=41 VIDEO_DECODE_FPS value\n     * @property {number} VIDEO_NACKS_SENT=42 VIDEO_NACKS_SENT value\n     * @property {number} VIDEO_FIRS_SENT=43 VIDEO_FIRS_SENT value\n     * @property {number} VIDEO_RECEIVED_BITRATE=44 VIDEO_RECEIVED_BITRATE value\n     * @property {number} VIDEO_CURRENT_DELAY_MS=45 VIDEO_CURRENT_DELAY_MS value\n     * @property {number} VIDEO_JITTER_BUFFER_MS=46 VIDEO_JITTER_BUFFER_MS value\n     * @property {number} VIDEO_DISCARDED_PPS=47 VIDEO_DISCARDED_PPS value\n     * @property {number} VIDEO_PLIS_SENT=48 VIDEO_PLIS_SENT value\n     * @property {number} VIDEO_RECEIVED_JITTER_MS=49 VIDEO_RECEIVED_JITTER_MS value\n     * @property {number} VIDEO_INPUT_HEIGHT=60 VIDEO_INPUT_HEIGHT value\n     * @property {number} VIDEO_ENCODE_HEIGHT=64 VIDEO_ENCODE_HEIGHT value\n     * @property {number} VIDEO_SENT_QP_SUM=66 VIDEO_SENT_QP_SUM value\n     * @property {number} VIDEO_DECODE_HEIGHT=69 VIDEO_DECODE_HEIGHT value\n     * @property {number} VIDEO_RECEIVED_QP_SUM=72 VIDEO_RECEIVED_QP_SUM value\n     * @property {number} VIDEO_ENCODE_WIDTH=86 VIDEO_ENCODE_WIDTH value\n     * @property {number} VIDEO_DECODE_WIDTH=87 VIDEO_DECODE_WIDTH value\n     * @property {number} VIDEO_ENCODER_IS_HARDWARE=88 VIDEO_ENCODER_IS_HARDWARE value\n     * @property {number} VIDEO_DECODER_IS_HARDWARE=89 VIDEO_DECODER_IS_HARDWARE value\n     * @property {number} VIDEO_FREEZE_COUNT=90 VIDEO_FREEZE_COUNT value\n     * @property {number} VIDEO_FREEZE_DURATION=91 VIDEO_FREEZE_DURATION value\n     * @property {number} VIDEO_PAUSE_COUNT=92 VIDEO_PAUSE_COUNT value\n     * @property {number} VIDEO_PAUSE_DURATION=93 VIDEO_PAUSE_DURATION value\n     * @property {number} VIDEO_QUALITY_REASON=94 VIDEO_QUALITY_REASON value\n     * @property {number} VIDEO_PROCESSING_TIME=95 VIDEO_PROCESSING_TIME value\n     * @property {number} RTC_SPK_AUDIO_LEVEL=96 RTC_SPK_AUDIO_LEVEL value\n     * @property {number} RTC_MIC_AUDIO_LEVEL=97 RTC_MIC_AUDIO_LEVEL value\n     * @property {number} RTC_SPK_TOTAL_LOST=98 RTC_SPK_TOTAL_LOST value\n     * @property {number} RTC_SPK_TOTAL_EXPECTED=99 RTC_SPK_TOTAL_EXPECTED value\n     * @property {number} RTC_SPK_TOTAL_RECOVERED_RED=100 RTC_SPK_TOTAL_RECOVERED_RED value\n     * @property {number} RTC_SPK_TOTAL_RECOVERED_FEC=101 RTC_SPK_TOTAL_RECOVERED_FEC value\n     * @property {number} VIDEO_QUALITY_LIMITATION_DURATION_CPU=102 VIDEO_QUALITY_LIMITATION_DURATION_CPU value\n     * @property {number} VIDEO_CODEC_DEGRADATION_HIGH_ENCODE_CPU=103 VIDEO_CODEC_DEGRADATION_HIGH_ENCODE_CPU value\n     * @property {number} VIDEO_CODEC_DEGRADATION_ENCODE_FAILURE=104 VIDEO_CODEC_DEGRADATION_ENCODE_FAILURE value\n     * @property {number} VIDEO_RENDER_HEIGHT=105 VIDEO_RENDER_HEIGHT value\n     * @property {number} VIDEO_RENDER_WIDTH=106 VIDEO_RENDER_WIDTH value\n     * @property {number} VIDEO_INPUT_WIDTH=107 VIDEO_INPUT_WIDTH value\n     * @property {number} VIDEO_SENT_JITTER_MS=108 VIDEO_SENT_JITTER_MS value\n     */\n    SdkMetric.Type = (function() {\n        var valuesById = {}, values = Object.create(valuesById);\n        values[valuesById[1] = \"VIDEO_ACTUAL_ENCODER_BITRATE\"] = 1;\n        values[valuesById[2] = \"VIDEO_AVAILABLE_SEND_BANDWIDTH\"] = 2;\n        values[valuesById[3] = \"VIDEO_RETRANSMIT_BITRATE\"] = 3;\n        values[valuesById[4] = \"VIDEO_AVAILABLE_RECEIVE_BANDWIDTH\"] = 4;\n        values[valuesById[5] = \"VIDEO_TARGET_ENCODER_BITRATE\"] = 5;\n        values[valuesById[6] = \"VIDEO_BUCKET_DELAY_MS\"] = 6;\n        values[valuesById[7] = \"STUN_RTT_MS\"] = 7;\n        values[valuesById[8] = \"SOCKET_DISCARDED_PPS\"] = 8;\n        values[valuesById[9] = \"RTC_MIC_JITTER_MS\"] = 9;\n        values[valuesById[10] = \"RTC_MIC_PPS\"] = 10;\n        values[valuesById[11] = \"RTC_MIC_FRACTION_PACKET_LOST_PERCENT\"] = 11;\n        values[valuesById[12] = \"RTC_MIC_BITRATE\"] = 12;\n        values[valuesById[13] = \"RTC_MIC_RTT_MS\"] = 13;\n        values[valuesById[14] = \"RTC_SPK_PPS\"] = 14;\n        values[valuesById[15] = \"RTC_SPK_FRACTION_PACKET_LOST_PERCENT\"] = 15;\n        values[valuesById[16] = \"RTC_SPK_JITTER_MS\"] = 16;\n        values[valuesById[17] = \"RTC_SPK_FRACTION_DECODER_LOSS_PERCENT\"] = 17;\n        values[valuesById[18] = \"RTC_SPK_BITRATE\"] = 18;\n        values[valuesById[19] = \"RTC_SPK_CURRENT_DELAY_MS\"] = 19;\n        values[valuesById[20] = \"RTC_SPK_JITTER_BUFFER_MS\"] = 20;\n        values[valuesById[21] = \"VIDEO_SENT_RTT_MS\"] = 21;\n        values[valuesById[22] = \"VIDEO_ENCODE_USAGE_PERCENT\"] = 22;\n        values[valuesById[23] = \"VIDEO_NACKS_RECEIVED\"] = 23;\n        values[valuesById[24] = \"VIDEO_PLIS_RECEIVED\"] = 24;\n        values[valuesById[25] = \"VIDEO_ENCODE_MS\"] = 25;\n        values[valuesById[26] = \"VIDEO_INPUT_FPS\"] = 26;\n        values[valuesById[27] = \"VIDEO_ENCODE_FPS\"] = 27;\n        values[valuesById[28] = \"VIDEO_SENT_FPS\"] = 28;\n        values[valuesById[29] = \"VIDEO_FIRS_RECEIVED\"] = 29;\n        values[valuesById[30] = \"VIDEO_SENT_PPS\"] = 30;\n        values[valuesById[31] = \"VIDEO_SENT_FRACTION_PACKET_LOST_PERCENT\"] = 31;\n        values[valuesById[32] = \"VIDEO_SENT_BITRATE\"] = 32;\n        values[valuesById[33] = \"VIDEO_DROPPED_FPS\"] = 33;\n        values[valuesById[34] = \"VIDEO_TARGET_DELAY_MS\"] = 34;\n        values[valuesById[35] = \"VIDEO_DECODE_MS\"] = 35;\n        values[valuesById[36] = \"VIDEO_OUTPUT_FPS\"] = 36;\n        values[valuesById[37] = \"VIDEO_RECEIVED_PPS\"] = 37;\n        values[valuesById[38] = \"VIDEO_RECEIVED_FRACTION_PACKET_LOST_PERCENT\"] = 38;\n        values[valuesById[39] = \"VIDEO_RENDER_DELAY_MS\"] = 39;\n        values[valuesById[40] = \"VIDEO_RECEIVED_FPS\"] = 40;\n        values[valuesById[41] = \"VIDEO_DECODE_FPS\"] = 41;\n        values[valuesById[42] = \"VIDEO_NACKS_SENT\"] = 42;\n        values[valuesById[43] = \"VIDEO_FIRS_SENT\"] = 43;\n        values[valuesById[44] = \"VIDEO_RECEIVED_BITRATE\"] = 44;\n        values[valuesById[45] = \"VIDEO_CURRENT_DELAY_MS\"] = 45;\n        values[valuesById[46] = \"VIDEO_JITTER_BUFFER_MS\"] = 46;\n        values[valuesById[47] = \"VIDEO_DISCARDED_PPS\"] = 47;\n        values[valuesById[48] = \"VIDEO_PLIS_SENT\"] = 48;\n        values[valuesById[49] = \"VIDEO_RECEIVED_JITTER_MS\"] = 49;\n        values[valuesById[60] = \"VIDEO_INPUT_HEIGHT\"] = 60;\n        values[valuesById[64] = \"VIDEO_ENCODE_HEIGHT\"] = 64;\n        values[valuesById[66] = \"VIDEO_SENT_QP_SUM\"] = 66;\n        values[valuesById[69] = \"VIDEO_DECODE_HEIGHT\"] = 69;\n        values[valuesById[72] = \"VIDEO_RECEIVED_QP_SUM\"] = 72;\n        values[valuesById[86] = \"VIDEO_ENCODE_WIDTH\"] = 86;\n        values[valuesById[87] = \"VIDEO_DECODE_WIDTH\"] = 87;\n        values[valuesById[88] = \"VIDEO_ENCODER_IS_HARDWARE\"] = 88;\n        values[valuesById[89] = \"VIDEO_DECODER_IS_HARDWARE\"] = 89;\n        values[valuesById[90] = \"VIDEO_FREEZE_COUNT\"] = 90;\n        values[valuesById[91] = \"VIDEO_FREEZE_DURATION\"] = 91;\n        values[valuesById[92] = \"VIDEO_PAUSE_COUNT\"] = 92;\n        values[valuesById[93] = \"VIDEO_PAUSE_DURATION\"] = 93;\n        values[valuesById[94] = \"VIDEO_QUALITY_REASON\"] = 94;\n        values[valuesById[95] = \"VIDEO_PROCESSING_TIME\"] = 95;\n        values[valuesById[96] = \"RTC_SPK_AUDIO_LEVEL\"] = 96;\n        values[valuesById[97] = \"RTC_MIC_AUDIO_LEVEL\"] = 97;\n        values[valuesById[98] = \"RTC_SPK_TOTAL_LOST\"] = 98;\n        values[valuesById[99] = \"RTC_SPK_TOTAL_EXPECTED\"] = 99;\n        values[valuesById[100] = \"RTC_SPK_TOTAL_RECOVERED_RED\"] = 100;\n        values[valuesById[101] = \"RTC_SPK_TOTAL_RECOVERED_FEC\"] = 101;\n        values[valuesById[102] = \"VIDEO_QUALITY_LIMITATION_DURATION_CPU\"] = 102;\n        values[valuesById[103] = \"VIDEO_CODEC_DEGRADATION_HIGH_ENCODE_CPU\"] = 103;\n        values[valuesById[104] = \"VIDEO_CODEC_DEGRADATION_ENCODE_FAILURE\"] = 104;\n        values[valuesById[105] = \"VIDEO_RENDER_HEIGHT\"] = 105;\n        values[valuesById[106] = \"VIDEO_RENDER_WIDTH\"] = 106;\n        values[valuesById[107] = \"VIDEO_INPUT_WIDTH\"] = 107;\n        values[valuesById[108] = \"VIDEO_SENT_JITTER_MS\"] = 108;\n        return values;\n    })();\n\n    return SdkMetric;\n})();\n\n$root.SdkStreamMetricFrame = (function() {\n\n    /**\n     * Properties of a SdkStreamMetricFrame.\n     * @name ISdkStreamMetricFrame\n     * @interface ISdkStreamMetricFrame\n     * @property {number|null} [streamId] SdkStreamMetricFrame streamId\n     * @property {number|null} [groupId] SdkStreamMetricFrame groupId\n     * @property {Array.<ISdkMetric>|null} [metrics] SdkStreamMetricFrame metrics\n     * @property {Array.<ISdkStreamDimension>|null} [dimensions] SdkStreamMetricFrame dimensions\n     * @property {SdkStreamMediaType|null} [mediaType] SdkStreamMetricFrame mediaType\n     */\n\n    /**\n     * Constructs a new SdkStreamMetricFrame.\n     * @name SdkStreamMetricFrame\n     * @classdesc Represents a SdkStreamMetricFrame.\n     * @implements ISdkStreamMetricFrame\n     * @constructor\n     * @param {ISdkStreamMetricFrame=} [properties] Properties to set\n     */\n    function SdkStreamMetricFrame(properties) {\n        this.metrics = [];\n        this.dimensions = [];\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkStreamMetricFrame streamId.\n     * @member {number} streamId\n     * @memberof SdkStreamMetricFrame\n     * @instance\n     */\n    SdkStreamMetricFrame.prototype.streamId = 0;\n\n    /**\n     * SdkStreamMetricFrame groupId.\n     * @member {number} groupId\n     * @memberof SdkStreamMetricFrame\n     * @instance\n     */\n    SdkStreamMetricFrame.prototype.groupId = 0;\n\n    /**\n     * SdkStreamMetricFrame metrics.\n     * @member {Array.<ISdkMetric>} metrics\n     * @memberof SdkStreamMetricFrame\n     * @instance\n     */\n    SdkStreamMetricFrame.prototype.metrics = $util.emptyArray;\n\n    /**\n     * SdkStreamMetricFrame dimensions.\n     * @member {Array.<ISdkStreamDimension>} dimensions\n     * @memberof SdkStreamMetricFrame\n     * @instance\n     */\n    SdkStreamMetricFrame.prototype.dimensions = $util.emptyArray;\n\n    /**\n     * SdkStreamMetricFrame mediaType.\n     * @member {SdkStreamMediaType} mediaType\n     * @memberof SdkStreamMetricFrame\n     * @instance\n     */\n    SdkStreamMetricFrame.prototype.mediaType = 1;\n\n    /**\n     * Creates a new SdkStreamMetricFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkStreamMetricFrame\n     * @static\n     * @param {ISdkStreamMetricFrame=} [properties] Properties to set\n     * @returns {SdkStreamMetricFrame} SdkStreamMetricFrame instance\n     */\n    SdkStreamMetricFrame.create = function create(properties) {\n        return new SdkStreamMetricFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkStreamMetricFrame message. Does not implicitly {@link SdkStreamMetricFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkStreamMetricFrame\n     * @static\n     * @param {ISdkStreamMetricFrame} message SdkStreamMetricFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkStreamMetricFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.streamId != null && Object.hasOwnProperty.call(message, \"streamId\"))\n            writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.streamId);\n        if (message.groupId != null && Object.hasOwnProperty.call(message, \"groupId\"))\n            writer.uint32(/* id 4, wireType 0 =*/32).uint32(message.groupId);\n        if (message.metrics != null && message.metrics.length)\n            for (var i = 0; i < message.metrics.length; ++i)\n                $root.SdkMetric.encode(message.metrics[i], writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();\n        if (message.dimensions != null && message.dimensions.length)\n            for (var i = 0; i < message.dimensions.length; ++i)\n                $root.SdkStreamDimension.encode(message.dimensions[i], writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();\n        if (message.mediaType != null && Object.hasOwnProperty.call(message, \"mediaType\"))\n            writer.uint32(/* id 7, wireType 0 =*/56).int32(message.mediaType);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkStreamMetricFrame message, length delimited. Does not implicitly {@link SdkStreamMetricFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkStreamMetricFrame\n     * @static\n     * @param {ISdkStreamMetricFrame} message SdkStreamMetricFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkStreamMetricFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkStreamMetricFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkStreamMetricFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkStreamMetricFrame} SdkStreamMetricFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkStreamMetricFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkStreamMetricFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 3: {\n                    message.streamId = reader.uint32();\n                    break;\n                }\n            case 4: {\n                    message.groupId = reader.uint32();\n                    break;\n                }\n            case 5: {\n                    if (!(message.metrics && message.metrics.length))\n                        message.metrics = [];\n                    message.metrics.push($root.SdkMetric.decode(reader, reader.uint32()));\n                    break;\n                }\n            case 6: {\n                    if (!(message.dimensions && message.dimensions.length))\n                        message.dimensions = [];\n                    message.dimensions.push($root.SdkStreamDimension.decode(reader, reader.uint32()));\n                    break;\n                }\n            case 7: {\n                    message.mediaType = reader.int32();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkStreamMetricFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkStreamMetricFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkStreamMetricFrame} SdkStreamMetricFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkStreamMetricFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkStreamMetricFrame message.\n     * @function verify\n     * @memberof SdkStreamMetricFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkStreamMetricFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n            if (!$util.isInteger(message.streamId))\n                return \"streamId: integer expected\";\n        if (message.groupId != null && message.hasOwnProperty(\"groupId\"))\n            if (!$util.isInteger(message.groupId))\n                return \"groupId: integer expected\";\n        if (message.metrics != null && message.hasOwnProperty(\"metrics\")) {\n            if (!Array.isArray(message.metrics))\n                return \"metrics: array expected\";\n            for (var i = 0; i < message.metrics.length; ++i) {\n                var error = $root.SdkMetric.verify(message.metrics[i]);\n                if (error)\n                    return \"metrics.\" + error;\n            }\n        }\n        if (message.dimensions != null && message.hasOwnProperty(\"dimensions\")) {\n            if (!Array.isArray(message.dimensions))\n                return \"dimensions: array expected\";\n            for (var i = 0; i < message.dimensions.length; ++i) {\n                var error = $root.SdkStreamDimension.verify(message.dimensions[i]);\n                if (error)\n                    return \"dimensions.\" + error;\n            }\n        }\n        if (message.mediaType != null && message.hasOwnProperty(\"mediaType\"))\n            switch (message.mediaType) {\n            default:\n                return \"mediaType: enum value expected\";\n            case 1:\n            case 2:\n                break;\n            }\n        return null;\n    };\n\n    /**\n     * Creates a SdkStreamMetricFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkStreamMetricFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkStreamMetricFrame} SdkStreamMetricFrame\n     */\n    SdkStreamMetricFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkStreamMetricFrame)\n            return object;\n        var message = new $root.SdkStreamMetricFrame();\n        if (object.streamId != null)\n            message.streamId = object.streamId >>> 0;\n        if (object.groupId != null)\n            message.groupId = object.groupId >>> 0;\n        if (object.metrics) {\n            if (!Array.isArray(object.metrics))\n                throw TypeError(\".SdkStreamMetricFrame.metrics: array expected\");\n            message.metrics = [];\n            for (var i = 0; i < object.metrics.length; ++i) {\n                if (typeof object.metrics[i] !== \"object\")\n                    throw TypeError(\".SdkStreamMetricFrame.metrics: object expected\");\n                message.metrics[i] = $root.SdkMetric.fromObject(object.metrics[i]);\n            }\n        }\n        if (object.dimensions) {\n            if (!Array.isArray(object.dimensions))\n                throw TypeError(\".SdkStreamMetricFrame.dimensions: array expected\");\n            message.dimensions = [];\n            for (var i = 0; i < object.dimensions.length; ++i) {\n                if (typeof object.dimensions[i] !== \"object\")\n                    throw TypeError(\".SdkStreamMetricFrame.dimensions: object expected\");\n                message.dimensions[i] = $root.SdkStreamDimension.fromObject(object.dimensions[i]);\n            }\n        }\n        switch (object.mediaType) {\n        default:\n            if (typeof object.mediaType === \"number\") {\n                message.mediaType = object.mediaType;\n                break;\n            }\n            break;\n        case \"AUDIO\":\n        case 1:\n            message.mediaType = 1;\n            break;\n        case \"VIDEO\":\n        case 2:\n            message.mediaType = 2;\n            break;\n        }\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkStreamMetricFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkStreamMetricFrame\n     * @static\n     * @param {SdkStreamMetricFrame} message SdkStreamMetricFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkStreamMetricFrame.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.arrays || options.defaults) {\n            object.metrics = [];\n            object.dimensions = [];\n        }\n        if (options.defaults) {\n            object.streamId = 0;\n            object.groupId = 0;\n            object.mediaType = options.enums === String ? \"AUDIO\" : 1;\n        }\n        if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n            object.streamId = message.streamId;\n        if (message.groupId != null && message.hasOwnProperty(\"groupId\"))\n            object.groupId = message.groupId;\n        if (message.metrics && message.metrics.length) {\n            object.metrics = [];\n            for (var j = 0; j < message.metrics.length; ++j)\n                object.metrics[j] = $root.SdkMetric.toObject(message.metrics[j], options);\n        }\n        if (message.dimensions && message.dimensions.length) {\n            object.dimensions = [];\n            for (var j = 0; j < message.dimensions.length; ++j)\n                object.dimensions[j] = $root.SdkStreamDimension.toObject(message.dimensions[j], options);\n        }\n        if (message.mediaType != null && message.hasOwnProperty(\"mediaType\"))\n            object.mediaType = options.enums === String ? $root.SdkStreamMediaType[message.mediaType] === undefined ? message.mediaType : $root.SdkStreamMediaType[message.mediaType] : message.mediaType;\n        return object;\n    };\n\n    /**\n     * Converts this SdkStreamMetricFrame to JSON.\n     * @function toJSON\n     * @memberof SdkStreamMetricFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkStreamMetricFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkStreamMetricFrame\n     * @function getTypeUrl\n     * @memberof SdkStreamMetricFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkStreamMetricFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkStreamMetricFrame\";\n    };\n\n    return SdkStreamMetricFrame;\n})();\n\n$root.SdkClientMetricFrame = (function() {\n\n    /**\n     * Properties of a SdkClientMetricFrame.\n     * @name ISdkClientMetricFrame\n     * @interface ISdkClientMetricFrame\n     * @property {Array.<ISdkMetric>|null} [globalMetrics] SdkClientMetricFrame globalMetrics\n     * @property {Array.<ISdkStreamMetricFrame>|null} [streamMetricFrames] SdkClientMetricFrame streamMetricFrames\n     */\n\n    /**\n     * Constructs a new SdkClientMetricFrame.\n     * @name SdkClientMetricFrame\n     * @classdesc Represents a SdkClientMetricFrame.\n     * @implements ISdkClientMetricFrame\n     * @constructor\n     * @param {ISdkClientMetricFrame=} [properties] Properties to set\n     */\n    function SdkClientMetricFrame(properties) {\n        this.globalMetrics = [];\n        this.streamMetricFrames = [];\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkClientMetricFrame globalMetrics.\n     * @member {Array.<ISdkMetric>} globalMetrics\n     * @memberof SdkClientMetricFrame\n     * @instance\n     */\n    SdkClientMetricFrame.prototype.globalMetrics = $util.emptyArray;\n\n    /**\n     * SdkClientMetricFrame streamMetricFrames.\n     * @member {Array.<ISdkStreamMetricFrame>} streamMetricFrames\n     * @memberof SdkClientMetricFrame\n     * @instance\n     */\n    SdkClientMetricFrame.prototype.streamMetricFrames = $util.emptyArray;\n\n    /**\n     * Creates a new SdkClientMetricFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkClientMetricFrame\n     * @static\n     * @param {ISdkClientMetricFrame=} [properties] Properties to set\n     * @returns {SdkClientMetricFrame} SdkClientMetricFrame instance\n     */\n    SdkClientMetricFrame.create = function create(properties) {\n        return new SdkClientMetricFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkClientMetricFrame message. Does not implicitly {@link SdkClientMetricFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkClientMetricFrame\n     * @static\n     * @param {ISdkClientMetricFrame} message SdkClientMetricFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkClientMetricFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.globalMetrics != null && message.globalMetrics.length)\n            for (var i = 0; i < message.globalMetrics.length; ++i)\n                $root.SdkMetric.encode(message.globalMetrics[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n        if (message.streamMetricFrames != null && message.streamMetricFrames.length)\n            for (var i = 0; i < message.streamMetricFrames.length; ++i)\n                $root.SdkStreamMetricFrame.encode(message.streamMetricFrames[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkClientMetricFrame message, length delimited. Does not implicitly {@link SdkClientMetricFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkClientMetricFrame\n     * @static\n     * @param {ISdkClientMetricFrame} message SdkClientMetricFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkClientMetricFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkClientMetricFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkClientMetricFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkClientMetricFrame} SdkClientMetricFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkClientMetricFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkClientMetricFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    if (!(message.globalMetrics && message.globalMetrics.length))\n                        message.globalMetrics = [];\n                    message.globalMetrics.push($root.SdkMetric.decode(reader, reader.uint32()));\n                    break;\n                }\n            case 2: {\n                    if (!(message.streamMetricFrames && message.streamMetricFrames.length))\n                        message.streamMetricFrames = [];\n                    message.streamMetricFrames.push($root.SdkStreamMetricFrame.decode(reader, reader.uint32()));\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkClientMetricFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkClientMetricFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkClientMetricFrame} SdkClientMetricFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkClientMetricFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkClientMetricFrame message.\n     * @function verify\n     * @memberof SdkClientMetricFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkClientMetricFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.globalMetrics != null && message.hasOwnProperty(\"globalMetrics\")) {\n            if (!Array.isArray(message.globalMetrics))\n                return \"globalMetrics: array expected\";\n            for (var i = 0; i < message.globalMetrics.length; ++i) {\n                var error = $root.SdkMetric.verify(message.globalMetrics[i]);\n                if (error)\n                    return \"globalMetrics.\" + error;\n            }\n        }\n        if (message.streamMetricFrames != null && message.hasOwnProperty(\"streamMetricFrames\")) {\n            if (!Array.isArray(message.streamMetricFrames))\n                return \"streamMetricFrames: array expected\";\n            for (var i = 0; i < message.streamMetricFrames.length; ++i) {\n                var error = $root.SdkStreamMetricFrame.verify(message.streamMetricFrames[i]);\n                if (error)\n                    return \"streamMetricFrames.\" + error;\n            }\n        }\n        return null;\n    };\n\n    /**\n     * Creates a SdkClientMetricFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkClientMetricFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkClientMetricFrame} SdkClientMetricFrame\n     */\n    SdkClientMetricFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkClientMetricFrame)\n            return object;\n        var message = new $root.SdkClientMetricFrame();\n        if (object.globalMetrics) {\n            if (!Array.isArray(object.globalMetrics))\n                throw TypeError(\".SdkClientMetricFrame.globalMetrics: array expected\");\n            message.globalMetrics = [];\n            for (var i = 0; i < object.globalMetrics.length; ++i) {\n                if (typeof object.globalMetrics[i] !== \"object\")\n                    throw TypeError(\".SdkClientMetricFrame.globalMetrics: object expected\");\n                message.globalMetrics[i] = $root.SdkMetric.fromObject(object.globalMetrics[i]);\n            }\n        }\n        if (object.streamMetricFrames) {\n            if (!Array.isArray(object.streamMetricFrames))\n                throw TypeError(\".SdkClientMetricFrame.streamMetricFrames: array expected\");\n            message.streamMetricFrames = [];\n            for (var i = 0; i < object.streamMetricFrames.length; ++i) {\n                if (typeof object.streamMetricFrames[i] !== \"object\")\n                    throw TypeError(\".SdkClientMetricFrame.streamMetricFrames: object expected\");\n                message.streamMetricFrames[i] = $root.SdkStreamMetricFrame.fromObject(object.streamMetricFrames[i]);\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkClientMetricFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkClientMetricFrame\n     * @static\n     * @param {SdkClientMetricFrame} message SdkClientMetricFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkClientMetricFrame.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.arrays || options.defaults) {\n            object.globalMetrics = [];\n            object.streamMetricFrames = [];\n        }\n        if (message.globalMetrics && message.globalMetrics.length) {\n            object.globalMetrics = [];\n            for (var j = 0; j < message.globalMetrics.length; ++j)\n                object.globalMetrics[j] = $root.SdkMetric.toObject(message.globalMetrics[j], options);\n        }\n        if (message.streamMetricFrames && message.streamMetricFrames.length) {\n            object.streamMetricFrames = [];\n            for (var j = 0; j < message.streamMetricFrames.length; ++j)\n                object.streamMetricFrames[j] = $root.SdkStreamMetricFrame.toObject(message.streamMetricFrames[j], options);\n        }\n        return object;\n    };\n\n    /**\n     * Converts this SdkClientMetricFrame to JSON.\n     * @function toJSON\n     * @memberof SdkClientMetricFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkClientMetricFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkClientMetricFrame\n     * @function getTypeUrl\n     * @memberof SdkClientMetricFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkClientMetricFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkClientMetricFrame\";\n    };\n\n    return SdkClientMetricFrame;\n})();\n\n$root.SdkStreamDimension = (function() {\n\n    /**\n     * Properties of a SdkStreamDimension.\n     * @name ISdkStreamDimension\n     * @interface ISdkStreamDimension\n     * @property {SdkStreamDimension.Type|null} [type] SdkStreamDimension type\n     * @property {ISdkDimensionValue|null} [value] SdkStreamDimension value\n     */\n\n    /**\n     * Constructs a new SdkStreamDimension.\n     * @name SdkStreamDimension\n     * @classdesc Represents a SdkStreamDimension.\n     * @implements ISdkStreamDimension\n     * @constructor\n     * @param {ISdkStreamDimension=} [properties] Properties to set\n     */\n    function SdkStreamDimension(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkStreamDimension type.\n     * @member {SdkStreamDimension.Type} type\n     * @memberof SdkStreamDimension\n     * @instance\n     */\n    SdkStreamDimension.prototype.type = 1;\n\n    /**\n     * SdkStreamDimension value.\n     * @member {ISdkDimensionValue|null|undefined} value\n     * @memberof SdkStreamDimension\n     * @instance\n     */\n    SdkStreamDimension.prototype.value = null;\n\n    /**\n     * Creates a new SdkStreamDimension instance using the specified properties.\n     * @function create\n     * @memberof SdkStreamDimension\n     * @static\n     * @param {ISdkStreamDimension=} [properties] Properties to set\n     * @returns {SdkStreamDimension} SdkStreamDimension instance\n     */\n    SdkStreamDimension.create = function create(properties) {\n        return new SdkStreamDimension(properties);\n    };\n\n    /**\n     * Encodes the specified SdkStreamDimension message. Does not implicitly {@link SdkStreamDimension.verify|verify} messages.\n     * @function encode\n     * @memberof SdkStreamDimension\n     * @static\n     * @param {ISdkStreamDimension} message SdkStreamDimension message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkStreamDimension.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.type != null && Object.hasOwnProperty.call(message, \"type\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).int32(message.type);\n        if (message.value != null && Object.hasOwnProperty.call(message, \"value\"))\n            $root.SdkDimensionValue.encode(message.value, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkStreamDimension message, length delimited. Does not implicitly {@link SdkStreamDimension.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkStreamDimension\n     * @static\n     * @param {ISdkStreamDimension} message SdkStreamDimension message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkStreamDimension.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkStreamDimension message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkStreamDimension\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkStreamDimension} SdkStreamDimension\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkStreamDimension.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkStreamDimension();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.type = reader.int32();\n                    break;\n                }\n            case 2: {\n                    message.value = $root.SdkDimensionValue.decode(reader, reader.uint32());\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkStreamDimension message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkStreamDimension\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkStreamDimension} SdkStreamDimension\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkStreamDimension.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkStreamDimension message.\n     * @function verify\n     * @memberof SdkStreamDimension\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkStreamDimension.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.type != null && message.hasOwnProperty(\"type\"))\n            switch (message.type) {\n            default:\n                return \"type: enum value expected\";\n            case 1:\n            case 2:\n                break;\n            }\n        if (message.value != null && message.hasOwnProperty(\"value\")) {\n            var error = $root.SdkDimensionValue.verify(message.value);\n            if (error)\n                return \"value.\" + error;\n        }\n        return null;\n    };\n\n    /**\n     * Creates a SdkStreamDimension message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkStreamDimension\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkStreamDimension} SdkStreamDimension\n     */\n    SdkStreamDimension.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkStreamDimension)\n            return object;\n        var message = new $root.SdkStreamDimension();\n        switch (object.type) {\n        default:\n            if (typeof object.type === \"number\") {\n                message.type = object.type;\n                break;\n            }\n            break;\n        case \"VIDEO_ENCODER_NAME\":\n        case 1:\n            message.type = 1;\n            break;\n        case \"VIDEO_DECODER_NAME\":\n        case 2:\n            message.type = 2;\n            break;\n        }\n        if (object.value != null) {\n            if (typeof object.value !== \"object\")\n                throw TypeError(\".SdkStreamDimension.value: object expected\");\n            message.value = $root.SdkDimensionValue.fromObject(object.value);\n        }\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkStreamDimension message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkStreamDimension\n     * @static\n     * @param {SdkStreamDimension} message SdkStreamDimension\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkStreamDimension.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            object.type = options.enums === String ? \"VIDEO_ENCODER_NAME\" : 1;\n            object.value = null;\n        }\n        if (message.type != null && message.hasOwnProperty(\"type\"))\n            object.type = options.enums === String ? $root.SdkStreamDimension.Type[message.type] === undefined ? message.type : $root.SdkStreamDimension.Type[message.type] : message.type;\n        if (message.value != null && message.hasOwnProperty(\"value\"))\n            object.value = $root.SdkDimensionValue.toObject(message.value, options);\n        return object;\n    };\n\n    /**\n     * Converts this SdkStreamDimension to JSON.\n     * @function toJSON\n     * @memberof SdkStreamDimension\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkStreamDimension.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkStreamDimension\n     * @function getTypeUrl\n     * @memberof SdkStreamDimension\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkStreamDimension.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkStreamDimension\";\n    };\n\n    /**\n     * Type enum.\n     * @name SdkStreamDimension.Type\n     * @enum {number}\n     * @property {number} VIDEO_ENCODER_NAME=1 VIDEO_ENCODER_NAME value\n     * @property {number} VIDEO_DECODER_NAME=2 VIDEO_DECODER_NAME value\n     */\n    SdkStreamDimension.Type = (function() {\n        var valuesById = {}, values = Object.create(valuesById);\n        values[valuesById[1] = \"VIDEO_ENCODER_NAME\"] = 1;\n        values[valuesById[2] = \"VIDEO_DECODER_NAME\"] = 2;\n        return values;\n    })();\n\n    return SdkStreamDimension;\n})();\n\n$root.SdkDimensionValue = (function() {\n\n    /**\n     * Properties of a SdkDimensionValue.\n     * @name ISdkDimensionValue\n     * @interface ISdkDimensionValue\n     * @property {string|null} [stringValue] SdkDimensionValue stringValue\n     * @property {boolean|null} [boolValue] SdkDimensionValue boolValue\n     * @property {number|Long|null} [uintValue] SdkDimensionValue uintValue\n     */\n\n    /**\n     * Constructs a new SdkDimensionValue.\n     * @name SdkDimensionValue\n     * @classdesc Represents a SdkDimensionValue.\n     * @implements ISdkDimensionValue\n     * @constructor\n     * @param {ISdkDimensionValue=} [properties] Properties to set\n     */\n    function SdkDimensionValue(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkDimensionValue stringValue.\n     * @member {string} stringValue\n     * @memberof SdkDimensionValue\n     * @instance\n     */\n    SdkDimensionValue.prototype.stringValue = \"\";\n\n    /**\n     * SdkDimensionValue boolValue.\n     * @member {boolean} boolValue\n     * @memberof SdkDimensionValue\n     * @instance\n     */\n    SdkDimensionValue.prototype.boolValue = false;\n\n    /**\n     * SdkDimensionValue uintValue.\n     * @member {number|Long} uintValue\n     * @memberof SdkDimensionValue\n     * @instance\n     */\n    SdkDimensionValue.prototype.uintValue = $util.Long ? $util.Long.fromBits(0,0,true) : 0;\n\n    /**\n     * Creates a new SdkDimensionValue instance using the specified properties.\n     * @function create\n     * @memberof SdkDimensionValue\n     * @static\n     * @param {ISdkDimensionValue=} [properties] Properties to set\n     * @returns {SdkDimensionValue} SdkDimensionValue instance\n     */\n    SdkDimensionValue.create = function create(properties) {\n        return new SdkDimensionValue(properties);\n    };\n\n    /**\n     * Encodes the specified SdkDimensionValue message. Does not implicitly {@link SdkDimensionValue.verify|verify} messages.\n     * @function encode\n     * @memberof SdkDimensionValue\n     * @static\n     * @param {ISdkDimensionValue} message SdkDimensionValue message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkDimensionValue.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.stringValue != null && Object.hasOwnProperty.call(message, \"stringValue\"))\n            writer.uint32(/* id 1, wireType 2 =*/10).string(message.stringValue);\n        if (message.boolValue != null && Object.hasOwnProperty.call(message, \"boolValue\"))\n            writer.uint32(/* id 2, wireType 0 =*/16).bool(message.boolValue);\n        if (message.uintValue != null && Object.hasOwnProperty.call(message, \"uintValue\"))\n            writer.uint32(/* id 3, wireType 0 =*/24).uint64(message.uintValue);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkDimensionValue message, length delimited. Does not implicitly {@link SdkDimensionValue.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkDimensionValue\n     * @static\n     * @param {ISdkDimensionValue} message SdkDimensionValue message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkDimensionValue.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkDimensionValue message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkDimensionValue\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkDimensionValue} SdkDimensionValue\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkDimensionValue.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkDimensionValue();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.stringValue = reader.string();\n                    break;\n                }\n            case 2: {\n                    message.boolValue = reader.bool();\n                    break;\n                }\n            case 3: {\n                    message.uintValue = reader.uint64();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkDimensionValue message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkDimensionValue\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkDimensionValue} SdkDimensionValue\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkDimensionValue.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkDimensionValue message.\n     * @function verify\n     * @memberof SdkDimensionValue\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkDimensionValue.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.stringValue != null && message.hasOwnProperty(\"stringValue\"))\n            if (!$util.isString(message.stringValue))\n                return \"stringValue: string expected\";\n        if (message.boolValue != null && message.hasOwnProperty(\"boolValue\"))\n            if (typeof message.boolValue !== \"boolean\")\n                return \"boolValue: boolean expected\";\n        if (message.uintValue != null && message.hasOwnProperty(\"uintValue\"))\n            if (!$util.isInteger(message.uintValue) && !(message.uintValue && $util.isInteger(message.uintValue.low) && $util.isInteger(message.uintValue.high)))\n                return \"uintValue: integer|Long expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkDimensionValue message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkDimensionValue\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkDimensionValue} SdkDimensionValue\n     */\n    SdkDimensionValue.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkDimensionValue)\n            return object;\n        var message = new $root.SdkDimensionValue();\n        if (object.stringValue != null)\n            message.stringValue = String(object.stringValue);\n        if (object.boolValue != null)\n            message.boolValue = Boolean(object.boolValue);\n        if (object.uintValue != null)\n            if ($util.Long)\n                (message.uintValue = $util.Long.fromValue(object.uintValue)).unsigned = true;\n            else if (typeof object.uintValue === \"string\")\n                message.uintValue = parseInt(object.uintValue, 10);\n            else if (typeof object.uintValue === \"number\")\n                message.uintValue = object.uintValue;\n            else if (typeof object.uintValue === \"object\")\n                message.uintValue = new $util.LongBits(object.uintValue.low >>> 0, object.uintValue.high >>> 0).toNumber(true);\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkDimensionValue message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkDimensionValue\n     * @static\n     * @param {SdkDimensionValue} message SdkDimensionValue\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkDimensionValue.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            object.stringValue = \"\";\n            object.boolValue = false;\n            if ($util.Long) {\n                var long = new $util.Long(0, 0, true);\n                object.uintValue = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n            } else\n                object.uintValue = options.longs === String ? \"0\" : 0;\n        }\n        if (message.stringValue != null && message.hasOwnProperty(\"stringValue\"))\n            object.stringValue = message.stringValue;\n        if (message.boolValue != null && message.hasOwnProperty(\"boolValue\"))\n            object.boolValue = message.boolValue;\n        if (message.uintValue != null && message.hasOwnProperty(\"uintValue\"))\n            if (typeof message.uintValue === \"number\")\n                object.uintValue = options.longs === String ? String(message.uintValue) : message.uintValue;\n            else\n                object.uintValue = options.longs === String ? $util.Long.prototype.toString.call(message.uintValue) : options.longs === Number ? new $util.LongBits(message.uintValue.low >>> 0, message.uintValue.high >>> 0).toNumber(true) : message.uintValue;\n        return object;\n    };\n\n    /**\n     * Converts this SdkDimensionValue to JSON.\n     * @function toJSON\n     * @memberof SdkDimensionValue\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkDimensionValue.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkDimensionValue\n     * @function getTypeUrl\n     * @memberof SdkDimensionValue\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkDimensionValue.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkDimensionValue\";\n    };\n\n    return SdkDimensionValue;\n})();\n\n$root.SdkDataMessageFrame = (function() {\n\n    /**\n     * Properties of a SdkDataMessageFrame.\n     * @name ISdkDataMessageFrame\n     * @interface ISdkDataMessageFrame\n     * @property {Array.<ISdkDataMessagePayload>|null} [messages] SdkDataMessageFrame messages\n     */\n\n    /**\n     * Constructs a new SdkDataMessageFrame.\n     * @name SdkDataMessageFrame\n     * @classdesc Represents a SdkDataMessageFrame.\n     * @implements ISdkDataMessageFrame\n     * @constructor\n     * @param {ISdkDataMessageFrame=} [properties] Properties to set\n     */\n    function SdkDataMessageFrame(properties) {\n        this.messages = [];\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkDataMessageFrame messages.\n     * @member {Array.<ISdkDataMessagePayload>} messages\n     * @memberof SdkDataMessageFrame\n     * @instance\n     */\n    SdkDataMessageFrame.prototype.messages = $util.emptyArray;\n\n    /**\n     * Creates a new SdkDataMessageFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkDataMessageFrame\n     * @static\n     * @param {ISdkDataMessageFrame=} [properties] Properties to set\n     * @returns {SdkDataMessageFrame} SdkDataMessageFrame instance\n     */\n    SdkDataMessageFrame.create = function create(properties) {\n        return new SdkDataMessageFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkDataMessageFrame message. Does not implicitly {@link SdkDataMessageFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkDataMessageFrame\n     * @static\n     * @param {ISdkDataMessageFrame} message SdkDataMessageFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkDataMessageFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.messages != null && message.messages.length)\n            for (var i = 0; i < message.messages.length; ++i)\n                $root.SdkDataMessagePayload.encode(message.messages[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkDataMessageFrame message, length delimited. Does not implicitly {@link SdkDataMessageFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkDataMessageFrame\n     * @static\n     * @param {ISdkDataMessageFrame} message SdkDataMessageFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkDataMessageFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkDataMessageFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkDataMessageFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkDataMessageFrame} SdkDataMessageFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkDataMessageFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkDataMessageFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    if (!(message.messages && message.messages.length))\n                        message.messages = [];\n                    message.messages.push($root.SdkDataMessagePayload.decode(reader, reader.uint32()));\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkDataMessageFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkDataMessageFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkDataMessageFrame} SdkDataMessageFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkDataMessageFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkDataMessageFrame message.\n     * @function verify\n     * @memberof SdkDataMessageFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkDataMessageFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.messages != null && message.hasOwnProperty(\"messages\")) {\n            if (!Array.isArray(message.messages))\n                return \"messages: array expected\";\n            for (var i = 0; i < message.messages.length; ++i) {\n                var error = $root.SdkDataMessagePayload.verify(message.messages[i]);\n                if (error)\n                    return \"messages.\" + error;\n            }\n        }\n        return null;\n    };\n\n    /**\n     * Creates a SdkDataMessageFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkDataMessageFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkDataMessageFrame} SdkDataMessageFrame\n     */\n    SdkDataMessageFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkDataMessageFrame)\n            return object;\n        var message = new $root.SdkDataMessageFrame();\n        if (object.messages) {\n            if (!Array.isArray(object.messages))\n                throw TypeError(\".SdkDataMessageFrame.messages: array expected\");\n            message.messages = [];\n            for (var i = 0; i < object.messages.length; ++i) {\n                if (typeof object.messages[i] !== \"object\")\n                    throw TypeError(\".SdkDataMessageFrame.messages: object expected\");\n                message.messages[i] = $root.SdkDataMessagePayload.fromObject(object.messages[i]);\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkDataMessageFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkDataMessageFrame\n     * @static\n     * @param {SdkDataMessageFrame} message SdkDataMessageFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkDataMessageFrame.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.arrays || options.defaults)\n            object.messages = [];\n        if (message.messages && message.messages.length) {\n            object.messages = [];\n            for (var j = 0; j < message.messages.length; ++j)\n                object.messages[j] = $root.SdkDataMessagePayload.toObject(message.messages[j], options);\n        }\n        return object;\n    };\n\n    /**\n     * Converts this SdkDataMessageFrame to JSON.\n     * @function toJSON\n     * @memberof SdkDataMessageFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkDataMessageFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkDataMessageFrame\n     * @function getTypeUrl\n     * @memberof SdkDataMessageFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkDataMessageFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkDataMessageFrame\";\n    };\n\n    return SdkDataMessageFrame;\n})();\n\n$root.SdkDataMessagePayload = (function() {\n\n    /**\n     * Properties of a SdkDataMessagePayload.\n     * @name ISdkDataMessagePayload\n     * @interface ISdkDataMessagePayload\n     * @property {string|null} [topic] SdkDataMessagePayload topic\n     * @property {Uint8Array|null} [data] SdkDataMessagePayload data\n     * @property {number|null} [lifetimeMs] SdkDataMessagePayload lifetimeMs\n     * @property {string|null} [senderAttendeeId] SdkDataMessagePayload senderAttendeeId\n     * @property {number|Long|null} [ingestTimeNs] SdkDataMessagePayload ingestTimeNs\n     * @property {string|null} [senderExternalUserId] SdkDataMessagePayload senderExternalUserId\n     */\n\n    /**\n     * Constructs a new SdkDataMessagePayload.\n     * @name SdkDataMessagePayload\n     * @classdesc Represents a SdkDataMessagePayload.\n     * @implements ISdkDataMessagePayload\n     * @constructor\n     * @param {ISdkDataMessagePayload=} [properties] Properties to set\n     */\n    function SdkDataMessagePayload(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkDataMessagePayload topic.\n     * @member {string} topic\n     * @memberof SdkDataMessagePayload\n     * @instance\n     */\n    SdkDataMessagePayload.prototype.topic = \"\";\n\n    /**\n     * SdkDataMessagePayload data.\n     * @member {Uint8Array} data\n     * @memberof SdkDataMessagePayload\n     * @instance\n     */\n    SdkDataMessagePayload.prototype.data = $util.newBuffer([]);\n\n    /**\n     * SdkDataMessagePayload lifetimeMs.\n     * @member {number} lifetimeMs\n     * @memberof SdkDataMessagePayload\n     * @instance\n     */\n    SdkDataMessagePayload.prototype.lifetimeMs = 0;\n\n    /**\n     * SdkDataMessagePayload senderAttendeeId.\n     * @member {string} senderAttendeeId\n     * @memberof SdkDataMessagePayload\n     * @instance\n     */\n    SdkDataMessagePayload.prototype.senderAttendeeId = \"\";\n\n    /**\n     * SdkDataMessagePayload ingestTimeNs.\n     * @member {number|Long} ingestTimeNs\n     * @memberof SdkDataMessagePayload\n     * @instance\n     */\n    SdkDataMessagePayload.prototype.ingestTimeNs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n    /**\n     * SdkDataMessagePayload senderExternalUserId.\n     * @member {string} senderExternalUserId\n     * @memberof SdkDataMessagePayload\n     * @instance\n     */\n    SdkDataMessagePayload.prototype.senderExternalUserId = \"\";\n\n    /**\n     * Creates a new SdkDataMessagePayload instance using the specified properties.\n     * @function create\n     * @memberof SdkDataMessagePayload\n     * @static\n     * @param {ISdkDataMessagePayload=} [properties] Properties to set\n     * @returns {SdkDataMessagePayload} SdkDataMessagePayload instance\n     */\n    SdkDataMessagePayload.create = function create(properties) {\n        return new SdkDataMessagePayload(properties);\n    };\n\n    /**\n     * Encodes the specified SdkDataMessagePayload message. Does not implicitly {@link SdkDataMessagePayload.verify|verify} messages.\n     * @function encode\n     * @memberof SdkDataMessagePayload\n     * @static\n     * @param {ISdkDataMessagePayload} message SdkDataMessagePayload message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkDataMessagePayload.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.topic != null && Object.hasOwnProperty.call(message, \"topic\"))\n            writer.uint32(/* id 1, wireType 2 =*/10).string(message.topic);\n        if (message.data != null && Object.hasOwnProperty.call(message, \"data\"))\n            writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.data);\n        if (message.lifetimeMs != null && Object.hasOwnProperty.call(message, \"lifetimeMs\"))\n            writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.lifetimeMs);\n        if (message.senderAttendeeId != null && Object.hasOwnProperty.call(message, \"senderAttendeeId\"))\n            writer.uint32(/* id 4, wireType 2 =*/34).string(message.senderAttendeeId);\n        if (message.ingestTimeNs != null && Object.hasOwnProperty.call(message, \"ingestTimeNs\"))\n            writer.uint32(/* id 5, wireType 0 =*/40).int64(message.ingestTimeNs);\n        if (message.senderExternalUserId != null && Object.hasOwnProperty.call(message, \"senderExternalUserId\"))\n            writer.uint32(/* id 6, wireType 2 =*/50).string(message.senderExternalUserId);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkDataMessagePayload message, length delimited. Does not implicitly {@link SdkDataMessagePayload.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkDataMessagePayload\n     * @static\n     * @param {ISdkDataMessagePayload} message SdkDataMessagePayload message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkDataMessagePayload.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkDataMessagePayload message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkDataMessagePayload\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkDataMessagePayload} SdkDataMessagePayload\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkDataMessagePayload.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkDataMessagePayload();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.topic = reader.string();\n                    break;\n                }\n            case 2: {\n                    message.data = reader.bytes();\n                    break;\n                }\n            case 3: {\n                    message.lifetimeMs = reader.uint32();\n                    break;\n                }\n            case 4: {\n                    message.senderAttendeeId = reader.string();\n                    break;\n                }\n            case 5: {\n                    message.ingestTimeNs = reader.int64();\n                    break;\n                }\n            case 6: {\n                    message.senderExternalUserId = reader.string();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkDataMessagePayload message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkDataMessagePayload\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkDataMessagePayload} SdkDataMessagePayload\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkDataMessagePayload.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkDataMessagePayload message.\n     * @function verify\n     * @memberof SdkDataMessagePayload\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkDataMessagePayload.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.topic != null && message.hasOwnProperty(\"topic\"))\n            if (!$util.isString(message.topic))\n                return \"topic: string expected\";\n        if (message.data != null && message.hasOwnProperty(\"data\"))\n            if (!(message.data && typeof message.data.length === \"number\" || $util.isString(message.data)))\n                return \"data: buffer expected\";\n        if (message.lifetimeMs != null && message.hasOwnProperty(\"lifetimeMs\"))\n            if (!$util.isInteger(message.lifetimeMs))\n                return \"lifetimeMs: integer expected\";\n        if (message.senderAttendeeId != null && message.hasOwnProperty(\"senderAttendeeId\"))\n            if (!$util.isString(message.senderAttendeeId))\n                return \"senderAttendeeId: string expected\";\n        if (message.ingestTimeNs != null && message.hasOwnProperty(\"ingestTimeNs\"))\n            if (!$util.isInteger(message.ingestTimeNs) && !(message.ingestTimeNs && $util.isInteger(message.ingestTimeNs.low) && $util.isInteger(message.ingestTimeNs.high)))\n                return \"ingestTimeNs: integer|Long expected\";\n        if (message.senderExternalUserId != null && message.hasOwnProperty(\"senderExternalUserId\"))\n            if (!$util.isString(message.senderExternalUserId))\n                return \"senderExternalUserId: string expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkDataMessagePayload message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkDataMessagePayload\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkDataMessagePayload} SdkDataMessagePayload\n     */\n    SdkDataMessagePayload.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkDataMessagePayload)\n            return object;\n        var message = new $root.SdkDataMessagePayload();\n        if (object.topic != null)\n            message.topic = String(object.topic);\n        if (object.data != null)\n            if (typeof object.data === \"string\")\n                $util.base64.decode(object.data, message.data = $util.newBuffer($util.base64.length(object.data)), 0);\n            else if (object.data.length >= 0)\n                message.data = object.data;\n        if (object.lifetimeMs != null)\n            message.lifetimeMs = object.lifetimeMs >>> 0;\n        if (object.senderAttendeeId != null)\n            message.senderAttendeeId = String(object.senderAttendeeId);\n        if (object.ingestTimeNs != null)\n            if ($util.Long)\n                (message.ingestTimeNs = $util.Long.fromValue(object.ingestTimeNs)).unsigned = false;\n            else if (typeof object.ingestTimeNs === \"string\")\n                message.ingestTimeNs = parseInt(object.ingestTimeNs, 10);\n            else if (typeof object.ingestTimeNs === \"number\")\n                message.ingestTimeNs = object.ingestTimeNs;\n            else if (typeof object.ingestTimeNs === \"object\")\n                message.ingestTimeNs = new $util.LongBits(object.ingestTimeNs.low >>> 0, object.ingestTimeNs.high >>> 0).toNumber();\n        if (object.senderExternalUserId != null)\n            message.senderExternalUserId = String(object.senderExternalUserId);\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkDataMessagePayload message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkDataMessagePayload\n     * @static\n     * @param {SdkDataMessagePayload} message SdkDataMessagePayload\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkDataMessagePayload.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            object.topic = \"\";\n            if (options.bytes === String)\n                object.data = \"\";\n            else {\n                object.data = [];\n                if (options.bytes !== Array)\n                    object.data = $util.newBuffer(object.data);\n            }\n            object.lifetimeMs = 0;\n            object.senderAttendeeId = \"\";\n            if ($util.Long) {\n                var long = new $util.Long(0, 0, false);\n                object.ingestTimeNs = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n            } else\n                object.ingestTimeNs = options.longs === String ? \"0\" : 0;\n            object.senderExternalUserId = \"\";\n        }\n        if (message.topic != null && message.hasOwnProperty(\"topic\"))\n            object.topic = message.topic;\n        if (message.data != null && message.hasOwnProperty(\"data\"))\n            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;\n        if (message.lifetimeMs != null && message.hasOwnProperty(\"lifetimeMs\"))\n            object.lifetimeMs = message.lifetimeMs;\n        if (message.senderAttendeeId != null && message.hasOwnProperty(\"senderAttendeeId\"))\n            object.senderAttendeeId = message.senderAttendeeId;\n        if (message.ingestTimeNs != null && message.hasOwnProperty(\"ingestTimeNs\"))\n            if (typeof message.ingestTimeNs === \"number\")\n                object.ingestTimeNs = options.longs === String ? String(message.ingestTimeNs) : message.ingestTimeNs;\n            else\n                object.ingestTimeNs = options.longs === String ? $util.Long.prototype.toString.call(message.ingestTimeNs) : options.longs === Number ? new $util.LongBits(message.ingestTimeNs.low >>> 0, message.ingestTimeNs.high >>> 0).toNumber() : message.ingestTimeNs;\n        if (message.senderExternalUserId != null && message.hasOwnProperty(\"senderExternalUserId\"))\n            object.senderExternalUserId = message.senderExternalUserId;\n        return object;\n    };\n\n    /**\n     * Converts this SdkDataMessagePayload to JSON.\n     * @function toJSON\n     * @memberof SdkDataMessagePayload\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkDataMessagePayload.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkDataMessagePayload\n     * @function getTypeUrl\n     * @memberof SdkDataMessagePayload\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkDataMessagePayload.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkDataMessagePayload\";\n    };\n\n    return SdkDataMessagePayload;\n})();\n\n$root.SdkTurnCredentials = (function() {\n\n    /**\n     * Properties of a SdkTurnCredentials.\n     * @name ISdkTurnCredentials\n     * @interface ISdkTurnCredentials\n     * @property {string|null} [username] SdkTurnCredentials username\n     * @property {string|null} [password] SdkTurnCredentials password\n     * @property {number|null} [ttl] SdkTurnCredentials ttl\n     * @property {Array.<string>|null} [uris] SdkTurnCredentials uris\n     */\n\n    /**\n     * Constructs a new SdkTurnCredentials.\n     * @name SdkTurnCredentials\n     * @classdesc Represents a SdkTurnCredentials.\n     * @implements ISdkTurnCredentials\n     * @constructor\n     * @param {ISdkTurnCredentials=} [properties] Properties to set\n     */\n    function SdkTurnCredentials(properties) {\n        this.uris = [];\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkTurnCredentials username.\n     * @member {string} username\n     * @memberof SdkTurnCredentials\n     * @instance\n     */\n    SdkTurnCredentials.prototype.username = \"\";\n\n    /**\n     * SdkTurnCredentials password.\n     * @member {string} password\n     * @memberof SdkTurnCredentials\n     * @instance\n     */\n    SdkTurnCredentials.prototype.password = \"\";\n\n    /**\n     * SdkTurnCredentials ttl.\n     * @member {number} ttl\n     * @memberof SdkTurnCredentials\n     * @instance\n     */\n    SdkTurnCredentials.prototype.ttl = 0;\n\n    /**\n     * SdkTurnCredentials uris.\n     * @member {Array.<string>} uris\n     * @memberof SdkTurnCredentials\n     * @instance\n     */\n    SdkTurnCredentials.prototype.uris = $util.emptyArray;\n\n    /**\n     * Creates a new SdkTurnCredentials instance using the specified properties.\n     * @function create\n     * @memberof SdkTurnCredentials\n     * @static\n     * @param {ISdkTurnCredentials=} [properties] Properties to set\n     * @returns {SdkTurnCredentials} SdkTurnCredentials instance\n     */\n    SdkTurnCredentials.create = function create(properties) {\n        return new SdkTurnCredentials(properties);\n    };\n\n    /**\n     * Encodes the specified SdkTurnCredentials message. Does not implicitly {@link SdkTurnCredentials.verify|verify} messages.\n     * @function encode\n     * @memberof SdkTurnCredentials\n     * @static\n     * @param {ISdkTurnCredentials} message SdkTurnCredentials message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTurnCredentials.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.username != null && Object.hasOwnProperty.call(message, \"username\"))\n            writer.uint32(/* id 1, wireType 2 =*/10).string(message.username);\n        if (message.password != null && Object.hasOwnProperty.call(message, \"password\"))\n            writer.uint32(/* id 2, wireType 2 =*/18).string(message.password);\n        if (message.ttl != null && Object.hasOwnProperty.call(message, \"ttl\"))\n            writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.ttl);\n        if (message.uris != null && message.uris.length)\n            for (var i = 0; i < message.uris.length; ++i)\n                writer.uint32(/* id 4, wireType 2 =*/34).string(message.uris[i]);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkTurnCredentials message, length delimited. Does not implicitly {@link SdkTurnCredentials.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkTurnCredentials\n     * @static\n     * @param {ISdkTurnCredentials} message SdkTurnCredentials message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTurnCredentials.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkTurnCredentials message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkTurnCredentials\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkTurnCredentials} SdkTurnCredentials\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTurnCredentials.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTurnCredentials();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.username = reader.string();\n                    break;\n                }\n            case 2: {\n                    message.password = reader.string();\n                    break;\n                }\n            case 3: {\n                    message.ttl = reader.uint32();\n                    break;\n                }\n            case 4: {\n                    if (!(message.uris && message.uris.length))\n                        message.uris = [];\n                    message.uris.push(reader.string());\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkTurnCredentials message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkTurnCredentials\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkTurnCredentials} SdkTurnCredentials\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTurnCredentials.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkTurnCredentials message.\n     * @function verify\n     * @memberof SdkTurnCredentials\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkTurnCredentials.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.username != null && message.hasOwnProperty(\"username\"))\n            if (!$util.isString(message.username))\n                return \"username: string expected\";\n        if (message.password != null && message.hasOwnProperty(\"password\"))\n            if (!$util.isString(message.password))\n                return \"password: string expected\";\n        if (message.ttl != null && message.hasOwnProperty(\"ttl\"))\n            if (!$util.isInteger(message.ttl))\n                return \"ttl: integer expected\";\n        if (message.uris != null && message.hasOwnProperty(\"uris\")) {\n            if (!Array.isArray(message.uris))\n                return \"uris: array expected\";\n            for (var i = 0; i < message.uris.length; ++i)\n                if (!$util.isString(message.uris[i]))\n                    return \"uris: string[] expected\";\n        }\n        return null;\n    };\n\n    /**\n     * Creates a SdkTurnCredentials message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkTurnCredentials\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkTurnCredentials} SdkTurnCredentials\n     */\n    SdkTurnCredentials.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkTurnCredentials)\n            return object;\n        var message = new $root.SdkTurnCredentials();\n        if (object.username != null)\n            message.username = String(object.username);\n        if (object.password != null)\n            message.password = String(object.password);\n        if (object.ttl != null)\n            message.ttl = object.ttl >>> 0;\n        if (object.uris) {\n            if (!Array.isArray(object.uris))\n                throw TypeError(\".SdkTurnCredentials.uris: array expected\");\n            message.uris = [];\n            for (var i = 0; i < object.uris.length; ++i)\n                message.uris[i] = String(object.uris[i]);\n        }\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkTurnCredentials message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkTurnCredentials\n     * @static\n     * @param {SdkTurnCredentials} message SdkTurnCredentials\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkTurnCredentials.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.arrays || options.defaults)\n            object.uris = [];\n        if (options.defaults) {\n            object.username = \"\";\n            object.password = \"\";\n            object.ttl = 0;\n        }\n        if (message.username != null && message.hasOwnProperty(\"username\"))\n            object.username = message.username;\n        if (message.password != null && message.hasOwnProperty(\"password\"))\n            object.password = message.password;\n        if (message.ttl != null && message.hasOwnProperty(\"ttl\"))\n            object.ttl = message.ttl;\n        if (message.uris && message.uris.length) {\n            object.uris = [];\n            for (var j = 0; j < message.uris.length; ++j)\n                object.uris[j] = message.uris[j];\n        }\n        return object;\n    };\n\n    /**\n     * Converts this SdkTurnCredentials to JSON.\n     * @function toJSON\n     * @memberof SdkTurnCredentials\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkTurnCredentials.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkTurnCredentials\n     * @function getTypeUrl\n     * @memberof SdkTurnCredentials\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkTurnCredentials.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkTurnCredentials\";\n    };\n\n    return SdkTurnCredentials;\n})();\n\n$root.SdkTranscriptItem = (function() {\n\n    /**\n     * Properties of a SdkTranscriptItem.\n     * @name ISdkTranscriptItem\n     * @interface ISdkTranscriptItem\n     * @property {string|null} [content] SdkTranscriptItem content\n     * @property {number|Long|null} [endTime] SdkTranscriptItem endTime\n     * @property {string|null} [speakerAttendeeId] SdkTranscriptItem speakerAttendeeId\n     * @property {string|null} [speakerExternalUserId] SdkTranscriptItem speakerExternalUserId\n     * @property {number|Long|null} [startTime] SdkTranscriptItem startTime\n     * @property {SdkTranscriptItem.Type|null} [type] SdkTranscriptItem type\n     * @property {boolean|null} [vocabularyFilterMatch] SdkTranscriptItem vocabularyFilterMatch\n     * @property {number|null} [confidence] SdkTranscriptItem confidence\n     * @property {boolean|null} [stable] SdkTranscriptItem stable\n     */\n\n    /**\n     * Constructs a new SdkTranscriptItem.\n     * @name SdkTranscriptItem\n     * @classdesc Represents a SdkTranscriptItem.\n     * @implements ISdkTranscriptItem\n     * @constructor\n     * @param {ISdkTranscriptItem=} [properties] Properties to set\n     */\n    function SdkTranscriptItem(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkTranscriptItem content.\n     * @member {string} content\n     * @memberof SdkTranscriptItem\n     * @instance\n     */\n    SdkTranscriptItem.prototype.content = \"\";\n\n    /**\n     * SdkTranscriptItem endTime.\n     * @member {number|Long} endTime\n     * @memberof SdkTranscriptItem\n     * @instance\n     */\n    SdkTranscriptItem.prototype.endTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n    /**\n     * SdkTranscriptItem speakerAttendeeId.\n     * @member {string} speakerAttendeeId\n     * @memberof SdkTranscriptItem\n     * @instance\n     */\n    SdkTranscriptItem.prototype.speakerAttendeeId = \"\";\n\n    /**\n     * SdkTranscriptItem speakerExternalUserId.\n     * @member {string} speakerExternalUserId\n     * @memberof SdkTranscriptItem\n     * @instance\n     */\n    SdkTranscriptItem.prototype.speakerExternalUserId = \"\";\n\n    /**\n     * SdkTranscriptItem startTime.\n     * @member {number|Long} startTime\n     * @memberof SdkTranscriptItem\n     * @instance\n     */\n    SdkTranscriptItem.prototype.startTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n    /**\n     * SdkTranscriptItem type.\n     * @member {SdkTranscriptItem.Type} type\n     * @memberof SdkTranscriptItem\n     * @instance\n     */\n    SdkTranscriptItem.prototype.type = 1;\n\n    /**\n     * SdkTranscriptItem vocabularyFilterMatch.\n     * @member {boolean} vocabularyFilterMatch\n     * @memberof SdkTranscriptItem\n     * @instance\n     */\n    SdkTranscriptItem.prototype.vocabularyFilterMatch = false;\n\n    /**\n     * SdkTranscriptItem confidence.\n     * @member {number} confidence\n     * @memberof SdkTranscriptItem\n     * @instance\n     */\n    SdkTranscriptItem.prototype.confidence = 0;\n\n    /**\n     * SdkTranscriptItem stable.\n     * @member {boolean} stable\n     * @memberof SdkTranscriptItem\n     * @instance\n     */\n    SdkTranscriptItem.prototype.stable = false;\n\n    /**\n     * Creates a new SdkTranscriptItem instance using the specified properties.\n     * @function create\n     * @memberof SdkTranscriptItem\n     * @static\n     * @param {ISdkTranscriptItem=} [properties] Properties to set\n     * @returns {SdkTranscriptItem} SdkTranscriptItem instance\n     */\n    SdkTranscriptItem.create = function create(properties) {\n        return new SdkTranscriptItem(properties);\n    };\n\n    /**\n     * Encodes the specified SdkTranscriptItem message. Does not implicitly {@link SdkTranscriptItem.verify|verify} messages.\n     * @function encode\n     * @memberof SdkTranscriptItem\n     * @static\n     * @param {ISdkTranscriptItem} message SdkTranscriptItem message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTranscriptItem.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.content != null && Object.hasOwnProperty.call(message, \"content\"))\n            writer.uint32(/* id 1, wireType 2 =*/10).string(message.content);\n        if (message.endTime != null && Object.hasOwnProperty.call(message, \"endTime\"))\n            writer.uint32(/* id 2, wireType 0 =*/16).int64(message.endTime);\n        if (message.speakerAttendeeId != null && Object.hasOwnProperty.call(message, \"speakerAttendeeId\"))\n            writer.uint32(/* id 3, wireType 2 =*/26).string(message.speakerAttendeeId);\n        if (message.speakerExternalUserId != null && Object.hasOwnProperty.call(message, \"speakerExternalUserId\"))\n            writer.uint32(/* id 4, wireType 2 =*/34).string(message.speakerExternalUserId);\n        if (message.startTime != null && Object.hasOwnProperty.call(message, \"startTime\"))\n            writer.uint32(/* id 5, wireType 0 =*/40).int64(message.startTime);\n        if (message.type != null && Object.hasOwnProperty.call(message, \"type\"))\n            writer.uint32(/* id 6, wireType 0 =*/48).int32(message.type);\n        if (message.vocabularyFilterMatch != null && Object.hasOwnProperty.call(message, \"vocabularyFilterMatch\"))\n            writer.uint32(/* id 7, wireType 0 =*/56).bool(message.vocabularyFilterMatch);\n        if (message.confidence != null && Object.hasOwnProperty.call(message, \"confidence\"))\n            writer.uint32(/* id 8, wireType 1 =*/65).double(message.confidence);\n        if (message.stable != null && Object.hasOwnProperty.call(message, \"stable\"))\n            writer.uint32(/* id 9, wireType 0 =*/72).bool(message.stable);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkTranscriptItem message, length delimited. Does not implicitly {@link SdkTranscriptItem.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkTranscriptItem\n     * @static\n     * @param {ISdkTranscriptItem} message SdkTranscriptItem message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTranscriptItem.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkTranscriptItem message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkTranscriptItem\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkTranscriptItem} SdkTranscriptItem\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTranscriptItem.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTranscriptItem();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.content = reader.string();\n                    break;\n                }\n            case 2: {\n                    message.endTime = reader.int64();\n                    break;\n                }\n            case 3: {\n                    message.speakerAttendeeId = reader.string();\n                    break;\n                }\n            case 4: {\n                    message.speakerExternalUserId = reader.string();\n                    break;\n                }\n            case 5: {\n                    message.startTime = reader.int64();\n                    break;\n                }\n            case 6: {\n                    message.type = reader.int32();\n                    break;\n                }\n            case 7: {\n                    message.vocabularyFilterMatch = reader.bool();\n                    break;\n                }\n            case 8: {\n                    message.confidence = reader.double();\n                    break;\n                }\n            case 9: {\n                    message.stable = reader.bool();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkTranscriptItem message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkTranscriptItem\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkTranscriptItem} SdkTranscriptItem\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTranscriptItem.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkTranscriptItem message.\n     * @function verify\n     * @memberof SdkTranscriptItem\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkTranscriptItem.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.content != null && message.hasOwnProperty(\"content\"))\n            if (!$util.isString(message.content))\n                return \"content: string expected\";\n        if (message.endTime != null && message.hasOwnProperty(\"endTime\"))\n            if (!$util.isInteger(message.endTime) && !(message.endTime && $util.isInteger(message.endTime.low) && $util.isInteger(message.endTime.high)))\n                return \"endTime: integer|Long expected\";\n        if (message.speakerAttendeeId != null && message.hasOwnProperty(\"speakerAttendeeId\"))\n            if (!$util.isString(message.speakerAttendeeId))\n                return \"speakerAttendeeId: string expected\";\n        if (message.speakerExternalUserId != null && message.hasOwnProperty(\"speakerExternalUserId\"))\n            if (!$util.isString(message.speakerExternalUserId))\n                return \"speakerExternalUserId: string expected\";\n        if (message.startTime != null && message.hasOwnProperty(\"startTime\"))\n            if (!$util.isInteger(message.startTime) && !(message.startTime && $util.isInteger(message.startTime.low) && $util.isInteger(message.startTime.high)))\n                return \"startTime: integer|Long expected\";\n        if (message.type != null && message.hasOwnProperty(\"type\"))\n            switch (message.type) {\n            default:\n                return \"type: enum value expected\";\n            case 1:\n            case 2:\n                break;\n            }\n        if (message.vocabularyFilterMatch != null && message.hasOwnProperty(\"vocabularyFilterMatch\"))\n            if (typeof message.vocabularyFilterMatch !== \"boolean\")\n                return \"vocabularyFilterMatch: boolean expected\";\n        if (message.confidence != null && message.hasOwnProperty(\"confidence\"))\n            if (typeof message.confidence !== \"number\")\n                return \"confidence: number expected\";\n        if (message.stable != null && message.hasOwnProperty(\"stable\"))\n            if (typeof message.stable !== \"boolean\")\n                return \"stable: boolean expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkTranscriptItem message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkTranscriptItem\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkTranscriptItem} SdkTranscriptItem\n     */\n    SdkTranscriptItem.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkTranscriptItem)\n            return object;\n        var message = new $root.SdkTranscriptItem();\n        if (object.content != null)\n            message.content = String(object.content);\n        if (object.endTime != null)\n            if ($util.Long)\n                (message.endTime = $util.Long.fromValue(object.endTime)).unsigned = false;\n            else if (typeof object.endTime === \"string\")\n                message.endTime = parseInt(object.endTime, 10);\n            else if (typeof object.endTime === \"number\")\n                message.endTime = object.endTime;\n            else if (typeof object.endTime === \"object\")\n                message.endTime = new $util.LongBits(object.endTime.low >>> 0, object.endTime.high >>> 0).toNumber();\n        if (object.speakerAttendeeId != null)\n            message.speakerAttendeeId = String(object.speakerAttendeeId);\n        if (object.speakerExternalUserId != null)\n            message.speakerExternalUserId = String(object.speakerExternalUserId);\n        if (object.startTime != null)\n            if ($util.Long)\n                (message.startTime = $util.Long.fromValue(object.startTime)).unsigned = false;\n            else if (typeof object.startTime === \"string\")\n                message.startTime = parseInt(object.startTime, 10);\n            else if (typeof object.startTime === \"number\")\n                message.startTime = object.startTime;\n            else if (typeof object.startTime === \"object\")\n                message.startTime = new $util.LongBits(object.startTime.low >>> 0, object.startTime.high >>> 0).toNumber();\n        switch (object.type) {\n        default:\n            if (typeof object.type === \"number\") {\n                message.type = object.type;\n                break;\n            }\n            break;\n        case \"PRONUNCIATION\":\n        case 1:\n            message.type = 1;\n            break;\n        case \"PUNCTUATION\":\n        case 2:\n            message.type = 2;\n            break;\n        }\n        if (object.vocabularyFilterMatch != null)\n            message.vocabularyFilterMatch = Boolean(object.vocabularyFilterMatch);\n        if (object.confidence != null)\n            message.confidence = Number(object.confidence);\n        if (object.stable != null)\n            message.stable = Boolean(object.stable);\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkTranscriptItem message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkTranscriptItem\n     * @static\n     * @param {SdkTranscriptItem} message SdkTranscriptItem\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkTranscriptItem.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            object.content = \"\";\n            if ($util.Long) {\n                var long = new $util.Long(0, 0, false);\n                object.endTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n            } else\n                object.endTime = options.longs === String ? \"0\" : 0;\n            object.speakerAttendeeId = \"\";\n            object.speakerExternalUserId = \"\";\n            if ($util.Long) {\n                var long = new $util.Long(0, 0, false);\n                object.startTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n            } else\n                object.startTime = options.longs === String ? \"0\" : 0;\n            object.type = options.enums === String ? \"PRONUNCIATION\" : 1;\n            object.vocabularyFilterMatch = false;\n            object.confidence = 0;\n            object.stable = false;\n        }\n        if (message.content != null && message.hasOwnProperty(\"content\"))\n            object.content = message.content;\n        if (message.endTime != null && message.hasOwnProperty(\"endTime\"))\n            if (typeof message.endTime === \"number\")\n                object.endTime = options.longs === String ? String(message.endTime) : message.endTime;\n            else\n                object.endTime = options.longs === String ? $util.Long.prototype.toString.call(message.endTime) : options.longs === Number ? new $util.LongBits(message.endTime.low >>> 0, message.endTime.high >>> 0).toNumber() : message.endTime;\n        if (message.speakerAttendeeId != null && message.hasOwnProperty(\"speakerAttendeeId\"))\n            object.speakerAttendeeId = message.speakerAttendeeId;\n        if (message.speakerExternalUserId != null && message.hasOwnProperty(\"speakerExternalUserId\"))\n            object.speakerExternalUserId = message.speakerExternalUserId;\n        if (message.startTime != null && message.hasOwnProperty(\"startTime\"))\n            if (typeof message.startTime === \"number\")\n                object.startTime = options.longs === String ? String(message.startTime) : message.startTime;\n            else\n                object.startTime = options.longs === String ? $util.Long.prototype.toString.call(message.startTime) : options.longs === Number ? new $util.LongBits(message.startTime.low >>> 0, message.startTime.high >>> 0).toNumber() : message.startTime;\n        if (message.type != null && message.hasOwnProperty(\"type\"))\n            object.type = options.enums === String ? $root.SdkTranscriptItem.Type[message.type] === undefined ? message.type : $root.SdkTranscriptItem.Type[message.type] : message.type;\n        if (message.vocabularyFilterMatch != null && message.hasOwnProperty(\"vocabularyFilterMatch\"))\n            object.vocabularyFilterMatch = message.vocabularyFilterMatch;\n        if (message.confidence != null && message.hasOwnProperty(\"confidence\"))\n            object.confidence = options.json && !isFinite(message.confidence) ? String(message.confidence) : message.confidence;\n        if (message.stable != null && message.hasOwnProperty(\"stable\"))\n            object.stable = message.stable;\n        return object;\n    };\n\n    /**\n     * Converts this SdkTranscriptItem to JSON.\n     * @function toJSON\n     * @memberof SdkTranscriptItem\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkTranscriptItem.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkTranscriptItem\n     * @function getTypeUrl\n     * @memberof SdkTranscriptItem\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkTranscriptItem.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkTranscriptItem\";\n    };\n\n    /**\n     * Type enum.\n     * @name SdkTranscriptItem.Type\n     * @enum {number}\n     * @property {number} PRONUNCIATION=1 PRONUNCIATION value\n     * @property {number} PUNCTUATION=2 PUNCTUATION value\n     */\n    SdkTranscriptItem.Type = (function() {\n        var valuesById = {}, values = Object.create(valuesById);\n        values[valuesById[1] = \"PRONUNCIATION\"] = 1;\n        values[valuesById[2] = \"PUNCTUATION\"] = 2;\n        return values;\n    })();\n\n    return SdkTranscriptItem;\n})();\n\n$root.SdkTranscriptEntity = (function() {\n\n    /**\n     * Properties of a SdkTranscriptEntity.\n     * @name ISdkTranscriptEntity\n     * @interface ISdkTranscriptEntity\n     * @property {string|null} [category] SdkTranscriptEntity category\n     * @property {number|null} [confidence] SdkTranscriptEntity confidence\n     * @property {string|null} [content] SdkTranscriptEntity content\n     * @property {number|Long|null} [endTime] SdkTranscriptEntity endTime\n     * @property {number|Long|null} [startTime] SdkTranscriptEntity startTime\n     * @property {string|null} [type] SdkTranscriptEntity type\n     */\n\n    /**\n     * Constructs a new SdkTranscriptEntity.\n     * @name SdkTranscriptEntity\n     * @classdesc Represents a SdkTranscriptEntity.\n     * @implements ISdkTranscriptEntity\n     * @constructor\n     * @param {ISdkTranscriptEntity=} [properties] Properties to set\n     */\n    function SdkTranscriptEntity(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkTranscriptEntity category.\n     * @member {string} category\n     * @memberof SdkTranscriptEntity\n     * @instance\n     */\n    SdkTranscriptEntity.prototype.category = \"\";\n\n    /**\n     * SdkTranscriptEntity confidence.\n     * @member {number} confidence\n     * @memberof SdkTranscriptEntity\n     * @instance\n     */\n    SdkTranscriptEntity.prototype.confidence = 0;\n\n    /**\n     * SdkTranscriptEntity content.\n     * @member {string} content\n     * @memberof SdkTranscriptEntity\n     * @instance\n     */\n    SdkTranscriptEntity.prototype.content = \"\";\n\n    /**\n     * SdkTranscriptEntity endTime.\n     * @member {number|Long} endTime\n     * @memberof SdkTranscriptEntity\n     * @instance\n     */\n    SdkTranscriptEntity.prototype.endTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n    /**\n     * SdkTranscriptEntity startTime.\n     * @member {number|Long} startTime\n     * @memberof SdkTranscriptEntity\n     * @instance\n     */\n    SdkTranscriptEntity.prototype.startTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n    /**\n     * SdkTranscriptEntity type.\n     * @member {string} type\n     * @memberof SdkTranscriptEntity\n     * @instance\n     */\n    SdkTranscriptEntity.prototype.type = \"\";\n\n    /**\n     * Creates a new SdkTranscriptEntity instance using the specified properties.\n     * @function create\n     * @memberof SdkTranscriptEntity\n     * @static\n     * @param {ISdkTranscriptEntity=} [properties] Properties to set\n     * @returns {SdkTranscriptEntity} SdkTranscriptEntity instance\n     */\n    SdkTranscriptEntity.create = function create(properties) {\n        return new SdkTranscriptEntity(properties);\n    };\n\n    /**\n     * Encodes the specified SdkTranscriptEntity message. Does not implicitly {@link SdkTranscriptEntity.verify|verify} messages.\n     * @function encode\n     * @memberof SdkTranscriptEntity\n     * @static\n     * @param {ISdkTranscriptEntity} message SdkTranscriptEntity message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTranscriptEntity.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.category != null && Object.hasOwnProperty.call(message, \"category\"))\n            writer.uint32(/* id 1, wireType 2 =*/10).string(message.category);\n        if (message.confidence != null && Object.hasOwnProperty.call(message, \"confidence\"))\n            writer.uint32(/* id 2, wireType 1 =*/17).double(message.confidence);\n        if (message.content != null && Object.hasOwnProperty.call(message, \"content\"))\n            writer.uint32(/* id 3, wireType 2 =*/26).string(message.content);\n        if (message.endTime != null && Object.hasOwnProperty.call(message, \"endTime\"))\n            writer.uint32(/* id 4, wireType 0 =*/32).int64(message.endTime);\n        if (message.startTime != null && Object.hasOwnProperty.call(message, \"startTime\"))\n            writer.uint32(/* id 5, wireType 0 =*/40).int64(message.startTime);\n        if (message.type != null && Object.hasOwnProperty.call(message, \"type\"))\n            writer.uint32(/* id 6, wireType 2 =*/50).string(message.type);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkTranscriptEntity message, length delimited. Does not implicitly {@link SdkTranscriptEntity.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkTranscriptEntity\n     * @static\n     * @param {ISdkTranscriptEntity} message SdkTranscriptEntity message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTranscriptEntity.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkTranscriptEntity message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkTranscriptEntity\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkTranscriptEntity} SdkTranscriptEntity\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTranscriptEntity.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTranscriptEntity();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.category = reader.string();\n                    break;\n                }\n            case 2: {\n                    message.confidence = reader.double();\n                    break;\n                }\n            case 3: {\n                    message.content = reader.string();\n                    break;\n                }\n            case 4: {\n                    message.endTime = reader.int64();\n                    break;\n                }\n            case 5: {\n                    message.startTime = reader.int64();\n                    break;\n                }\n            case 6: {\n                    message.type = reader.string();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkTranscriptEntity message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkTranscriptEntity\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkTranscriptEntity} SdkTranscriptEntity\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTranscriptEntity.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkTranscriptEntity message.\n     * @function verify\n     * @memberof SdkTranscriptEntity\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkTranscriptEntity.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.category != null && message.hasOwnProperty(\"category\"))\n            if (!$util.isString(message.category))\n                return \"category: string expected\";\n        if (message.confidence != null && message.hasOwnProperty(\"confidence\"))\n            if (typeof message.confidence !== \"number\")\n                return \"confidence: number expected\";\n        if (message.content != null && message.hasOwnProperty(\"content\"))\n            if (!$util.isString(message.content))\n                return \"content: string expected\";\n        if (message.endTime != null && message.hasOwnProperty(\"endTime\"))\n            if (!$util.isInteger(message.endTime) && !(message.endTime && $util.isInteger(message.endTime.low) && $util.isInteger(message.endTime.high)))\n                return \"endTime: integer|Long expected\";\n        if (message.startTime != null && message.hasOwnProperty(\"startTime\"))\n            if (!$util.isInteger(message.startTime) && !(message.startTime && $util.isInteger(message.startTime.low) && $util.isInteger(message.startTime.high)))\n                return \"startTime: integer|Long expected\";\n        if (message.type != null && message.hasOwnProperty(\"type\"))\n            if (!$util.isString(message.type))\n                return \"type: string expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkTranscriptEntity message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkTranscriptEntity\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkTranscriptEntity} SdkTranscriptEntity\n     */\n    SdkTranscriptEntity.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkTranscriptEntity)\n            return object;\n        var message = new $root.SdkTranscriptEntity();\n        if (object.category != null)\n            message.category = String(object.category);\n        if (object.confidence != null)\n            message.confidence = Number(object.confidence);\n        if (object.content != null)\n            message.content = String(object.content);\n        if (object.endTime != null)\n            if ($util.Long)\n                (message.endTime = $util.Long.fromValue(object.endTime)).unsigned = false;\n            else if (typeof object.endTime === \"string\")\n                message.endTime = parseInt(object.endTime, 10);\n            else if (typeof object.endTime === \"number\")\n                message.endTime = object.endTime;\n            else if (typeof object.endTime === \"object\")\n                message.endTime = new $util.LongBits(object.endTime.low >>> 0, object.endTime.high >>> 0).toNumber();\n        if (object.startTime != null)\n            if ($util.Long)\n                (message.startTime = $util.Long.fromValue(object.startTime)).unsigned = false;\n            else if (typeof object.startTime === \"string\")\n                message.startTime = parseInt(object.startTime, 10);\n            else if (typeof object.startTime === \"number\")\n                message.startTime = object.startTime;\n            else if (typeof object.startTime === \"object\")\n                message.startTime = new $util.LongBits(object.startTime.low >>> 0, object.startTime.high >>> 0).toNumber();\n        if (object.type != null)\n            message.type = String(object.type);\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkTranscriptEntity message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkTranscriptEntity\n     * @static\n     * @param {SdkTranscriptEntity} message SdkTranscriptEntity\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkTranscriptEntity.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            object.category = \"\";\n            object.confidence = 0;\n            object.content = \"\";\n            if ($util.Long) {\n                var long = new $util.Long(0, 0, false);\n                object.endTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n            } else\n                object.endTime = options.longs === String ? \"0\" : 0;\n            if ($util.Long) {\n                var long = new $util.Long(0, 0, false);\n                object.startTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n            } else\n                object.startTime = options.longs === String ? \"0\" : 0;\n            object.type = \"\";\n        }\n        if (message.category != null && message.hasOwnProperty(\"category\"))\n            object.category = message.category;\n        if (message.confidence != null && message.hasOwnProperty(\"confidence\"))\n            object.confidence = options.json && !isFinite(message.confidence) ? String(message.confidence) : message.confidence;\n        if (message.content != null && message.hasOwnProperty(\"content\"))\n            object.content = message.content;\n        if (message.endTime != null && message.hasOwnProperty(\"endTime\"))\n            if (typeof message.endTime === \"number\")\n                object.endTime = options.longs === String ? String(message.endTime) : message.endTime;\n            else\n                object.endTime = options.longs === String ? $util.Long.prototype.toString.call(message.endTime) : options.longs === Number ? new $util.LongBits(message.endTime.low >>> 0, message.endTime.high >>> 0).toNumber() : message.endTime;\n        if (message.startTime != null && message.hasOwnProperty(\"startTime\"))\n            if (typeof message.startTime === \"number\")\n                object.startTime = options.longs === String ? String(message.startTime) : message.startTime;\n            else\n                object.startTime = options.longs === String ? $util.Long.prototype.toString.call(message.startTime) : options.longs === Number ? new $util.LongBits(message.startTime.low >>> 0, message.startTime.high >>> 0).toNumber() : message.startTime;\n        if (message.type != null && message.hasOwnProperty(\"type\"))\n            object.type = message.type;\n        return object;\n    };\n\n    /**\n     * Converts this SdkTranscriptEntity to JSON.\n     * @function toJSON\n     * @memberof SdkTranscriptEntity\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkTranscriptEntity.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkTranscriptEntity\n     * @function getTypeUrl\n     * @memberof SdkTranscriptEntity\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkTranscriptEntity.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkTranscriptEntity\";\n    };\n\n    return SdkTranscriptEntity;\n})();\n\n$root.SdkTranscriptAlternative = (function() {\n\n    /**\n     * Properties of a SdkTranscriptAlternative.\n     * @name ISdkTranscriptAlternative\n     * @interface ISdkTranscriptAlternative\n     * @property {Array.<ISdkTranscriptItem>|null} [items] SdkTranscriptAlternative items\n     * @property {string|null} [transcript] SdkTranscriptAlternative transcript\n     * @property {Array.<ISdkTranscriptEntity>|null} [entities] SdkTranscriptAlternative entities\n     */\n\n    /**\n     * Constructs a new SdkTranscriptAlternative.\n     * @name SdkTranscriptAlternative\n     * @classdesc Represents a SdkTranscriptAlternative.\n     * @implements ISdkTranscriptAlternative\n     * @constructor\n     * @param {ISdkTranscriptAlternative=} [properties] Properties to set\n     */\n    function SdkTranscriptAlternative(properties) {\n        this.items = [];\n        this.entities = [];\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkTranscriptAlternative items.\n     * @member {Array.<ISdkTranscriptItem>} items\n     * @memberof SdkTranscriptAlternative\n     * @instance\n     */\n    SdkTranscriptAlternative.prototype.items = $util.emptyArray;\n\n    /**\n     * SdkTranscriptAlternative transcript.\n     * @member {string} transcript\n     * @memberof SdkTranscriptAlternative\n     * @instance\n     */\n    SdkTranscriptAlternative.prototype.transcript = \"\";\n\n    /**\n     * SdkTranscriptAlternative entities.\n     * @member {Array.<ISdkTranscriptEntity>} entities\n     * @memberof SdkTranscriptAlternative\n     * @instance\n     */\n    SdkTranscriptAlternative.prototype.entities = $util.emptyArray;\n\n    /**\n     * Creates a new SdkTranscriptAlternative instance using the specified properties.\n     * @function create\n     * @memberof SdkTranscriptAlternative\n     * @static\n     * @param {ISdkTranscriptAlternative=} [properties] Properties to set\n     * @returns {SdkTranscriptAlternative} SdkTranscriptAlternative instance\n     */\n    SdkTranscriptAlternative.create = function create(properties) {\n        return new SdkTranscriptAlternative(properties);\n    };\n\n    /**\n     * Encodes the specified SdkTranscriptAlternative message. Does not implicitly {@link SdkTranscriptAlternative.verify|verify} messages.\n     * @function encode\n     * @memberof SdkTranscriptAlternative\n     * @static\n     * @param {ISdkTranscriptAlternative} message SdkTranscriptAlternative message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTranscriptAlternative.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.items != null && message.items.length)\n            for (var i = 0; i < message.items.length; ++i)\n                $root.SdkTranscriptItem.encode(message.items[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n        if (message.transcript != null && Object.hasOwnProperty.call(message, \"transcript\"))\n            writer.uint32(/* id 2, wireType 2 =*/18).string(message.transcript);\n        if (message.entities != null && message.entities.length)\n            for (var i = 0; i < message.entities.length; ++i)\n                $root.SdkTranscriptEntity.encode(message.entities[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkTranscriptAlternative message, length delimited. Does not implicitly {@link SdkTranscriptAlternative.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkTranscriptAlternative\n     * @static\n     * @param {ISdkTranscriptAlternative} message SdkTranscriptAlternative message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTranscriptAlternative.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkTranscriptAlternative message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkTranscriptAlternative\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkTranscriptAlternative} SdkTranscriptAlternative\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTranscriptAlternative.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTranscriptAlternative();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    if (!(message.items && message.items.length))\n                        message.items = [];\n                    message.items.push($root.SdkTranscriptItem.decode(reader, reader.uint32()));\n                    break;\n                }\n            case 2: {\n                    message.transcript = reader.string();\n                    break;\n                }\n            case 3: {\n                    if (!(message.entities && message.entities.length))\n                        message.entities = [];\n                    message.entities.push($root.SdkTranscriptEntity.decode(reader, reader.uint32()));\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkTranscriptAlternative message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkTranscriptAlternative\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkTranscriptAlternative} SdkTranscriptAlternative\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTranscriptAlternative.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkTranscriptAlternative message.\n     * @function verify\n     * @memberof SdkTranscriptAlternative\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkTranscriptAlternative.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.items != null && message.hasOwnProperty(\"items\")) {\n            if (!Array.isArray(message.items))\n                return \"items: array expected\";\n            for (var i = 0; i < message.items.length; ++i) {\n                var error = $root.SdkTranscriptItem.verify(message.items[i]);\n                if (error)\n                    return \"items.\" + error;\n            }\n        }\n        if (message.transcript != null && message.hasOwnProperty(\"transcript\"))\n            if (!$util.isString(message.transcript))\n                return \"transcript: string expected\";\n        if (message.entities != null && message.hasOwnProperty(\"entities\")) {\n            if (!Array.isArray(message.entities))\n                return \"entities: array expected\";\n            for (var i = 0; i < message.entities.length; ++i) {\n                var error = $root.SdkTranscriptEntity.verify(message.entities[i]);\n                if (error)\n                    return \"entities.\" + error;\n            }\n        }\n        return null;\n    };\n\n    /**\n     * Creates a SdkTranscriptAlternative message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkTranscriptAlternative\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkTranscriptAlternative} SdkTranscriptAlternative\n     */\n    SdkTranscriptAlternative.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkTranscriptAlternative)\n            return object;\n        var message = new $root.SdkTranscriptAlternative();\n        if (object.items) {\n            if (!Array.isArray(object.items))\n                throw TypeError(\".SdkTranscriptAlternative.items: array expected\");\n            message.items = [];\n            for (var i = 0; i < object.items.length; ++i) {\n                if (typeof object.items[i] !== \"object\")\n                    throw TypeError(\".SdkTranscriptAlternative.items: object expected\");\n                message.items[i] = $root.SdkTranscriptItem.fromObject(object.items[i]);\n            }\n        }\n        if (object.transcript != null)\n            message.transcript = String(object.transcript);\n        if (object.entities) {\n            if (!Array.isArray(object.entities))\n                throw TypeError(\".SdkTranscriptAlternative.entities: array expected\");\n            message.entities = [];\n            for (var i = 0; i < object.entities.length; ++i) {\n                if (typeof object.entities[i] !== \"object\")\n                    throw TypeError(\".SdkTranscriptAlternative.entities: object expected\");\n                message.entities[i] = $root.SdkTranscriptEntity.fromObject(object.entities[i]);\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkTranscriptAlternative message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkTranscriptAlternative\n     * @static\n     * @param {SdkTranscriptAlternative} message SdkTranscriptAlternative\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkTranscriptAlternative.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.arrays || options.defaults) {\n            object.items = [];\n            object.entities = [];\n        }\n        if (options.defaults)\n            object.transcript = \"\";\n        if (message.items && message.items.length) {\n            object.items = [];\n            for (var j = 0; j < message.items.length; ++j)\n                object.items[j] = $root.SdkTranscriptItem.toObject(message.items[j], options);\n        }\n        if (message.transcript != null && message.hasOwnProperty(\"transcript\"))\n            object.transcript = message.transcript;\n        if (message.entities && message.entities.length) {\n            object.entities = [];\n            for (var j = 0; j < message.entities.length; ++j)\n                object.entities[j] = $root.SdkTranscriptEntity.toObject(message.entities[j], options);\n        }\n        return object;\n    };\n\n    /**\n     * Converts this SdkTranscriptAlternative to JSON.\n     * @function toJSON\n     * @memberof SdkTranscriptAlternative\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkTranscriptAlternative.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkTranscriptAlternative\n     * @function getTypeUrl\n     * @memberof SdkTranscriptAlternative\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkTranscriptAlternative.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkTranscriptAlternative\";\n    };\n\n    return SdkTranscriptAlternative;\n})();\n\n$root.SdkTranscriptLanguageWithScore = (function() {\n\n    /**\n     * Properties of a SdkTranscriptLanguageWithScore.\n     * @name ISdkTranscriptLanguageWithScore\n     * @interface ISdkTranscriptLanguageWithScore\n     * @property {string|null} [languageCode] SdkTranscriptLanguageWithScore languageCode\n     * @property {number|null} [score] SdkTranscriptLanguageWithScore score\n     */\n\n    /**\n     * Constructs a new SdkTranscriptLanguageWithScore.\n     * @name SdkTranscriptLanguageWithScore\n     * @classdesc Represents a SdkTranscriptLanguageWithScore.\n     * @implements ISdkTranscriptLanguageWithScore\n     * @constructor\n     * @param {ISdkTranscriptLanguageWithScore=} [properties] Properties to set\n     */\n    function SdkTranscriptLanguageWithScore(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkTranscriptLanguageWithScore languageCode.\n     * @member {string} languageCode\n     * @memberof SdkTranscriptLanguageWithScore\n     * @instance\n     */\n    SdkTranscriptLanguageWithScore.prototype.languageCode = \"\";\n\n    /**\n     * SdkTranscriptLanguageWithScore score.\n     * @member {number} score\n     * @memberof SdkTranscriptLanguageWithScore\n     * @instance\n     */\n    SdkTranscriptLanguageWithScore.prototype.score = 0;\n\n    /**\n     * Creates a new SdkTranscriptLanguageWithScore instance using the specified properties.\n     * @function create\n     * @memberof SdkTranscriptLanguageWithScore\n     * @static\n     * @param {ISdkTranscriptLanguageWithScore=} [properties] Properties to set\n     * @returns {SdkTranscriptLanguageWithScore} SdkTranscriptLanguageWithScore instance\n     */\n    SdkTranscriptLanguageWithScore.create = function create(properties) {\n        return new SdkTranscriptLanguageWithScore(properties);\n    };\n\n    /**\n     * Encodes the specified SdkTranscriptLanguageWithScore message. Does not implicitly {@link SdkTranscriptLanguageWithScore.verify|verify} messages.\n     * @function encode\n     * @memberof SdkTranscriptLanguageWithScore\n     * @static\n     * @param {ISdkTranscriptLanguageWithScore} message SdkTranscriptLanguageWithScore message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTranscriptLanguageWithScore.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.languageCode != null && Object.hasOwnProperty.call(message, \"languageCode\"))\n            writer.uint32(/* id 1, wireType 2 =*/10).string(message.languageCode);\n        if (message.score != null && Object.hasOwnProperty.call(message, \"score\"))\n            writer.uint32(/* id 2, wireType 1 =*/17).double(message.score);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkTranscriptLanguageWithScore message, length delimited. Does not implicitly {@link SdkTranscriptLanguageWithScore.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkTranscriptLanguageWithScore\n     * @static\n     * @param {ISdkTranscriptLanguageWithScore} message SdkTranscriptLanguageWithScore message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTranscriptLanguageWithScore.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkTranscriptLanguageWithScore message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkTranscriptLanguageWithScore\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkTranscriptLanguageWithScore} SdkTranscriptLanguageWithScore\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTranscriptLanguageWithScore.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTranscriptLanguageWithScore();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.languageCode = reader.string();\n                    break;\n                }\n            case 2: {\n                    message.score = reader.double();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkTranscriptLanguageWithScore message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkTranscriptLanguageWithScore\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkTranscriptLanguageWithScore} SdkTranscriptLanguageWithScore\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTranscriptLanguageWithScore.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkTranscriptLanguageWithScore message.\n     * @function verify\n     * @memberof SdkTranscriptLanguageWithScore\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkTranscriptLanguageWithScore.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.languageCode != null && message.hasOwnProperty(\"languageCode\"))\n            if (!$util.isString(message.languageCode))\n                return \"languageCode: string expected\";\n        if (message.score != null && message.hasOwnProperty(\"score\"))\n            if (typeof message.score !== \"number\")\n                return \"score: number expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkTranscriptLanguageWithScore message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkTranscriptLanguageWithScore\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkTranscriptLanguageWithScore} SdkTranscriptLanguageWithScore\n     */\n    SdkTranscriptLanguageWithScore.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkTranscriptLanguageWithScore)\n            return object;\n        var message = new $root.SdkTranscriptLanguageWithScore();\n        if (object.languageCode != null)\n            message.languageCode = String(object.languageCode);\n        if (object.score != null)\n            message.score = Number(object.score);\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkTranscriptLanguageWithScore message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkTranscriptLanguageWithScore\n     * @static\n     * @param {SdkTranscriptLanguageWithScore} message SdkTranscriptLanguageWithScore\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkTranscriptLanguageWithScore.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            object.languageCode = \"\";\n            object.score = 0;\n        }\n        if (message.languageCode != null && message.hasOwnProperty(\"languageCode\"))\n            object.languageCode = message.languageCode;\n        if (message.score != null && message.hasOwnProperty(\"score\"))\n            object.score = options.json && !isFinite(message.score) ? String(message.score) : message.score;\n        return object;\n    };\n\n    /**\n     * Converts this SdkTranscriptLanguageWithScore to JSON.\n     * @function toJSON\n     * @memberof SdkTranscriptLanguageWithScore\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkTranscriptLanguageWithScore.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkTranscriptLanguageWithScore\n     * @function getTypeUrl\n     * @memberof SdkTranscriptLanguageWithScore\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkTranscriptLanguageWithScore.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkTranscriptLanguageWithScore\";\n    };\n\n    return SdkTranscriptLanguageWithScore;\n})();\n\n$root.SdkTranscriptResult = (function() {\n\n    /**\n     * Properties of a SdkTranscriptResult.\n     * @name ISdkTranscriptResult\n     * @interface ISdkTranscriptResult\n     * @property {Array.<ISdkTranscriptAlternative>|null} [alternatives] SdkTranscriptResult alternatives\n     * @property {string|null} [channelId] SdkTranscriptResult channelId\n     * @property {number|Long|null} [endTime] SdkTranscriptResult endTime\n     * @property {boolean|null} [isPartial] SdkTranscriptResult isPartial\n     * @property {string|null} [resultId] SdkTranscriptResult resultId\n     * @property {number|Long|null} [startTime] SdkTranscriptResult startTime\n     * @property {string|null} [languageCode] SdkTranscriptResult languageCode\n     * @property {Array.<ISdkTranscriptLanguageWithScore>|null} [languageIdentification] SdkTranscriptResult languageIdentification\n     */\n\n    /**\n     * Constructs a new SdkTranscriptResult.\n     * @name SdkTranscriptResult\n     * @classdesc Represents a SdkTranscriptResult.\n     * @implements ISdkTranscriptResult\n     * @constructor\n     * @param {ISdkTranscriptResult=} [properties] Properties to set\n     */\n    function SdkTranscriptResult(properties) {\n        this.alternatives = [];\n        this.languageIdentification = [];\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkTranscriptResult alternatives.\n     * @member {Array.<ISdkTranscriptAlternative>} alternatives\n     * @memberof SdkTranscriptResult\n     * @instance\n     */\n    SdkTranscriptResult.prototype.alternatives = $util.emptyArray;\n\n    /**\n     * SdkTranscriptResult channelId.\n     * @member {string} channelId\n     * @memberof SdkTranscriptResult\n     * @instance\n     */\n    SdkTranscriptResult.prototype.channelId = \"\";\n\n    /**\n     * SdkTranscriptResult endTime.\n     * @member {number|Long} endTime\n     * @memberof SdkTranscriptResult\n     * @instance\n     */\n    SdkTranscriptResult.prototype.endTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n    /**\n     * SdkTranscriptResult isPartial.\n     * @member {boolean} isPartial\n     * @memberof SdkTranscriptResult\n     * @instance\n     */\n    SdkTranscriptResult.prototype.isPartial = false;\n\n    /**\n     * SdkTranscriptResult resultId.\n     * @member {string} resultId\n     * @memberof SdkTranscriptResult\n     * @instance\n     */\n    SdkTranscriptResult.prototype.resultId = \"\";\n\n    /**\n     * SdkTranscriptResult startTime.\n     * @member {number|Long} startTime\n     * @memberof SdkTranscriptResult\n     * @instance\n     */\n    SdkTranscriptResult.prototype.startTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n    /**\n     * SdkTranscriptResult languageCode.\n     * @member {string} languageCode\n     * @memberof SdkTranscriptResult\n     * @instance\n     */\n    SdkTranscriptResult.prototype.languageCode = \"\";\n\n    /**\n     * SdkTranscriptResult languageIdentification.\n     * @member {Array.<ISdkTranscriptLanguageWithScore>} languageIdentification\n     * @memberof SdkTranscriptResult\n     * @instance\n     */\n    SdkTranscriptResult.prototype.languageIdentification = $util.emptyArray;\n\n    /**\n     * Creates a new SdkTranscriptResult instance using the specified properties.\n     * @function create\n     * @memberof SdkTranscriptResult\n     * @static\n     * @param {ISdkTranscriptResult=} [properties] Properties to set\n     * @returns {SdkTranscriptResult} SdkTranscriptResult instance\n     */\n    SdkTranscriptResult.create = function create(properties) {\n        return new SdkTranscriptResult(properties);\n    };\n\n    /**\n     * Encodes the specified SdkTranscriptResult message. Does not implicitly {@link SdkTranscriptResult.verify|verify} messages.\n     * @function encode\n     * @memberof SdkTranscriptResult\n     * @static\n     * @param {ISdkTranscriptResult} message SdkTranscriptResult message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTranscriptResult.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.alternatives != null && message.alternatives.length)\n            for (var i = 0; i < message.alternatives.length; ++i)\n                $root.SdkTranscriptAlternative.encode(message.alternatives[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n        if (message.channelId != null && Object.hasOwnProperty.call(message, \"channelId\"))\n            writer.uint32(/* id 2, wireType 2 =*/18).string(message.channelId);\n        if (message.endTime != null && Object.hasOwnProperty.call(message, \"endTime\"))\n            writer.uint32(/* id 3, wireType 0 =*/24).int64(message.endTime);\n        if (message.isPartial != null && Object.hasOwnProperty.call(message, \"isPartial\"))\n            writer.uint32(/* id 4, wireType 0 =*/32).bool(message.isPartial);\n        if (message.resultId != null && Object.hasOwnProperty.call(message, \"resultId\"))\n            writer.uint32(/* id 5, wireType 2 =*/42).string(message.resultId);\n        if (message.startTime != null && Object.hasOwnProperty.call(message, \"startTime\"))\n            writer.uint32(/* id 6, wireType 0 =*/48).int64(message.startTime);\n        if (message.languageCode != null && Object.hasOwnProperty.call(message, \"languageCode\"))\n            writer.uint32(/* id 7, wireType 2 =*/58).string(message.languageCode);\n        if (message.languageIdentification != null && message.languageIdentification.length)\n            for (var i = 0; i < message.languageIdentification.length; ++i)\n                $root.SdkTranscriptLanguageWithScore.encode(message.languageIdentification[i], writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim();\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkTranscriptResult message, length delimited. Does not implicitly {@link SdkTranscriptResult.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkTranscriptResult\n     * @static\n     * @param {ISdkTranscriptResult} message SdkTranscriptResult message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTranscriptResult.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkTranscriptResult message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkTranscriptResult\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkTranscriptResult} SdkTranscriptResult\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTranscriptResult.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTranscriptResult();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    if (!(message.alternatives && message.alternatives.length))\n                        message.alternatives = [];\n                    message.alternatives.push($root.SdkTranscriptAlternative.decode(reader, reader.uint32()));\n                    break;\n                }\n            case 2: {\n                    message.channelId = reader.string();\n                    break;\n                }\n            case 3: {\n                    message.endTime = reader.int64();\n                    break;\n                }\n            case 4: {\n                    message.isPartial = reader.bool();\n                    break;\n                }\n            case 5: {\n                    message.resultId = reader.string();\n                    break;\n                }\n            case 6: {\n                    message.startTime = reader.int64();\n                    break;\n                }\n            case 7: {\n                    message.languageCode = reader.string();\n                    break;\n                }\n            case 8: {\n                    if (!(message.languageIdentification && message.languageIdentification.length))\n                        message.languageIdentification = [];\n                    message.languageIdentification.push($root.SdkTranscriptLanguageWithScore.decode(reader, reader.uint32()));\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkTranscriptResult message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkTranscriptResult\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkTranscriptResult} SdkTranscriptResult\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTranscriptResult.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkTranscriptResult message.\n     * @function verify\n     * @memberof SdkTranscriptResult\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkTranscriptResult.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.alternatives != null && message.hasOwnProperty(\"alternatives\")) {\n            if (!Array.isArray(message.alternatives))\n                return \"alternatives: array expected\";\n            for (var i = 0; i < message.alternatives.length; ++i) {\n                var error = $root.SdkTranscriptAlternative.verify(message.alternatives[i]);\n                if (error)\n                    return \"alternatives.\" + error;\n            }\n        }\n        if (message.channelId != null && message.hasOwnProperty(\"channelId\"))\n            if (!$util.isString(message.channelId))\n                return \"channelId: string expected\";\n        if (message.endTime != null && message.hasOwnProperty(\"endTime\"))\n            if (!$util.isInteger(message.endTime) && !(message.endTime && $util.isInteger(message.endTime.low) && $util.isInteger(message.endTime.high)))\n                return \"endTime: integer|Long expected\";\n        if (message.isPartial != null && message.hasOwnProperty(\"isPartial\"))\n            if (typeof message.isPartial !== \"boolean\")\n                return \"isPartial: boolean expected\";\n        if (message.resultId != null && message.hasOwnProperty(\"resultId\"))\n            if (!$util.isString(message.resultId))\n                return \"resultId: string expected\";\n        if (message.startTime != null && message.hasOwnProperty(\"startTime\"))\n            if (!$util.isInteger(message.startTime) && !(message.startTime && $util.isInteger(message.startTime.low) && $util.isInteger(message.startTime.high)))\n                return \"startTime: integer|Long expected\";\n        if (message.languageCode != null && message.hasOwnProperty(\"languageCode\"))\n            if (!$util.isString(message.languageCode))\n                return \"languageCode: string expected\";\n        if (message.languageIdentification != null && message.hasOwnProperty(\"languageIdentification\")) {\n            if (!Array.isArray(message.languageIdentification))\n                return \"languageIdentification: array expected\";\n            for (var i = 0; i < message.languageIdentification.length; ++i) {\n                var error = $root.SdkTranscriptLanguageWithScore.verify(message.languageIdentification[i]);\n                if (error)\n                    return \"languageIdentification.\" + error;\n            }\n        }\n        return null;\n    };\n\n    /**\n     * Creates a SdkTranscriptResult message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkTranscriptResult\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkTranscriptResult} SdkTranscriptResult\n     */\n    SdkTranscriptResult.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkTranscriptResult)\n            return object;\n        var message = new $root.SdkTranscriptResult();\n        if (object.alternatives) {\n            if (!Array.isArray(object.alternatives))\n                throw TypeError(\".SdkTranscriptResult.alternatives: array expected\");\n            message.alternatives = [];\n            for (var i = 0; i < object.alternatives.length; ++i) {\n                if (typeof object.alternatives[i] !== \"object\")\n                    throw TypeError(\".SdkTranscriptResult.alternatives: object expected\");\n                message.alternatives[i] = $root.SdkTranscriptAlternative.fromObject(object.alternatives[i]);\n            }\n        }\n        if (object.channelId != null)\n            message.channelId = String(object.channelId);\n        if (object.endTime != null)\n            if ($util.Long)\n                (message.endTime = $util.Long.fromValue(object.endTime)).unsigned = false;\n            else if (typeof object.endTime === \"string\")\n                message.endTime = parseInt(object.endTime, 10);\n            else if (typeof object.endTime === \"number\")\n                message.endTime = object.endTime;\n            else if (typeof object.endTime === \"object\")\n                message.endTime = new $util.LongBits(object.endTime.low >>> 0, object.endTime.high >>> 0).toNumber();\n        if (object.isPartial != null)\n            message.isPartial = Boolean(object.isPartial);\n        if (object.resultId != null)\n            message.resultId = String(object.resultId);\n        if (object.startTime != null)\n            if ($util.Long)\n                (message.startTime = $util.Long.fromValue(object.startTime)).unsigned = false;\n            else if (typeof object.startTime === \"string\")\n                message.startTime = parseInt(object.startTime, 10);\n            else if (typeof object.startTime === \"number\")\n                message.startTime = object.startTime;\n            else if (typeof object.startTime === \"object\")\n                message.startTime = new $util.LongBits(object.startTime.low >>> 0, object.startTime.high >>> 0).toNumber();\n        if (object.languageCode != null)\n            message.languageCode = String(object.languageCode);\n        if (object.languageIdentification) {\n            if (!Array.isArray(object.languageIdentification))\n                throw TypeError(\".SdkTranscriptResult.languageIdentification: array expected\");\n            message.languageIdentification = [];\n            for (var i = 0; i < object.languageIdentification.length; ++i) {\n                if (typeof object.languageIdentification[i] !== \"object\")\n                    throw TypeError(\".SdkTranscriptResult.languageIdentification: object expected\");\n                message.languageIdentification[i] = $root.SdkTranscriptLanguageWithScore.fromObject(object.languageIdentification[i]);\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkTranscriptResult message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkTranscriptResult\n     * @static\n     * @param {SdkTranscriptResult} message SdkTranscriptResult\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkTranscriptResult.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.arrays || options.defaults) {\n            object.alternatives = [];\n            object.languageIdentification = [];\n        }\n        if (options.defaults) {\n            object.channelId = \"\";\n            if ($util.Long) {\n                var long = new $util.Long(0, 0, false);\n                object.endTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n            } else\n                object.endTime = options.longs === String ? \"0\" : 0;\n            object.isPartial = false;\n            object.resultId = \"\";\n            if ($util.Long) {\n                var long = new $util.Long(0, 0, false);\n                object.startTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n            } else\n                object.startTime = options.longs === String ? \"0\" : 0;\n            object.languageCode = \"\";\n        }\n        if (message.alternatives && message.alternatives.length) {\n            object.alternatives = [];\n            for (var j = 0; j < message.alternatives.length; ++j)\n                object.alternatives[j] = $root.SdkTranscriptAlternative.toObject(message.alternatives[j], options);\n        }\n        if (message.channelId != null && message.hasOwnProperty(\"channelId\"))\n            object.channelId = message.channelId;\n        if (message.endTime != null && message.hasOwnProperty(\"endTime\"))\n            if (typeof message.endTime === \"number\")\n                object.endTime = options.longs === String ? String(message.endTime) : message.endTime;\n            else\n                object.endTime = options.longs === String ? $util.Long.prototype.toString.call(message.endTime) : options.longs === Number ? new $util.LongBits(message.endTime.low >>> 0, message.endTime.high >>> 0).toNumber() : message.endTime;\n        if (message.isPartial != null && message.hasOwnProperty(\"isPartial\"))\n            object.isPartial = message.isPartial;\n        if (message.resultId != null && message.hasOwnProperty(\"resultId\"))\n            object.resultId = message.resultId;\n        if (message.startTime != null && message.hasOwnProperty(\"startTime\"))\n            if (typeof message.startTime === \"number\")\n                object.startTime = options.longs === String ? String(message.startTime) : message.startTime;\n            else\n                object.startTime = options.longs === String ? $util.Long.prototype.toString.call(message.startTime) : options.longs === Number ? new $util.LongBits(message.startTime.low >>> 0, message.startTime.high >>> 0).toNumber() : message.startTime;\n        if (message.languageCode != null && message.hasOwnProperty(\"languageCode\"))\n            object.languageCode = message.languageCode;\n        if (message.languageIdentification && message.languageIdentification.length) {\n            object.languageIdentification = [];\n            for (var j = 0; j < message.languageIdentification.length; ++j)\n                object.languageIdentification[j] = $root.SdkTranscriptLanguageWithScore.toObject(message.languageIdentification[j], options);\n        }\n        return object;\n    };\n\n    /**\n     * Converts this SdkTranscriptResult to JSON.\n     * @function toJSON\n     * @memberof SdkTranscriptResult\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkTranscriptResult.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkTranscriptResult\n     * @function getTypeUrl\n     * @memberof SdkTranscriptResult\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkTranscriptResult.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkTranscriptResult\";\n    };\n\n    return SdkTranscriptResult;\n})();\n\n$root.SdkTranscript = (function() {\n\n    /**\n     * Properties of a SdkTranscript.\n     * @name ISdkTranscript\n     * @interface ISdkTranscript\n     * @property {Array.<ISdkTranscriptResult>|null} [results] SdkTranscript results\n     */\n\n    /**\n     * Constructs a new SdkTranscript.\n     * @name SdkTranscript\n     * @classdesc Represents a SdkTranscript.\n     * @implements ISdkTranscript\n     * @constructor\n     * @param {ISdkTranscript=} [properties] Properties to set\n     */\n    function SdkTranscript(properties) {\n        this.results = [];\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkTranscript results.\n     * @member {Array.<ISdkTranscriptResult>} results\n     * @memberof SdkTranscript\n     * @instance\n     */\n    SdkTranscript.prototype.results = $util.emptyArray;\n\n    /**\n     * Creates a new SdkTranscript instance using the specified properties.\n     * @function create\n     * @memberof SdkTranscript\n     * @static\n     * @param {ISdkTranscript=} [properties] Properties to set\n     * @returns {SdkTranscript} SdkTranscript instance\n     */\n    SdkTranscript.create = function create(properties) {\n        return new SdkTranscript(properties);\n    };\n\n    /**\n     * Encodes the specified SdkTranscript message. Does not implicitly {@link SdkTranscript.verify|verify} messages.\n     * @function encode\n     * @memberof SdkTranscript\n     * @static\n     * @param {ISdkTranscript} message SdkTranscript message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTranscript.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.results != null && message.results.length)\n            for (var i = 0; i < message.results.length; ++i)\n                $root.SdkTranscriptResult.encode(message.results[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkTranscript message, length delimited. Does not implicitly {@link SdkTranscript.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkTranscript\n     * @static\n     * @param {ISdkTranscript} message SdkTranscript message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTranscript.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkTranscript message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkTranscript\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkTranscript} SdkTranscript\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTranscript.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTranscript();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    if (!(message.results && message.results.length))\n                        message.results = [];\n                    message.results.push($root.SdkTranscriptResult.decode(reader, reader.uint32()));\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkTranscript message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkTranscript\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkTranscript} SdkTranscript\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTranscript.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkTranscript message.\n     * @function verify\n     * @memberof SdkTranscript\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkTranscript.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.results != null && message.hasOwnProperty(\"results\")) {\n            if (!Array.isArray(message.results))\n                return \"results: array expected\";\n            for (var i = 0; i < message.results.length; ++i) {\n                var error = $root.SdkTranscriptResult.verify(message.results[i]);\n                if (error)\n                    return \"results.\" + error;\n            }\n        }\n        return null;\n    };\n\n    /**\n     * Creates a SdkTranscript message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkTranscript\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkTranscript} SdkTranscript\n     */\n    SdkTranscript.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkTranscript)\n            return object;\n        var message = new $root.SdkTranscript();\n        if (object.results) {\n            if (!Array.isArray(object.results))\n                throw TypeError(\".SdkTranscript.results: array expected\");\n            message.results = [];\n            for (var i = 0; i < object.results.length; ++i) {\n                if (typeof object.results[i] !== \"object\")\n                    throw TypeError(\".SdkTranscript.results: object expected\");\n                message.results[i] = $root.SdkTranscriptResult.fromObject(object.results[i]);\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkTranscript message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkTranscript\n     * @static\n     * @param {SdkTranscript} message SdkTranscript\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkTranscript.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.arrays || options.defaults)\n            object.results = [];\n        if (message.results && message.results.length) {\n            object.results = [];\n            for (var j = 0; j < message.results.length; ++j)\n                object.results[j] = $root.SdkTranscriptResult.toObject(message.results[j], options);\n        }\n        return object;\n    };\n\n    /**\n     * Converts this SdkTranscript to JSON.\n     * @function toJSON\n     * @memberof SdkTranscript\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkTranscript.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkTranscript\n     * @function getTypeUrl\n     * @memberof SdkTranscript\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkTranscript.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkTranscript\";\n    };\n\n    return SdkTranscript;\n})();\n\n$root.SdkTranscriptionStatus = (function() {\n\n    /**\n     * Properties of a SdkTranscriptionStatus.\n     * @name ISdkTranscriptionStatus\n     * @interface ISdkTranscriptionStatus\n     * @property {SdkTranscriptionStatus.Type|null} [type] SdkTranscriptionStatus type\n     * @property {number|Long|null} [eventTime] SdkTranscriptionStatus eventTime\n     * @property {string|null} [transcriptionRegion] SdkTranscriptionStatus transcriptionRegion\n     * @property {string|null} [transcriptionConfiguration] SdkTranscriptionStatus transcriptionConfiguration\n     * @property {string|null} [message] SdkTranscriptionStatus message\n     */\n\n    /**\n     * Constructs a new SdkTranscriptionStatus.\n     * @name SdkTranscriptionStatus\n     * @classdesc Represents a SdkTranscriptionStatus.\n     * @implements ISdkTranscriptionStatus\n     * @constructor\n     * @param {ISdkTranscriptionStatus=} [properties] Properties to set\n     */\n    function SdkTranscriptionStatus(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkTranscriptionStatus type.\n     * @member {SdkTranscriptionStatus.Type} type\n     * @memberof SdkTranscriptionStatus\n     * @instance\n     */\n    SdkTranscriptionStatus.prototype.type = 1;\n\n    /**\n     * SdkTranscriptionStatus eventTime.\n     * @member {number|Long} eventTime\n     * @memberof SdkTranscriptionStatus\n     * @instance\n     */\n    SdkTranscriptionStatus.prototype.eventTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n    /**\n     * SdkTranscriptionStatus transcriptionRegion.\n     * @member {string} transcriptionRegion\n     * @memberof SdkTranscriptionStatus\n     * @instance\n     */\n    SdkTranscriptionStatus.prototype.transcriptionRegion = \"\";\n\n    /**\n     * SdkTranscriptionStatus transcriptionConfiguration.\n     * @member {string} transcriptionConfiguration\n     * @memberof SdkTranscriptionStatus\n     * @instance\n     */\n    SdkTranscriptionStatus.prototype.transcriptionConfiguration = \"\";\n\n    /**\n     * SdkTranscriptionStatus message.\n     * @member {string} message\n     * @memberof SdkTranscriptionStatus\n     * @instance\n     */\n    SdkTranscriptionStatus.prototype.message = \"\";\n\n    /**\n     * Creates a new SdkTranscriptionStatus instance using the specified properties.\n     * @function create\n     * @memberof SdkTranscriptionStatus\n     * @static\n     * @param {ISdkTranscriptionStatus=} [properties] Properties to set\n     * @returns {SdkTranscriptionStatus} SdkTranscriptionStatus instance\n     */\n    SdkTranscriptionStatus.create = function create(properties) {\n        return new SdkTranscriptionStatus(properties);\n    };\n\n    /**\n     * Encodes the specified SdkTranscriptionStatus message. Does not implicitly {@link SdkTranscriptionStatus.verify|verify} messages.\n     * @function encode\n     * @memberof SdkTranscriptionStatus\n     * @static\n     * @param {ISdkTranscriptionStatus} message SdkTranscriptionStatus message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTranscriptionStatus.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.type != null && Object.hasOwnProperty.call(message, \"type\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).int32(message.type);\n        if (message.eventTime != null && Object.hasOwnProperty.call(message, \"eventTime\"))\n            writer.uint32(/* id 2, wireType 0 =*/16).int64(message.eventTime);\n        if (message.transcriptionRegion != null && Object.hasOwnProperty.call(message, \"transcriptionRegion\"))\n            writer.uint32(/* id 3, wireType 2 =*/26).string(message.transcriptionRegion);\n        if (message.transcriptionConfiguration != null && Object.hasOwnProperty.call(message, \"transcriptionConfiguration\"))\n            writer.uint32(/* id 4, wireType 2 =*/34).string(message.transcriptionConfiguration);\n        if (message.message != null && Object.hasOwnProperty.call(message, \"message\"))\n            writer.uint32(/* id 5, wireType 2 =*/42).string(message.message);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkTranscriptionStatus message, length delimited. Does not implicitly {@link SdkTranscriptionStatus.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkTranscriptionStatus\n     * @static\n     * @param {ISdkTranscriptionStatus} message SdkTranscriptionStatus message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTranscriptionStatus.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkTranscriptionStatus message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkTranscriptionStatus\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkTranscriptionStatus} SdkTranscriptionStatus\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTranscriptionStatus.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTranscriptionStatus();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.type = reader.int32();\n                    break;\n                }\n            case 2: {\n                    message.eventTime = reader.int64();\n                    break;\n                }\n            case 3: {\n                    message.transcriptionRegion = reader.string();\n                    break;\n                }\n            case 4: {\n                    message.transcriptionConfiguration = reader.string();\n                    break;\n                }\n            case 5: {\n                    message.message = reader.string();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkTranscriptionStatus message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkTranscriptionStatus\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkTranscriptionStatus} SdkTranscriptionStatus\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTranscriptionStatus.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkTranscriptionStatus message.\n     * @function verify\n     * @memberof SdkTranscriptionStatus\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkTranscriptionStatus.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.type != null && message.hasOwnProperty(\"type\"))\n            switch (message.type) {\n            default:\n                return \"type: enum value expected\";\n            case 1:\n            case 2:\n            case 3:\n            case 4:\n            case 5:\n                break;\n            }\n        if (message.eventTime != null && message.hasOwnProperty(\"eventTime\"))\n            if (!$util.isInteger(message.eventTime) && !(message.eventTime && $util.isInteger(message.eventTime.low) && $util.isInteger(message.eventTime.high)))\n                return \"eventTime: integer|Long expected\";\n        if (message.transcriptionRegion != null && message.hasOwnProperty(\"transcriptionRegion\"))\n            if (!$util.isString(message.transcriptionRegion))\n                return \"transcriptionRegion: string expected\";\n        if (message.transcriptionConfiguration != null && message.hasOwnProperty(\"transcriptionConfiguration\"))\n            if (!$util.isString(message.transcriptionConfiguration))\n                return \"transcriptionConfiguration: string expected\";\n        if (message.message != null && message.hasOwnProperty(\"message\"))\n            if (!$util.isString(message.message))\n                return \"message: string expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkTranscriptionStatus message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkTranscriptionStatus\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkTranscriptionStatus} SdkTranscriptionStatus\n     */\n    SdkTranscriptionStatus.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkTranscriptionStatus)\n            return object;\n        var message = new $root.SdkTranscriptionStatus();\n        switch (object.type) {\n        default:\n            if (typeof object.type === \"number\") {\n                message.type = object.type;\n                break;\n            }\n            break;\n        case \"STARTED\":\n        case 1:\n            message.type = 1;\n            break;\n        case \"INTERRUPTED\":\n        case 2:\n            message.type = 2;\n            break;\n        case \"RESUMED\":\n        case 3:\n            message.type = 3;\n            break;\n        case \"STOPPED\":\n        case 4:\n            message.type = 4;\n            break;\n        case \"FAILED\":\n        case 5:\n            message.type = 5;\n            break;\n        }\n        if (object.eventTime != null)\n            if ($util.Long)\n                (message.eventTime = $util.Long.fromValue(object.eventTime)).unsigned = false;\n            else if (typeof object.eventTime === \"string\")\n                message.eventTime = parseInt(object.eventTime, 10);\n            else if (typeof object.eventTime === \"number\")\n                message.eventTime = object.eventTime;\n            else if (typeof object.eventTime === \"object\")\n                message.eventTime = new $util.LongBits(object.eventTime.low >>> 0, object.eventTime.high >>> 0).toNumber();\n        if (object.transcriptionRegion != null)\n            message.transcriptionRegion = String(object.transcriptionRegion);\n        if (object.transcriptionConfiguration != null)\n            message.transcriptionConfiguration = String(object.transcriptionConfiguration);\n        if (object.message != null)\n            message.message = String(object.message);\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkTranscriptionStatus message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkTranscriptionStatus\n     * @static\n     * @param {SdkTranscriptionStatus} message SdkTranscriptionStatus\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkTranscriptionStatus.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            object.type = options.enums === String ? \"STARTED\" : 1;\n            if ($util.Long) {\n                var long = new $util.Long(0, 0, false);\n                object.eventTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n            } else\n                object.eventTime = options.longs === String ? \"0\" : 0;\n            object.transcriptionRegion = \"\";\n            object.transcriptionConfiguration = \"\";\n            object.message = \"\";\n        }\n        if (message.type != null && message.hasOwnProperty(\"type\"))\n            object.type = options.enums === String ? $root.SdkTranscriptionStatus.Type[message.type] === undefined ? message.type : $root.SdkTranscriptionStatus.Type[message.type] : message.type;\n        if (message.eventTime != null && message.hasOwnProperty(\"eventTime\"))\n            if (typeof message.eventTime === \"number\")\n                object.eventTime = options.longs === String ? String(message.eventTime) : message.eventTime;\n            else\n                object.eventTime = options.longs === String ? $util.Long.prototype.toString.call(message.eventTime) : options.longs === Number ? new $util.LongBits(message.eventTime.low >>> 0, message.eventTime.high >>> 0).toNumber() : message.eventTime;\n        if (message.transcriptionRegion != null && message.hasOwnProperty(\"transcriptionRegion\"))\n            object.transcriptionRegion = message.transcriptionRegion;\n        if (message.transcriptionConfiguration != null && message.hasOwnProperty(\"transcriptionConfiguration\"))\n            object.transcriptionConfiguration = message.transcriptionConfiguration;\n        if (message.message != null && message.hasOwnProperty(\"message\"))\n            object.message = message.message;\n        return object;\n    };\n\n    /**\n     * Converts this SdkTranscriptionStatus to JSON.\n     * @function toJSON\n     * @memberof SdkTranscriptionStatus\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkTranscriptionStatus.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkTranscriptionStatus\n     * @function getTypeUrl\n     * @memberof SdkTranscriptionStatus\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkTranscriptionStatus.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkTranscriptionStatus\";\n    };\n\n    /**\n     * Type enum.\n     * @name SdkTranscriptionStatus.Type\n     * @enum {number}\n     * @property {number} STARTED=1 STARTED value\n     * @property {number} INTERRUPTED=2 INTERRUPTED value\n     * @property {number} RESUMED=3 RESUMED value\n     * @property {number} STOPPED=4 STOPPED value\n     * @property {number} FAILED=5 FAILED value\n     */\n    SdkTranscriptionStatus.Type = (function() {\n        var valuesById = {}, values = Object.create(valuesById);\n        values[valuesById[1] = \"STARTED\"] = 1;\n        values[valuesById[2] = \"INTERRUPTED\"] = 2;\n        values[valuesById[3] = \"RESUMED\"] = 3;\n        values[valuesById[4] = \"STOPPED\"] = 4;\n        values[valuesById[5] = \"FAILED\"] = 5;\n        return values;\n    })();\n\n    return SdkTranscriptionStatus;\n})();\n\n$root.SdkTranscriptEvent = (function() {\n\n    /**\n     * Properties of a SdkTranscriptEvent.\n     * @name ISdkTranscriptEvent\n     * @interface ISdkTranscriptEvent\n     * @property {ISdkTranscriptionStatus|null} [status] SdkTranscriptEvent status\n     * @property {ISdkTranscript|null} [transcript] SdkTranscriptEvent transcript\n     */\n\n    /**\n     * Constructs a new SdkTranscriptEvent.\n     * @name SdkTranscriptEvent\n     * @classdesc Represents a SdkTranscriptEvent.\n     * @implements ISdkTranscriptEvent\n     * @constructor\n     * @param {ISdkTranscriptEvent=} [properties] Properties to set\n     */\n    function SdkTranscriptEvent(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkTranscriptEvent status.\n     * @member {ISdkTranscriptionStatus|null|undefined} status\n     * @memberof SdkTranscriptEvent\n     * @instance\n     */\n    SdkTranscriptEvent.prototype.status = null;\n\n    /**\n     * SdkTranscriptEvent transcript.\n     * @member {ISdkTranscript|null|undefined} transcript\n     * @memberof SdkTranscriptEvent\n     * @instance\n     */\n    SdkTranscriptEvent.prototype.transcript = null;\n\n    // OneOf field names bound to virtual getters and setters\n    var $oneOfFields;\n\n    /**\n     * SdkTranscriptEvent Event.\n     * @member {\"status\"|\"transcript\"|undefined} Event\n     * @memberof SdkTranscriptEvent\n     * @instance\n     */\n    Object.defineProperty(SdkTranscriptEvent.prototype, \"Event\", {\n        get: $util.oneOfGetter($oneOfFields = [\"status\", \"transcript\"]),\n        set: $util.oneOfSetter($oneOfFields)\n    });\n\n    /**\n     * Creates a new SdkTranscriptEvent instance using the specified properties.\n     * @function create\n     * @memberof SdkTranscriptEvent\n     * @static\n     * @param {ISdkTranscriptEvent=} [properties] Properties to set\n     * @returns {SdkTranscriptEvent} SdkTranscriptEvent instance\n     */\n    SdkTranscriptEvent.create = function create(properties) {\n        return new SdkTranscriptEvent(properties);\n    };\n\n    /**\n     * Encodes the specified SdkTranscriptEvent message. Does not implicitly {@link SdkTranscriptEvent.verify|verify} messages.\n     * @function encode\n     * @memberof SdkTranscriptEvent\n     * @static\n     * @param {ISdkTranscriptEvent} message SdkTranscriptEvent message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTranscriptEvent.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.status != null && Object.hasOwnProperty.call(message, \"status\"))\n            $root.SdkTranscriptionStatus.encode(message.status, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n        if (message.transcript != null && Object.hasOwnProperty.call(message, \"transcript\"))\n            $root.SdkTranscript.encode(message.transcript, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkTranscriptEvent message, length delimited. Does not implicitly {@link SdkTranscriptEvent.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkTranscriptEvent\n     * @static\n     * @param {ISdkTranscriptEvent} message SdkTranscriptEvent message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTranscriptEvent.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkTranscriptEvent message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkTranscriptEvent\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkTranscriptEvent} SdkTranscriptEvent\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTranscriptEvent.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTranscriptEvent();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.status = $root.SdkTranscriptionStatus.decode(reader, reader.uint32());\n                    break;\n                }\n            case 2: {\n                    message.transcript = $root.SdkTranscript.decode(reader, reader.uint32());\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkTranscriptEvent message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkTranscriptEvent\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkTranscriptEvent} SdkTranscriptEvent\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTranscriptEvent.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkTranscriptEvent message.\n     * @function verify\n     * @memberof SdkTranscriptEvent\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkTranscriptEvent.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        var properties = {};\n        if (message.status != null && message.hasOwnProperty(\"status\")) {\n            properties.Event = 1;\n            {\n                var error = $root.SdkTranscriptionStatus.verify(message.status);\n                if (error)\n                    return \"status.\" + error;\n            }\n        }\n        if (message.transcript != null && message.hasOwnProperty(\"transcript\")) {\n            if (properties.Event === 1)\n                return \"Event: multiple values\";\n            properties.Event = 1;\n            {\n                var error = $root.SdkTranscript.verify(message.transcript);\n                if (error)\n                    return \"transcript.\" + error;\n            }\n        }\n        return null;\n    };\n\n    /**\n     * Creates a SdkTranscriptEvent message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkTranscriptEvent\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkTranscriptEvent} SdkTranscriptEvent\n     */\n    SdkTranscriptEvent.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkTranscriptEvent)\n            return object;\n        var message = new $root.SdkTranscriptEvent();\n        if (object.status != null) {\n            if (typeof object.status !== \"object\")\n                throw TypeError(\".SdkTranscriptEvent.status: object expected\");\n            message.status = $root.SdkTranscriptionStatus.fromObject(object.status);\n        }\n        if (object.transcript != null) {\n            if (typeof object.transcript !== \"object\")\n                throw TypeError(\".SdkTranscriptEvent.transcript: object expected\");\n            message.transcript = $root.SdkTranscript.fromObject(object.transcript);\n        }\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkTranscriptEvent message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkTranscriptEvent\n     * @static\n     * @param {SdkTranscriptEvent} message SdkTranscriptEvent\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkTranscriptEvent.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (message.status != null && message.hasOwnProperty(\"status\")) {\n            object.status = $root.SdkTranscriptionStatus.toObject(message.status, options);\n            if (options.oneofs)\n                object.Event = \"status\";\n        }\n        if (message.transcript != null && message.hasOwnProperty(\"transcript\")) {\n            object.transcript = $root.SdkTranscript.toObject(message.transcript, options);\n            if (options.oneofs)\n                object.Event = \"transcript\";\n        }\n        return object;\n    };\n\n    /**\n     * Converts this SdkTranscriptEvent to JSON.\n     * @function toJSON\n     * @memberof SdkTranscriptEvent\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkTranscriptEvent.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkTranscriptEvent\n     * @function getTypeUrl\n     * @memberof SdkTranscriptEvent\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkTranscriptEvent.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkTranscriptEvent\";\n    };\n\n    return SdkTranscriptEvent;\n})();\n\n$root.SdkTranscriptFrame = (function() {\n\n    /**\n     * Properties of a SdkTranscriptFrame.\n     * @name ISdkTranscriptFrame\n     * @interface ISdkTranscriptFrame\n     * @property {Array.<ISdkTranscriptEvent>|null} [events] SdkTranscriptFrame events\n     */\n\n    /**\n     * Constructs a new SdkTranscriptFrame.\n     * @name SdkTranscriptFrame\n     * @classdesc Represents a SdkTranscriptFrame.\n     * @implements ISdkTranscriptFrame\n     * @constructor\n     * @param {ISdkTranscriptFrame=} [properties] Properties to set\n     */\n    function SdkTranscriptFrame(properties) {\n        this.events = [];\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkTranscriptFrame events.\n     * @member {Array.<ISdkTranscriptEvent>} events\n     * @memberof SdkTranscriptFrame\n     * @instance\n     */\n    SdkTranscriptFrame.prototype.events = $util.emptyArray;\n\n    /**\n     * Creates a new SdkTranscriptFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkTranscriptFrame\n     * @static\n     * @param {ISdkTranscriptFrame=} [properties] Properties to set\n     * @returns {SdkTranscriptFrame} SdkTranscriptFrame instance\n     */\n    SdkTranscriptFrame.create = function create(properties) {\n        return new SdkTranscriptFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkTranscriptFrame message. Does not implicitly {@link SdkTranscriptFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkTranscriptFrame\n     * @static\n     * @param {ISdkTranscriptFrame} message SdkTranscriptFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTranscriptFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.events != null && message.events.length)\n            for (var i = 0; i < message.events.length; ++i)\n                $root.SdkTranscriptEvent.encode(message.events[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkTranscriptFrame message, length delimited. Does not implicitly {@link SdkTranscriptFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkTranscriptFrame\n     * @static\n     * @param {ISdkTranscriptFrame} message SdkTranscriptFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkTranscriptFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkTranscriptFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkTranscriptFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkTranscriptFrame} SdkTranscriptFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTranscriptFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTranscriptFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    if (!(message.events && message.events.length))\n                        message.events = [];\n                    message.events.push($root.SdkTranscriptEvent.decode(reader, reader.uint32()));\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkTranscriptFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkTranscriptFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkTranscriptFrame} SdkTranscriptFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkTranscriptFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkTranscriptFrame message.\n     * @function verify\n     * @memberof SdkTranscriptFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkTranscriptFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.events != null && message.hasOwnProperty(\"events\")) {\n            if (!Array.isArray(message.events))\n                return \"events: array expected\";\n            for (var i = 0; i < message.events.length; ++i) {\n                var error = $root.SdkTranscriptEvent.verify(message.events[i]);\n                if (error)\n                    return \"events.\" + error;\n            }\n        }\n        return null;\n    };\n\n    /**\n     * Creates a SdkTranscriptFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkTranscriptFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkTranscriptFrame} SdkTranscriptFrame\n     */\n    SdkTranscriptFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkTranscriptFrame)\n            return object;\n        var message = new $root.SdkTranscriptFrame();\n        if (object.events) {\n            if (!Array.isArray(object.events))\n                throw TypeError(\".SdkTranscriptFrame.events: array expected\");\n            message.events = [];\n            for (var i = 0; i < object.events.length; ++i) {\n                if (typeof object.events[i] !== \"object\")\n                    throw TypeError(\".SdkTranscriptFrame.events: object expected\");\n                message.events[i] = $root.SdkTranscriptEvent.fromObject(object.events[i]);\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkTranscriptFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkTranscriptFrame\n     * @static\n     * @param {SdkTranscriptFrame} message SdkTranscriptFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkTranscriptFrame.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.arrays || options.defaults)\n            object.events = [];\n        if (message.events && message.events.length) {\n            object.events = [];\n            for (var j = 0; j < message.events.length; ++j)\n                object.events[j] = $root.SdkTranscriptEvent.toObject(message.events[j], options);\n        }\n        return object;\n    };\n\n    /**\n     * Converts this SdkTranscriptFrame to JSON.\n     * @function toJSON\n     * @memberof SdkTranscriptFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkTranscriptFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkTranscriptFrame\n     * @function getTypeUrl\n     * @memberof SdkTranscriptFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkTranscriptFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkTranscriptFrame\";\n    };\n\n    return SdkTranscriptFrame;\n})();\n\n$root.SdkRemoteVideoUpdateFrame = (function() {\n\n    /**\n     * Properties of a SdkRemoteVideoUpdateFrame.\n     * @name ISdkRemoteVideoUpdateFrame\n     * @interface ISdkRemoteVideoUpdateFrame\n     * @property {Array.<ISdkVideoSubscriptionConfiguration>|null} [addedOrUpdatedVideoSubscriptions] SdkRemoteVideoUpdateFrame addedOrUpdatedVideoSubscriptions\n     * @property {Array.<string>|null} [removedVideoSubscriptionMids] SdkRemoteVideoUpdateFrame removedVideoSubscriptionMids\n     */\n\n    /**\n     * Constructs a new SdkRemoteVideoUpdateFrame.\n     * @name SdkRemoteVideoUpdateFrame\n     * @classdesc Represents a SdkRemoteVideoUpdateFrame.\n     * @implements ISdkRemoteVideoUpdateFrame\n     * @constructor\n     * @param {ISdkRemoteVideoUpdateFrame=} [properties] Properties to set\n     */\n    function SdkRemoteVideoUpdateFrame(properties) {\n        this.addedOrUpdatedVideoSubscriptions = [];\n        this.removedVideoSubscriptionMids = [];\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkRemoteVideoUpdateFrame addedOrUpdatedVideoSubscriptions.\n     * @member {Array.<ISdkVideoSubscriptionConfiguration>} addedOrUpdatedVideoSubscriptions\n     * @memberof SdkRemoteVideoUpdateFrame\n     * @instance\n     */\n    SdkRemoteVideoUpdateFrame.prototype.addedOrUpdatedVideoSubscriptions = $util.emptyArray;\n\n    /**\n     * SdkRemoteVideoUpdateFrame removedVideoSubscriptionMids.\n     * @member {Array.<string>} removedVideoSubscriptionMids\n     * @memberof SdkRemoteVideoUpdateFrame\n     * @instance\n     */\n    SdkRemoteVideoUpdateFrame.prototype.removedVideoSubscriptionMids = $util.emptyArray;\n\n    /**\n     * Creates a new SdkRemoteVideoUpdateFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkRemoteVideoUpdateFrame\n     * @static\n     * @param {ISdkRemoteVideoUpdateFrame=} [properties] Properties to set\n     * @returns {SdkRemoteVideoUpdateFrame} SdkRemoteVideoUpdateFrame instance\n     */\n    SdkRemoteVideoUpdateFrame.create = function create(properties) {\n        return new SdkRemoteVideoUpdateFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkRemoteVideoUpdateFrame message. Does not implicitly {@link SdkRemoteVideoUpdateFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkRemoteVideoUpdateFrame\n     * @static\n     * @param {ISdkRemoteVideoUpdateFrame} message SdkRemoteVideoUpdateFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkRemoteVideoUpdateFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.addedOrUpdatedVideoSubscriptions != null && message.addedOrUpdatedVideoSubscriptions.length)\n            for (var i = 0; i < message.addedOrUpdatedVideoSubscriptions.length; ++i)\n                $root.SdkVideoSubscriptionConfiguration.encode(message.addedOrUpdatedVideoSubscriptions[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n        if (message.removedVideoSubscriptionMids != null && message.removedVideoSubscriptionMids.length)\n            for (var i = 0; i < message.removedVideoSubscriptionMids.length; ++i)\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.removedVideoSubscriptionMids[i]);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkRemoteVideoUpdateFrame message, length delimited. Does not implicitly {@link SdkRemoteVideoUpdateFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkRemoteVideoUpdateFrame\n     * @static\n     * @param {ISdkRemoteVideoUpdateFrame} message SdkRemoteVideoUpdateFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkRemoteVideoUpdateFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkRemoteVideoUpdateFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkRemoteVideoUpdateFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkRemoteVideoUpdateFrame} SdkRemoteVideoUpdateFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkRemoteVideoUpdateFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkRemoteVideoUpdateFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    if (!(message.addedOrUpdatedVideoSubscriptions && message.addedOrUpdatedVideoSubscriptions.length))\n                        message.addedOrUpdatedVideoSubscriptions = [];\n                    message.addedOrUpdatedVideoSubscriptions.push($root.SdkVideoSubscriptionConfiguration.decode(reader, reader.uint32()));\n                    break;\n                }\n            case 2: {\n                    if (!(message.removedVideoSubscriptionMids && message.removedVideoSubscriptionMids.length))\n                        message.removedVideoSubscriptionMids = [];\n                    message.removedVideoSubscriptionMids.push(reader.string());\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkRemoteVideoUpdateFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkRemoteVideoUpdateFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkRemoteVideoUpdateFrame} SdkRemoteVideoUpdateFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkRemoteVideoUpdateFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkRemoteVideoUpdateFrame message.\n     * @function verify\n     * @memberof SdkRemoteVideoUpdateFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkRemoteVideoUpdateFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.addedOrUpdatedVideoSubscriptions != null && message.hasOwnProperty(\"addedOrUpdatedVideoSubscriptions\")) {\n            if (!Array.isArray(message.addedOrUpdatedVideoSubscriptions))\n                return \"addedOrUpdatedVideoSubscriptions: array expected\";\n            for (var i = 0; i < message.addedOrUpdatedVideoSubscriptions.length; ++i) {\n                var error = $root.SdkVideoSubscriptionConfiguration.verify(message.addedOrUpdatedVideoSubscriptions[i]);\n                if (error)\n                    return \"addedOrUpdatedVideoSubscriptions.\" + error;\n            }\n        }\n        if (message.removedVideoSubscriptionMids != null && message.hasOwnProperty(\"removedVideoSubscriptionMids\")) {\n            if (!Array.isArray(message.removedVideoSubscriptionMids))\n                return \"removedVideoSubscriptionMids: array expected\";\n            for (var i = 0; i < message.removedVideoSubscriptionMids.length; ++i)\n                if (!$util.isString(message.removedVideoSubscriptionMids[i]))\n                    return \"removedVideoSubscriptionMids: string[] expected\";\n        }\n        return null;\n    };\n\n    /**\n     * Creates a SdkRemoteVideoUpdateFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkRemoteVideoUpdateFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkRemoteVideoUpdateFrame} SdkRemoteVideoUpdateFrame\n     */\n    SdkRemoteVideoUpdateFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkRemoteVideoUpdateFrame)\n            return object;\n        var message = new $root.SdkRemoteVideoUpdateFrame();\n        if (object.addedOrUpdatedVideoSubscriptions) {\n            if (!Array.isArray(object.addedOrUpdatedVideoSubscriptions))\n                throw TypeError(\".SdkRemoteVideoUpdateFrame.addedOrUpdatedVideoSubscriptions: array expected\");\n            message.addedOrUpdatedVideoSubscriptions = [];\n            for (var i = 0; i < object.addedOrUpdatedVideoSubscriptions.length; ++i) {\n                if (typeof object.addedOrUpdatedVideoSubscriptions[i] !== \"object\")\n                    throw TypeError(\".SdkRemoteVideoUpdateFrame.addedOrUpdatedVideoSubscriptions: object expected\");\n                message.addedOrUpdatedVideoSubscriptions[i] = $root.SdkVideoSubscriptionConfiguration.fromObject(object.addedOrUpdatedVideoSubscriptions[i]);\n            }\n        }\n        if (object.removedVideoSubscriptionMids) {\n            if (!Array.isArray(object.removedVideoSubscriptionMids))\n                throw TypeError(\".SdkRemoteVideoUpdateFrame.removedVideoSubscriptionMids: array expected\");\n            message.removedVideoSubscriptionMids = [];\n            for (var i = 0; i < object.removedVideoSubscriptionMids.length; ++i)\n                message.removedVideoSubscriptionMids[i] = String(object.removedVideoSubscriptionMids[i]);\n        }\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkRemoteVideoUpdateFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkRemoteVideoUpdateFrame\n     * @static\n     * @param {SdkRemoteVideoUpdateFrame} message SdkRemoteVideoUpdateFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkRemoteVideoUpdateFrame.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.arrays || options.defaults) {\n            object.addedOrUpdatedVideoSubscriptions = [];\n            object.removedVideoSubscriptionMids = [];\n        }\n        if (message.addedOrUpdatedVideoSubscriptions && message.addedOrUpdatedVideoSubscriptions.length) {\n            object.addedOrUpdatedVideoSubscriptions = [];\n            for (var j = 0; j < message.addedOrUpdatedVideoSubscriptions.length; ++j)\n                object.addedOrUpdatedVideoSubscriptions[j] = $root.SdkVideoSubscriptionConfiguration.toObject(message.addedOrUpdatedVideoSubscriptions[j], options);\n        }\n        if (message.removedVideoSubscriptionMids && message.removedVideoSubscriptionMids.length) {\n            object.removedVideoSubscriptionMids = [];\n            for (var j = 0; j < message.removedVideoSubscriptionMids.length; ++j)\n                object.removedVideoSubscriptionMids[j] = message.removedVideoSubscriptionMids[j];\n        }\n        return object;\n    };\n\n    /**\n     * Converts this SdkRemoteVideoUpdateFrame to JSON.\n     * @function toJSON\n     * @memberof SdkRemoteVideoUpdateFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkRemoteVideoUpdateFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkRemoteVideoUpdateFrame\n     * @function getTypeUrl\n     * @memberof SdkRemoteVideoUpdateFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkRemoteVideoUpdateFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkRemoteVideoUpdateFrame\";\n    };\n\n    return SdkRemoteVideoUpdateFrame;\n})();\n\n/**\n * SdkVideoQualityAdaptationPreference enum.\n * @name SdkVideoQualityAdaptationPreference\n * @enum {number}\n * @property {number} BALANCED=1 BALANCED value\n * @property {number} MAINTAIN_FRAMERATE=2 MAINTAIN_FRAMERATE value\n * @property {number} MAINTAIN_RESOLUTION=3 MAINTAIN_RESOLUTION value\n */\n$root.SdkVideoQualityAdaptationPreference = (function() {\n    var valuesById = {}, values = Object.create(valuesById);\n    values[valuesById[1] = \"BALANCED\"] = 1;\n    values[valuesById[2] = \"MAINTAIN_FRAMERATE\"] = 2;\n    values[valuesById[3] = \"MAINTAIN_RESOLUTION\"] = 3;\n    return values;\n})();\n\n$root.SdkVideoSubscriptionConfiguration = (function() {\n\n    /**\n     * Properties of a SdkVideoSubscriptionConfiguration.\n     * @name ISdkVideoSubscriptionConfiguration\n     * @interface ISdkVideoSubscriptionConfiguration\n     * @property {string} mid SdkVideoSubscriptionConfiguration mid\n     * @property {string|null} [attendeeId] SdkVideoSubscriptionConfiguration attendeeId\n     * @property {number|null} [streamId] SdkVideoSubscriptionConfiguration streamId\n     * @property {number|null} [priority] SdkVideoSubscriptionConfiguration priority\n     * @property {number|null} [targetBitrateKbps] SdkVideoSubscriptionConfiguration targetBitrateKbps\n     * @property {number|null} [groupId] SdkVideoSubscriptionConfiguration groupId\n     * @property {SdkVideoQualityAdaptationPreference|null} [qualityAdaptationPreference] SdkVideoSubscriptionConfiguration qualityAdaptationPreference\n     */\n\n    /**\n     * Constructs a new SdkVideoSubscriptionConfiguration.\n     * @name SdkVideoSubscriptionConfiguration\n     * @classdesc Represents a SdkVideoSubscriptionConfiguration.\n     * @implements ISdkVideoSubscriptionConfiguration\n     * @constructor\n     * @param {ISdkVideoSubscriptionConfiguration=} [properties] Properties to set\n     */\n    function SdkVideoSubscriptionConfiguration(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkVideoSubscriptionConfiguration mid.\n     * @member {string} mid\n     * @memberof SdkVideoSubscriptionConfiguration\n     * @instance\n     */\n    SdkVideoSubscriptionConfiguration.prototype.mid = \"\";\n\n    /**\n     * SdkVideoSubscriptionConfiguration attendeeId.\n     * @member {string} attendeeId\n     * @memberof SdkVideoSubscriptionConfiguration\n     * @instance\n     */\n    SdkVideoSubscriptionConfiguration.prototype.attendeeId = \"\";\n\n    /**\n     * SdkVideoSubscriptionConfiguration streamId.\n     * @member {number} streamId\n     * @memberof SdkVideoSubscriptionConfiguration\n     * @instance\n     */\n    SdkVideoSubscriptionConfiguration.prototype.streamId = 0;\n\n    /**\n     * SdkVideoSubscriptionConfiguration priority.\n     * @member {number} priority\n     * @memberof SdkVideoSubscriptionConfiguration\n     * @instance\n     */\n    SdkVideoSubscriptionConfiguration.prototype.priority = 0;\n\n    /**\n     * SdkVideoSubscriptionConfiguration targetBitrateKbps.\n     * @member {number} targetBitrateKbps\n     * @memberof SdkVideoSubscriptionConfiguration\n     * @instance\n     */\n    SdkVideoSubscriptionConfiguration.prototype.targetBitrateKbps = 0;\n\n    /**\n     * SdkVideoSubscriptionConfiguration groupId.\n     * @member {number} groupId\n     * @memberof SdkVideoSubscriptionConfiguration\n     * @instance\n     */\n    SdkVideoSubscriptionConfiguration.prototype.groupId = 0;\n\n    /**\n     * SdkVideoSubscriptionConfiguration qualityAdaptationPreference.\n     * @member {SdkVideoQualityAdaptationPreference} qualityAdaptationPreference\n     * @memberof SdkVideoSubscriptionConfiguration\n     * @instance\n     */\n    SdkVideoSubscriptionConfiguration.prototype.qualityAdaptationPreference = 1;\n\n    /**\n     * Creates a new SdkVideoSubscriptionConfiguration instance using the specified properties.\n     * @function create\n     * @memberof SdkVideoSubscriptionConfiguration\n     * @static\n     * @param {ISdkVideoSubscriptionConfiguration=} [properties] Properties to set\n     * @returns {SdkVideoSubscriptionConfiguration} SdkVideoSubscriptionConfiguration instance\n     */\n    SdkVideoSubscriptionConfiguration.create = function create(properties) {\n        return new SdkVideoSubscriptionConfiguration(properties);\n    };\n\n    /**\n     * Encodes the specified SdkVideoSubscriptionConfiguration message. Does not implicitly {@link SdkVideoSubscriptionConfiguration.verify|verify} messages.\n     * @function encode\n     * @memberof SdkVideoSubscriptionConfiguration\n     * @static\n     * @param {ISdkVideoSubscriptionConfiguration} message SdkVideoSubscriptionConfiguration message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkVideoSubscriptionConfiguration.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        writer.uint32(/* id 1, wireType 2 =*/10).string(message.mid);\n        if (message.attendeeId != null && Object.hasOwnProperty.call(message, \"attendeeId\"))\n            writer.uint32(/* id 2, wireType 2 =*/18).string(message.attendeeId);\n        if (message.streamId != null && Object.hasOwnProperty.call(message, \"streamId\"))\n            writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.streamId);\n        if (message.priority != null && Object.hasOwnProperty.call(message, \"priority\"))\n            writer.uint32(/* id 4, wireType 0 =*/32).uint32(message.priority);\n        if (message.targetBitrateKbps != null && Object.hasOwnProperty.call(message, \"targetBitrateKbps\"))\n            writer.uint32(/* id 5, wireType 0 =*/40).uint32(message.targetBitrateKbps);\n        if (message.groupId != null && Object.hasOwnProperty.call(message, \"groupId\"))\n            writer.uint32(/* id 6, wireType 0 =*/48).uint32(message.groupId);\n        if (message.qualityAdaptationPreference != null && Object.hasOwnProperty.call(message, \"qualityAdaptationPreference\"))\n            writer.uint32(/* id 7, wireType 0 =*/56).int32(message.qualityAdaptationPreference);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkVideoSubscriptionConfiguration message, length delimited. Does not implicitly {@link SdkVideoSubscriptionConfiguration.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkVideoSubscriptionConfiguration\n     * @static\n     * @param {ISdkVideoSubscriptionConfiguration} message SdkVideoSubscriptionConfiguration message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkVideoSubscriptionConfiguration.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkVideoSubscriptionConfiguration message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkVideoSubscriptionConfiguration\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkVideoSubscriptionConfiguration} SdkVideoSubscriptionConfiguration\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkVideoSubscriptionConfiguration.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkVideoSubscriptionConfiguration();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.mid = reader.string();\n                    break;\n                }\n            case 2: {\n                    message.attendeeId = reader.string();\n                    break;\n                }\n            case 3: {\n                    message.streamId = reader.uint32();\n                    break;\n                }\n            case 4: {\n                    message.priority = reader.uint32();\n                    break;\n                }\n            case 5: {\n                    message.targetBitrateKbps = reader.uint32();\n                    break;\n                }\n            case 6: {\n                    message.groupId = reader.uint32();\n                    break;\n                }\n            case 7: {\n                    message.qualityAdaptationPreference = reader.int32();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        if (!message.hasOwnProperty(\"mid\"))\n            throw $util.ProtocolError(\"missing required 'mid'\", { instance: message });\n        return message;\n    };\n\n    /**\n     * Decodes a SdkVideoSubscriptionConfiguration message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkVideoSubscriptionConfiguration\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkVideoSubscriptionConfiguration} SdkVideoSubscriptionConfiguration\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkVideoSubscriptionConfiguration.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkVideoSubscriptionConfiguration message.\n     * @function verify\n     * @memberof SdkVideoSubscriptionConfiguration\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkVideoSubscriptionConfiguration.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (!$util.isString(message.mid))\n            return \"mid: string expected\";\n        if (message.attendeeId != null && message.hasOwnProperty(\"attendeeId\"))\n            if (!$util.isString(message.attendeeId))\n                return \"attendeeId: string expected\";\n        if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n            if (!$util.isInteger(message.streamId))\n                return \"streamId: integer expected\";\n        if (message.priority != null && message.hasOwnProperty(\"priority\"))\n            if (!$util.isInteger(message.priority))\n                return \"priority: integer expected\";\n        if (message.targetBitrateKbps != null && message.hasOwnProperty(\"targetBitrateKbps\"))\n            if (!$util.isInteger(message.targetBitrateKbps))\n                return \"targetBitrateKbps: integer expected\";\n        if (message.groupId != null && message.hasOwnProperty(\"groupId\"))\n            if (!$util.isInteger(message.groupId))\n                return \"groupId: integer expected\";\n        if (message.qualityAdaptationPreference != null && message.hasOwnProperty(\"qualityAdaptationPreference\"))\n            switch (message.qualityAdaptationPreference) {\n            default:\n                return \"qualityAdaptationPreference: enum value expected\";\n            case 1:\n            case 2:\n            case 3:\n                break;\n            }\n        return null;\n    };\n\n    /**\n     * Creates a SdkVideoSubscriptionConfiguration message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkVideoSubscriptionConfiguration\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkVideoSubscriptionConfiguration} SdkVideoSubscriptionConfiguration\n     */\n    SdkVideoSubscriptionConfiguration.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkVideoSubscriptionConfiguration)\n            return object;\n        var message = new $root.SdkVideoSubscriptionConfiguration();\n        if (object.mid != null)\n            message.mid = String(object.mid);\n        if (object.attendeeId != null)\n            message.attendeeId = String(object.attendeeId);\n        if (object.streamId != null)\n            message.streamId = object.streamId >>> 0;\n        if (object.priority != null)\n            message.priority = object.priority >>> 0;\n        if (object.targetBitrateKbps != null)\n            message.targetBitrateKbps = object.targetBitrateKbps >>> 0;\n        if (object.groupId != null)\n            message.groupId = object.groupId >>> 0;\n        switch (object.qualityAdaptationPreference) {\n        default:\n            if (typeof object.qualityAdaptationPreference === \"number\") {\n                message.qualityAdaptationPreference = object.qualityAdaptationPreference;\n                break;\n            }\n            break;\n        case \"BALANCED\":\n        case 1:\n            message.qualityAdaptationPreference = 1;\n            break;\n        case \"MAINTAIN_FRAMERATE\":\n        case 2:\n            message.qualityAdaptationPreference = 2;\n            break;\n        case \"MAINTAIN_RESOLUTION\":\n        case 3:\n            message.qualityAdaptationPreference = 3;\n            break;\n        }\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkVideoSubscriptionConfiguration message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkVideoSubscriptionConfiguration\n     * @static\n     * @param {SdkVideoSubscriptionConfiguration} message SdkVideoSubscriptionConfiguration\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkVideoSubscriptionConfiguration.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            object.mid = \"\";\n            object.attendeeId = \"\";\n            object.streamId = 0;\n            object.priority = 0;\n            object.targetBitrateKbps = 0;\n            object.groupId = 0;\n            object.qualityAdaptationPreference = options.enums === String ? \"BALANCED\" : 1;\n        }\n        if (message.mid != null && message.hasOwnProperty(\"mid\"))\n            object.mid = message.mid;\n        if (message.attendeeId != null && message.hasOwnProperty(\"attendeeId\"))\n            object.attendeeId = message.attendeeId;\n        if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n            object.streamId = message.streamId;\n        if (message.priority != null && message.hasOwnProperty(\"priority\"))\n            object.priority = message.priority;\n        if (message.targetBitrateKbps != null && message.hasOwnProperty(\"targetBitrateKbps\"))\n            object.targetBitrateKbps = message.targetBitrateKbps;\n        if (message.groupId != null && message.hasOwnProperty(\"groupId\"))\n            object.groupId = message.groupId;\n        if (message.qualityAdaptationPreference != null && message.hasOwnProperty(\"qualityAdaptationPreference\"))\n            object.qualityAdaptationPreference = options.enums === String ? $root.SdkVideoQualityAdaptationPreference[message.qualityAdaptationPreference] === undefined ? message.qualityAdaptationPreference : $root.SdkVideoQualityAdaptationPreference[message.qualityAdaptationPreference] : message.qualityAdaptationPreference;\n        return object;\n    };\n\n    /**\n     * Converts this SdkVideoSubscriptionConfiguration to JSON.\n     * @function toJSON\n     * @memberof SdkVideoSubscriptionConfiguration\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkVideoSubscriptionConfiguration.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkVideoSubscriptionConfiguration\n     * @function getTypeUrl\n     * @memberof SdkVideoSubscriptionConfiguration\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkVideoSubscriptionConfiguration.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkVideoSubscriptionConfiguration\";\n    };\n\n    return SdkVideoSubscriptionConfiguration;\n})();\n\n$root.SdkNotificationFrame = (function() {\n\n    /**\n     * Properties of a SdkNotificationFrame.\n     * @name ISdkNotificationFrame\n     * @interface ISdkNotificationFrame\n     * @property {SdkNotificationFrame.NotificationLevel|null} [level] SdkNotificationFrame level\n     * @property {string|null} [message] SdkNotificationFrame message\n     */\n\n    /**\n     * Constructs a new SdkNotificationFrame.\n     * @name SdkNotificationFrame\n     * @classdesc Represents a SdkNotificationFrame.\n     * @implements ISdkNotificationFrame\n     * @constructor\n     * @param {ISdkNotificationFrame=} [properties] Properties to set\n     */\n    function SdkNotificationFrame(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkNotificationFrame level.\n     * @member {SdkNotificationFrame.NotificationLevel} level\n     * @memberof SdkNotificationFrame\n     * @instance\n     */\n    SdkNotificationFrame.prototype.level = 3;\n\n    /**\n     * SdkNotificationFrame message.\n     * @member {string} message\n     * @memberof SdkNotificationFrame\n     * @instance\n     */\n    SdkNotificationFrame.prototype.message = \"\";\n\n    /**\n     * Creates a new SdkNotificationFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkNotificationFrame\n     * @static\n     * @param {ISdkNotificationFrame=} [properties] Properties to set\n     * @returns {SdkNotificationFrame} SdkNotificationFrame instance\n     */\n    SdkNotificationFrame.create = function create(properties) {\n        return new SdkNotificationFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkNotificationFrame message. Does not implicitly {@link SdkNotificationFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkNotificationFrame\n     * @static\n     * @param {ISdkNotificationFrame} message SdkNotificationFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkNotificationFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.level != null && Object.hasOwnProperty.call(message, \"level\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).int32(message.level);\n        if (message.message != null && Object.hasOwnProperty.call(message, \"message\"))\n            writer.uint32(/* id 2, wireType 2 =*/18).string(message.message);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkNotificationFrame message, length delimited. Does not implicitly {@link SdkNotificationFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkNotificationFrame\n     * @static\n     * @param {ISdkNotificationFrame} message SdkNotificationFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkNotificationFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkNotificationFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkNotificationFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkNotificationFrame} SdkNotificationFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkNotificationFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkNotificationFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.level = reader.int32();\n                    break;\n                }\n            case 2: {\n                    message.message = reader.string();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkNotificationFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkNotificationFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkNotificationFrame} SdkNotificationFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkNotificationFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkNotificationFrame message.\n     * @function verify\n     * @memberof SdkNotificationFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkNotificationFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.level != null && message.hasOwnProperty(\"level\"))\n            switch (message.level) {\n            default:\n                return \"level: enum value expected\";\n            case 1:\n            case 2:\n            case 3:\n                break;\n            }\n        if (message.message != null && message.hasOwnProperty(\"message\"))\n            if (!$util.isString(message.message))\n                return \"message: string expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkNotificationFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkNotificationFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkNotificationFrame} SdkNotificationFrame\n     */\n    SdkNotificationFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkNotificationFrame)\n            return object;\n        var message = new $root.SdkNotificationFrame();\n        switch (object.level) {\n        case \"INFO\":\n        case 1:\n            message.level = 1;\n            break;\n        case \"WARNING\":\n        case 2:\n            message.level = 2;\n            break;\n        default:\n            if (typeof object.level === \"number\") {\n                message.level = object.level;\n                break;\n            }\n            break;\n        case \"ERROR\":\n        case 3:\n            message.level = 3;\n            break;\n        }\n        if (object.message != null)\n            message.message = String(object.message);\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkNotificationFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkNotificationFrame\n     * @static\n     * @param {SdkNotificationFrame} message SdkNotificationFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkNotificationFrame.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            object.level = options.enums === String ? \"ERROR\" : 3;\n            object.message = \"\";\n        }\n        if (message.level != null && message.hasOwnProperty(\"level\"))\n            object.level = options.enums === String ? $root.SdkNotificationFrame.NotificationLevel[message.level] === undefined ? message.level : $root.SdkNotificationFrame.NotificationLevel[message.level] : message.level;\n        if (message.message != null && message.hasOwnProperty(\"message\"))\n            object.message = message.message;\n        return object;\n    };\n\n    /**\n     * Converts this SdkNotificationFrame to JSON.\n     * @function toJSON\n     * @memberof SdkNotificationFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkNotificationFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkNotificationFrame\n     * @function getTypeUrl\n     * @memberof SdkNotificationFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkNotificationFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkNotificationFrame\";\n    };\n\n    /**\n     * NotificationLevel enum.\n     * @name SdkNotificationFrame.NotificationLevel\n     * @enum {number}\n     * @property {number} INFO=1 INFO value\n     * @property {number} WARNING=2 WARNING value\n     * @property {number} ERROR=3 ERROR value\n     */\n    SdkNotificationFrame.NotificationLevel = (function() {\n        var valuesById = {}, values = Object.create(valuesById);\n        values[valuesById[1] = \"INFO\"] = 1;\n        values[valuesById[2] = \"WARNING\"] = 2;\n        values[valuesById[3] = \"ERROR\"] = 3;\n        return values;\n    })();\n\n    return SdkNotificationFrame;\n})();\n\n$root.SdkPrimaryMeetingJoinFrame = (function() {\n\n    /**\n     * Properties of a SdkPrimaryMeetingJoinFrame.\n     * @name ISdkPrimaryMeetingJoinFrame\n     * @interface ISdkPrimaryMeetingJoinFrame\n     * @property {ISdkMeetingSessionCredentials|null} [credentials] SdkPrimaryMeetingJoinFrame credentials\n     */\n\n    /**\n     * Constructs a new SdkPrimaryMeetingJoinFrame.\n     * @name SdkPrimaryMeetingJoinFrame\n     * @classdesc Represents a SdkPrimaryMeetingJoinFrame.\n     * @implements ISdkPrimaryMeetingJoinFrame\n     * @constructor\n     * @param {ISdkPrimaryMeetingJoinFrame=} [properties] Properties to set\n     */\n    function SdkPrimaryMeetingJoinFrame(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkPrimaryMeetingJoinFrame credentials.\n     * @member {ISdkMeetingSessionCredentials|null|undefined} credentials\n     * @memberof SdkPrimaryMeetingJoinFrame\n     * @instance\n     */\n    SdkPrimaryMeetingJoinFrame.prototype.credentials = null;\n\n    /**\n     * Creates a new SdkPrimaryMeetingJoinFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkPrimaryMeetingJoinFrame\n     * @static\n     * @param {ISdkPrimaryMeetingJoinFrame=} [properties] Properties to set\n     * @returns {SdkPrimaryMeetingJoinFrame} SdkPrimaryMeetingJoinFrame instance\n     */\n    SdkPrimaryMeetingJoinFrame.create = function create(properties) {\n        return new SdkPrimaryMeetingJoinFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkPrimaryMeetingJoinFrame message. Does not implicitly {@link SdkPrimaryMeetingJoinFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkPrimaryMeetingJoinFrame\n     * @static\n     * @param {ISdkPrimaryMeetingJoinFrame} message SdkPrimaryMeetingJoinFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkPrimaryMeetingJoinFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.credentials != null && Object.hasOwnProperty.call(message, \"credentials\"))\n            $root.SdkMeetingSessionCredentials.encode(message.credentials, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkPrimaryMeetingJoinFrame message, length delimited. Does not implicitly {@link SdkPrimaryMeetingJoinFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkPrimaryMeetingJoinFrame\n     * @static\n     * @param {ISdkPrimaryMeetingJoinFrame} message SdkPrimaryMeetingJoinFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkPrimaryMeetingJoinFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkPrimaryMeetingJoinFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkPrimaryMeetingJoinFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkPrimaryMeetingJoinFrame} SdkPrimaryMeetingJoinFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkPrimaryMeetingJoinFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkPrimaryMeetingJoinFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.credentials = $root.SdkMeetingSessionCredentials.decode(reader, reader.uint32());\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkPrimaryMeetingJoinFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkPrimaryMeetingJoinFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkPrimaryMeetingJoinFrame} SdkPrimaryMeetingJoinFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkPrimaryMeetingJoinFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkPrimaryMeetingJoinFrame message.\n     * @function verify\n     * @memberof SdkPrimaryMeetingJoinFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkPrimaryMeetingJoinFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.credentials != null && message.hasOwnProperty(\"credentials\")) {\n            var error = $root.SdkMeetingSessionCredentials.verify(message.credentials);\n            if (error)\n                return \"credentials.\" + error;\n        }\n        return null;\n    };\n\n    /**\n     * Creates a SdkPrimaryMeetingJoinFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkPrimaryMeetingJoinFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkPrimaryMeetingJoinFrame} SdkPrimaryMeetingJoinFrame\n     */\n    SdkPrimaryMeetingJoinFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkPrimaryMeetingJoinFrame)\n            return object;\n        var message = new $root.SdkPrimaryMeetingJoinFrame();\n        if (object.credentials != null) {\n            if (typeof object.credentials !== \"object\")\n                throw TypeError(\".SdkPrimaryMeetingJoinFrame.credentials: object expected\");\n            message.credentials = $root.SdkMeetingSessionCredentials.fromObject(object.credentials);\n        }\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkPrimaryMeetingJoinFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkPrimaryMeetingJoinFrame\n     * @static\n     * @param {SdkPrimaryMeetingJoinFrame} message SdkPrimaryMeetingJoinFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkPrimaryMeetingJoinFrame.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults)\n            object.credentials = null;\n        if (message.credentials != null && message.hasOwnProperty(\"credentials\"))\n            object.credentials = $root.SdkMeetingSessionCredentials.toObject(message.credentials, options);\n        return object;\n    };\n\n    /**\n     * Converts this SdkPrimaryMeetingJoinFrame to JSON.\n     * @function toJSON\n     * @memberof SdkPrimaryMeetingJoinFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkPrimaryMeetingJoinFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkPrimaryMeetingJoinFrame\n     * @function getTypeUrl\n     * @memberof SdkPrimaryMeetingJoinFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkPrimaryMeetingJoinFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkPrimaryMeetingJoinFrame\";\n    };\n\n    return SdkPrimaryMeetingJoinFrame;\n})();\n\n$root.SdkPrimaryMeetingJoinAckFrame = (function() {\n\n    /**\n     * Properties of a SdkPrimaryMeetingJoinAckFrame.\n     * @name ISdkPrimaryMeetingJoinAckFrame\n     * @interface ISdkPrimaryMeetingJoinAckFrame\n     */\n\n    /**\n     * Constructs a new SdkPrimaryMeetingJoinAckFrame.\n     * @name SdkPrimaryMeetingJoinAckFrame\n     * @classdesc Represents a SdkPrimaryMeetingJoinAckFrame.\n     * @implements ISdkPrimaryMeetingJoinAckFrame\n     * @constructor\n     * @param {ISdkPrimaryMeetingJoinAckFrame=} [properties] Properties to set\n     */\n    function SdkPrimaryMeetingJoinAckFrame(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * Creates a new SdkPrimaryMeetingJoinAckFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkPrimaryMeetingJoinAckFrame\n     * @static\n     * @param {ISdkPrimaryMeetingJoinAckFrame=} [properties] Properties to set\n     * @returns {SdkPrimaryMeetingJoinAckFrame} SdkPrimaryMeetingJoinAckFrame instance\n     */\n    SdkPrimaryMeetingJoinAckFrame.create = function create(properties) {\n        return new SdkPrimaryMeetingJoinAckFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkPrimaryMeetingJoinAckFrame message. Does not implicitly {@link SdkPrimaryMeetingJoinAckFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkPrimaryMeetingJoinAckFrame\n     * @static\n     * @param {ISdkPrimaryMeetingJoinAckFrame} message SdkPrimaryMeetingJoinAckFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkPrimaryMeetingJoinAckFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkPrimaryMeetingJoinAckFrame message, length delimited. Does not implicitly {@link SdkPrimaryMeetingJoinAckFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkPrimaryMeetingJoinAckFrame\n     * @static\n     * @param {ISdkPrimaryMeetingJoinAckFrame} message SdkPrimaryMeetingJoinAckFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkPrimaryMeetingJoinAckFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkPrimaryMeetingJoinAckFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkPrimaryMeetingJoinAckFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkPrimaryMeetingJoinAckFrame} SdkPrimaryMeetingJoinAckFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkPrimaryMeetingJoinAckFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkPrimaryMeetingJoinAckFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkPrimaryMeetingJoinAckFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkPrimaryMeetingJoinAckFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkPrimaryMeetingJoinAckFrame} SdkPrimaryMeetingJoinAckFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkPrimaryMeetingJoinAckFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkPrimaryMeetingJoinAckFrame message.\n     * @function verify\n     * @memberof SdkPrimaryMeetingJoinAckFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkPrimaryMeetingJoinAckFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkPrimaryMeetingJoinAckFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkPrimaryMeetingJoinAckFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkPrimaryMeetingJoinAckFrame} SdkPrimaryMeetingJoinAckFrame\n     */\n    SdkPrimaryMeetingJoinAckFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkPrimaryMeetingJoinAckFrame)\n            return object;\n        return new $root.SdkPrimaryMeetingJoinAckFrame();\n    };\n\n    /**\n     * Creates a plain object from a SdkPrimaryMeetingJoinAckFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkPrimaryMeetingJoinAckFrame\n     * @static\n     * @param {SdkPrimaryMeetingJoinAckFrame} message SdkPrimaryMeetingJoinAckFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkPrimaryMeetingJoinAckFrame.toObject = function toObject() {\n        return {};\n    };\n\n    /**\n     * Converts this SdkPrimaryMeetingJoinAckFrame to JSON.\n     * @function toJSON\n     * @memberof SdkPrimaryMeetingJoinAckFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkPrimaryMeetingJoinAckFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkPrimaryMeetingJoinAckFrame\n     * @function getTypeUrl\n     * @memberof SdkPrimaryMeetingJoinAckFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkPrimaryMeetingJoinAckFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkPrimaryMeetingJoinAckFrame\";\n    };\n\n    return SdkPrimaryMeetingJoinAckFrame;\n})();\n\n$root.SdkPrimaryMeetingLeaveFrame = (function() {\n\n    /**\n     * Properties of a SdkPrimaryMeetingLeaveFrame.\n     * @name ISdkPrimaryMeetingLeaveFrame\n     * @interface ISdkPrimaryMeetingLeaveFrame\n     */\n\n    /**\n     * Constructs a new SdkPrimaryMeetingLeaveFrame.\n     * @name SdkPrimaryMeetingLeaveFrame\n     * @classdesc Represents a SdkPrimaryMeetingLeaveFrame.\n     * @implements ISdkPrimaryMeetingLeaveFrame\n     * @constructor\n     * @param {ISdkPrimaryMeetingLeaveFrame=} [properties] Properties to set\n     */\n    function SdkPrimaryMeetingLeaveFrame(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * Creates a new SdkPrimaryMeetingLeaveFrame instance using the specified properties.\n     * @function create\n     * @memberof SdkPrimaryMeetingLeaveFrame\n     * @static\n     * @param {ISdkPrimaryMeetingLeaveFrame=} [properties] Properties to set\n     * @returns {SdkPrimaryMeetingLeaveFrame} SdkPrimaryMeetingLeaveFrame instance\n     */\n    SdkPrimaryMeetingLeaveFrame.create = function create(properties) {\n        return new SdkPrimaryMeetingLeaveFrame(properties);\n    };\n\n    /**\n     * Encodes the specified SdkPrimaryMeetingLeaveFrame message. Does not implicitly {@link SdkPrimaryMeetingLeaveFrame.verify|verify} messages.\n     * @function encode\n     * @memberof SdkPrimaryMeetingLeaveFrame\n     * @static\n     * @param {ISdkPrimaryMeetingLeaveFrame} message SdkPrimaryMeetingLeaveFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkPrimaryMeetingLeaveFrame.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkPrimaryMeetingLeaveFrame message, length delimited. Does not implicitly {@link SdkPrimaryMeetingLeaveFrame.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkPrimaryMeetingLeaveFrame\n     * @static\n     * @param {ISdkPrimaryMeetingLeaveFrame} message SdkPrimaryMeetingLeaveFrame message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkPrimaryMeetingLeaveFrame.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkPrimaryMeetingLeaveFrame message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkPrimaryMeetingLeaveFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkPrimaryMeetingLeaveFrame} SdkPrimaryMeetingLeaveFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkPrimaryMeetingLeaveFrame.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkPrimaryMeetingLeaveFrame();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkPrimaryMeetingLeaveFrame message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkPrimaryMeetingLeaveFrame\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkPrimaryMeetingLeaveFrame} SdkPrimaryMeetingLeaveFrame\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkPrimaryMeetingLeaveFrame.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkPrimaryMeetingLeaveFrame message.\n     * @function verify\n     * @memberof SdkPrimaryMeetingLeaveFrame\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkPrimaryMeetingLeaveFrame.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkPrimaryMeetingLeaveFrame message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkPrimaryMeetingLeaveFrame\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkPrimaryMeetingLeaveFrame} SdkPrimaryMeetingLeaveFrame\n     */\n    SdkPrimaryMeetingLeaveFrame.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkPrimaryMeetingLeaveFrame)\n            return object;\n        return new $root.SdkPrimaryMeetingLeaveFrame();\n    };\n\n    /**\n     * Creates a plain object from a SdkPrimaryMeetingLeaveFrame message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkPrimaryMeetingLeaveFrame\n     * @static\n     * @param {SdkPrimaryMeetingLeaveFrame} message SdkPrimaryMeetingLeaveFrame\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkPrimaryMeetingLeaveFrame.toObject = function toObject() {\n        return {};\n    };\n\n    /**\n     * Converts this SdkPrimaryMeetingLeaveFrame to JSON.\n     * @function toJSON\n     * @memberof SdkPrimaryMeetingLeaveFrame\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkPrimaryMeetingLeaveFrame.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkPrimaryMeetingLeaveFrame\n     * @function getTypeUrl\n     * @memberof SdkPrimaryMeetingLeaveFrame\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkPrimaryMeetingLeaveFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkPrimaryMeetingLeaveFrame\";\n    };\n\n    return SdkPrimaryMeetingLeaveFrame;\n})();\n\n$root.SdkMeetingSessionCredentials = (function() {\n\n    /**\n     * Properties of a SdkMeetingSessionCredentials.\n     * @name ISdkMeetingSessionCredentials\n     * @interface ISdkMeetingSessionCredentials\n     * @property {string|null} [attendeeId] SdkMeetingSessionCredentials attendeeId\n     * @property {string|null} [externalUserId] SdkMeetingSessionCredentials externalUserId\n     * @property {string|null} [joinToken] SdkMeetingSessionCredentials joinToken\n     */\n\n    /**\n     * Constructs a new SdkMeetingSessionCredentials.\n     * @name SdkMeetingSessionCredentials\n     * @classdesc Represents a SdkMeetingSessionCredentials.\n     * @implements ISdkMeetingSessionCredentials\n     * @constructor\n     * @param {ISdkMeetingSessionCredentials=} [properties] Properties to set\n     */\n    function SdkMeetingSessionCredentials(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SdkMeetingSessionCredentials attendeeId.\n     * @member {string} attendeeId\n     * @memberof SdkMeetingSessionCredentials\n     * @instance\n     */\n    SdkMeetingSessionCredentials.prototype.attendeeId = \"\";\n\n    /**\n     * SdkMeetingSessionCredentials externalUserId.\n     * @member {string} externalUserId\n     * @memberof SdkMeetingSessionCredentials\n     * @instance\n     */\n    SdkMeetingSessionCredentials.prototype.externalUserId = \"\";\n\n    /**\n     * SdkMeetingSessionCredentials joinToken.\n     * @member {string} joinToken\n     * @memberof SdkMeetingSessionCredentials\n     * @instance\n     */\n    SdkMeetingSessionCredentials.prototype.joinToken = \"\";\n\n    /**\n     * Creates a new SdkMeetingSessionCredentials instance using the specified properties.\n     * @function create\n     * @memberof SdkMeetingSessionCredentials\n     * @static\n     * @param {ISdkMeetingSessionCredentials=} [properties] Properties to set\n     * @returns {SdkMeetingSessionCredentials} SdkMeetingSessionCredentials instance\n     */\n    SdkMeetingSessionCredentials.create = function create(properties) {\n        return new SdkMeetingSessionCredentials(properties);\n    };\n\n    /**\n     * Encodes the specified SdkMeetingSessionCredentials message. Does not implicitly {@link SdkMeetingSessionCredentials.verify|verify} messages.\n     * @function encode\n     * @memberof SdkMeetingSessionCredentials\n     * @static\n     * @param {ISdkMeetingSessionCredentials} message SdkMeetingSessionCredentials message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkMeetingSessionCredentials.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.attendeeId != null && Object.hasOwnProperty.call(message, \"attendeeId\"))\n            writer.uint32(/* id 1, wireType 2 =*/10).string(message.attendeeId);\n        if (message.externalUserId != null && Object.hasOwnProperty.call(message, \"externalUserId\"))\n            writer.uint32(/* id 2, wireType 2 =*/18).string(message.externalUserId);\n        if (message.joinToken != null && Object.hasOwnProperty.call(message, \"joinToken\"))\n            writer.uint32(/* id 3, wireType 2 =*/26).string(message.joinToken);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified SdkMeetingSessionCredentials message, length delimited. Does not implicitly {@link SdkMeetingSessionCredentials.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof SdkMeetingSessionCredentials\n     * @static\n     * @param {ISdkMeetingSessionCredentials} message SdkMeetingSessionCredentials message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SdkMeetingSessionCredentials.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SdkMeetingSessionCredentials message from the specified reader or buffer.\n     * @function decode\n     * @memberof SdkMeetingSessionCredentials\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {SdkMeetingSessionCredentials} SdkMeetingSessionCredentials\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkMeetingSessionCredentials.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkMeetingSessionCredentials();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1: {\n                    message.attendeeId = reader.string();\n                    break;\n                }\n            case 2: {\n                    message.externalUserId = reader.string();\n                    break;\n                }\n            case 3: {\n                    message.joinToken = reader.string();\n                    break;\n                }\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a SdkMeetingSessionCredentials message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof SdkMeetingSessionCredentials\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {SdkMeetingSessionCredentials} SdkMeetingSessionCredentials\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    SdkMeetingSessionCredentials.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SdkMeetingSessionCredentials message.\n     * @function verify\n     * @memberof SdkMeetingSessionCredentials\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SdkMeetingSessionCredentials.verify = function verify(message) {\n        if (typeof message !== \"object\" || message === null)\n            return \"object expected\";\n        if (message.attendeeId != null && message.hasOwnProperty(\"attendeeId\"))\n            if (!$util.isString(message.attendeeId))\n                return \"attendeeId: string expected\";\n        if (message.externalUserId != null && message.hasOwnProperty(\"externalUserId\"))\n            if (!$util.isString(message.externalUserId))\n                return \"externalUserId: string expected\";\n        if (message.joinToken != null && message.hasOwnProperty(\"joinToken\"))\n            if (!$util.isString(message.joinToken))\n                return \"joinToken: string expected\";\n        return null;\n    };\n\n    /**\n     * Creates a SdkMeetingSessionCredentials message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof SdkMeetingSessionCredentials\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {SdkMeetingSessionCredentials} SdkMeetingSessionCredentials\n     */\n    SdkMeetingSessionCredentials.fromObject = function fromObject(object) {\n        if (object instanceof $root.SdkMeetingSessionCredentials)\n            return object;\n        var message = new $root.SdkMeetingSessionCredentials();\n        if (object.attendeeId != null)\n            message.attendeeId = String(object.attendeeId);\n        if (object.externalUserId != null)\n            message.externalUserId = String(object.externalUserId);\n        if (object.joinToken != null)\n            message.joinToken = String(object.joinToken);\n        return message;\n    };\n\n    /**\n     * Creates a plain object from a SdkMeetingSessionCredentials message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof SdkMeetingSessionCredentials\n     * @static\n     * @param {SdkMeetingSessionCredentials} message SdkMeetingSessionCredentials\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SdkMeetingSessionCredentials.toObject = function toObject(message, options) {\n        if (!options)\n            options = {};\n        var object = {};\n        if (options.defaults) {\n            object.attendeeId = \"\";\n            object.externalUserId = \"\";\n            object.joinToken = \"\";\n        }\n        if (message.attendeeId != null && message.hasOwnProperty(\"attendeeId\"))\n            object.attendeeId = message.attendeeId;\n        if (message.externalUserId != null && message.hasOwnProperty(\"externalUserId\"))\n            object.externalUserId = message.externalUserId;\n        if (message.joinToken != null && message.hasOwnProperty(\"joinToken\"))\n            object.joinToken = message.joinToken;\n        return object;\n    };\n\n    /**\n     * Converts this SdkMeetingSessionCredentials to JSON.\n     * @function toJSON\n     * @memberof SdkMeetingSessionCredentials\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SdkMeetingSessionCredentials.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SdkMeetingSessionCredentials\n     * @function getTypeUrl\n     * @memberof SdkMeetingSessionCredentials\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SdkMeetingSessionCredentials.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n            typeUrlPrefix = \"type.googleapis.com\";\n        }\n        return typeUrlPrefix + \"/SdkMeetingSessionCredentials\";\n    };\n\n    return SdkMeetingSessionCredentials;\n})();\n\n/**\n * SdkVideoCodecCapability enum.\n * @name SdkVideoCodecCapability\n * @enum {number}\n * @property {number} VP8=1 VP8 value\n * @property {number} H264_BASELINE_PROFILE=2 H264_BASELINE_PROFILE value\n * @property {number} H264_CONSTRAINED_BASELINE_PROFILE=3 H264_CONSTRAINED_BASELINE_PROFILE value\n * @property {number} H264_MAIN_PROFILE=4 H264_MAIN_PROFILE value\n * @property {number} H264_HIGH_PROFILE=5 H264_HIGH_PROFILE value\n * @property {number} H264_CONSTRAINED_HIGH_PROFILE=6 H264_CONSTRAINED_HIGH_PROFILE value\n * @property {number} VP9_PROFILE_0=8 VP9_PROFILE_0 value\n * @property {number} AV1_MAIN_PROFILE=11 AV1_MAIN_PROFILE value\n */\n$root.SdkVideoCodecCapability = (function() {\n    var valuesById = {}, values = Object.create(valuesById);\n    values[valuesById[1] = \"VP8\"] = 1;\n    values[valuesById[2] = \"H264_BASELINE_PROFILE\"] = 2;\n    values[valuesById[3] = \"H264_CONSTRAINED_BASELINE_PROFILE\"] = 3;\n    values[valuesById[4] = \"H264_MAIN_PROFILE\"] = 4;\n    values[valuesById[5] = \"H264_HIGH_PROFILE\"] = 5;\n    values[valuesById[6] = \"H264_CONSTRAINED_HIGH_PROFILE\"] = 6;\n    values[valuesById[8] = \"VP9_PROFILE_0\"] = 8;\n    values[valuesById[11] = \"AV1_MAIN_PROFILE\"] = 11;\n    return values;\n})();\n\nmodule.exports = $root;\n$util.Long = undefined;\n$protobuf.configure();"],"names":[],"sourceRoot":""}