瀏覽代碼

coinw 添加数据实例

xiao.qiang 1 年之前
父節點
當前提交
9e1bc5af7e

+ 11486 - 0
client/hotconi/proto/market.v2.trade.js

@@ -0,0 +1,11486 @@
+/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/
+"use strict";
+
+var $protobuf = require("protobufjs/minimal");
+
+// Common aliases
+var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;
+
+// Exported root namespace
+var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});
+
+$root.market = (function() {
+
+    /**
+     * Namespace market.
+     * @exports market
+     * @namespace
+     */
+    var market = {};
+
+    market.v2 = (function() {
+
+        /**
+         * Namespace v2.
+         * @memberof market
+         * @namespace
+         */
+        var v2 = {};
+
+        v2.trade = (function() {
+
+            /**
+             * Namespace trade.
+             * @memberof market.v2
+             * @namespace
+             */
+            var trade = {};
+
+            trade.Response = (function() {
+
+                /**
+                 * Properties of a Response.
+                 * @memberof market.v2.trade
+                 * @interface IResponse
+                 * @property {number|null} [code] Response code
+                 * @property {string|null} [msg] Response msg
+                 * @property {string|null} [status] Response status
+                 * @property {number|Long|null} [ts] Response ts
+                 * @property {string|null} [ch] Response ch
+                 * @property {market.v2.trade.IKlineList|null} [klinelist] Response klinelist
+                 * @property {market.v2.trade.ITradeDepthVO|null} [tradedepthvo] Response tradedepthvo
+                 * @property {market.v2.trade.ITradeDetailList|null} [tradedetaillist] Response tradedetaillist
+                 * @property {market.v2.trade.ITradeAreaPair|null} [tradeareapair] Response tradeareapair
+                 * @property {market.v2.trade.IMainPair|null} [mainpair] Response mainpair
+                 * @property {market.v2.trade.IRecommendPair|null} [recommendpair] Response recommendpair
+                 * @property {market.v2.trade.IUpPair|null} [uppair] Response uppair
+                 * @property {market.v2.trade.IAmtPair|null} [amtpair] Response amtpair
+                 * @property {market.v2.trade.IStarPair|null} [starpair] Response starpair
+                 * @property {market.v2.trade.ITradeTickerVO|null} [tradetickervo] Response tradetickervo
+                 * @property {market.v2.trade.IEntrustVO|null} [entrustvo] Response entrustvo
+                 * @property {market.v2.trade.IUserAssetBalance|null} [userassetbalance] Response userassetbalance
+                 * @property {market.v2.trade.IMarketTickerList|null} [markettickerlist] Response markettickerlist
+                 * @property {market.v2.trade.IMarginCrossAssetVO|null} [margincrossassetvo] Response margincrossassetvo
+                 * @property {market.v2.trade.IMarginIsolatedAssetVO|null} [marginisolatedassetvo] Response marginisolatedassetvo
+                 * @property {market.v2.trade.INewListingPair|null} [newlistingpair] Response newlistingpair
+                 * @property {market.v2.trade.IChgdistributions|null} [chgdistributions] Response chgdistributions
+                 * @property {market.v2.trade.IMarketZones|null} [marketzones] Response marketzones
+                 * @property {market.v2.trade.IKlineOrders|null} [klineorders] Response klineorders
+                 * @property {market.v2.trade.INotificationPush|null} [notificationpush] Response notificationpush
+                 * @property {market.v2.trade.ITradeHotListing|null} [tradehotlisting] Response tradehotlisting
+                 * @property {market.v2.trade.ICtcGoingOrderNum|null} [ctcgoingordernum] Response ctcgoingordernum
+                 * @property {market.v2.trade.IMultiChange|null} [multichange] Response multichange
+                 * @property {market.v2.trade.IHeatmap|null} [heatmap] Response heatmap
+                 * @property {market.v2.trade.IDownPair|null} [downpair] Response downpair
+                 * @property {market.v2.trade.IHeatVol|null} [heatvol] Response heatvol
+                 * @property {market.v2.trade.ICurrencyRate|null} [currencyrate] Response currencyrate
+                 * @property {market.v2.trade.IMarketMonit|null} [marketmonit] Response marketmonit
+                 */
+
+                /**
+                 * Constructs a new Response.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a Response.
+                 * @implements IResponse
+                 * @constructor
+                 * @param {market.v2.trade.IResponse=} [properties] Properties to set
+                 */
+                function Response(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Response code.
+                 * @member {number} code
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.code = 0;
+
+                /**
+                 * Response msg.
+                 * @member {string} msg
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.msg = "";
+
+                /**
+                 * Response status.
+                 * @member {string} status
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.status = "";
+
+                /**
+                 * Response ts.
+                 * @member {number|Long} ts
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.ts = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                /**
+                 * Response ch.
+                 * @member {string} ch
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.ch = "";
+
+                /**
+                 * Response klinelist.
+                 * @member {market.v2.trade.IKlineList|null|undefined} klinelist
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.klinelist = null;
+
+                /**
+                 * Response tradedepthvo.
+                 * @member {market.v2.trade.ITradeDepthVO|null|undefined} tradedepthvo
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.tradedepthvo = null;
+
+                /**
+                 * Response tradedetaillist.
+                 * @member {market.v2.trade.ITradeDetailList|null|undefined} tradedetaillist
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.tradedetaillist = null;
+
+                /**
+                 * Response tradeareapair.
+                 * @member {market.v2.trade.ITradeAreaPair|null|undefined} tradeareapair
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.tradeareapair = null;
+
+                /**
+                 * Response mainpair.
+                 * @member {market.v2.trade.IMainPair|null|undefined} mainpair
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.mainpair = null;
+
+                /**
+                 * Response recommendpair.
+                 * @member {market.v2.trade.IRecommendPair|null|undefined} recommendpair
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.recommendpair = null;
+
+                /**
+                 * Response uppair.
+                 * @member {market.v2.trade.IUpPair|null|undefined} uppair
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.uppair = null;
+
+                /**
+                 * Response amtpair.
+                 * @member {market.v2.trade.IAmtPair|null|undefined} amtpair
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.amtpair = null;
+
+                /**
+                 * Response starpair.
+                 * @member {market.v2.trade.IStarPair|null|undefined} starpair
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.starpair = null;
+
+                /**
+                 * Response tradetickervo.
+                 * @member {market.v2.trade.ITradeTickerVO|null|undefined} tradetickervo
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.tradetickervo = null;
+
+                /**
+                 * Response entrustvo.
+                 * @member {market.v2.trade.IEntrustVO|null|undefined} entrustvo
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.entrustvo = null;
+
+                /**
+                 * Response userassetbalance.
+                 * @member {market.v2.trade.IUserAssetBalance|null|undefined} userassetbalance
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.userassetbalance = null;
+
+                /**
+                 * Response markettickerlist.
+                 * @member {market.v2.trade.IMarketTickerList|null|undefined} markettickerlist
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.markettickerlist = null;
+
+                /**
+                 * Response margincrossassetvo.
+                 * @member {market.v2.trade.IMarginCrossAssetVO|null|undefined} margincrossassetvo
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.margincrossassetvo = null;
+
+                /**
+                 * Response marginisolatedassetvo.
+                 * @member {market.v2.trade.IMarginIsolatedAssetVO|null|undefined} marginisolatedassetvo
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.marginisolatedassetvo = null;
+
+                /**
+                 * Response newlistingpair.
+                 * @member {market.v2.trade.INewListingPair|null|undefined} newlistingpair
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.newlistingpair = null;
+
+                /**
+                 * Response chgdistributions.
+                 * @member {market.v2.trade.IChgdistributions|null|undefined} chgdistributions
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.chgdistributions = null;
+
+                /**
+                 * Response marketzones.
+                 * @member {market.v2.trade.IMarketZones|null|undefined} marketzones
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.marketzones = null;
+
+                /**
+                 * Response klineorders.
+                 * @member {market.v2.trade.IKlineOrders|null|undefined} klineorders
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.klineorders = null;
+
+                /**
+                 * Response notificationpush.
+                 * @member {market.v2.trade.INotificationPush|null|undefined} notificationpush
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.notificationpush = null;
+
+                /**
+                 * Response tradehotlisting.
+                 * @member {market.v2.trade.ITradeHotListing|null|undefined} tradehotlisting
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.tradehotlisting = null;
+
+                /**
+                 * Response ctcgoingordernum.
+                 * @member {market.v2.trade.ICtcGoingOrderNum|null|undefined} ctcgoingordernum
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.ctcgoingordernum = null;
+
+                /**
+                 * Response multichange.
+                 * @member {market.v2.trade.IMultiChange|null|undefined} multichange
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.multichange = null;
+
+                /**
+                 * Response heatmap.
+                 * @member {market.v2.trade.IHeatmap|null|undefined} heatmap
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.heatmap = null;
+
+                /**
+                 * Response downpair.
+                 * @member {market.v2.trade.IDownPair|null|undefined} downpair
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.downpair = null;
+
+                /**
+                 * Response heatvol.
+                 * @member {market.v2.trade.IHeatVol|null|undefined} heatvol
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.heatvol = null;
+
+                /**
+                 * Response currencyrate.
+                 * @member {market.v2.trade.ICurrencyRate|null|undefined} currencyrate
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.currencyrate = null;
+
+                /**
+                 * Response marketmonit.
+                 * @member {market.v2.trade.IMarketMonit|null|undefined} marketmonit
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 */
+                Response.prototype.marketmonit = null;
+
+                /**
+                 * Creates a new Response instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.Response
+                 * @static
+                 * @param {market.v2.trade.IResponse=} [properties] Properties to set
+                 * @returns {market.v2.trade.Response} Response instance
+                 */
+                Response.create = function create(properties) {
+                    return new Response(properties);
+                };
+
+                /**
+                 * Encodes the specified Response message. Does not implicitly {@link market.v2.trade.Response.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.Response
+                 * @static
+                 * @param {market.v2.trade.IResponse} message Response message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Response.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.code != null && Object.hasOwnProperty.call(message, "code"))
+                        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.code);
+                    if (message.msg != null && Object.hasOwnProperty.call(message, "msg"))
+                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.msg);
+                    if (message.status != null && Object.hasOwnProperty.call(message, "status"))
+                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.status);
+                    if (message.ts != null && Object.hasOwnProperty.call(message, "ts"))
+                        writer.uint32(/* id 4, wireType 0 =*/32).int64(message.ts);
+                    if (message.ch != null && Object.hasOwnProperty.call(message, "ch"))
+                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.ch);
+                    if (message.klinelist != null && Object.hasOwnProperty.call(message, "klinelist"))
+                        $root.market.v2.trade.KlineList.encode(message.klinelist, writer.uint32(/* id 21, wireType 2 =*/170).fork()).ldelim();
+                    if (message.tradedepthvo != null && Object.hasOwnProperty.call(message, "tradedepthvo"))
+                        $root.market.v2.trade.TradeDepthVO.encode(message.tradedepthvo, writer.uint32(/* id 22, wireType 2 =*/178).fork()).ldelim();
+                    if (message.tradedetaillist != null && Object.hasOwnProperty.call(message, "tradedetaillist"))
+                        $root.market.v2.trade.TradeDetailList.encode(message.tradedetaillist, writer.uint32(/* id 23, wireType 2 =*/186).fork()).ldelim();
+                    if (message.tradeareapair != null && Object.hasOwnProperty.call(message, "tradeareapair"))
+                        $root.market.v2.trade.TradeAreaPair.encode(message.tradeareapair, writer.uint32(/* id 24, wireType 2 =*/194).fork()).ldelim();
+                    if (message.mainpair != null && Object.hasOwnProperty.call(message, "mainpair"))
+                        $root.market.v2.trade.MainPair.encode(message.mainpair, writer.uint32(/* id 25, wireType 2 =*/202).fork()).ldelim();
+                    if (message.recommendpair != null && Object.hasOwnProperty.call(message, "recommendpair"))
+                        $root.market.v2.trade.RecommendPair.encode(message.recommendpair, writer.uint32(/* id 26, wireType 2 =*/210).fork()).ldelim();
+                    if (message.uppair != null && Object.hasOwnProperty.call(message, "uppair"))
+                        $root.market.v2.trade.UpPair.encode(message.uppair, writer.uint32(/* id 27, wireType 2 =*/218).fork()).ldelim();
+                    if (message.amtpair != null && Object.hasOwnProperty.call(message, "amtpair"))
+                        $root.market.v2.trade.AmtPair.encode(message.amtpair, writer.uint32(/* id 28, wireType 2 =*/226).fork()).ldelim();
+                    if (message.starpair != null && Object.hasOwnProperty.call(message, "starpair"))
+                        $root.market.v2.trade.StarPair.encode(message.starpair, writer.uint32(/* id 29, wireType 2 =*/234).fork()).ldelim();
+                    if (message.tradetickervo != null && Object.hasOwnProperty.call(message, "tradetickervo"))
+                        $root.market.v2.trade.TradeTickerVO.encode(message.tradetickervo, writer.uint32(/* id 30, wireType 2 =*/242).fork()).ldelim();
+                    if (message.entrustvo != null && Object.hasOwnProperty.call(message, "entrustvo"))
+                        $root.market.v2.trade.EntrustVO.encode(message.entrustvo, writer.uint32(/* id 31, wireType 2 =*/250).fork()).ldelim();
+                    if (message.userassetbalance != null && Object.hasOwnProperty.call(message, "userassetbalance"))
+                        $root.market.v2.trade.UserAssetBalance.encode(message.userassetbalance, writer.uint32(/* id 32, wireType 2 =*/258).fork()).ldelim();
+                    if (message.markettickerlist != null && Object.hasOwnProperty.call(message, "markettickerlist"))
+                        $root.market.v2.trade.MarketTickerList.encode(message.markettickerlist, writer.uint32(/* id 33, wireType 2 =*/266).fork()).ldelim();
+                    if (message.marketmonit != null && Object.hasOwnProperty.call(message, "marketmonit"))
+                        $root.market.v2.trade.MarketMonit.encode(message.marketmonit, writer.uint32(/* id 34, wireType 2 =*/274).fork()).ldelim();
+                    if (message.margincrossassetvo != null && Object.hasOwnProperty.call(message, "margincrossassetvo"))
+                        $root.market.v2.trade.MarginCrossAssetVO.encode(message.margincrossassetvo, writer.uint32(/* id 35, wireType 2 =*/282).fork()).ldelim();
+                    if (message.marginisolatedassetvo != null && Object.hasOwnProperty.call(message, "marginisolatedassetvo"))
+                        $root.market.v2.trade.MarginIsolatedAssetVO.encode(message.marginisolatedassetvo, writer.uint32(/* id 36, wireType 2 =*/290).fork()).ldelim();
+                    if (message.newlistingpair != null && Object.hasOwnProperty.call(message, "newlistingpair"))
+                        $root.market.v2.trade.NewListingPair.encode(message.newlistingpair, writer.uint32(/* id 37, wireType 2 =*/298).fork()).ldelim();
+                    if (message.chgdistributions != null && Object.hasOwnProperty.call(message, "chgdistributions"))
+                        $root.market.v2.trade.Chgdistributions.encode(message.chgdistributions, writer.uint32(/* id 38, wireType 2 =*/306).fork()).ldelim();
+                    if (message.marketzones != null && Object.hasOwnProperty.call(message, "marketzones"))
+                        $root.market.v2.trade.MarketZones.encode(message.marketzones, writer.uint32(/* id 39, wireType 2 =*/314).fork()).ldelim();
+                    if (message.klineorders != null && Object.hasOwnProperty.call(message, "klineorders"))
+                        $root.market.v2.trade.KlineOrders.encode(message.klineorders, writer.uint32(/* id 40, wireType 2 =*/322).fork()).ldelim();
+                    if (message.notificationpush != null && Object.hasOwnProperty.call(message, "notificationpush"))
+                        $root.market.v2.trade.NotificationPush.encode(message.notificationpush, writer.uint32(/* id 41, wireType 2 =*/330).fork()).ldelim();
+                    if (message.tradehotlisting != null && Object.hasOwnProperty.call(message, "tradehotlisting"))
+                        $root.market.v2.trade.TradeHotListing.encode(message.tradehotlisting, writer.uint32(/* id 42, wireType 2 =*/338).fork()).ldelim();
+                    if (message.ctcgoingordernum != null && Object.hasOwnProperty.call(message, "ctcgoingordernum"))
+                        $root.market.v2.trade.CtcGoingOrderNum.encode(message.ctcgoingordernum, writer.uint32(/* id 43, wireType 2 =*/346).fork()).ldelim();
+                    if (message.multichange != null && Object.hasOwnProperty.call(message, "multichange"))
+                        $root.market.v2.trade.MultiChange.encode(message.multichange, writer.uint32(/* id 44, wireType 2 =*/354).fork()).ldelim();
+                    if (message.heatmap != null && Object.hasOwnProperty.call(message, "heatmap"))
+                        $root.market.v2.trade.Heatmap.encode(message.heatmap, writer.uint32(/* id 45, wireType 2 =*/362).fork()).ldelim();
+                    if (message.downpair != null && Object.hasOwnProperty.call(message, "downpair"))
+                        $root.market.v2.trade.DownPair.encode(message.downpair, writer.uint32(/* id 46, wireType 2 =*/370).fork()).ldelim();
+                    if (message.heatvol != null && Object.hasOwnProperty.call(message, "heatvol"))
+                        $root.market.v2.trade.HeatVol.encode(message.heatvol, writer.uint32(/* id 47, wireType 2 =*/378).fork()).ldelim();
+                    if (message.currencyrate != null && Object.hasOwnProperty.call(message, "currencyrate"))
+                        $root.market.v2.trade.CurrencyRate.encode(message.currencyrate, writer.uint32(/* id 48, wireType 2 =*/386).fork()).ldelim();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified Response message, length delimited. Does not implicitly {@link market.v2.trade.Response.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.Response
+                 * @static
+                 * @param {market.v2.trade.IResponse} message Response message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Response.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a Response message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.Response
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.Response} Response
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Response.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.Response();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.code = reader.int32();
+                                break;
+                            }
+                        case 2: {
+                                message.msg = reader.string();
+                                break;
+                            }
+                        case 3: {
+                                message.status = reader.string();
+                                break;
+                            }
+                        case 4: {
+                                message.ts = reader.int64();
+                                break;
+                            }
+                        case 5: {
+                                message.ch = reader.string();
+                                break;
+                            }
+                        case 21: {
+                                message.klinelist = $root.market.v2.trade.KlineList.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 22: {
+                                message.tradedepthvo = $root.market.v2.trade.TradeDepthVO.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 23: {
+                                message.tradedetaillist = $root.market.v2.trade.TradeDetailList.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 24: {
+                                message.tradeareapair = $root.market.v2.trade.TradeAreaPair.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 25: {
+                                message.mainpair = $root.market.v2.trade.MainPair.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 26: {
+                                message.recommendpair = $root.market.v2.trade.RecommendPair.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 27: {
+                                message.uppair = $root.market.v2.trade.UpPair.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 28: {
+                                message.amtpair = $root.market.v2.trade.AmtPair.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 29: {
+                                message.starpair = $root.market.v2.trade.StarPair.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 30: {
+                                message.tradetickervo = $root.market.v2.trade.TradeTickerVO.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 31: {
+                                message.entrustvo = $root.market.v2.trade.EntrustVO.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 32: {
+                                message.userassetbalance = $root.market.v2.trade.UserAssetBalance.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 33: {
+                                message.markettickerlist = $root.market.v2.trade.MarketTickerList.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 35: {
+                                message.margincrossassetvo = $root.market.v2.trade.MarginCrossAssetVO.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 36: {
+                                message.marginisolatedassetvo = $root.market.v2.trade.MarginIsolatedAssetVO.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 37: {
+                                message.newlistingpair = $root.market.v2.trade.NewListingPair.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 38: {
+                                message.chgdistributions = $root.market.v2.trade.Chgdistributions.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 39: {
+                                message.marketzones = $root.market.v2.trade.MarketZones.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 40: {
+                                message.klineorders = $root.market.v2.trade.KlineOrders.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 41: {
+                                message.notificationpush = $root.market.v2.trade.NotificationPush.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 42: {
+                                message.tradehotlisting = $root.market.v2.trade.TradeHotListing.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 43: {
+                                message.ctcgoingordernum = $root.market.v2.trade.CtcGoingOrderNum.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 44: {
+                                message.multichange = $root.market.v2.trade.MultiChange.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 45: {
+                                message.heatmap = $root.market.v2.trade.Heatmap.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 46: {
+                                message.downpair = $root.market.v2.trade.DownPair.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 47: {
+                                message.heatvol = $root.market.v2.trade.HeatVol.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 48: {
+                                message.currencyrate = $root.market.v2.trade.CurrencyRate.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 34: {
+                                message.marketmonit = $root.market.v2.trade.MarketMonit.decode(reader, reader.uint32());
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a Response message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.Response
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.Response} Response
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Response.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a Response message.
+                 * @function verify
+                 * @memberof market.v2.trade.Response
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                Response.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.code != null && message.hasOwnProperty("code"))
+                        if (!$util.isInteger(message.code))
+                            return "code: integer expected";
+                    if (message.msg != null && message.hasOwnProperty("msg"))
+                        if (!$util.isString(message.msg))
+                            return "msg: string expected";
+                    if (message.status != null && message.hasOwnProperty("status"))
+                        if (!$util.isString(message.status))
+                            return "status: string expected";
+                    if (message.ts != null && message.hasOwnProperty("ts"))
+                        if (!$util.isInteger(message.ts) && !(message.ts && $util.isInteger(message.ts.low) && $util.isInteger(message.ts.high)))
+                            return "ts: integer|Long expected";
+                    if (message.ch != null && message.hasOwnProperty("ch"))
+                        if (!$util.isString(message.ch))
+                            return "ch: string expected";
+                    if (message.klinelist != null && message.hasOwnProperty("klinelist")) {
+                        var error = $root.market.v2.trade.KlineList.verify(message.klinelist);
+                        if (error)
+                            return "klinelist." + error;
+                    }
+                    if (message.tradedepthvo != null && message.hasOwnProperty("tradedepthvo")) {
+                        var error = $root.market.v2.trade.TradeDepthVO.verify(message.tradedepthvo);
+                        if (error)
+                            return "tradedepthvo." + error;
+                    }
+                    if (message.tradedetaillist != null && message.hasOwnProperty("tradedetaillist")) {
+                        var error = $root.market.v2.trade.TradeDetailList.verify(message.tradedetaillist);
+                        if (error)
+                            return "tradedetaillist." + error;
+                    }
+                    if (message.tradeareapair != null && message.hasOwnProperty("tradeareapair")) {
+                        var error = $root.market.v2.trade.TradeAreaPair.verify(message.tradeareapair);
+                        if (error)
+                            return "tradeareapair." + error;
+                    }
+                    if (message.mainpair != null && message.hasOwnProperty("mainpair")) {
+                        var error = $root.market.v2.trade.MainPair.verify(message.mainpair);
+                        if (error)
+                            return "mainpair." + error;
+                    }
+                    if (message.recommendpair != null && message.hasOwnProperty("recommendpair")) {
+                        var error = $root.market.v2.trade.RecommendPair.verify(message.recommendpair);
+                        if (error)
+                            return "recommendpair." + error;
+                    }
+                    if (message.uppair != null && message.hasOwnProperty("uppair")) {
+                        var error = $root.market.v2.trade.UpPair.verify(message.uppair);
+                        if (error)
+                            return "uppair." + error;
+                    }
+                    if (message.amtpair != null && message.hasOwnProperty("amtpair")) {
+                        var error = $root.market.v2.trade.AmtPair.verify(message.amtpair);
+                        if (error)
+                            return "amtpair." + error;
+                    }
+                    if (message.starpair != null && message.hasOwnProperty("starpair")) {
+                        var error = $root.market.v2.trade.StarPair.verify(message.starpair);
+                        if (error)
+                            return "starpair." + error;
+                    }
+                    if (message.tradetickervo != null && message.hasOwnProperty("tradetickervo")) {
+                        var error = $root.market.v2.trade.TradeTickerVO.verify(message.tradetickervo);
+                        if (error)
+                            return "tradetickervo." + error;
+                    }
+                    if (message.entrustvo != null && message.hasOwnProperty("entrustvo")) {
+                        var error = $root.market.v2.trade.EntrustVO.verify(message.entrustvo);
+                        if (error)
+                            return "entrustvo." + error;
+                    }
+                    if (message.userassetbalance != null && message.hasOwnProperty("userassetbalance")) {
+                        var error = $root.market.v2.trade.UserAssetBalance.verify(message.userassetbalance);
+                        if (error)
+                            return "userassetbalance." + error;
+                    }
+                    if (message.markettickerlist != null && message.hasOwnProperty("markettickerlist")) {
+                        var error = $root.market.v2.trade.MarketTickerList.verify(message.markettickerlist);
+                        if (error)
+                            return "markettickerlist." + error;
+                    }
+                    if (message.margincrossassetvo != null && message.hasOwnProperty("margincrossassetvo")) {
+                        var error = $root.market.v2.trade.MarginCrossAssetVO.verify(message.margincrossassetvo);
+                        if (error)
+                            return "margincrossassetvo." + error;
+                    }
+                    if (message.marginisolatedassetvo != null && message.hasOwnProperty("marginisolatedassetvo")) {
+                        var error = $root.market.v2.trade.MarginIsolatedAssetVO.verify(message.marginisolatedassetvo);
+                        if (error)
+                            return "marginisolatedassetvo." + error;
+                    }
+                    if (message.newlistingpair != null && message.hasOwnProperty("newlistingpair")) {
+                        var error = $root.market.v2.trade.NewListingPair.verify(message.newlistingpair);
+                        if (error)
+                            return "newlistingpair." + error;
+                    }
+                    if (message.chgdistributions != null && message.hasOwnProperty("chgdistributions")) {
+                        var error = $root.market.v2.trade.Chgdistributions.verify(message.chgdistributions);
+                        if (error)
+                            return "chgdistributions." + error;
+                    }
+                    if (message.marketzones != null && message.hasOwnProperty("marketzones")) {
+                        var error = $root.market.v2.trade.MarketZones.verify(message.marketzones);
+                        if (error)
+                            return "marketzones." + error;
+                    }
+                    if (message.klineorders != null && message.hasOwnProperty("klineorders")) {
+                        var error = $root.market.v2.trade.KlineOrders.verify(message.klineorders);
+                        if (error)
+                            return "klineorders." + error;
+                    }
+                    if (message.notificationpush != null && message.hasOwnProperty("notificationpush")) {
+                        var error = $root.market.v2.trade.NotificationPush.verify(message.notificationpush);
+                        if (error)
+                            return "notificationpush." + error;
+                    }
+                    if (message.tradehotlisting != null && message.hasOwnProperty("tradehotlisting")) {
+                        var error = $root.market.v2.trade.TradeHotListing.verify(message.tradehotlisting);
+                        if (error)
+                            return "tradehotlisting." + error;
+                    }
+                    if (message.ctcgoingordernum != null && message.hasOwnProperty("ctcgoingordernum")) {
+                        var error = $root.market.v2.trade.CtcGoingOrderNum.verify(message.ctcgoingordernum);
+                        if (error)
+                            return "ctcgoingordernum." + error;
+                    }
+                    if (message.multichange != null && message.hasOwnProperty("multichange")) {
+                        var error = $root.market.v2.trade.MultiChange.verify(message.multichange);
+                        if (error)
+                            return "multichange." + error;
+                    }
+                    if (message.heatmap != null && message.hasOwnProperty("heatmap")) {
+                        var error = $root.market.v2.trade.Heatmap.verify(message.heatmap);
+                        if (error)
+                            return "heatmap." + error;
+                    }
+                    if (message.downpair != null && message.hasOwnProperty("downpair")) {
+                        var error = $root.market.v2.trade.DownPair.verify(message.downpair);
+                        if (error)
+                            return "downpair." + error;
+                    }
+                    if (message.heatvol != null && message.hasOwnProperty("heatvol")) {
+                        var error = $root.market.v2.trade.HeatVol.verify(message.heatvol);
+                        if (error)
+                            return "heatvol." + error;
+                    }
+                    if (message.currencyrate != null && message.hasOwnProperty("currencyrate")) {
+                        var error = $root.market.v2.trade.CurrencyRate.verify(message.currencyrate);
+                        if (error)
+                            return "currencyrate." + error;
+                    }
+                    if (message.marketmonit != null && message.hasOwnProperty("marketmonit")) {
+                        var error = $root.market.v2.trade.MarketMonit.verify(message.marketmonit);
+                        if (error)
+                            return "marketmonit." + error;
+                    }
+                    return null;
+                };
+
+                /**
+                 * Creates a Response message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.Response
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.Response} Response
+                 */
+                Response.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.Response)
+                        return object;
+                    var message = new $root.market.v2.trade.Response();
+                    if (object.code != null)
+                        message.code = object.code | 0;
+                    if (object.msg != null)
+                        message.msg = String(object.msg);
+                    if (object.status != null)
+                        message.status = String(object.status);
+                    if (object.ts != null)
+                        if ($util.Long)
+                            (message.ts = $util.Long.fromValue(object.ts)).unsigned = false;
+                        else if (typeof object.ts === "string")
+                            message.ts = parseInt(object.ts, 10);
+                        else if (typeof object.ts === "number")
+                            message.ts = object.ts;
+                        else if (typeof object.ts === "object")
+                            message.ts = new $util.LongBits(object.ts.low >>> 0, object.ts.high >>> 0).toNumber();
+                    if (object.ch != null)
+                        message.ch = String(object.ch);
+                    if (object.klinelist != null) {
+                        if (typeof object.klinelist !== "object")
+                            throw TypeError(".market.v2.trade.Response.klinelist: object expected");
+                        message.klinelist = $root.market.v2.trade.KlineList.fromObject(object.klinelist);
+                    }
+                    if (object.tradedepthvo != null) {
+                        if (typeof object.tradedepthvo !== "object")
+                            throw TypeError(".market.v2.trade.Response.tradedepthvo: object expected");
+                        message.tradedepthvo = $root.market.v2.trade.TradeDepthVO.fromObject(object.tradedepthvo);
+                    }
+                    if (object.tradedetaillist != null) {
+                        if (typeof object.tradedetaillist !== "object")
+                            throw TypeError(".market.v2.trade.Response.tradedetaillist: object expected");
+                        message.tradedetaillist = $root.market.v2.trade.TradeDetailList.fromObject(object.tradedetaillist);
+                    }
+                    if (object.tradeareapair != null) {
+                        if (typeof object.tradeareapair !== "object")
+                            throw TypeError(".market.v2.trade.Response.tradeareapair: object expected");
+                        message.tradeareapair = $root.market.v2.trade.TradeAreaPair.fromObject(object.tradeareapair);
+                    }
+                    if (object.mainpair != null) {
+                        if (typeof object.mainpair !== "object")
+                            throw TypeError(".market.v2.trade.Response.mainpair: object expected");
+                        message.mainpair = $root.market.v2.trade.MainPair.fromObject(object.mainpair);
+                    }
+                    if (object.recommendpair != null) {
+                        if (typeof object.recommendpair !== "object")
+                            throw TypeError(".market.v2.trade.Response.recommendpair: object expected");
+                        message.recommendpair = $root.market.v2.trade.RecommendPair.fromObject(object.recommendpair);
+                    }
+                    if (object.uppair != null) {
+                        if (typeof object.uppair !== "object")
+                            throw TypeError(".market.v2.trade.Response.uppair: object expected");
+                        message.uppair = $root.market.v2.trade.UpPair.fromObject(object.uppair);
+                    }
+                    if (object.amtpair != null) {
+                        if (typeof object.amtpair !== "object")
+                            throw TypeError(".market.v2.trade.Response.amtpair: object expected");
+                        message.amtpair = $root.market.v2.trade.AmtPair.fromObject(object.amtpair);
+                    }
+                    if (object.starpair != null) {
+                        if (typeof object.starpair !== "object")
+                            throw TypeError(".market.v2.trade.Response.starpair: object expected");
+                        message.starpair = $root.market.v2.trade.StarPair.fromObject(object.starpair);
+                    }
+                    if (object.tradetickervo != null) {
+                        if (typeof object.tradetickervo !== "object")
+                            throw TypeError(".market.v2.trade.Response.tradetickervo: object expected");
+                        message.tradetickervo = $root.market.v2.trade.TradeTickerVO.fromObject(object.tradetickervo);
+                    }
+                    if (object.entrustvo != null) {
+                        if (typeof object.entrustvo !== "object")
+                            throw TypeError(".market.v2.trade.Response.entrustvo: object expected");
+                        message.entrustvo = $root.market.v2.trade.EntrustVO.fromObject(object.entrustvo);
+                    }
+                    if (object.userassetbalance != null) {
+                        if (typeof object.userassetbalance !== "object")
+                            throw TypeError(".market.v2.trade.Response.userassetbalance: object expected");
+                        message.userassetbalance = $root.market.v2.trade.UserAssetBalance.fromObject(object.userassetbalance);
+                    }
+                    if (object.markettickerlist != null) {
+                        if (typeof object.markettickerlist !== "object")
+                            throw TypeError(".market.v2.trade.Response.markettickerlist: object expected");
+                        message.markettickerlist = $root.market.v2.trade.MarketTickerList.fromObject(object.markettickerlist);
+                    }
+                    if (object.margincrossassetvo != null) {
+                        if (typeof object.margincrossassetvo !== "object")
+                            throw TypeError(".market.v2.trade.Response.margincrossassetvo: object expected");
+                        message.margincrossassetvo = $root.market.v2.trade.MarginCrossAssetVO.fromObject(object.margincrossassetvo);
+                    }
+                    if (object.marginisolatedassetvo != null) {
+                        if (typeof object.marginisolatedassetvo !== "object")
+                            throw TypeError(".market.v2.trade.Response.marginisolatedassetvo: object expected");
+                        message.marginisolatedassetvo = $root.market.v2.trade.MarginIsolatedAssetVO.fromObject(object.marginisolatedassetvo);
+                    }
+                    if (object.newlistingpair != null) {
+                        if (typeof object.newlistingpair !== "object")
+                            throw TypeError(".market.v2.trade.Response.newlistingpair: object expected");
+                        message.newlistingpair = $root.market.v2.trade.NewListingPair.fromObject(object.newlistingpair);
+                    }
+                    if (object.chgdistributions != null) {
+                        if (typeof object.chgdistributions !== "object")
+                            throw TypeError(".market.v2.trade.Response.chgdistributions: object expected");
+                        message.chgdistributions = $root.market.v2.trade.Chgdistributions.fromObject(object.chgdistributions);
+                    }
+                    if (object.marketzones != null) {
+                        if (typeof object.marketzones !== "object")
+                            throw TypeError(".market.v2.trade.Response.marketzones: object expected");
+                        message.marketzones = $root.market.v2.trade.MarketZones.fromObject(object.marketzones);
+                    }
+                    if (object.klineorders != null) {
+                        if (typeof object.klineorders !== "object")
+                            throw TypeError(".market.v2.trade.Response.klineorders: object expected");
+                        message.klineorders = $root.market.v2.trade.KlineOrders.fromObject(object.klineorders);
+                    }
+                    if (object.notificationpush != null) {
+                        if (typeof object.notificationpush !== "object")
+                            throw TypeError(".market.v2.trade.Response.notificationpush: object expected");
+                        message.notificationpush = $root.market.v2.trade.NotificationPush.fromObject(object.notificationpush);
+                    }
+                    if (object.tradehotlisting != null) {
+                        if (typeof object.tradehotlisting !== "object")
+                            throw TypeError(".market.v2.trade.Response.tradehotlisting: object expected");
+                        message.tradehotlisting = $root.market.v2.trade.TradeHotListing.fromObject(object.tradehotlisting);
+                    }
+                    if (object.ctcgoingordernum != null) {
+                        if (typeof object.ctcgoingordernum !== "object")
+                            throw TypeError(".market.v2.trade.Response.ctcgoingordernum: object expected");
+                        message.ctcgoingordernum = $root.market.v2.trade.CtcGoingOrderNum.fromObject(object.ctcgoingordernum);
+                    }
+                    if (object.multichange != null) {
+                        if (typeof object.multichange !== "object")
+                            throw TypeError(".market.v2.trade.Response.multichange: object expected");
+                        message.multichange = $root.market.v2.trade.MultiChange.fromObject(object.multichange);
+                    }
+                    if (object.heatmap != null) {
+                        if (typeof object.heatmap !== "object")
+                            throw TypeError(".market.v2.trade.Response.heatmap: object expected");
+                        message.heatmap = $root.market.v2.trade.Heatmap.fromObject(object.heatmap);
+                    }
+                    if (object.downpair != null) {
+                        if (typeof object.downpair !== "object")
+                            throw TypeError(".market.v2.trade.Response.downpair: object expected");
+                        message.downpair = $root.market.v2.trade.DownPair.fromObject(object.downpair);
+                    }
+                    if (object.heatvol != null) {
+                        if (typeof object.heatvol !== "object")
+                            throw TypeError(".market.v2.trade.Response.heatvol: object expected");
+                        message.heatvol = $root.market.v2.trade.HeatVol.fromObject(object.heatvol);
+                    }
+                    if (object.currencyrate != null) {
+                        if (typeof object.currencyrate !== "object")
+                            throw TypeError(".market.v2.trade.Response.currencyrate: object expected");
+                        message.currencyrate = $root.market.v2.trade.CurrencyRate.fromObject(object.currencyrate);
+                    }
+                    if (object.marketmonit != null) {
+                        if (typeof object.marketmonit !== "object")
+                            throw TypeError(".market.v2.trade.Response.marketmonit: object expected");
+                        message.marketmonit = $root.market.v2.trade.MarketMonit.fromObject(object.marketmonit);
+                    }
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a Response message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.Response
+                 * @static
+                 * @param {market.v2.trade.Response} message Response
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                Response.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.code = 0;
+                        object.msg = "";
+                        object.status = "";
+                        if ($util.Long) {
+                            var long = new $util.Long(0, 0, false);
+                            object.ts = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                        } else
+                            object.ts = options.longs === String ? "0" : 0;
+                        object.ch = "";
+                        object.klinelist = null;
+                        object.tradedepthvo = null;
+                        object.tradedetaillist = null;
+                        object.tradeareapair = null;
+                        object.mainpair = null;
+                        object.recommendpair = null;
+                        object.uppair = null;
+                        object.amtpair = null;
+                        object.starpair = null;
+                        object.tradetickervo = null;
+                        object.entrustvo = null;
+                        object.userassetbalance = null;
+                        object.markettickerlist = null;
+                        object.marketmonit = null;
+                        object.margincrossassetvo = null;
+                        object.marginisolatedassetvo = null;
+                        object.newlistingpair = null;
+                        object.chgdistributions = null;
+                        object.marketzones = null;
+                        object.klineorders = null;
+                        object.notificationpush = null;
+                        object.tradehotlisting = null;
+                        object.ctcgoingordernum = null;
+                        object.multichange = null;
+                        object.heatmap = null;
+                        object.downpair = null;
+                        object.heatvol = null;
+                        object.currencyrate = null;
+                    }
+                    if (message.code != null && message.hasOwnProperty("code"))
+                        object.code = message.code;
+                    if (message.msg != null && message.hasOwnProperty("msg"))
+                        object.msg = message.msg;
+                    if (message.status != null && message.hasOwnProperty("status"))
+                        object.status = message.status;
+                    if (message.ts != null && message.hasOwnProperty("ts"))
+                        if (typeof message.ts === "number")
+                            object.ts = options.longs === String ? String(message.ts) : message.ts;
+                        else
+                            object.ts = options.longs === String ? $util.Long.prototype.toString.call(message.ts) : options.longs === Number ? new $util.LongBits(message.ts.low >>> 0, message.ts.high >>> 0).toNumber() : message.ts;
+                    if (message.ch != null && message.hasOwnProperty("ch"))
+                        object.ch = message.ch;
+                    if (message.klinelist != null && message.hasOwnProperty("klinelist"))
+                        object.klinelist = $root.market.v2.trade.KlineList.toObject(message.klinelist, options);
+                    if (message.tradedepthvo != null && message.hasOwnProperty("tradedepthvo"))
+                        object.tradedepthvo = $root.market.v2.trade.TradeDepthVO.toObject(message.tradedepthvo, options);
+                    if (message.tradedetaillist != null && message.hasOwnProperty("tradedetaillist"))
+                        object.tradedetaillist = $root.market.v2.trade.TradeDetailList.toObject(message.tradedetaillist, options);
+                    if (message.tradeareapair != null && message.hasOwnProperty("tradeareapair"))
+                        object.tradeareapair = $root.market.v2.trade.TradeAreaPair.toObject(message.tradeareapair, options);
+                    if (message.mainpair != null && message.hasOwnProperty("mainpair"))
+                        object.mainpair = $root.market.v2.trade.MainPair.toObject(message.mainpair, options);
+                    if (message.recommendpair != null && message.hasOwnProperty("recommendpair"))
+                        object.recommendpair = $root.market.v2.trade.RecommendPair.toObject(message.recommendpair, options);
+                    if (message.uppair != null && message.hasOwnProperty("uppair"))
+                        object.uppair = $root.market.v2.trade.UpPair.toObject(message.uppair, options);
+                    if (message.amtpair != null && message.hasOwnProperty("amtpair"))
+                        object.amtpair = $root.market.v2.trade.AmtPair.toObject(message.amtpair, options);
+                    if (message.starpair != null && message.hasOwnProperty("starpair"))
+                        object.starpair = $root.market.v2.trade.StarPair.toObject(message.starpair, options);
+                    if (message.tradetickervo != null && message.hasOwnProperty("tradetickervo"))
+                        object.tradetickervo = $root.market.v2.trade.TradeTickerVO.toObject(message.tradetickervo, options);
+                    if (message.entrustvo != null && message.hasOwnProperty("entrustvo"))
+                        object.entrustvo = $root.market.v2.trade.EntrustVO.toObject(message.entrustvo, options);
+                    if (message.userassetbalance != null && message.hasOwnProperty("userassetbalance"))
+                        object.userassetbalance = $root.market.v2.trade.UserAssetBalance.toObject(message.userassetbalance, options);
+                    if (message.markettickerlist != null && message.hasOwnProperty("markettickerlist"))
+                        object.markettickerlist = $root.market.v2.trade.MarketTickerList.toObject(message.markettickerlist, options);
+                    if (message.marketmonit != null && message.hasOwnProperty("marketmonit"))
+                        object.marketmonit = $root.market.v2.trade.MarketMonit.toObject(message.marketmonit, options);
+                    if (message.margincrossassetvo != null && message.hasOwnProperty("margincrossassetvo"))
+                        object.margincrossassetvo = $root.market.v2.trade.MarginCrossAssetVO.toObject(message.margincrossassetvo, options);
+                    if (message.marginisolatedassetvo != null && message.hasOwnProperty("marginisolatedassetvo"))
+                        object.marginisolatedassetvo = $root.market.v2.trade.MarginIsolatedAssetVO.toObject(message.marginisolatedassetvo, options);
+                    if (message.newlistingpair != null && message.hasOwnProperty("newlistingpair"))
+                        object.newlistingpair = $root.market.v2.trade.NewListingPair.toObject(message.newlistingpair, options);
+                    if (message.chgdistributions != null && message.hasOwnProperty("chgdistributions"))
+                        object.chgdistributions = $root.market.v2.trade.Chgdistributions.toObject(message.chgdistributions, options);
+                    if (message.marketzones != null && message.hasOwnProperty("marketzones"))
+                        object.marketzones = $root.market.v2.trade.MarketZones.toObject(message.marketzones, options);
+                    if (message.klineorders != null && message.hasOwnProperty("klineorders"))
+                        object.klineorders = $root.market.v2.trade.KlineOrders.toObject(message.klineorders, options);
+                    if (message.notificationpush != null && message.hasOwnProperty("notificationpush"))
+                        object.notificationpush = $root.market.v2.trade.NotificationPush.toObject(message.notificationpush, options);
+                    if (message.tradehotlisting != null && message.hasOwnProperty("tradehotlisting"))
+                        object.tradehotlisting = $root.market.v2.trade.TradeHotListing.toObject(message.tradehotlisting, options);
+                    if (message.ctcgoingordernum != null && message.hasOwnProperty("ctcgoingordernum"))
+                        object.ctcgoingordernum = $root.market.v2.trade.CtcGoingOrderNum.toObject(message.ctcgoingordernum, options);
+                    if (message.multichange != null && message.hasOwnProperty("multichange"))
+                        object.multichange = $root.market.v2.trade.MultiChange.toObject(message.multichange, options);
+                    if (message.heatmap != null && message.hasOwnProperty("heatmap"))
+                        object.heatmap = $root.market.v2.trade.Heatmap.toObject(message.heatmap, options);
+                    if (message.downpair != null && message.hasOwnProperty("downpair"))
+                        object.downpair = $root.market.v2.trade.DownPair.toObject(message.downpair, options);
+                    if (message.heatvol != null && message.hasOwnProperty("heatvol"))
+                        object.heatvol = $root.market.v2.trade.HeatVol.toObject(message.heatvol, options);
+                    if (message.currencyrate != null && message.hasOwnProperty("currencyrate"))
+                        object.currencyrate = $root.market.v2.trade.CurrencyRate.toObject(message.currencyrate, options);
+                    return object;
+                };
+
+                /**
+                 * Converts this Response to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.Response
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                Response.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for Response
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.Response
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                Response.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.Response";
+                };
+
+                return Response;
+            })();
+
+            trade.KlineList = (function() {
+
+                /**
+                 * Properties of a KlineList.
+                 * @memberof market.v2.trade
+                 * @interface IKlineList
+                 */
+
+                /**
+                 * Constructs a new KlineList.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a KlineList.
+                 * @implements IKlineList
+                 * @constructor
+                 * @param {market.v2.trade.IKlineList=} [properties] Properties to set
+                 */
+                function KlineList(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Creates a new KlineList instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.KlineList
+                 * @static
+                 * @param {market.v2.trade.IKlineList=} [properties] Properties to set
+                 * @returns {market.v2.trade.KlineList} KlineList instance
+                 */
+                KlineList.create = function create(properties) {
+                    return new KlineList(properties);
+                };
+
+                /**
+                 * Encodes the specified KlineList message. Does not implicitly {@link market.v2.trade.KlineList.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.KlineList
+                 * @static
+                 * @param {market.v2.trade.IKlineList} message KlineList message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                KlineList.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified KlineList message, length delimited. Does not implicitly {@link market.v2.trade.KlineList.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.KlineList
+                 * @static
+                 * @param {market.v2.trade.IKlineList} message KlineList message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                KlineList.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a KlineList message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.KlineList
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.KlineList} KlineList
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                KlineList.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.KlineList();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a KlineList message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.KlineList
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.KlineList} KlineList
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                KlineList.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a KlineList message.
+                 * @function verify
+                 * @memberof market.v2.trade.KlineList
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                KlineList.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a KlineList message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.KlineList
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.KlineList} KlineList
+                 */
+                KlineList.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.KlineList)
+                        return object;
+                    return new $root.market.v2.trade.KlineList();
+                };
+
+                /**
+                 * Creates a plain object from a KlineList message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.KlineList
+                 * @static
+                 * @param {market.v2.trade.KlineList} message KlineList
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                KlineList.toObject = function toObject() {
+                    return {};
+                };
+
+                /**
+                 * Converts this KlineList to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.KlineList
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                KlineList.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for KlineList
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.KlineList
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                KlineList.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.KlineList";
+                };
+
+                return KlineList;
+            })();
+
+            trade.TradeDepthVO = (function() {
+
+                /**
+                 * Properties of a TradeDepthVO.
+                 * @memberof market.v2.trade
+                 * @interface ITradeDepthVO
+                 * @property {market.v2.trade.TradeDepthVO.IBids|null} [bids] TradeDepthVO bids
+                 * @property {market.v2.trade.TradeDepthVO.IAsks|null} [asks] TradeDepthVO asks
+                 * @property {string|null} [last] TradeDepthVO last
+                 * @property {string|null} [open] TradeDepthVO open
+                 * @property {string|null} [cny] TradeDepthVO cny
+                 * @property {string|null} [netvalue] TradeDepthVO netvalue
+                 * @property {string|null} [buyorsellcnyprice] TradeDepthVO buyorsellcnyprice
+                 * @property {boolean|null} [isfiatconvert] TradeDepthVO isfiatconvert
+                 * @property {boolean|null} [isrisktip] TradeDepthVO isrisktip
+                 */
+
+                /**
+                 * Constructs a new TradeDepthVO.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a TradeDepthVO.
+                 * @implements ITradeDepthVO
+                 * @constructor
+                 * @param {market.v2.trade.ITradeDepthVO=} [properties] Properties to set
+                 */
+                function TradeDepthVO(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * TradeDepthVO bids.
+                 * @member {market.v2.trade.TradeDepthVO.IBids|null|undefined} bids
+                 * @memberof market.v2.trade.TradeDepthVO
+                 * @instance
+                 */
+                TradeDepthVO.prototype.bids = null;
+
+                /**
+                 * TradeDepthVO asks.
+                 * @member {market.v2.trade.TradeDepthVO.IAsks|null|undefined} asks
+                 * @memberof market.v2.trade.TradeDepthVO
+                 * @instance
+                 */
+                TradeDepthVO.prototype.asks = null;
+
+                /**
+                 * TradeDepthVO last.
+                 * @member {string} last
+                 * @memberof market.v2.trade.TradeDepthVO
+                 * @instance
+                 */
+                TradeDepthVO.prototype.last = "";
+
+                /**
+                 * TradeDepthVO open.
+                 * @member {string} open
+                 * @memberof market.v2.trade.TradeDepthVO
+                 * @instance
+                 */
+                TradeDepthVO.prototype.open = "";
+
+                /**
+                 * TradeDepthVO cny.
+                 * @member {string} cny
+                 * @memberof market.v2.trade.TradeDepthVO
+                 * @instance
+                 */
+                TradeDepthVO.prototype.cny = "";
+
+                /**
+                 * TradeDepthVO netvalue.
+                 * @member {string} netvalue
+                 * @memberof market.v2.trade.TradeDepthVO
+                 * @instance
+                 */
+                TradeDepthVO.prototype.netvalue = "";
+
+                /**
+                 * TradeDepthVO buyorsellcnyprice.
+                 * @member {string} buyorsellcnyprice
+                 * @memberof market.v2.trade.TradeDepthVO
+                 * @instance
+                 */
+                TradeDepthVO.prototype.buyorsellcnyprice = "";
+
+                /**
+                 * TradeDepthVO isfiatconvert.
+                 * @member {boolean} isfiatconvert
+                 * @memberof market.v2.trade.TradeDepthVO
+                 * @instance
+                 */
+                TradeDepthVO.prototype.isfiatconvert = false;
+
+                /**
+                 * TradeDepthVO isrisktip.
+                 * @member {boolean} isrisktip
+                 * @memberof market.v2.trade.TradeDepthVO
+                 * @instance
+                 */
+                TradeDepthVO.prototype.isrisktip = false;
+
+                /**
+                 * Creates a new TradeDepthVO instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.TradeDepthVO
+                 * @static
+                 * @param {market.v2.trade.ITradeDepthVO=} [properties] Properties to set
+                 * @returns {market.v2.trade.TradeDepthVO} TradeDepthVO instance
+                 */
+                TradeDepthVO.create = function create(properties) {
+                    return new TradeDepthVO(properties);
+                };
+
+                /**
+                 * Encodes the specified TradeDepthVO message. Does not implicitly {@link market.v2.trade.TradeDepthVO.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.TradeDepthVO
+                 * @static
+                 * @param {market.v2.trade.ITradeDepthVO} message TradeDepthVO message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                TradeDepthVO.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.bids != null && Object.hasOwnProperty.call(message, "bids"))
+                        $root.market.v2.trade.TradeDepthVO.Bids.encode(message.bids, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+                    if (message.asks != null && Object.hasOwnProperty.call(message, "asks"))
+                        $root.market.v2.trade.TradeDepthVO.Asks.encode(message.asks, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+                    if (message.last != null && Object.hasOwnProperty.call(message, "last"))
+                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.last);
+                    if (message.open != null && Object.hasOwnProperty.call(message, "open"))
+                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.open);
+                    if (message.cny != null && Object.hasOwnProperty.call(message, "cny"))
+                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.cny);
+                    if (message.netvalue != null && Object.hasOwnProperty.call(message, "netvalue"))
+                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.netvalue);
+                    if (message.buyorsellcnyprice != null && Object.hasOwnProperty.call(message, "buyorsellcnyprice"))
+                        writer.uint32(/* id 7, wireType 2 =*/58).string(message.buyorsellcnyprice);
+                    if (message.isfiatconvert != null && Object.hasOwnProperty.call(message, "isfiatconvert"))
+                        writer.uint32(/* id 8, wireType 0 =*/64).bool(message.isfiatconvert);
+                    if (message.isrisktip != null && Object.hasOwnProperty.call(message, "isrisktip"))
+                        writer.uint32(/* id 9, wireType 0 =*/72).bool(message.isrisktip);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified TradeDepthVO message, length delimited. Does not implicitly {@link market.v2.trade.TradeDepthVO.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.TradeDepthVO
+                 * @static
+                 * @param {market.v2.trade.ITradeDepthVO} message TradeDepthVO message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                TradeDepthVO.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a TradeDepthVO message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.TradeDepthVO
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.TradeDepthVO} TradeDepthVO
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                TradeDepthVO.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.TradeDepthVO();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.bids = $root.market.v2.trade.TradeDepthVO.Bids.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 2: {
+                                message.asks = $root.market.v2.trade.TradeDepthVO.Asks.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 3: {
+                                message.last = reader.string();
+                                break;
+                            }
+                        case 4: {
+                                message.open = reader.string();
+                                break;
+                            }
+                        case 5: {
+                                message.cny = reader.string();
+                                break;
+                            }
+                        case 6: {
+                                message.netvalue = reader.string();
+                                break;
+                            }
+                        case 7: {
+                                message.buyorsellcnyprice = reader.string();
+                                break;
+                            }
+                        case 8: {
+                                message.isfiatconvert = reader.bool();
+                                break;
+                            }
+                        case 9: {
+                                message.isrisktip = reader.bool();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a TradeDepthVO message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.TradeDepthVO
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.TradeDepthVO} TradeDepthVO
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                TradeDepthVO.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a TradeDepthVO message.
+                 * @function verify
+                 * @memberof market.v2.trade.TradeDepthVO
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                TradeDepthVO.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.bids != null && message.hasOwnProperty("bids")) {
+                        var error = $root.market.v2.trade.TradeDepthVO.Bids.verify(message.bids);
+                        if (error)
+                            return "bids." + error;
+                    }
+                    if (message.asks != null && message.hasOwnProperty("asks")) {
+                        var error = $root.market.v2.trade.TradeDepthVO.Asks.verify(message.asks);
+                        if (error)
+                            return "asks." + error;
+                    }
+                    if (message.last != null && message.hasOwnProperty("last"))
+                        if (!$util.isString(message.last))
+                            return "last: string expected";
+                    if (message.open != null && message.hasOwnProperty("open"))
+                        if (!$util.isString(message.open))
+                            return "open: string expected";
+                    if (message.cny != null && message.hasOwnProperty("cny"))
+                        if (!$util.isString(message.cny))
+                            return "cny: string expected";
+                    if (message.netvalue != null && message.hasOwnProperty("netvalue"))
+                        if (!$util.isString(message.netvalue))
+                            return "netvalue: string expected";
+                    if (message.buyorsellcnyprice != null && message.hasOwnProperty("buyorsellcnyprice"))
+                        if (!$util.isString(message.buyorsellcnyprice))
+                            return "buyorsellcnyprice: string expected";
+                    if (message.isfiatconvert != null && message.hasOwnProperty("isfiatconvert"))
+                        if (typeof message.isfiatconvert !== "boolean")
+                            return "isfiatconvert: boolean expected";
+                    if (message.isrisktip != null && message.hasOwnProperty("isrisktip"))
+                        if (typeof message.isrisktip !== "boolean")
+                            return "isrisktip: boolean expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a TradeDepthVO message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.TradeDepthVO
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.TradeDepthVO} TradeDepthVO
+                 */
+                TradeDepthVO.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.TradeDepthVO)
+                        return object;
+                    var message = new $root.market.v2.trade.TradeDepthVO();
+                    if (object.bids != null) {
+                        if (typeof object.bids !== "object")
+                            throw TypeError(".market.v2.trade.TradeDepthVO.bids: object expected");
+                        message.bids = $root.market.v2.trade.TradeDepthVO.Bids.fromObject(object.bids);
+                    }
+                    if (object.asks != null) {
+                        if (typeof object.asks !== "object")
+                            throw TypeError(".market.v2.trade.TradeDepthVO.asks: object expected");
+                        message.asks = $root.market.v2.trade.TradeDepthVO.Asks.fromObject(object.asks);
+                    }
+                    if (object.last != null)
+                        message.last = String(object.last);
+                    if (object.open != null)
+                        message.open = String(object.open);
+                    if (object.cny != null)
+                        message.cny = String(object.cny);
+                    if (object.netvalue != null)
+                        message.netvalue = String(object.netvalue);
+                    if (object.buyorsellcnyprice != null)
+                        message.buyorsellcnyprice = String(object.buyorsellcnyprice);
+                    if (object.isfiatconvert != null)
+                        message.isfiatconvert = Boolean(object.isfiatconvert);
+                    if (object.isrisktip != null)
+                        message.isrisktip = Boolean(object.isrisktip);
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a TradeDepthVO message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.TradeDepthVO
+                 * @static
+                 * @param {market.v2.trade.TradeDepthVO} message TradeDepthVO
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                TradeDepthVO.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.bids = null;
+                        object.asks = null;
+                        object.last = "";
+                        object.open = "";
+                        object.cny = "";
+                        object.netvalue = "";
+                        object.buyorsellcnyprice = "";
+                        object.isfiatconvert = false;
+                        object.isrisktip = false;
+                    }
+                    if (message.bids != null && message.hasOwnProperty("bids"))
+                        object.bids = $root.market.v2.trade.TradeDepthVO.Bids.toObject(message.bids, options);
+                    if (message.asks != null && message.hasOwnProperty("asks"))
+                        object.asks = $root.market.v2.trade.TradeDepthVO.Asks.toObject(message.asks, options);
+                    if (message.last != null && message.hasOwnProperty("last"))
+                        object.last = message.last;
+                    if (message.open != null && message.hasOwnProperty("open"))
+                        object.open = message.open;
+                    if (message.cny != null && message.hasOwnProperty("cny"))
+                        object.cny = message.cny;
+                    if (message.netvalue != null && message.hasOwnProperty("netvalue"))
+                        object.netvalue = message.netvalue;
+                    if (message.buyorsellcnyprice != null && message.hasOwnProperty("buyorsellcnyprice"))
+                        object.buyorsellcnyprice = message.buyorsellcnyprice;
+                    if (message.isfiatconvert != null && message.hasOwnProperty("isfiatconvert"))
+                        object.isfiatconvert = message.isfiatconvert;
+                    if (message.isrisktip != null && message.hasOwnProperty("isrisktip"))
+                        object.isrisktip = message.isrisktip;
+                    return object;
+                };
+
+                /**
+                 * Converts this TradeDepthVO to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.TradeDepthVO
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                TradeDepthVO.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for TradeDepthVO
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.TradeDepthVO
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                TradeDepthVO.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.TradeDepthVO";
+                };
+
+                TradeDepthVO.Bids = (function() {
+
+                    /**
+                     * Properties of a Bids.
+                     * @memberof market.v2.trade.TradeDepthVO
+                     * @interface IBids
+                     */
+
+                    /**
+                     * Constructs a new Bids.
+                     * @memberof market.v2.trade.TradeDepthVO
+                     * @classdesc Represents a Bids.
+                     * @implements IBids
+                     * @constructor
+                     * @param {market.v2.trade.TradeDepthVO.IBids=} [properties] Properties to set
+                     */
+                    function Bids(properties) {
+                        if (properties)
+                            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                                if (properties[keys[i]] != null)
+                                    this[keys[i]] = properties[keys[i]];
+                    }
+
+                    /**
+                     * Creates a new Bids instance using the specified properties.
+                     * @function create
+                     * @memberof market.v2.trade.TradeDepthVO.Bids
+                     * @static
+                     * @param {market.v2.trade.TradeDepthVO.IBids=} [properties] Properties to set
+                     * @returns {market.v2.trade.TradeDepthVO.Bids} Bids instance
+                     */
+                    Bids.create = function create(properties) {
+                        return new Bids(properties);
+                    };
+
+                    /**
+                     * Encodes the specified Bids message. Does not implicitly {@link market.v2.trade.TradeDepthVO.Bids.verify|verify} messages.
+                     * @function encode
+                     * @memberof market.v2.trade.TradeDepthVO.Bids
+                     * @static
+                     * @param {market.v2.trade.TradeDepthVO.IBids} message Bids message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Bids.encode = function encode(message, writer) {
+                        if (!writer)
+                            writer = $Writer.create();
+                        return writer;
+                    };
+
+                    /**
+                     * Encodes the specified Bids message, length delimited. Does not implicitly {@link market.v2.trade.TradeDepthVO.Bids.verify|verify} messages.
+                     * @function encodeDelimited
+                     * @memberof market.v2.trade.TradeDepthVO.Bids
+                     * @static
+                     * @param {market.v2.trade.TradeDepthVO.IBids} message Bids message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Bids.encodeDelimited = function encodeDelimited(message, writer) {
+                        return this.encode(message, writer).ldelim();
+                    };
+
+                    /**
+                     * Decodes a Bids message from the specified reader or buffer.
+                     * @function decode
+                     * @memberof market.v2.trade.TradeDepthVO.Bids
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @param {number} [length] Message length if known beforehand
+                     * @returns {market.v2.trade.TradeDepthVO.Bids} Bids
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Bids.decode = function decode(reader, length) {
+                        if (!(reader instanceof $Reader))
+                            reader = $Reader.create(reader);
+                        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.TradeDepthVO.Bids();
+                        while (reader.pos < end) {
+                            var tag = reader.uint32();
+                            switch (tag >>> 3) {
+                            default:
+                                reader.skipType(tag & 7);
+                                break;
+                            }
+                        }
+                        return message;
+                    };
+
+                    /**
+                     * Decodes a Bids message from the specified reader or buffer, length delimited.
+                     * @function decodeDelimited
+                     * @memberof market.v2.trade.TradeDepthVO.Bids
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @returns {market.v2.trade.TradeDepthVO.Bids} Bids
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Bids.decodeDelimited = function decodeDelimited(reader) {
+                        if (!(reader instanceof $Reader))
+                            reader = new $Reader(reader);
+                        return this.decode(reader, reader.uint32());
+                    };
+
+                    /**
+                     * Verifies a Bids message.
+                     * @function verify
+                     * @memberof market.v2.trade.TradeDepthVO.Bids
+                     * @static
+                     * @param {Object.<string,*>} message Plain object to verify
+                     * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                     */
+                    Bids.verify = function verify(message) {
+                        if (typeof message !== "object" || message === null)
+                            return "object expected";
+                        return null;
+                    };
+
+                    /**
+                     * Creates a Bids message from a plain object. Also converts values to their respective internal types.
+                     * @function fromObject
+                     * @memberof market.v2.trade.TradeDepthVO.Bids
+                     * @static
+                     * @param {Object.<string,*>} object Plain object
+                     * @returns {market.v2.trade.TradeDepthVO.Bids} Bids
+                     */
+                    Bids.fromObject = function fromObject(object) {
+                        if (object instanceof $root.market.v2.trade.TradeDepthVO.Bids)
+                            return object;
+                        return new $root.market.v2.trade.TradeDepthVO.Bids();
+                    };
+
+                    /**
+                     * Creates a plain object from a Bids message. Also converts values to other types if specified.
+                     * @function toObject
+                     * @memberof market.v2.trade.TradeDepthVO.Bids
+                     * @static
+                     * @param {market.v2.trade.TradeDepthVO.Bids} message Bids
+                     * @param {$protobuf.IConversionOptions} [options] Conversion options
+                     * @returns {Object.<string,*>} Plain object
+                     */
+                    Bids.toObject = function toObject() {
+                        return {};
+                    };
+
+                    /**
+                     * Converts this Bids to JSON.
+                     * @function toJSON
+                     * @memberof market.v2.trade.TradeDepthVO.Bids
+                     * @instance
+                     * @returns {Object.<string,*>} JSON object
+                     */
+                    Bids.prototype.toJSON = function toJSON() {
+                        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                    };
+
+                    /**
+                     * Gets the default type url for Bids
+                     * @function getTypeUrl
+                     * @memberof market.v2.trade.TradeDepthVO.Bids
+                     * @static
+                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                     * @returns {string} The default type url
+                     */
+                    Bids.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                        if (typeUrlPrefix === undefined) {
+                            typeUrlPrefix = "type.googleapis.com";
+                        }
+                        return typeUrlPrefix + "/market.v2.trade.TradeDepthVO.Bids";
+                    };
+
+                    return Bids;
+                })();
+
+                TradeDepthVO.Asks = (function() {
+
+                    /**
+                     * Properties of an Asks.
+                     * @memberof market.v2.trade.TradeDepthVO
+                     * @interface IAsks
+                     * @property {Array.<market.v2.trade.TradeDepthVO.Asks.IAskData>|null} [askdataList] Asks askdataList
+                     */
+
+                    /**
+                     * Constructs a new Asks.
+                     * @memberof market.v2.trade.TradeDepthVO
+                     * @classdesc Represents an Asks.
+                     * @implements IAsks
+                     * @constructor
+                     * @param {market.v2.trade.TradeDepthVO.IAsks=} [properties] Properties to set
+                     */
+                    function Asks(properties) {
+                        this.askdataList = [];
+                        if (properties)
+                            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                                if (properties[keys[i]] != null)
+                                    this[keys[i]] = properties[keys[i]];
+                    }
+
+                    /**
+                     * Asks askdataList.
+                     * @member {Array.<market.v2.trade.TradeDepthVO.Asks.IAskData>} askdataList
+                     * @memberof market.v2.trade.TradeDepthVO.Asks
+                     * @instance
+                     */
+                    Asks.prototype.askdataList = $util.emptyArray;
+
+                    /**
+                     * Creates a new Asks instance using the specified properties.
+                     * @function create
+                     * @memberof market.v2.trade.TradeDepthVO.Asks
+                     * @static
+                     * @param {market.v2.trade.TradeDepthVO.IAsks=} [properties] Properties to set
+                     * @returns {market.v2.trade.TradeDepthVO.Asks} Asks instance
+                     */
+                    Asks.create = function create(properties) {
+                        return new Asks(properties);
+                    };
+
+                    /**
+                     * Encodes the specified Asks message. Does not implicitly {@link market.v2.trade.TradeDepthVO.Asks.verify|verify} messages.
+                     * @function encode
+                     * @memberof market.v2.trade.TradeDepthVO.Asks
+                     * @static
+                     * @param {market.v2.trade.TradeDepthVO.IAsks} message Asks message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Asks.encode = function encode(message, writer) {
+                        if (!writer)
+                            writer = $Writer.create();
+                        if (message.askdataList != null && message.askdataList.length)
+                            for (var i = 0; i < message.askdataList.length; ++i)
+                                $root.market.v2.trade.TradeDepthVO.Asks.AskData.encode(message.askdataList[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+                        return writer;
+                    };
+
+                    /**
+                     * Encodes the specified Asks message, length delimited. Does not implicitly {@link market.v2.trade.TradeDepthVO.Asks.verify|verify} messages.
+                     * @function encodeDelimited
+                     * @memberof market.v2.trade.TradeDepthVO.Asks
+                     * @static
+                     * @param {market.v2.trade.TradeDepthVO.IAsks} message Asks message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Asks.encodeDelimited = function encodeDelimited(message, writer) {
+                        return this.encode(message, writer).ldelim();
+                    };
+
+                    /**
+                     * Decodes an Asks message from the specified reader or buffer.
+                     * @function decode
+                     * @memberof market.v2.trade.TradeDepthVO.Asks
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @param {number} [length] Message length if known beforehand
+                     * @returns {market.v2.trade.TradeDepthVO.Asks} Asks
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Asks.decode = function decode(reader, length) {
+                        if (!(reader instanceof $Reader))
+                            reader = $Reader.create(reader);
+                        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.TradeDepthVO.Asks();
+                        while (reader.pos < end) {
+                            var tag = reader.uint32();
+                            switch (tag >>> 3) {
+                            case 1: {
+                                    if (!(message.askdataList && message.askdataList.length))
+                                        message.askdataList = [];
+                                    message.askdataList.push($root.market.v2.trade.TradeDepthVO.Asks.AskData.decode(reader, reader.uint32()));
+                                    break;
+                                }
+                            default:
+                                reader.skipType(tag & 7);
+                                break;
+                            }
+                        }
+                        return message;
+                    };
+
+                    /**
+                     * Decodes an Asks message from the specified reader or buffer, length delimited.
+                     * @function decodeDelimited
+                     * @memberof market.v2.trade.TradeDepthVO.Asks
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @returns {market.v2.trade.TradeDepthVO.Asks} Asks
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Asks.decodeDelimited = function decodeDelimited(reader) {
+                        if (!(reader instanceof $Reader))
+                            reader = new $Reader(reader);
+                        return this.decode(reader, reader.uint32());
+                    };
+
+                    /**
+                     * Verifies an Asks message.
+                     * @function verify
+                     * @memberof market.v2.trade.TradeDepthVO.Asks
+                     * @static
+                     * @param {Object.<string,*>} message Plain object to verify
+                     * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                     */
+                    Asks.verify = function verify(message) {
+                        if (typeof message !== "object" || message === null)
+                            return "object expected";
+                        if (message.askdataList != null && message.hasOwnProperty("askdataList")) {
+                            if (!Array.isArray(message.askdataList))
+                                return "askdataList: array expected";
+                            for (var i = 0; i < message.askdataList.length; ++i) {
+                                var error = $root.market.v2.trade.TradeDepthVO.Asks.AskData.verify(message.askdataList[i]);
+                                if (error)
+                                    return "askdataList." + error;
+                            }
+                        }
+                        return null;
+                    };
+
+                    /**
+                     * Creates an Asks message from a plain object. Also converts values to their respective internal types.
+                     * @function fromObject
+                     * @memberof market.v2.trade.TradeDepthVO.Asks
+                     * @static
+                     * @param {Object.<string,*>} object Plain object
+                     * @returns {market.v2.trade.TradeDepthVO.Asks} Asks
+                     */
+                    Asks.fromObject = function fromObject(object) {
+                        if (object instanceof $root.market.v2.trade.TradeDepthVO.Asks)
+                            return object;
+                        var message = new $root.market.v2.trade.TradeDepthVO.Asks();
+                        if (object.askdataList) {
+                            if (!Array.isArray(object.askdataList))
+                                throw TypeError(".market.v2.trade.TradeDepthVO.Asks.askdataList: array expected");
+                            message.askdataList = [];
+                            for (var i = 0; i < object.askdataList.length; ++i) {
+                                if (typeof object.askdataList[i] !== "object")
+                                    throw TypeError(".market.v2.trade.TradeDepthVO.Asks.askdataList: object expected");
+                                message.askdataList[i] = $root.market.v2.trade.TradeDepthVO.Asks.AskData.fromObject(object.askdataList[i]);
+                            }
+                        }
+                        return message;
+                    };
+
+                    /**
+                     * Creates a plain object from an Asks message. Also converts values to other types if specified.
+                     * @function toObject
+                     * @memberof market.v2.trade.TradeDepthVO.Asks
+                     * @static
+                     * @param {market.v2.trade.TradeDepthVO.Asks} message Asks
+                     * @param {$protobuf.IConversionOptions} [options] Conversion options
+                     * @returns {Object.<string,*>} Plain object
+                     */
+                    Asks.toObject = function toObject(message, options) {
+                        if (!options)
+                            options = {};
+                        var object = {};
+                        if (options.arrays || options.defaults)
+                            object.askdataList = [];
+                        if (message.askdataList && message.askdataList.length) {
+                            object.askdataList = [];
+                            for (var j = 0; j < message.askdataList.length; ++j)
+                                object.askdataList[j] = $root.market.v2.trade.TradeDepthVO.Asks.AskData.toObject(message.askdataList[j], options);
+                        }
+                        return object;
+                    };
+
+                    /**
+                     * Converts this Asks to JSON.
+                     * @function toJSON
+                     * @memberof market.v2.trade.TradeDepthVO.Asks
+                     * @instance
+                     * @returns {Object.<string,*>} JSON object
+                     */
+                    Asks.prototype.toJSON = function toJSON() {
+                        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                    };
+
+                    /**
+                     * Gets the default type url for Asks
+                     * @function getTypeUrl
+                     * @memberof market.v2.trade.TradeDepthVO.Asks
+                     * @static
+                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                     * @returns {string} The default type url
+                     */
+                    Asks.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                        if (typeUrlPrefix === undefined) {
+                            typeUrlPrefix = "type.googleapis.com";
+                        }
+                        return typeUrlPrefix + "/market.v2.trade.TradeDepthVO.Asks";
+                    };
+
+                    Asks.AskData = (function() {
+
+                        /**
+                         * Properties of an AskData.
+                         * @memberof market.v2.trade.TradeDepthVO.Asks
+                         * @interface IAskData
+                         */
+
+                        /**
+                         * Constructs a new AskData.
+                         * @memberof market.v2.trade.TradeDepthVO.Asks
+                         * @classdesc Represents an AskData.
+                         * @implements IAskData
+                         * @constructor
+                         * @param {market.v2.trade.TradeDepthVO.Asks.IAskData=} [properties] Properties to set
+                         */
+                        function AskData(properties) {
+                            if (properties)
+                                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                                    if (properties[keys[i]] != null)
+                                        this[keys[i]] = properties[keys[i]];
+                        }
+
+                        /**
+                         * Creates a new AskData instance using the specified properties.
+                         * @function create
+                         * @memberof market.v2.trade.TradeDepthVO.Asks.AskData
+                         * @static
+                         * @param {market.v2.trade.TradeDepthVO.Asks.IAskData=} [properties] Properties to set
+                         * @returns {market.v2.trade.TradeDepthVO.Asks.AskData} AskData instance
+                         */
+                        AskData.create = function create(properties) {
+                            return new AskData(properties);
+                        };
+
+                        /**
+                         * Encodes the specified AskData message. Does not implicitly {@link market.v2.trade.TradeDepthVO.Asks.AskData.verify|verify} messages.
+                         * @function encode
+                         * @memberof market.v2.trade.TradeDepthVO.Asks.AskData
+                         * @static
+                         * @param {market.v2.trade.TradeDepthVO.Asks.IAskData} message AskData message or plain object to encode
+                         * @param {$protobuf.Writer} [writer] Writer to encode to
+                         * @returns {$protobuf.Writer} Writer
+                         */
+                        AskData.encode = function encode(message, writer) {
+                            if (!writer)
+                                writer = $Writer.create();
+                            return writer;
+                        };
+
+                        /**
+                         * Encodes the specified AskData message, length delimited. Does not implicitly {@link market.v2.trade.TradeDepthVO.Asks.AskData.verify|verify} messages.
+                         * @function encodeDelimited
+                         * @memberof market.v2.trade.TradeDepthVO.Asks.AskData
+                         * @static
+                         * @param {market.v2.trade.TradeDepthVO.Asks.IAskData} message AskData message or plain object to encode
+                         * @param {$protobuf.Writer} [writer] Writer to encode to
+                         * @returns {$protobuf.Writer} Writer
+                         */
+                        AskData.encodeDelimited = function encodeDelimited(message, writer) {
+                            return this.encode(message, writer).ldelim();
+                        };
+
+                        /**
+                         * Decodes an AskData message from the specified reader or buffer.
+                         * @function decode
+                         * @memberof market.v2.trade.TradeDepthVO.Asks.AskData
+                         * @static
+                         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                         * @param {number} [length] Message length if known beforehand
+                         * @returns {market.v2.trade.TradeDepthVO.Asks.AskData} AskData
+                         * @throws {Error} If the payload is not a reader or valid buffer
+                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                         */
+                        AskData.decode = function decode(reader, length) {
+                            if (!(reader instanceof $Reader))
+                                reader = $Reader.create(reader);
+                            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.TradeDepthVO.Asks.AskData();
+                            while (reader.pos < end) {
+                                var tag = reader.uint32();
+                                switch (tag >>> 3) {
+                                default:
+                                    reader.skipType(tag & 7);
+                                    break;
+                                }
+                            }
+                            return message;
+                        };
+
+                        /**
+                         * Decodes an AskData message from the specified reader or buffer, length delimited.
+                         * @function decodeDelimited
+                         * @memberof market.v2.trade.TradeDepthVO.Asks.AskData
+                         * @static
+                         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                         * @returns {market.v2.trade.TradeDepthVO.Asks.AskData} AskData
+                         * @throws {Error} If the payload is not a reader or valid buffer
+                         * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                         */
+                        AskData.decodeDelimited = function decodeDelimited(reader) {
+                            if (!(reader instanceof $Reader))
+                                reader = new $Reader(reader);
+                            return this.decode(reader, reader.uint32());
+                        };
+
+                        /**
+                         * Verifies an AskData message.
+                         * @function verify
+                         * @memberof market.v2.trade.TradeDepthVO.Asks.AskData
+                         * @static
+                         * @param {Object.<string,*>} message Plain object to verify
+                         * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                         */
+                        AskData.verify = function verify(message) {
+                            if (typeof message !== "object" || message === null)
+                                return "object expected";
+                            return null;
+                        };
+
+                        /**
+                         * Creates an AskData message from a plain object. Also converts values to their respective internal types.
+                         * @function fromObject
+                         * @memberof market.v2.trade.TradeDepthVO.Asks.AskData
+                         * @static
+                         * @param {Object.<string,*>} object Plain object
+                         * @returns {market.v2.trade.TradeDepthVO.Asks.AskData} AskData
+                         */
+                        AskData.fromObject = function fromObject(object) {
+                            if (object instanceof $root.market.v2.trade.TradeDepthVO.Asks.AskData)
+                                return object;
+                            return new $root.market.v2.trade.TradeDepthVO.Asks.AskData();
+                        };
+
+                        /**
+                         * Creates a plain object from an AskData message. Also converts values to other types if specified.
+                         * @function toObject
+                         * @memberof market.v2.trade.TradeDepthVO.Asks.AskData
+                         * @static
+                         * @param {market.v2.trade.TradeDepthVO.Asks.AskData} message AskData
+                         * @param {$protobuf.IConversionOptions} [options] Conversion options
+                         * @returns {Object.<string,*>} Plain object
+                         */
+                        AskData.toObject = function toObject() {
+                            return {};
+                        };
+
+                        /**
+                         * Converts this AskData to JSON.
+                         * @function toJSON
+                         * @memberof market.v2.trade.TradeDepthVO.Asks.AskData
+                         * @instance
+                         * @returns {Object.<string,*>} JSON object
+                         */
+                        AskData.prototype.toJSON = function toJSON() {
+                            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                        };
+
+                        /**
+                         * Gets the default type url for AskData
+                         * @function getTypeUrl
+                         * @memberof market.v2.trade.TradeDepthVO.Asks.AskData
+                         * @static
+                         * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                         * @returns {string} The default type url
+                         */
+                        AskData.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                            if (typeUrlPrefix === undefined) {
+                                typeUrlPrefix = "type.googleapis.com";
+                            }
+                            return typeUrlPrefix + "/market.v2.trade.TradeDepthVO.Asks.AskData";
+                        };
+
+                        return AskData;
+                    })();
+
+                    return Asks;
+                })();
+
+                return TradeDepthVO;
+            })();
+
+            trade.TradeDetailList = (function() {
+
+                /**
+                 * Properties of a TradeDetailList.
+                 * @memberof market.v2.trade
+                 * @interface ITradeDetailList
+                 * @property {Array.<market.v2.trade.ITradeDetailInfo>|null} [list] TradeDetailList list
+                 */
+
+                /**
+                 * Constructs a new TradeDetailList.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a TradeDetailList.
+                 * @implements ITradeDetailList
+                 * @constructor
+                 * @param {market.v2.trade.ITradeDetailList=} [properties] Properties to set
+                 */
+                function TradeDetailList(properties) {
+                    this.list = [];
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * TradeDetailList list.
+                 * @member {Array.<market.v2.trade.ITradeDetailInfo>} list
+                 * @memberof market.v2.trade.TradeDetailList
+                 * @instance
+                 */
+                TradeDetailList.prototype.list = $util.emptyArray;
+
+                /**
+                 * Creates a new TradeDetailList instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.TradeDetailList
+                 * @static
+                 * @param {market.v2.trade.ITradeDetailList=} [properties] Properties to set
+                 * @returns {market.v2.trade.TradeDetailList} TradeDetailList instance
+                 */
+                TradeDetailList.create = function create(properties) {
+                    return new TradeDetailList(properties);
+                };
+
+                /**
+                 * Encodes the specified TradeDetailList message. Does not implicitly {@link market.v2.trade.TradeDetailList.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.TradeDetailList
+                 * @static
+                 * @param {market.v2.trade.ITradeDetailList} message TradeDetailList message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                TradeDetailList.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.list != null && message.list.length)
+                        for (var i = 0; i < message.list.length; ++i)
+                            $root.market.v2.trade.TradeDetailInfo.encode(message.list[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified TradeDetailList message, length delimited. Does not implicitly {@link market.v2.trade.TradeDetailList.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.TradeDetailList
+                 * @static
+                 * @param {market.v2.trade.ITradeDetailList} message TradeDetailList message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                TradeDetailList.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a TradeDetailList message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.TradeDetailList
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.TradeDetailList} TradeDetailList
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                TradeDetailList.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.TradeDetailList();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                if (!(message.list && message.list.length))
+                                    message.list = [];
+                                message.list.push($root.market.v2.trade.TradeDetailInfo.decode(reader, reader.uint32()));
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a TradeDetailList message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.TradeDetailList
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.TradeDetailList} TradeDetailList
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                TradeDetailList.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a TradeDetailList message.
+                 * @function verify
+                 * @memberof market.v2.trade.TradeDetailList
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                TradeDetailList.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.list != null && message.hasOwnProperty("list")) {
+                        if (!Array.isArray(message.list))
+                            return "list: array expected";
+                        for (var i = 0; i < message.list.length; ++i) {
+                            var error = $root.market.v2.trade.TradeDetailInfo.verify(message.list[i]);
+                            if (error)
+                                return "list." + error;
+                        }
+                    }
+                    return null;
+                };
+
+                /**
+                 * Creates a TradeDetailList message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.TradeDetailList
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.TradeDetailList} TradeDetailList
+                 */
+                TradeDetailList.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.TradeDetailList)
+                        return object;
+                    var message = new $root.market.v2.trade.TradeDetailList();
+                    if (object.list) {
+                        if (!Array.isArray(object.list))
+                            throw TypeError(".market.v2.trade.TradeDetailList.list: array expected");
+                        message.list = [];
+                        for (var i = 0; i < object.list.length; ++i) {
+                            if (typeof object.list[i] !== "object")
+                                throw TypeError(".market.v2.trade.TradeDetailList.list: object expected");
+                            message.list[i] = $root.market.v2.trade.TradeDetailInfo.fromObject(object.list[i]);
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a TradeDetailList message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.TradeDetailList
+                 * @static
+                 * @param {market.v2.trade.TradeDetailList} message TradeDetailList
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                TradeDetailList.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.arrays || options.defaults)
+                        object.list = [];
+                    if (message.list && message.list.length) {
+                        object.list = [];
+                        for (var j = 0; j < message.list.length; ++j)
+                            object.list[j] = $root.market.v2.trade.TradeDetailInfo.toObject(message.list[j], options);
+                    }
+                    return object;
+                };
+
+                /**
+                 * Converts this TradeDetailList to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.TradeDetailList
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                TradeDetailList.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for TradeDetailList
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.TradeDetailList
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                TradeDetailList.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.TradeDetailList";
+                };
+
+                return TradeDetailList;
+            })();
+
+            trade.TradeDetailInfo = (function() {
+
+                /**
+                 * Properties of a TradeDetailInfo.
+                 * @memberof market.v2.trade
+                 * @interface ITradeDetailInfo
+                 * @property {number|Long|null} [tradeid] TradeDetailInfo tradeid
+                 * @property {string|null} [amount] TradeDetailInfo amount
+                 * @property {string|null} [ts] TradeDetailInfo ts
+                 * @property {string|null} [price] TradeDetailInfo price
+                 * @property {string|null} [direction] TradeDetailInfo direction
+                 */
+
+                /**
+                 * Constructs a new TradeDetailInfo.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a TradeDetailInfo.
+                 * @implements ITradeDetailInfo
+                 * @constructor
+                 * @param {market.v2.trade.ITradeDetailInfo=} [properties] Properties to set
+                 */
+                function TradeDetailInfo(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * TradeDetailInfo tradeid.
+                 * @member {number|Long} tradeid
+                 * @memberof market.v2.trade.TradeDetailInfo
+                 * @instance
+                 */
+                TradeDetailInfo.prototype.tradeid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                /**
+                 * TradeDetailInfo amount.
+                 * @member {string} amount
+                 * @memberof market.v2.trade.TradeDetailInfo
+                 * @instance
+                 */
+                TradeDetailInfo.prototype.amount = "";
+
+                /**
+                 * TradeDetailInfo ts.
+                 * @member {string} ts
+                 * @memberof market.v2.trade.TradeDetailInfo
+                 * @instance
+                 */
+                TradeDetailInfo.prototype.ts = "";
+
+                /**
+                 * TradeDetailInfo price.
+                 * @member {string} price
+                 * @memberof market.v2.trade.TradeDetailInfo
+                 * @instance
+                 */
+                TradeDetailInfo.prototype.price = "";
+
+                /**
+                 * TradeDetailInfo direction.
+                 * @member {string} direction
+                 * @memberof market.v2.trade.TradeDetailInfo
+                 * @instance
+                 */
+                TradeDetailInfo.prototype.direction = "";
+
+                /**
+                 * Creates a new TradeDetailInfo instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.TradeDetailInfo
+                 * @static
+                 * @param {market.v2.trade.ITradeDetailInfo=} [properties] Properties to set
+                 * @returns {market.v2.trade.TradeDetailInfo} TradeDetailInfo instance
+                 */
+                TradeDetailInfo.create = function create(properties) {
+                    return new TradeDetailInfo(properties);
+                };
+
+                /**
+                 * Encodes the specified TradeDetailInfo message. Does not implicitly {@link market.v2.trade.TradeDetailInfo.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.TradeDetailInfo
+                 * @static
+                 * @param {market.v2.trade.ITradeDetailInfo} message TradeDetailInfo message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                TradeDetailInfo.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.tradeid != null && Object.hasOwnProperty.call(message, "tradeid"))
+                        writer.uint32(/* id 1, wireType 0 =*/8).int64(message.tradeid);
+                    if (message.amount != null && Object.hasOwnProperty.call(message, "amount"))
+                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.amount);
+                    if (message.ts != null && Object.hasOwnProperty.call(message, "ts"))
+                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.ts);
+                    if (message.price != null && Object.hasOwnProperty.call(message, "price"))
+                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.price);
+                    if (message.direction != null && Object.hasOwnProperty.call(message, "direction"))
+                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.direction);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified TradeDetailInfo message, length delimited. Does not implicitly {@link market.v2.trade.TradeDetailInfo.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.TradeDetailInfo
+                 * @static
+                 * @param {market.v2.trade.ITradeDetailInfo} message TradeDetailInfo message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                TradeDetailInfo.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a TradeDetailInfo message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.TradeDetailInfo
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.TradeDetailInfo} TradeDetailInfo
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                TradeDetailInfo.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.TradeDetailInfo();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.tradeid = reader.int64();
+                                break;
+                            }
+                        case 2: {
+                                message.amount = reader.string();
+                                break;
+                            }
+                        case 3: {
+                                message.ts = reader.string();
+                                break;
+                            }
+                        case 4: {
+                                message.price = reader.string();
+                                break;
+                            }
+                        case 5: {
+                                message.direction = reader.string();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a TradeDetailInfo message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.TradeDetailInfo
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.TradeDetailInfo} TradeDetailInfo
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                TradeDetailInfo.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a TradeDetailInfo message.
+                 * @function verify
+                 * @memberof market.v2.trade.TradeDetailInfo
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                TradeDetailInfo.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.tradeid != null && message.hasOwnProperty("tradeid"))
+                        if (!$util.isInteger(message.tradeid) && !(message.tradeid && $util.isInteger(message.tradeid.low) && $util.isInteger(message.tradeid.high)))
+                            return "tradeid: integer|Long expected";
+                    if (message.amount != null && message.hasOwnProperty("amount"))
+                        if (!$util.isString(message.amount))
+                            return "amount: string expected";
+                    if (message.ts != null && message.hasOwnProperty("ts"))
+                        if (!$util.isString(message.ts))
+                            return "ts: string expected";
+                    if (message.price != null && message.hasOwnProperty("price"))
+                        if (!$util.isString(message.price))
+                            return "price: string expected";
+                    if (message.direction != null && message.hasOwnProperty("direction"))
+                        if (!$util.isString(message.direction))
+                            return "direction: string expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a TradeDetailInfo message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.TradeDetailInfo
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.TradeDetailInfo} TradeDetailInfo
+                 */
+                TradeDetailInfo.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.TradeDetailInfo)
+                        return object;
+                    var message = new $root.market.v2.trade.TradeDetailInfo();
+                    if (object.tradeid != null)
+                        if ($util.Long)
+                            (message.tradeid = $util.Long.fromValue(object.tradeid)).unsigned = false;
+                        else if (typeof object.tradeid === "string")
+                            message.tradeid = parseInt(object.tradeid, 10);
+                        else if (typeof object.tradeid === "number")
+                            message.tradeid = object.tradeid;
+                        else if (typeof object.tradeid === "object")
+                            message.tradeid = new $util.LongBits(object.tradeid.low >>> 0, object.tradeid.high >>> 0).toNumber();
+                    if (object.amount != null)
+                        message.amount = String(object.amount);
+                    if (object.ts != null)
+                        message.ts = String(object.ts);
+                    if (object.price != null)
+                        message.price = String(object.price);
+                    if (object.direction != null)
+                        message.direction = String(object.direction);
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a TradeDetailInfo message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.TradeDetailInfo
+                 * @static
+                 * @param {market.v2.trade.TradeDetailInfo} message TradeDetailInfo
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                TradeDetailInfo.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        if ($util.Long) {
+                            var long = new $util.Long(0, 0, false);
+                            object.tradeid = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                        } else
+                            object.tradeid = options.longs === String ? "0" : 0;
+                        object.amount = "";
+                        object.ts = "";
+                        object.price = "";
+                        object.direction = "";
+                    }
+                    if (message.tradeid != null && message.hasOwnProperty("tradeid"))
+                        if (typeof message.tradeid === "number")
+                            object.tradeid = options.longs === String ? String(message.tradeid) : message.tradeid;
+                        else
+                            object.tradeid = options.longs === String ? $util.Long.prototype.toString.call(message.tradeid) : options.longs === Number ? new $util.LongBits(message.tradeid.low >>> 0, message.tradeid.high >>> 0).toNumber() : message.tradeid;
+                    if (message.amount != null && message.hasOwnProperty("amount"))
+                        object.amount = message.amount;
+                    if (message.ts != null && message.hasOwnProperty("ts"))
+                        object.ts = message.ts;
+                    if (message.price != null && message.hasOwnProperty("price"))
+                        object.price = message.price;
+                    if (message.direction != null && message.hasOwnProperty("direction"))
+                        object.direction = message.direction;
+                    return object;
+                };
+
+                /**
+                 * Converts this TradeDetailInfo to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.TradeDetailInfo
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                TradeDetailInfo.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for TradeDetailInfo
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.TradeDetailInfo
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                TradeDetailInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.TradeDetailInfo";
+                };
+
+                return TradeDetailInfo;
+            })();
+
+            trade.TradeAreaPair = (function() {
+
+                /**
+                 * Properties of a TradeAreaPair.
+                 * @memberof market.v2.trade
+                 * @interface ITradeAreaPair
+                 * @property {Array.<market.v2.trade.ITradeAreaPairInfo>|null} [listList] TradeAreaPair listList
+                 */
+
+                /**
+                 * Constructs a new TradeAreaPair.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a TradeAreaPair.
+                 * @implements ITradeAreaPair
+                 * @constructor
+                 * @param {market.v2.trade.ITradeAreaPair=} [properties] Properties to set
+                 */
+                function TradeAreaPair(properties) {
+                    this.listList = [];
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * TradeAreaPair listList.
+                 * @member {Array.<market.v2.trade.ITradeAreaPairInfo>} listList
+                 * @memberof market.v2.trade.TradeAreaPair
+                 * @instance
+                 */
+                TradeAreaPair.prototype.listList = $util.emptyArray;
+
+                /**
+                 * Creates a new TradeAreaPair instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.TradeAreaPair
+                 * @static
+                 * @param {market.v2.trade.ITradeAreaPair=} [properties] Properties to set
+                 * @returns {market.v2.trade.TradeAreaPair} TradeAreaPair instance
+                 */
+                TradeAreaPair.create = function create(properties) {
+                    return new TradeAreaPair(properties);
+                };
+
+                /**
+                 * Encodes the specified TradeAreaPair message. Does not implicitly {@link market.v2.trade.TradeAreaPair.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.TradeAreaPair
+                 * @static
+                 * @param {market.v2.trade.ITradeAreaPair} message TradeAreaPair message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                TradeAreaPair.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.listList != null && message.listList.length)
+                        for (var i = 0; i < message.listList.length; ++i)
+                            $root.market.v2.trade.TradeAreaPairInfo.encode(message.listList[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified TradeAreaPair message, length delimited. Does not implicitly {@link market.v2.trade.TradeAreaPair.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.TradeAreaPair
+                 * @static
+                 * @param {market.v2.trade.ITradeAreaPair} message TradeAreaPair message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                TradeAreaPair.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a TradeAreaPair message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.TradeAreaPair
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.TradeAreaPair} TradeAreaPair
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                TradeAreaPair.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.TradeAreaPair();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                if (!(message.listList && message.listList.length))
+                                    message.listList = [];
+                                message.listList.push($root.market.v2.trade.TradeAreaPairInfo.decode(reader, reader.uint32()));
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a TradeAreaPair message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.TradeAreaPair
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.TradeAreaPair} TradeAreaPair
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                TradeAreaPair.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a TradeAreaPair message.
+                 * @function verify
+                 * @memberof market.v2.trade.TradeAreaPair
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                TradeAreaPair.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.listList != null && message.hasOwnProperty("listList")) {
+                        if (!Array.isArray(message.listList))
+                            return "listList: array expected";
+                        for (var i = 0; i < message.listList.length; ++i) {
+                            var error = $root.market.v2.trade.TradeAreaPairInfo.verify(message.listList[i]);
+                            if (error)
+                                return "listList." + error;
+                        }
+                    }
+                    return null;
+                };
+
+                /**
+                 * Creates a TradeAreaPair message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.TradeAreaPair
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.TradeAreaPair} TradeAreaPair
+                 */
+                TradeAreaPair.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.TradeAreaPair)
+                        return object;
+                    var message = new $root.market.v2.trade.TradeAreaPair();
+                    if (object.listList) {
+                        if (!Array.isArray(object.listList))
+                            throw TypeError(".market.v2.trade.TradeAreaPair.listList: array expected");
+                        message.listList = [];
+                        for (var i = 0; i < object.listList.length; ++i) {
+                            if (typeof object.listList[i] !== "object")
+                                throw TypeError(".market.v2.trade.TradeAreaPair.listList: object expected");
+                            message.listList[i] = $root.market.v2.trade.TradeAreaPairInfo.fromObject(object.listList[i]);
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a TradeAreaPair message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.TradeAreaPair
+                 * @static
+                 * @param {market.v2.trade.TradeAreaPair} message TradeAreaPair
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                TradeAreaPair.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.arrays || options.defaults)
+                        object.listList = [];
+                    if (message.listList && message.listList.length) {
+                        object.listList = [];
+                        for (var j = 0; j < message.listList.length; ++j)
+                            object.listList[j] = $root.market.v2.trade.TradeAreaPairInfo.toObject(message.listList[j], options);
+                    }
+                    return object;
+                };
+
+                /**
+                 * Converts this TradeAreaPair to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.TradeAreaPair
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                TradeAreaPair.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for TradeAreaPair
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.TradeAreaPair
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                TradeAreaPair.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.TradeAreaPair";
+                };
+
+                return TradeAreaPair;
+            })();
+
+            trade.TradeAreaPairInfo = (function() {
+
+                /**
+                 * Properties of a TradeAreaPairInfo.
+                 * @memberof market.v2.trade
+                 * @interface ITradeAreaPairInfo
+                 * @property {number|null} [tradeid] TradeAreaPairInfo tradeid
+                 * @property {string|null} [cny] TradeAreaPairInfo cny
+                 * @property {string|null} [buy] TradeAreaPairInfo buy
+                 * @property {string|null} [lever] TradeAreaPairInfo lever
+                 * @property {string|null} [sell] TradeAreaPairInfo sell
+                 * @property {string|null} [last] TradeAreaPairInfo last
+                 * @property {string|null} [volume] TradeAreaPairInfo volume
+                 * @property {string|null} [change] TradeAreaPairInfo change
+                 * @property {string|null} [high] TradeAreaPairInfo high
+                 * @property {string|null} [low] TradeAreaPairInfo low
+                 * @property {string|null} [isopen] TradeAreaPairInfo isopen
+                 * @property {string|null} [open] TradeAreaPairInfo open
+                 * @property {string|null} [amount] TradeAreaPairInfo amount
+                 * @property {boolean|null} [isfiatconvert] TradeAreaPairInfo isfiatconvert
+                 */
+
+                /**
+                 * Constructs a new TradeAreaPairInfo.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a TradeAreaPairInfo.
+                 * @implements ITradeAreaPairInfo
+                 * @constructor
+                 * @param {market.v2.trade.ITradeAreaPairInfo=} [properties] Properties to set
+                 */
+                function TradeAreaPairInfo(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * TradeAreaPairInfo tradeid.
+                 * @member {number} tradeid
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @instance
+                 */
+                TradeAreaPairInfo.prototype.tradeid = 0;
+
+                /**
+                 * TradeAreaPairInfo cny.
+                 * @member {string} cny
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @instance
+                 */
+                TradeAreaPairInfo.prototype.cny = "";
+
+                /**
+                 * TradeAreaPairInfo buy.
+                 * @member {string} buy
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @instance
+                 */
+                TradeAreaPairInfo.prototype.buy = "";
+
+                /**
+                 * TradeAreaPairInfo lever.
+                 * @member {string} lever
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @instance
+                 */
+                TradeAreaPairInfo.prototype.lever = "";
+
+                /**
+                 * TradeAreaPairInfo sell.
+                 * @member {string} sell
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @instance
+                 */
+                TradeAreaPairInfo.prototype.sell = "";
+
+                /**
+                 * TradeAreaPairInfo last.
+                 * @member {string} last
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @instance
+                 */
+                TradeAreaPairInfo.prototype.last = "";
+
+                /**
+                 * TradeAreaPairInfo volume.
+                 * @member {string} volume
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @instance
+                 */
+                TradeAreaPairInfo.prototype.volume = "";
+
+                /**
+                 * TradeAreaPairInfo change.
+                 * @member {string} change
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @instance
+                 */
+                TradeAreaPairInfo.prototype.change = "";
+
+                /**
+                 * TradeAreaPairInfo high.
+                 * @member {string} high
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @instance
+                 */
+                TradeAreaPairInfo.prototype.high = "";
+
+                /**
+                 * TradeAreaPairInfo low.
+                 * @member {string} low
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @instance
+                 */
+                TradeAreaPairInfo.prototype.low = "";
+
+                /**
+                 * TradeAreaPairInfo isopen.
+                 * @member {string} isopen
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @instance
+                 */
+                TradeAreaPairInfo.prototype.isopen = "";
+
+                /**
+                 * TradeAreaPairInfo open.
+                 * @member {string} open
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @instance
+                 */
+                TradeAreaPairInfo.prototype.open = "";
+
+                /**
+                 * TradeAreaPairInfo amount.
+                 * @member {string} amount
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @instance
+                 */
+                TradeAreaPairInfo.prototype.amount = "";
+
+                /**
+                 * TradeAreaPairInfo isfiatconvert.
+                 * @member {boolean} isfiatconvert
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @instance
+                 */
+                TradeAreaPairInfo.prototype.isfiatconvert = false;
+
+                /**
+                 * Creates a new TradeAreaPairInfo instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @static
+                 * @param {market.v2.trade.ITradeAreaPairInfo=} [properties] Properties to set
+                 * @returns {market.v2.trade.TradeAreaPairInfo} TradeAreaPairInfo instance
+                 */
+                TradeAreaPairInfo.create = function create(properties) {
+                    return new TradeAreaPairInfo(properties);
+                };
+
+                /**
+                 * Encodes the specified TradeAreaPairInfo message. Does not implicitly {@link market.v2.trade.TradeAreaPairInfo.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @static
+                 * @param {market.v2.trade.ITradeAreaPairInfo} message TradeAreaPairInfo message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                TradeAreaPairInfo.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.tradeid != null && Object.hasOwnProperty.call(message, "tradeid"))
+                        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.tradeid);
+                    if (message.cny != null && Object.hasOwnProperty.call(message, "cny"))
+                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.cny);
+                    if (message.buy != null && Object.hasOwnProperty.call(message, "buy"))
+                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.buy);
+                    if (message.lever != null && Object.hasOwnProperty.call(message, "lever"))
+                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.lever);
+                    if (message.sell != null && Object.hasOwnProperty.call(message, "sell"))
+                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.sell);
+                    if (message.last != null && Object.hasOwnProperty.call(message, "last"))
+                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.last);
+                    if (message.volume != null && Object.hasOwnProperty.call(message, "volume"))
+                        writer.uint32(/* id 7, wireType 2 =*/58).string(message.volume);
+                    if (message.change != null && Object.hasOwnProperty.call(message, "change"))
+                        writer.uint32(/* id 8, wireType 2 =*/66).string(message.change);
+                    if (message.high != null && Object.hasOwnProperty.call(message, "high"))
+                        writer.uint32(/* id 9, wireType 2 =*/74).string(message.high);
+                    if (message.low != null && Object.hasOwnProperty.call(message, "low"))
+                        writer.uint32(/* id 10, wireType 2 =*/82).string(message.low);
+                    if (message.isopen != null && Object.hasOwnProperty.call(message, "isopen"))
+                        writer.uint32(/* id 11, wireType 2 =*/90).string(message.isopen);
+                    if (message.open != null && Object.hasOwnProperty.call(message, "open"))
+                        writer.uint32(/* id 12, wireType 2 =*/98).string(message.open);
+                    if (message.amount != null && Object.hasOwnProperty.call(message, "amount"))
+                        writer.uint32(/* id 13, wireType 2 =*/106).string(message.amount);
+                    if (message.isfiatconvert != null && Object.hasOwnProperty.call(message, "isfiatconvert"))
+                        writer.uint32(/* id 14, wireType 0 =*/112).bool(message.isfiatconvert);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified TradeAreaPairInfo message, length delimited. Does not implicitly {@link market.v2.trade.TradeAreaPairInfo.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @static
+                 * @param {market.v2.trade.ITradeAreaPairInfo} message TradeAreaPairInfo message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                TradeAreaPairInfo.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a TradeAreaPairInfo message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.TradeAreaPairInfo} TradeAreaPairInfo
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                TradeAreaPairInfo.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.TradeAreaPairInfo();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.tradeid = reader.int32();
+                                break;
+                            }
+                        case 2: {
+                                message.cny = reader.string();
+                                break;
+                            }
+                        case 3: {
+                                message.buy = reader.string();
+                                break;
+                            }
+                        case 4: {
+                                message.lever = reader.string();
+                                break;
+                            }
+                        case 5: {
+                                message.sell = reader.string();
+                                break;
+                            }
+                        case 6: {
+                                message.last = reader.string();
+                                break;
+                            }
+                        case 7: {
+                                message.volume = reader.string();
+                                break;
+                            }
+                        case 8: {
+                                message.change = reader.string();
+                                break;
+                            }
+                        case 9: {
+                                message.high = reader.string();
+                                break;
+                            }
+                        case 10: {
+                                message.low = reader.string();
+                                break;
+                            }
+                        case 11: {
+                                message.isopen = reader.string();
+                                break;
+                            }
+                        case 12: {
+                                message.open = reader.string();
+                                break;
+                            }
+                        case 13: {
+                                message.amount = reader.string();
+                                break;
+                            }
+                        case 14: {
+                                message.isfiatconvert = reader.bool();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a TradeAreaPairInfo message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.TradeAreaPairInfo} TradeAreaPairInfo
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                TradeAreaPairInfo.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a TradeAreaPairInfo message.
+                 * @function verify
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                TradeAreaPairInfo.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.tradeid != null && message.hasOwnProperty("tradeid"))
+                        if (!$util.isInteger(message.tradeid))
+                            return "tradeid: integer expected";
+                    if (message.cny != null && message.hasOwnProperty("cny"))
+                        if (!$util.isString(message.cny))
+                            return "cny: string expected";
+                    if (message.buy != null && message.hasOwnProperty("buy"))
+                        if (!$util.isString(message.buy))
+                            return "buy: string expected";
+                    if (message.lever != null && message.hasOwnProperty("lever"))
+                        if (!$util.isString(message.lever))
+                            return "lever: string expected";
+                    if (message.sell != null && message.hasOwnProperty("sell"))
+                        if (!$util.isString(message.sell))
+                            return "sell: string expected";
+                    if (message.last != null && message.hasOwnProperty("last"))
+                        if (!$util.isString(message.last))
+                            return "last: string expected";
+                    if (message.volume != null && message.hasOwnProperty("volume"))
+                        if (!$util.isString(message.volume))
+                            return "volume: string expected";
+                    if (message.change != null && message.hasOwnProperty("change"))
+                        if (!$util.isString(message.change))
+                            return "change: string expected";
+                    if (message.high != null && message.hasOwnProperty("high"))
+                        if (!$util.isString(message.high))
+                            return "high: string expected";
+                    if (message.low != null && message.hasOwnProperty("low"))
+                        if (!$util.isString(message.low))
+                            return "low: string expected";
+                    if (message.isopen != null && message.hasOwnProperty("isopen"))
+                        if (!$util.isString(message.isopen))
+                            return "isopen: string expected";
+                    if (message.open != null && message.hasOwnProperty("open"))
+                        if (!$util.isString(message.open))
+                            return "open: string expected";
+                    if (message.amount != null && message.hasOwnProperty("amount"))
+                        if (!$util.isString(message.amount))
+                            return "amount: string expected";
+                    if (message.isfiatconvert != null && message.hasOwnProperty("isfiatconvert"))
+                        if (typeof message.isfiatconvert !== "boolean")
+                            return "isfiatconvert: boolean expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a TradeAreaPairInfo message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.TradeAreaPairInfo} TradeAreaPairInfo
+                 */
+                TradeAreaPairInfo.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.TradeAreaPairInfo)
+                        return object;
+                    var message = new $root.market.v2.trade.TradeAreaPairInfo();
+                    if (object.tradeid != null)
+                        message.tradeid = object.tradeid | 0;
+                    if (object.cny != null)
+                        message.cny = String(object.cny);
+                    if (object.buy != null)
+                        message.buy = String(object.buy);
+                    if (object.lever != null)
+                        message.lever = String(object.lever);
+                    if (object.sell != null)
+                        message.sell = String(object.sell);
+                    if (object.last != null)
+                        message.last = String(object.last);
+                    if (object.volume != null)
+                        message.volume = String(object.volume);
+                    if (object.change != null)
+                        message.change = String(object.change);
+                    if (object.high != null)
+                        message.high = String(object.high);
+                    if (object.low != null)
+                        message.low = String(object.low);
+                    if (object.isopen != null)
+                        message.isopen = String(object.isopen);
+                    if (object.open != null)
+                        message.open = String(object.open);
+                    if (object.amount != null)
+                        message.amount = String(object.amount);
+                    if (object.isfiatconvert != null)
+                        message.isfiatconvert = Boolean(object.isfiatconvert);
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a TradeAreaPairInfo message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @static
+                 * @param {market.v2.trade.TradeAreaPairInfo} message TradeAreaPairInfo
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                TradeAreaPairInfo.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.tradeid = 0;
+                        object.cny = "";
+                        object.buy = "";
+                        object.lever = "";
+                        object.sell = "";
+                        object.last = "";
+                        object.volume = "";
+                        object.change = "";
+                        object.high = "";
+                        object.low = "";
+                        object.isopen = "";
+                        object.open = "";
+                        object.amount = "";
+                        object.isfiatconvert = false;
+                    }
+                    if (message.tradeid != null && message.hasOwnProperty("tradeid"))
+                        object.tradeid = message.tradeid;
+                    if (message.cny != null && message.hasOwnProperty("cny"))
+                        object.cny = message.cny;
+                    if (message.buy != null && message.hasOwnProperty("buy"))
+                        object.buy = message.buy;
+                    if (message.lever != null && message.hasOwnProperty("lever"))
+                        object.lever = message.lever;
+                    if (message.sell != null && message.hasOwnProperty("sell"))
+                        object.sell = message.sell;
+                    if (message.last != null && message.hasOwnProperty("last"))
+                        object.last = message.last;
+                    if (message.volume != null && message.hasOwnProperty("volume"))
+                        object.volume = message.volume;
+                    if (message.change != null && message.hasOwnProperty("change"))
+                        object.change = message.change;
+                    if (message.high != null && message.hasOwnProperty("high"))
+                        object.high = message.high;
+                    if (message.low != null && message.hasOwnProperty("low"))
+                        object.low = message.low;
+                    if (message.isopen != null && message.hasOwnProperty("isopen"))
+                        object.isopen = message.isopen;
+                    if (message.open != null && message.hasOwnProperty("open"))
+                        object.open = message.open;
+                    if (message.amount != null && message.hasOwnProperty("amount"))
+                        object.amount = message.amount;
+                    if (message.isfiatconvert != null && message.hasOwnProperty("isfiatconvert"))
+                        object.isfiatconvert = message.isfiatconvert;
+                    return object;
+                };
+
+                /**
+                 * Converts this TradeAreaPairInfo to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                TradeAreaPairInfo.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for TradeAreaPairInfo
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.TradeAreaPairInfo
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                TradeAreaPairInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.TradeAreaPairInfo";
+                };
+
+                return TradeAreaPairInfo;
+            })();
+
+            trade.MainPair = (function() {
+
+                /**
+                 * Properties of a MainPair.
+                 * @memberof market.v2.trade
+                 * @interface IMainPair
+                 * @property {Array.<market.v2.trade.IMainPairInfo>|null} [listList] MainPair listList
+                 */
+
+                /**
+                 * Constructs a new MainPair.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a MainPair.
+                 * @implements IMainPair
+                 * @constructor
+                 * @param {market.v2.trade.IMainPair=} [properties] Properties to set
+                 */
+                function MainPair(properties) {
+                    this.listList = [];
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * MainPair listList.
+                 * @member {Array.<market.v2.trade.IMainPairInfo>} listList
+                 * @memberof market.v2.trade.MainPair
+                 * @instance
+                 */
+                MainPair.prototype.listList = $util.emptyArray;
+
+                /**
+                 * Creates a new MainPair instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.MainPair
+                 * @static
+                 * @param {market.v2.trade.IMainPair=} [properties] Properties to set
+                 * @returns {market.v2.trade.MainPair} MainPair instance
+                 */
+                MainPair.create = function create(properties) {
+                    return new MainPair(properties);
+                };
+
+                /**
+                 * Encodes the specified MainPair message. Does not implicitly {@link market.v2.trade.MainPair.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.MainPair
+                 * @static
+                 * @param {market.v2.trade.IMainPair} message MainPair message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                MainPair.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.listList != null && message.listList.length)
+                        for (var i = 0; i < message.listList.length; ++i)
+                            $root.market.v2.trade.MainPairInfo.encode(message.listList[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified MainPair message, length delimited. Does not implicitly {@link market.v2.trade.MainPair.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.MainPair
+                 * @static
+                 * @param {market.v2.trade.IMainPair} message MainPair message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                MainPair.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a MainPair message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.MainPair
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.MainPair} MainPair
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                MainPair.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.MainPair();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                if (!(message.listList && message.listList.length))
+                                    message.listList = [];
+                                message.listList.push($root.market.v2.trade.MainPairInfo.decode(reader, reader.uint32()));
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a MainPair message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.MainPair
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.MainPair} MainPair
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                MainPair.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a MainPair message.
+                 * @function verify
+                 * @memberof market.v2.trade.MainPair
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                MainPair.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.listList != null && message.hasOwnProperty("listList")) {
+                        if (!Array.isArray(message.listList))
+                            return "listList: array expected";
+                        for (var i = 0; i < message.listList.length; ++i) {
+                            var error = $root.market.v2.trade.MainPairInfo.verify(message.listList[i]);
+                            if (error)
+                                return "listList." + error;
+                        }
+                    }
+                    return null;
+                };
+
+                /**
+                 * Creates a MainPair message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.MainPair
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.MainPair} MainPair
+                 */
+                MainPair.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.MainPair)
+                        return object;
+                    var message = new $root.market.v2.trade.MainPair();
+                    if (object.listList) {
+                        if (!Array.isArray(object.listList))
+                            throw TypeError(".market.v2.trade.MainPair.listList: array expected");
+                        message.listList = [];
+                        for (var i = 0; i < object.listList.length; ++i) {
+                            if (typeof object.listList[i] !== "object")
+                                throw TypeError(".market.v2.trade.MainPair.listList: object expected");
+                            message.listList[i] = $root.market.v2.trade.MainPairInfo.fromObject(object.listList[i]);
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a MainPair message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.MainPair
+                 * @static
+                 * @param {market.v2.trade.MainPair} message MainPair
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                MainPair.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.arrays || options.defaults)
+                        object.listList = [];
+                    if (message.listList && message.listList.length) {
+                        object.listList = [];
+                        for (var j = 0; j < message.listList.length; ++j)
+                            object.listList[j] = $root.market.v2.trade.MainPairInfo.toObject(message.listList[j], options);
+                    }
+                    return object;
+                };
+
+                /**
+                 * Converts this MainPair to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.MainPair
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                MainPair.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for MainPair
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.MainPair
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                MainPair.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.MainPair";
+                };
+
+                return MainPair;
+            })();
+
+            trade.MainPairInfo = (function() {
+
+                /**
+                 * Properties of a MainPairInfo.
+                 * @memberof market.v2.trade
+                 * @interface IMainPairInfo
+                 * @property {number|null} [tradeId] MainPairInfo tradeId
+                 * @property {string|null} [cny] MainPairInfo cny
+                 * @property {string|null} [totalamount] MainPairInfo totalamount
+                 * @property {string|null} [last] MainPairInfo last
+                 * @property {string|null} [volume] MainPairInfo volume
+                 * @property {string|null} [change] MainPairInfo change
+                 */
+
+                /**
+                 * Constructs a new MainPairInfo.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a MainPairInfo.
+                 * @implements IMainPairInfo
+                 * @constructor
+                 * @param {market.v2.trade.IMainPairInfo=} [properties] Properties to set
+                 */
+                function MainPairInfo(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * MainPairInfo tradeId.
+                 * @member {number} tradeId
+                 * @memberof market.v2.trade.MainPairInfo
+                 * @instance
+                 */
+                MainPairInfo.prototype.tradeId = 0;
+
+                /**
+                 * MainPairInfo cny.
+                 * @member {string} cny
+                 * @memberof market.v2.trade.MainPairInfo
+                 * @instance
+                 */
+                MainPairInfo.prototype.cny = "";
+
+                /**
+                 * MainPairInfo totalamount.
+                 * @member {string} totalamount
+                 * @memberof market.v2.trade.MainPairInfo
+                 * @instance
+                 */
+                MainPairInfo.prototype.totalamount = "";
+
+                /**
+                 * MainPairInfo last.
+                 * @member {string} last
+                 * @memberof market.v2.trade.MainPairInfo
+                 * @instance
+                 */
+                MainPairInfo.prototype.last = "";
+
+                /**
+                 * MainPairInfo volume.
+                 * @member {string} volume
+                 * @memberof market.v2.trade.MainPairInfo
+                 * @instance
+                 */
+                MainPairInfo.prototype.volume = "";
+
+                /**
+                 * MainPairInfo change.
+                 * @member {string} change
+                 * @memberof market.v2.trade.MainPairInfo
+                 * @instance
+                 */
+                MainPairInfo.prototype.change = "";
+
+                /**
+                 * Creates a new MainPairInfo instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.MainPairInfo
+                 * @static
+                 * @param {market.v2.trade.IMainPairInfo=} [properties] Properties to set
+                 * @returns {market.v2.trade.MainPairInfo} MainPairInfo instance
+                 */
+                MainPairInfo.create = function create(properties) {
+                    return new MainPairInfo(properties);
+                };
+
+                /**
+                 * Encodes the specified MainPairInfo message. Does not implicitly {@link market.v2.trade.MainPairInfo.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.MainPairInfo
+                 * @static
+                 * @param {market.v2.trade.IMainPairInfo} message MainPairInfo message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                MainPairInfo.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.tradeId != null && Object.hasOwnProperty.call(message, "tradeId"))
+                        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.tradeId);
+                    if (message.cny != null && Object.hasOwnProperty.call(message, "cny"))
+                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.cny);
+                    if (message.totalamount != null && Object.hasOwnProperty.call(message, "totalamount"))
+                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.totalamount);
+                    if (message.last != null && Object.hasOwnProperty.call(message, "last"))
+                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.last);
+                    if (message.volume != null && Object.hasOwnProperty.call(message, "volume"))
+                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.volume);
+                    if (message.change != null && Object.hasOwnProperty.call(message, "change"))
+                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.change);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified MainPairInfo message, length delimited. Does not implicitly {@link market.v2.trade.MainPairInfo.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.MainPairInfo
+                 * @static
+                 * @param {market.v2.trade.IMainPairInfo} message MainPairInfo message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                MainPairInfo.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a MainPairInfo message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.MainPairInfo
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.MainPairInfo} MainPairInfo
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                MainPairInfo.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.MainPairInfo();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.tradeId = reader.int32();
+                                break;
+                            }
+                        case 2: {
+                                message.cny = reader.string();
+                                break;
+                            }
+                        case 3: {
+                                message.totalamount = reader.string();
+                                break;
+                            }
+                        case 4: {
+                                message.last = reader.string();
+                                break;
+                            }
+                        case 5: {
+                                message.volume = reader.string();
+                                break;
+                            }
+                        case 6: {
+                                message.change = reader.string();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a MainPairInfo message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.MainPairInfo
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.MainPairInfo} MainPairInfo
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                MainPairInfo.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a MainPairInfo message.
+                 * @function verify
+                 * @memberof market.v2.trade.MainPairInfo
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                MainPairInfo.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.tradeId != null && message.hasOwnProperty("tradeId"))
+                        if (!$util.isInteger(message.tradeId))
+                            return "tradeId: integer expected";
+                    if (message.cny != null && message.hasOwnProperty("cny"))
+                        if (!$util.isString(message.cny))
+                            return "cny: string expected";
+                    if (message.totalamount != null && message.hasOwnProperty("totalamount"))
+                        if (!$util.isString(message.totalamount))
+                            return "totalamount: string expected";
+                    if (message.last != null && message.hasOwnProperty("last"))
+                        if (!$util.isString(message.last))
+                            return "last: string expected";
+                    if (message.volume != null && message.hasOwnProperty("volume"))
+                        if (!$util.isString(message.volume))
+                            return "volume: string expected";
+                    if (message.change != null && message.hasOwnProperty("change"))
+                        if (!$util.isString(message.change))
+                            return "change: string expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a MainPairInfo message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.MainPairInfo
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.MainPairInfo} MainPairInfo
+                 */
+                MainPairInfo.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.MainPairInfo)
+                        return object;
+                    var message = new $root.market.v2.trade.MainPairInfo();
+                    if (object.tradeId != null)
+                        message.tradeId = object.tradeId | 0;
+                    if (object.cny != null)
+                        message.cny = String(object.cny);
+                    if (object.totalamount != null)
+                        message.totalamount = String(object.totalamount);
+                    if (object.last != null)
+                        message.last = String(object.last);
+                    if (object.volume != null)
+                        message.volume = String(object.volume);
+                    if (object.change != null)
+                        message.change = String(object.change);
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a MainPairInfo message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.MainPairInfo
+                 * @static
+                 * @param {market.v2.trade.MainPairInfo} message MainPairInfo
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                MainPairInfo.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.tradeId = 0;
+                        object.cny = "";
+                        object.totalamount = "";
+                        object.last = "";
+                        object.volume = "";
+                        object.change = "";
+                    }
+                    if (message.tradeId != null && message.hasOwnProperty("tradeId"))
+                        object.tradeId = message.tradeId;
+                    if (message.cny != null && message.hasOwnProperty("cny"))
+                        object.cny = message.cny;
+                    if (message.totalamount != null && message.hasOwnProperty("totalamount"))
+                        object.totalamount = message.totalamount;
+                    if (message.last != null && message.hasOwnProperty("last"))
+                        object.last = message.last;
+                    if (message.volume != null && message.hasOwnProperty("volume"))
+                        object.volume = message.volume;
+                    if (message.change != null && message.hasOwnProperty("change"))
+                        object.change = message.change;
+                    return object;
+                };
+
+                /**
+                 * Converts this MainPairInfo to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.MainPairInfo
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                MainPairInfo.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for MainPairInfo
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.MainPairInfo
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                MainPairInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.MainPairInfo";
+                };
+
+                return MainPairInfo;
+            })();
+
+            trade.RecommendPair = (function() {
+
+                /**
+                 * Properties of a RecommendPair.
+                 * @memberof market.v2.trade
+                 * @interface IRecommendPair
+                 * @property {Array.<market.v2.trade.IRecommendPairInfo>|null} [listList] RecommendPair listList
+                 */
+
+                /**
+                 * Constructs a new RecommendPair.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a RecommendPair.
+                 * @implements IRecommendPair
+                 * @constructor
+                 * @param {market.v2.trade.IRecommendPair=} [properties] Properties to set
+                 */
+                function RecommendPair(properties) {
+                    this.listList = [];
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * RecommendPair listList.
+                 * @member {Array.<market.v2.trade.IRecommendPairInfo>} listList
+                 * @memberof market.v2.trade.RecommendPair
+                 * @instance
+                 */
+                RecommendPair.prototype.listList = $util.emptyArray;
+
+                /**
+                 * Creates a new RecommendPair instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.RecommendPair
+                 * @static
+                 * @param {market.v2.trade.IRecommendPair=} [properties] Properties to set
+                 * @returns {market.v2.trade.RecommendPair} RecommendPair instance
+                 */
+                RecommendPair.create = function create(properties) {
+                    return new RecommendPair(properties);
+                };
+
+                /**
+                 * Encodes the specified RecommendPair message. Does not implicitly {@link market.v2.trade.RecommendPair.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.RecommendPair
+                 * @static
+                 * @param {market.v2.trade.IRecommendPair} message RecommendPair message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                RecommendPair.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.listList != null && message.listList.length)
+                        for (var i = 0; i < message.listList.length; ++i)
+                            $root.market.v2.trade.RecommendPairInfo.encode(message.listList[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified RecommendPair message, length delimited. Does not implicitly {@link market.v2.trade.RecommendPair.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.RecommendPair
+                 * @static
+                 * @param {market.v2.trade.IRecommendPair} message RecommendPair message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                RecommendPair.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a RecommendPair message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.RecommendPair
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.RecommendPair} RecommendPair
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                RecommendPair.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.RecommendPair();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                if (!(message.listList && message.listList.length))
+                                    message.listList = [];
+                                message.listList.push($root.market.v2.trade.RecommendPairInfo.decode(reader, reader.uint32()));
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a RecommendPair message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.RecommendPair
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.RecommendPair} RecommendPair
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                RecommendPair.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a RecommendPair message.
+                 * @function verify
+                 * @memberof market.v2.trade.RecommendPair
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                RecommendPair.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.listList != null && message.hasOwnProperty("listList")) {
+                        if (!Array.isArray(message.listList))
+                            return "listList: array expected";
+                        for (var i = 0; i < message.listList.length; ++i) {
+                            var error = $root.market.v2.trade.RecommendPairInfo.verify(message.listList[i]);
+                            if (error)
+                                return "listList." + error;
+                        }
+                    }
+                    return null;
+                };
+
+                /**
+                 * Creates a RecommendPair message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.RecommendPair
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.RecommendPair} RecommendPair
+                 */
+                RecommendPair.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.RecommendPair)
+                        return object;
+                    var message = new $root.market.v2.trade.RecommendPair();
+                    if (object.listList) {
+                        if (!Array.isArray(object.listList))
+                            throw TypeError(".market.v2.trade.RecommendPair.listList: array expected");
+                        message.listList = [];
+                        for (var i = 0; i < object.listList.length; ++i) {
+                            if (typeof object.listList[i] !== "object")
+                                throw TypeError(".market.v2.trade.RecommendPair.listList: object expected");
+                            message.listList[i] = $root.market.v2.trade.RecommendPairInfo.fromObject(object.listList[i]);
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a RecommendPair message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.RecommendPair
+                 * @static
+                 * @param {market.v2.trade.RecommendPair} message RecommendPair
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                RecommendPair.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.arrays || options.defaults)
+                        object.listList = [];
+                    if (message.listList && message.listList.length) {
+                        object.listList = [];
+                        for (var j = 0; j < message.listList.length; ++j)
+                            object.listList[j] = $root.market.v2.trade.RecommendPairInfo.toObject(message.listList[j], options);
+                    }
+                    return object;
+                };
+
+                /**
+                 * Converts this RecommendPair to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.RecommendPair
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                RecommendPair.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for RecommendPair
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.RecommendPair
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                RecommendPair.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.RecommendPair";
+                };
+
+                return RecommendPair;
+            })();
+
+            trade.RecommendPairInfo = (function() {
+
+                /**
+                 * Properties of a RecommendPairInfo.
+                 * @memberof market.v2.trade
+                 * @interface IRecommendPairInfo
+                 * @property {number|null} [tradeId] RecommendPairInfo tradeId
+                 * @property {string|null} [cny] RecommendPairInfo cny
+                 * @property {string|null} [totalamount] RecommendPairInfo totalamount
+                 * @property {string|null} [last] RecommendPairInfo last
+                 * @property {string|null} [volume] RecommendPairInfo volume
+                 * @property {string|null} [change] RecommendPairInfo change
+                 */
+
+                /**
+                 * Constructs a new RecommendPairInfo.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a RecommendPairInfo.
+                 * @implements IRecommendPairInfo
+                 * @constructor
+                 * @param {market.v2.trade.IRecommendPairInfo=} [properties] Properties to set
+                 */
+                function RecommendPairInfo(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * RecommendPairInfo tradeId.
+                 * @member {number} tradeId
+                 * @memberof market.v2.trade.RecommendPairInfo
+                 * @instance
+                 */
+                RecommendPairInfo.prototype.tradeId = 0;
+
+                /**
+                 * RecommendPairInfo cny.
+                 * @member {string} cny
+                 * @memberof market.v2.trade.RecommendPairInfo
+                 * @instance
+                 */
+                RecommendPairInfo.prototype.cny = "";
+
+                /**
+                 * RecommendPairInfo totalamount.
+                 * @member {string} totalamount
+                 * @memberof market.v2.trade.RecommendPairInfo
+                 * @instance
+                 */
+                RecommendPairInfo.prototype.totalamount = "";
+
+                /**
+                 * RecommendPairInfo last.
+                 * @member {string} last
+                 * @memberof market.v2.trade.RecommendPairInfo
+                 * @instance
+                 */
+                RecommendPairInfo.prototype.last = "";
+
+                /**
+                 * RecommendPairInfo volume.
+                 * @member {string} volume
+                 * @memberof market.v2.trade.RecommendPairInfo
+                 * @instance
+                 */
+                RecommendPairInfo.prototype.volume = "";
+
+                /**
+                 * RecommendPairInfo change.
+                 * @member {string} change
+                 * @memberof market.v2.trade.RecommendPairInfo
+                 * @instance
+                 */
+                RecommendPairInfo.prototype.change = "";
+
+                /**
+                 * Creates a new RecommendPairInfo instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.RecommendPairInfo
+                 * @static
+                 * @param {market.v2.trade.IRecommendPairInfo=} [properties] Properties to set
+                 * @returns {market.v2.trade.RecommendPairInfo} RecommendPairInfo instance
+                 */
+                RecommendPairInfo.create = function create(properties) {
+                    return new RecommendPairInfo(properties);
+                };
+
+                /**
+                 * Encodes the specified RecommendPairInfo message. Does not implicitly {@link market.v2.trade.RecommendPairInfo.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.RecommendPairInfo
+                 * @static
+                 * @param {market.v2.trade.IRecommendPairInfo} message RecommendPairInfo message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                RecommendPairInfo.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.tradeId != null && Object.hasOwnProperty.call(message, "tradeId"))
+                        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.tradeId);
+                    if (message.cny != null && Object.hasOwnProperty.call(message, "cny"))
+                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.cny);
+                    if (message.totalamount != null && Object.hasOwnProperty.call(message, "totalamount"))
+                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.totalamount);
+                    if (message.last != null && Object.hasOwnProperty.call(message, "last"))
+                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.last);
+                    if (message.volume != null && Object.hasOwnProperty.call(message, "volume"))
+                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.volume);
+                    if (message.change != null && Object.hasOwnProperty.call(message, "change"))
+                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.change);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified RecommendPairInfo message, length delimited. Does not implicitly {@link market.v2.trade.RecommendPairInfo.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.RecommendPairInfo
+                 * @static
+                 * @param {market.v2.trade.IRecommendPairInfo} message RecommendPairInfo message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                RecommendPairInfo.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a RecommendPairInfo message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.RecommendPairInfo
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.RecommendPairInfo} RecommendPairInfo
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                RecommendPairInfo.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.RecommendPairInfo();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.tradeId = reader.int32();
+                                break;
+                            }
+                        case 2: {
+                                message.cny = reader.string();
+                                break;
+                            }
+                        case 3: {
+                                message.totalamount = reader.string();
+                                break;
+                            }
+                        case 4: {
+                                message.last = reader.string();
+                                break;
+                            }
+                        case 5: {
+                                message.volume = reader.string();
+                                break;
+                            }
+                        case 6: {
+                                message.change = reader.string();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a RecommendPairInfo message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.RecommendPairInfo
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.RecommendPairInfo} RecommendPairInfo
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                RecommendPairInfo.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a RecommendPairInfo message.
+                 * @function verify
+                 * @memberof market.v2.trade.RecommendPairInfo
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                RecommendPairInfo.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.tradeId != null && message.hasOwnProperty("tradeId"))
+                        if (!$util.isInteger(message.tradeId))
+                            return "tradeId: integer expected";
+                    if (message.cny != null && message.hasOwnProperty("cny"))
+                        if (!$util.isString(message.cny))
+                            return "cny: string expected";
+                    if (message.totalamount != null && message.hasOwnProperty("totalamount"))
+                        if (!$util.isString(message.totalamount))
+                            return "totalamount: string expected";
+                    if (message.last != null && message.hasOwnProperty("last"))
+                        if (!$util.isString(message.last))
+                            return "last: string expected";
+                    if (message.volume != null && message.hasOwnProperty("volume"))
+                        if (!$util.isString(message.volume))
+                            return "volume: string expected";
+                    if (message.change != null && message.hasOwnProperty("change"))
+                        if (!$util.isString(message.change))
+                            return "change: string expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a RecommendPairInfo message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.RecommendPairInfo
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.RecommendPairInfo} RecommendPairInfo
+                 */
+                RecommendPairInfo.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.RecommendPairInfo)
+                        return object;
+                    var message = new $root.market.v2.trade.RecommendPairInfo();
+                    if (object.tradeId != null)
+                        message.tradeId = object.tradeId | 0;
+                    if (object.cny != null)
+                        message.cny = String(object.cny);
+                    if (object.totalamount != null)
+                        message.totalamount = String(object.totalamount);
+                    if (object.last != null)
+                        message.last = String(object.last);
+                    if (object.volume != null)
+                        message.volume = String(object.volume);
+                    if (object.change != null)
+                        message.change = String(object.change);
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a RecommendPairInfo message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.RecommendPairInfo
+                 * @static
+                 * @param {market.v2.trade.RecommendPairInfo} message RecommendPairInfo
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                RecommendPairInfo.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.tradeId = 0;
+                        object.cny = "";
+                        object.totalamount = "";
+                        object.last = "";
+                        object.volume = "";
+                        object.change = "";
+                    }
+                    if (message.tradeId != null && message.hasOwnProperty("tradeId"))
+                        object.tradeId = message.tradeId;
+                    if (message.cny != null && message.hasOwnProperty("cny"))
+                        object.cny = message.cny;
+                    if (message.totalamount != null && message.hasOwnProperty("totalamount"))
+                        object.totalamount = message.totalamount;
+                    if (message.last != null && message.hasOwnProperty("last"))
+                        object.last = message.last;
+                    if (message.volume != null && message.hasOwnProperty("volume"))
+                        object.volume = message.volume;
+                    if (message.change != null && message.hasOwnProperty("change"))
+                        object.change = message.change;
+                    return object;
+                };
+
+                /**
+                 * Converts this RecommendPairInfo to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.RecommendPairInfo
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                RecommendPairInfo.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for RecommendPairInfo
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.RecommendPairInfo
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                RecommendPairInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.RecommendPairInfo";
+                };
+
+                return RecommendPairInfo;
+            })();
+
+            trade.UpPair = (function() {
+
+                /**
+                 * Properties of an UpPair.
+                 * @memberof market.v2.trade
+                 * @interface IUpPair
+                 */
+
+                /**
+                 * Constructs a new UpPair.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents an UpPair.
+                 * @implements IUpPair
+                 * @constructor
+                 * @param {market.v2.trade.IUpPair=} [properties] Properties to set
+                 */
+                function UpPair(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Creates a new UpPair instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.UpPair
+                 * @static
+                 * @param {market.v2.trade.IUpPair=} [properties] Properties to set
+                 * @returns {market.v2.trade.UpPair} UpPair instance
+                 */
+                UpPair.create = function create(properties) {
+                    return new UpPair(properties);
+                };
+
+                /**
+                 * Encodes the specified UpPair message. Does not implicitly {@link market.v2.trade.UpPair.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.UpPair
+                 * @static
+                 * @param {market.v2.trade.IUpPair} message UpPair message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                UpPair.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified UpPair message, length delimited. Does not implicitly {@link market.v2.trade.UpPair.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.UpPair
+                 * @static
+                 * @param {market.v2.trade.IUpPair} message UpPair message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                UpPair.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes an UpPair message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.UpPair
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.UpPair} UpPair
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                UpPair.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.UpPair();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes an UpPair message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.UpPair
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.UpPair} UpPair
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                UpPair.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies an UpPair message.
+                 * @function verify
+                 * @memberof market.v2.trade.UpPair
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                UpPair.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    return null;
+                };
+
+                /**
+                 * Creates an UpPair message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.UpPair
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.UpPair} UpPair
+                 */
+                UpPair.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.UpPair)
+                        return object;
+                    return new $root.market.v2.trade.UpPair();
+                };
+
+                /**
+                 * Creates a plain object from an UpPair message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.UpPair
+                 * @static
+                 * @param {market.v2.trade.UpPair} message UpPair
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                UpPair.toObject = function toObject() {
+                    return {};
+                };
+
+                /**
+                 * Converts this UpPair to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.UpPair
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                UpPair.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for UpPair
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.UpPair
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                UpPair.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.UpPair";
+                };
+
+                return UpPair;
+            })();
+
+            trade.AmtPair = (function() {
+
+                /**
+                 * Properties of an AmtPair.
+                 * @memberof market.v2.trade
+                 * @interface IAmtPair
+                 */
+
+                /**
+                 * Constructs a new AmtPair.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents an AmtPair.
+                 * @implements IAmtPair
+                 * @constructor
+                 * @param {market.v2.trade.IAmtPair=} [properties] Properties to set
+                 */
+                function AmtPair(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Creates a new AmtPair instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.AmtPair
+                 * @static
+                 * @param {market.v2.trade.IAmtPair=} [properties] Properties to set
+                 * @returns {market.v2.trade.AmtPair} AmtPair instance
+                 */
+                AmtPair.create = function create(properties) {
+                    return new AmtPair(properties);
+                };
+
+                /**
+                 * Encodes the specified AmtPair message. Does not implicitly {@link market.v2.trade.AmtPair.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.AmtPair
+                 * @static
+                 * @param {market.v2.trade.IAmtPair} message AmtPair message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                AmtPair.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified AmtPair message, length delimited. Does not implicitly {@link market.v2.trade.AmtPair.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.AmtPair
+                 * @static
+                 * @param {market.v2.trade.IAmtPair} message AmtPair message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                AmtPair.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes an AmtPair message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.AmtPair
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.AmtPair} AmtPair
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                AmtPair.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.AmtPair();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes an AmtPair message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.AmtPair
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.AmtPair} AmtPair
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                AmtPair.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies an AmtPair message.
+                 * @function verify
+                 * @memberof market.v2.trade.AmtPair
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                AmtPair.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    return null;
+                };
+
+                /**
+                 * Creates an AmtPair message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.AmtPair
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.AmtPair} AmtPair
+                 */
+                AmtPair.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.AmtPair)
+                        return object;
+                    return new $root.market.v2.trade.AmtPair();
+                };
+
+                /**
+                 * Creates a plain object from an AmtPair message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.AmtPair
+                 * @static
+                 * @param {market.v2.trade.AmtPair} message AmtPair
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                AmtPair.toObject = function toObject() {
+                    return {};
+                };
+
+                /**
+                 * Converts this AmtPair to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.AmtPair
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                AmtPair.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for AmtPair
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.AmtPair
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                AmtPair.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.AmtPair";
+                };
+
+                return AmtPair;
+            })();
+
+            trade.StarPair = (function() {
+
+                /**
+                 * Properties of a StarPair.
+                 * @memberof market.v2.trade
+                 * @interface IStarPair
+                 */
+
+                /**
+                 * Constructs a new StarPair.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a StarPair.
+                 * @implements IStarPair
+                 * @constructor
+                 * @param {market.v2.trade.IStarPair=} [properties] Properties to set
+                 */
+                function StarPair(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Creates a new StarPair instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.StarPair
+                 * @static
+                 * @param {market.v2.trade.IStarPair=} [properties] Properties to set
+                 * @returns {market.v2.trade.StarPair} StarPair instance
+                 */
+                StarPair.create = function create(properties) {
+                    return new StarPair(properties);
+                };
+
+                /**
+                 * Encodes the specified StarPair message. Does not implicitly {@link market.v2.trade.StarPair.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.StarPair
+                 * @static
+                 * @param {market.v2.trade.IStarPair} message StarPair message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                StarPair.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified StarPair message, length delimited. Does not implicitly {@link market.v2.trade.StarPair.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.StarPair
+                 * @static
+                 * @param {market.v2.trade.IStarPair} message StarPair message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                StarPair.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a StarPair message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.StarPair
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.StarPair} StarPair
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                StarPair.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.StarPair();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a StarPair message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.StarPair
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.StarPair} StarPair
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                StarPair.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a StarPair message.
+                 * @function verify
+                 * @memberof market.v2.trade.StarPair
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                StarPair.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a StarPair message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.StarPair
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.StarPair} StarPair
+                 */
+                StarPair.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.StarPair)
+                        return object;
+                    return new $root.market.v2.trade.StarPair();
+                };
+
+                /**
+                 * Creates a plain object from a StarPair message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.StarPair
+                 * @static
+                 * @param {market.v2.trade.StarPair} message StarPair
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                StarPair.toObject = function toObject() {
+                    return {};
+                };
+
+                /**
+                 * Converts this StarPair to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.StarPair
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                StarPair.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for StarPair
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.StarPair
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                StarPair.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.StarPair";
+                };
+
+                return StarPair;
+            })();
+
+            trade.TradeTickerVO = (function() {
+
+                /**
+                 * Properties of a TradeTickerVO.
+                 * @memberof market.v2.trade
+                 * @interface ITradeTickerVO
+                 * @property {number|null} [tradeid] TradeTickerVO tradeid
+                 * @property {string|null} [high] TradeTickerVO high
+                 * @property {string|null} [open] TradeTickerVO open
+                 * @property {string|null} [low] TradeTickerVO low
+                 * @property {string|null} [close] TradeTickerVO close
+                 * @property {string|null} [volume] TradeTickerVO volume
+                 * @property {string|null} [change] TradeTickerVO change
+                 * @property {string|null} [cny] TradeTickerVO cny
+                 * @property {string|null} [last] TradeTickerVO last
+                 * @property {string|null} [netvalue] TradeTickerVO netvalue
+                 * @property {string|null} [amount] TradeTickerVO amount
+                 * @property {boolean|null} [isfiatconvert] TradeTickerVO isfiatconvert
+                 */
+
+                /**
+                 * Constructs a new TradeTickerVO.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a TradeTickerVO.
+                 * @implements ITradeTickerVO
+                 * @constructor
+                 * @param {market.v2.trade.ITradeTickerVO=} [properties] Properties to set
+                 */
+                function TradeTickerVO(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * TradeTickerVO tradeid.
+                 * @member {number} tradeid
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @instance
+                 */
+                TradeTickerVO.prototype.tradeid = 0;
+
+                /**
+                 * TradeTickerVO high.
+                 * @member {string} high
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @instance
+                 */
+                TradeTickerVO.prototype.high = "";
+
+                /**
+                 * TradeTickerVO open.
+                 * @member {string} open
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @instance
+                 */
+                TradeTickerVO.prototype.open = "";
+
+                /**
+                 * TradeTickerVO low.
+                 * @member {string} low
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @instance
+                 */
+                TradeTickerVO.prototype.low = "";
+
+                /**
+                 * TradeTickerVO close.
+                 * @member {string} close
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @instance
+                 */
+                TradeTickerVO.prototype.close = "";
+
+                /**
+                 * TradeTickerVO volume.
+                 * @member {string} volume
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @instance
+                 */
+                TradeTickerVO.prototype.volume = "";
+
+                /**
+                 * TradeTickerVO change.
+                 * @member {string} change
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @instance
+                 */
+                TradeTickerVO.prototype.change = "";
+
+                /**
+                 * TradeTickerVO cny.
+                 * @member {string} cny
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @instance
+                 */
+                TradeTickerVO.prototype.cny = "";
+
+                /**
+                 * TradeTickerVO last.
+                 * @member {string} last
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @instance
+                 */
+                TradeTickerVO.prototype.last = "";
+
+                /**
+                 * TradeTickerVO netvalue.
+                 * @member {string} netvalue
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @instance
+                 */
+                TradeTickerVO.prototype.netvalue = "";
+
+                /**
+                 * TradeTickerVO amount.
+                 * @member {string} amount
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @instance
+                 */
+                TradeTickerVO.prototype.amount = "";
+
+                /**
+                 * TradeTickerVO isfiatconvert.
+                 * @member {boolean} isfiatconvert
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @instance
+                 */
+                TradeTickerVO.prototype.isfiatconvert = false;
+
+                /**
+                 * Creates a new TradeTickerVO instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @static
+                 * @param {market.v2.trade.ITradeTickerVO=} [properties] Properties to set
+                 * @returns {market.v2.trade.TradeTickerVO} TradeTickerVO instance
+                 */
+                TradeTickerVO.create = function create(properties) {
+                    return new TradeTickerVO(properties);
+                };
+
+                /**
+                 * Encodes the specified TradeTickerVO message. Does not implicitly {@link market.v2.trade.TradeTickerVO.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @static
+                 * @param {market.v2.trade.ITradeTickerVO} message TradeTickerVO message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                TradeTickerVO.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.tradeid != null && Object.hasOwnProperty.call(message, "tradeid"))
+                        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.tradeid);
+                    if (message.high != null && Object.hasOwnProperty.call(message, "high"))
+                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.high);
+                    if (message.open != null && Object.hasOwnProperty.call(message, "open"))
+                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.open);
+                    if (message.low != null && Object.hasOwnProperty.call(message, "low"))
+                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.low);
+                    if (message.close != null && Object.hasOwnProperty.call(message, "close"))
+                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.close);
+                    if (message.volume != null && Object.hasOwnProperty.call(message, "volume"))
+                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.volume);
+                    if (message.change != null && Object.hasOwnProperty.call(message, "change"))
+                        writer.uint32(/* id 7, wireType 2 =*/58).string(message.change);
+                    if (message.cny != null && Object.hasOwnProperty.call(message, "cny"))
+                        writer.uint32(/* id 8, wireType 2 =*/66).string(message.cny);
+                    if (message.last != null && Object.hasOwnProperty.call(message, "last"))
+                        writer.uint32(/* id 9, wireType 2 =*/74).string(message.last);
+                    if (message.netvalue != null && Object.hasOwnProperty.call(message, "netvalue"))
+                        writer.uint32(/* id 10, wireType 2 =*/82).string(message.netvalue);
+                    if (message.amount != null && Object.hasOwnProperty.call(message, "amount"))
+                        writer.uint32(/* id 11, wireType 2 =*/90).string(message.amount);
+                    if (message.isfiatconvert != null && Object.hasOwnProperty.call(message, "isfiatconvert"))
+                        writer.uint32(/* id 12, wireType 0 =*/96).bool(message.isfiatconvert);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified TradeTickerVO message, length delimited. Does not implicitly {@link market.v2.trade.TradeTickerVO.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @static
+                 * @param {market.v2.trade.ITradeTickerVO} message TradeTickerVO message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                TradeTickerVO.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a TradeTickerVO message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.TradeTickerVO} TradeTickerVO
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                TradeTickerVO.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.TradeTickerVO();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.tradeid = reader.int32();
+                                break;
+                            }
+                        case 2: {
+                                message.high = reader.string();
+                                break;
+                            }
+                        case 3: {
+                                message.open = reader.string();
+                                break;
+                            }
+                        case 4: {
+                                message.low = reader.string();
+                                break;
+                            }
+                        case 5: {
+                                message.close = reader.string();
+                                break;
+                            }
+                        case 6: {
+                                message.volume = reader.string();
+                                break;
+                            }
+                        case 7: {
+                                message.change = reader.string();
+                                break;
+                            }
+                        case 8: {
+                                message.cny = reader.string();
+                                break;
+                            }
+                        case 9: {
+                                message.last = reader.string();
+                                break;
+                            }
+                        case 10: {
+                                message.netvalue = reader.string();
+                                break;
+                            }
+                        case 11: {
+                                message.amount = reader.string();
+                                break;
+                            }
+                        case 12: {
+                                message.isfiatconvert = reader.bool();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a TradeTickerVO message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.TradeTickerVO} TradeTickerVO
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                TradeTickerVO.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a TradeTickerVO message.
+                 * @function verify
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                TradeTickerVO.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.tradeid != null && message.hasOwnProperty("tradeid"))
+                        if (!$util.isInteger(message.tradeid))
+                            return "tradeid: integer expected";
+                    if (message.high != null && message.hasOwnProperty("high"))
+                        if (!$util.isString(message.high))
+                            return "high: string expected";
+                    if (message.open != null && message.hasOwnProperty("open"))
+                        if (!$util.isString(message.open))
+                            return "open: string expected";
+                    if (message.low != null && message.hasOwnProperty("low"))
+                        if (!$util.isString(message.low))
+                            return "low: string expected";
+                    if (message.close != null && message.hasOwnProperty("close"))
+                        if (!$util.isString(message.close))
+                            return "close: string expected";
+                    if (message.volume != null && message.hasOwnProperty("volume"))
+                        if (!$util.isString(message.volume))
+                            return "volume: string expected";
+                    if (message.change != null && message.hasOwnProperty("change"))
+                        if (!$util.isString(message.change))
+                            return "change: string expected";
+                    if (message.cny != null && message.hasOwnProperty("cny"))
+                        if (!$util.isString(message.cny))
+                            return "cny: string expected";
+                    if (message.last != null && message.hasOwnProperty("last"))
+                        if (!$util.isString(message.last))
+                            return "last: string expected";
+                    if (message.netvalue != null && message.hasOwnProperty("netvalue"))
+                        if (!$util.isString(message.netvalue))
+                            return "netvalue: string expected";
+                    if (message.amount != null && message.hasOwnProperty("amount"))
+                        if (!$util.isString(message.amount))
+                            return "amount: string expected";
+                    if (message.isfiatconvert != null && message.hasOwnProperty("isfiatconvert"))
+                        if (typeof message.isfiatconvert !== "boolean")
+                            return "isfiatconvert: boolean expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a TradeTickerVO message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.TradeTickerVO} TradeTickerVO
+                 */
+                TradeTickerVO.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.TradeTickerVO)
+                        return object;
+                    var message = new $root.market.v2.trade.TradeTickerVO();
+                    if (object.tradeid != null)
+                        message.tradeid = object.tradeid | 0;
+                    if (object.high != null)
+                        message.high = String(object.high);
+                    if (object.open != null)
+                        message.open = String(object.open);
+                    if (object.low != null)
+                        message.low = String(object.low);
+                    if (object.close != null)
+                        message.close = String(object.close);
+                    if (object.volume != null)
+                        message.volume = String(object.volume);
+                    if (object.change != null)
+                        message.change = String(object.change);
+                    if (object.cny != null)
+                        message.cny = String(object.cny);
+                    if (object.last != null)
+                        message.last = String(object.last);
+                    if (object.netvalue != null)
+                        message.netvalue = String(object.netvalue);
+                    if (object.amount != null)
+                        message.amount = String(object.amount);
+                    if (object.isfiatconvert != null)
+                        message.isfiatconvert = Boolean(object.isfiatconvert);
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a TradeTickerVO message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @static
+                 * @param {market.v2.trade.TradeTickerVO} message TradeTickerVO
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                TradeTickerVO.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.tradeid = 0;
+                        object.high = "";
+                        object.open = "";
+                        object.low = "";
+                        object.close = "";
+                        object.volume = "";
+                        object.change = "";
+                        object.cny = "";
+                        object.last = "";
+                        object.netvalue = "";
+                        object.amount = "";
+                        object.isfiatconvert = false;
+                    }
+                    if (message.tradeid != null && message.hasOwnProperty("tradeid"))
+                        object.tradeid = message.tradeid;
+                    if (message.high != null && message.hasOwnProperty("high"))
+                        object.high = message.high;
+                    if (message.open != null && message.hasOwnProperty("open"))
+                        object.open = message.open;
+                    if (message.low != null && message.hasOwnProperty("low"))
+                        object.low = message.low;
+                    if (message.close != null && message.hasOwnProperty("close"))
+                        object.close = message.close;
+                    if (message.volume != null && message.hasOwnProperty("volume"))
+                        object.volume = message.volume;
+                    if (message.change != null && message.hasOwnProperty("change"))
+                        object.change = message.change;
+                    if (message.cny != null && message.hasOwnProperty("cny"))
+                        object.cny = message.cny;
+                    if (message.last != null && message.hasOwnProperty("last"))
+                        object.last = message.last;
+                    if (message.netvalue != null && message.hasOwnProperty("netvalue"))
+                        object.netvalue = message.netvalue;
+                    if (message.amount != null && message.hasOwnProperty("amount"))
+                        object.amount = message.amount;
+                    if (message.isfiatconvert != null && message.hasOwnProperty("isfiatconvert"))
+                        object.isfiatconvert = message.isfiatconvert;
+                    return object;
+                };
+
+                /**
+                 * Converts this TradeTickerVO to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                TradeTickerVO.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for TradeTickerVO
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.TradeTickerVO
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                TradeTickerVO.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.TradeTickerVO";
+                };
+
+                return TradeTickerVO;
+            })();
+
+            trade.EntrustVO = (function() {
+
+                /**
+                 * Properties of an EntrustVO.
+                 * @memberof market.v2.trade
+                 * @interface IEntrustVO
+                 * @property {number|Long|null} [id] EntrustVO id
+                 * @property {number|null} [tradeid] EntrustVO tradeid
+                 * @property {number|Long|null} [entrusttime] EntrustVO entrusttime
+                 * @property {string|null} [buycoinshortname] EntrustVO buycoinshortname
+                 * @property {string|null} [sellcoinshortname] EntrustVO sellcoinshortname
+                 * @property {number|null} [type] EntrustVO type
+                 * @property {number|null} [direction] EntrustVO direction
+                 * @property {number|null} [matchtype] EntrustVO matchtype
+                 * @property {string|null} [pricetype] EntrustVO pricetype
+                 * @property {string|null} [entrustprice] EntrustVO entrustprice
+                 * @property {string|null} [count] EntrustVO count
+                 * @property {string|null} [successcount] EntrustVO successcount
+                 * @property {string|null} [averageprice] EntrustVO averageprice
+                 * @property {number|null} [status] EntrustVO status
+                 * @property {boolean|null} [history] EntrustVO history
+                 * @property {number|Long|null} [pushversion] EntrustVO pushversion
+                 * @property {boolean|null} [remove] EntrustVO remove
+                 * @property {string|null} [amount] EntrustVO amount
+                 * @property {string|null} [marketunit] EntrustVO marketunit
+                 * @property {string|null} [funds] EntrustVO funds
+                 * @property {string|null} [leftfunds] EntrustVO leftfunds
+                 * @property {string|null} [triggerprice] EntrustVO triggerprice
+                 * @property {string|null} [marginmode] EntrustVO marginmode
+                 * @property {string|null} [margintrademode] EntrustVO margintrademode
+                 * @property {boolean|null} [forcedliquidation] EntrustVO forcedliquidation
+                 * @property {string|null} [remark] EntrustVO remark
+                 * @property {string|null} [successamount] EntrustVO successamount
+                 * @property {number|null} [tradearea] EntrustVO tradearea
+                 * @property {string|null} [fee] EntrustVO fee
+                 * @property {string|null} [trailingdelta] EntrustVO trailingdelta
+                 * @property {string|null} [activationprice] EntrustVO activationprice
+                 * @property {number|Long|null} [activationtime] EntrustVO activationtime
+                 * @property {number|null} [triggersign] EntrustVO triggersign
+                 * @property {string|null} [orderid] EntrustVO orderid
+                 */
+
+                /**
+                 * Constructs a new EntrustVO.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents an EntrustVO.
+                 * @implements IEntrustVO
+                 * @constructor
+                 * @param {market.v2.trade.IEntrustVO=} [properties] Properties to set
+                 */
+                function EntrustVO(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * EntrustVO id.
+                 * @member {number|Long} id
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.id = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                /**
+                 * EntrustVO tradeid.
+                 * @member {number} tradeid
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.tradeid = 0;
+
+                /**
+                 * EntrustVO entrusttime.
+                 * @member {number|Long} entrusttime
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.entrusttime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                /**
+                 * EntrustVO buycoinshortname.
+                 * @member {string} buycoinshortname
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.buycoinshortname = "";
+
+                /**
+                 * EntrustVO sellcoinshortname.
+                 * @member {string} sellcoinshortname
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.sellcoinshortname = "";
+
+                /**
+                 * EntrustVO type.
+                 * @member {number} type
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.type = 0;
+
+                /**
+                 * EntrustVO direction.
+                 * @member {number} direction
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.direction = 0;
+
+                /**
+                 * EntrustVO matchtype.
+                 * @member {number} matchtype
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.matchtype = 0;
+
+                /**
+                 * EntrustVO pricetype.
+                 * @member {string} pricetype
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.pricetype = "";
+
+                /**
+                 * EntrustVO entrustprice.
+                 * @member {string} entrustprice
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.entrustprice = "";
+
+                /**
+                 * EntrustVO count.
+                 * @member {string} count
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.count = "";
+
+                /**
+                 * EntrustVO successcount.
+                 * @member {string} successcount
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.successcount = "";
+
+                /**
+                 * EntrustVO averageprice.
+                 * @member {string} averageprice
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.averageprice = "";
+
+                /**
+                 * EntrustVO status.
+                 * @member {number} status
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.status = 0;
+
+                /**
+                 * EntrustVO history.
+                 * @member {boolean} history
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.history = false;
+
+                /**
+                 * EntrustVO pushversion.
+                 * @member {number|Long} pushversion
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.pushversion = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                /**
+                 * EntrustVO remove.
+                 * @member {boolean} remove
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.remove = false;
+
+                /**
+                 * EntrustVO amount.
+                 * @member {string} amount
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.amount = "";
+
+                /**
+                 * EntrustVO marketunit.
+                 * @member {string} marketunit
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.marketunit = "";
+
+                /**
+                 * EntrustVO funds.
+                 * @member {string} funds
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.funds = "";
+
+                /**
+                 * EntrustVO leftfunds.
+                 * @member {string} leftfunds
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.leftfunds = "";
+
+                /**
+                 * EntrustVO triggerprice.
+                 * @member {string} triggerprice
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.triggerprice = "";
+
+                /**
+                 * EntrustVO marginmode.
+                 * @member {string} marginmode
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.marginmode = "";
+
+                /**
+                 * EntrustVO margintrademode.
+                 * @member {string} margintrademode
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.margintrademode = "";
+
+                /**
+                 * EntrustVO forcedliquidation.
+                 * @member {boolean} forcedliquidation
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.forcedliquidation = false;
+
+                /**
+                 * EntrustVO remark.
+                 * @member {string} remark
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.remark = "";
+
+                /**
+                 * EntrustVO successamount.
+                 * @member {string} successamount
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.successamount = "";
+
+                /**
+                 * EntrustVO tradearea.
+                 * @member {number} tradearea
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.tradearea = 0;
+
+                /**
+                 * EntrustVO fee.
+                 * @member {string} fee
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.fee = "";
+
+                /**
+                 * EntrustVO trailingdelta.
+                 * @member {string} trailingdelta
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.trailingdelta = "";
+
+                /**
+                 * EntrustVO activationprice.
+                 * @member {string} activationprice
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.activationprice = "";
+
+                /**
+                 * EntrustVO activationtime.
+                 * @member {number|Long} activationtime
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.activationtime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                /**
+                 * EntrustVO triggersign.
+                 * @member {number} triggersign
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.triggersign = 0;
+
+                /**
+                 * EntrustVO orderid.
+                 * @member {string} orderid
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 */
+                EntrustVO.prototype.orderid = "";
+
+                /**
+                 * Creates a new EntrustVO instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.EntrustVO
+                 * @static
+                 * @param {market.v2.trade.IEntrustVO=} [properties] Properties to set
+                 * @returns {market.v2.trade.EntrustVO} EntrustVO instance
+                 */
+                EntrustVO.create = function create(properties) {
+                    return new EntrustVO(properties);
+                };
+
+                /**
+                 * Encodes the specified EntrustVO message. Does not implicitly {@link market.v2.trade.EntrustVO.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.EntrustVO
+                 * @static
+                 * @param {market.v2.trade.IEntrustVO} message EntrustVO message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                EntrustVO.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.id != null && Object.hasOwnProperty.call(message, "id"))
+                        writer.uint32(/* id 1, wireType 0 =*/8).int64(message.id);
+                    if (message.tradeid != null && Object.hasOwnProperty.call(message, "tradeid"))
+                        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.tradeid);
+                    if (message.entrusttime != null && Object.hasOwnProperty.call(message, "entrusttime"))
+                        writer.uint32(/* id 3, wireType 0 =*/24).int64(message.entrusttime);
+                    if (message.buycoinshortname != null && Object.hasOwnProperty.call(message, "buycoinshortname"))
+                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.buycoinshortname);
+                    if (message.sellcoinshortname != null && Object.hasOwnProperty.call(message, "sellcoinshortname"))
+                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.sellcoinshortname);
+                    if (message.type != null && Object.hasOwnProperty.call(message, "type"))
+                        writer.uint32(/* id 6, wireType 0 =*/48).int32(message.type);
+                    if (message.direction != null && Object.hasOwnProperty.call(message, "direction"))
+                        writer.uint32(/* id 7, wireType 0 =*/56).int32(message.direction);
+                    if (message.matchtype != null && Object.hasOwnProperty.call(message, "matchtype"))
+                        writer.uint32(/* id 8, wireType 0 =*/64).int32(message.matchtype);
+                    if (message.pricetype != null && Object.hasOwnProperty.call(message, "pricetype"))
+                        writer.uint32(/* id 9, wireType 2 =*/74).string(message.pricetype);
+                    if (message.entrustprice != null && Object.hasOwnProperty.call(message, "entrustprice"))
+                        writer.uint32(/* id 10, wireType 2 =*/82).string(message.entrustprice);
+                    if (message.count != null && Object.hasOwnProperty.call(message, "count"))
+                        writer.uint32(/* id 11, wireType 2 =*/90).string(message.count);
+                    if (message.successcount != null && Object.hasOwnProperty.call(message, "successcount"))
+                        writer.uint32(/* id 12, wireType 2 =*/98).string(message.successcount);
+                    if (message.averageprice != null && Object.hasOwnProperty.call(message, "averageprice"))
+                        writer.uint32(/* id 13, wireType 2 =*/106).string(message.averageprice);
+                    if (message.status != null && Object.hasOwnProperty.call(message, "status"))
+                        writer.uint32(/* id 14, wireType 0 =*/112).int32(message.status);
+                    if (message.history != null && Object.hasOwnProperty.call(message, "history"))
+                        writer.uint32(/* id 15, wireType 0 =*/120).bool(message.history);
+                    if (message.pushversion != null && Object.hasOwnProperty.call(message, "pushversion"))
+                        writer.uint32(/* id 16, wireType 0 =*/128).int64(message.pushversion);
+                    if (message.remove != null && Object.hasOwnProperty.call(message, "remove"))
+                        writer.uint32(/* id 17, wireType 0 =*/136).bool(message.remove);
+                    if (message.amount != null && Object.hasOwnProperty.call(message, "amount"))
+                        writer.uint32(/* id 18, wireType 2 =*/146).string(message.amount);
+                    if (message.marketunit != null && Object.hasOwnProperty.call(message, "marketunit"))
+                        writer.uint32(/* id 19, wireType 2 =*/154).string(message.marketunit);
+                    if (message.funds != null && Object.hasOwnProperty.call(message, "funds"))
+                        writer.uint32(/* id 20, wireType 2 =*/162).string(message.funds);
+                    if (message.leftfunds != null && Object.hasOwnProperty.call(message, "leftfunds"))
+                        writer.uint32(/* id 21, wireType 2 =*/170).string(message.leftfunds);
+                    if (message.triggerprice != null && Object.hasOwnProperty.call(message, "triggerprice"))
+                        writer.uint32(/* id 22, wireType 2 =*/178).string(message.triggerprice);
+                    if (message.marginmode != null && Object.hasOwnProperty.call(message, "marginmode"))
+                        writer.uint32(/* id 23, wireType 2 =*/186).string(message.marginmode);
+                    if (message.margintrademode != null && Object.hasOwnProperty.call(message, "margintrademode"))
+                        writer.uint32(/* id 24, wireType 2 =*/194).string(message.margintrademode);
+                    if (message.forcedliquidation != null && Object.hasOwnProperty.call(message, "forcedliquidation"))
+                        writer.uint32(/* id 25, wireType 0 =*/200).bool(message.forcedliquidation);
+                    if (message.remark != null && Object.hasOwnProperty.call(message, "remark"))
+                        writer.uint32(/* id 26, wireType 2 =*/210).string(message.remark);
+                    if (message.successamount != null && Object.hasOwnProperty.call(message, "successamount"))
+                        writer.uint32(/* id 27, wireType 2 =*/218).string(message.successamount);
+                    if (message.tradearea != null && Object.hasOwnProperty.call(message, "tradearea"))
+                        writer.uint32(/* id 28, wireType 0 =*/224).int32(message.tradearea);
+                    if (message.fee != null && Object.hasOwnProperty.call(message, "fee"))
+                        writer.uint32(/* id 29, wireType 2 =*/234).string(message.fee);
+                    if (message.trailingdelta != null && Object.hasOwnProperty.call(message, "trailingdelta"))
+                        writer.uint32(/* id 30, wireType 2 =*/242).string(message.trailingdelta);
+                    if (message.activationprice != null && Object.hasOwnProperty.call(message, "activationprice"))
+                        writer.uint32(/* id 31, wireType 2 =*/250).string(message.activationprice);
+                    if (message.activationtime != null && Object.hasOwnProperty.call(message, "activationtime"))
+                        writer.uint32(/* id 32, wireType 0 =*/256).int64(message.activationtime);
+                    if (message.triggersign != null && Object.hasOwnProperty.call(message, "triggersign"))
+                        writer.uint32(/* id 33, wireType 0 =*/264).int32(message.triggersign);
+                    if (message.orderid != null && Object.hasOwnProperty.call(message, "orderid"))
+                        writer.uint32(/* id 34, wireType 2 =*/274).string(message.orderid);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified EntrustVO message, length delimited. Does not implicitly {@link market.v2.trade.EntrustVO.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.EntrustVO
+                 * @static
+                 * @param {market.v2.trade.IEntrustVO} message EntrustVO message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                EntrustVO.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes an EntrustVO message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.EntrustVO
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.EntrustVO} EntrustVO
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                EntrustVO.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.EntrustVO();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.id = reader.int64();
+                                break;
+                            }
+                        case 2: {
+                                message.tradeid = reader.int32();
+                                break;
+                            }
+                        case 3: {
+                                message.entrusttime = reader.int64();
+                                break;
+                            }
+                        case 4: {
+                                message.buycoinshortname = reader.string();
+                                break;
+                            }
+                        case 5: {
+                                message.sellcoinshortname = reader.string();
+                                break;
+                            }
+                        case 6: {
+                                message.type = reader.int32();
+                                break;
+                            }
+                        case 7: {
+                                message.direction = reader.int32();
+                                break;
+                            }
+                        case 8: {
+                                message.matchtype = reader.int32();
+                                break;
+                            }
+                        case 9: {
+                                message.pricetype = reader.string();
+                                break;
+                            }
+                        case 10: {
+                                message.entrustprice = reader.string();
+                                break;
+                            }
+                        case 11: {
+                                message.count = reader.string();
+                                break;
+                            }
+                        case 12: {
+                                message.successcount = reader.string();
+                                break;
+                            }
+                        case 13: {
+                                message.averageprice = reader.string();
+                                break;
+                            }
+                        case 14: {
+                                message.status = reader.int32();
+                                break;
+                            }
+                        case 15: {
+                                message.history = reader.bool();
+                                break;
+                            }
+                        case 16: {
+                                message.pushversion = reader.int64();
+                                break;
+                            }
+                        case 17: {
+                                message.remove = reader.bool();
+                                break;
+                            }
+                        case 18: {
+                                message.amount = reader.string();
+                                break;
+                            }
+                        case 19: {
+                                message.marketunit = reader.string();
+                                break;
+                            }
+                        case 20: {
+                                message.funds = reader.string();
+                                break;
+                            }
+                        case 21: {
+                                message.leftfunds = reader.string();
+                                break;
+                            }
+                        case 22: {
+                                message.triggerprice = reader.string();
+                                break;
+                            }
+                        case 23: {
+                                message.marginmode = reader.string();
+                                break;
+                            }
+                        case 24: {
+                                message.margintrademode = reader.string();
+                                break;
+                            }
+                        case 25: {
+                                message.forcedliquidation = reader.bool();
+                                break;
+                            }
+                        case 26: {
+                                message.remark = reader.string();
+                                break;
+                            }
+                        case 27: {
+                                message.successamount = reader.string();
+                                break;
+                            }
+                        case 28: {
+                                message.tradearea = reader.int32();
+                                break;
+                            }
+                        case 29: {
+                                message.fee = reader.string();
+                                break;
+                            }
+                        case 30: {
+                                message.trailingdelta = reader.string();
+                                break;
+                            }
+                        case 31: {
+                                message.activationprice = reader.string();
+                                break;
+                            }
+                        case 32: {
+                                message.activationtime = reader.int64();
+                                break;
+                            }
+                        case 33: {
+                                message.triggersign = reader.int32();
+                                break;
+                            }
+                        case 34: {
+                                message.orderid = reader.string();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes an EntrustVO message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.EntrustVO
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.EntrustVO} EntrustVO
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                EntrustVO.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies an EntrustVO message.
+                 * @function verify
+                 * @memberof market.v2.trade.EntrustVO
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                EntrustVO.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.id != null && message.hasOwnProperty("id"))
+                        if (!$util.isInteger(message.id) && !(message.id && $util.isInteger(message.id.low) && $util.isInteger(message.id.high)))
+                            return "id: integer|Long expected";
+                    if (message.tradeid != null && message.hasOwnProperty("tradeid"))
+                        if (!$util.isInteger(message.tradeid))
+                            return "tradeid: integer expected";
+                    if (message.entrusttime != null && message.hasOwnProperty("entrusttime"))
+                        if (!$util.isInteger(message.entrusttime) && !(message.entrusttime && $util.isInteger(message.entrusttime.low) && $util.isInteger(message.entrusttime.high)))
+                            return "entrusttime: integer|Long expected";
+                    if (message.buycoinshortname != null && message.hasOwnProperty("buycoinshortname"))
+                        if (!$util.isString(message.buycoinshortname))
+                            return "buycoinshortname: string expected";
+                    if (message.sellcoinshortname != null && message.hasOwnProperty("sellcoinshortname"))
+                        if (!$util.isString(message.sellcoinshortname))
+                            return "sellcoinshortname: string expected";
+                    if (message.type != null && message.hasOwnProperty("type"))
+                        if (!$util.isInteger(message.type))
+                            return "type: integer expected";
+                    if (message.direction != null && message.hasOwnProperty("direction"))
+                        if (!$util.isInteger(message.direction))
+                            return "direction: integer expected";
+                    if (message.matchtype != null && message.hasOwnProperty("matchtype"))
+                        if (!$util.isInteger(message.matchtype))
+                            return "matchtype: integer expected";
+                    if (message.pricetype != null && message.hasOwnProperty("pricetype"))
+                        if (!$util.isString(message.pricetype))
+                            return "pricetype: string expected";
+                    if (message.entrustprice != null && message.hasOwnProperty("entrustprice"))
+                        if (!$util.isString(message.entrustprice))
+                            return "entrustprice: string expected";
+                    if (message.count != null && message.hasOwnProperty("count"))
+                        if (!$util.isString(message.count))
+                            return "count: string expected";
+                    if (message.successcount != null && message.hasOwnProperty("successcount"))
+                        if (!$util.isString(message.successcount))
+                            return "successcount: string expected";
+                    if (message.averageprice != null && message.hasOwnProperty("averageprice"))
+                        if (!$util.isString(message.averageprice))
+                            return "averageprice: string expected";
+                    if (message.status != null && message.hasOwnProperty("status"))
+                        if (!$util.isInteger(message.status))
+                            return "status: integer expected";
+                    if (message.history != null && message.hasOwnProperty("history"))
+                        if (typeof message.history !== "boolean")
+                            return "history: boolean expected";
+                    if (message.pushversion != null && message.hasOwnProperty("pushversion"))
+                        if (!$util.isInteger(message.pushversion) && !(message.pushversion && $util.isInteger(message.pushversion.low) && $util.isInteger(message.pushversion.high)))
+                            return "pushversion: integer|Long expected";
+                    if (message.remove != null && message.hasOwnProperty("remove"))
+                        if (typeof message.remove !== "boolean")
+                            return "remove: boolean expected";
+                    if (message.amount != null && message.hasOwnProperty("amount"))
+                        if (!$util.isString(message.amount))
+                            return "amount: string expected";
+                    if (message.marketunit != null && message.hasOwnProperty("marketunit"))
+                        if (!$util.isString(message.marketunit))
+                            return "marketunit: string expected";
+                    if (message.funds != null && message.hasOwnProperty("funds"))
+                        if (!$util.isString(message.funds))
+                            return "funds: string expected";
+                    if (message.leftfunds != null && message.hasOwnProperty("leftfunds"))
+                        if (!$util.isString(message.leftfunds))
+                            return "leftfunds: string expected";
+                    if (message.triggerprice != null && message.hasOwnProperty("triggerprice"))
+                        if (!$util.isString(message.triggerprice))
+                            return "triggerprice: string expected";
+                    if (message.marginmode != null && message.hasOwnProperty("marginmode"))
+                        if (!$util.isString(message.marginmode))
+                            return "marginmode: string expected";
+                    if (message.margintrademode != null && message.hasOwnProperty("margintrademode"))
+                        if (!$util.isString(message.margintrademode))
+                            return "margintrademode: string expected";
+                    if (message.forcedliquidation != null && message.hasOwnProperty("forcedliquidation"))
+                        if (typeof message.forcedliquidation !== "boolean")
+                            return "forcedliquidation: boolean expected";
+                    if (message.remark != null && message.hasOwnProperty("remark"))
+                        if (!$util.isString(message.remark))
+                            return "remark: string expected";
+                    if (message.successamount != null && message.hasOwnProperty("successamount"))
+                        if (!$util.isString(message.successamount))
+                            return "successamount: string expected";
+                    if (message.tradearea != null && message.hasOwnProperty("tradearea"))
+                        if (!$util.isInteger(message.tradearea))
+                            return "tradearea: integer expected";
+                    if (message.fee != null && message.hasOwnProperty("fee"))
+                        if (!$util.isString(message.fee))
+                            return "fee: string expected";
+                    if (message.trailingdelta != null && message.hasOwnProperty("trailingdelta"))
+                        if (!$util.isString(message.trailingdelta))
+                            return "trailingdelta: string expected";
+                    if (message.activationprice != null && message.hasOwnProperty("activationprice"))
+                        if (!$util.isString(message.activationprice))
+                            return "activationprice: string expected";
+                    if (message.activationtime != null && message.hasOwnProperty("activationtime"))
+                        if (!$util.isInteger(message.activationtime) && !(message.activationtime && $util.isInteger(message.activationtime.low) && $util.isInteger(message.activationtime.high)))
+                            return "activationtime: integer|Long expected";
+                    if (message.triggersign != null && message.hasOwnProperty("triggersign"))
+                        if (!$util.isInteger(message.triggersign))
+                            return "triggersign: integer expected";
+                    if (message.orderid != null && message.hasOwnProperty("orderid"))
+                        if (!$util.isString(message.orderid))
+                            return "orderid: string expected";
+                    return null;
+                };
+
+                /**
+                 * Creates an EntrustVO message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.EntrustVO
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.EntrustVO} EntrustVO
+                 */
+                EntrustVO.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.EntrustVO)
+                        return object;
+                    var message = new $root.market.v2.trade.EntrustVO();
+                    if (object.id != null)
+                        if ($util.Long)
+                            (message.id = $util.Long.fromValue(object.id)).unsigned = false;
+                        else if (typeof object.id === "string")
+                            message.id = parseInt(object.id, 10);
+                        else if (typeof object.id === "number")
+                            message.id = object.id;
+                        else if (typeof object.id === "object")
+                            message.id = new $util.LongBits(object.id.low >>> 0, object.id.high >>> 0).toNumber();
+                    if (object.tradeid != null)
+                        message.tradeid = object.tradeid | 0;
+                    if (object.entrusttime != null)
+                        if ($util.Long)
+                            (message.entrusttime = $util.Long.fromValue(object.entrusttime)).unsigned = false;
+                        else if (typeof object.entrusttime === "string")
+                            message.entrusttime = parseInt(object.entrusttime, 10);
+                        else if (typeof object.entrusttime === "number")
+                            message.entrusttime = object.entrusttime;
+                        else if (typeof object.entrusttime === "object")
+                            message.entrusttime = new $util.LongBits(object.entrusttime.low >>> 0, object.entrusttime.high >>> 0).toNumber();
+                    if (object.buycoinshortname != null)
+                        message.buycoinshortname = String(object.buycoinshortname);
+                    if (object.sellcoinshortname != null)
+                        message.sellcoinshortname = String(object.sellcoinshortname);
+                    if (object.type != null)
+                        message.type = object.type | 0;
+                    if (object.direction != null)
+                        message.direction = object.direction | 0;
+                    if (object.matchtype != null)
+                        message.matchtype = object.matchtype | 0;
+                    if (object.pricetype != null)
+                        message.pricetype = String(object.pricetype);
+                    if (object.entrustprice != null)
+                        message.entrustprice = String(object.entrustprice);
+                    if (object.count != null)
+                        message.count = String(object.count);
+                    if (object.successcount != null)
+                        message.successcount = String(object.successcount);
+                    if (object.averageprice != null)
+                        message.averageprice = String(object.averageprice);
+                    if (object.status != null)
+                        message.status = object.status | 0;
+                    if (object.history != null)
+                        message.history = Boolean(object.history);
+                    if (object.pushversion != null)
+                        if ($util.Long)
+                            (message.pushversion = $util.Long.fromValue(object.pushversion)).unsigned = false;
+                        else if (typeof object.pushversion === "string")
+                            message.pushversion = parseInt(object.pushversion, 10);
+                        else if (typeof object.pushversion === "number")
+                            message.pushversion = object.pushversion;
+                        else if (typeof object.pushversion === "object")
+                            message.pushversion = new $util.LongBits(object.pushversion.low >>> 0, object.pushversion.high >>> 0).toNumber();
+                    if (object.remove != null)
+                        message.remove = Boolean(object.remove);
+                    if (object.amount != null)
+                        message.amount = String(object.amount);
+                    if (object.marketunit != null)
+                        message.marketunit = String(object.marketunit);
+                    if (object.funds != null)
+                        message.funds = String(object.funds);
+                    if (object.leftfunds != null)
+                        message.leftfunds = String(object.leftfunds);
+                    if (object.triggerprice != null)
+                        message.triggerprice = String(object.triggerprice);
+                    if (object.marginmode != null)
+                        message.marginmode = String(object.marginmode);
+                    if (object.margintrademode != null)
+                        message.margintrademode = String(object.margintrademode);
+                    if (object.forcedliquidation != null)
+                        message.forcedliquidation = Boolean(object.forcedliquidation);
+                    if (object.remark != null)
+                        message.remark = String(object.remark);
+                    if (object.successamount != null)
+                        message.successamount = String(object.successamount);
+                    if (object.tradearea != null)
+                        message.tradearea = object.tradearea | 0;
+                    if (object.fee != null)
+                        message.fee = String(object.fee);
+                    if (object.trailingdelta != null)
+                        message.trailingdelta = String(object.trailingdelta);
+                    if (object.activationprice != null)
+                        message.activationprice = String(object.activationprice);
+                    if (object.activationtime != null)
+                        if ($util.Long)
+                            (message.activationtime = $util.Long.fromValue(object.activationtime)).unsigned = false;
+                        else if (typeof object.activationtime === "string")
+                            message.activationtime = parseInt(object.activationtime, 10);
+                        else if (typeof object.activationtime === "number")
+                            message.activationtime = object.activationtime;
+                        else if (typeof object.activationtime === "object")
+                            message.activationtime = new $util.LongBits(object.activationtime.low >>> 0, object.activationtime.high >>> 0).toNumber();
+                    if (object.triggersign != null)
+                        message.triggersign = object.triggersign | 0;
+                    if (object.orderid != null)
+                        message.orderid = String(object.orderid);
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from an EntrustVO message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.EntrustVO
+                 * @static
+                 * @param {market.v2.trade.EntrustVO} message EntrustVO
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                EntrustVO.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        if ($util.Long) {
+                            var long = new $util.Long(0, 0, false);
+                            object.id = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                        } else
+                            object.id = options.longs === String ? "0" : 0;
+                        object.tradeid = 0;
+                        if ($util.Long) {
+                            var long = new $util.Long(0, 0, false);
+                            object.entrusttime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                        } else
+                            object.entrusttime = options.longs === String ? "0" : 0;
+                        object.buycoinshortname = "";
+                        object.sellcoinshortname = "";
+                        object.type = 0;
+                        object.direction = 0;
+                        object.matchtype = 0;
+                        object.pricetype = "";
+                        object.entrustprice = "";
+                        object.count = "";
+                        object.successcount = "";
+                        object.averageprice = "";
+                        object.status = 0;
+                        object.history = false;
+                        if ($util.Long) {
+                            var long = new $util.Long(0, 0, false);
+                            object.pushversion = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                        } else
+                            object.pushversion = options.longs === String ? "0" : 0;
+                        object.remove = false;
+                        object.amount = "";
+                        object.marketunit = "";
+                        object.funds = "";
+                        object.leftfunds = "";
+                        object.triggerprice = "";
+                        object.marginmode = "";
+                        object.margintrademode = "";
+                        object.forcedliquidation = false;
+                        object.remark = "";
+                        object.successamount = "";
+                        object.tradearea = 0;
+                        object.fee = "";
+                        object.trailingdelta = "";
+                        object.activationprice = "";
+                        if ($util.Long) {
+                            var long = new $util.Long(0, 0, false);
+                            object.activationtime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                        } else
+                            object.activationtime = options.longs === String ? "0" : 0;
+                        object.triggersign = 0;
+                        object.orderid = "";
+                    }
+                    if (message.id != null && message.hasOwnProperty("id"))
+                        if (typeof message.id === "number")
+                            object.id = options.longs === String ? String(message.id) : message.id;
+                        else
+                            object.id = options.longs === String ? $util.Long.prototype.toString.call(message.id) : options.longs === Number ? new $util.LongBits(message.id.low >>> 0, message.id.high >>> 0).toNumber() : message.id;
+                    if (message.tradeid != null && message.hasOwnProperty("tradeid"))
+                        object.tradeid = message.tradeid;
+                    if (message.entrusttime != null && message.hasOwnProperty("entrusttime"))
+                        if (typeof message.entrusttime === "number")
+                            object.entrusttime = options.longs === String ? String(message.entrusttime) : message.entrusttime;
+                        else
+                            object.entrusttime = options.longs === String ? $util.Long.prototype.toString.call(message.entrusttime) : options.longs === Number ? new $util.LongBits(message.entrusttime.low >>> 0, message.entrusttime.high >>> 0).toNumber() : message.entrusttime;
+                    if (message.buycoinshortname != null && message.hasOwnProperty("buycoinshortname"))
+                        object.buycoinshortname = message.buycoinshortname;
+                    if (message.sellcoinshortname != null && message.hasOwnProperty("sellcoinshortname"))
+                        object.sellcoinshortname = message.sellcoinshortname;
+                    if (message.type != null && message.hasOwnProperty("type"))
+                        object.type = message.type;
+                    if (message.direction != null && message.hasOwnProperty("direction"))
+                        object.direction = message.direction;
+                    if (message.matchtype != null && message.hasOwnProperty("matchtype"))
+                        object.matchtype = message.matchtype;
+                    if (message.pricetype != null && message.hasOwnProperty("pricetype"))
+                        object.pricetype = message.pricetype;
+                    if (message.entrustprice != null && message.hasOwnProperty("entrustprice"))
+                        object.entrustprice = message.entrustprice;
+                    if (message.count != null && message.hasOwnProperty("count"))
+                        object.count = message.count;
+                    if (message.successcount != null && message.hasOwnProperty("successcount"))
+                        object.successcount = message.successcount;
+                    if (message.averageprice != null && message.hasOwnProperty("averageprice"))
+                        object.averageprice = message.averageprice;
+                    if (message.status != null && message.hasOwnProperty("status"))
+                        object.status = message.status;
+                    if (message.history != null && message.hasOwnProperty("history"))
+                        object.history = message.history;
+                    if (message.pushversion != null && message.hasOwnProperty("pushversion"))
+                        if (typeof message.pushversion === "number")
+                            object.pushversion = options.longs === String ? String(message.pushversion) : message.pushversion;
+                        else
+                            object.pushversion = options.longs === String ? $util.Long.prototype.toString.call(message.pushversion) : options.longs === Number ? new $util.LongBits(message.pushversion.low >>> 0, message.pushversion.high >>> 0).toNumber() : message.pushversion;
+                    if (message.remove != null && message.hasOwnProperty("remove"))
+                        object.remove = message.remove;
+                    if (message.amount != null && message.hasOwnProperty("amount"))
+                        object.amount = message.amount;
+                    if (message.marketunit != null && message.hasOwnProperty("marketunit"))
+                        object.marketunit = message.marketunit;
+                    if (message.funds != null && message.hasOwnProperty("funds"))
+                        object.funds = message.funds;
+                    if (message.leftfunds != null && message.hasOwnProperty("leftfunds"))
+                        object.leftfunds = message.leftfunds;
+                    if (message.triggerprice != null && message.hasOwnProperty("triggerprice"))
+                        object.triggerprice = message.triggerprice;
+                    if (message.marginmode != null && message.hasOwnProperty("marginmode"))
+                        object.marginmode = message.marginmode;
+                    if (message.margintrademode != null && message.hasOwnProperty("margintrademode"))
+                        object.margintrademode = message.margintrademode;
+                    if (message.forcedliquidation != null && message.hasOwnProperty("forcedliquidation"))
+                        object.forcedliquidation = message.forcedliquidation;
+                    if (message.remark != null && message.hasOwnProperty("remark"))
+                        object.remark = message.remark;
+                    if (message.successamount != null && message.hasOwnProperty("successamount"))
+                        object.successamount = message.successamount;
+                    if (message.tradearea != null && message.hasOwnProperty("tradearea"))
+                        object.tradearea = message.tradearea;
+                    if (message.fee != null && message.hasOwnProperty("fee"))
+                        object.fee = message.fee;
+                    if (message.trailingdelta != null && message.hasOwnProperty("trailingdelta"))
+                        object.trailingdelta = message.trailingdelta;
+                    if (message.activationprice != null && message.hasOwnProperty("activationprice"))
+                        object.activationprice = message.activationprice;
+                    if (message.activationtime != null && message.hasOwnProperty("activationtime"))
+                        if (typeof message.activationtime === "number")
+                            object.activationtime = options.longs === String ? String(message.activationtime) : message.activationtime;
+                        else
+                            object.activationtime = options.longs === String ? $util.Long.prototype.toString.call(message.activationtime) : options.longs === Number ? new $util.LongBits(message.activationtime.low >>> 0, message.activationtime.high >>> 0).toNumber() : message.activationtime;
+                    if (message.triggersign != null && message.hasOwnProperty("triggersign"))
+                        object.triggersign = message.triggersign;
+                    if (message.orderid != null && message.hasOwnProperty("orderid"))
+                        object.orderid = message.orderid;
+                    return object;
+                };
+
+                /**
+                 * Converts this EntrustVO to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.EntrustVO
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                EntrustVO.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for EntrustVO
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.EntrustVO
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                EntrustVO.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.EntrustVO";
+                };
+
+                return EntrustVO;
+            })();
+
+            trade.UserAssetBalance = (function() {
+
+                /**
+                 * Properties of a UserAssetBalance.
+                 * @memberof market.v2.trade
+                 * @interface IUserAssetBalance
+                 * @property {string|null} [usdtassets] UserAssetBalance usdtassets
+                 * @property {string|null} [usdtavailableassets] UserAssetBalance usdtavailableassets
+                 * @property {string|null} [totalassets] UserAssetBalance totalassets
+                 * @property {string|null} [btcassets] UserAssetBalance btcassets
+                 * @property {Array.<market.v2.trade.IUserWallet>|null} [userwalletlist] UserAssetBalance userwalletlist
+                 */
+
+                /**
+                 * Constructs a new UserAssetBalance.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a UserAssetBalance.
+                 * @implements IUserAssetBalance
+                 * @constructor
+                 * @param {market.v2.trade.IUserAssetBalance=} [properties] Properties to set
+                 */
+                function UserAssetBalance(properties) {
+                    this.userwalletlist = [];
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * UserAssetBalance usdtassets.
+                 * @member {string} usdtassets
+                 * @memberof market.v2.trade.UserAssetBalance
+                 * @instance
+                 */
+                UserAssetBalance.prototype.usdtassets = "";
+
+                /**
+                 * UserAssetBalance usdtavailableassets.
+                 * @member {string} usdtavailableassets
+                 * @memberof market.v2.trade.UserAssetBalance
+                 * @instance
+                 */
+                UserAssetBalance.prototype.usdtavailableassets = "";
+
+                /**
+                 * UserAssetBalance totalassets.
+                 * @member {string} totalassets
+                 * @memberof market.v2.trade.UserAssetBalance
+                 * @instance
+                 */
+                UserAssetBalance.prototype.totalassets = "";
+
+                /**
+                 * UserAssetBalance btcassets.
+                 * @member {string} btcassets
+                 * @memberof market.v2.trade.UserAssetBalance
+                 * @instance
+                 */
+                UserAssetBalance.prototype.btcassets = "";
+
+                /**
+                 * UserAssetBalance userwalletlist.
+                 * @member {Array.<market.v2.trade.IUserWallet>} userwalletlist
+                 * @memberof market.v2.trade.UserAssetBalance
+                 * @instance
+                 */
+                UserAssetBalance.prototype.userwalletlist = $util.emptyArray;
+
+                /**
+                 * Creates a new UserAssetBalance instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.UserAssetBalance
+                 * @static
+                 * @param {market.v2.trade.IUserAssetBalance=} [properties] Properties to set
+                 * @returns {market.v2.trade.UserAssetBalance} UserAssetBalance instance
+                 */
+                UserAssetBalance.create = function create(properties) {
+                    return new UserAssetBalance(properties);
+                };
+
+                /**
+                 * Encodes the specified UserAssetBalance message. Does not implicitly {@link market.v2.trade.UserAssetBalance.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.UserAssetBalance
+                 * @static
+                 * @param {market.v2.trade.IUserAssetBalance} message UserAssetBalance message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                UserAssetBalance.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.usdtassets != null && Object.hasOwnProperty.call(message, "usdtassets"))
+                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.usdtassets);
+                    if (message.usdtavailableassets != null && Object.hasOwnProperty.call(message, "usdtavailableassets"))
+                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.usdtavailableassets);
+                    if (message.totalassets != null && Object.hasOwnProperty.call(message, "totalassets"))
+                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.totalassets);
+                    if (message.btcassets != null && Object.hasOwnProperty.call(message, "btcassets"))
+                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.btcassets);
+                    if (message.userwalletlist != null && message.userwalletlist.length)
+                        for (var i = 0; i < message.userwalletlist.length; ++i)
+                            $root.market.v2.trade.UserWallet.encode(message.userwalletlist[i], writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified UserAssetBalance message, length delimited. Does not implicitly {@link market.v2.trade.UserAssetBalance.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.UserAssetBalance
+                 * @static
+                 * @param {market.v2.trade.IUserAssetBalance} message UserAssetBalance message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                UserAssetBalance.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a UserAssetBalance message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.UserAssetBalance
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.UserAssetBalance} UserAssetBalance
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                UserAssetBalance.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.UserAssetBalance();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.usdtassets = reader.string();
+                                break;
+                            }
+                        case 2: {
+                                message.usdtavailableassets = reader.string();
+                                break;
+                            }
+                        case 3: {
+                                message.totalassets = reader.string();
+                                break;
+                            }
+                        case 4: {
+                                message.btcassets = reader.string();
+                                break;
+                            }
+                        case 5: {
+                                if (!(message.userwalletlist && message.userwalletlist.length))
+                                    message.userwalletlist = [];
+                                message.userwalletlist.push($root.market.v2.trade.UserWallet.decode(reader, reader.uint32()));
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a UserAssetBalance message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.UserAssetBalance
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.UserAssetBalance} UserAssetBalance
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                UserAssetBalance.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a UserAssetBalance message.
+                 * @function verify
+                 * @memberof market.v2.trade.UserAssetBalance
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                UserAssetBalance.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.usdtassets != null && message.hasOwnProperty("usdtassets"))
+                        if (!$util.isString(message.usdtassets))
+                            return "usdtassets: string expected";
+                    if (message.usdtavailableassets != null && message.hasOwnProperty("usdtavailableassets"))
+                        if (!$util.isString(message.usdtavailableassets))
+                            return "usdtavailableassets: string expected";
+                    if (message.totalassets != null && message.hasOwnProperty("totalassets"))
+                        if (!$util.isString(message.totalassets))
+                            return "totalassets: string expected";
+                    if (message.btcassets != null && message.hasOwnProperty("btcassets"))
+                        if (!$util.isString(message.btcassets))
+                            return "btcassets: string expected";
+                    if (message.userwalletlist != null && message.hasOwnProperty("userwalletlist")) {
+                        if (!Array.isArray(message.userwalletlist))
+                            return "userwalletlist: array expected";
+                        for (var i = 0; i < message.userwalletlist.length; ++i) {
+                            var error = $root.market.v2.trade.UserWallet.verify(message.userwalletlist[i]);
+                            if (error)
+                                return "userwalletlist." + error;
+                        }
+                    }
+                    return null;
+                };
+
+                /**
+                 * Creates a UserAssetBalance message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.UserAssetBalance
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.UserAssetBalance} UserAssetBalance
+                 */
+                UserAssetBalance.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.UserAssetBalance)
+                        return object;
+                    var message = new $root.market.v2.trade.UserAssetBalance();
+                    if (object.usdtassets != null)
+                        message.usdtassets = String(object.usdtassets);
+                    if (object.usdtavailableassets != null)
+                        message.usdtavailableassets = String(object.usdtavailableassets);
+                    if (object.totalassets != null)
+                        message.totalassets = String(object.totalassets);
+                    if (object.btcassets != null)
+                        message.btcassets = String(object.btcassets);
+                    if (object.userwalletlist) {
+                        if (!Array.isArray(object.userwalletlist))
+                            throw TypeError(".market.v2.trade.UserAssetBalance.userwalletlist: array expected");
+                        message.userwalletlist = [];
+                        for (var i = 0; i < object.userwalletlist.length; ++i) {
+                            if (typeof object.userwalletlist[i] !== "object")
+                                throw TypeError(".market.v2.trade.UserAssetBalance.userwalletlist: object expected");
+                            message.userwalletlist[i] = $root.market.v2.trade.UserWallet.fromObject(object.userwalletlist[i]);
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a UserAssetBalance message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.UserAssetBalance
+                 * @static
+                 * @param {market.v2.trade.UserAssetBalance} message UserAssetBalance
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                UserAssetBalance.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.arrays || options.defaults)
+                        object.userwalletlist = [];
+                    if (options.defaults) {
+                        object.usdtassets = "";
+                        object.usdtavailableassets = "";
+                        object.totalassets = "";
+                        object.btcassets = "";
+                    }
+                    if (message.usdtassets != null && message.hasOwnProperty("usdtassets"))
+                        object.usdtassets = message.usdtassets;
+                    if (message.usdtavailableassets != null && message.hasOwnProperty("usdtavailableassets"))
+                        object.usdtavailableassets = message.usdtavailableassets;
+                    if (message.totalassets != null && message.hasOwnProperty("totalassets"))
+                        object.totalassets = message.totalassets;
+                    if (message.btcassets != null && message.hasOwnProperty("btcassets"))
+                        object.btcassets = message.btcassets;
+                    if (message.userwalletlist && message.userwalletlist.length) {
+                        object.userwalletlist = [];
+                        for (var j = 0; j < message.userwalletlist.length; ++j)
+                            object.userwalletlist[j] = $root.market.v2.trade.UserWallet.toObject(message.userwalletlist[j], options);
+                    }
+                    return object;
+                };
+
+                /**
+                 * Converts this UserAssetBalance to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.UserAssetBalance
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                UserAssetBalance.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for UserAssetBalance
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.UserAssetBalance
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                UserAssetBalance.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.UserAssetBalance";
+                };
+
+                return UserAssetBalance;
+            })();
+
+            trade.UserWallet = (function() {
+
+                /**
+                 * Properties of a UserWallet.
+                 * @memberof market.v2.trade
+                 * @interface IUserWallet
+                 * @property {Array.<market.v2.trade.IUserWalletPairInfo>|null} [listList] UserWallet listList
+                 */
+
+                /**
+                 * Constructs a new UserWallet.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a UserWallet.
+                 * @implements IUserWallet
+                 * @constructor
+                 * @param {market.v2.trade.IUserWallet=} [properties] Properties to set
+                 */
+                function UserWallet(properties) {
+                    this.listList = [];
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * UserWallet listList.
+                 * @member {Array.<market.v2.trade.IUserWalletPairInfo>} listList
+                 * @memberof market.v2.trade.UserWallet
+                 * @instance
+                 */
+                UserWallet.prototype.listList = $util.emptyArray;
+
+                /**
+                 * Creates a new UserWallet instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.UserWallet
+                 * @static
+                 * @param {market.v2.trade.IUserWallet=} [properties] Properties to set
+                 * @returns {market.v2.trade.UserWallet} UserWallet instance
+                 */
+                UserWallet.create = function create(properties) {
+                    return new UserWallet(properties);
+                };
+
+                /**
+                 * Encodes the specified UserWallet message. Does not implicitly {@link market.v2.trade.UserWallet.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.UserWallet
+                 * @static
+                 * @param {market.v2.trade.IUserWallet} message UserWallet message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                UserWallet.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.listList != null && message.listList.length)
+                        for (var i = 0; i < message.listList.length; ++i)
+                            $root.market.v2.trade.UserWalletPairInfo.encode(message.listList[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified UserWallet message, length delimited. Does not implicitly {@link market.v2.trade.UserWallet.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.UserWallet
+                 * @static
+                 * @param {market.v2.trade.IUserWallet} message UserWallet message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                UserWallet.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a UserWallet message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.UserWallet
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.UserWallet} UserWallet
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                UserWallet.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.UserWallet();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                if (!(message.listList && message.listList.length))
+                                    message.listList = [];
+                                message.listList.push($root.market.v2.trade.UserWalletPairInfo.decode(reader, reader.uint32()));
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a UserWallet message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.UserWallet
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.UserWallet} UserWallet
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                UserWallet.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a UserWallet message.
+                 * @function verify
+                 * @memberof market.v2.trade.UserWallet
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                UserWallet.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.listList != null && message.hasOwnProperty("listList")) {
+                        if (!Array.isArray(message.listList))
+                            return "listList: array expected";
+                        for (var i = 0; i < message.listList.length; ++i) {
+                            var error = $root.market.v2.trade.UserWalletPairInfo.verify(message.listList[i]);
+                            if (error)
+                                return "listList." + error;
+                        }
+                    }
+                    return null;
+                };
+
+                /**
+                 * Creates a UserWallet message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.UserWallet
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.UserWallet} UserWallet
+                 */
+                UserWallet.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.UserWallet)
+                        return object;
+                    var message = new $root.market.v2.trade.UserWallet();
+                    if (object.listList) {
+                        if (!Array.isArray(object.listList))
+                            throw TypeError(".market.v2.trade.UserWallet.listList: array expected");
+                        message.listList = [];
+                        for (var i = 0; i < object.listList.length; ++i) {
+                            if (typeof object.listList[i] !== "object")
+                                throw TypeError(".market.v2.trade.UserWallet.listList: object expected");
+                            message.listList[i] = $root.market.v2.trade.UserWalletPairInfo.fromObject(object.listList[i]);
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a UserWallet message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.UserWallet
+                 * @static
+                 * @param {market.v2.trade.UserWallet} message UserWallet
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                UserWallet.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.arrays || options.defaults)
+                        object.listList = [];
+                    if (message.listList && message.listList.length) {
+                        object.listList = [];
+                        for (var j = 0; j < message.listList.length; ++j)
+                            object.listList[j] = $root.market.v2.trade.UserWalletPairInfo.toObject(message.listList[j], options);
+                    }
+                    return object;
+                };
+
+                /**
+                 * Converts this UserWallet to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.UserWallet
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                UserWallet.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for UserWallet
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.UserWallet
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                UserWallet.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.UserWallet";
+                };
+
+                return UserWallet;
+            })();
+
+            trade.UserWalletPairInfo = (function() {
+
+                /**
+                 * Properties of a UserWalletPairInfo.
+                 * @memberof market.v2.trade
+                 * @interface IUserWalletPairInfo
+                 * @property {number|null} [coinid] UserWalletPairInfo coinid
+                 * @property {string|null} [totalAmount] UserWalletPairInfo totalAmount
+                 * @property {string|null} [total] UserWalletPairInfo total
+                 * @property {string|null} [frozen] UserWalletPairInfo frozen
+                 * @property {string|null} [borrow] UserWalletPairInfo borrow
+                 * @property {string|null} [coinname] UserWalletPairInfo coinname
+                 * @property {string|null} [shortName] UserWalletPairInfo shortName
+                 * @property {boolean|null} [withdraw] UserWalletPairInfo withdraw
+                 * @property {boolean|null} [recharge] UserWalletPairInfo recharge
+                 * @property {string|null} [usdtprice] UserWalletPairInfo usdtprice
+                 * @property {string|null} [price] UserWalletPairInfo price
+                 * @property {number|null} [sortid] UserWalletPairInfo sortid
+                 */
+
+                /**
+                 * Constructs a new UserWalletPairInfo.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a UserWalletPairInfo.
+                 * @implements IUserWalletPairInfo
+                 * @constructor
+                 * @param {market.v2.trade.IUserWalletPairInfo=} [properties] Properties to set
+                 */
+                function UserWalletPairInfo(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * UserWalletPairInfo coinid.
+                 * @member {number} coinid
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @instance
+                 */
+                UserWalletPairInfo.prototype.coinid = 0;
+
+                /**
+                 * UserWalletPairInfo totalAmount.
+                 * @member {string} totalAmount
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @instance
+                 */
+                UserWalletPairInfo.prototype.totalAmount = "";
+
+                /**
+                 * UserWalletPairInfo total.
+                 * @member {string} total
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @instance
+                 */
+                UserWalletPairInfo.prototype.total = "";
+
+                /**
+                 * UserWalletPairInfo frozen.
+                 * @member {string} frozen
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @instance
+                 */
+                UserWalletPairInfo.prototype.frozen = "";
+
+                /**
+                 * UserWalletPairInfo borrow.
+                 * @member {string} borrow
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @instance
+                 */
+                UserWalletPairInfo.prototype.borrow = "";
+
+                /**
+                 * UserWalletPairInfo coinname.
+                 * @member {string} coinname
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @instance
+                 */
+                UserWalletPairInfo.prototype.coinname = "";
+
+                /**
+                 * UserWalletPairInfo shortName.
+                 * @member {string} shortName
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @instance
+                 */
+                UserWalletPairInfo.prototype.shortName = "";
+
+                /**
+                 * UserWalletPairInfo withdraw.
+                 * @member {boolean} withdraw
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @instance
+                 */
+                UserWalletPairInfo.prototype.withdraw = false;
+
+                /**
+                 * UserWalletPairInfo recharge.
+                 * @member {boolean} recharge
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @instance
+                 */
+                UserWalletPairInfo.prototype.recharge = false;
+
+                /**
+                 * UserWalletPairInfo usdtprice.
+                 * @member {string} usdtprice
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @instance
+                 */
+                UserWalletPairInfo.prototype.usdtprice = "";
+
+                /**
+                 * UserWalletPairInfo price.
+                 * @member {string} price
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @instance
+                 */
+                UserWalletPairInfo.prototype.price = "";
+
+                /**
+                 * UserWalletPairInfo sortid.
+                 * @member {number} sortid
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @instance
+                 */
+                UserWalletPairInfo.prototype.sortid = 0;
+
+                /**
+                 * Creates a new UserWalletPairInfo instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @static
+                 * @param {market.v2.trade.IUserWalletPairInfo=} [properties] Properties to set
+                 * @returns {market.v2.trade.UserWalletPairInfo} UserWalletPairInfo instance
+                 */
+                UserWalletPairInfo.create = function create(properties) {
+                    return new UserWalletPairInfo(properties);
+                };
+
+                /**
+                 * Encodes the specified UserWalletPairInfo message. Does not implicitly {@link market.v2.trade.UserWalletPairInfo.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @static
+                 * @param {market.v2.trade.IUserWalletPairInfo} message UserWalletPairInfo message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                UserWalletPairInfo.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.coinid != null && Object.hasOwnProperty.call(message, "coinid"))
+                        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.coinid);
+                    if (message.totalAmount != null && Object.hasOwnProperty.call(message, "totalAmount"))
+                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.totalAmount);
+                    if (message.total != null && Object.hasOwnProperty.call(message, "total"))
+                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.total);
+                    if (message.frozen != null && Object.hasOwnProperty.call(message, "frozen"))
+                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.frozen);
+                    if (message.borrow != null && Object.hasOwnProperty.call(message, "borrow"))
+                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.borrow);
+                    if (message.coinname != null && Object.hasOwnProperty.call(message, "coinname"))
+                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.coinname);
+                    if (message.shortName != null && Object.hasOwnProperty.call(message, "shortName"))
+                        writer.uint32(/* id 7, wireType 2 =*/58).string(message.shortName);
+                    if (message.withdraw != null && Object.hasOwnProperty.call(message, "withdraw"))
+                        writer.uint32(/* id 8, wireType 0 =*/64).bool(message.withdraw);
+                    if (message.recharge != null && Object.hasOwnProperty.call(message, "recharge"))
+                        writer.uint32(/* id 9, wireType 0 =*/72).bool(message.recharge);
+                    if (message.usdtprice != null && Object.hasOwnProperty.call(message, "usdtprice"))
+                        writer.uint32(/* id 10, wireType 2 =*/82).string(message.usdtprice);
+                    if (message.price != null && Object.hasOwnProperty.call(message, "price"))
+                        writer.uint32(/* id 11, wireType 2 =*/90).string(message.price);
+                    if (message.sortid != null && Object.hasOwnProperty.call(message, "sortid"))
+                        writer.uint32(/* id 12, wireType 0 =*/96).int32(message.sortid);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified UserWalletPairInfo message, length delimited. Does not implicitly {@link market.v2.trade.UserWalletPairInfo.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @static
+                 * @param {market.v2.trade.IUserWalletPairInfo} message UserWalletPairInfo message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                UserWalletPairInfo.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a UserWalletPairInfo message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.UserWalletPairInfo} UserWalletPairInfo
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                UserWalletPairInfo.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.UserWalletPairInfo();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.coinid = reader.int32();
+                                break;
+                            }
+                        case 2: {
+                                message.totalAmount = reader.string();
+                                break;
+                            }
+                        case 3: {
+                                message.total = reader.string();
+                                break;
+                            }
+                        case 4: {
+                                message.frozen = reader.string();
+                                break;
+                            }
+                        case 5: {
+                                message.borrow = reader.string();
+                                break;
+                            }
+                        case 6: {
+                                message.coinname = reader.string();
+                                break;
+                            }
+                        case 7: {
+                                message.shortName = reader.string();
+                                break;
+                            }
+                        case 8: {
+                                message.withdraw = reader.bool();
+                                break;
+                            }
+                        case 9: {
+                                message.recharge = reader.bool();
+                                break;
+                            }
+                        case 10: {
+                                message.usdtprice = reader.string();
+                                break;
+                            }
+                        case 11: {
+                                message.price = reader.string();
+                                break;
+                            }
+                        case 12: {
+                                message.sortid = reader.int32();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a UserWalletPairInfo message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.UserWalletPairInfo} UserWalletPairInfo
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                UserWalletPairInfo.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a UserWalletPairInfo message.
+                 * @function verify
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                UserWalletPairInfo.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.coinid != null && message.hasOwnProperty("coinid"))
+                        if (!$util.isInteger(message.coinid))
+                            return "coinid: integer expected";
+                    if (message.totalAmount != null && message.hasOwnProperty("totalAmount"))
+                        if (!$util.isString(message.totalAmount))
+                            return "totalAmount: string expected";
+                    if (message.total != null && message.hasOwnProperty("total"))
+                        if (!$util.isString(message.total))
+                            return "total: string expected";
+                    if (message.frozen != null && message.hasOwnProperty("frozen"))
+                        if (!$util.isString(message.frozen))
+                            return "frozen: string expected";
+                    if (message.borrow != null && message.hasOwnProperty("borrow"))
+                        if (!$util.isString(message.borrow))
+                            return "borrow: string expected";
+                    if (message.coinname != null && message.hasOwnProperty("coinname"))
+                        if (!$util.isString(message.coinname))
+                            return "coinname: string expected";
+                    if (message.shortName != null && message.hasOwnProperty("shortName"))
+                        if (!$util.isString(message.shortName))
+                            return "shortName: string expected";
+                    if (message.withdraw != null && message.hasOwnProperty("withdraw"))
+                        if (typeof message.withdraw !== "boolean")
+                            return "withdraw: boolean expected";
+                    if (message.recharge != null && message.hasOwnProperty("recharge"))
+                        if (typeof message.recharge !== "boolean")
+                            return "recharge: boolean expected";
+                    if (message.usdtprice != null && message.hasOwnProperty("usdtprice"))
+                        if (!$util.isString(message.usdtprice))
+                            return "usdtprice: string expected";
+                    if (message.price != null && message.hasOwnProperty("price"))
+                        if (!$util.isString(message.price))
+                            return "price: string expected";
+                    if (message.sortid != null && message.hasOwnProperty("sortid"))
+                        if (!$util.isInteger(message.sortid))
+                            return "sortid: integer expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a UserWalletPairInfo message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.UserWalletPairInfo} UserWalletPairInfo
+                 */
+                UserWalletPairInfo.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.UserWalletPairInfo)
+                        return object;
+                    var message = new $root.market.v2.trade.UserWalletPairInfo();
+                    if (object.coinid != null)
+                        message.coinid = object.coinid | 0;
+                    if (object.totalAmount != null)
+                        message.totalAmount = String(object.totalAmount);
+                    if (object.total != null)
+                        message.total = String(object.total);
+                    if (object.frozen != null)
+                        message.frozen = String(object.frozen);
+                    if (object.borrow != null)
+                        message.borrow = String(object.borrow);
+                    if (object.coinname != null)
+                        message.coinname = String(object.coinname);
+                    if (object.shortName != null)
+                        message.shortName = String(object.shortName);
+                    if (object.withdraw != null)
+                        message.withdraw = Boolean(object.withdraw);
+                    if (object.recharge != null)
+                        message.recharge = Boolean(object.recharge);
+                    if (object.usdtprice != null)
+                        message.usdtprice = String(object.usdtprice);
+                    if (object.price != null)
+                        message.price = String(object.price);
+                    if (object.sortid != null)
+                        message.sortid = object.sortid | 0;
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a UserWalletPairInfo message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @static
+                 * @param {market.v2.trade.UserWalletPairInfo} message UserWalletPairInfo
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                UserWalletPairInfo.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.coinid = 0;
+                        object.totalAmount = "";
+                        object.total = "";
+                        object.frozen = "";
+                        object.borrow = "";
+                        object.coinname = "";
+                        object.shortName = "";
+                        object.withdraw = false;
+                        object.recharge = false;
+                        object.usdtprice = "";
+                        object.price = "";
+                        object.sortid = 0;
+                    }
+                    if (message.coinid != null && message.hasOwnProperty("coinid"))
+                        object.coinid = message.coinid;
+                    if (message.totalAmount != null && message.hasOwnProperty("totalAmount"))
+                        object.totalAmount = message.totalAmount;
+                    if (message.total != null && message.hasOwnProperty("total"))
+                        object.total = message.total;
+                    if (message.frozen != null && message.hasOwnProperty("frozen"))
+                        object.frozen = message.frozen;
+                    if (message.borrow != null && message.hasOwnProperty("borrow"))
+                        object.borrow = message.borrow;
+                    if (message.coinname != null && message.hasOwnProperty("coinname"))
+                        object.coinname = message.coinname;
+                    if (message.shortName != null && message.hasOwnProperty("shortName"))
+                        object.shortName = message.shortName;
+                    if (message.withdraw != null && message.hasOwnProperty("withdraw"))
+                        object.withdraw = message.withdraw;
+                    if (message.recharge != null && message.hasOwnProperty("recharge"))
+                        object.recharge = message.recharge;
+                    if (message.usdtprice != null && message.hasOwnProperty("usdtprice"))
+                        object.usdtprice = message.usdtprice;
+                    if (message.price != null && message.hasOwnProperty("price"))
+                        object.price = message.price;
+                    if (message.sortid != null && message.hasOwnProperty("sortid"))
+                        object.sortid = message.sortid;
+                    return object;
+                };
+
+                /**
+                 * Converts this UserWalletPairInfo to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                UserWalletPairInfo.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for UserWalletPairInfo
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.UserWalletPairInfo
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                UserWalletPairInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.UserWalletPairInfo";
+                };
+
+                return UserWalletPairInfo;
+            })();
+
+            trade.MarketTickerList = (function() {
+
+                /**
+                 * Properties of a MarketTickerList.
+                 * @memberof market.v2.trade
+                 * @interface IMarketTickerList
+                 */
+
+                /**
+                 * Constructs a new MarketTickerList.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a MarketTickerList.
+                 * @implements IMarketTickerList
+                 * @constructor
+                 * @param {market.v2.trade.IMarketTickerList=} [properties] Properties to set
+                 */
+                function MarketTickerList(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Creates a new MarketTickerList instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.MarketTickerList
+                 * @static
+                 * @param {market.v2.trade.IMarketTickerList=} [properties] Properties to set
+                 * @returns {market.v2.trade.MarketTickerList} MarketTickerList instance
+                 */
+                MarketTickerList.create = function create(properties) {
+                    return new MarketTickerList(properties);
+                };
+
+                /**
+                 * Encodes the specified MarketTickerList message. Does not implicitly {@link market.v2.trade.MarketTickerList.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.MarketTickerList
+                 * @static
+                 * @param {market.v2.trade.IMarketTickerList} message MarketTickerList message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                MarketTickerList.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified MarketTickerList message, length delimited. Does not implicitly {@link market.v2.trade.MarketTickerList.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.MarketTickerList
+                 * @static
+                 * @param {market.v2.trade.IMarketTickerList} message MarketTickerList message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                MarketTickerList.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a MarketTickerList message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.MarketTickerList
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.MarketTickerList} MarketTickerList
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                MarketTickerList.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.MarketTickerList();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a MarketTickerList message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.MarketTickerList
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.MarketTickerList} MarketTickerList
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                MarketTickerList.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a MarketTickerList message.
+                 * @function verify
+                 * @memberof market.v2.trade.MarketTickerList
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                MarketTickerList.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a MarketTickerList message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.MarketTickerList
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.MarketTickerList} MarketTickerList
+                 */
+                MarketTickerList.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.MarketTickerList)
+                        return object;
+                    return new $root.market.v2.trade.MarketTickerList();
+                };
+
+                /**
+                 * Creates a plain object from a MarketTickerList message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.MarketTickerList
+                 * @static
+                 * @param {market.v2.trade.MarketTickerList} message MarketTickerList
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                MarketTickerList.toObject = function toObject() {
+                    return {};
+                };
+
+                /**
+                 * Converts this MarketTickerList to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.MarketTickerList
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                MarketTickerList.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for MarketTickerList
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.MarketTickerList
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                MarketTickerList.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.MarketTickerList";
+                };
+
+                return MarketTickerList;
+            })();
+
+            trade.MarketMonit = (function() {
+
+                /**
+                 * Properties of a MarketMonit.
+                 * @memberof market.v2.trade
+                 * @interface IMarketMonit
+                 * @property {number|Long|null} [id] MarketMonit id
+                 * @property {string|null} [indexkey] MarketMonit indexkey
+                 * @property {number|null} [scope] MarketMonit scope
+                 * @property {number|null} [tradeid] MarketMonit tradeid
+                 * @property {string|null} [tradecode] MarketMonit tradecode
+                 * @property {string|null} [indexbase] MarketMonit indexbase
+                 * @property {string|null} [quote] MarketMonit quote
+                 * @property {string|null} [lever] MarketMonit lever
+                 * @property {string|null} [chg] MarketMonit chg
+                 * @property {string|null} [last] MarketMonit last
+                 * @property {string|null} [cny] MarketMonit cny
+                 * @property {string|null} [createtime] MarketMonit createtime
+                 * @property {string|null} [biztype] MarketMonit biztype
+                 * @property {string|null} [contracttype] MarketMonit contracttype
+                 * @property {number|Long|null} [liquidationdate] MarketMonit liquidationdate
+                 * @property {number|Long|null} [movetime] MarketMonit movetime
+                 */
+
+                /**
+                 * Constructs a new MarketMonit.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a MarketMonit.
+                 * @implements IMarketMonit
+                 * @constructor
+                 * @param {market.v2.trade.IMarketMonit=} [properties] Properties to set
+                 */
+                function MarketMonit(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * MarketMonit id.
+                 * @member {number|Long} id
+                 * @memberof market.v2.trade.MarketMonit
+                 * @instance
+                 */
+                MarketMonit.prototype.id = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                /**
+                 * MarketMonit indexkey.
+                 * @member {string} indexkey
+                 * @memberof market.v2.trade.MarketMonit
+                 * @instance
+                 */
+                MarketMonit.prototype.indexkey = "";
+
+                /**
+                 * MarketMonit scope.
+                 * @member {number} scope
+                 * @memberof market.v2.trade.MarketMonit
+                 * @instance
+                 */
+                MarketMonit.prototype.scope = 0;
+
+                /**
+                 * MarketMonit tradeid.
+                 * @member {number} tradeid
+                 * @memberof market.v2.trade.MarketMonit
+                 * @instance
+                 */
+                MarketMonit.prototype.tradeid = 0;
+
+                /**
+                 * MarketMonit tradecode.
+                 * @member {string} tradecode
+                 * @memberof market.v2.trade.MarketMonit
+                 * @instance
+                 */
+                MarketMonit.prototype.tradecode = "";
+
+                /**
+                 * MarketMonit indexbase.
+                 * @member {string} indexbase
+                 * @memberof market.v2.trade.MarketMonit
+                 * @instance
+                 */
+                MarketMonit.prototype.indexbase = "";
+
+                /**
+                 * MarketMonit quote.
+                 * @member {string} quote
+                 * @memberof market.v2.trade.MarketMonit
+                 * @instance
+                 */
+                MarketMonit.prototype.quote = "";
+
+                /**
+                 * MarketMonit lever.
+                 * @member {string} lever
+                 * @memberof market.v2.trade.MarketMonit
+                 * @instance
+                 */
+                MarketMonit.prototype.lever = "";
+
+                /**
+                 * MarketMonit chg.
+                 * @member {string} chg
+                 * @memberof market.v2.trade.MarketMonit
+                 * @instance
+                 */
+                MarketMonit.prototype.chg = "";
+
+                /**
+                 * MarketMonit last.
+                 * @member {string} last
+                 * @memberof market.v2.trade.MarketMonit
+                 * @instance
+                 */
+                MarketMonit.prototype.last = "";
+
+                /**
+                 * MarketMonit cny.
+                 * @member {string} cny
+                 * @memberof market.v2.trade.MarketMonit
+                 * @instance
+                 */
+                MarketMonit.prototype.cny = "";
+
+                /**
+                 * MarketMonit createtime.
+                 * @member {string} createtime
+                 * @memberof market.v2.trade.MarketMonit
+                 * @instance
+                 */
+                MarketMonit.prototype.createtime = "";
+
+                /**
+                 * MarketMonit biztype.
+                 * @member {string} biztype
+                 * @memberof market.v2.trade.MarketMonit
+                 * @instance
+                 */
+                MarketMonit.prototype.biztype = "";
+
+                /**
+                 * MarketMonit contracttype.
+                 * @member {string} contracttype
+                 * @memberof market.v2.trade.MarketMonit
+                 * @instance
+                 */
+                MarketMonit.prototype.contracttype = "";
+
+                /**
+                 * MarketMonit liquidationdate.
+                 * @member {number|Long} liquidationdate
+                 * @memberof market.v2.trade.MarketMonit
+                 * @instance
+                 */
+                MarketMonit.prototype.liquidationdate = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                /**
+                 * MarketMonit movetime.
+                 * @member {number|Long} movetime
+                 * @memberof market.v2.trade.MarketMonit
+                 * @instance
+                 */
+                MarketMonit.prototype.movetime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                /**
+                 * Creates a new MarketMonit instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.MarketMonit
+                 * @static
+                 * @param {market.v2.trade.IMarketMonit=} [properties] Properties to set
+                 * @returns {market.v2.trade.MarketMonit} MarketMonit instance
+                 */
+                MarketMonit.create = function create(properties) {
+                    return new MarketMonit(properties);
+                };
+
+                /**
+                 * Encodes the specified MarketMonit message. Does not implicitly {@link market.v2.trade.MarketMonit.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.MarketMonit
+                 * @static
+                 * @param {market.v2.trade.IMarketMonit} message MarketMonit message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                MarketMonit.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.id != null && Object.hasOwnProperty.call(message, "id"))
+                        writer.uint32(/* id 1, wireType 0 =*/8).int64(message.id);
+                    if (message.indexkey != null && Object.hasOwnProperty.call(message, "indexkey"))
+                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.indexkey);
+                    if (message.scope != null && Object.hasOwnProperty.call(message, "scope"))
+                        writer.uint32(/* id 3, wireType 0 =*/24).int32(message.scope);
+                    if (message.tradeid != null && Object.hasOwnProperty.call(message, "tradeid"))
+                        writer.uint32(/* id 4, wireType 0 =*/32).int32(message.tradeid);
+                    if (message.tradecode != null && Object.hasOwnProperty.call(message, "tradecode"))
+                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.tradecode);
+                    if (message.indexbase != null && Object.hasOwnProperty.call(message, "indexbase"))
+                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.indexbase);
+                    if (message.quote != null && Object.hasOwnProperty.call(message, "quote"))
+                        writer.uint32(/* id 7, wireType 2 =*/58).string(message.quote);
+                    if (message.lever != null && Object.hasOwnProperty.call(message, "lever"))
+                        writer.uint32(/* id 8, wireType 2 =*/66).string(message.lever);
+                    if (message.chg != null && Object.hasOwnProperty.call(message, "chg"))
+                        writer.uint32(/* id 9, wireType 2 =*/74).string(message.chg);
+                    if (message.last != null && Object.hasOwnProperty.call(message, "last"))
+                        writer.uint32(/* id 10, wireType 2 =*/82).string(message.last);
+                    if (message.cny != null && Object.hasOwnProperty.call(message, "cny"))
+                        writer.uint32(/* id 11, wireType 2 =*/90).string(message.cny);
+                    if (message.createtime != null && Object.hasOwnProperty.call(message, "createtime"))
+                        writer.uint32(/* id 12, wireType 2 =*/98).string(message.createtime);
+                    if (message.biztype != null && Object.hasOwnProperty.call(message, "biztype"))
+                        writer.uint32(/* id 13, wireType 2 =*/106).string(message.biztype);
+                    if (message.contracttype != null && Object.hasOwnProperty.call(message, "contracttype"))
+                        writer.uint32(/* id 14, wireType 2 =*/114).string(message.contracttype);
+                    if (message.liquidationdate != null && Object.hasOwnProperty.call(message, "liquidationdate"))
+                        writer.uint32(/* id 15, wireType 0 =*/120).int64(message.liquidationdate);
+                    if (message.movetime != null && Object.hasOwnProperty.call(message, "movetime"))
+                        writer.uint32(/* id 16, wireType 0 =*/128).int64(message.movetime);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified MarketMonit message, length delimited. Does not implicitly {@link market.v2.trade.MarketMonit.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.MarketMonit
+                 * @static
+                 * @param {market.v2.trade.IMarketMonit} message MarketMonit message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                MarketMonit.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a MarketMonit message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.MarketMonit
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.MarketMonit} MarketMonit
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                MarketMonit.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.MarketMonit();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.id = reader.int64();
+                                break;
+                            }
+                        case 2: {
+                                message.indexkey = reader.string();
+                                break;
+                            }
+                        case 3: {
+                                message.scope = reader.int32();
+                                break;
+                            }
+                        case 4: {
+                                message.tradeid = reader.int32();
+                                break;
+                            }
+                        case 5: {
+                                message.tradecode = reader.string();
+                                break;
+                            }
+                        case 6: {
+                                message.indexbase = reader.string();
+                                break;
+                            }
+                        case 7: {
+                                message.quote = reader.string();
+                                break;
+                            }
+                        case 8: {
+                                message.lever = reader.string();
+                                break;
+                            }
+                        case 9: {
+                                message.chg = reader.string();
+                                break;
+                            }
+                        case 10: {
+                                message.last = reader.string();
+                                break;
+                            }
+                        case 11: {
+                                message.cny = reader.string();
+                                break;
+                            }
+                        case 12: {
+                                message.createtime = reader.string();
+                                break;
+                            }
+                        case 13: {
+                                message.biztype = reader.string();
+                                break;
+                            }
+                        case 14: {
+                                message.contracttype = reader.string();
+                                break;
+                            }
+                        case 15: {
+                                message.liquidationdate = reader.int64();
+                                break;
+                            }
+                        case 16: {
+                                message.movetime = reader.int64();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a MarketMonit message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.MarketMonit
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.MarketMonit} MarketMonit
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                MarketMonit.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a MarketMonit message.
+                 * @function verify
+                 * @memberof market.v2.trade.MarketMonit
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                MarketMonit.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.id != null && message.hasOwnProperty("id"))
+                        if (!$util.isInteger(message.id) && !(message.id && $util.isInteger(message.id.low) && $util.isInteger(message.id.high)))
+                            return "id: integer|Long expected";
+                    if (message.indexkey != null && message.hasOwnProperty("indexkey"))
+                        if (!$util.isString(message.indexkey))
+                            return "indexkey: string expected";
+                    if (message.scope != null && message.hasOwnProperty("scope"))
+                        if (!$util.isInteger(message.scope))
+                            return "scope: integer expected";
+                    if (message.tradeid != null && message.hasOwnProperty("tradeid"))
+                        if (!$util.isInteger(message.tradeid))
+                            return "tradeid: integer expected";
+                    if (message.tradecode != null && message.hasOwnProperty("tradecode"))
+                        if (!$util.isString(message.tradecode))
+                            return "tradecode: string expected";
+                    if (message.indexbase != null && message.hasOwnProperty("indexbase"))
+                        if (!$util.isString(message.indexbase))
+                            return "indexbase: string expected";
+                    if (message.quote != null && message.hasOwnProperty("quote"))
+                        if (!$util.isString(message.quote))
+                            return "quote: string expected";
+                    if (message.lever != null && message.hasOwnProperty("lever"))
+                        if (!$util.isString(message.lever))
+                            return "lever: string expected";
+                    if (message.chg != null && message.hasOwnProperty("chg"))
+                        if (!$util.isString(message.chg))
+                            return "chg: string expected";
+                    if (message.last != null && message.hasOwnProperty("last"))
+                        if (!$util.isString(message.last))
+                            return "last: string expected";
+                    if (message.cny != null && message.hasOwnProperty("cny"))
+                        if (!$util.isString(message.cny))
+                            return "cny: string expected";
+                    if (message.createtime != null && message.hasOwnProperty("createtime"))
+                        if (!$util.isString(message.createtime))
+                            return "createtime: string expected";
+                    if (message.biztype != null && message.hasOwnProperty("biztype"))
+                        if (!$util.isString(message.biztype))
+                            return "biztype: string expected";
+                    if (message.contracttype != null && message.hasOwnProperty("contracttype"))
+                        if (!$util.isString(message.contracttype))
+                            return "contracttype: string expected";
+                    if (message.liquidationdate != null && message.hasOwnProperty("liquidationdate"))
+                        if (!$util.isInteger(message.liquidationdate) && !(message.liquidationdate && $util.isInteger(message.liquidationdate.low) && $util.isInteger(message.liquidationdate.high)))
+                            return "liquidationdate: integer|Long expected";
+                    if (message.movetime != null && message.hasOwnProperty("movetime"))
+                        if (!$util.isInteger(message.movetime) && !(message.movetime && $util.isInteger(message.movetime.low) && $util.isInteger(message.movetime.high)))
+                            return "movetime: integer|Long expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a MarketMonit message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.MarketMonit
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.MarketMonit} MarketMonit
+                 */
+                MarketMonit.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.MarketMonit)
+                        return object;
+                    var message = new $root.market.v2.trade.MarketMonit();
+                    if (object.id != null)
+                        if ($util.Long)
+                            (message.id = $util.Long.fromValue(object.id)).unsigned = false;
+                        else if (typeof object.id === "string")
+                            message.id = parseInt(object.id, 10);
+                        else if (typeof object.id === "number")
+                            message.id = object.id;
+                        else if (typeof object.id === "object")
+                            message.id = new $util.LongBits(object.id.low >>> 0, object.id.high >>> 0).toNumber();
+                    if (object.indexkey != null)
+                        message.indexkey = String(object.indexkey);
+                    if (object.scope != null)
+                        message.scope = object.scope | 0;
+                    if (object.tradeid != null)
+                        message.tradeid = object.tradeid | 0;
+                    if (object.tradecode != null)
+                        message.tradecode = String(object.tradecode);
+                    if (object.indexbase != null)
+                        message.indexbase = String(object.indexbase);
+                    if (object.quote != null)
+                        message.quote = String(object.quote);
+                    if (object.lever != null)
+                        message.lever = String(object.lever);
+                    if (object.chg != null)
+                        message.chg = String(object.chg);
+                    if (object.last != null)
+                        message.last = String(object.last);
+                    if (object.cny != null)
+                        message.cny = String(object.cny);
+                    if (object.createtime != null)
+                        message.createtime = String(object.createtime);
+                    if (object.biztype != null)
+                        message.biztype = String(object.biztype);
+                    if (object.contracttype != null)
+                        message.contracttype = String(object.contracttype);
+                    if (object.liquidationdate != null)
+                        if ($util.Long)
+                            (message.liquidationdate = $util.Long.fromValue(object.liquidationdate)).unsigned = false;
+                        else if (typeof object.liquidationdate === "string")
+                            message.liquidationdate = parseInt(object.liquidationdate, 10);
+                        else if (typeof object.liquidationdate === "number")
+                            message.liquidationdate = object.liquidationdate;
+                        else if (typeof object.liquidationdate === "object")
+                            message.liquidationdate = new $util.LongBits(object.liquidationdate.low >>> 0, object.liquidationdate.high >>> 0).toNumber();
+                    if (object.movetime != null)
+                        if ($util.Long)
+                            (message.movetime = $util.Long.fromValue(object.movetime)).unsigned = false;
+                        else if (typeof object.movetime === "string")
+                            message.movetime = parseInt(object.movetime, 10);
+                        else if (typeof object.movetime === "number")
+                            message.movetime = object.movetime;
+                        else if (typeof object.movetime === "object")
+                            message.movetime = new $util.LongBits(object.movetime.low >>> 0, object.movetime.high >>> 0).toNumber();
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a MarketMonit message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.MarketMonit
+                 * @static
+                 * @param {market.v2.trade.MarketMonit} message MarketMonit
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                MarketMonit.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        if ($util.Long) {
+                            var long = new $util.Long(0, 0, false);
+                            object.id = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                        } else
+                            object.id = options.longs === String ? "0" : 0;
+                        object.indexkey = "";
+                        object.scope = 0;
+                        object.tradeid = 0;
+                        object.tradecode = "";
+                        object.indexbase = "";
+                        object.quote = "";
+                        object.lever = "";
+                        object.chg = "";
+                        object.last = "";
+                        object.cny = "";
+                        object.createtime = "";
+                        object.biztype = "";
+                        object.contracttype = "";
+                        if ($util.Long) {
+                            var long = new $util.Long(0, 0, false);
+                            object.liquidationdate = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                        } else
+                            object.liquidationdate = options.longs === String ? "0" : 0;
+                        if ($util.Long) {
+                            var long = new $util.Long(0, 0, false);
+                            object.movetime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                        } else
+                            object.movetime = options.longs === String ? "0" : 0;
+                    }
+                    if (message.id != null && message.hasOwnProperty("id"))
+                        if (typeof message.id === "number")
+                            object.id = options.longs === String ? String(message.id) : message.id;
+                        else
+                            object.id = options.longs === String ? $util.Long.prototype.toString.call(message.id) : options.longs === Number ? new $util.LongBits(message.id.low >>> 0, message.id.high >>> 0).toNumber() : message.id;
+                    if (message.indexkey != null && message.hasOwnProperty("indexkey"))
+                        object.indexkey = message.indexkey;
+                    if (message.scope != null && message.hasOwnProperty("scope"))
+                        object.scope = message.scope;
+                    if (message.tradeid != null && message.hasOwnProperty("tradeid"))
+                        object.tradeid = message.tradeid;
+                    if (message.tradecode != null && message.hasOwnProperty("tradecode"))
+                        object.tradecode = message.tradecode;
+                    if (message.indexbase != null && message.hasOwnProperty("indexbase"))
+                        object.indexbase = message.indexbase;
+                    if (message.quote != null && message.hasOwnProperty("quote"))
+                        object.quote = message.quote;
+                    if (message.lever != null && message.hasOwnProperty("lever"))
+                        object.lever = message.lever;
+                    if (message.chg != null && message.hasOwnProperty("chg"))
+                        object.chg = message.chg;
+                    if (message.last != null && message.hasOwnProperty("last"))
+                        object.last = message.last;
+                    if (message.cny != null && message.hasOwnProperty("cny"))
+                        object.cny = message.cny;
+                    if (message.createtime != null && message.hasOwnProperty("createtime"))
+                        object.createtime = message.createtime;
+                    if (message.biztype != null && message.hasOwnProperty("biztype"))
+                        object.biztype = message.biztype;
+                    if (message.contracttype != null && message.hasOwnProperty("contracttype"))
+                        object.contracttype = message.contracttype;
+                    if (message.liquidationdate != null && message.hasOwnProperty("liquidationdate"))
+                        if (typeof message.liquidationdate === "number")
+                            object.liquidationdate = options.longs === String ? String(message.liquidationdate) : message.liquidationdate;
+                        else
+                            object.liquidationdate = options.longs === String ? $util.Long.prototype.toString.call(message.liquidationdate) : options.longs === Number ? new $util.LongBits(message.liquidationdate.low >>> 0, message.liquidationdate.high >>> 0).toNumber() : message.liquidationdate;
+                    if (message.movetime != null && message.hasOwnProperty("movetime"))
+                        if (typeof message.movetime === "number")
+                            object.movetime = options.longs === String ? String(message.movetime) : message.movetime;
+                        else
+                            object.movetime = options.longs === String ? $util.Long.prototype.toString.call(message.movetime) : options.longs === Number ? new $util.LongBits(message.movetime.low >>> 0, message.movetime.high >>> 0).toNumber() : message.movetime;
+                    return object;
+                };
+
+                /**
+                 * Converts this MarketMonit to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.MarketMonit
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                MarketMonit.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for MarketMonit
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.MarketMonit
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                MarketMonit.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.MarketMonit";
+                };
+
+                return MarketMonit;
+            })();
+
+            trade.MarginCrossAssetVO = (function() {
+
+                /**
+                 * Properties of a MarginCrossAssetVO.
+                 * @memberof market.v2.trade
+                 * @interface IMarginCrossAssetVO
+                 */
+
+                /**
+                 * Constructs a new MarginCrossAssetVO.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a MarginCrossAssetVO.
+                 * @implements IMarginCrossAssetVO
+                 * @constructor
+                 * @param {market.v2.trade.IMarginCrossAssetVO=} [properties] Properties to set
+                 */
+                function MarginCrossAssetVO(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Creates a new MarginCrossAssetVO instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.MarginCrossAssetVO
+                 * @static
+                 * @param {market.v2.trade.IMarginCrossAssetVO=} [properties] Properties to set
+                 * @returns {market.v2.trade.MarginCrossAssetVO} MarginCrossAssetVO instance
+                 */
+                MarginCrossAssetVO.create = function create(properties) {
+                    return new MarginCrossAssetVO(properties);
+                };
+
+                /**
+                 * Encodes the specified MarginCrossAssetVO message. Does not implicitly {@link market.v2.trade.MarginCrossAssetVO.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.MarginCrossAssetVO
+                 * @static
+                 * @param {market.v2.trade.IMarginCrossAssetVO} message MarginCrossAssetVO message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                MarginCrossAssetVO.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified MarginCrossAssetVO message, length delimited. Does not implicitly {@link market.v2.trade.MarginCrossAssetVO.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.MarginCrossAssetVO
+                 * @static
+                 * @param {market.v2.trade.IMarginCrossAssetVO} message MarginCrossAssetVO message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                MarginCrossAssetVO.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a MarginCrossAssetVO message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.MarginCrossAssetVO
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.MarginCrossAssetVO} MarginCrossAssetVO
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                MarginCrossAssetVO.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.MarginCrossAssetVO();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a MarginCrossAssetVO message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.MarginCrossAssetVO
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.MarginCrossAssetVO} MarginCrossAssetVO
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                MarginCrossAssetVO.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a MarginCrossAssetVO message.
+                 * @function verify
+                 * @memberof market.v2.trade.MarginCrossAssetVO
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                MarginCrossAssetVO.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a MarginCrossAssetVO message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.MarginCrossAssetVO
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.MarginCrossAssetVO} MarginCrossAssetVO
+                 */
+                MarginCrossAssetVO.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.MarginCrossAssetVO)
+                        return object;
+                    return new $root.market.v2.trade.MarginCrossAssetVO();
+                };
+
+                /**
+                 * Creates a plain object from a MarginCrossAssetVO message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.MarginCrossAssetVO
+                 * @static
+                 * @param {market.v2.trade.MarginCrossAssetVO} message MarginCrossAssetVO
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                MarginCrossAssetVO.toObject = function toObject() {
+                    return {};
+                };
+
+                /**
+                 * Converts this MarginCrossAssetVO to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.MarginCrossAssetVO
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                MarginCrossAssetVO.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for MarginCrossAssetVO
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.MarginCrossAssetVO
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                MarginCrossAssetVO.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.MarginCrossAssetVO";
+                };
+
+                return MarginCrossAssetVO;
+            })();
+
+            trade.MarginIsolatedAssetVO = (function() {
+
+                /**
+                 * Properties of a MarginIsolatedAssetVO.
+                 * @memberof market.v2.trade
+                 * @interface IMarginIsolatedAssetVO
+                 */
+
+                /**
+                 * Constructs a new MarginIsolatedAssetVO.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a MarginIsolatedAssetVO.
+                 * @implements IMarginIsolatedAssetVO
+                 * @constructor
+                 * @param {market.v2.trade.IMarginIsolatedAssetVO=} [properties] Properties to set
+                 */
+                function MarginIsolatedAssetVO(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Creates a new MarginIsolatedAssetVO instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.MarginIsolatedAssetVO
+                 * @static
+                 * @param {market.v2.trade.IMarginIsolatedAssetVO=} [properties] Properties to set
+                 * @returns {market.v2.trade.MarginIsolatedAssetVO} MarginIsolatedAssetVO instance
+                 */
+                MarginIsolatedAssetVO.create = function create(properties) {
+                    return new MarginIsolatedAssetVO(properties);
+                };
+
+                /**
+                 * Encodes the specified MarginIsolatedAssetVO message. Does not implicitly {@link market.v2.trade.MarginIsolatedAssetVO.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.MarginIsolatedAssetVO
+                 * @static
+                 * @param {market.v2.trade.IMarginIsolatedAssetVO} message MarginIsolatedAssetVO message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                MarginIsolatedAssetVO.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified MarginIsolatedAssetVO message, length delimited. Does not implicitly {@link market.v2.trade.MarginIsolatedAssetVO.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.MarginIsolatedAssetVO
+                 * @static
+                 * @param {market.v2.trade.IMarginIsolatedAssetVO} message MarginIsolatedAssetVO message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                MarginIsolatedAssetVO.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a MarginIsolatedAssetVO message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.MarginIsolatedAssetVO
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.MarginIsolatedAssetVO} MarginIsolatedAssetVO
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                MarginIsolatedAssetVO.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.MarginIsolatedAssetVO();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a MarginIsolatedAssetVO message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.MarginIsolatedAssetVO
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.MarginIsolatedAssetVO} MarginIsolatedAssetVO
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                MarginIsolatedAssetVO.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a MarginIsolatedAssetVO message.
+                 * @function verify
+                 * @memberof market.v2.trade.MarginIsolatedAssetVO
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                MarginIsolatedAssetVO.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a MarginIsolatedAssetVO message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.MarginIsolatedAssetVO
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.MarginIsolatedAssetVO} MarginIsolatedAssetVO
+                 */
+                MarginIsolatedAssetVO.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.MarginIsolatedAssetVO)
+                        return object;
+                    return new $root.market.v2.trade.MarginIsolatedAssetVO();
+                };
+
+                /**
+                 * Creates a plain object from a MarginIsolatedAssetVO message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.MarginIsolatedAssetVO
+                 * @static
+                 * @param {market.v2.trade.MarginIsolatedAssetVO} message MarginIsolatedAssetVO
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                MarginIsolatedAssetVO.toObject = function toObject() {
+                    return {};
+                };
+
+                /**
+                 * Converts this MarginIsolatedAssetVO to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.MarginIsolatedAssetVO
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                MarginIsolatedAssetVO.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for MarginIsolatedAssetVO
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.MarginIsolatedAssetVO
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                MarginIsolatedAssetVO.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.MarginIsolatedAssetVO";
+                };
+
+                return MarginIsolatedAssetVO;
+            })();
+
+            trade.NewListingPair = (function() {
+
+                /**
+                 * Properties of a NewListingPair.
+                 * @memberof market.v2.trade
+                 * @interface INewListingPair
+                 */
+
+                /**
+                 * Constructs a new NewListingPair.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a NewListingPair.
+                 * @implements INewListingPair
+                 * @constructor
+                 * @param {market.v2.trade.INewListingPair=} [properties] Properties to set
+                 */
+                function NewListingPair(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Creates a new NewListingPair instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.NewListingPair
+                 * @static
+                 * @param {market.v2.trade.INewListingPair=} [properties] Properties to set
+                 * @returns {market.v2.trade.NewListingPair} NewListingPair instance
+                 */
+                NewListingPair.create = function create(properties) {
+                    return new NewListingPair(properties);
+                };
+
+                /**
+                 * Encodes the specified NewListingPair message. Does not implicitly {@link market.v2.trade.NewListingPair.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.NewListingPair
+                 * @static
+                 * @param {market.v2.trade.INewListingPair} message NewListingPair message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                NewListingPair.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified NewListingPair message, length delimited. Does not implicitly {@link market.v2.trade.NewListingPair.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.NewListingPair
+                 * @static
+                 * @param {market.v2.trade.INewListingPair} message NewListingPair message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                NewListingPair.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a NewListingPair message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.NewListingPair
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.NewListingPair} NewListingPair
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                NewListingPair.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.NewListingPair();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a NewListingPair message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.NewListingPair
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.NewListingPair} NewListingPair
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                NewListingPair.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a NewListingPair message.
+                 * @function verify
+                 * @memberof market.v2.trade.NewListingPair
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                NewListingPair.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a NewListingPair message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.NewListingPair
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.NewListingPair} NewListingPair
+                 */
+                NewListingPair.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.NewListingPair)
+                        return object;
+                    return new $root.market.v2.trade.NewListingPair();
+                };
+
+                /**
+                 * Creates a plain object from a NewListingPair message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.NewListingPair
+                 * @static
+                 * @param {market.v2.trade.NewListingPair} message NewListingPair
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                NewListingPair.toObject = function toObject() {
+                    return {};
+                };
+
+                /**
+                 * Converts this NewListingPair to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.NewListingPair
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                NewListingPair.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for NewListingPair
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.NewListingPair
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                NewListingPair.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.NewListingPair";
+                };
+
+                return NewListingPair;
+            })();
+
+            trade.Chgdistributions = (function() {
+
+                /**
+                 * Properties of a Chgdistributions.
+                 * @memberof market.v2.trade
+                 * @interface IChgdistributions
+                 * @property {number|Long|null} [upnum] Chgdistributions upnum
+                 * @property {number|Long|null} [flatnum] Chgdistributions flatnum
+                 * @property {number|Long|null} [downnum] Chgdistributions downnum
+                 * @property {Array.<market.v2.trade.IDistributionPb>|null} [list] Chgdistributions list
+                 */
+
+                /**
+                 * Constructs a new Chgdistributions.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a Chgdistributions.
+                 * @implements IChgdistributions
+                 * @constructor
+                 * @param {market.v2.trade.IChgdistributions=} [properties] Properties to set
+                 */
+                function Chgdistributions(properties) {
+                    this.list = [];
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Chgdistributions upnum.
+                 * @member {number|Long} upnum
+                 * @memberof market.v2.trade.Chgdistributions
+                 * @instance
+                 */
+                Chgdistributions.prototype.upnum = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                /**
+                 * Chgdistributions flatnum.
+                 * @member {number|Long} flatnum
+                 * @memberof market.v2.trade.Chgdistributions
+                 * @instance
+                 */
+                Chgdistributions.prototype.flatnum = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                /**
+                 * Chgdistributions downnum.
+                 * @member {number|Long} downnum
+                 * @memberof market.v2.trade.Chgdistributions
+                 * @instance
+                 */
+                Chgdistributions.prototype.downnum = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                /**
+                 * Chgdistributions list.
+                 * @member {Array.<market.v2.trade.IDistributionPb>} list
+                 * @memberof market.v2.trade.Chgdistributions
+                 * @instance
+                 */
+                Chgdistributions.prototype.list = $util.emptyArray;
+
+                /**
+                 * Creates a new Chgdistributions instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.Chgdistributions
+                 * @static
+                 * @param {market.v2.trade.IChgdistributions=} [properties] Properties to set
+                 * @returns {market.v2.trade.Chgdistributions} Chgdistributions instance
+                 */
+                Chgdistributions.create = function create(properties) {
+                    return new Chgdistributions(properties);
+                };
+
+                /**
+                 * Encodes the specified Chgdistributions message. Does not implicitly {@link market.v2.trade.Chgdistributions.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.Chgdistributions
+                 * @static
+                 * @param {market.v2.trade.IChgdistributions} message Chgdistributions message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Chgdistributions.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.upnum != null && Object.hasOwnProperty.call(message, "upnum"))
+                        writer.uint32(/* id 1, wireType 0 =*/8).int64(message.upnum);
+                    if (message.flatnum != null && Object.hasOwnProperty.call(message, "flatnum"))
+                        writer.uint32(/* id 2, wireType 0 =*/16).int64(message.flatnum);
+                    if (message.downnum != null && Object.hasOwnProperty.call(message, "downnum"))
+                        writer.uint32(/* id 3, wireType 0 =*/24).int64(message.downnum);
+                    if (message.list != null && message.list.length)
+                        for (var i = 0; i < message.list.length; ++i)
+                            $root.market.v2.trade.DistributionPb.encode(message.list[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified Chgdistributions message, length delimited. Does not implicitly {@link market.v2.trade.Chgdistributions.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.Chgdistributions
+                 * @static
+                 * @param {market.v2.trade.IChgdistributions} message Chgdistributions message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Chgdistributions.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a Chgdistributions message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.Chgdistributions
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.Chgdistributions} Chgdistributions
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Chgdistributions.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.Chgdistributions();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.upnum = reader.int64();
+                                break;
+                            }
+                        case 2: {
+                                message.flatnum = reader.int64();
+                                break;
+                            }
+                        case 3: {
+                                message.downnum = reader.int64();
+                                break;
+                            }
+                        case 4: {
+                                if (!(message.list && message.list.length))
+                                    message.list = [];
+                                message.list.push($root.market.v2.trade.DistributionPb.decode(reader, reader.uint32()));
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a Chgdistributions message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.Chgdistributions
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.Chgdistributions} Chgdistributions
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Chgdistributions.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a Chgdistributions message.
+                 * @function verify
+                 * @memberof market.v2.trade.Chgdistributions
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                Chgdistributions.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.upnum != null && message.hasOwnProperty("upnum"))
+                        if (!$util.isInteger(message.upnum) && !(message.upnum && $util.isInteger(message.upnum.low) && $util.isInteger(message.upnum.high)))
+                            return "upnum: integer|Long expected";
+                    if (message.flatnum != null && message.hasOwnProperty("flatnum"))
+                        if (!$util.isInteger(message.flatnum) && !(message.flatnum && $util.isInteger(message.flatnum.low) && $util.isInteger(message.flatnum.high)))
+                            return "flatnum: integer|Long expected";
+                    if (message.downnum != null && message.hasOwnProperty("downnum"))
+                        if (!$util.isInteger(message.downnum) && !(message.downnum && $util.isInteger(message.downnum.low) && $util.isInteger(message.downnum.high)))
+                            return "downnum: integer|Long expected";
+                    if (message.list != null && message.hasOwnProperty("list")) {
+                        if (!Array.isArray(message.list))
+                            return "list: array expected";
+                        for (var i = 0; i < message.list.length; ++i) {
+                            var error = $root.market.v2.trade.DistributionPb.verify(message.list[i]);
+                            if (error)
+                                return "list." + error;
+                        }
+                    }
+                    return null;
+                };
+
+                /**
+                 * Creates a Chgdistributions message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.Chgdistributions
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.Chgdistributions} Chgdistributions
+                 */
+                Chgdistributions.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.Chgdistributions)
+                        return object;
+                    var message = new $root.market.v2.trade.Chgdistributions();
+                    if (object.upnum != null)
+                        if ($util.Long)
+                            (message.upnum = $util.Long.fromValue(object.upnum)).unsigned = false;
+                        else if (typeof object.upnum === "string")
+                            message.upnum = parseInt(object.upnum, 10);
+                        else if (typeof object.upnum === "number")
+                            message.upnum = object.upnum;
+                        else if (typeof object.upnum === "object")
+                            message.upnum = new $util.LongBits(object.upnum.low >>> 0, object.upnum.high >>> 0).toNumber();
+                    if (object.flatnum != null)
+                        if ($util.Long)
+                            (message.flatnum = $util.Long.fromValue(object.flatnum)).unsigned = false;
+                        else if (typeof object.flatnum === "string")
+                            message.flatnum = parseInt(object.flatnum, 10);
+                        else if (typeof object.flatnum === "number")
+                            message.flatnum = object.flatnum;
+                        else if (typeof object.flatnum === "object")
+                            message.flatnum = new $util.LongBits(object.flatnum.low >>> 0, object.flatnum.high >>> 0).toNumber();
+                    if (object.downnum != null)
+                        if ($util.Long)
+                            (message.downnum = $util.Long.fromValue(object.downnum)).unsigned = false;
+                        else if (typeof object.downnum === "string")
+                            message.downnum = parseInt(object.downnum, 10);
+                        else if (typeof object.downnum === "number")
+                            message.downnum = object.downnum;
+                        else if (typeof object.downnum === "object")
+                            message.downnum = new $util.LongBits(object.downnum.low >>> 0, object.downnum.high >>> 0).toNumber();
+                    if (object.list) {
+                        if (!Array.isArray(object.list))
+                            throw TypeError(".market.v2.trade.Chgdistributions.list: array expected");
+                        message.list = [];
+                        for (var i = 0; i < object.list.length; ++i) {
+                            if (typeof object.list[i] !== "object")
+                                throw TypeError(".market.v2.trade.Chgdistributions.list: object expected");
+                            message.list[i] = $root.market.v2.trade.DistributionPb.fromObject(object.list[i]);
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a Chgdistributions message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.Chgdistributions
+                 * @static
+                 * @param {market.v2.trade.Chgdistributions} message Chgdistributions
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                Chgdistributions.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.arrays || options.defaults)
+                        object.list = [];
+                    if (options.defaults) {
+                        if ($util.Long) {
+                            var long = new $util.Long(0, 0, false);
+                            object.upnum = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                        } else
+                            object.upnum = options.longs === String ? "0" : 0;
+                        if ($util.Long) {
+                            var long = new $util.Long(0, 0, false);
+                            object.flatnum = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                        } else
+                            object.flatnum = options.longs === String ? "0" : 0;
+                        if ($util.Long) {
+                            var long = new $util.Long(0, 0, false);
+                            object.downnum = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                        } else
+                            object.downnum = options.longs === String ? "0" : 0;
+                    }
+                    if (message.upnum != null && message.hasOwnProperty("upnum"))
+                        if (typeof message.upnum === "number")
+                            object.upnum = options.longs === String ? String(message.upnum) : message.upnum;
+                        else
+                            object.upnum = options.longs === String ? $util.Long.prototype.toString.call(message.upnum) : options.longs === Number ? new $util.LongBits(message.upnum.low >>> 0, message.upnum.high >>> 0).toNumber() : message.upnum;
+                    if (message.flatnum != null && message.hasOwnProperty("flatnum"))
+                        if (typeof message.flatnum === "number")
+                            object.flatnum = options.longs === String ? String(message.flatnum) : message.flatnum;
+                        else
+                            object.flatnum = options.longs === String ? $util.Long.prototype.toString.call(message.flatnum) : options.longs === Number ? new $util.LongBits(message.flatnum.low >>> 0, message.flatnum.high >>> 0).toNumber() : message.flatnum;
+                    if (message.downnum != null && message.hasOwnProperty("downnum"))
+                        if (typeof message.downnum === "number")
+                            object.downnum = options.longs === String ? String(message.downnum) : message.downnum;
+                        else
+                            object.downnum = options.longs === String ? $util.Long.prototype.toString.call(message.downnum) : options.longs === Number ? new $util.LongBits(message.downnum.low >>> 0, message.downnum.high >>> 0).toNumber() : message.downnum;
+                    if (message.list && message.list.length) {
+                        object.list = [];
+                        for (var j = 0; j < message.list.length; ++j)
+                            object.list[j] = $root.market.v2.trade.DistributionPb.toObject(message.list[j], options);
+                    }
+                    return object;
+                };
+
+                /**
+                 * Converts this Chgdistributions to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.Chgdistributions
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                Chgdistributions.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for Chgdistributions
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.Chgdistributions
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                Chgdistributions.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.Chgdistributions";
+                };
+
+                return Chgdistributions;
+            })();
+
+            trade.DistributionPb = (function() {
+
+                /**
+                 * Properties of a DistributionPb.
+                 * @memberof market.v2.trade
+                 * @interface IDistributionPb
+                 * @property {string|null} [name] DistributionPb name
+                 * @property {number|null} [chgType] DistributionPb chgType
+                 * @property {number|Long|null} [num] DistributionPb num
+                 */
+
+                /**
+                 * Constructs a new DistributionPb.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a DistributionPb.
+                 * @implements IDistributionPb
+                 * @constructor
+                 * @param {market.v2.trade.IDistributionPb=} [properties] Properties to set
+                 */
+                function DistributionPb(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * DistributionPb name.
+                 * @member {string} name
+                 * @memberof market.v2.trade.DistributionPb
+                 * @instance
+                 */
+                DistributionPb.prototype.name = "";
+
+                /**
+                 * DistributionPb chgType.
+                 * @member {number} chgType
+                 * @memberof market.v2.trade.DistributionPb
+                 * @instance
+                 */
+                DistributionPb.prototype.chgType = 0;
+
+                /**
+                 * DistributionPb num.
+                 * @member {number|Long} num
+                 * @memberof market.v2.trade.DistributionPb
+                 * @instance
+                 */
+                DistributionPb.prototype.num = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                /**
+                 * Creates a new DistributionPb instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.DistributionPb
+                 * @static
+                 * @param {market.v2.trade.IDistributionPb=} [properties] Properties to set
+                 * @returns {market.v2.trade.DistributionPb} DistributionPb instance
+                 */
+                DistributionPb.create = function create(properties) {
+                    return new DistributionPb(properties);
+                };
+
+                /**
+                 * Encodes the specified DistributionPb message. Does not implicitly {@link market.v2.trade.DistributionPb.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.DistributionPb
+                 * @static
+                 * @param {market.v2.trade.IDistributionPb} message DistributionPb message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                DistributionPb.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.name != null && Object.hasOwnProperty.call(message, "name"))
+                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
+                    if (message.chgType != null && Object.hasOwnProperty.call(message, "chgType"))
+                        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.chgType);
+                    if (message.num != null && Object.hasOwnProperty.call(message, "num"))
+                        writer.uint32(/* id 3, wireType 0 =*/24).int64(message.num);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified DistributionPb message, length delimited. Does not implicitly {@link market.v2.trade.DistributionPb.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.DistributionPb
+                 * @static
+                 * @param {market.v2.trade.IDistributionPb} message DistributionPb message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                DistributionPb.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a DistributionPb message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.DistributionPb
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.DistributionPb} DistributionPb
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                DistributionPb.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.DistributionPb();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.name = reader.string();
+                                break;
+                            }
+                        case 2: {
+                                message.chgType = reader.int32();
+                                break;
+                            }
+                        case 3: {
+                                message.num = reader.int64();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a DistributionPb message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.DistributionPb
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.DistributionPb} DistributionPb
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                DistributionPb.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a DistributionPb message.
+                 * @function verify
+                 * @memberof market.v2.trade.DistributionPb
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                DistributionPb.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.name != null && message.hasOwnProperty("name"))
+                        if (!$util.isString(message.name))
+                            return "name: string expected";
+                    if (message.chgType != null && message.hasOwnProperty("chgType"))
+                        if (!$util.isInteger(message.chgType))
+                            return "chgType: integer expected";
+                    if (message.num != null && message.hasOwnProperty("num"))
+                        if (!$util.isInteger(message.num) && !(message.num && $util.isInteger(message.num.low) && $util.isInteger(message.num.high)))
+                            return "num: integer|Long expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a DistributionPb message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.DistributionPb
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.DistributionPb} DistributionPb
+                 */
+                DistributionPb.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.DistributionPb)
+                        return object;
+                    var message = new $root.market.v2.trade.DistributionPb();
+                    if (object.name != null)
+                        message.name = String(object.name);
+                    if (object.chgType != null)
+                        message.chgType = object.chgType | 0;
+                    if (object.num != null)
+                        if ($util.Long)
+                            (message.num = $util.Long.fromValue(object.num)).unsigned = false;
+                        else if (typeof object.num === "string")
+                            message.num = parseInt(object.num, 10);
+                        else if (typeof object.num === "number")
+                            message.num = object.num;
+                        else if (typeof object.num === "object")
+                            message.num = new $util.LongBits(object.num.low >>> 0, object.num.high >>> 0).toNumber();
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a DistributionPb message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.DistributionPb
+                 * @static
+                 * @param {market.v2.trade.DistributionPb} message DistributionPb
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                DistributionPb.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.name = "";
+                        object.chgType = 0;
+                        if ($util.Long) {
+                            var long = new $util.Long(0, 0, false);
+                            object.num = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                        } else
+                            object.num = options.longs === String ? "0" : 0;
+                    }
+                    if (message.name != null && message.hasOwnProperty("name"))
+                        object.name = message.name;
+                    if (message.chgType != null && message.hasOwnProperty("chgType"))
+                        object.chgType = message.chgType;
+                    if (message.num != null && message.hasOwnProperty("num"))
+                        if (typeof message.num === "number")
+                            object.num = options.longs === String ? String(message.num) : message.num;
+                        else
+                            object.num = options.longs === String ? $util.Long.prototype.toString.call(message.num) : options.longs === Number ? new $util.LongBits(message.num.low >>> 0, message.num.high >>> 0).toNumber() : message.num;
+                    return object;
+                };
+
+                /**
+                 * Converts this DistributionPb to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.DistributionPb
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                DistributionPb.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for DistributionPb
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.DistributionPb
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                DistributionPb.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.DistributionPb";
+                };
+
+                return DistributionPb;
+            })();
+
+            trade.MarketZones = (function() {
+
+                /**
+                 * Properties of a MarketZones.
+                 * @memberof market.v2.trade
+                 * @interface IMarketZones
+                 */
+
+                /**
+                 * Constructs a new MarketZones.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a MarketZones.
+                 * @implements IMarketZones
+                 * @constructor
+                 * @param {market.v2.trade.IMarketZones=} [properties] Properties to set
+                 */
+                function MarketZones(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Creates a new MarketZones instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.MarketZones
+                 * @static
+                 * @param {market.v2.trade.IMarketZones=} [properties] Properties to set
+                 * @returns {market.v2.trade.MarketZones} MarketZones instance
+                 */
+                MarketZones.create = function create(properties) {
+                    return new MarketZones(properties);
+                };
+
+                /**
+                 * Encodes the specified MarketZones message. Does not implicitly {@link market.v2.trade.MarketZones.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.MarketZones
+                 * @static
+                 * @param {market.v2.trade.IMarketZones} message MarketZones message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                MarketZones.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified MarketZones message, length delimited. Does not implicitly {@link market.v2.trade.MarketZones.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.MarketZones
+                 * @static
+                 * @param {market.v2.trade.IMarketZones} message MarketZones message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                MarketZones.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a MarketZones message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.MarketZones
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.MarketZones} MarketZones
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                MarketZones.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.MarketZones();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a MarketZones message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.MarketZones
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.MarketZones} MarketZones
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                MarketZones.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a MarketZones message.
+                 * @function verify
+                 * @memberof market.v2.trade.MarketZones
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                MarketZones.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a MarketZones message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.MarketZones
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.MarketZones} MarketZones
+                 */
+                MarketZones.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.MarketZones)
+                        return object;
+                    return new $root.market.v2.trade.MarketZones();
+                };
+
+                /**
+                 * Creates a plain object from a MarketZones message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.MarketZones
+                 * @static
+                 * @param {market.v2.trade.MarketZones} message MarketZones
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                MarketZones.toObject = function toObject() {
+                    return {};
+                };
+
+                /**
+                 * Converts this MarketZones to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.MarketZones
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                MarketZones.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for MarketZones
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.MarketZones
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                MarketZones.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.MarketZones";
+                };
+
+                return MarketZones;
+            })();
+
+            trade.KlineOrders = (function() {
+
+                /**
+                 * Properties of a KlineOrders.
+                 * @memberof market.v2.trade
+                 * @interface IKlineOrders
+                 */
+
+                /**
+                 * Constructs a new KlineOrders.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a KlineOrders.
+                 * @implements IKlineOrders
+                 * @constructor
+                 * @param {market.v2.trade.IKlineOrders=} [properties] Properties to set
+                 */
+                function KlineOrders(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Creates a new KlineOrders instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.KlineOrders
+                 * @static
+                 * @param {market.v2.trade.IKlineOrders=} [properties] Properties to set
+                 * @returns {market.v2.trade.KlineOrders} KlineOrders instance
+                 */
+                KlineOrders.create = function create(properties) {
+                    return new KlineOrders(properties);
+                };
+
+                /**
+                 * Encodes the specified KlineOrders message. Does not implicitly {@link market.v2.trade.KlineOrders.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.KlineOrders
+                 * @static
+                 * @param {market.v2.trade.IKlineOrders} message KlineOrders message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                KlineOrders.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified KlineOrders message, length delimited. Does not implicitly {@link market.v2.trade.KlineOrders.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.KlineOrders
+                 * @static
+                 * @param {market.v2.trade.IKlineOrders} message KlineOrders message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                KlineOrders.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a KlineOrders message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.KlineOrders
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.KlineOrders} KlineOrders
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                KlineOrders.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.KlineOrders();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a KlineOrders message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.KlineOrders
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.KlineOrders} KlineOrders
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                KlineOrders.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a KlineOrders message.
+                 * @function verify
+                 * @memberof market.v2.trade.KlineOrders
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                KlineOrders.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a KlineOrders message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.KlineOrders
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.KlineOrders} KlineOrders
+                 */
+                KlineOrders.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.KlineOrders)
+                        return object;
+                    return new $root.market.v2.trade.KlineOrders();
+                };
+
+                /**
+                 * Creates a plain object from a KlineOrders message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.KlineOrders
+                 * @static
+                 * @param {market.v2.trade.KlineOrders} message KlineOrders
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                KlineOrders.toObject = function toObject() {
+                    return {};
+                };
+
+                /**
+                 * Converts this KlineOrders to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.KlineOrders
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                KlineOrders.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for KlineOrders
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.KlineOrders
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                KlineOrders.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.KlineOrders";
+                };
+
+                return KlineOrders;
+            })();
+
+            trade.NotificationPush = (function() {
+
+                /**
+                 * Properties of a NotificationPush.
+                 * @memberof market.v2.trade
+                 * @interface INotificationPush
+                 * @property {number|null} [userid] NotificationPush userid
+                 * @property {string|null} [title] NotificationPush title
+                 * @property {string|null} [body] NotificationPush body
+                 * @property {number|null} [badge] NotificationPush badge
+                 * @property {string|null} [group] NotificationPush group
+                 * @property {Object.<string,string>|null} [extrasMap] NotificationPush extrasMap
+                 */
+
+                /**
+                 * Constructs a new NotificationPush.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a NotificationPush.
+                 * @implements INotificationPush
+                 * @constructor
+                 * @param {market.v2.trade.INotificationPush=} [properties] Properties to set
+                 */
+                function NotificationPush(properties) {
+                    this.extrasMap = {};
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * NotificationPush userid.
+                 * @member {number} userid
+                 * @memberof market.v2.trade.NotificationPush
+                 * @instance
+                 */
+                NotificationPush.prototype.userid = 0;
+
+                /**
+                 * NotificationPush title.
+                 * @member {string} title
+                 * @memberof market.v2.trade.NotificationPush
+                 * @instance
+                 */
+                NotificationPush.prototype.title = "";
+
+                /**
+                 * NotificationPush body.
+                 * @member {string} body
+                 * @memberof market.v2.trade.NotificationPush
+                 * @instance
+                 */
+                NotificationPush.prototype.body = "";
+
+                /**
+                 * NotificationPush badge.
+                 * @member {number} badge
+                 * @memberof market.v2.trade.NotificationPush
+                 * @instance
+                 */
+                NotificationPush.prototype.badge = 0;
+
+                /**
+                 * NotificationPush group.
+                 * @member {string} group
+                 * @memberof market.v2.trade.NotificationPush
+                 * @instance
+                 */
+                NotificationPush.prototype.group = "";
+
+                /**
+                 * NotificationPush extrasMap.
+                 * @member {Object.<string,string>} extrasMap
+                 * @memberof market.v2.trade.NotificationPush
+                 * @instance
+                 */
+                NotificationPush.prototype.extrasMap = $util.emptyObject;
+
+                /**
+                 * Creates a new NotificationPush instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.NotificationPush
+                 * @static
+                 * @param {market.v2.trade.INotificationPush=} [properties] Properties to set
+                 * @returns {market.v2.trade.NotificationPush} NotificationPush instance
+                 */
+                NotificationPush.create = function create(properties) {
+                    return new NotificationPush(properties);
+                };
+
+                /**
+                 * Encodes the specified NotificationPush message. Does not implicitly {@link market.v2.trade.NotificationPush.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.NotificationPush
+                 * @static
+                 * @param {market.v2.trade.INotificationPush} message NotificationPush message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                NotificationPush.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.userid != null && Object.hasOwnProperty.call(message, "userid"))
+                        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.userid);
+                    if (message.title != null && Object.hasOwnProperty.call(message, "title"))
+                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.title);
+                    if (message.body != null && Object.hasOwnProperty.call(message, "body"))
+                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.body);
+                    if (message.badge != null && Object.hasOwnProperty.call(message, "badge"))
+                        writer.uint32(/* id 4, wireType 0 =*/32).int32(message.badge);
+                    if (message.group != null && Object.hasOwnProperty.call(message, "group"))
+                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.group);
+                    if (message.extrasMap != null && Object.hasOwnProperty.call(message, "extrasMap"))
+                        for (var keys = Object.keys(message.extrasMap), i = 0; i < keys.length; ++i)
+                            writer.uint32(/* id 6, wireType 2 =*/50).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.extrasMap[keys[i]]).ldelim();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified NotificationPush message, length delimited. Does not implicitly {@link market.v2.trade.NotificationPush.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.NotificationPush
+                 * @static
+                 * @param {market.v2.trade.INotificationPush} message NotificationPush message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                NotificationPush.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a NotificationPush message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.NotificationPush
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.NotificationPush} NotificationPush
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                NotificationPush.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.NotificationPush(), key, value;
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.userid = reader.int32();
+                                break;
+                            }
+                        case 2: {
+                                message.title = reader.string();
+                                break;
+                            }
+                        case 3: {
+                                message.body = reader.string();
+                                break;
+                            }
+                        case 4: {
+                                message.badge = reader.int32();
+                                break;
+                            }
+                        case 5: {
+                                message.group = reader.string();
+                                break;
+                            }
+                        case 6: {
+                                if (message.extrasMap === $util.emptyObject)
+                                    message.extrasMap = {};
+                                var end2 = reader.uint32() + reader.pos;
+                                key = "";
+                                value = "";
+                                while (reader.pos < end2) {
+                                    var tag2 = reader.uint32();
+                                    switch (tag2 >>> 3) {
+                                    case 1:
+                                        key = reader.string();
+                                        break;
+                                    case 2:
+                                        value = reader.string();
+                                        break;
+                                    default:
+                                        reader.skipType(tag2 & 7);
+                                        break;
+                                    }
+                                }
+                                message.extrasMap[key] = value;
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a NotificationPush message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.NotificationPush
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.NotificationPush} NotificationPush
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                NotificationPush.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a NotificationPush message.
+                 * @function verify
+                 * @memberof market.v2.trade.NotificationPush
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                NotificationPush.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.userid != null && message.hasOwnProperty("userid"))
+                        if (!$util.isInteger(message.userid))
+                            return "userid: integer expected";
+                    if (message.title != null && message.hasOwnProperty("title"))
+                        if (!$util.isString(message.title))
+                            return "title: string expected";
+                    if (message.body != null && message.hasOwnProperty("body"))
+                        if (!$util.isString(message.body))
+                            return "body: string expected";
+                    if (message.badge != null && message.hasOwnProperty("badge"))
+                        if (!$util.isInteger(message.badge))
+                            return "badge: integer expected";
+                    if (message.group != null && message.hasOwnProperty("group"))
+                        if (!$util.isString(message.group))
+                            return "group: string expected";
+                    if (message.extrasMap != null && message.hasOwnProperty("extrasMap")) {
+                        if (!$util.isObject(message.extrasMap))
+                            return "extrasMap: object expected";
+                        var key = Object.keys(message.extrasMap);
+                        for (var i = 0; i < key.length; ++i)
+                            if (!$util.isString(message.extrasMap[key[i]]))
+                                return "extrasMap: string{k:string} expected";
+                    }
+                    return null;
+                };
+
+                /**
+                 * Creates a NotificationPush message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.NotificationPush
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.NotificationPush} NotificationPush
+                 */
+                NotificationPush.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.NotificationPush)
+                        return object;
+                    var message = new $root.market.v2.trade.NotificationPush();
+                    if (object.userid != null)
+                        message.userid = object.userid | 0;
+                    if (object.title != null)
+                        message.title = String(object.title);
+                    if (object.body != null)
+                        message.body = String(object.body);
+                    if (object.badge != null)
+                        message.badge = object.badge | 0;
+                    if (object.group != null)
+                        message.group = String(object.group);
+                    if (object.extrasMap) {
+                        if (typeof object.extrasMap !== "object")
+                            throw TypeError(".market.v2.trade.NotificationPush.extrasMap: object expected");
+                        message.extrasMap = {};
+                        for (var keys = Object.keys(object.extrasMap), i = 0; i < keys.length; ++i)
+                            message.extrasMap[keys[i]] = String(object.extrasMap[keys[i]]);
+                    }
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a NotificationPush message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.NotificationPush
+                 * @static
+                 * @param {market.v2.trade.NotificationPush} message NotificationPush
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                NotificationPush.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.objects || options.defaults)
+                        object.extrasMap = {};
+                    if (options.defaults) {
+                        object.userid = 0;
+                        object.title = "";
+                        object.body = "";
+                        object.badge = 0;
+                        object.group = "";
+                    }
+                    if (message.userid != null && message.hasOwnProperty("userid"))
+                        object.userid = message.userid;
+                    if (message.title != null && message.hasOwnProperty("title"))
+                        object.title = message.title;
+                    if (message.body != null && message.hasOwnProperty("body"))
+                        object.body = message.body;
+                    if (message.badge != null && message.hasOwnProperty("badge"))
+                        object.badge = message.badge;
+                    if (message.group != null && message.hasOwnProperty("group"))
+                        object.group = message.group;
+                    var keys2;
+                    if (message.extrasMap && (keys2 = Object.keys(message.extrasMap)).length) {
+                        object.extrasMap = {};
+                        for (var j = 0; j < keys2.length; ++j)
+                            object.extrasMap[keys2[j]] = message.extrasMap[keys2[j]];
+                    }
+                    return object;
+                };
+
+                /**
+                 * Converts this NotificationPush to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.NotificationPush
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                NotificationPush.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for NotificationPush
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.NotificationPush
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                NotificationPush.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.NotificationPush";
+                };
+
+                return NotificationPush;
+            })();
+
+            trade.TradeHotListing = (function() {
+
+                /**
+                 * Properties of a TradeHotListing.
+                 * @memberof market.v2.trade
+                 * @interface ITradeHotListing
+                 */
+
+                /**
+                 * Constructs a new TradeHotListing.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a TradeHotListing.
+                 * @implements ITradeHotListing
+                 * @constructor
+                 * @param {market.v2.trade.ITradeHotListing=} [properties] Properties to set
+                 */
+                function TradeHotListing(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Creates a new TradeHotListing instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.TradeHotListing
+                 * @static
+                 * @param {market.v2.trade.ITradeHotListing=} [properties] Properties to set
+                 * @returns {market.v2.trade.TradeHotListing} TradeHotListing instance
+                 */
+                TradeHotListing.create = function create(properties) {
+                    return new TradeHotListing(properties);
+                };
+
+                /**
+                 * Encodes the specified TradeHotListing message. Does not implicitly {@link market.v2.trade.TradeHotListing.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.TradeHotListing
+                 * @static
+                 * @param {market.v2.trade.ITradeHotListing} message TradeHotListing message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                TradeHotListing.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified TradeHotListing message, length delimited. Does not implicitly {@link market.v2.trade.TradeHotListing.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.TradeHotListing
+                 * @static
+                 * @param {market.v2.trade.ITradeHotListing} message TradeHotListing message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                TradeHotListing.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a TradeHotListing message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.TradeHotListing
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.TradeHotListing} TradeHotListing
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                TradeHotListing.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.TradeHotListing();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a TradeHotListing message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.TradeHotListing
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.TradeHotListing} TradeHotListing
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                TradeHotListing.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a TradeHotListing message.
+                 * @function verify
+                 * @memberof market.v2.trade.TradeHotListing
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                TradeHotListing.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a TradeHotListing message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.TradeHotListing
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.TradeHotListing} TradeHotListing
+                 */
+                TradeHotListing.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.TradeHotListing)
+                        return object;
+                    return new $root.market.v2.trade.TradeHotListing();
+                };
+
+                /**
+                 * Creates a plain object from a TradeHotListing message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.TradeHotListing
+                 * @static
+                 * @param {market.v2.trade.TradeHotListing} message TradeHotListing
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                TradeHotListing.toObject = function toObject() {
+                    return {};
+                };
+
+                /**
+                 * Converts this TradeHotListing to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.TradeHotListing
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                TradeHotListing.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for TradeHotListing
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.TradeHotListing
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                TradeHotListing.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.TradeHotListing";
+                };
+
+                return TradeHotListing;
+            })();
+
+            trade.CtcGoingOrderNum = (function() {
+
+                /**
+                 * Properties of a CtcGoingOrderNum.
+                 * @memberof market.v2.trade
+                 * @interface ICtcGoingOrderNum
+                 * @property {number|null} [ordernum] CtcGoingOrderNum ordernum
+                 */
+
+                /**
+                 * Constructs a new CtcGoingOrderNum.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a CtcGoingOrderNum.
+                 * @implements ICtcGoingOrderNum
+                 * @constructor
+                 * @param {market.v2.trade.ICtcGoingOrderNum=} [properties] Properties to set
+                 */
+                function CtcGoingOrderNum(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * CtcGoingOrderNum ordernum.
+                 * @member {number} ordernum
+                 * @memberof market.v2.trade.CtcGoingOrderNum
+                 * @instance
+                 */
+                CtcGoingOrderNum.prototype.ordernum = 0;
+
+                /**
+                 * Creates a new CtcGoingOrderNum instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.CtcGoingOrderNum
+                 * @static
+                 * @param {market.v2.trade.ICtcGoingOrderNum=} [properties] Properties to set
+                 * @returns {market.v2.trade.CtcGoingOrderNum} CtcGoingOrderNum instance
+                 */
+                CtcGoingOrderNum.create = function create(properties) {
+                    return new CtcGoingOrderNum(properties);
+                };
+
+                /**
+                 * Encodes the specified CtcGoingOrderNum message. Does not implicitly {@link market.v2.trade.CtcGoingOrderNum.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.CtcGoingOrderNum
+                 * @static
+                 * @param {market.v2.trade.ICtcGoingOrderNum} message CtcGoingOrderNum message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                CtcGoingOrderNum.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.ordernum != null && Object.hasOwnProperty.call(message, "ordernum"))
+                        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ordernum);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified CtcGoingOrderNum message, length delimited. Does not implicitly {@link market.v2.trade.CtcGoingOrderNum.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.CtcGoingOrderNum
+                 * @static
+                 * @param {market.v2.trade.ICtcGoingOrderNum} message CtcGoingOrderNum message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                CtcGoingOrderNum.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a CtcGoingOrderNum message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.CtcGoingOrderNum
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.CtcGoingOrderNum} CtcGoingOrderNum
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                CtcGoingOrderNum.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.CtcGoingOrderNum();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.ordernum = reader.int32();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a CtcGoingOrderNum message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.CtcGoingOrderNum
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.CtcGoingOrderNum} CtcGoingOrderNum
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                CtcGoingOrderNum.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a CtcGoingOrderNum message.
+                 * @function verify
+                 * @memberof market.v2.trade.CtcGoingOrderNum
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                CtcGoingOrderNum.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.ordernum != null && message.hasOwnProperty("ordernum"))
+                        if (!$util.isInteger(message.ordernum))
+                            return "ordernum: integer expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a CtcGoingOrderNum message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.CtcGoingOrderNum
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.CtcGoingOrderNum} CtcGoingOrderNum
+                 */
+                CtcGoingOrderNum.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.CtcGoingOrderNum)
+                        return object;
+                    var message = new $root.market.v2.trade.CtcGoingOrderNum();
+                    if (object.ordernum != null)
+                        message.ordernum = object.ordernum | 0;
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a CtcGoingOrderNum message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.CtcGoingOrderNum
+                 * @static
+                 * @param {market.v2.trade.CtcGoingOrderNum} message CtcGoingOrderNum
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                CtcGoingOrderNum.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults)
+                        object.ordernum = 0;
+                    if (message.ordernum != null && message.hasOwnProperty("ordernum"))
+                        object.ordernum = message.ordernum;
+                    return object;
+                };
+
+                /**
+                 * Converts this CtcGoingOrderNum to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.CtcGoingOrderNum
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                CtcGoingOrderNum.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for CtcGoingOrderNum
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.CtcGoingOrderNum
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                CtcGoingOrderNum.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.CtcGoingOrderNum";
+                };
+
+                return CtcGoingOrderNum;
+            })();
+
+            trade.MultiChange = (function() {
+
+                /**
+                 * Properties of a MultiChange.
+                 * @memberof market.v2.trade
+                 * @interface IMultiChange
+                 */
+
+                /**
+                 * Constructs a new MultiChange.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a MultiChange.
+                 * @implements IMultiChange
+                 * @constructor
+                 * @param {market.v2.trade.IMultiChange=} [properties] Properties to set
+                 */
+                function MultiChange(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Creates a new MultiChange instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.MultiChange
+                 * @static
+                 * @param {market.v2.trade.IMultiChange=} [properties] Properties to set
+                 * @returns {market.v2.trade.MultiChange} MultiChange instance
+                 */
+                MultiChange.create = function create(properties) {
+                    return new MultiChange(properties);
+                };
+
+                /**
+                 * Encodes the specified MultiChange message. Does not implicitly {@link market.v2.trade.MultiChange.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.MultiChange
+                 * @static
+                 * @param {market.v2.trade.IMultiChange} message MultiChange message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                MultiChange.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified MultiChange message, length delimited. Does not implicitly {@link market.v2.trade.MultiChange.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.MultiChange
+                 * @static
+                 * @param {market.v2.trade.IMultiChange} message MultiChange message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                MultiChange.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a MultiChange message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.MultiChange
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.MultiChange} MultiChange
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                MultiChange.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.MultiChange();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a MultiChange message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.MultiChange
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.MultiChange} MultiChange
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                MultiChange.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a MultiChange message.
+                 * @function verify
+                 * @memberof market.v2.trade.MultiChange
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                MultiChange.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a MultiChange message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.MultiChange
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.MultiChange} MultiChange
+                 */
+                MultiChange.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.MultiChange)
+                        return object;
+                    return new $root.market.v2.trade.MultiChange();
+                };
+
+                /**
+                 * Creates a plain object from a MultiChange message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.MultiChange
+                 * @static
+                 * @param {market.v2.trade.MultiChange} message MultiChange
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                MultiChange.toObject = function toObject() {
+                    return {};
+                };
+
+                /**
+                 * Converts this MultiChange to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.MultiChange
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                MultiChange.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for MultiChange
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.MultiChange
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                MultiChange.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.MultiChange";
+                };
+
+                return MultiChange;
+            })();
+
+            trade.Heatmap = (function() {
+
+                /**
+                 * Properties of a Heatmap.
+                 * @memberof market.v2.trade
+                 * @interface IHeatmap
+                 */
+
+                /**
+                 * Constructs a new Heatmap.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a Heatmap.
+                 * @implements IHeatmap
+                 * @constructor
+                 * @param {market.v2.trade.IHeatmap=} [properties] Properties to set
+                 */
+                function Heatmap(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Creates a new Heatmap instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.Heatmap
+                 * @static
+                 * @param {market.v2.trade.IHeatmap=} [properties] Properties to set
+                 * @returns {market.v2.trade.Heatmap} Heatmap instance
+                 */
+                Heatmap.create = function create(properties) {
+                    return new Heatmap(properties);
+                };
+
+                /**
+                 * Encodes the specified Heatmap message. Does not implicitly {@link market.v2.trade.Heatmap.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.Heatmap
+                 * @static
+                 * @param {market.v2.trade.IHeatmap} message Heatmap message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Heatmap.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified Heatmap message, length delimited. Does not implicitly {@link market.v2.trade.Heatmap.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.Heatmap
+                 * @static
+                 * @param {market.v2.trade.IHeatmap} message Heatmap message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Heatmap.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a Heatmap message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.Heatmap
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.Heatmap} Heatmap
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Heatmap.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.Heatmap();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a Heatmap message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.Heatmap
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.Heatmap} Heatmap
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Heatmap.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a Heatmap message.
+                 * @function verify
+                 * @memberof market.v2.trade.Heatmap
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                Heatmap.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a Heatmap message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.Heatmap
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.Heatmap} Heatmap
+                 */
+                Heatmap.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.Heatmap)
+                        return object;
+                    return new $root.market.v2.trade.Heatmap();
+                };
+
+                /**
+                 * Creates a plain object from a Heatmap message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.Heatmap
+                 * @static
+                 * @param {market.v2.trade.Heatmap} message Heatmap
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                Heatmap.toObject = function toObject() {
+                    return {};
+                };
+
+                /**
+                 * Converts this Heatmap to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.Heatmap
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                Heatmap.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for Heatmap
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.Heatmap
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                Heatmap.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.Heatmap";
+                };
+
+                return Heatmap;
+            })();
+
+            trade.DownPair = (function() {
+
+                /**
+                 * Properties of a DownPair.
+                 * @memberof market.v2.trade
+                 * @interface IDownPair
+                 */
+
+                /**
+                 * Constructs a new DownPair.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a DownPair.
+                 * @implements IDownPair
+                 * @constructor
+                 * @param {market.v2.trade.IDownPair=} [properties] Properties to set
+                 */
+                function DownPair(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Creates a new DownPair instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.DownPair
+                 * @static
+                 * @param {market.v2.trade.IDownPair=} [properties] Properties to set
+                 * @returns {market.v2.trade.DownPair} DownPair instance
+                 */
+                DownPair.create = function create(properties) {
+                    return new DownPair(properties);
+                };
+
+                /**
+                 * Encodes the specified DownPair message. Does not implicitly {@link market.v2.trade.DownPair.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.DownPair
+                 * @static
+                 * @param {market.v2.trade.IDownPair} message DownPair message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                DownPair.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified DownPair message, length delimited. Does not implicitly {@link market.v2.trade.DownPair.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.DownPair
+                 * @static
+                 * @param {market.v2.trade.IDownPair} message DownPair message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                DownPair.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a DownPair message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.DownPair
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.DownPair} DownPair
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                DownPair.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.DownPair();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a DownPair message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.DownPair
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.DownPair} DownPair
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                DownPair.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a DownPair message.
+                 * @function verify
+                 * @memberof market.v2.trade.DownPair
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                DownPair.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a DownPair message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.DownPair
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.DownPair} DownPair
+                 */
+                DownPair.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.DownPair)
+                        return object;
+                    return new $root.market.v2.trade.DownPair();
+                };
+
+                /**
+                 * Creates a plain object from a DownPair message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.DownPair
+                 * @static
+                 * @param {market.v2.trade.DownPair} message DownPair
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                DownPair.toObject = function toObject() {
+                    return {};
+                };
+
+                /**
+                 * Converts this DownPair to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.DownPair
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                DownPair.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for DownPair
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.DownPair
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                DownPair.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.DownPair";
+                };
+
+                return DownPair;
+            })();
+
+            trade.HeatVol = (function() {
+
+                /**
+                 * Properties of a HeatVol.
+                 * @memberof market.v2.trade
+                 * @interface IHeatVol
+                 */
+
+                /**
+                 * Constructs a new HeatVol.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a HeatVol.
+                 * @implements IHeatVol
+                 * @constructor
+                 * @param {market.v2.trade.IHeatVol=} [properties] Properties to set
+                 */
+                function HeatVol(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Creates a new HeatVol instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.HeatVol
+                 * @static
+                 * @param {market.v2.trade.IHeatVol=} [properties] Properties to set
+                 * @returns {market.v2.trade.HeatVol} HeatVol instance
+                 */
+                HeatVol.create = function create(properties) {
+                    return new HeatVol(properties);
+                };
+
+                /**
+                 * Encodes the specified HeatVol message. Does not implicitly {@link market.v2.trade.HeatVol.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.HeatVol
+                 * @static
+                 * @param {market.v2.trade.IHeatVol} message HeatVol message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                HeatVol.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified HeatVol message, length delimited. Does not implicitly {@link market.v2.trade.HeatVol.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.HeatVol
+                 * @static
+                 * @param {market.v2.trade.IHeatVol} message HeatVol message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                HeatVol.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a HeatVol message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.HeatVol
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.HeatVol} HeatVol
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                HeatVol.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.HeatVol();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a HeatVol message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.HeatVol
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.HeatVol} HeatVol
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                HeatVol.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a HeatVol message.
+                 * @function verify
+                 * @memberof market.v2.trade.HeatVol
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                HeatVol.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a HeatVol message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.HeatVol
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.HeatVol} HeatVol
+                 */
+                HeatVol.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.HeatVol)
+                        return object;
+                    return new $root.market.v2.trade.HeatVol();
+                };
+
+                /**
+                 * Creates a plain object from a HeatVol message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.HeatVol
+                 * @static
+                 * @param {market.v2.trade.HeatVol} message HeatVol
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                HeatVol.toObject = function toObject() {
+                    return {};
+                };
+
+                /**
+                 * Converts this HeatVol to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.HeatVol
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                HeatVol.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for HeatVol
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.HeatVol
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                HeatVol.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.HeatVol";
+                };
+
+                return HeatVol;
+            })();
+
+            trade.CurrencyRate = (function() {
+
+                /**
+                 * Properties of a CurrencyRate.
+                 * @memberof market.v2.trade
+                 * @interface ICurrencyRate
+                 */
+
+                /**
+                 * Constructs a new CurrencyRate.
+                 * @memberof market.v2.trade
+                 * @classdesc Represents a CurrencyRate.
+                 * @implements ICurrencyRate
+                 * @constructor
+                 * @param {market.v2.trade.ICurrencyRate=} [properties] Properties to set
+                 */
+                function CurrencyRate(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Creates a new CurrencyRate instance using the specified properties.
+                 * @function create
+                 * @memberof market.v2.trade.CurrencyRate
+                 * @static
+                 * @param {market.v2.trade.ICurrencyRate=} [properties] Properties to set
+                 * @returns {market.v2.trade.CurrencyRate} CurrencyRate instance
+                 */
+                CurrencyRate.create = function create(properties) {
+                    return new CurrencyRate(properties);
+                };
+
+                /**
+                 * Encodes the specified CurrencyRate message. Does not implicitly {@link market.v2.trade.CurrencyRate.verify|verify} messages.
+                 * @function encode
+                 * @memberof market.v2.trade.CurrencyRate
+                 * @static
+                 * @param {market.v2.trade.ICurrencyRate} message CurrencyRate message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                CurrencyRate.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified CurrencyRate message, length delimited. Does not implicitly {@link market.v2.trade.CurrencyRate.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof market.v2.trade.CurrencyRate
+                 * @static
+                 * @param {market.v2.trade.ICurrencyRate} message CurrencyRate message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                CurrencyRate.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a CurrencyRate message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof market.v2.trade.CurrencyRate
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {market.v2.trade.CurrencyRate} CurrencyRate
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                CurrencyRate.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.market.v2.trade.CurrencyRate();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a CurrencyRate message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof market.v2.trade.CurrencyRate
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {market.v2.trade.CurrencyRate} CurrencyRate
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                CurrencyRate.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a CurrencyRate message.
+                 * @function verify
+                 * @memberof market.v2.trade.CurrencyRate
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                CurrencyRate.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a CurrencyRate message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof market.v2.trade.CurrencyRate
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {market.v2.trade.CurrencyRate} CurrencyRate
+                 */
+                CurrencyRate.fromObject = function fromObject(object) {
+                    if (object instanceof $root.market.v2.trade.CurrencyRate)
+                        return object;
+                    return new $root.market.v2.trade.CurrencyRate();
+                };
+
+                /**
+                 * Creates a plain object from a CurrencyRate message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof market.v2.trade.CurrencyRate
+                 * @static
+                 * @param {market.v2.trade.CurrencyRate} message CurrencyRate
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                CurrencyRate.toObject = function toObject() {
+                    return {};
+                };
+
+                /**
+                 * Converts this CurrencyRate to JSON.
+                 * @function toJSON
+                 * @memberof market.v2.trade.CurrencyRate
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                CurrencyRate.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for CurrencyRate
+                 * @function getTypeUrl
+                 * @memberof market.v2.trade.CurrencyRate
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                CurrencyRate.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/market.v2.trade.CurrencyRate";
+                };
+
+                return CurrencyRate;
+            })();
+
+            return trade;
+        })();
+
+        return v2;
+    })();
+
+    return market;
+})();
+
+module.exports = $root;

+ 858 - 0
client/hotconi/proto/market.v2.trade.json

@@ -0,0 +1,858 @@
+{
+  "options": {
+    "syntax": "proto3"
+  },
+  "nested": {
+    "market": {
+      "nested": {
+        "v2": {
+          "nested": {
+            "trade": {
+              "nested": {
+                "Response": {
+                  "fields": {
+                    "code": {
+                      "type": "int32",
+                      "id": 1
+                    },
+                    "msg": {
+                      "type": "string",
+                      "id": 2
+                    },
+                    "status": {
+                      "type": "string",
+                      "id": 3
+                    },
+                    "ts": {
+                      "type": "int64",
+                      "id": 4
+                    },
+                    "ch": {
+                      "type": "string",
+                      "id": 5
+                    },
+                    "klinelist": {
+                      "type": "KlineList",
+                      "id": 21
+                    },
+                    "tradedepthvo": {
+                      "type": "TradeDepthVO",
+                      "id": 22
+                    },
+                    "tradedetaillist": {
+                      "type": "TradeDetailList",
+                      "id": 23
+                    },
+                    "tradeareapair": {
+                      "type": "TradeAreaPair",
+                      "id": 24
+                    },
+                    "mainpair": {
+                      "type": "MainPair",
+                      "id": 25
+                    },
+                    "recommendpair": {
+                      "type": "RecommendPair",
+                      "id": 26
+                    },
+                    "uppair": {
+                      "type": "UpPair",
+                      "id": 27
+                    },
+                    "amtpair": {
+                      "type": "AmtPair",
+                      "id": 28
+                    },
+                    "starpair": {
+                      "type": "StarPair",
+                      "id": 29
+                    },
+                    "tradetickervo": {
+                      "type": "TradeTickerVO",
+                      "id": 30
+                    },
+                    "entrustvo": {
+                      "type": "EntrustVO",
+                      "id": 31
+                    },
+                    "userassetbalance": {
+                      "type": "UserAssetBalance",
+                      "id": 32
+                    },
+                    "markettickerlist": {
+                      "type": "MarketTickerList",
+                      "id": 33
+                    },
+                    "margincrossassetvo": {
+                      "type": "MarginCrossAssetVO",
+                      "id": 35
+                    },
+                    "marginisolatedassetvo": {
+                      "type": "MarginIsolatedAssetVO",
+                      "id": 36
+                    },
+                    "newlistingpair": {
+                      "type": "NewListingPair",
+                      "id": 37
+                    },
+                    "chgdistributions": {
+                      "type": "Chgdistributions",
+                      "id": 38
+                    },
+                    "marketzones": {
+                      "type": "MarketZones",
+                      "id": 39
+                    },
+                    "klineorders": {
+                      "type": "KlineOrders",
+                      "id": 40
+                    },
+                    "notificationpush": {
+                      "type": "NotificationPush",
+                      "id": 41
+                    },
+                    "tradehotlisting": {
+                      "type": "TradeHotListing",
+                      "id": 42
+                    },
+                    "ctcgoingordernum": {
+                      "type": "CtcGoingOrderNum",
+                      "id": 43
+                    },
+                    "multichange": {
+                      "type": "MultiChange",
+                      "id": 44
+                    },
+                    "heatmap": {
+                      "type": "Heatmap",
+                      "id": 45
+                    },
+                    "downpair": {
+                      "type": "DownPair",
+                      "id": 46
+                    },
+                    "heatvol": {
+                      "type": "HeatVol",
+                      "id": 47
+                    },
+                    "currencyrate": {
+                      "type": "CurrencyRate",
+                      "id": 48
+                    },
+                    "marketmonit": {
+                      "type": "MarketMonit",
+                      "id": 34
+                    }
+                  }
+                },
+                "KlineList": {
+                  "fields": {}
+                },
+                "TradeDepthVO": {
+                  "fields": {
+                    "bids": {
+                      "type": "Bids",
+                      "id": 1
+                    },
+                    "asks": {
+                      "type": "Asks",
+                      "id": 2
+                    },
+                    "last": {
+                      "type": "string",
+                      "id": 3
+                    },
+                    "open": {
+                      "type": "string",
+                      "id": 4
+                    },
+                    "cny": {
+                      "type": "string",
+                      "id": 5
+                    },
+                    "netvalue": {
+                      "type": "string",
+                      "id": 6
+                    },
+                    "buyorsellcnyprice": {
+                      "type": "string",
+                      "id": 7
+                    },
+                    "isfiatconvert": {
+                      "type": "bool",
+                      "id": 8
+                    },
+                    "isrisktip": {
+                      "type": "bool",
+                      "id": 9
+                    }
+                  },
+                  "nested": {
+                    "Bids": {
+                      "fields": {}
+                    },
+                    "Asks": {
+                      "fields": {
+                        "askdataList": {
+                          "rule": "repeated",
+                          "type": "AskData",
+                          "id": 1
+                        }
+                      },
+                      "nested": {
+                        "AskData": {
+                          "fields": {}
+                        }
+                      }
+                    }
+                  }
+                },
+                "TradeDetailList": {
+                  "fields": {
+                    "list": {
+                      "rule": "repeated",
+                      "type": "TradeDetailInfo",
+                      "id": 1
+                    }
+                  }
+                },
+                "TradeDetailInfo": {
+                  "fields": {
+                    "tradeid": {
+                      "type": "int64",
+                      "id": 1
+                    },
+                    "amount": {
+                      "type": "string",
+                      "id": 2
+                    },
+                    "ts": {
+                      "type": "string",
+                      "id": 3
+                    },
+                    "price": {
+                      "type": "string",
+                      "id": 4
+                    },
+                    "direction": {
+                      "type": "string",
+                      "id": 5
+                    }
+                  }
+                },
+                "TradeAreaPair": {
+                  "fields": {
+                    "listList": {
+                      "rule": "repeated",
+                      "type": "TradeAreaPairInfo",
+                      "id": 1
+                    }
+                  }
+                },
+                "TradeAreaPairInfo": {
+                  "fields": {
+                    "tradeid": {
+                      "type": "int32",
+                      "id": 1
+                    },
+                    "cny": {
+                      "type": "string",
+                      "id": 2
+                    },
+                    "buy": {
+                      "type": "string",
+                      "id": 3
+                    },
+                    "lever": {
+                      "type": "string",
+                      "id": 4
+                    },
+                    "sell": {
+                      "type": "string",
+                      "id": 5
+                    },
+                    "last": {
+                      "type": "string",
+                      "id": 6
+                    },
+                    "volume": {
+                      "type": "string",
+                      "id": 7
+                    },
+                    "change": {
+                      "type": "string",
+                      "id": 8
+                    },
+                    "high": {
+                      "type": "string",
+                      "id": 9
+                    },
+                    "low": {
+                      "type": "string",
+                      "id": 10
+                    },
+                    "isopen": {
+                      "type": "string",
+                      "id": 11
+                    },
+                    "open": {
+                      "type": "string",
+                      "id": 12
+                    },
+                    "amount": {
+                      "type": "string",
+                      "id": 13
+                    },
+                    "isfiatconvert": {
+                      "type": "bool",
+                      "id": 14
+                    }
+                  }
+                },
+                "MainPair": {
+                  "fields": {
+                    "listList": {
+                      "rule": "repeated",
+                      "type": "MainPairInfo",
+                      "id": 1
+                    }
+                  }
+                },
+                "MainPairInfo": {
+                  "fields": {
+                    "tradeId": {
+                      "type": "int32",
+                      "id": 1
+                    },
+                    "cny": {
+                      "type": "string",
+                      "id": 2
+                    },
+                    "totalamount": {
+                      "type": "string",
+                      "id": 3
+                    },
+                    "last": {
+                      "type": "string",
+                      "id": 4
+                    },
+                    "volume": {
+                      "type": "string",
+                      "id": 5
+                    },
+                    "change": {
+                      "type": "string",
+                      "id": 6
+                    }
+                  }
+                },
+                "RecommendPair": {
+                  "fields": {
+                    "listList": {
+                      "rule": "repeated",
+                      "type": "RecommendPairInfo",
+                      "id": 1
+                    }
+                  }
+                },
+                "RecommendPairInfo": {
+                  "fields": {
+                    "tradeId": {
+                      "type": "int32",
+                      "id": 1
+                    },
+                    "cny": {
+                      "type": "string",
+                      "id": 2
+                    },
+                    "totalamount": {
+                      "type": "string",
+                      "id": 3
+                    },
+                    "last": {
+                      "type": "string",
+                      "id": 4
+                    },
+                    "volume": {
+                      "type": "string",
+                      "id": 5
+                    },
+                    "change": {
+                      "type": "string",
+                      "id": 6
+                    }
+                  }
+                },
+                "UpPair": {
+                  "fields": {}
+                },
+                "AmtPair": {
+                  "fields": {}
+                },
+                "StarPair": {
+                  "fields": {}
+                },
+                "TradeTickerVO": {
+                  "fields": {
+                    "tradeid": {
+                      "type": "int32",
+                      "id": 1
+                    },
+                    "high": {
+                      "type": "string",
+                      "id": 2
+                    },
+                    "open": {
+                      "type": "string",
+                      "id": 3
+                    },
+                    "low": {
+                      "type": "string",
+                      "id": 4
+                    },
+                    "close": {
+                      "type": "string",
+                      "id": 5
+                    },
+                    "volume": {
+                      "type": "string",
+                      "id": 6
+                    },
+                    "change": {
+                      "type": "string",
+                      "id": 7
+                    },
+                    "cny": {
+                      "type": "string",
+                      "id": 8
+                    },
+                    "last": {
+                      "type": "string",
+                      "id": 9
+                    },
+                    "netvalue": {
+                      "type": "string",
+                      "id": 10
+                    },
+                    "amount": {
+                      "type": "string",
+                      "id": 11
+                    },
+                    "isfiatconvert": {
+                      "type": "bool",
+                      "id": 12
+                    }
+                  }
+                },
+                "EntrustVO": {
+                  "fields": {
+                    "id": {
+                      "type": "int64",
+                      "id": 1
+                    },
+                    "tradeid": {
+                      "type": "int32",
+                      "id": 2
+                    },
+                    "entrusttime": {
+                      "type": "int64",
+                      "id": 3
+                    },
+                    "buycoinshortname": {
+                      "type": "string",
+                      "id": 4
+                    },
+                    "sellcoinshortname": {
+                      "type": "string",
+                      "id": 5
+                    },
+                    "type": {
+                      "type": "int32",
+                      "id": 6
+                    },
+                    "direction": {
+                      "type": "int32",
+                      "id": 7
+                    },
+                    "matchtype": {
+                      "type": "int32",
+                      "id": 8
+                    },
+                    "pricetype": {
+                      "type": "string",
+                      "id": 9
+                    },
+                    "entrustprice": {
+                      "type": "string",
+                      "id": 10
+                    },
+                    "count": {
+                      "type": "string",
+                      "id": 11
+                    },
+                    "successcount": {
+                      "type": "string",
+                      "id": 12
+                    },
+                    "averageprice": {
+                      "type": "string",
+                      "id": 13
+                    },
+                    "status": {
+                      "type": "int32",
+                      "id": 14
+                    },
+                    "history": {
+                      "type": "bool",
+                      "id": 15
+                    },
+                    "pushversion": {
+                      "type": "int64",
+                      "id": 16
+                    },
+                    "remove": {
+                      "type": "bool",
+                      "id": 17
+                    },
+                    "amount": {
+                      "type": "string",
+                      "id": 18
+                    },
+                    "marketunit": {
+                      "type": "string",
+                      "id": 19
+                    },
+                    "funds": {
+                      "type": "string",
+                      "id": 20
+                    },
+                    "leftfunds": {
+                      "type": "string",
+                      "id": 21
+                    },
+                    "triggerprice": {
+                      "type": "string",
+                      "id": 22
+                    },
+                    "marginmode": {
+                      "type": "string",
+                      "id": 23
+                    },
+                    "margintrademode": {
+                      "type": "string",
+                      "id": 24
+                    },
+                    "forcedliquidation": {
+                      "type": "bool",
+                      "id": 25
+                    },
+                    "remark": {
+                      "type": "string",
+                      "id": 26
+                    },
+                    "successamount": {
+                      "type": "string",
+                      "id": 27
+                    },
+                    "tradearea": {
+                      "type": "int32",
+                      "id": 28
+                    },
+                    "fee": {
+                      "type": "string",
+                      "id": 29
+                    },
+                    "trailingdelta": {
+                      "type": "string",
+                      "id": 30
+                    },
+                    "activationprice": {
+                      "type": "string",
+                      "id": 31
+                    },
+                    "activationtime": {
+                      "type": "int64",
+                      "id": 32
+                    },
+                    "triggersign": {
+                      "type": "int32",
+                      "id": 33
+                    },
+                    "orderid": {
+                      "type": "string",
+                      "id": 34
+                    }
+                  }
+                },
+                "UserAssetBalance": {
+                  "fields": {
+                    "usdtassets": {
+                      "type": "string",
+                      "id": 1
+                    },
+                    "usdtavailableassets": {
+                      "type": "string",
+                      "id": 2
+                    },
+                    "totalassets": {
+                      "type": "string",
+                      "id": 3
+                    },
+                    "btcassets": {
+                      "type": "string",
+                      "id": 4
+                    },
+                    "userwalletlist": {
+                      "rule": "repeated",
+                      "type": "UserWallet",
+                      "id": 5
+                    }
+                  }
+                },
+                "UserWallet": {
+                  "fields": {
+                    "listList": {
+                      "rule": "repeated",
+                      "type": "UserWalletPairInfo",
+                      "id": 1
+                    }
+                  }
+                },
+                "UserWalletPairInfo": {
+                  "fields": {
+                    "coinid": {
+                      "type": "int32",
+                      "id": 1
+                    },
+                    "totalAmount": {
+                      "type": "string",
+                      "id": 2
+                    },
+                    "total": {
+                      "type": "string",
+                      "id": 3
+                    },
+                    "frozen": {
+                      "type": "string",
+                      "id": 4
+                    },
+                    "borrow": {
+                      "type": "string",
+                      "id": 5
+                    },
+                    "coinname": {
+                      "type": "string",
+                      "id": 6
+                    },
+                    "shortName": {
+                      "type": "string",
+                      "id": 7
+                    },
+                    "withdraw": {
+                      "type": "bool",
+                      "id": 8
+                    },
+                    "recharge": {
+                      "type": "bool",
+                      "id": 9
+                    },
+                    "usdtprice": {
+                      "type": "string",
+                      "id": 10
+                    },
+                    "price": {
+                      "type": "string",
+                      "id": 11
+                    },
+                    "sortid": {
+                      "type": "int32",
+                      "id": 12
+                    }
+                  }
+                },
+                "MarketTickerList": {
+                  "fields": {}
+                },
+                "MarketMonit": {
+                  "fields": {
+                    "id": {
+                      "type": "int64",
+                      "id": 1
+                    },
+                    "indexkey": {
+                      "type": "string",
+                      "id": 2
+                    },
+                    "scope": {
+                      "type": "int32",
+                      "id": 3
+                    },
+                    "tradeid": {
+                      "type": "int32",
+                      "id": 4
+                    },
+                    "tradecode": {
+                      "type": "string",
+                      "id": 5
+                    },
+                    "indexbase": {
+                      "type": "string",
+                      "id": 6
+                    },
+                    "quote": {
+                      "type": "string",
+                      "id": 7
+                    },
+                    "lever": {
+                      "type": "string",
+                      "id": 8
+                    },
+                    "chg": {
+                      "type": "string",
+                      "id": 9
+                    },
+                    "last": {
+                      "type": "string",
+                      "id": 10
+                    },
+                    "cny": {
+                      "type": "string",
+                      "id": 11
+                    },
+                    "createtime": {
+                      "type": "string",
+                      "id": 12
+                    },
+                    "biztype": {
+                      "type": "string",
+                      "id": 13
+                    },
+                    "contracttype": {
+                      "type": "string",
+                      "id": 14
+                    },
+                    "liquidationdate": {
+                      "type": "int64",
+                      "id": 15
+                    },
+                    "movetime": {
+                      "type": "int64",
+                      "id": 16
+                    }
+                  }
+                },
+                "MarginCrossAssetVO": {
+                  "fields": {}
+                },
+                "MarginIsolatedAssetVO": {
+                  "fields": {}
+                },
+                "NewListingPair": {
+                  "fields": {}
+                },
+                "Chgdistributions": {
+                  "fields": {
+                    "upnum": {
+                      "type": "int64",
+                      "id": 1
+                    },
+                    "flatnum": {
+                      "type": "int64",
+                      "id": 2
+                    },
+                    "downnum": {
+                      "type": "int64",
+                      "id": 3
+                    },
+                    "list": {
+                      "rule": "repeated",
+                      "type": "DistributionPb",
+                      "id": 4
+                    }
+                  }
+                },
+                "DistributionPb": {
+                  "fields": {
+                    "name": {
+                      "type": "string",
+                      "id": 1
+                    },
+                    "chgType": {
+                      "type": "int32",
+                      "id": 2
+                    },
+                    "num": {
+                      "type": "int64",
+                      "id": 3
+                    }
+                  }
+                },
+                "MarketZones": {
+                  "fields": {}
+                },
+                "KlineOrders": {
+                  "fields": {}
+                },
+                "NotificationPush": {
+                  "fields": {
+                    "userid": {
+                      "type": "int32",
+                      "id": 1
+                    },
+                    "title": {
+                      "type": "string",
+                      "id": 2
+                    },
+                    "body": {
+                      "type": "string",
+                      "id": 3
+                    },
+                    "badge": {
+                      "type": "int32",
+                      "id": 4
+                    },
+                    "group": {
+                      "type": "string",
+                      "id": 5
+                    },
+                    "extrasMap": {
+                      "keyType": "string",
+                      "type": "string",
+                      "id": 6
+                    }
+                  }
+                },
+                "TradeHotListing": {
+                  "fields": {}
+                },
+                "CtcGoingOrderNum": {
+                  "fields": {
+                    "ordernum": {
+                      "type": "int32",
+                      "id": 1
+                    }
+                  }
+                },
+                "MultiChange": {
+                  "fields": {}
+                },
+                "Heatmap": {
+                  "fields": {}
+                },
+                "DownPair": {
+                  "fields": {}
+                },
+                "HeatVol": {
+                  "fields": {}
+                },
+                "CurrencyRate": {
+                  "fields": {}
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}

+ 1006 - 0
client/hotconi/proto/type.googleapis.com.CandlesPbMsg.js

@@ -0,0 +1,1006 @@
+/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/
+"use strict";
+
+var $protobuf = require("protobufjs/minimal");
+
+// Common aliases
+var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;
+
+// Exported root namespace
+var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});
+
+$root.type = (function() {
+
+    /**
+     * Namespace type.
+     * @exports type
+     * @namespace
+     */
+    var type = {};
+
+    type.googleapis = (function() {
+
+        /**
+         * Namespace googleapis.
+         * @memberof type
+         * @namespace
+         */
+        var googleapis = {};
+
+        googleapis.com = (function() {
+
+            /**
+             * Namespace com.
+             * @memberof type.googleapis
+             * @namespace
+             */
+            var com = {};
+
+            com.Response = (function() {
+
+                /**
+                 * Properties of a Response.
+                 * @memberof type.googleapis.com
+                 * @interface IResponse
+                 * @property {string|null} [biz] Response biz
+                 * @property {string|null} [type] Response type
+                 * @property {string|null} [base] Response base
+                 * @property {string|null} [quote] Response quote
+                 * @property {string|null} [contractcode] Response contractcode
+                 * @property {string|null} [granularity] Response granularity
+                 * @property {type.googleapis.com.IData|null} [data] Response data
+                 * @property {number|null} [env] Response env
+                 */
+
+                /**
+                 * Constructs a new Response.
+                 * @memberof type.googleapis.com
+                 * @classdesc Represents a Response.
+                 * @implements IResponse
+                 * @constructor
+                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
+                 */
+                function Response(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Response biz.
+                 * @member {string} biz
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.biz = "";
+
+                /**
+                 * Response type.
+                 * @member {string} type
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.type = "";
+
+                /**
+                 * Response base.
+                 * @member {string} base
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.base = "";
+
+                /**
+                 * Response quote.
+                 * @member {string} quote
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.quote = "";
+
+                /**
+                 * Response contractcode.
+                 * @member {string} contractcode
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.contractcode = "";
+
+                /**
+                 * Response granularity.
+                 * @member {string} granularity
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.granularity = "";
+
+                /**
+                 * Response data.
+                 * @member {type.googleapis.com.IData|null|undefined} data
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.data = null;
+
+                /**
+                 * Response env.
+                 * @member {number} env
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.env = 0;
+
+                /**
+                 * Creates a new Response instance using the specified properties.
+                 * @function create
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
+                 * @returns {type.googleapis.com.Response} Response instance
+                 */
+                Response.create = function create(properties) {
+                    return new Response(properties);
+                };
+
+                /**
+                 * Encodes the specified Response message. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
+                 * @function encode
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Response.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.biz != null && Object.hasOwnProperty.call(message, "biz"))
+                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.biz);
+                    if (message.type != null && Object.hasOwnProperty.call(message, "type"))
+                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.type);
+                    if (message.base != null && Object.hasOwnProperty.call(message, "base"))
+                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.base);
+                    if (message.quote != null && Object.hasOwnProperty.call(message, "quote"))
+                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.quote);
+                    if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
+                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.contractcode);
+                    if (message.granularity != null && Object.hasOwnProperty.call(message, "granularity"))
+                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.granularity);
+                    if (message.data != null && Object.hasOwnProperty.call(message, "data"))
+                        $root.type.googleapis.com.Data.encode(message.data, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
+                    if (message.env != null && Object.hasOwnProperty.call(message, "env"))
+                        writer.uint32(/* id 8, wireType 0 =*/64).int32(message.env);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified Response message, length delimited. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Response.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a Response message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {type.googleapis.com.Response} Response
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Response.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.type.googleapis.com.Response();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.biz = reader.string();
+                                break;
+                            }
+                        case 2: {
+                                message.type = reader.string();
+                                break;
+                            }
+                        case 3: {
+                                message.base = reader.string();
+                                break;
+                            }
+                        case 4: {
+                                message.quote = reader.string();
+                                break;
+                            }
+                        case 5: {
+                                message.contractcode = reader.string();
+                                break;
+                            }
+                        case 6: {
+                                message.granularity = reader.string();
+                                break;
+                            }
+                        case 7: {
+                                message.data = $root.type.googleapis.com.Data.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 8: {
+                                message.env = reader.int32();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a Response message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {type.googleapis.com.Response} Response
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Response.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a Response message.
+                 * @function verify
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                Response.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.biz != null && message.hasOwnProperty("biz"))
+                        if (!$util.isString(message.biz))
+                            return "biz: string expected";
+                    if (message.type != null && message.hasOwnProperty("type"))
+                        if (!$util.isString(message.type))
+                            return "type: string expected";
+                    if (message.base != null && message.hasOwnProperty("base"))
+                        if (!$util.isString(message.base))
+                            return "base: string expected";
+                    if (message.quote != null && message.hasOwnProperty("quote"))
+                        if (!$util.isString(message.quote))
+                            return "quote: string expected";
+                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                        if (!$util.isString(message.contractcode))
+                            return "contractcode: string expected";
+                    if (message.granularity != null && message.hasOwnProperty("granularity"))
+                        if (!$util.isString(message.granularity))
+                            return "granularity: string expected";
+                    if (message.data != null && message.hasOwnProperty("data")) {
+                        var error = $root.type.googleapis.com.Data.verify(message.data);
+                        if (error)
+                            return "data." + error;
+                    }
+                    if (message.env != null && message.hasOwnProperty("env"))
+                        if (!$util.isInteger(message.env))
+                            return "env: integer expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a Response message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {type.googleapis.com.Response} Response
+                 */
+                Response.fromObject = function fromObject(object) {
+                    if (object instanceof $root.type.googleapis.com.Response)
+                        return object;
+                    var message = new $root.type.googleapis.com.Response();
+                    if (object.biz != null)
+                        message.biz = String(object.biz);
+                    if (object.type != null)
+                        message.type = String(object.type);
+                    if (object.base != null)
+                        message.base = String(object.base);
+                    if (object.quote != null)
+                        message.quote = String(object.quote);
+                    if (object.contractcode != null)
+                        message.contractcode = String(object.contractcode);
+                    if (object.granularity != null)
+                        message.granularity = String(object.granularity);
+                    if (object.data != null) {
+                        if (typeof object.data !== "object")
+                            throw TypeError(".type.googleapis.com.Response.data: object expected");
+                        message.data = $root.type.googleapis.com.Data.fromObject(object.data);
+                    }
+                    if (object.env != null)
+                        message.env = object.env | 0;
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a Response message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.Response} message Response
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                Response.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.biz = "";
+                        object.type = "";
+                        object.base = "";
+                        object.quote = "";
+                        object.contractcode = "";
+                        object.granularity = "";
+                        object.data = null;
+                        object.env = 0;
+                    }
+                    if (message.biz != null && message.hasOwnProperty("biz"))
+                        object.biz = message.biz;
+                    if (message.type != null && message.hasOwnProperty("type"))
+                        object.type = message.type;
+                    if (message.base != null && message.hasOwnProperty("base"))
+                        object.base = message.base;
+                    if (message.quote != null && message.hasOwnProperty("quote"))
+                        object.quote = message.quote;
+                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                        object.contractcode = message.contractcode;
+                    if (message.granularity != null && message.hasOwnProperty("granularity"))
+                        object.granularity = message.granularity;
+                    if (message.data != null && message.hasOwnProperty("data"))
+                        object.data = $root.type.googleapis.com.Data.toObject(message.data, options);
+                    if (message.env != null && message.hasOwnProperty("env"))
+                        object.env = message.env;
+                    return object;
+                };
+
+                /**
+                 * Converts this Response to JSON.
+                 * @function toJSON
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                Response.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for Response
+                 * @function getTypeUrl
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                Response.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/type.googleapis.com.Response";
+                };
+
+                return Response;
+            })();
+
+            com.Data = (function() {
+
+                /**
+                 * Properties of a Data.
+                 * @memberof type.googleapis.com
+                 * @interface IData
+                 * @property {string|null} [typeUrl] Data typeUrl
+                 * @property {type.googleapis.com.IKlineData|null} [value] Data value
+                 */
+
+                /**
+                 * Constructs a new Data.
+                 * @memberof type.googleapis.com
+                 * @classdesc Represents a Data.
+                 * @implements IData
+                 * @constructor
+                 * @param {type.googleapis.com.IData=} [properties] Properties to set
+                 */
+                function Data(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Data typeUrl.
+                 * @member {string} typeUrl
+                 * @memberof type.googleapis.com.Data
+                 * @instance
+                 */
+                Data.prototype.typeUrl = "";
+
+                /**
+                 * Data value.
+                 * @member {type.googleapis.com.IKlineData|null|undefined} value
+                 * @memberof type.googleapis.com.Data
+                 * @instance
+                 */
+                Data.prototype.value = null;
+
+                /**
+                 * Creates a new Data instance using the specified properties.
+                 * @function create
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.IData=} [properties] Properties to set
+                 * @returns {type.googleapis.com.Data} Data instance
+                 */
+                Data.create = function create(properties) {
+                    return new Data(properties);
+                };
+
+                /**
+                 * Encodes the specified Data message. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
+                 * @function encode
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Data.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.typeUrl != null && Object.hasOwnProperty.call(message, "typeUrl"))
+                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.typeUrl);
+                    if (message.value != null && Object.hasOwnProperty.call(message, "value"))
+                        $root.type.googleapis.com.KlineData.encode(message.value, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified Data message, length delimited. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Data.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a Data message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {type.googleapis.com.Data} Data
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Data.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.type.googleapis.com.Data();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.typeUrl = reader.string();
+                                break;
+                            }
+                        case 2: {
+                                message.value = $root.type.googleapis.com.KlineData.decode(reader, reader.uint32());
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a Data message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {type.googleapis.com.Data} Data
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Data.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a Data message.
+                 * @function verify
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                Data.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
+                        if (!$util.isString(message.typeUrl))
+                            return "typeUrl: string expected";
+                    if (message.value != null && message.hasOwnProperty("value")) {
+                        var error = $root.type.googleapis.com.KlineData.verify(message.value);
+                        if (error)
+                            return "value." + error;
+                    }
+                    return null;
+                };
+
+                /**
+                 * Creates a Data message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {type.googleapis.com.Data} Data
+                 */
+                Data.fromObject = function fromObject(object) {
+                    if (object instanceof $root.type.googleapis.com.Data)
+                        return object;
+                    var message = new $root.type.googleapis.com.Data();
+                    if (object.typeUrl != null)
+                        message.typeUrl = String(object.typeUrl);
+                    if (object.value != null) {
+                        if (typeof object.value !== "object")
+                            throw TypeError(".type.googleapis.com.Data.value: object expected");
+                        message.value = $root.type.googleapis.com.KlineData.fromObject(object.value);
+                    }
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a Data message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.Data} message Data
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                Data.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.typeUrl = "";
+                        object.value = null;
+                    }
+                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
+                        object.typeUrl = message.typeUrl;
+                    if (message.value != null && message.hasOwnProperty("value"))
+                        object.value = $root.type.googleapis.com.KlineData.toObject(message.value, options);
+                    return object;
+                };
+
+                /**
+                 * Converts this Data to JSON.
+                 * @function toJSON
+                 * @memberof type.googleapis.com.Data
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                Data.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for Data
+                 * @function getTypeUrl
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                Data.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/type.googleapis.com.Data";
+                };
+
+                return Data;
+            })();
+
+            com.KlineData = (function() {
+
+                /**
+                 * Properties of a KlineData.
+                 * @memberof type.googleapis.com
+                 * @interface IKlineData
+                 * @property {number|Long|null} [createate] KlineData createate
+                 * @property {string|null} [low] KlineData low
+                 * @property {string|null} [high] KlineData high
+                 * @property {string|null} [open] KlineData open
+                 * @property {string|null} [close] KlineData close
+                 * @property {string|null} [amount] KlineData amount
+                 * @property {string|null} [size] KlineData size
+                 */
+
+                /**
+                 * Constructs a new KlineData.
+                 * @memberof type.googleapis.com
+                 * @classdesc Represents a KlineData.
+                 * @implements IKlineData
+                 * @constructor
+                 * @param {type.googleapis.com.IKlineData=} [properties] Properties to set
+                 */
+                function KlineData(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * KlineData createate.
+                 * @member {number|Long} createate
+                 * @memberof type.googleapis.com.KlineData
+                 * @instance
+                 */
+                KlineData.prototype.createate = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                /**
+                 * KlineData low.
+                 * @member {string} low
+                 * @memberof type.googleapis.com.KlineData
+                 * @instance
+                 */
+                KlineData.prototype.low = "";
+
+                /**
+                 * KlineData high.
+                 * @member {string} high
+                 * @memberof type.googleapis.com.KlineData
+                 * @instance
+                 */
+                KlineData.prototype.high = "";
+
+                /**
+                 * KlineData open.
+                 * @member {string} open
+                 * @memberof type.googleapis.com.KlineData
+                 * @instance
+                 */
+                KlineData.prototype.open = "";
+
+                /**
+                 * KlineData close.
+                 * @member {string} close
+                 * @memberof type.googleapis.com.KlineData
+                 * @instance
+                 */
+                KlineData.prototype.close = "";
+
+                /**
+                 * KlineData amount.
+                 * @member {string} amount
+                 * @memberof type.googleapis.com.KlineData
+                 * @instance
+                 */
+                KlineData.prototype.amount = "";
+
+                /**
+                 * KlineData size.
+                 * @member {string} size
+                 * @memberof type.googleapis.com.KlineData
+                 * @instance
+                 */
+                KlineData.prototype.size = "";
+
+                /**
+                 * Creates a new KlineData instance using the specified properties.
+                 * @function create
+                 * @memberof type.googleapis.com.KlineData
+                 * @static
+                 * @param {type.googleapis.com.IKlineData=} [properties] Properties to set
+                 * @returns {type.googleapis.com.KlineData} KlineData instance
+                 */
+                KlineData.create = function create(properties) {
+                    return new KlineData(properties);
+                };
+
+                /**
+                 * Encodes the specified KlineData message. Does not implicitly {@link type.googleapis.com.KlineData.verify|verify} messages.
+                 * @function encode
+                 * @memberof type.googleapis.com.KlineData
+                 * @static
+                 * @param {type.googleapis.com.IKlineData} message KlineData message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                KlineData.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.createate != null && Object.hasOwnProperty.call(message, "createate"))
+                        writer.uint32(/* id 1, wireType 0 =*/8).int64(message.createate);
+                    if (message.low != null && Object.hasOwnProperty.call(message, "low"))
+                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.low);
+                    if (message.high != null && Object.hasOwnProperty.call(message, "high"))
+                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.high);
+                    if (message.open != null && Object.hasOwnProperty.call(message, "open"))
+                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.open);
+                    if (message.close != null && Object.hasOwnProperty.call(message, "close"))
+                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.close);
+                    if (message.amount != null && Object.hasOwnProperty.call(message, "amount"))
+                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.amount);
+                    if (message.size != null && Object.hasOwnProperty.call(message, "size"))
+                        writer.uint32(/* id 7, wireType 2 =*/58).string(message.size);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified KlineData message, length delimited. Does not implicitly {@link type.googleapis.com.KlineData.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof type.googleapis.com.KlineData
+                 * @static
+                 * @param {type.googleapis.com.IKlineData} message KlineData message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                KlineData.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a KlineData message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof type.googleapis.com.KlineData
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {type.googleapis.com.KlineData} KlineData
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                KlineData.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.type.googleapis.com.KlineData();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.createate = reader.int64();
+                                break;
+                            }
+                        case 2: {
+                                message.low = reader.string();
+                                break;
+                            }
+                        case 3: {
+                                message.high = reader.string();
+                                break;
+                            }
+                        case 4: {
+                                message.open = reader.string();
+                                break;
+                            }
+                        case 5: {
+                                message.close = reader.string();
+                                break;
+                            }
+                        case 6: {
+                                message.amount = reader.string();
+                                break;
+                            }
+                        case 7: {
+                                message.size = reader.string();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a KlineData message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof type.googleapis.com.KlineData
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {type.googleapis.com.KlineData} KlineData
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                KlineData.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a KlineData message.
+                 * @function verify
+                 * @memberof type.googleapis.com.KlineData
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                KlineData.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.createate != null && message.hasOwnProperty("createate"))
+                        if (!$util.isInteger(message.createate) && !(message.createate && $util.isInteger(message.createate.low) && $util.isInteger(message.createate.high)))
+                            return "createate: integer|Long expected";
+                    if (message.low != null && message.hasOwnProperty("low"))
+                        if (!$util.isString(message.low))
+                            return "low: string expected";
+                    if (message.high != null && message.hasOwnProperty("high"))
+                        if (!$util.isString(message.high))
+                            return "high: string expected";
+                    if (message.open != null && message.hasOwnProperty("open"))
+                        if (!$util.isString(message.open))
+                            return "open: string expected";
+                    if (message.close != null && message.hasOwnProperty("close"))
+                        if (!$util.isString(message.close))
+                            return "close: string expected";
+                    if (message.amount != null && message.hasOwnProperty("amount"))
+                        if (!$util.isString(message.amount))
+                            return "amount: string expected";
+                    if (message.size != null && message.hasOwnProperty("size"))
+                        if (!$util.isString(message.size))
+                            return "size: string expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a KlineData message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof type.googleapis.com.KlineData
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {type.googleapis.com.KlineData} KlineData
+                 */
+                KlineData.fromObject = function fromObject(object) {
+                    if (object instanceof $root.type.googleapis.com.KlineData)
+                        return object;
+                    var message = new $root.type.googleapis.com.KlineData();
+                    if (object.createate != null)
+                        if ($util.Long)
+                            (message.createate = $util.Long.fromValue(object.createate)).unsigned = false;
+                        else if (typeof object.createate === "string")
+                            message.createate = parseInt(object.createate, 10);
+                        else if (typeof object.createate === "number")
+                            message.createate = object.createate;
+                        else if (typeof object.createate === "object")
+                            message.createate = new $util.LongBits(object.createate.low >>> 0, object.createate.high >>> 0).toNumber();
+                    if (object.low != null)
+                        message.low = String(object.low);
+                    if (object.high != null)
+                        message.high = String(object.high);
+                    if (object.open != null)
+                        message.open = String(object.open);
+                    if (object.close != null)
+                        message.close = String(object.close);
+                    if (object.amount != null)
+                        message.amount = String(object.amount);
+                    if (object.size != null)
+                        message.size = String(object.size);
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a KlineData message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof type.googleapis.com.KlineData
+                 * @static
+                 * @param {type.googleapis.com.KlineData} message KlineData
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                KlineData.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        if ($util.Long) {
+                            var long = new $util.Long(0, 0, false);
+                            object.createate = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                        } else
+                            object.createate = options.longs === String ? "0" : 0;
+                        object.low = "";
+                        object.high = "";
+                        object.open = "";
+                        object.close = "";
+                        object.amount = "";
+                        object.size = "";
+                    }
+                    if (message.createate != null && message.hasOwnProperty("createate"))
+                        if (typeof message.createate === "number")
+                            object.createate = options.longs === String ? String(message.createate) : message.createate;
+                        else
+                            object.createate = options.longs === String ? $util.Long.prototype.toString.call(message.createate) : options.longs === Number ? new $util.LongBits(message.createate.low >>> 0, message.createate.high >>> 0).toNumber() : message.createate;
+                    if (message.low != null && message.hasOwnProperty("low"))
+                        object.low = message.low;
+                    if (message.high != null && message.hasOwnProperty("high"))
+                        object.high = message.high;
+                    if (message.open != null && message.hasOwnProperty("open"))
+                        object.open = message.open;
+                    if (message.close != null && message.hasOwnProperty("close"))
+                        object.close = message.close;
+                    if (message.amount != null && message.hasOwnProperty("amount"))
+                        object.amount = message.amount;
+                    if (message.size != null && message.hasOwnProperty("size"))
+                        object.size = message.size;
+                    return object;
+                };
+
+                /**
+                 * Converts this KlineData to JSON.
+                 * @function toJSON
+                 * @memberof type.googleapis.com.KlineData
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                KlineData.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for KlineData
+                 * @function getTypeUrl
+                 * @memberof type.googleapis.com.KlineData
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                KlineData.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/type.googleapis.com.KlineData";
+                };
+
+                return KlineData;
+            })();
+
+            return com;
+        })();
+
+        return googleapis;
+    })();
+
+    return type;
+})();
+
+module.exports = $root;

+ 99 - 0
client/hotconi/proto/type.googleapis.com.CandlesPbMsg.json

@@ -0,0 +1,99 @@
+{
+  "options": {
+    "syntax": "proto3"
+  },
+  "nested": {
+    "type": {
+      "nested": {
+        "googleapis": {
+          "nested": {
+            "com": {
+              "nested": {
+                "Response": {
+                  "fields": {
+                    "biz": {
+                      "type": "string",
+                      "id": 1
+                    },
+                    "type": {
+                      "type": "string",
+                      "id": 2
+                    },
+                    "base": {
+                      "type": "string",
+                      "id": 3
+                    },
+                    "quote": {
+                      "type": "string",
+                      "id": 4
+                    },
+                    "contractcode": {
+                      "type": "string",
+                      "id": 5
+                    },
+                    "granularity": {
+                      "type": "string",
+                      "id": 6
+                    },
+                    "data": {
+                      "type": "Data",
+                      "id": 7
+                    },
+                    "env": {
+                      "type": "int32",
+                      "id": 8
+                    }
+                  }
+                },
+                "Data": {
+                  "fields": {
+                    "typeUrl": {
+                      "type": "string",
+                      "id": 1
+                    },
+                    "value": {
+                      "type": "KlineData",
+                      "id": 2
+                    }
+                  }
+                },
+                "KlineData": {
+                  "fields": {
+                    "createate": {
+                      "type": "int64",
+                      "id": 1
+                    },
+                    "low": {
+                      "type": "string",
+                      "id": 2
+                    },
+                    "high": {
+                      "type": "string",
+                      "id": 3
+                    },
+                    "open": {
+                      "type": "string",
+                      "id": 4
+                    },
+                    "close": {
+                      "type": "string",
+                      "id": 5
+                    },
+                    "amount": {
+                      "type": "string",
+                      "id": 6
+                    },
+                    "size": {
+                      "type": "string",
+                      "id": 7
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}

+ 645 - 0
client/hotconi/proto/type.googleapis.com.CommonPbMsg.js

@@ -0,0 +1,645 @@
+/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/
+"use strict";
+
+var $protobuf = require("protobufjs/minimal");
+
+// Common aliases
+var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;
+
+// Exported root namespace
+var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});
+
+$root.type = (function() {
+
+    /**
+     * Namespace type.
+     * @exports type
+     * @namespace
+     */
+    var type = {};
+
+    type.googleapis = (function() {
+
+        /**
+         * Namespace googleapis.
+         * @memberof type
+         * @namespace
+         */
+        var googleapis = {};
+
+        googleapis.com = (function() {
+
+            /**
+             * Namespace com.
+             * @memberof type.googleapis
+             * @namespace
+             */
+            var com = {};
+
+            com.Response = (function() {
+
+                /**
+                 * Properties of a Response.
+                 * @memberof type.googleapis.com
+                 * @interface IResponse
+                 * @property {string|null} [biz] Response biz
+                 * @property {string|null} [type] Response type
+                 * @property {string|null} [base] Response base
+                 * @property {string|null} [quote] Response quote
+                 * @property {string|null} [contractcode] Response contractcode
+                 * @property {string|null} [granularity] Response granularity
+                 * @property {type.googleapis.com.IData|null} [data] Response data
+                 * @property {number|null} [env] Response env
+                 */
+
+                /**
+                 * Constructs a new Response.
+                 * @memberof type.googleapis.com
+                 * @classdesc Represents a Response.
+                 * @implements IResponse
+                 * @constructor
+                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
+                 */
+                function Response(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Response biz.
+                 * @member {string} biz
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.biz = "";
+
+                /**
+                 * Response type.
+                 * @member {string} type
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.type = "";
+
+                /**
+                 * Response base.
+                 * @member {string} base
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.base = "";
+
+                /**
+                 * Response quote.
+                 * @member {string} quote
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.quote = "";
+
+                /**
+                 * Response contractcode.
+                 * @member {string} contractcode
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.contractcode = "";
+
+                /**
+                 * Response granularity.
+                 * @member {string} granularity
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.granularity = "";
+
+                /**
+                 * Response data.
+                 * @member {type.googleapis.com.IData|null|undefined} data
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.data = null;
+
+                /**
+                 * Response env.
+                 * @member {number} env
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.env = 0;
+
+                /**
+                 * Creates a new Response instance using the specified properties.
+                 * @function create
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
+                 * @returns {type.googleapis.com.Response} Response instance
+                 */
+                Response.create = function create(properties) {
+                    return new Response(properties);
+                };
+
+                /**
+                 * Encodes the specified Response message. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
+                 * @function encode
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Response.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.biz != null && Object.hasOwnProperty.call(message, "biz"))
+                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.biz);
+                    if (message.type != null && Object.hasOwnProperty.call(message, "type"))
+                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.type);
+                    if (message.base != null && Object.hasOwnProperty.call(message, "base"))
+                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.base);
+                    if (message.quote != null && Object.hasOwnProperty.call(message, "quote"))
+                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.quote);
+                    if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
+                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.contractcode);
+                    if (message.granularity != null && Object.hasOwnProperty.call(message, "granularity"))
+                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.granularity);
+                    if (message.data != null && Object.hasOwnProperty.call(message, "data"))
+                        $root.type.googleapis.com.Data.encode(message.data, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
+                    if (message.env != null && Object.hasOwnProperty.call(message, "env"))
+                        writer.uint32(/* id 8, wireType 0 =*/64).int32(message.env);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified Response message, length delimited. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Response.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a Response message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {type.googleapis.com.Response} Response
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Response.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.type.googleapis.com.Response();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.biz = reader.string();
+                                break;
+                            }
+                        case 2: {
+                                message.type = reader.string();
+                                break;
+                            }
+                        case 3: {
+                                message.base = reader.string();
+                                break;
+                            }
+                        case 4: {
+                                message.quote = reader.string();
+                                break;
+                            }
+                        case 5: {
+                                message.contractcode = reader.string();
+                                break;
+                            }
+                        case 6: {
+                                message.granularity = reader.string();
+                                break;
+                            }
+                        case 7: {
+                                message.data = $root.type.googleapis.com.Data.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 8: {
+                                message.env = reader.int32();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a Response message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {type.googleapis.com.Response} Response
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Response.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a Response message.
+                 * @function verify
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                Response.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.biz != null && message.hasOwnProperty("biz"))
+                        if (!$util.isString(message.biz))
+                            return "biz: string expected";
+                    if (message.type != null && message.hasOwnProperty("type"))
+                        if (!$util.isString(message.type))
+                            return "type: string expected";
+                    if (message.base != null && message.hasOwnProperty("base"))
+                        if (!$util.isString(message.base))
+                            return "base: string expected";
+                    if (message.quote != null && message.hasOwnProperty("quote"))
+                        if (!$util.isString(message.quote))
+                            return "quote: string expected";
+                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                        if (!$util.isString(message.contractcode))
+                            return "contractcode: string expected";
+                    if (message.granularity != null && message.hasOwnProperty("granularity"))
+                        if (!$util.isString(message.granularity))
+                            return "granularity: string expected";
+                    if (message.data != null && message.hasOwnProperty("data")) {
+                        var error = $root.type.googleapis.com.Data.verify(message.data);
+                        if (error)
+                            return "data." + error;
+                    }
+                    if (message.env != null && message.hasOwnProperty("env"))
+                        if (!$util.isInteger(message.env))
+                            return "env: integer expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a Response message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {type.googleapis.com.Response} Response
+                 */
+                Response.fromObject = function fromObject(object) {
+                    if (object instanceof $root.type.googleapis.com.Response)
+                        return object;
+                    var message = new $root.type.googleapis.com.Response();
+                    if (object.biz != null)
+                        message.biz = String(object.biz);
+                    if (object.type != null)
+                        message.type = String(object.type);
+                    if (object.base != null)
+                        message.base = String(object.base);
+                    if (object.quote != null)
+                        message.quote = String(object.quote);
+                    if (object.contractcode != null)
+                        message.contractcode = String(object.contractcode);
+                    if (object.granularity != null)
+                        message.granularity = String(object.granularity);
+                    if (object.data != null) {
+                        if (typeof object.data !== "object")
+                            throw TypeError(".type.googleapis.com.Response.data: object expected");
+                        message.data = $root.type.googleapis.com.Data.fromObject(object.data);
+                    }
+                    if (object.env != null)
+                        message.env = object.env | 0;
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a Response message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.Response} message Response
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                Response.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.biz = "";
+                        object.type = "";
+                        object.base = "";
+                        object.quote = "";
+                        object.contractcode = "";
+                        object.granularity = "";
+                        object.data = null;
+                        object.env = 0;
+                    }
+                    if (message.biz != null && message.hasOwnProperty("biz"))
+                        object.biz = message.biz;
+                    if (message.type != null && message.hasOwnProperty("type"))
+                        object.type = message.type;
+                    if (message.base != null && message.hasOwnProperty("base"))
+                        object.base = message.base;
+                    if (message.quote != null && message.hasOwnProperty("quote"))
+                        object.quote = message.quote;
+                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                        object.contractcode = message.contractcode;
+                    if (message.granularity != null && message.hasOwnProperty("granularity"))
+                        object.granularity = message.granularity;
+                    if (message.data != null && message.hasOwnProperty("data"))
+                        object.data = $root.type.googleapis.com.Data.toObject(message.data, options);
+                    if (message.env != null && message.hasOwnProperty("env"))
+                        object.env = message.env;
+                    return object;
+                };
+
+                /**
+                 * Converts this Response to JSON.
+                 * @function toJSON
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                Response.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for Response
+                 * @function getTypeUrl
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                Response.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/type.googleapis.com.Response";
+                };
+
+                return Response;
+            })();
+
+            com.Data = (function() {
+
+                /**
+                 * Properties of a Data.
+                 * @memberof type.googleapis.com
+                 * @interface IData
+                 * @property {string|null} [typeUrl] Data typeUrl
+                 * @property {string|null} [value] Data value
+                 */
+
+                /**
+                 * Constructs a new Data.
+                 * @memberof type.googleapis.com
+                 * @classdesc Represents a Data.
+                 * @implements IData
+                 * @constructor
+                 * @param {type.googleapis.com.IData=} [properties] Properties to set
+                 */
+                function Data(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Data typeUrl.
+                 * @member {string} typeUrl
+                 * @memberof type.googleapis.com.Data
+                 * @instance
+                 */
+                Data.prototype.typeUrl = "";
+
+                /**
+                 * Data value.
+                 * @member {string} value
+                 * @memberof type.googleapis.com.Data
+                 * @instance
+                 */
+                Data.prototype.value = "";
+
+                /**
+                 * Creates a new Data instance using the specified properties.
+                 * @function create
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.IData=} [properties] Properties to set
+                 * @returns {type.googleapis.com.Data} Data instance
+                 */
+                Data.create = function create(properties) {
+                    return new Data(properties);
+                };
+
+                /**
+                 * Encodes the specified Data message. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
+                 * @function encode
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Data.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.typeUrl != null && Object.hasOwnProperty.call(message, "typeUrl"))
+                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.typeUrl);
+                    if (message.value != null && Object.hasOwnProperty.call(message, "value"))
+                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.value);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified Data message, length delimited. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Data.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a Data message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {type.googleapis.com.Data} Data
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Data.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.type.googleapis.com.Data();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.typeUrl = reader.string();
+                                break;
+                            }
+                        case 2: {
+                                message.value = reader.string();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a Data message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {type.googleapis.com.Data} Data
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Data.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a Data message.
+                 * @function verify
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                Data.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
+                        if (!$util.isString(message.typeUrl))
+                            return "typeUrl: string expected";
+                    if (message.value != null && message.hasOwnProperty("value"))
+                        if (!$util.isString(message.value))
+                            return "value: string expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a Data message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {type.googleapis.com.Data} Data
+                 */
+                Data.fromObject = function fromObject(object) {
+                    if (object instanceof $root.type.googleapis.com.Data)
+                        return object;
+                    var message = new $root.type.googleapis.com.Data();
+                    if (object.typeUrl != null)
+                        message.typeUrl = String(object.typeUrl);
+                    if (object.value != null)
+                        message.value = String(object.value);
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a Data message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.Data} message Data
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                Data.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.typeUrl = "";
+                        object.value = "";
+                    }
+                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
+                        object.typeUrl = message.typeUrl;
+                    if (message.value != null && message.hasOwnProperty("value"))
+                        object.value = message.value;
+                    return object;
+                };
+
+                /**
+                 * Converts this Data to JSON.
+                 * @function toJSON
+                 * @memberof type.googleapis.com.Data
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                Data.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for Data
+                 * @function getTypeUrl
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                Data.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/type.googleapis.com.Data";
+                };
+
+                return Data;
+            })();
+
+            return com;
+        })();
+
+        return googleapis;
+    })();
+
+    return type;
+})();
+
+module.exports = $root;

+ 67 - 0
client/hotconi/proto/type.googleapis.com.CommonPbMsg.json

@@ -0,0 +1,67 @@
+{
+  "options": {
+    "syntax": "proto3"
+  },
+  "nested": {
+    "type": {
+      "nested": {
+        "googleapis": {
+          "nested": {
+            "com": {
+              "nested": {
+                "Response": {
+                  "fields": {
+                    "biz": {
+                      "type": "string",
+                      "id": 1
+                    },
+                    "type": {
+                      "type": "string",
+                      "id": 2
+                    },
+                    "base": {
+                      "type": "string",
+                      "id": 3
+                    },
+                    "quote": {
+                      "type": "string",
+                      "id": 4
+                    },
+                    "contractcode": {
+                      "type": "string",
+                      "id": 5
+                    },
+                    "granularity": {
+                      "type": "string",
+                      "id": 6
+                    },
+                    "data": {
+                      "type": "Data",
+                      "id": 7
+                    },
+                    "env": {
+                      "type": "int32",
+                      "id": 8
+                    }
+                  }
+                },
+                "Data": {
+                  "fields": {
+                    "typeUrl": {
+                      "type": "string",
+                      "id": 1
+                    },
+                    "value": {
+                      "type": "string",
+                      "id": 2
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}

+ 1094 - 0
client/hotconi/proto/type.googleapis.com.DepthPbMsg.js

@@ -0,0 +1,1094 @@
+/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/
+"use strict";
+
+var $protobuf = require("protobufjs/minimal");
+
+// Common aliases
+var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;
+
+// Exported root namespace
+var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});
+
+$root.type = (function() {
+
+    /**
+     * Namespace type.
+     * @exports type
+     * @namespace
+     */
+    var type = {};
+
+    type.googleapis = (function() {
+
+        /**
+         * Namespace googleapis.
+         * @memberof type
+         * @namespace
+         */
+        var googleapis = {};
+
+        googleapis.com = (function() {
+
+            /**
+             * Namespace com.
+             * @memberof type.googleapis
+             * @namespace
+             */
+            var com = {};
+
+            com.Response = (function() {
+
+                /**
+                 * Properties of a Response.
+                 * @memberof type.googleapis.com
+                 * @interface IResponse
+                 * @property {string|null} [biz] Response biz
+                 * @property {string|null} [type] Response type
+                 * @property {string|null} [base] Response base
+                 * @property {string|null} [quote] Response quote
+                 * @property {string|null} [contractcode] Response contractcode
+                 * @property {string|null} [granularity] Response granularity
+                 * @property {type.googleapis.com.IData|null} [data] Response data
+                 * @property {number|null} [env] Response env
+                 */
+
+                /**
+                 * Constructs a new Response.
+                 * @memberof type.googleapis.com
+                 * @classdesc Represents a Response.
+                 * @implements IResponse
+                 * @constructor
+                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
+                 */
+                function Response(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Response biz.
+                 * @member {string} biz
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.biz = "";
+
+                /**
+                 * Response type.
+                 * @member {string} type
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.type = "";
+
+                /**
+                 * Response base.
+                 * @member {string} base
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.base = "";
+
+                /**
+                 * Response quote.
+                 * @member {string} quote
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.quote = "";
+
+                /**
+                 * Response contractcode.
+                 * @member {string} contractcode
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.contractcode = "";
+
+                /**
+                 * Response granularity.
+                 * @member {string} granularity
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.granularity = "";
+
+                /**
+                 * Response data.
+                 * @member {type.googleapis.com.IData|null|undefined} data
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.data = null;
+
+                /**
+                 * Response env.
+                 * @member {number} env
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.env = 0;
+
+                /**
+                 * Creates a new Response instance using the specified properties.
+                 * @function create
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
+                 * @returns {type.googleapis.com.Response} Response instance
+                 */
+                Response.create = function create(properties) {
+                    return new Response(properties);
+                };
+
+                /**
+                 * Encodes the specified Response message. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
+                 * @function encode
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Response.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.biz != null && Object.hasOwnProperty.call(message, "biz"))
+                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.biz);
+                    if (message.type != null && Object.hasOwnProperty.call(message, "type"))
+                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.type);
+                    if (message.base != null && Object.hasOwnProperty.call(message, "base"))
+                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.base);
+                    if (message.quote != null && Object.hasOwnProperty.call(message, "quote"))
+                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.quote);
+                    if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
+                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.contractcode);
+                    if (message.granularity != null && Object.hasOwnProperty.call(message, "granularity"))
+                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.granularity);
+                    if (message.data != null && Object.hasOwnProperty.call(message, "data"))
+                        $root.type.googleapis.com.Data.encode(message.data, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
+                    if (message.env != null && Object.hasOwnProperty.call(message, "env"))
+                        writer.uint32(/* id 8, wireType 0 =*/64).int32(message.env);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified Response message, length delimited. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Response.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a Response message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {type.googleapis.com.Response} Response
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Response.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.type.googleapis.com.Response();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.biz = reader.string();
+                                break;
+                            }
+                        case 2: {
+                                message.type = reader.string();
+                                break;
+                            }
+                        case 3: {
+                                message.base = reader.string();
+                                break;
+                            }
+                        case 4: {
+                                message.quote = reader.string();
+                                break;
+                            }
+                        case 5: {
+                                message.contractcode = reader.string();
+                                break;
+                            }
+                        case 6: {
+                                message.granularity = reader.string();
+                                break;
+                            }
+                        case 7: {
+                                message.data = $root.type.googleapis.com.Data.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 8: {
+                                message.env = reader.int32();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a Response message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {type.googleapis.com.Response} Response
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Response.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a Response message.
+                 * @function verify
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                Response.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.biz != null && message.hasOwnProperty("biz"))
+                        if (!$util.isString(message.biz))
+                            return "biz: string expected";
+                    if (message.type != null && message.hasOwnProperty("type"))
+                        if (!$util.isString(message.type))
+                            return "type: string expected";
+                    if (message.base != null && message.hasOwnProperty("base"))
+                        if (!$util.isString(message.base))
+                            return "base: string expected";
+                    if (message.quote != null && message.hasOwnProperty("quote"))
+                        if (!$util.isString(message.quote))
+                            return "quote: string expected";
+                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                        if (!$util.isString(message.contractcode))
+                            return "contractcode: string expected";
+                    if (message.granularity != null && message.hasOwnProperty("granularity"))
+                        if (!$util.isString(message.granularity))
+                            return "granularity: string expected";
+                    if (message.data != null && message.hasOwnProperty("data")) {
+                        var error = $root.type.googleapis.com.Data.verify(message.data);
+                        if (error)
+                            return "data." + error;
+                    }
+                    if (message.env != null && message.hasOwnProperty("env"))
+                        if (!$util.isInteger(message.env))
+                            return "env: integer expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a Response message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {type.googleapis.com.Response} Response
+                 */
+                Response.fromObject = function fromObject(object) {
+                    if (object instanceof $root.type.googleapis.com.Response)
+                        return object;
+                    var message = new $root.type.googleapis.com.Response();
+                    if (object.biz != null)
+                        message.biz = String(object.biz);
+                    if (object.type != null)
+                        message.type = String(object.type);
+                    if (object.base != null)
+                        message.base = String(object.base);
+                    if (object.quote != null)
+                        message.quote = String(object.quote);
+                    if (object.contractcode != null)
+                        message.contractcode = String(object.contractcode);
+                    if (object.granularity != null)
+                        message.granularity = String(object.granularity);
+                    if (object.data != null) {
+                        if (typeof object.data !== "object")
+                            throw TypeError(".type.googleapis.com.Response.data: object expected");
+                        message.data = $root.type.googleapis.com.Data.fromObject(object.data);
+                    }
+                    if (object.env != null)
+                        message.env = object.env | 0;
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a Response message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.Response} message Response
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                Response.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.biz = "";
+                        object.type = "";
+                        object.base = "";
+                        object.quote = "";
+                        object.contractcode = "";
+                        object.granularity = "";
+                        object.data = null;
+                        object.env = 0;
+                    }
+                    if (message.biz != null && message.hasOwnProperty("biz"))
+                        object.biz = message.biz;
+                    if (message.type != null && message.hasOwnProperty("type"))
+                        object.type = message.type;
+                    if (message.base != null && message.hasOwnProperty("base"))
+                        object.base = message.base;
+                    if (message.quote != null && message.hasOwnProperty("quote"))
+                        object.quote = message.quote;
+                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                        object.contractcode = message.contractcode;
+                    if (message.granularity != null && message.hasOwnProperty("granularity"))
+                        object.granularity = message.granularity;
+                    if (message.data != null && message.hasOwnProperty("data"))
+                        object.data = $root.type.googleapis.com.Data.toObject(message.data, options);
+                    if (message.env != null && message.hasOwnProperty("env"))
+                        object.env = message.env;
+                    return object;
+                };
+
+                /**
+                 * Converts this Response to JSON.
+                 * @function toJSON
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                Response.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for Response
+                 * @function getTypeUrl
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                Response.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/type.googleapis.com.Response";
+                };
+
+                return Response;
+            })();
+
+            com.Data = (function() {
+
+                /**
+                 * Properties of a Data.
+                 * @memberof type.googleapis.com
+                 * @interface IData
+                 * @property {string|null} [typeUrl] Data typeUrl
+                 * @property {type.googleapis.com.IDepthPbMsg|null} [value] Data value
+                 */
+
+                /**
+                 * Constructs a new Data.
+                 * @memberof type.googleapis.com
+                 * @classdesc Represents a Data.
+                 * @implements IData
+                 * @constructor
+                 * @param {type.googleapis.com.IData=} [properties] Properties to set
+                 */
+                function Data(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Data typeUrl.
+                 * @member {string} typeUrl
+                 * @memberof type.googleapis.com.Data
+                 * @instance
+                 */
+                Data.prototype.typeUrl = "";
+
+                /**
+                 * Data value.
+                 * @member {type.googleapis.com.IDepthPbMsg|null|undefined} value
+                 * @memberof type.googleapis.com.Data
+                 * @instance
+                 */
+                Data.prototype.value = null;
+
+                /**
+                 * Creates a new Data instance using the specified properties.
+                 * @function create
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.IData=} [properties] Properties to set
+                 * @returns {type.googleapis.com.Data} Data instance
+                 */
+                Data.create = function create(properties) {
+                    return new Data(properties);
+                };
+
+                /**
+                 * Encodes the specified Data message. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
+                 * @function encode
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Data.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.typeUrl != null && Object.hasOwnProperty.call(message, "typeUrl"))
+                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.typeUrl);
+                    if (message.value != null && Object.hasOwnProperty.call(message, "value"))
+                        $root.type.googleapis.com.DepthPbMsg.encode(message.value, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified Data message, length delimited. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Data.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a Data message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {type.googleapis.com.Data} Data
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Data.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.type.googleapis.com.Data();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.typeUrl = reader.string();
+                                break;
+                            }
+                        case 2: {
+                                message.value = $root.type.googleapis.com.DepthPbMsg.decode(reader, reader.uint32());
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a Data message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {type.googleapis.com.Data} Data
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Data.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a Data message.
+                 * @function verify
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                Data.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
+                        if (!$util.isString(message.typeUrl))
+                            return "typeUrl: string expected";
+                    if (message.value != null && message.hasOwnProperty("value")) {
+                        var error = $root.type.googleapis.com.DepthPbMsg.verify(message.value);
+                        if (error)
+                            return "value." + error;
+                    }
+                    return null;
+                };
+
+                /**
+                 * Creates a Data message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {type.googleapis.com.Data} Data
+                 */
+                Data.fromObject = function fromObject(object) {
+                    if (object instanceof $root.type.googleapis.com.Data)
+                        return object;
+                    var message = new $root.type.googleapis.com.Data();
+                    if (object.typeUrl != null)
+                        message.typeUrl = String(object.typeUrl);
+                    if (object.value != null) {
+                        if (typeof object.value !== "object")
+                            throw TypeError(".type.googleapis.com.Data.value: object expected");
+                        message.value = $root.type.googleapis.com.DepthPbMsg.fromObject(object.value);
+                    }
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a Data message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.Data} message Data
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                Data.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.typeUrl = "";
+                        object.value = null;
+                    }
+                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
+                        object.typeUrl = message.typeUrl;
+                    if (message.value != null && message.hasOwnProperty("value"))
+                        object.value = $root.type.googleapis.com.DepthPbMsg.toObject(message.value, options);
+                    return object;
+                };
+
+                /**
+                 * Converts this Data to JSON.
+                 * @function toJSON
+                 * @memberof type.googleapis.com.Data
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                Data.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for Data
+                 * @function getTypeUrl
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                Data.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/type.googleapis.com.Data";
+                };
+
+                return Data;
+            })();
+
+            com.DepthPbMsg = (function() {
+
+                /**
+                 * Properties of a DepthPbMsg.
+                 * @memberof type.googleapis.com
+                 * @interface IDepthPbMsg
+                 * @property {Array.<type.googleapis.com.DepthPbMsg.IBody>|null} [asksList] DepthPbMsg asksList
+                 * @property {Array.<type.googleapis.com.DepthPbMsg.IBody>|null} [bidsList] DepthPbMsg bidsList
+                 */
+
+                /**
+                 * Constructs a new DepthPbMsg.
+                 * @memberof type.googleapis.com
+                 * @classdesc Represents a DepthPbMsg.
+                 * @implements IDepthPbMsg
+                 * @constructor
+                 * @param {type.googleapis.com.IDepthPbMsg=} [properties] Properties to set
+                 */
+                function DepthPbMsg(properties) {
+                    this.asksList = [];
+                    this.bidsList = [];
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * DepthPbMsg asksList.
+                 * @member {Array.<type.googleapis.com.DepthPbMsg.IBody>} asksList
+                 * @memberof type.googleapis.com.DepthPbMsg
+                 * @instance
+                 */
+                DepthPbMsg.prototype.asksList = $util.emptyArray;
+
+                /**
+                 * DepthPbMsg bidsList.
+                 * @member {Array.<type.googleapis.com.DepthPbMsg.IBody>} bidsList
+                 * @memberof type.googleapis.com.DepthPbMsg
+                 * @instance
+                 */
+                DepthPbMsg.prototype.bidsList = $util.emptyArray;
+
+                /**
+                 * Creates a new DepthPbMsg instance using the specified properties.
+                 * @function create
+                 * @memberof type.googleapis.com.DepthPbMsg
+                 * @static
+                 * @param {type.googleapis.com.IDepthPbMsg=} [properties] Properties to set
+                 * @returns {type.googleapis.com.DepthPbMsg} DepthPbMsg instance
+                 */
+                DepthPbMsg.create = function create(properties) {
+                    return new DepthPbMsg(properties);
+                };
+
+                /**
+                 * Encodes the specified DepthPbMsg message. Does not implicitly {@link type.googleapis.com.DepthPbMsg.verify|verify} messages.
+                 * @function encode
+                 * @memberof type.googleapis.com.DepthPbMsg
+                 * @static
+                 * @param {type.googleapis.com.IDepthPbMsg} message DepthPbMsg message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                DepthPbMsg.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.asksList != null && message.asksList.length)
+                        for (var i = 0; i < message.asksList.length; ++i)
+                            $root.type.googleapis.com.DepthPbMsg.Body.encode(message.asksList[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+                    if (message.bidsList != null && message.bidsList.length)
+                        for (var i = 0; i < message.bidsList.length; ++i)
+                            $root.type.googleapis.com.DepthPbMsg.Body.encode(message.bidsList[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified DepthPbMsg message, length delimited. Does not implicitly {@link type.googleapis.com.DepthPbMsg.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof type.googleapis.com.DepthPbMsg
+                 * @static
+                 * @param {type.googleapis.com.IDepthPbMsg} message DepthPbMsg message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                DepthPbMsg.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a DepthPbMsg message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof type.googleapis.com.DepthPbMsg
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {type.googleapis.com.DepthPbMsg} DepthPbMsg
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                DepthPbMsg.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.type.googleapis.com.DepthPbMsg();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                if (!(message.asksList && message.asksList.length))
+                                    message.asksList = [];
+                                message.asksList.push($root.type.googleapis.com.DepthPbMsg.Body.decode(reader, reader.uint32()));
+                                break;
+                            }
+                        case 2: {
+                                if (!(message.bidsList && message.bidsList.length))
+                                    message.bidsList = [];
+                                message.bidsList.push($root.type.googleapis.com.DepthPbMsg.Body.decode(reader, reader.uint32()));
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a DepthPbMsg message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof type.googleapis.com.DepthPbMsg
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {type.googleapis.com.DepthPbMsg} DepthPbMsg
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                DepthPbMsg.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a DepthPbMsg message.
+                 * @function verify
+                 * @memberof type.googleapis.com.DepthPbMsg
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                DepthPbMsg.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.asksList != null && message.hasOwnProperty("asksList")) {
+                        if (!Array.isArray(message.asksList))
+                            return "asksList: array expected";
+                        for (var i = 0; i < message.asksList.length; ++i) {
+                            var error = $root.type.googleapis.com.DepthPbMsg.Body.verify(message.asksList[i]);
+                            if (error)
+                                return "asksList." + error;
+                        }
+                    }
+                    if (message.bidsList != null && message.hasOwnProperty("bidsList")) {
+                        if (!Array.isArray(message.bidsList))
+                            return "bidsList: array expected";
+                        for (var i = 0; i < message.bidsList.length; ++i) {
+                            var error = $root.type.googleapis.com.DepthPbMsg.Body.verify(message.bidsList[i]);
+                            if (error)
+                                return "bidsList." + error;
+                        }
+                    }
+                    return null;
+                };
+
+                /**
+                 * Creates a DepthPbMsg message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof type.googleapis.com.DepthPbMsg
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {type.googleapis.com.DepthPbMsg} DepthPbMsg
+                 */
+                DepthPbMsg.fromObject = function fromObject(object) {
+                    if (object instanceof $root.type.googleapis.com.DepthPbMsg)
+                        return object;
+                    var message = new $root.type.googleapis.com.DepthPbMsg();
+                    if (object.asksList) {
+                        if (!Array.isArray(object.asksList))
+                            throw TypeError(".type.googleapis.com.DepthPbMsg.asksList: array expected");
+                        message.asksList = [];
+                        for (var i = 0; i < object.asksList.length; ++i) {
+                            if (typeof object.asksList[i] !== "object")
+                                throw TypeError(".type.googleapis.com.DepthPbMsg.asksList: object expected");
+                            message.asksList[i] = $root.type.googleapis.com.DepthPbMsg.Body.fromObject(object.asksList[i]);
+                        }
+                    }
+                    if (object.bidsList) {
+                        if (!Array.isArray(object.bidsList))
+                            throw TypeError(".type.googleapis.com.DepthPbMsg.bidsList: array expected");
+                        message.bidsList = [];
+                        for (var i = 0; i < object.bidsList.length; ++i) {
+                            if (typeof object.bidsList[i] !== "object")
+                                throw TypeError(".type.googleapis.com.DepthPbMsg.bidsList: object expected");
+                            message.bidsList[i] = $root.type.googleapis.com.DepthPbMsg.Body.fromObject(object.bidsList[i]);
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a DepthPbMsg message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof type.googleapis.com.DepthPbMsg
+                 * @static
+                 * @param {type.googleapis.com.DepthPbMsg} message DepthPbMsg
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                DepthPbMsg.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.arrays || options.defaults) {
+                        object.asksList = [];
+                        object.bidsList = [];
+                    }
+                    if (message.asksList && message.asksList.length) {
+                        object.asksList = [];
+                        for (var j = 0; j < message.asksList.length; ++j)
+                            object.asksList[j] = $root.type.googleapis.com.DepthPbMsg.Body.toObject(message.asksList[j], options);
+                    }
+                    if (message.bidsList && message.bidsList.length) {
+                        object.bidsList = [];
+                        for (var j = 0; j < message.bidsList.length; ++j)
+                            object.bidsList[j] = $root.type.googleapis.com.DepthPbMsg.Body.toObject(message.bidsList[j], options);
+                    }
+                    return object;
+                };
+
+                /**
+                 * Converts this DepthPbMsg to JSON.
+                 * @function toJSON
+                 * @memberof type.googleapis.com.DepthPbMsg
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                DepthPbMsg.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for DepthPbMsg
+                 * @function getTypeUrl
+                 * @memberof type.googleapis.com.DepthPbMsg
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                DepthPbMsg.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/type.googleapis.com.DepthPbMsg";
+                };
+
+                DepthPbMsg.Body = (function() {
+
+                    /**
+                     * Properties of a Body.
+                     * @memberof type.googleapis.com.DepthPbMsg
+                     * @interface IBody
+                     */
+
+                    /**
+                     * Constructs a new Body.
+                     * @memberof type.googleapis.com.DepthPbMsg
+                     * @classdesc Represents a Body.
+                     * @implements IBody
+                     * @constructor
+                     * @param {type.googleapis.com.DepthPbMsg.IBody=} [properties] Properties to set
+                     */
+                    function Body(properties) {
+                        if (properties)
+                            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                                if (properties[keys[i]] != null)
+                                    this[keys[i]] = properties[keys[i]];
+                    }
+
+                    /**
+                     * Creates a new Body instance using the specified properties.
+                     * @function create
+                     * @memberof type.googleapis.com.DepthPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.DepthPbMsg.IBody=} [properties] Properties to set
+                     * @returns {type.googleapis.com.DepthPbMsg.Body} Body instance
+                     */
+                    Body.create = function create(properties) {
+                        return new Body(properties);
+                    };
+
+                    /**
+                     * Encodes the specified Body message. Does not implicitly {@link type.googleapis.com.DepthPbMsg.Body.verify|verify} messages.
+                     * @function encode
+                     * @memberof type.googleapis.com.DepthPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.DepthPbMsg.IBody} message Body message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Body.encode = function encode(message, writer) {
+                        if (!writer)
+                            writer = $Writer.create();
+                        return writer;
+                    };
+
+                    /**
+                     * Encodes the specified Body message, length delimited. Does not implicitly {@link type.googleapis.com.DepthPbMsg.Body.verify|verify} messages.
+                     * @function encodeDelimited
+                     * @memberof type.googleapis.com.DepthPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.DepthPbMsg.IBody} message Body message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Body.encodeDelimited = function encodeDelimited(message, writer) {
+                        return this.encode(message, writer).ldelim();
+                    };
+
+                    /**
+                     * Decodes a Body message from the specified reader or buffer.
+                     * @function decode
+                     * @memberof type.googleapis.com.DepthPbMsg.Body
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @param {number} [length] Message length if known beforehand
+                     * @returns {type.googleapis.com.DepthPbMsg.Body} Body
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Body.decode = function decode(reader, length) {
+                        if (!(reader instanceof $Reader))
+                            reader = $Reader.create(reader);
+                        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.type.googleapis.com.DepthPbMsg.Body();
+                        while (reader.pos < end) {
+                            var tag = reader.uint32();
+                            switch (tag >>> 3) {
+                            default:
+                                reader.skipType(tag & 7);
+                                break;
+                            }
+                        }
+                        return message;
+                    };
+
+                    /**
+                     * Decodes a Body message from the specified reader or buffer, length delimited.
+                     * @function decodeDelimited
+                     * @memberof type.googleapis.com.DepthPbMsg.Body
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @returns {type.googleapis.com.DepthPbMsg.Body} Body
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Body.decodeDelimited = function decodeDelimited(reader) {
+                        if (!(reader instanceof $Reader))
+                            reader = new $Reader(reader);
+                        return this.decode(reader, reader.uint32());
+                    };
+
+                    /**
+                     * Verifies a Body message.
+                     * @function verify
+                     * @memberof type.googleapis.com.DepthPbMsg.Body
+                     * @static
+                     * @param {Object.<string,*>} message Plain object to verify
+                     * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                     */
+                    Body.verify = function verify(message) {
+                        if (typeof message !== "object" || message === null)
+                            return "object expected";
+                        return null;
+                    };
+
+                    /**
+                     * Creates a Body message from a plain object. Also converts values to their respective internal types.
+                     * @function fromObject
+                     * @memberof type.googleapis.com.DepthPbMsg.Body
+                     * @static
+                     * @param {Object.<string,*>} object Plain object
+                     * @returns {type.googleapis.com.DepthPbMsg.Body} Body
+                     */
+                    Body.fromObject = function fromObject(object) {
+                        if (object instanceof $root.type.googleapis.com.DepthPbMsg.Body)
+                            return object;
+                        return new $root.type.googleapis.com.DepthPbMsg.Body();
+                    };
+
+                    /**
+                     * Creates a plain object from a Body message. Also converts values to other types if specified.
+                     * @function toObject
+                     * @memberof type.googleapis.com.DepthPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.DepthPbMsg.Body} message Body
+                     * @param {$protobuf.IConversionOptions} [options] Conversion options
+                     * @returns {Object.<string,*>} Plain object
+                     */
+                    Body.toObject = function toObject() {
+                        return {};
+                    };
+
+                    /**
+                     * Converts this Body to JSON.
+                     * @function toJSON
+                     * @memberof type.googleapis.com.DepthPbMsg.Body
+                     * @instance
+                     * @returns {Object.<string,*>} JSON object
+                     */
+                    Body.prototype.toJSON = function toJSON() {
+                        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                    };
+
+                    /**
+                     * Gets the default type url for Body
+                     * @function getTypeUrl
+                     * @memberof type.googleapis.com.DepthPbMsg.Body
+                     * @static
+                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                     * @returns {string} The default type url
+                     */
+                    Body.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                        if (typeUrlPrefix === undefined) {
+                            typeUrlPrefix = "type.googleapis.com";
+                        }
+                        return typeUrlPrefix + "/type.googleapis.com.DepthPbMsg.Body";
+                    };
+
+                    return Body;
+                })();
+
+                return DepthPbMsg;
+            })();
+
+            return com;
+        })();
+
+        return googleapis;
+    })();
+
+    return type;
+})();
+
+module.exports = $root;

+ 86 - 0
client/hotconi/proto/type.googleapis.com.DepthPbMsg.json

@@ -0,0 +1,86 @@
+{
+  "options": {
+    "syntax": "proto3"
+  },
+  "nested": {
+    "type": {
+      "nested": {
+        "googleapis": {
+          "nested": {
+            "com": {
+              "nested": {
+                "Response": {
+                  "fields": {
+                    "biz": {
+                      "type": "string",
+                      "id": 1
+                    },
+                    "type": {
+                      "type": "string",
+                      "id": 2
+                    },
+                    "base": {
+                      "type": "string",
+                      "id": 3
+                    },
+                    "quote": {
+                      "type": "string",
+                      "id": 4
+                    },
+                    "contractcode": {
+                      "type": "string",
+                      "id": 5
+                    },
+                    "granularity": {
+                      "type": "string",
+                      "id": 6
+                    },
+                    "data": {
+                      "type": "Data",
+                      "id": 7
+                    },
+                    "env": {
+                      "type": "int32",
+                      "id": 8
+                    }
+                  }
+                },
+                "Data": {
+                  "fields": {
+                    "typeUrl": {
+                      "type": "string",
+                      "id": 1
+                    },
+                    "value": {
+                      "type": "DepthPbMsg",
+                      "id": 2
+                    }
+                  }
+                },
+                "DepthPbMsg": {
+                  "fields": {
+                    "asksList": {
+                      "rule": "repeated",
+                      "type": "Body",
+                      "id": 1
+                    },
+                    "bidsList": {
+                      "rule": "repeated",
+                      "type": "Body",
+                      "id": 2
+                    }
+                  },
+                  "nested": {
+                    "Body": {
+                      "fields": {}
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}

+ 974 - 0
client/hotconi/proto/type.googleapis.com.FillsPbMsg.js

@@ -0,0 +1,974 @@
+/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/
+"use strict";
+
+var $protobuf = require("protobufjs/minimal");
+
+// Common aliases
+var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;
+
+// Exported root namespace
+var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});
+
+$root.type = (function() {
+
+    /**
+     * Namespace type.
+     * @exports type
+     * @namespace
+     */
+    var type = {};
+
+    type.googleapis = (function() {
+
+        /**
+         * Namespace googleapis.
+         * @memberof type
+         * @namespace
+         */
+        var googleapis = {};
+
+        googleapis.com = (function() {
+
+            /**
+             * Namespace com.
+             * @memberof type.googleapis
+             * @namespace
+             */
+            var com = {};
+
+            com.Response = (function() {
+
+                /**
+                 * Properties of a Response.
+                 * @memberof type.googleapis.com
+                 * @interface IResponse
+                 * @property {string|null} [biz] Response biz
+                 * @property {string|null} [type] Response type
+                 * @property {string|null} [base] Response base
+                 * @property {string|null} [quote] Response quote
+                 * @property {string|null} [contractcode] Response contractcode
+                 * @property {string|null} [granularity] Response granularity
+                 * @property {type.googleapis.com.IData|null} [data] Response data
+                 * @property {number|null} [env] Response env
+                 */
+
+                /**
+                 * Constructs a new Response.
+                 * @memberof type.googleapis.com
+                 * @classdesc Represents a Response.
+                 * @implements IResponse
+                 * @constructor
+                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
+                 */
+                function Response(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Response biz.
+                 * @member {string} biz
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.biz = "";
+
+                /**
+                 * Response type.
+                 * @member {string} type
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.type = "";
+
+                /**
+                 * Response base.
+                 * @member {string} base
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.base = "";
+
+                /**
+                 * Response quote.
+                 * @member {string} quote
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.quote = "";
+
+                /**
+                 * Response contractcode.
+                 * @member {string} contractcode
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.contractcode = "";
+
+                /**
+                 * Response granularity.
+                 * @member {string} granularity
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.granularity = "";
+
+                /**
+                 * Response data.
+                 * @member {type.googleapis.com.IData|null|undefined} data
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.data = null;
+
+                /**
+                 * Response env.
+                 * @member {number} env
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.env = 0;
+
+                /**
+                 * Creates a new Response instance using the specified properties.
+                 * @function create
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
+                 * @returns {type.googleapis.com.Response} Response instance
+                 */
+                Response.create = function create(properties) {
+                    return new Response(properties);
+                };
+
+                /**
+                 * Encodes the specified Response message. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
+                 * @function encode
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Response.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.biz != null && Object.hasOwnProperty.call(message, "biz"))
+                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.biz);
+                    if (message.type != null && Object.hasOwnProperty.call(message, "type"))
+                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.type);
+                    if (message.base != null && Object.hasOwnProperty.call(message, "base"))
+                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.base);
+                    if (message.quote != null && Object.hasOwnProperty.call(message, "quote"))
+                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.quote);
+                    if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
+                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.contractcode);
+                    if (message.granularity != null && Object.hasOwnProperty.call(message, "granularity"))
+                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.granularity);
+                    if (message.data != null && Object.hasOwnProperty.call(message, "data"))
+                        $root.type.googleapis.com.Data.encode(message.data, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
+                    if (message.env != null && Object.hasOwnProperty.call(message, "env"))
+                        writer.uint32(/* id 8, wireType 0 =*/64).int32(message.env);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified Response message, length delimited. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Response.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a Response message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {type.googleapis.com.Response} Response
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Response.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.type.googleapis.com.Response();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.biz = reader.string();
+                                break;
+                            }
+                        case 2: {
+                                message.type = reader.string();
+                                break;
+                            }
+                        case 3: {
+                                message.base = reader.string();
+                                break;
+                            }
+                        case 4: {
+                                message.quote = reader.string();
+                                break;
+                            }
+                        case 5: {
+                                message.contractcode = reader.string();
+                                break;
+                            }
+                        case 6: {
+                                message.granularity = reader.string();
+                                break;
+                            }
+                        case 7: {
+                                message.data = $root.type.googleapis.com.Data.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 8: {
+                                message.env = reader.int32();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a Response message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {type.googleapis.com.Response} Response
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Response.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a Response message.
+                 * @function verify
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                Response.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.biz != null && message.hasOwnProperty("biz"))
+                        if (!$util.isString(message.biz))
+                            return "biz: string expected";
+                    if (message.type != null && message.hasOwnProperty("type"))
+                        if (!$util.isString(message.type))
+                            return "type: string expected";
+                    if (message.base != null && message.hasOwnProperty("base"))
+                        if (!$util.isString(message.base))
+                            return "base: string expected";
+                    if (message.quote != null && message.hasOwnProperty("quote"))
+                        if (!$util.isString(message.quote))
+                            return "quote: string expected";
+                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                        if (!$util.isString(message.contractcode))
+                            return "contractcode: string expected";
+                    if (message.granularity != null && message.hasOwnProperty("granularity"))
+                        if (!$util.isString(message.granularity))
+                            return "granularity: string expected";
+                    if (message.data != null && message.hasOwnProperty("data")) {
+                        var error = $root.type.googleapis.com.Data.verify(message.data);
+                        if (error)
+                            return "data." + error;
+                    }
+                    if (message.env != null && message.hasOwnProperty("env"))
+                        if (!$util.isInteger(message.env))
+                            return "env: integer expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a Response message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {type.googleapis.com.Response} Response
+                 */
+                Response.fromObject = function fromObject(object) {
+                    if (object instanceof $root.type.googleapis.com.Response)
+                        return object;
+                    var message = new $root.type.googleapis.com.Response();
+                    if (object.biz != null)
+                        message.biz = String(object.biz);
+                    if (object.type != null)
+                        message.type = String(object.type);
+                    if (object.base != null)
+                        message.base = String(object.base);
+                    if (object.quote != null)
+                        message.quote = String(object.quote);
+                    if (object.contractcode != null)
+                        message.contractcode = String(object.contractcode);
+                    if (object.granularity != null)
+                        message.granularity = String(object.granularity);
+                    if (object.data != null) {
+                        if (typeof object.data !== "object")
+                            throw TypeError(".type.googleapis.com.Response.data: object expected");
+                        message.data = $root.type.googleapis.com.Data.fromObject(object.data);
+                    }
+                    if (object.env != null)
+                        message.env = object.env | 0;
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a Response message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.Response} message Response
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                Response.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.biz = "";
+                        object.type = "";
+                        object.base = "";
+                        object.quote = "";
+                        object.contractcode = "";
+                        object.granularity = "";
+                        object.data = null;
+                        object.env = 0;
+                    }
+                    if (message.biz != null && message.hasOwnProperty("biz"))
+                        object.biz = message.biz;
+                    if (message.type != null && message.hasOwnProperty("type"))
+                        object.type = message.type;
+                    if (message.base != null && message.hasOwnProperty("base"))
+                        object.base = message.base;
+                    if (message.quote != null && message.hasOwnProperty("quote"))
+                        object.quote = message.quote;
+                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                        object.contractcode = message.contractcode;
+                    if (message.granularity != null && message.hasOwnProperty("granularity"))
+                        object.granularity = message.granularity;
+                    if (message.data != null && message.hasOwnProperty("data"))
+                        object.data = $root.type.googleapis.com.Data.toObject(message.data, options);
+                    if (message.env != null && message.hasOwnProperty("env"))
+                        object.env = message.env;
+                    return object;
+                };
+
+                /**
+                 * Converts this Response to JSON.
+                 * @function toJSON
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                Response.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for Response
+                 * @function getTypeUrl
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                Response.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/type.googleapis.com.Response";
+                };
+
+                return Response;
+            })();
+
+            com.Data = (function() {
+
+                /**
+                 * Properties of a Data.
+                 * @memberof type.googleapis.com
+                 * @interface IData
+                 * @property {string|null} [typeUrl] Data typeUrl
+                 * @property {type.googleapis.com.IOrderVoPb|null} [value] Data value
+                 */
+
+                /**
+                 * Constructs a new Data.
+                 * @memberof type.googleapis.com
+                 * @classdesc Represents a Data.
+                 * @implements IData
+                 * @constructor
+                 * @param {type.googleapis.com.IData=} [properties] Properties to set
+                 */
+                function Data(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Data typeUrl.
+                 * @member {string} typeUrl
+                 * @memberof type.googleapis.com.Data
+                 * @instance
+                 */
+                Data.prototype.typeUrl = "";
+
+                /**
+                 * Data value.
+                 * @member {type.googleapis.com.IOrderVoPb|null|undefined} value
+                 * @memberof type.googleapis.com.Data
+                 * @instance
+                 */
+                Data.prototype.value = null;
+
+                /**
+                 * Creates a new Data instance using the specified properties.
+                 * @function create
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.IData=} [properties] Properties to set
+                 * @returns {type.googleapis.com.Data} Data instance
+                 */
+                Data.create = function create(properties) {
+                    return new Data(properties);
+                };
+
+                /**
+                 * Encodes the specified Data message. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
+                 * @function encode
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Data.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.typeUrl != null && Object.hasOwnProperty.call(message, "typeUrl"))
+                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.typeUrl);
+                    if (message.value != null && Object.hasOwnProperty.call(message, "value"))
+                        $root.type.googleapis.com.OrderVoPb.encode(message.value, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified Data message, length delimited. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Data.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a Data message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {type.googleapis.com.Data} Data
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Data.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.type.googleapis.com.Data();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.typeUrl = reader.string();
+                                break;
+                            }
+                        case 2: {
+                                message.value = $root.type.googleapis.com.OrderVoPb.decode(reader, reader.uint32());
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a Data message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {type.googleapis.com.Data} Data
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Data.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a Data message.
+                 * @function verify
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                Data.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
+                        if (!$util.isString(message.typeUrl))
+                            return "typeUrl: string expected";
+                    if (message.value != null && message.hasOwnProperty("value")) {
+                        var error = $root.type.googleapis.com.OrderVoPb.verify(message.value);
+                        if (error)
+                            return "value." + error;
+                    }
+                    return null;
+                };
+
+                /**
+                 * Creates a Data message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {type.googleapis.com.Data} Data
+                 */
+                Data.fromObject = function fromObject(object) {
+                    if (object instanceof $root.type.googleapis.com.Data)
+                        return object;
+                    var message = new $root.type.googleapis.com.Data();
+                    if (object.typeUrl != null)
+                        message.typeUrl = String(object.typeUrl);
+                    if (object.value != null) {
+                        if (typeof object.value !== "object")
+                            throw TypeError(".type.googleapis.com.Data.value: object expected");
+                        message.value = $root.type.googleapis.com.OrderVoPb.fromObject(object.value);
+                    }
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a Data message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.Data} message Data
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                Data.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.typeUrl = "";
+                        object.value = null;
+                    }
+                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
+                        object.typeUrl = message.typeUrl;
+                    if (message.value != null && message.hasOwnProperty("value"))
+                        object.value = $root.type.googleapis.com.OrderVoPb.toObject(message.value, options);
+                    return object;
+                };
+
+                /**
+                 * Converts this Data to JSON.
+                 * @function toJSON
+                 * @memberof type.googleapis.com.Data
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                Data.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for Data
+                 * @function getTypeUrl
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                Data.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/type.googleapis.com.Data";
+                };
+
+                return Data;
+            })();
+
+            com.OrderVoPb = (function() {
+
+                /**
+                 * Properties of an OrderVoPb.
+                 * @memberof type.googleapis.com
+                 * @interface IOrderVoPb
+                 * @property {string|null} [price] OrderVoPb price
+                 * @property {string|null} [amount] OrderVoPb amount
+                 * @property {string|null} [side] OrderVoPb side
+                 * @property {number|Long|null} [createddate] OrderVoPb createddate
+                 * @property {number|Long|null} [id] OrderVoPb id
+                 */
+
+                /**
+                 * Constructs a new OrderVoPb.
+                 * @memberof type.googleapis.com
+                 * @classdesc Represents an OrderVoPb.
+                 * @implements IOrderVoPb
+                 * @constructor
+                 * @param {type.googleapis.com.IOrderVoPb=} [properties] Properties to set
+                 */
+                function OrderVoPb(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * OrderVoPb price.
+                 * @member {string} price
+                 * @memberof type.googleapis.com.OrderVoPb
+                 * @instance
+                 */
+                OrderVoPb.prototype.price = "";
+
+                /**
+                 * OrderVoPb amount.
+                 * @member {string} amount
+                 * @memberof type.googleapis.com.OrderVoPb
+                 * @instance
+                 */
+                OrderVoPb.prototype.amount = "";
+
+                /**
+                 * OrderVoPb side.
+                 * @member {string} side
+                 * @memberof type.googleapis.com.OrderVoPb
+                 * @instance
+                 */
+                OrderVoPb.prototype.side = "";
+
+                /**
+                 * OrderVoPb createddate.
+                 * @member {number|Long} createddate
+                 * @memberof type.googleapis.com.OrderVoPb
+                 * @instance
+                 */
+                OrderVoPb.prototype.createddate = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                /**
+                 * OrderVoPb id.
+                 * @member {number|Long} id
+                 * @memberof type.googleapis.com.OrderVoPb
+                 * @instance
+                 */
+                OrderVoPb.prototype.id = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                /**
+                 * Creates a new OrderVoPb instance using the specified properties.
+                 * @function create
+                 * @memberof type.googleapis.com.OrderVoPb
+                 * @static
+                 * @param {type.googleapis.com.IOrderVoPb=} [properties] Properties to set
+                 * @returns {type.googleapis.com.OrderVoPb} OrderVoPb instance
+                 */
+                OrderVoPb.create = function create(properties) {
+                    return new OrderVoPb(properties);
+                };
+
+                /**
+                 * Encodes the specified OrderVoPb message. Does not implicitly {@link type.googleapis.com.OrderVoPb.verify|verify} messages.
+                 * @function encode
+                 * @memberof type.googleapis.com.OrderVoPb
+                 * @static
+                 * @param {type.googleapis.com.IOrderVoPb} message OrderVoPb message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                OrderVoPb.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.price != null && Object.hasOwnProperty.call(message, "price"))
+                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.price);
+                    if (message.amount != null && Object.hasOwnProperty.call(message, "amount"))
+                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.amount);
+                    if (message.side != null && Object.hasOwnProperty.call(message, "side"))
+                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.side);
+                    if (message.createddate != null && Object.hasOwnProperty.call(message, "createddate"))
+                        writer.uint32(/* id 4, wireType 0 =*/32).int64(message.createddate);
+                    if (message.id != null && Object.hasOwnProperty.call(message, "id"))
+                        writer.uint32(/* id 5, wireType 0 =*/40).int64(message.id);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified OrderVoPb message, length delimited. Does not implicitly {@link type.googleapis.com.OrderVoPb.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof type.googleapis.com.OrderVoPb
+                 * @static
+                 * @param {type.googleapis.com.IOrderVoPb} message OrderVoPb message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                OrderVoPb.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes an OrderVoPb message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof type.googleapis.com.OrderVoPb
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {type.googleapis.com.OrderVoPb} OrderVoPb
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                OrderVoPb.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.type.googleapis.com.OrderVoPb();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.price = reader.string();
+                                break;
+                            }
+                        case 2: {
+                                message.amount = reader.string();
+                                break;
+                            }
+                        case 3: {
+                                message.side = reader.string();
+                                break;
+                            }
+                        case 4: {
+                                message.createddate = reader.int64();
+                                break;
+                            }
+                        case 5: {
+                                message.id = reader.int64();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes an OrderVoPb message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof type.googleapis.com.OrderVoPb
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {type.googleapis.com.OrderVoPb} OrderVoPb
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                OrderVoPb.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies an OrderVoPb message.
+                 * @function verify
+                 * @memberof type.googleapis.com.OrderVoPb
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                OrderVoPb.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.price != null && message.hasOwnProperty("price"))
+                        if (!$util.isString(message.price))
+                            return "price: string expected";
+                    if (message.amount != null && message.hasOwnProperty("amount"))
+                        if (!$util.isString(message.amount))
+                            return "amount: string expected";
+                    if (message.side != null && message.hasOwnProperty("side"))
+                        if (!$util.isString(message.side))
+                            return "side: string expected";
+                    if (message.createddate != null && message.hasOwnProperty("createddate"))
+                        if (!$util.isInteger(message.createddate) && !(message.createddate && $util.isInteger(message.createddate.low) && $util.isInteger(message.createddate.high)))
+                            return "createddate: integer|Long expected";
+                    if (message.id != null && message.hasOwnProperty("id"))
+                        if (!$util.isInteger(message.id) && !(message.id && $util.isInteger(message.id.low) && $util.isInteger(message.id.high)))
+                            return "id: integer|Long expected";
+                    return null;
+                };
+
+                /**
+                 * Creates an OrderVoPb message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof type.googleapis.com.OrderVoPb
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {type.googleapis.com.OrderVoPb} OrderVoPb
+                 */
+                OrderVoPb.fromObject = function fromObject(object) {
+                    if (object instanceof $root.type.googleapis.com.OrderVoPb)
+                        return object;
+                    var message = new $root.type.googleapis.com.OrderVoPb();
+                    if (object.price != null)
+                        message.price = String(object.price);
+                    if (object.amount != null)
+                        message.amount = String(object.amount);
+                    if (object.side != null)
+                        message.side = String(object.side);
+                    if (object.createddate != null)
+                        if ($util.Long)
+                            (message.createddate = $util.Long.fromValue(object.createddate)).unsigned = false;
+                        else if (typeof object.createddate === "string")
+                            message.createddate = parseInt(object.createddate, 10);
+                        else if (typeof object.createddate === "number")
+                            message.createddate = object.createddate;
+                        else if (typeof object.createddate === "object")
+                            message.createddate = new $util.LongBits(object.createddate.low >>> 0, object.createddate.high >>> 0).toNumber();
+                    if (object.id != null)
+                        if ($util.Long)
+                            (message.id = $util.Long.fromValue(object.id)).unsigned = false;
+                        else if (typeof object.id === "string")
+                            message.id = parseInt(object.id, 10);
+                        else if (typeof object.id === "number")
+                            message.id = object.id;
+                        else if (typeof object.id === "object")
+                            message.id = new $util.LongBits(object.id.low >>> 0, object.id.high >>> 0).toNumber();
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from an OrderVoPb message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof type.googleapis.com.OrderVoPb
+                 * @static
+                 * @param {type.googleapis.com.OrderVoPb} message OrderVoPb
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                OrderVoPb.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.price = "";
+                        object.amount = "";
+                        object.side = "";
+                        if ($util.Long) {
+                            var long = new $util.Long(0, 0, false);
+                            object.createddate = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                        } else
+                            object.createddate = options.longs === String ? "0" : 0;
+                        if ($util.Long) {
+                            var long = new $util.Long(0, 0, false);
+                            object.id = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                        } else
+                            object.id = options.longs === String ? "0" : 0;
+                    }
+                    if (message.price != null && message.hasOwnProperty("price"))
+                        object.price = message.price;
+                    if (message.amount != null && message.hasOwnProperty("amount"))
+                        object.amount = message.amount;
+                    if (message.side != null && message.hasOwnProperty("side"))
+                        object.side = message.side;
+                    if (message.createddate != null && message.hasOwnProperty("createddate"))
+                        if (typeof message.createddate === "number")
+                            object.createddate = options.longs === String ? String(message.createddate) : message.createddate;
+                        else
+                            object.createddate = options.longs === String ? $util.Long.prototype.toString.call(message.createddate) : options.longs === Number ? new $util.LongBits(message.createddate.low >>> 0, message.createddate.high >>> 0).toNumber() : message.createddate;
+                    if (message.id != null && message.hasOwnProperty("id"))
+                        if (typeof message.id === "number")
+                            object.id = options.longs === String ? String(message.id) : message.id;
+                        else
+                            object.id = options.longs === String ? $util.Long.prototype.toString.call(message.id) : options.longs === Number ? new $util.LongBits(message.id.low >>> 0, message.id.high >>> 0).toNumber() : message.id;
+                    return object;
+                };
+
+                /**
+                 * Converts this OrderVoPb to JSON.
+                 * @function toJSON
+                 * @memberof type.googleapis.com.OrderVoPb
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                OrderVoPb.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for OrderVoPb
+                 * @function getTypeUrl
+                 * @memberof type.googleapis.com.OrderVoPb
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                OrderVoPb.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/type.googleapis.com.OrderVoPb";
+                };
+
+                return OrderVoPb;
+            })();
+
+            return com;
+        })();
+
+        return googleapis;
+    })();
+
+    return type;
+})();
+
+module.exports = $root;

+ 91 - 0
client/hotconi/proto/type.googleapis.com.FillsPbMsg.json

@@ -0,0 +1,91 @@
+{
+  "options": {
+    "syntax": "proto3"
+  },
+  "nested": {
+    "type": {
+      "nested": {
+        "googleapis": {
+          "nested": {
+            "com": {
+              "nested": {
+                "Response": {
+                  "fields": {
+                    "biz": {
+                      "type": "string",
+                      "id": 1
+                    },
+                    "type": {
+                      "type": "string",
+                      "id": 2
+                    },
+                    "base": {
+                      "type": "string",
+                      "id": 3
+                    },
+                    "quote": {
+                      "type": "string",
+                      "id": 4
+                    },
+                    "contractcode": {
+                      "type": "string",
+                      "id": 5
+                    },
+                    "granularity": {
+                      "type": "string",
+                      "id": 6
+                    },
+                    "data": {
+                      "type": "Data",
+                      "id": 7
+                    },
+                    "env": {
+                      "type": "int32",
+                      "id": 8
+                    }
+                  }
+                },
+                "Data": {
+                  "fields": {
+                    "typeUrl": {
+                      "type": "string",
+                      "id": 1
+                    },
+                    "value": {
+                      "type": "OrderVoPb",
+                      "id": 2
+                    }
+                  }
+                },
+                "OrderVoPb": {
+                  "fields": {
+                    "price": {
+                      "type": "string",
+                      "id": 1
+                    },
+                    "amount": {
+                      "type": "string",
+                      "id": 2
+                    },
+                    "side": {
+                      "type": "string",
+                      "id": 3
+                    },
+                    "createddate": {
+                      "type": "int64",
+                      "id": 4
+                    },
+                    "id": {
+                      "type": "int64",
+                      "id": 5
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}

+ 1259 - 0
client/hotconi/proto/type.googleapis.com.FundRatesPbMsg.js

@@ -0,0 +1,1259 @@
+/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/
+"use strict";
+
+var $protobuf = require("protobufjs/minimal");
+
+// Common aliases
+var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;
+
+// Exported root namespace
+var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});
+
+$root.type = (function() {
+
+    /**
+     * Namespace type.
+     * @exports type
+     * @namespace
+     */
+    var type = {};
+
+    type.googleapis = (function() {
+
+        /**
+         * Namespace googleapis.
+         * @memberof type
+         * @namespace
+         */
+        var googleapis = {};
+
+        googleapis.com = (function() {
+
+            /**
+             * Namespace com.
+             * @memberof type.googleapis
+             * @namespace
+             */
+            var com = {};
+
+            com.Response = (function() {
+
+                /**
+                 * Properties of a Response.
+                 * @memberof type.googleapis.com
+                 * @interface IResponse
+                 * @property {string|null} [biz] Response biz
+                 * @property {string|null} [type] Response type
+                 * @property {string|null} [base] Response base
+                 * @property {string|null} [quote] Response quote
+                 * @property {string|null} [contractcode] Response contractcode
+                 * @property {string|null} [granularity] Response granularity
+                 * @property {type.googleapis.com.IData|null} [data] Response data
+                 * @property {number|null} [env] Response env
+                 */
+
+                /**
+                 * Constructs a new Response.
+                 * @memberof type.googleapis.com
+                 * @classdesc Represents a Response.
+                 * @implements IResponse
+                 * @constructor
+                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
+                 */
+                function Response(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Response biz.
+                 * @member {string} biz
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.biz = "";
+
+                /**
+                 * Response type.
+                 * @member {string} type
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.type = "";
+
+                /**
+                 * Response base.
+                 * @member {string} base
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.base = "";
+
+                /**
+                 * Response quote.
+                 * @member {string} quote
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.quote = "";
+
+                /**
+                 * Response contractcode.
+                 * @member {string} contractcode
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.contractcode = "";
+
+                /**
+                 * Response granularity.
+                 * @member {string} granularity
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.granularity = "";
+
+                /**
+                 * Response data.
+                 * @member {type.googleapis.com.IData|null|undefined} data
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.data = null;
+
+                /**
+                 * Response env.
+                 * @member {number} env
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.env = 0;
+
+                /**
+                 * Creates a new Response instance using the specified properties.
+                 * @function create
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
+                 * @returns {type.googleapis.com.Response} Response instance
+                 */
+                Response.create = function create(properties) {
+                    return new Response(properties);
+                };
+
+                /**
+                 * Encodes the specified Response message. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
+                 * @function encode
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Response.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.biz != null && Object.hasOwnProperty.call(message, "biz"))
+                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.biz);
+                    if (message.type != null && Object.hasOwnProperty.call(message, "type"))
+                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.type);
+                    if (message.base != null && Object.hasOwnProperty.call(message, "base"))
+                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.base);
+                    if (message.quote != null && Object.hasOwnProperty.call(message, "quote"))
+                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.quote);
+                    if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
+                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.contractcode);
+                    if (message.granularity != null && Object.hasOwnProperty.call(message, "granularity"))
+                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.granularity);
+                    if (message.data != null && Object.hasOwnProperty.call(message, "data"))
+                        $root.type.googleapis.com.Data.encode(message.data, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
+                    if (message.env != null && Object.hasOwnProperty.call(message, "env"))
+                        writer.uint32(/* id 8, wireType 0 =*/64).int32(message.env);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified Response message, length delimited. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Response.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a Response message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {type.googleapis.com.Response} Response
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Response.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.type.googleapis.com.Response();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.biz = reader.string();
+                                break;
+                            }
+                        case 2: {
+                                message.type = reader.string();
+                                break;
+                            }
+                        case 3: {
+                                message.base = reader.string();
+                                break;
+                            }
+                        case 4: {
+                                message.quote = reader.string();
+                                break;
+                            }
+                        case 5: {
+                                message.contractcode = reader.string();
+                                break;
+                            }
+                        case 6: {
+                                message.granularity = reader.string();
+                                break;
+                            }
+                        case 7: {
+                                message.data = $root.type.googleapis.com.Data.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 8: {
+                                message.env = reader.int32();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a Response message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {type.googleapis.com.Response} Response
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Response.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a Response message.
+                 * @function verify
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                Response.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.biz != null && message.hasOwnProperty("biz"))
+                        if (!$util.isString(message.biz))
+                            return "biz: string expected";
+                    if (message.type != null && message.hasOwnProperty("type"))
+                        if (!$util.isString(message.type))
+                            return "type: string expected";
+                    if (message.base != null && message.hasOwnProperty("base"))
+                        if (!$util.isString(message.base))
+                            return "base: string expected";
+                    if (message.quote != null && message.hasOwnProperty("quote"))
+                        if (!$util.isString(message.quote))
+                            return "quote: string expected";
+                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                        if (!$util.isString(message.contractcode))
+                            return "contractcode: string expected";
+                    if (message.granularity != null && message.hasOwnProperty("granularity"))
+                        if (!$util.isString(message.granularity))
+                            return "granularity: string expected";
+                    if (message.data != null && message.hasOwnProperty("data")) {
+                        var error = $root.type.googleapis.com.Data.verify(message.data);
+                        if (error)
+                            return "data." + error;
+                    }
+                    if (message.env != null && message.hasOwnProperty("env"))
+                        if (!$util.isInteger(message.env))
+                            return "env: integer expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a Response message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {type.googleapis.com.Response} Response
+                 */
+                Response.fromObject = function fromObject(object) {
+                    if (object instanceof $root.type.googleapis.com.Response)
+                        return object;
+                    var message = new $root.type.googleapis.com.Response();
+                    if (object.biz != null)
+                        message.biz = String(object.biz);
+                    if (object.type != null)
+                        message.type = String(object.type);
+                    if (object.base != null)
+                        message.base = String(object.base);
+                    if (object.quote != null)
+                        message.quote = String(object.quote);
+                    if (object.contractcode != null)
+                        message.contractcode = String(object.contractcode);
+                    if (object.granularity != null)
+                        message.granularity = String(object.granularity);
+                    if (object.data != null) {
+                        if (typeof object.data !== "object")
+                            throw TypeError(".type.googleapis.com.Response.data: object expected");
+                        message.data = $root.type.googleapis.com.Data.fromObject(object.data);
+                    }
+                    if (object.env != null)
+                        message.env = object.env | 0;
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a Response message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.Response} message Response
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                Response.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.biz = "";
+                        object.type = "";
+                        object.base = "";
+                        object.quote = "";
+                        object.contractcode = "";
+                        object.granularity = "";
+                        object.data = null;
+                        object.env = 0;
+                    }
+                    if (message.biz != null && message.hasOwnProperty("biz"))
+                        object.biz = message.biz;
+                    if (message.type != null && message.hasOwnProperty("type"))
+                        object.type = message.type;
+                    if (message.base != null && message.hasOwnProperty("base"))
+                        object.base = message.base;
+                    if (message.quote != null && message.hasOwnProperty("quote"))
+                        object.quote = message.quote;
+                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                        object.contractcode = message.contractcode;
+                    if (message.granularity != null && message.hasOwnProperty("granularity"))
+                        object.granularity = message.granularity;
+                    if (message.data != null && message.hasOwnProperty("data"))
+                        object.data = $root.type.googleapis.com.Data.toObject(message.data, options);
+                    if (message.env != null && message.hasOwnProperty("env"))
+                        object.env = message.env;
+                    return object;
+                };
+
+                /**
+                 * Converts this Response to JSON.
+                 * @function toJSON
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                Response.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for Response
+                 * @function getTypeUrl
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                Response.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/type.googleapis.com.Response";
+                };
+
+                return Response;
+            })();
+
+            com.Data = (function() {
+
+                /**
+                 * Properties of a Data.
+                 * @memberof type.googleapis.com
+                 * @interface IData
+                 * @property {string|null} [typeUrl] Data typeUrl
+                 * @property {type.googleapis.com.IContractInfo|null} [value] Data value
+                 */
+
+                /**
+                 * Constructs a new Data.
+                 * @memberof type.googleapis.com
+                 * @classdesc Represents a Data.
+                 * @implements IData
+                 * @constructor
+                 * @param {type.googleapis.com.IData=} [properties] Properties to set
+                 */
+                function Data(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Data typeUrl.
+                 * @member {string} typeUrl
+                 * @memberof type.googleapis.com.Data
+                 * @instance
+                 */
+                Data.prototype.typeUrl = "";
+
+                /**
+                 * Data value.
+                 * @member {type.googleapis.com.IContractInfo|null|undefined} value
+                 * @memberof type.googleapis.com.Data
+                 * @instance
+                 */
+                Data.prototype.value = null;
+
+                /**
+                 * Creates a new Data instance using the specified properties.
+                 * @function create
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.IData=} [properties] Properties to set
+                 * @returns {type.googleapis.com.Data} Data instance
+                 */
+                Data.create = function create(properties) {
+                    return new Data(properties);
+                };
+
+                /**
+                 * Encodes the specified Data message. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
+                 * @function encode
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Data.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.typeUrl != null && Object.hasOwnProperty.call(message, "typeUrl"))
+                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.typeUrl);
+                    if (message.value != null && Object.hasOwnProperty.call(message, "value"))
+                        $root.type.googleapis.com.ContractInfo.encode(message.value, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified Data message, length delimited. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Data.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a Data message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {type.googleapis.com.Data} Data
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Data.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.type.googleapis.com.Data();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.typeUrl = reader.string();
+                                break;
+                            }
+                        case 2: {
+                                message.value = $root.type.googleapis.com.ContractInfo.decode(reader, reader.uint32());
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a Data message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {type.googleapis.com.Data} Data
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Data.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a Data message.
+                 * @function verify
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                Data.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
+                        if (!$util.isString(message.typeUrl))
+                            return "typeUrl: string expected";
+                    if (message.value != null && message.hasOwnProperty("value")) {
+                        var error = $root.type.googleapis.com.ContractInfo.verify(message.value);
+                        if (error)
+                            return "value." + error;
+                    }
+                    return null;
+                };
+
+                /**
+                 * Creates a Data message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {type.googleapis.com.Data} Data
+                 */
+                Data.fromObject = function fromObject(object) {
+                    if (object instanceof $root.type.googleapis.com.Data)
+                        return object;
+                    var message = new $root.type.googleapis.com.Data();
+                    if (object.typeUrl != null)
+                        message.typeUrl = String(object.typeUrl);
+                    if (object.value != null) {
+                        if (typeof object.value !== "object")
+                            throw TypeError(".type.googleapis.com.Data.value: object expected");
+                        message.value = $root.type.googleapis.com.ContractInfo.fromObject(object.value);
+                    }
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a Data message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.Data} message Data
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                Data.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.typeUrl = "";
+                        object.value = null;
+                    }
+                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
+                        object.typeUrl = message.typeUrl;
+                    if (message.value != null && message.hasOwnProperty("value"))
+                        object.value = $root.type.googleapis.com.ContractInfo.toObject(message.value, options);
+                    return object;
+                };
+
+                /**
+                 * Converts this Data to JSON.
+                 * @function toJSON
+                 * @memberof type.googleapis.com.Data
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                Data.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for Data
+                 * @function getTypeUrl
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                Data.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/type.googleapis.com.Data";
+                };
+
+                return Data;
+            })();
+
+            com.ContractInfo = (function() {
+
+                /**
+                 * Properties of a ContractInfo.
+                 * @memberof type.googleapis.com
+                 * @interface IContractInfo
+                 * @property {string|null} [contractcode] ContractInfo contractcode
+                 * @property {string|null} [markprice] ContractInfo markprice
+                 * @property {string|null} [indexprice] ContractInfo indexprice
+                 * @property {string|null} [feeRate] ContractInfo feeRate
+                 * @property {string|null} [estimateFeeRate] ContractInfo estimateFeeRate
+                 * @property {number|Long|null} [nextLiquidationInterval] ContractInfo nextLiquidationInterval
+                 * @property {string|null} [totalPosition] ContractInfo totalPosition
+                 * @property {string|null} [indexCny] ContractInfo indexCny
+                 * @property {string|null} [markCny] ContractInfo markCny
+                 * @property {number|null} [env] ContractInfo env
+                 * @property {string|null} [base] ContractInfo base
+                 * @property {string|null} [indexBase] ContractInfo indexBase
+                 * @property {string|null} [quote] ContractInfo quote
+                 * @property {string|null} [baseDisplayName] ContractInfo baseDisplayName
+                 * @property {string|null} [indexBaseDisplayName] ContractInfo indexBaseDisplayName
+                 * @property {string|null} [quoteDisplayName] ContractInfo quoteDisplayName
+                 * @property {string|null} [preDeliveryPrice] ContractInfo preDeliveryPrice
+                 * @property {number|null} [online] ContractInfo online
+                 */
+
+                /**
+                 * Constructs a new ContractInfo.
+                 * @memberof type.googleapis.com
+                 * @classdesc Represents a ContractInfo.
+                 * @implements IContractInfo
+                 * @constructor
+                 * @param {type.googleapis.com.IContractInfo=} [properties] Properties to set
+                 */
+                function ContractInfo(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * ContractInfo contractcode.
+                 * @member {string} contractcode
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @instance
+                 */
+                ContractInfo.prototype.contractcode = "";
+
+                /**
+                 * ContractInfo markprice.
+                 * @member {string} markprice
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @instance
+                 */
+                ContractInfo.prototype.markprice = "";
+
+                /**
+                 * ContractInfo indexprice.
+                 * @member {string} indexprice
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @instance
+                 */
+                ContractInfo.prototype.indexprice = "";
+
+                /**
+                 * ContractInfo feeRate.
+                 * @member {string} feeRate
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @instance
+                 */
+                ContractInfo.prototype.feeRate = "";
+
+                /**
+                 * ContractInfo estimateFeeRate.
+                 * @member {string} estimateFeeRate
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @instance
+                 */
+                ContractInfo.prototype.estimateFeeRate = "";
+
+                /**
+                 * ContractInfo nextLiquidationInterval.
+                 * @member {number|Long} nextLiquidationInterval
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @instance
+                 */
+                ContractInfo.prototype.nextLiquidationInterval = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                /**
+                 * ContractInfo totalPosition.
+                 * @member {string} totalPosition
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @instance
+                 */
+                ContractInfo.prototype.totalPosition = "";
+
+                /**
+                 * ContractInfo indexCny.
+                 * @member {string} indexCny
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @instance
+                 */
+                ContractInfo.prototype.indexCny = "";
+
+                /**
+                 * ContractInfo markCny.
+                 * @member {string} markCny
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @instance
+                 */
+                ContractInfo.prototype.markCny = "";
+
+                /**
+                 * ContractInfo env.
+                 * @member {number} env
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @instance
+                 */
+                ContractInfo.prototype.env = 0;
+
+                /**
+                 * ContractInfo base.
+                 * @member {string} base
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @instance
+                 */
+                ContractInfo.prototype.base = "";
+
+                /**
+                 * ContractInfo indexBase.
+                 * @member {string} indexBase
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @instance
+                 */
+                ContractInfo.prototype.indexBase = "";
+
+                /**
+                 * ContractInfo quote.
+                 * @member {string} quote
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @instance
+                 */
+                ContractInfo.prototype.quote = "";
+
+                /**
+                 * ContractInfo baseDisplayName.
+                 * @member {string} baseDisplayName
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @instance
+                 */
+                ContractInfo.prototype.baseDisplayName = "";
+
+                /**
+                 * ContractInfo indexBaseDisplayName.
+                 * @member {string} indexBaseDisplayName
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @instance
+                 */
+                ContractInfo.prototype.indexBaseDisplayName = "";
+
+                /**
+                 * ContractInfo quoteDisplayName.
+                 * @member {string} quoteDisplayName
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @instance
+                 */
+                ContractInfo.prototype.quoteDisplayName = "";
+
+                /**
+                 * ContractInfo preDeliveryPrice.
+                 * @member {string} preDeliveryPrice
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @instance
+                 */
+                ContractInfo.prototype.preDeliveryPrice = "";
+
+                /**
+                 * ContractInfo online.
+                 * @member {number} online
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @instance
+                 */
+                ContractInfo.prototype.online = 0;
+
+                /**
+                 * Creates a new ContractInfo instance using the specified properties.
+                 * @function create
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @static
+                 * @param {type.googleapis.com.IContractInfo=} [properties] Properties to set
+                 * @returns {type.googleapis.com.ContractInfo} ContractInfo instance
+                 */
+                ContractInfo.create = function create(properties) {
+                    return new ContractInfo(properties);
+                };
+
+                /**
+                 * Encodes the specified ContractInfo message. Does not implicitly {@link type.googleapis.com.ContractInfo.verify|verify} messages.
+                 * @function encode
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @static
+                 * @param {type.googleapis.com.IContractInfo} message ContractInfo message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                ContractInfo.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
+                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.contractcode);
+                    if (message.markprice != null && Object.hasOwnProperty.call(message, "markprice"))
+                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.markprice);
+                    if (message.indexprice != null && Object.hasOwnProperty.call(message, "indexprice"))
+                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.indexprice);
+                    if (message.feeRate != null && Object.hasOwnProperty.call(message, "feeRate"))
+                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.feeRate);
+                    if (message.estimateFeeRate != null && Object.hasOwnProperty.call(message, "estimateFeeRate"))
+                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.estimateFeeRate);
+                    if (message.nextLiquidationInterval != null && Object.hasOwnProperty.call(message, "nextLiquidationInterval"))
+                        writer.uint32(/* id 6, wireType 0 =*/48).int64(message.nextLiquidationInterval);
+                    if (message.totalPosition != null && Object.hasOwnProperty.call(message, "totalPosition"))
+                        writer.uint32(/* id 7, wireType 2 =*/58).string(message.totalPosition);
+                    if (message.indexCny != null && Object.hasOwnProperty.call(message, "indexCny"))
+                        writer.uint32(/* id 8, wireType 2 =*/66).string(message.indexCny);
+                    if (message.markCny != null && Object.hasOwnProperty.call(message, "markCny"))
+                        writer.uint32(/* id 9, wireType 2 =*/74).string(message.markCny);
+                    if (message.env != null && Object.hasOwnProperty.call(message, "env"))
+                        writer.uint32(/* id 10, wireType 0 =*/80).int32(message.env);
+                    if (message.base != null && Object.hasOwnProperty.call(message, "base"))
+                        writer.uint32(/* id 11, wireType 2 =*/90).string(message.base);
+                    if (message.indexBase != null && Object.hasOwnProperty.call(message, "indexBase"))
+                        writer.uint32(/* id 12, wireType 2 =*/98).string(message.indexBase);
+                    if (message.quote != null && Object.hasOwnProperty.call(message, "quote"))
+                        writer.uint32(/* id 13, wireType 2 =*/106).string(message.quote);
+                    if (message.baseDisplayName != null && Object.hasOwnProperty.call(message, "baseDisplayName"))
+                        writer.uint32(/* id 14, wireType 2 =*/114).string(message.baseDisplayName);
+                    if (message.indexBaseDisplayName != null && Object.hasOwnProperty.call(message, "indexBaseDisplayName"))
+                        writer.uint32(/* id 15, wireType 2 =*/122).string(message.indexBaseDisplayName);
+                    if (message.quoteDisplayName != null && Object.hasOwnProperty.call(message, "quoteDisplayName"))
+                        writer.uint32(/* id 16, wireType 2 =*/130).string(message.quoteDisplayName);
+                    if (message.preDeliveryPrice != null && Object.hasOwnProperty.call(message, "preDeliveryPrice"))
+                        writer.uint32(/* id 17, wireType 2 =*/138).string(message.preDeliveryPrice);
+                    if (message.online != null && Object.hasOwnProperty.call(message, "online"))
+                        writer.uint32(/* id 18, wireType 0 =*/144).int32(message.online);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified ContractInfo message, length delimited. Does not implicitly {@link type.googleapis.com.ContractInfo.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @static
+                 * @param {type.googleapis.com.IContractInfo} message ContractInfo message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                ContractInfo.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a ContractInfo message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {type.googleapis.com.ContractInfo} ContractInfo
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                ContractInfo.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.type.googleapis.com.ContractInfo();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.contractcode = reader.string();
+                                break;
+                            }
+                        case 2: {
+                                message.markprice = reader.string();
+                                break;
+                            }
+                        case 3: {
+                                message.indexprice = reader.string();
+                                break;
+                            }
+                        case 4: {
+                                message.feeRate = reader.string();
+                                break;
+                            }
+                        case 5: {
+                                message.estimateFeeRate = reader.string();
+                                break;
+                            }
+                        case 6: {
+                                message.nextLiquidationInterval = reader.int64();
+                                break;
+                            }
+                        case 7: {
+                                message.totalPosition = reader.string();
+                                break;
+                            }
+                        case 8: {
+                                message.indexCny = reader.string();
+                                break;
+                            }
+                        case 9: {
+                                message.markCny = reader.string();
+                                break;
+                            }
+                        case 10: {
+                                message.env = reader.int32();
+                                break;
+                            }
+                        case 11: {
+                                message.base = reader.string();
+                                break;
+                            }
+                        case 12: {
+                                message.indexBase = reader.string();
+                                break;
+                            }
+                        case 13: {
+                                message.quote = reader.string();
+                                break;
+                            }
+                        case 14: {
+                                message.baseDisplayName = reader.string();
+                                break;
+                            }
+                        case 15: {
+                                message.indexBaseDisplayName = reader.string();
+                                break;
+                            }
+                        case 16: {
+                                message.quoteDisplayName = reader.string();
+                                break;
+                            }
+                        case 17: {
+                                message.preDeliveryPrice = reader.string();
+                                break;
+                            }
+                        case 18: {
+                                message.online = reader.int32();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a ContractInfo message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {type.googleapis.com.ContractInfo} ContractInfo
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                ContractInfo.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a ContractInfo message.
+                 * @function verify
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                ContractInfo.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                        if (!$util.isString(message.contractcode))
+                            return "contractcode: string expected";
+                    if (message.markprice != null && message.hasOwnProperty("markprice"))
+                        if (!$util.isString(message.markprice))
+                            return "markprice: string expected";
+                    if (message.indexprice != null && message.hasOwnProperty("indexprice"))
+                        if (!$util.isString(message.indexprice))
+                            return "indexprice: string expected";
+                    if (message.feeRate != null && message.hasOwnProperty("feeRate"))
+                        if (!$util.isString(message.feeRate))
+                            return "feeRate: string expected";
+                    if (message.estimateFeeRate != null && message.hasOwnProperty("estimateFeeRate"))
+                        if (!$util.isString(message.estimateFeeRate))
+                            return "estimateFeeRate: string expected";
+                    if (message.nextLiquidationInterval != null && message.hasOwnProperty("nextLiquidationInterval"))
+                        if (!$util.isInteger(message.nextLiquidationInterval) && !(message.nextLiquidationInterval && $util.isInteger(message.nextLiquidationInterval.low) && $util.isInteger(message.nextLiquidationInterval.high)))
+                            return "nextLiquidationInterval: integer|Long expected";
+                    if (message.totalPosition != null && message.hasOwnProperty("totalPosition"))
+                        if (!$util.isString(message.totalPosition))
+                            return "totalPosition: string expected";
+                    if (message.indexCny != null && message.hasOwnProperty("indexCny"))
+                        if (!$util.isString(message.indexCny))
+                            return "indexCny: string expected";
+                    if (message.markCny != null && message.hasOwnProperty("markCny"))
+                        if (!$util.isString(message.markCny))
+                            return "markCny: string expected";
+                    if (message.env != null && message.hasOwnProperty("env"))
+                        if (!$util.isInteger(message.env))
+                            return "env: integer expected";
+                    if (message.base != null && message.hasOwnProperty("base"))
+                        if (!$util.isString(message.base))
+                            return "base: string expected";
+                    if (message.indexBase != null && message.hasOwnProperty("indexBase"))
+                        if (!$util.isString(message.indexBase))
+                            return "indexBase: string expected";
+                    if (message.quote != null && message.hasOwnProperty("quote"))
+                        if (!$util.isString(message.quote))
+                            return "quote: string expected";
+                    if (message.baseDisplayName != null && message.hasOwnProperty("baseDisplayName"))
+                        if (!$util.isString(message.baseDisplayName))
+                            return "baseDisplayName: string expected";
+                    if (message.indexBaseDisplayName != null && message.hasOwnProperty("indexBaseDisplayName"))
+                        if (!$util.isString(message.indexBaseDisplayName))
+                            return "indexBaseDisplayName: string expected";
+                    if (message.quoteDisplayName != null && message.hasOwnProperty("quoteDisplayName"))
+                        if (!$util.isString(message.quoteDisplayName))
+                            return "quoteDisplayName: string expected";
+                    if (message.preDeliveryPrice != null && message.hasOwnProperty("preDeliveryPrice"))
+                        if (!$util.isString(message.preDeliveryPrice))
+                            return "preDeliveryPrice: string expected";
+                    if (message.online != null && message.hasOwnProperty("online"))
+                        if (!$util.isInteger(message.online))
+                            return "online: integer expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a ContractInfo message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {type.googleapis.com.ContractInfo} ContractInfo
+                 */
+                ContractInfo.fromObject = function fromObject(object) {
+                    if (object instanceof $root.type.googleapis.com.ContractInfo)
+                        return object;
+                    var message = new $root.type.googleapis.com.ContractInfo();
+                    if (object.contractcode != null)
+                        message.contractcode = String(object.contractcode);
+                    if (object.markprice != null)
+                        message.markprice = String(object.markprice);
+                    if (object.indexprice != null)
+                        message.indexprice = String(object.indexprice);
+                    if (object.feeRate != null)
+                        message.feeRate = String(object.feeRate);
+                    if (object.estimateFeeRate != null)
+                        message.estimateFeeRate = String(object.estimateFeeRate);
+                    if (object.nextLiquidationInterval != null)
+                        if ($util.Long)
+                            (message.nextLiquidationInterval = $util.Long.fromValue(object.nextLiquidationInterval)).unsigned = false;
+                        else if (typeof object.nextLiquidationInterval === "string")
+                            message.nextLiquidationInterval = parseInt(object.nextLiquidationInterval, 10);
+                        else if (typeof object.nextLiquidationInterval === "number")
+                            message.nextLiquidationInterval = object.nextLiquidationInterval;
+                        else if (typeof object.nextLiquidationInterval === "object")
+                            message.nextLiquidationInterval = new $util.LongBits(object.nextLiquidationInterval.low >>> 0, object.nextLiquidationInterval.high >>> 0).toNumber();
+                    if (object.totalPosition != null)
+                        message.totalPosition = String(object.totalPosition);
+                    if (object.indexCny != null)
+                        message.indexCny = String(object.indexCny);
+                    if (object.markCny != null)
+                        message.markCny = String(object.markCny);
+                    if (object.env != null)
+                        message.env = object.env | 0;
+                    if (object.base != null)
+                        message.base = String(object.base);
+                    if (object.indexBase != null)
+                        message.indexBase = String(object.indexBase);
+                    if (object.quote != null)
+                        message.quote = String(object.quote);
+                    if (object.baseDisplayName != null)
+                        message.baseDisplayName = String(object.baseDisplayName);
+                    if (object.indexBaseDisplayName != null)
+                        message.indexBaseDisplayName = String(object.indexBaseDisplayName);
+                    if (object.quoteDisplayName != null)
+                        message.quoteDisplayName = String(object.quoteDisplayName);
+                    if (object.preDeliveryPrice != null)
+                        message.preDeliveryPrice = String(object.preDeliveryPrice);
+                    if (object.online != null)
+                        message.online = object.online | 0;
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a ContractInfo message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @static
+                 * @param {type.googleapis.com.ContractInfo} message ContractInfo
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                ContractInfo.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.contractcode = "";
+                        object.markprice = "";
+                        object.indexprice = "";
+                        object.feeRate = "";
+                        object.estimateFeeRate = "";
+                        if ($util.Long) {
+                            var long = new $util.Long(0, 0, false);
+                            object.nextLiquidationInterval = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                        } else
+                            object.nextLiquidationInterval = options.longs === String ? "0" : 0;
+                        object.totalPosition = "";
+                        object.indexCny = "";
+                        object.markCny = "";
+                        object.env = 0;
+                        object.base = "";
+                        object.indexBase = "";
+                        object.quote = "";
+                        object.baseDisplayName = "";
+                        object.indexBaseDisplayName = "";
+                        object.quoteDisplayName = "";
+                        object.preDeliveryPrice = "";
+                        object.online = 0;
+                    }
+                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                        object.contractcode = message.contractcode;
+                    if (message.markprice != null && message.hasOwnProperty("markprice"))
+                        object.markprice = message.markprice;
+                    if (message.indexprice != null && message.hasOwnProperty("indexprice"))
+                        object.indexprice = message.indexprice;
+                    if (message.feeRate != null && message.hasOwnProperty("feeRate"))
+                        object.feeRate = message.feeRate;
+                    if (message.estimateFeeRate != null && message.hasOwnProperty("estimateFeeRate"))
+                        object.estimateFeeRate = message.estimateFeeRate;
+                    if (message.nextLiquidationInterval != null && message.hasOwnProperty("nextLiquidationInterval"))
+                        if (typeof message.nextLiquidationInterval === "number")
+                            object.nextLiquidationInterval = options.longs === String ? String(message.nextLiquidationInterval) : message.nextLiquidationInterval;
+                        else
+                            object.nextLiquidationInterval = options.longs === String ? $util.Long.prototype.toString.call(message.nextLiquidationInterval) : options.longs === Number ? new $util.LongBits(message.nextLiquidationInterval.low >>> 0, message.nextLiquidationInterval.high >>> 0).toNumber() : message.nextLiquidationInterval;
+                    if (message.totalPosition != null && message.hasOwnProperty("totalPosition"))
+                        object.totalPosition = message.totalPosition;
+                    if (message.indexCny != null && message.hasOwnProperty("indexCny"))
+                        object.indexCny = message.indexCny;
+                    if (message.markCny != null && message.hasOwnProperty("markCny"))
+                        object.markCny = message.markCny;
+                    if (message.env != null && message.hasOwnProperty("env"))
+                        object.env = message.env;
+                    if (message.base != null && message.hasOwnProperty("base"))
+                        object.base = message.base;
+                    if (message.indexBase != null && message.hasOwnProperty("indexBase"))
+                        object.indexBase = message.indexBase;
+                    if (message.quote != null && message.hasOwnProperty("quote"))
+                        object.quote = message.quote;
+                    if (message.baseDisplayName != null && message.hasOwnProperty("baseDisplayName"))
+                        object.baseDisplayName = message.baseDisplayName;
+                    if (message.indexBaseDisplayName != null && message.hasOwnProperty("indexBaseDisplayName"))
+                        object.indexBaseDisplayName = message.indexBaseDisplayName;
+                    if (message.quoteDisplayName != null && message.hasOwnProperty("quoteDisplayName"))
+                        object.quoteDisplayName = message.quoteDisplayName;
+                    if (message.preDeliveryPrice != null && message.hasOwnProperty("preDeliveryPrice"))
+                        object.preDeliveryPrice = message.preDeliveryPrice;
+                    if (message.online != null && message.hasOwnProperty("online"))
+                        object.online = message.online;
+                    return object;
+                };
+
+                /**
+                 * Converts this ContractInfo to JSON.
+                 * @function toJSON
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                ContractInfo.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for ContractInfo
+                 * @function getTypeUrl
+                 * @memberof type.googleapis.com.ContractInfo
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                ContractInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/type.googleapis.com.ContractInfo";
+                };
+
+                return ContractInfo;
+            })();
+
+            return com;
+        })();
+
+        return googleapis;
+    })();
+
+    return type;
+})();
+
+module.exports = $root;

+ 143 - 0
client/hotconi/proto/type.googleapis.com.FundRatesPbMsg.json

@@ -0,0 +1,143 @@
+{
+  "options": {
+    "syntax": "proto3"
+  },
+  "nested": {
+    "type": {
+      "nested": {
+        "googleapis": {
+          "nested": {
+            "com": {
+              "nested": {
+                "Response": {
+                  "fields": {
+                    "biz": {
+                      "type": "string",
+                      "id": 1
+                    },
+                    "type": {
+                      "type": "string",
+                      "id": 2
+                    },
+                    "base": {
+                      "type": "string",
+                      "id": 3
+                    },
+                    "quote": {
+                      "type": "string",
+                      "id": 4
+                    },
+                    "contractcode": {
+                      "type": "string",
+                      "id": 5
+                    },
+                    "granularity": {
+                      "type": "string",
+                      "id": 6
+                    },
+                    "data": {
+                      "type": "Data",
+                      "id": 7
+                    },
+                    "env": {
+                      "type": "int32",
+                      "id": 8
+                    }
+                  }
+                },
+                "Data": {
+                  "fields": {
+                    "typeUrl": {
+                      "type": "string",
+                      "id": 1
+                    },
+                    "value": {
+                      "type": "ContractInfo",
+                      "id": 2
+                    }
+                  }
+                },
+                "ContractInfo": {
+                  "fields": {
+                    "contractcode": {
+                      "type": "string",
+                      "id": 1
+                    },
+                    "markprice": {
+                      "type": "string",
+                      "id": 2
+                    },
+                    "indexprice": {
+                      "type": "string",
+                      "id": 3
+                    },
+                    "feeRate": {
+                      "type": "string",
+                      "id": 4
+                    },
+                    "estimateFeeRate": {
+                      "type": "string",
+                      "id": 5
+                    },
+                    "nextLiquidationInterval": {
+                      "type": "int64",
+                      "id": 6
+                    },
+                    "totalPosition": {
+                      "type": "string",
+                      "id": 7
+                    },
+                    "indexCny": {
+                      "type": "string",
+                      "id": 8
+                    },
+                    "markCny": {
+                      "type": "string",
+                      "id": 9
+                    },
+                    "env": {
+                      "type": "int32",
+                      "id": 10
+                    },
+                    "base": {
+                      "type": "string",
+                      "id": 11
+                    },
+                    "indexBase": {
+                      "type": "string",
+                      "id": 12
+                    },
+                    "quote": {
+                      "type": "string",
+                      "id": 13
+                    },
+                    "baseDisplayName": {
+                      "type": "string",
+                      "id": 14
+                    },
+                    "indexBaseDisplayName": {
+                      "type": "string",
+                      "id": 15
+                    },
+                    "quoteDisplayName": {
+                      "type": "string",
+                      "id": 16
+                    },
+                    "preDeliveryPrice": {
+                      "type": "string",
+                      "id": 17
+                    },
+                    "online": {
+                      "type": "int32",
+                      "id": 18
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}

+ 1167 - 0
client/hotconi/proto/type.googleapis.com.TickersPbMsg.js

@@ -0,0 +1,1167 @@
+/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/
+"use strict";
+
+var $protobuf = require("protobufjs/minimal");
+
+// Common aliases
+var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;
+
+// Exported root namespace
+var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});
+
+$root.type = (function() {
+
+    /**
+     * Namespace type.
+     * @exports type
+     * @namespace
+     */
+    var type = {};
+
+    type.googleapis = (function() {
+
+        /**
+         * Namespace googleapis.
+         * @memberof type
+         * @namespace
+         */
+        var googleapis = {};
+
+        googleapis.com = (function() {
+
+            /**
+             * Namespace com.
+             * @memberof type.googleapis
+             * @namespace
+             */
+            var com = {};
+
+            com.Response = (function() {
+
+                /**
+                 * Properties of a Response.
+                 * @memberof type.googleapis.com
+                 * @interface IResponse
+                 * @property {string|null} [biz] Response biz
+                 * @property {string|null} [type] Response type
+                 * @property {string|null} [base] Response base
+                 * @property {string|null} [quote] Response quote
+                 * @property {string|null} [contractcode] Response contractcode
+                 * @property {string|null} [granularity] Response granularity
+                 * @property {type.googleapis.com.IData|null} [data] Response data
+                 * @property {number|null} [env] Response env
+                 */
+
+                /**
+                 * Constructs a new Response.
+                 * @memberof type.googleapis.com
+                 * @classdesc Represents a Response.
+                 * @implements IResponse
+                 * @constructor
+                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
+                 */
+                function Response(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Response biz.
+                 * @member {string} biz
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.biz = "";
+
+                /**
+                 * Response type.
+                 * @member {string} type
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.type = "";
+
+                /**
+                 * Response base.
+                 * @member {string} base
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.base = "";
+
+                /**
+                 * Response quote.
+                 * @member {string} quote
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.quote = "";
+
+                /**
+                 * Response contractcode.
+                 * @member {string} contractcode
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.contractcode = "";
+
+                /**
+                 * Response granularity.
+                 * @member {string} granularity
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.granularity = "";
+
+                /**
+                 * Response data.
+                 * @member {type.googleapis.com.IData|null|undefined} data
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.data = null;
+
+                /**
+                 * Response env.
+                 * @member {number} env
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 */
+                Response.prototype.env = 0;
+
+                /**
+                 * Creates a new Response instance using the specified properties.
+                 * @function create
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
+                 * @returns {type.googleapis.com.Response} Response instance
+                 */
+                Response.create = function create(properties) {
+                    return new Response(properties);
+                };
+
+                /**
+                 * Encodes the specified Response message. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
+                 * @function encode
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Response.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.biz != null && Object.hasOwnProperty.call(message, "biz"))
+                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.biz);
+                    if (message.type != null && Object.hasOwnProperty.call(message, "type"))
+                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.type);
+                    if (message.base != null && Object.hasOwnProperty.call(message, "base"))
+                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.base);
+                    if (message.quote != null && Object.hasOwnProperty.call(message, "quote"))
+                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.quote);
+                    if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
+                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.contractcode);
+                    if (message.granularity != null && Object.hasOwnProperty.call(message, "granularity"))
+                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.granularity);
+                    if (message.data != null && Object.hasOwnProperty.call(message, "data"))
+                        $root.type.googleapis.com.Data.encode(message.data, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
+                    if (message.env != null && Object.hasOwnProperty.call(message, "env"))
+                        writer.uint32(/* id 8, wireType 0 =*/64).int32(message.env);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified Response message, length delimited. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Response.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a Response message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {type.googleapis.com.Response} Response
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Response.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.type.googleapis.com.Response();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.biz = reader.string();
+                                break;
+                            }
+                        case 2: {
+                                message.type = reader.string();
+                                break;
+                            }
+                        case 3: {
+                                message.base = reader.string();
+                                break;
+                            }
+                        case 4: {
+                                message.quote = reader.string();
+                                break;
+                            }
+                        case 5: {
+                                message.contractcode = reader.string();
+                                break;
+                            }
+                        case 6: {
+                                message.granularity = reader.string();
+                                break;
+                            }
+                        case 7: {
+                                message.data = $root.type.googleapis.com.Data.decode(reader, reader.uint32());
+                                break;
+                            }
+                        case 8: {
+                                message.env = reader.int32();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a Response message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {type.googleapis.com.Response} Response
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Response.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a Response message.
+                 * @function verify
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                Response.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.biz != null && message.hasOwnProperty("biz"))
+                        if (!$util.isString(message.biz))
+                            return "biz: string expected";
+                    if (message.type != null && message.hasOwnProperty("type"))
+                        if (!$util.isString(message.type))
+                            return "type: string expected";
+                    if (message.base != null && message.hasOwnProperty("base"))
+                        if (!$util.isString(message.base))
+                            return "base: string expected";
+                    if (message.quote != null && message.hasOwnProperty("quote"))
+                        if (!$util.isString(message.quote))
+                            return "quote: string expected";
+                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                        if (!$util.isString(message.contractcode))
+                            return "contractcode: string expected";
+                    if (message.granularity != null && message.hasOwnProperty("granularity"))
+                        if (!$util.isString(message.granularity))
+                            return "granularity: string expected";
+                    if (message.data != null && message.hasOwnProperty("data")) {
+                        var error = $root.type.googleapis.com.Data.verify(message.data);
+                        if (error)
+                            return "data." + error;
+                    }
+                    if (message.env != null && message.hasOwnProperty("env"))
+                        if (!$util.isInteger(message.env))
+                            return "env: integer expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a Response message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {type.googleapis.com.Response} Response
+                 */
+                Response.fromObject = function fromObject(object) {
+                    if (object instanceof $root.type.googleapis.com.Response)
+                        return object;
+                    var message = new $root.type.googleapis.com.Response();
+                    if (object.biz != null)
+                        message.biz = String(object.biz);
+                    if (object.type != null)
+                        message.type = String(object.type);
+                    if (object.base != null)
+                        message.base = String(object.base);
+                    if (object.quote != null)
+                        message.quote = String(object.quote);
+                    if (object.contractcode != null)
+                        message.contractcode = String(object.contractcode);
+                    if (object.granularity != null)
+                        message.granularity = String(object.granularity);
+                    if (object.data != null) {
+                        if (typeof object.data !== "object")
+                            throw TypeError(".type.googleapis.com.Response.data: object expected");
+                        message.data = $root.type.googleapis.com.Data.fromObject(object.data);
+                    }
+                    if (object.env != null)
+                        message.env = object.env | 0;
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a Response message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {type.googleapis.com.Response} message Response
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                Response.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.biz = "";
+                        object.type = "";
+                        object.base = "";
+                        object.quote = "";
+                        object.contractcode = "";
+                        object.granularity = "";
+                        object.data = null;
+                        object.env = 0;
+                    }
+                    if (message.biz != null && message.hasOwnProperty("biz"))
+                        object.biz = message.biz;
+                    if (message.type != null && message.hasOwnProperty("type"))
+                        object.type = message.type;
+                    if (message.base != null && message.hasOwnProperty("base"))
+                        object.base = message.base;
+                    if (message.quote != null && message.hasOwnProperty("quote"))
+                        object.quote = message.quote;
+                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                        object.contractcode = message.contractcode;
+                    if (message.granularity != null && message.hasOwnProperty("granularity"))
+                        object.granularity = message.granularity;
+                    if (message.data != null && message.hasOwnProperty("data"))
+                        object.data = $root.type.googleapis.com.Data.toObject(message.data, options);
+                    if (message.env != null && message.hasOwnProperty("env"))
+                        object.env = message.env;
+                    return object;
+                };
+
+                /**
+                 * Converts this Response to JSON.
+                 * @function toJSON
+                 * @memberof type.googleapis.com.Response
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                Response.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for Response
+                 * @function getTypeUrl
+                 * @memberof type.googleapis.com.Response
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                Response.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/type.googleapis.com.Response";
+                };
+
+                return Response;
+            })();
+
+            com.Data = (function() {
+
+                /**
+                 * Properties of a Data.
+                 * @memberof type.googleapis.com
+                 * @interface IData
+                 * @property {string|null} [typeUrl] Data typeUrl
+                 * @property {type.googleapis.com.IMarketData|null} [value] Data value
+                 */
+
+                /**
+                 * Constructs a new Data.
+                 * @memberof type.googleapis.com
+                 * @classdesc Represents a Data.
+                 * @implements IData
+                 * @constructor
+                 * @param {type.googleapis.com.IData=} [properties] Properties to set
+                 */
+                function Data(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * Data typeUrl.
+                 * @member {string} typeUrl
+                 * @memberof type.googleapis.com.Data
+                 * @instance
+                 */
+                Data.prototype.typeUrl = "";
+
+                /**
+                 * Data value.
+                 * @member {type.googleapis.com.IMarketData|null|undefined} value
+                 * @memberof type.googleapis.com.Data
+                 * @instance
+                 */
+                Data.prototype.value = null;
+
+                /**
+                 * Creates a new Data instance using the specified properties.
+                 * @function create
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.IData=} [properties] Properties to set
+                 * @returns {type.googleapis.com.Data} Data instance
+                 */
+                Data.create = function create(properties) {
+                    return new Data(properties);
+                };
+
+                /**
+                 * Encodes the specified Data message. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
+                 * @function encode
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Data.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.typeUrl != null && Object.hasOwnProperty.call(message, "typeUrl"))
+                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.typeUrl);
+                    if (message.value != null && Object.hasOwnProperty.call(message, "value"))
+                        $root.type.googleapis.com.MarketData.encode(message.value, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified Data message, length delimited. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                Data.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a Data message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {type.googleapis.com.Data} Data
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Data.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.type.googleapis.com.Data();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.typeUrl = reader.string();
+                                break;
+                            }
+                        case 2: {
+                                message.value = $root.type.googleapis.com.MarketData.decode(reader, reader.uint32());
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a Data message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {type.googleapis.com.Data} Data
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                Data.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a Data message.
+                 * @function verify
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                Data.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
+                        if (!$util.isString(message.typeUrl))
+                            return "typeUrl: string expected";
+                    if (message.value != null && message.hasOwnProperty("value")) {
+                        var error = $root.type.googleapis.com.MarketData.verify(message.value);
+                        if (error)
+                            return "value." + error;
+                    }
+                    return null;
+                };
+
+                /**
+                 * Creates a Data message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {type.googleapis.com.Data} Data
+                 */
+                Data.fromObject = function fromObject(object) {
+                    if (object instanceof $root.type.googleapis.com.Data)
+                        return object;
+                    var message = new $root.type.googleapis.com.Data();
+                    if (object.typeUrl != null)
+                        message.typeUrl = String(object.typeUrl);
+                    if (object.value != null) {
+                        if (typeof object.value !== "object")
+                            throw TypeError(".type.googleapis.com.Data.value: object expected");
+                        message.value = $root.type.googleapis.com.MarketData.fromObject(object.value);
+                    }
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a Data message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {type.googleapis.com.Data} message Data
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                Data.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        object.typeUrl = "";
+                        object.value = null;
+                    }
+                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
+                        object.typeUrl = message.typeUrl;
+                    if (message.value != null && message.hasOwnProperty("value"))
+                        object.value = $root.type.googleapis.com.MarketData.toObject(message.value, options);
+                    return object;
+                };
+
+                /**
+                 * Converts this Data to JSON.
+                 * @function toJSON
+                 * @memberof type.googleapis.com.Data
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                Data.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for Data
+                 * @function getTypeUrl
+                 * @memberof type.googleapis.com.Data
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                Data.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/type.googleapis.com.Data";
+                };
+
+                return Data;
+            })();
+
+            com.MarketData = (function() {
+
+                /**
+                 * Properties of a MarketData.
+                 * @memberof type.googleapis.com
+                 * @interface IMarketData
+                 * @property {number|Long|null} [createddate] MarketData createddate
+                 * @property {string|null} [high] MarketData high
+                 * @property {string|null} [low] MarketData low
+                 * @property {string|null} [amount24] MarketData amount24
+                 * @property {string|null} [size24] MarketData size24
+                 * @property {string|null} [first] MarketData first
+                 * @property {string|null} [last] MarketData last
+                 * @property {string|null} [change24] MarketData change24
+                 * @property {string|null} [changepercentage] MarketData changepercentage
+                 * @property {string|null} [buy] MarketData buy
+                 * @property {string|null} [sell] MarketData sell
+                 * @property {string|null} [contractcode] MarketData contractcode
+                 * @property {string|null} [lastcny] MarketData lastcny
+                 * @property {number|null} [env] MarketData env
+                 */
+
+                /**
+                 * Constructs a new MarketData.
+                 * @memberof type.googleapis.com
+                 * @classdesc Represents a MarketData.
+                 * @implements IMarketData
+                 * @constructor
+                 * @param {type.googleapis.com.IMarketData=} [properties] Properties to set
+                 */
+                function MarketData(properties) {
+                    if (properties)
+                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                            if (properties[keys[i]] != null)
+                                this[keys[i]] = properties[keys[i]];
+                }
+
+                /**
+                 * MarketData createddate.
+                 * @member {number|Long} createddate
+                 * @memberof type.googleapis.com.MarketData
+                 * @instance
+                 */
+                MarketData.prototype.createddate = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                /**
+                 * MarketData high.
+                 * @member {string} high
+                 * @memberof type.googleapis.com.MarketData
+                 * @instance
+                 */
+                MarketData.prototype.high = "";
+
+                /**
+                 * MarketData low.
+                 * @member {string} low
+                 * @memberof type.googleapis.com.MarketData
+                 * @instance
+                 */
+                MarketData.prototype.low = "";
+
+                /**
+                 * MarketData amount24.
+                 * @member {string} amount24
+                 * @memberof type.googleapis.com.MarketData
+                 * @instance
+                 */
+                MarketData.prototype.amount24 = "";
+
+                /**
+                 * MarketData size24.
+                 * @member {string} size24
+                 * @memberof type.googleapis.com.MarketData
+                 * @instance
+                 */
+                MarketData.prototype.size24 = "";
+
+                /**
+                 * MarketData first.
+                 * @member {string} first
+                 * @memberof type.googleapis.com.MarketData
+                 * @instance
+                 */
+                MarketData.prototype.first = "";
+
+                /**
+                 * MarketData last.
+                 * @member {string} last
+                 * @memberof type.googleapis.com.MarketData
+                 * @instance
+                 */
+                MarketData.prototype.last = "";
+
+                /**
+                 * MarketData change24.
+                 * @member {string} change24
+                 * @memberof type.googleapis.com.MarketData
+                 * @instance
+                 */
+                MarketData.prototype.change24 = "";
+
+                /**
+                 * MarketData changepercentage.
+                 * @member {string} changepercentage
+                 * @memberof type.googleapis.com.MarketData
+                 * @instance
+                 */
+                MarketData.prototype.changepercentage = "";
+
+                /**
+                 * MarketData buy.
+                 * @member {string} buy
+                 * @memberof type.googleapis.com.MarketData
+                 * @instance
+                 */
+                MarketData.prototype.buy = "";
+
+                /**
+                 * MarketData sell.
+                 * @member {string} sell
+                 * @memberof type.googleapis.com.MarketData
+                 * @instance
+                 */
+                MarketData.prototype.sell = "";
+
+                /**
+                 * MarketData contractcode.
+                 * @member {string} contractcode
+                 * @memberof type.googleapis.com.MarketData
+                 * @instance
+                 */
+                MarketData.prototype.contractcode = "";
+
+                /**
+                 * MarketData lastcny.
+                 * @member {string} lastcny
+                 * @memberof type.googleapis.com.MarketData
+                 * @instance
+                 */
+                MarketData.prototype.lastcny = "";
+
+                /**
+                 * MarketData env.
+                 * @member {number} env
+                 * @memberof type.googleapis.com.MarketData
+                 * @instance
+                 */
+                MarketData.prototype.env = 0;
+
+                /**
+                 * Creates a new MarketData instance using the specified properties.
+                 * @function create
+                 * @memberof type.googleapis.com.MarketData
+                 * @static
+                 * @param {type.googleapis.com.IMarketData=} [properties] Properties to set
+                 * @returns {type.googleapis.com.MarketData} MarketData instance
+                 */
+                MarketData.create = function create(properties) {
+                    return new MarketData(properties);
+                };
+
+                /**
+                 * Encodes the specified MarketData message. Does not implicitly {@link type.googleapis.com.MarketData.verify|verify} messages.
+                 * @function encode
+                 * @memberof type.googleapis.com.MarketData
+                 * @static
+                 * @param {type.googleapis.com.IMarketData} message MarketData message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                MarketData.encode = function encode(message, writer) {
+                    if (!writer)
+                        writer = $Writer.create();
+                    if (message.createddate != null && Object.hasOwnProperty.call(message, "createddate"))
+                        writer.uint32(/* id 1, wireType 0 =*/8).int64(message.createddate);
+                    if (message.high != null && Object.hasOwnProperty.call(message, "high"))
+                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.high);
+                    if (message.low != null && Object.hasOwnProperty.call(message, "low"))
+                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.low);
+                    if (message.amount24 != null && Object.hasOwnProperty.call(message, "amount24"))
+                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.amount24);
+                    if (message.size24 != null && Object.hasOwnProperty.call(message, "size24"))
+                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.size24);
+                    if (message.first != null && Object.hasOwnProperty.call(message, "first"))
+                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.first);
+                    if (message.last != null && Object.hasOwnProperty.call(message, "last"))
+                        writer.uint32(/* id 7, wireType 2 =*/58).string(message.last);
+                    if (message.change24 != null && Object.hasOwnProperty.call(message, "change24"))
+                        writer.uint32(/* id 8, wireType 2 =*/66).string(message.change24);
+                    if (message.changepercentage != null && Object.hasOwnProperty.call(message, "changepercentage"))
+                        writer.uint32(/* id 9, wireType 2 =*/74).string(message.changepercentage);
+                    if (message.buy != null && Object.hasOwnProperty.call(message, "buy"))
+                        writer.uint32(/* id 10, wireType 2 =*/82).string(message.buy);
+                    if (message.sell != null && Object.hasOwnProperty.call(message, "sell"))
+                        writer.uint32(/* id 11, wireType 2 =*/90).string(message.sell);
+                    if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
+                        writer.uint32(/* id 12, wireType 2 =*/98).string(message.contractcode);
+                    if (message.lastcny != null && Object.hasOwnProperty.call(message, "lastcny"))
+                        writer.uint32(/* id 13, wireType 2 =*/106).string(message.lastcny);
+                    if (message.env != null && Object.hasOwnProperty.call(message, "env"))
+                        writer.uint32(/* id 14, wireType 0 =*/112).int32(message.env);
+                    return writer;
+                };
+
+                /**
+                 * Encodes the specified MarketData message, length delimited. Does not implicitly {@link type.googleapis.com.MarketData.verify|verify} messages.
+                 * @function encodeDelimited
+                 * @memberof type.googleapis.com.MarketData
+                 * @static
+                 * @param {type.googleapis.com.IMarketData} message MarketData message or plain object to encode
+                 * @param {$protobuf.Writer} [writer] Writer to encode to
+                 * @returns {$protobuf.Writer} Writer
+                 */
+                MarketData.encodeDelimited = function encodeDelimited(message, writer) {
+                    return this.encode(message, writer).ldelim();
+                };
+
+                /**
+                 * Decodes a MarketData message from the specified reader or buffer.
+                 * @function decode
+                 * @memberof type.googleapis.com.MarketData
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @param {number} [length] Message length if known beforehand
+                 * @returns {type.googleapis.com.MarketData} MarketData
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                MarketData.decode = function decode(reader, length) {
+                    if (!(reader instanceof $Reader))
+                        reader = $Reader.create(reader);
+                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.type.googleapis.com.MarketData();
+                    while (reader.pos < end) {
+                        var tag = reader.uint32();
+                        switch (tag >>> 3) {
+                        case 1: {
+                                message.createddate = reader.int64();
+                                break;
+                            }
+                        case 2: {
+                                message.high = reader.string();
+                                break;
+                            }
+                        case 3: {
+                                message.low = reader.string();
+                                break;
+                            }
+                        case 4: {
+                                message.amount24 = reader.string();
+                                break;
+                            }
+                        case 5: {
+                                message.size24 = reader.string();
+                                break;
+                            }
+                        case 6: {
+                                message.first = reader.string();
+                                break;
+                            }
+                        case 7: {
+                                message.last = reader.string();
+                                break;
+                            }
+                        case 8: {
+                                message.change24 = reader.string();
+                                break;
+                            }
+                        case 9: {
+                                message.changepercentage = reader.string();
+                                break;
+                            }
+                        case 10: {
+                                message.buy = reader.string();
+                                break;
+                            }
+                        case 11: {
+                                message.sell = reader.string();
+                                break;
+                            }
+                        case 12: {
+                                message.contractcode = reader.string();
+                                break;
+                            }
+                        case 13: {
+                                message.lastcny = reader.string();
+                                break;
+                            }
+                        case 14: {
+                                message.env = reader.int32();
+                                break;
+                            }
+                        default:
+                            reader.skipType(tag & 7);
+                            break;
+                        }
+                    }
+                    return message;
+                };
+
+                /**
+                 * Decodes a MarketData message from the specified reader or buffer, length delimited.
+                 * @function decodeDelimited
+                 * @memberof type.googleapis.com.MarketData
+                 * @static
+                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                 * @returns {type.googleapis.com.MarketData} MarketData
+                 * @throws {Error} If the payload is not a reader or valid buffer
+                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                 */
+                MarketData.decodeDelimited = function decodeDelimited(reader) {
+                    if (!(reader instanceof $Reader))
+                        reader = new $Reader(reader);
+                    return this.decode(reader, reader.uint32());
+                };
+
+                /**
+                 * Verifies a MarketData message.
+                 * @function verify
+                 * @memberof type.googleapis.com.MarketData
+                 * @static
+                 * @param {Object.<string,*>} message Plain object to verify
+                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                 */
+                MarketData.verify = function verify(message) {
+                    if (typeof message !== "object" || message === null)
+                        return "object expected";
+                    if (message.createddate != null && message.hasOwnProperty("createddate"))
+                        if (!$util.isInteger(message.createddate) && !(message.createddate && $util.isInteger(message.createddate.low) && $util.isInteger(message.createddate.high)))
+                            return "createddate: integer|Long expected";
+                    if (message.high != null && message.hasOwnProperty("high"))
+                        if (!$util.isString(message.high))
+                            return "high: string expected";
+                    if (message.low != null && message.hasOwnProperty("low"))
+                        if (!$util.isString(message.low))
+                            return "low: string expected";
+                    if (message.amount24 != null && message.hasOwnProperty("amount24"))
+                        if (!$util.isString(message.amount24))
+                            return "amount24: string expected";
+                    if (message.size24 != null && message.hasOwnProperty("size24"))
+                        if (!$util.isString(message.size24))
+                            return "size24: string expected";
+                    if (message.first != null && message.hasOwnProperty("first"))
+                        if (!$util.isString(message.first))
+                            return "first: string expected";
+                    if (message.last != null && message.hasOwnProperty("last"))
+                        if (!$util.isString(message.last))
+                            return "last: string expected";
+                    if (message.change24 != null && message.hasOwnProperty("change24"))
+                        if (!$util.isString(message.change24))
+                            return "change24: string expected";
+                    if (message.changepercentage != null && message.hasOwnProperty("changepercentage"))
+                        if (!$util.isString(message.changepercentage))
+                            return "changepercentage: string expected";
+                    if (message.buy != null && message.hasOwnProperty("buy"))
+                        if (!$util.isString(message.buy))
+                            return "buy: string expected";
+                    if (message.sell != null && message.hasOwnProperty("sell"))
+                        if (!$util.isString(message.sell))
+                            return "sell: string expected";
+                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                        if (!$util.isString(message.contractcode))
+                            return "contractcode: string expected";
+                    if (message.lastcny != null && message.hasOwnProperty("lastcny"))
+                        if (!$util.isString(message.lastcny))
+                            return "lastcny: string expected";
+                    if (message.env != null && message.hasOwnProperty("env"))
+                        if (!$util.isInteger(message.env))
+                            return "env: integer expected";
+                    return null;
+                };
+
+                /**
+                 * Creates a MarketData message from a plain object. Also converts values to their respective internal types.
+                 * @function fromObject
+                 * @memberof type.googleapis.com.MarketData
+                 * @static
+                 * @param {Object.<string,*>} object Plain object
+                 * @returns {type.googleapis.com.MarketData} MarketData
+                 */
+                MarketData.fromObject = function fromObject(object) {
+                    if (object instanceof $root.type.googleapis.com.MarketData)
+                        return object;
+                    var message = new $root.type.googleapis.com.MarketData();
+                    if (object.createddate != null)
+                        if ($util.Long)
+                            (message.createddate = $util.Long.fromValue(object.createddate)).unsigned = false;
+                        else if (typeof object.createddate === "string")
+                            message.createddate = parseInt(object.createddate, 10);
+                        else if (typeof object.createddate === "number")
+                            message.createddate = object.createddate;
+                        else if (typeof object.createddate === "object")
+                            message.createddate = new $util.LongBits(object.createddate.low >>> 0, object.createddate.high >>> 0).toNumber();
+                    if (object.high != null)
+                        message.high = String(object.high);
+                    if (object.low != null)
+                        message.low = String(object.low);
+                    if (object.amount24 != null)
+                        message.amount24 = String(object.amount24);
+                    if (object.size24 != null)
+                        message.size24 = String(object.size24);
+                    if (object.first != null)
+                        message.first = String(object.first);
+                    if (object.last != null)
+                        message.last = String(object.last);
+                    if (object.change24 != null)
+                        message.change24 = String(object.change24);
+                    if (object.changepercentage != null)
+                        message.changepercentage = String(object.changepercentage);
+                    if (object.buy != null)
+                        message.buy = String(object.buy);
+                    if (object.sell != null)
+                        message.sell = String(object.sell);
+                    if (object.contractcode != null)
+                        message.contractcode = String(object.contractcode);
+                    if (object.lastcny != null)
+                        message.lastcny = String(object.lastcny);
+                    if (object.env != null)
+                        message.env = object.env | 0;
+                    return message;
+                };
+
+                /**
+                 * Creates a plain object from a MarketData message. Also converts values to other types if specified.
+                 * @function toObject
+                 * @memberof type.googleapis.com.MarketData
+                 * @static
+                 * @param {type.googleapis.com.MarketData} message MarketData
+                 * @param {$protobuf.IConversionOptions} [options] Conversion options
+                 * @returns {Object.<string,*>} Plain object
+                 */
+                MarketData.toObject = function toObject(message, options) {
+                    if (!options)
+                        options = {};
+                    var object = {};
+                    if (options.defaults) {
+                        if ($util.Long) {
+                            var long = new $util.Long(0, 0, false);
+                            object.createddate = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                        } else
+                            object.createddate = options.longs === String ? "0" : 0;
+                        object.high = "";
+                        object.low = "";
+                        object.amount24 = "";
+                        object.size24 = "";
+                        object.first = "";
+                        object.last = "";
+                        object.change24 = "";
+                        object.changepercentage = "";
+                        object.buy = "";
+                        object.sell = "";
+                        object.contractcode = "";
+                        object.lastcny = "";
+                        object.env = 0;
+                    }
+                    if (message.createddate != null && message.hasOwnProperty("createddate"))
+                        if (typeof message.createddate === "number")
+                            object.createddate = options.longs === String ? String(message.createddate) : message.createddate;
+                        else
+                            object.createddate = options.longs === String ? $util.Long.prototype.toString.call(message.createddate) : options.longs === Number ? new $util.LongBits(message.createddate.low >>> 0, message.createddate.high >>> 0).toNumber() : message.createddate;
+                    if (message.high != null && message.hasOwnProperty("high"))
+                        object.high = message.high;
+                    if (message.low != null && message.hasOwnProperty("low"))
+                        object.low = message.low;
+                    if (message.amount24 != null && message.hasOwnProperty("amount24"))
+                        object.amount24 = message.amount24;
+                    if (message.size24 != null && message.hasOwnProperty("size24"))
+                        object.size24 = message.size24;
+                    if (message.first != null && message.hasOwnProperty("first"))
+                        object.first = message.first;
+                    if (message.last != null && message.hasOwnProperty("last"))
+                        object.last = message.last;
+                    if (message.change24 != null && message.hasOwnProperty("change24"))
+                        object.change24 = message.change24;
+                    if (message.changepercentage != null && message.hasOwnProperty("changepercentage"))
+                        object.changepercentage = message.changepercentage;
+                    if (message.buy != null && message.hasOwnProperty("buy"))
+                        object.buy = message.buy;
+                    if (message.sell != null && message.hasOwnProperty("sell"))
+                        object.sell = message.sell;
+                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                        object.contractcode = message.contractcode;
+                    if (message.lastcny != null && message.hasOwnProperty("lastcny"))
+                        object.lastcny = message.lastcny;
+                    if (message.env != null && message.hasOwnProperty("env"))
+                        object.env = message.env;
+                    return object;
+                };
+
+                /**
+                 * Converts this MarketData to JSON.
+                 * @function toJSON
+                 * @memberof type.googleapis.com.MarketData
+                 * @instance
+                 * @returns {Object.<string,*>} JSON object
+                 */
+                MarketData.prototype.toJSON = function toJSON() {
+                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                };
+
+                /**
+                 * Gets the default type url for MarketData
+                 * @function getTypeUrl
+                 * @memberof type.googleapis.com.MarketData
+                 * @static
+                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                 * @returns {string} The default type url
+                 */
+                MarketData.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                    if (typeUrlPrefix === undefined) {
+                        typeUrlPrefix = "type.googleapis.com";
+                    }
+                    return typeUrlPrefix + "/type.googleapis.com.MarketData";
+                };
+
+                return MarketData;
+            })();
+
+            return com;
+        })();
+
+        return googleapis;
+    })();
+
+    return type;
+})();
+
+module.exports = $root;

+ 127 - 0
client/hotconi/proto/type.googleapis.com.TickersPbMsg.json

@@ -0,0 +1,127 @@
+{
+  "options": {
+    "syntax": "proto3"
+  },
+  "nested": {
+    "type": {
+      "nested": {
+        "googleapis": {
+          "nested": {
+            "com": {
+              "nested": {
+                "Response": {
+                  "fields": {
+                    "biz": {
+                      "type": "string",
+                      "id": 1
+                    },
+                    "type": {
+                      "type": "string",
+                      "id": 2
+                    },
+                    "base": {
+                      "type": "string",
+                      "id": 3
+                    },
+                    "quote": {
+                      "type": "string",
+                      "id": 4
+                    },
+                    "contractcode": {
+                      "type": "string",
+                      "id": 5
+                    },
+                    "granularity": {
+                      "type": "string",
+                      "id": 6
+                    },
+                    "data": {
+                      "type": "Data",
+                      "id": 7
+                    },
+                    "env": {
+                      "type": "int32",
+                      "id": 8
+                    }
+                  }
+                },
+                "Data": {
+                  "fields": {
+                    "typeUrl": {
+                      "type": "string",
+                      "id": 1
+                    },
+                    "value": {
+                      "type": "MarketData",
+                      "id": 2
+                    }
+                  }
+                },
+                "MarketData": {
+                  "fields": {
+                    "createddate": {
+                      "type": "int64",
+                      "id": 1
+                    },
+                    "high": {
+                      "type": "string",
+                      "id": 2
+                    },
+                    "low": {
+                      "type": "string",
+                      "id": 3
+                    },
+                    "amount24": {
+                      "type": "string",
+                      "id": 4
+                    },
+                    "size24": {
+                      "type": "string",
+                      "id": 5
+                    },
+                    "first": {
+                      "type": "string",
+                      "id": 6
+                    },
+                    "last": {
+                      "type": "string",
+                      "id": 7
+                    },
+                    "change24": {
+                      "type": "string",
+                      "id": 8
+                    },
+                    "changepercentage": {
+                      "type": "string",
+                      "id": 9
+                    },
+                    "buy": {
+                      "type": "string",
+                      "id": 10
+                    },
+                    "sell": {
+                      "type": "string",
+                      "id": 11
+                    },
+                    "contractcode": {
+                      "type": "string",
+                      "id": 12
+                    },
+                    "lastcny": {
+                      "type": "string",
+                      "id": 13
+                    },
+                    "env": {
+                      "type": "int32",
+                      "id": 14
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}

File diff suppressed because it is too large
+ 0 - 0
client/tmp/hotcoin_cookies


File diff suppressed because it is too large
+ 0 - 0
client/tmp/hotcoin_storage


Some files were not shown because too many files changed in this diff