diff --git a/mirai-core-utils/src/commonMain/kotlin/Conversions.kt b/mirai-core-utils/src/commonMain/kotlin/Conversions.kt
index 2787a6701..097958706 100644
--- a/mirai-core-utils/src/commonMain/kotlin/Conversions.kt
+++ b/mirai-core-utils/src/commonMain/kotlin/Conversions.kt
@@ -1,10 +1,10 @@
 /*
- * Copyright 2019-2021 Mamoe Technologies and contributors.
+ * Copyright 2019-2022 Mamoe Technologies and contributors.
  *
- *  此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
- *  Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
+ * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
+ * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
  *
- *  https://github.com/mamoe/mirai/blob/master/LICENSE
+ * https://github.com/mamoe/mirai/blob/dev/LICENSE
  */
 
 @file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE", "unused")
@@ -132,11 +132,11 @@ public fun ByteArray.toUInt(): UInt =
 public fun ByteArray.toUShort(): UShort =
     ((this[0].toUInt().and(255u) shl 8) + (this[1].toUInt().and(255u) shl 0)).toUShort()
 
-public fun ByteArray.toInt(): Int =
-    (this[0].toInt().and(255) shl 24) + (this[1].toInt().and(255) shl 16) + (this[2].toInt()
-        .and(255) shl 8) + (this[3].toInt().and(
-        255
-    ) shl 0)
+public fun ByteArray.toInt(offset: Int = 0): Int =
+    this[offset + 0].toInt().and(255).shl(24)
+        .plus(this[offset + 1].toInt().and(255).shl(16))
+        .plus(this[offset + 2].toInt().and(255).shl(8))
+        .plus(this[offset + 3].toInt().and(255).shl(0))
 
 
 ///////////////////////////////////////////////////////////////////////////
diff --git a/mirai-core/src/commonMain/kotlin/utils/io/serialization/utils.kt b/mirai-core/src/commonMain/kotlin/utils/io/serialization/utils.kt
index eb8490f70..186fe95d8 100644
--- a/mirai-core/src/commonMain/kotlin/utils/io/serialization/utils.kt
+++ b/mirai-core/src/commonMain/kotlin/utils/io/serialization/utils.kt
@@ -44,7 +44,64 @@ internal fun <T : JceStruct> ByteArray.loadWithUniPacket(
 
 internal fun <T : JceStruct> ByteArray.loadAs(
     deserializer: DeserializationStrategy<T>,
-): T = this.read { readJceStruct(deserializer) }
+    offset: Int = 0,
+    length: Int = size - offset,
+): T {
+    if (this.size >= 4) {
+        val possibleLength = this.toInt(offset = offset)
+//        return doLoadAs(deserializer, offset = offset + 4, length = possibleLength)
+
+        if (possibleLength == length || possibleLength == length - 4) {
+            return doLoadAs(
+                deserializer,
+                offset = offset + 4,
+                length = length - 4
+            )
+        }
+    }
+
+    return doLoadAs(deserializer, offset, length)
+}
+
+private fun <T : JceStruct> ByteArray.doLoadAs(
+    deserializer: DeserializationStrategy<T>,
+    offset: Int,
+    length: Int,
+): T {
+    try {
+        return this.inputStream(offset = offset, length = length).asInput().use { input ->
+            Tars.UTF_8.load(deserializer, input)
+        }
+    } catch (originalException: Exception) {
+        val log = ByteArrayOutputStream()
+        try {
+            val value = PrintStream(log).use { stream ->
+                stream.println("\nData: ")
+                stream.println(this.toUHexString(offset = offset, length = length))
+                stream.println("Trace:")
+
+                this.inputStream(offset = offset, length = length).asInput().use { input ->
+                    Tars.UTF_8.load(deserializer, input, debugLogger = DebugLogger(stream))
+                }
+            }
+            return value.also {
+                TarsDecoder.logger.warning(
+                    contextualBugReportException(
+                        "解析 " + deserializer.descriptor.serialName,
+                        "启用 debug 模式后解析正常: $value \n\n${log.toByteArray().decodeToString()}",
+                        originalException
+                    )
+                )
+            }
+        } catch (secondFailure: Exception) {
+            throw contextualBugReportException(
+                "解析 " + deserializer.descriptor.serialName,
+                log.toByteArray().decodeToString(),
+                ExceptionCollector.compressExceptions(originalException, secondFailure)
+            )
+        }
+    }
+}
 
 internal fun <T : JceStruct> BytePacketBuilder.writeJceStruct(
     serializer: SerializationStrategy<T>,
@@ -54,61 +111,14 @@ internal fun <T : JceStruct> BytePacketBuilder.writeJceStruct(
 }
 
 internal fun <T : JceStruct> ByteReadPacket.readJceStruct(
-    serializer: DeserializationStrategy<T>,
+    deserializer: DeserializationStrategy<T>,
     length: Int = this.remaining.toInt(),
 ): T {
-    if (JCE_DESERIALIZER_DEBUG) {
-        // since 2.11
-        this.useBytes(n = length) { data, arrayLength ->
-            try {
-                return data.inputStream(offset = 0, length = arrayLength).asInput().use { input ->
-                    Tars.UTF_8.load(serializer, input)
-                }
-            } catch (originalException: Exception) {
-                val log = ByteArrayOutputStream()
-                try {
-                    val value = PrintStream(log).use { stream ->
-                        stream.println("\nData: ")
-                        stream.println(data.toUHexString(length = arrayLength))
-                        stream.println("Trace:")
-
-                        data.inputStream(offset = 0, length = arrayLength).asInput().use { input ->
-                            Tars.UTF_8.load(serializer, input, debugLogger = DebugLogger(stream))
-                        }
-                    }
-                    return value.also {
-                        TarsDecoder.logger.warning(
-                            contextualBugReportException(
-                                "解析 " + serializer.descriptor.serialName,
-                                "启用 debug 模式后解析正常: $value \n\n${log.toByteArray().decodeToString()}",
-                                originalException
-                            )
-                        )
-                    }
-                } catch (secondFailure: Exception) {
-                    throw contextualBugReportException(
-                        "解析 " + serializer.descriptor.serialName,
-                        log.toByteArray().decodeToString(),
-                        ExceptionCollector.compressExceptions(originalException, secondFailure)
-                    )
-                }
-            }
-        }
-    } else {
-        // since 2.0
-        return this.readPacketExact(length).use {
-            Tars.UTF_8.load(serializer, it)
-        }
+    return this.useBytes(n = length) { data, arrayLength ->
+        data.loadAs(deserializer, offset = 0, length = arrayLength)
     }
 }
 
-/**
- * @since 2.11
- */
-internal var JCE_DESERIALIZER_DEBUG by lateinitMutableProperty {
-    systemProp("mirai.jce.deserializer.debug", false)
-}
-
 internal fun <T : JceStruct> BytePacketBuilder.writeJceRequestPacket(
     version: Int = 3,
     servantName: String,
diff --git a/mirai-core/src/commonTest/kotlin/utils/io/serialization/ReadJceStructTest.kt b/mirai-core/src/commonTest/kotlin/utils/io/serialization/ReadJceStructTest.kt
new file mode 100644
index 000000000..cf9d5458e
--- /dev/null
+++ b/mirai-core/src/commonTest/kotlin/utils/io/serialization/ReadJceStructTest.kt
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2019-2022 Mamoe Technologies and contributors.
+ *
+ * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
+ * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
+ *
+ * https://github.com/mamoe/mirai/blob/dev/LICENSE
+ */
+
+package net.mamoe.mirai.internal.utils.io.serialization
+
+import net.mamoe.mirai.internal.network.protocol.data.jce.PushReq
+import net.mamoe.mirai.internal.network.protocol.data.jce.RequestPacket
+import net.mamoe.mirai.internal.test.AbstractTest
+import net.mamoe.mirai.utils.hexToBytes
+import net.mamoe.mirai.utils.read
+import org.junit.jupiter.api.Test
+
+internal class ReadJceStructTest : AbstractTest() {
+
+    @Test
+    fun `ByteReadPacket readJceStruct`() {
+        "10 02 2C 3C 4C 56 23 51 51 53 65 72 76 69 63 65 2E 43 6F 6E 66 69 67 50 75 73 68 53 76 63 2E 4D 61 69 6E 53 65 72 76 61 6E 74 66 07 50 75 73 68 52 65 71 7D 00 01 03 A3 08 00 01 06 07 50 75 73 68 52 65 71 18 00 01 06 12 43 6F 6E 66 69 67 50 75 73 68 2E 50 75 73 68 52 65 71 1D 00 01 03 7B 0A 10 01 2D 00 01 03 6D 19 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 39 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 4C 5C 6C 70 01 89 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 99 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B A9 0C B9 0C C9 0C D9 0C EC FC 0F F6 10 00 FC 11 32 00 29 18 59 0B 8C 98 0C A8 0C"
+            .hexToBytes().read {
+                readJceStruct(RequestPacket.serializer())
+            }
+    }
+
+    @Test
+    fun `ByteReadPacket readJceStruct with rubbish length`() { // #1991
+        "00 00 03 E4 10 02 2C 3C 4C 56 23 51 51 53 65 72 76 69 63 65 2E 43 6F 6E 66 69 67 50 75 73 68 53 76 63 2E 4D 61 69 6E 53 65 72 76 61 6E 74 66 07 50 75 73 68 52 65 71 7D 00 01 03 A3 08 00 01 06 07 50 75 73 68 52 65 71 18 00 01 06 12 43 6F 6E 66 69 67 50 75 73 68 2E 50 75 73 68 52 65 71 1D 00 01 03 7B 0A 10 01 2D 00 01 03 6D 19 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 39 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 4C 5C 6C 70 01 89 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 99 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B A9 0C B9 0C C9 0C D9 0C EC FC 0F F6 10 00 FC 11 32 00 29 18 59 0B 8C 98 0C A8 0C"
+            .hexToBytes().read {
+                readJceStruct(RequestPacket.serializer())
+            }
+    }
+
+    @Test
+    fun `ByteReadPacket readUniPacket`() {
+        "10 02 2C 3C 4C 56 23 51 51 53 65 72 76 69 63 65 2E 43 6F 6E 66 69 67 50 75 73 68 53 76 63 2E 4D 61 69 6E 53 65 72 76 61 6E 74 66 07 50 75 73 68 52 65 71 7D 00 01 03 A3 08 00 01 06 07 50 75 73 68 52 65 71 18 00 01 06 12 43 6F 6E 66 69 67 50 75 73 68 2E 50 75 73 68 52 65 71 1D 00 01 03 7B 0A 10 01 2D 00 01 03 6D 19 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 39 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 4C 5C 6C 70 01 89 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 99 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B A9 0C B9 0C C9 0C D9 0C EC FC 0F F6 10 00 FC 11 32 00 29 18 59 0B 8C 98 0C A8 0C"
+            .hexToBytes().read {
+                readUniPacket(PushReq.serializer(), "PushReq")
+            }
+    }
+
+    @Test
+    fun `ByteReadPacket readUniPacket with rubbish length`() { // #1991
+        "00 00 03 E4 10 02 2C 3C 4C 56 23 51 51 53 65 72 76 69 63 65 2E 43 6F 6E 66 69 67 50 75 73 68 53 76 63 2E 4D 61 69 6E 53 65 72 76 61 6E 74 66 07 50 75 73 68 52 65 71 7D 00 01 03 A3 08 00 01 06 07 50 75 73 68 52 65 71 18 00 01 06 12 43 6F 6E 66 69 67 50 75 73 68 2E 50 75 73 68 52 65 71 1D 00 01 03 7B 0A 10 01 2D 00 01 03 6D 19 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 39 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 4C 5C 6C 70 01 89 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 99 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B A9 0C B9 0C C9 0C D9 0C EC FC 0F F6 10 00 FC 11 32 00 29 18 59 0B 8C 98 0C A8 0C"
+            .hexToBytes().read {
+                readUniPacket(PushReq.serializer(), "PushReq")
+            }
+    }
+
+
+    @Test
+    fun `ByteArray readJceStruct`() {
+        "10 02 2C 3C 4C 56 23 51 51 53 65 72 76 69 63 65 2E 43 6F 6E 66 69 67 50 75 73 68 53 76 63 2E 4D 61 69 6E 53 65 72 76 61 6E 74 66 07 50 75 73 68 52 65 71 7D 00 01 03 A3 08 00 01 06 07 50 75 73 68 52 65 71 18 00 01 06 12 43 6F 6E 66 69 67 50 75 73 68 2E 50 75 73 68 52 65 71 1D 00 01 03 7B 0A 10 01 2D 00 01 03 6D 19 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 39 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 4C 5C 6C 70 01 89 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 99 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B A9 0C B9 0C C9 0C D9 0C EC FC 0F F6 10 00 FC 11 32 00 29 18 59 0B 8C 98 0C A8 0C"
+            .hexToBytes().loadAs(RequestPacket.serializer())
+    }
+
+    @Test
+    fun `ByteArray readJceStruct with rubbish length`() { // #1991
+        "00 00 03 E4 10 02 2C 3C 4C 56 23 51 51 53 65 72 76 69 63 65 2E 43 6F 6E 66 69 67 50 75 73 68 53 76 63 2E 4D 61 69 6E 53 65 72 76 61 6E 74 66 07 50 75 73 68 52 65 71 7D 00 01 03 A3 08 00 01 06 07 50 75 73 68 52 65 71 18 00 01 06 12 43 6F 6E 66 69 67 50 75 73 68 2E 50 75 73 68 52 65 71 1D 00 01 03 7B 0A 10 01 2D 00 01 03 6D 19 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 39 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 4C 5C 6C 70 01 89 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 99 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B A9 0C B9 0C C9 0C D9 0C EC FC 0F F6 10 00 FC 11 32 00 29 18 59 0B 8C 98 0C A8 0C"
+            .hexToBytes().loadAs(RequestPacket.serializer())
+    }
+
+    @Test
+    fun `ByteArray readUniPacket`() {
+        "10 02 2C 3C 4C 56 23 51 51 53 65 72 76 69 63 65 2E 43 6F 6E 66 69 67 50 75 73 68 53 76 63 2E 4D 61 69 6E 53 65 72 76 61 6E 74 66 07 50 75 73 68 52 65 71 7D 00 01 03 A3 08 00 01 06 07 50 75 73 68 52 65 71 18 00 01 06 12 43 6F 6E 66 69 67 50 75 73 68 2E 50 75 73 68 52 65 71 1D 00 01 03 7B 0A 10 01 2D 00 01 03 6D 19 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 39 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 4C 5C 6C 70 01 89 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 99 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B A9 0C B9 0C C9 0C D9 0C EC FC 0F F6 10 00 FC 11 32 00 29 18 59 0B 8C 98 0C A8 0C"
+            .hexToBytes().loadWithUniPacket(PushReq.serializer(), "PushReq")
+    }
+
+    @Test
+    fun `ByteArray readUniPacket with rubbish length`() { // #1991
+        "00 00 03 E4 10 02 2C 3C 4C 56 23 51 51 53 65 72 76 69 63 65 2E 43 6F 6E 66 69 67 50 75 73 68 53 76 63 2E 4D 61 69 6E 53 65 72 76 61 6E 74 66 07 50 75 73 68 52 65 71 7D 00 01 03 A3 08 00 01 06 07 50 75 73 68 52 65 71 18 00 01 06 12 43 6F 6E 66 69 67 50 75 73 68 2E 50 75 73 68 52 65 71 1D 00 01 03 7B 0A 10 01 2D 00 01 03 6D 19 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 39 00 07 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 31 34 37 21 1F 90 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 34 39 2E 37 2E 32 35 33 2E 32 34 34 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0C 31 38 33 2E 34 37 2E 39 39 2E 32 34 21 36 B0 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 34 35 21 01 BB 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 38 33 2E 34 37 2E 31 30 32 2E 31 36 35 20 50 30 01 4C 5C 60 08 70 01 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 37 36 2E 32 31 31 20 50 30 01 4C 5C 60 08 70 01 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 11 6D 73 66 77 69 66 69 2E 33 67 2E 71 71 2E 63 6F 6D 21 1F 90 30 01 4C 5C 60 08 7C 86 06 6F 74 68 65 72 73 96 06 6F 74 68 65 72 73 AC 0B 4C 5C 6C 70 01 89 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 99 00 04 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0D 34 32 2E 38 31 2E 31 39 33 2E 32 34 32 20 50 30 01 4C 50 03 60 08 7C 86 02 73 7A 96 03 74 65 6C AC 0B 0A 16 0E 31 31 39 2E 31 34 37 2E 31 39 30 2E 33 37 20 50 30 01 4C 50 03 60 08 7C 86 02 74 6A 96 03 74 65 6C AC 0B A9 0C B9 0C C9 0C D9 0C EC FC 0F F6 10 00 FC 11 32 00 29 18 59 0B 8C 98 0C A8 0C"
+            .hexToBytes().loadWithUniPacket(PushReq.serializer(), "PushReq")
+    }
+}
\ No newline at end of file
diff --git a/mirai-core/src/commonTest/kotlin/utils/io/serialization/tars/internal/DebugLoggerTest.kt b/mirai-core/src/commonTest/kotlin/utils/io/serialization/tars/internal/DebugLoggerTest.kt
index d81e24b3c..9bbf06ff7 100644
--- a/mirai-core/src/commonTest/kotlin/utils/io/serialization/tars/internal/DebugLoggerTest.kt
+++ b/mirai-core/src/commonTest/kotlin/utils/io/serialization/tars/internal/DebugLoggerTest.kt
@@ -12,7 +12,6 @@ package net.mamoe.mirai.internal.utils.io.serialization.tars.internal
 import kotlinx.serialization.Serializable
 import net.mamoe.mirai.internal.test.AbstractTest
 import net.mamoe.mirai.internal.utils.io.JceStruct
-import net.mamoe.mirai.internal.utils.io.serialization.JCE_DESERIALIZER_DEBUG
 import net.mamoe.mirai.internal.utils.io.serialization.readJceStruct
 import net.mamoe.mirai.internal.utils.io.serialization.tars.Tars
 import net.mamoe.mirai.internal.utils.io.serialization.tars.TarsId
@@ -26,9 +25,6 @@ import kotlin.test.assertEquals
 import kotlin.test.assertFails
 
 class DebugLoggerTest : AbstractTest() {
-    init {
-        JCE_DESERIALIZER_DEBUG = true
-    }
 
     fun String.uniteLine(): String = replace("\r\n", "\n").replace("\r", "\n")