go with i8
This commit is contained in:
parent
b36d65a0f7
commit
1b5a22f3bc
91
Cargo.lock
generated
91
Cargo.lock
generated
@ -2,6 +2,97 @@
|
|||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
version = 3
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "byteorder"
|
||||||
|
version = "1.4.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cesu8"
|
||||||
|
version = "1.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fastnbt"
|
||||||
|
version = "2.4.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3369bd70629bccfda7e344883c9ae3ab7f3b10a357bcf8b0f69caa7256bcf188"
|
||||||
|
dependencies = [
|
||||||
|
"byteorder",
|
||||||
|
"cesu8",
|
||||||
|
"serde",
|
||||||
|
"serde_bytes",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nbt-rust"
|
name = "nbt-rust"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"fastnbt",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro2"
|
||||||
|
version = "1.0.66"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
|
||||||
|
dependencies = [
|
||||||
|
"unicode-ident",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "quote"
|
||||||
|
version = "1.0.32"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde"
|
||||||
|
version = "1.0.181"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6d3e73c93c3240c0bda063c239298e633114c69a888c3e37ca8bb33f343e9890"
|
||||||
|
dependencies = [
|
||||||
|
"serde_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_bytes"
|
||||||
|
version = "0.11.12"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff"
|
||||||
|
dependencies = [
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_derive"
|
||||||
|
version = "1.0.181"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "be02f6cb0cd3a5ec20bbcfbcbd749f57daddb1a0882dc2e46a6c236c90b977ed"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "syn"
|
||||||
|
version = "2.0.28"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"unicode-ident",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-ident"
|
||||||
|
version = "1.0.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
|
||||||
|
@ -6,8 +6,9 @@ edition = "2021"
|
|||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
fastnbt = "2.4.4"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = []
|
default = []
|
||||||
debug = []
|
debug = []
|
||||||
core_debug = ["debug"]
|
core_debug = ["debug"]
|
||||||
|
32
src/data.rs
32
src/data.rs
@ -1,7 +1,7 @@
|
|||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::rc::Rc;
|
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::io::{Cursor, Read, Seek, SeekFrom};
|
use std::io::{Cursor, Read, Seek, SeekFrom};
|
||||||
|
use std::rc::Rc;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
/// NBT 里除了字符串的长度量都是 i32
|
/// NBT 里除了字符串的长度量都是 i32
|
||||||
@ -14,6 +14,8 @@ pub type StringLength = u16;
|
|||||||
/// Reader
|
/// Reader
|
||||||
pub type Reader<'a> = Cursor<&'a [u8]>;
|
pub type Reader<'a> = Cursor<&'a [u8]>;
|
||||||
|
|
||||||
|
pub type RawData<'data> = &'data [u8];
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub enum NbtItem {
|
pub enum NbtItem {
|
||||||
Value(NbtValue),
|
Value(NbtValue),
|
||||||
@ -22,7 +24,7 @@ pub enum NbtItem {
|
|||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub enum NbtList {
|
pub enum NbtList {
|
||||||
BoolArray(Vec<bool>),
|
BoolArray(Vec<i8>),
|
||||||
IntArray(Vec<i32>),
|
IntArray(Vec<i32>),
|
||||||
LongArray(Vec<i64>),
|
LongArray(Vec<i64>),
|
||||||
List(Vec<NbtItem>),
|
List(Vec<NbtItem>),
|
||||||
@ -36,7 +38,7 @@ pub enum NbtValue {
|
|||||||
/// 标志着一个 NBT Compound/List 的结束
|
/// 标志着一个 NBT Compound/List 的结束
|
||||||
End,
|
End,
|
||||||
/// 0x01
|
/// 0x01
|
||||||
Byte(bool),
|
Byte(i8),
|
||||||
/// 0x02
|
/// 0x02
|
||||||
Short(i16),
|
Short(i16),
|
||||||
/// 0x03
|
/// 0x03
|
||||||
@ -92,9 +94,9 @@ impl From<Compound> for NbtItem {
|
|||||||
fn from(value: Compound) -> Self { Self::Array(NbtList::from(value)) }
|
fn from(value: Compound) -> Self { Self::Array(NbtList::from(value)) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<Vec<bool>> for NbtItem {
|
impl From<Vec<i8>> for NbtItem {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn from(value: Vec<bool>) -> Self { Self::Array(NbtList::from(value)) }
|
fn from(value: Vec<i8>) -> Self { Self::Array(NbtList::from(value)) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<Vec<i32>> for NbtItem {
|
impl From<Vec<i32>> for NbtItem {
|
||||||
@ -114,14 +116,12 @@ impl From<Vec<NbtItem>> for NbtList {
|
|||||||
|
|
||||||
impl From<Compound> for NbtList {
|
impl From<Compound> for NbtList {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn from(value: Compound) -> Self {
|
fn from(value: Compound) -> Self { Self::Compound(value.0, Rc::new(RefCell::new(value.1))) }
|
||||||
Self::Compound(value.0, Rc::new(RefCell::new(value.1)))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<Vec<bool>> for NbtList {
|
impl From<Vec<i8>> for NbtList {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn from(value: Vec<bool>) -> Self { Self::BoolArray(value) }
|
fn from(value: Vec<i8>) -> Self { Self::BoolArray(value) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<Vec<i32>> for NbtList {
|
impl From<Vec<i32>> for NbtList {
|
||||||
@ -147,13 +147,13 @@ macro_rules! export_data {
|
|||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! read_data {
|
macro_rules! read_data {
|
||||||
($name:ident, $nbt_name:ident, bool, 1) => {
|
($name:ident, $nbt_name:ident, $type:ty, 1) => {
|
||||||
/// 直接读取值 不带类型数据和名称
|
/// 直接读取值 不带类型数据和名称
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn $name(value: &mut Reader) -> Self {
|
pub fn $name(value: &mut Reader) -> Self {
|
||||||
let mut buff = [0_u8];
|
let mut buff = [0_u8];
|
||||||
_ = value.read(&mut buff).unwrap();
|
_ = value.read(&mut buff).unwrap();
|
||||||
Self::$nbt_name(buff[0] != 0)
|
Self::$nbt_name(buff[0] as $type)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
($name:ident, $nbt_name:ident, $type:ty, $len:expr) => {
|
($name:ident, $nbt_name:ident, $type:ty, $len:expr) => {
|
||||||
@ -175,7 +175,7 @@ impl NbtValue {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export_data!(as_bool, Byte, bool);
|
export_data!(as_i8, Byte, i8);
|
||||||
export_data!(as_i16, Short, i16);
|
export_data!(as_i16, Short, i16);
|
||||||
export_data!(as_i32, Int, i32);
|
export_data!(as_i32, Int, i32);
|
||||||
export_data!(as_i64, Long, i64);
|
export_data!(as_i64, Long, i64);
|
||||||
@ -189,7 +189,7 @@ impl NbtValue {
|
|||||||
Self::End
|
Self::End
|
||||||
}
|
}
|
||||||
|
|
||||||
read_data!(from_bool, Byte, bool, 1);
|
read_data!(from_i8, Byte, i8, 1);
|
||||||
read_data!(from_i16, Short, i16, 2);
|
read_data!(from_i16, Short, i16, 2);
|
||||||
read_data!(from_i32, Int, i32, 4);
|
read_data!(from_i32, Int, i32, 4);
|
||||||
read_data!(from_i64, Long, i64, 8);
|
read_data!(from_i64, Long, i64, 8);
|
||||||
@ -216,7 +216,7 @@ impl NbtValue {
|
|||||||
_ = value.read(&mut value_type).unwrap();
|
_ = value.read(&mut value_type).unwrap();
|
||||||
match value_type {
|
match value_type {
|
||||||
[0x00] => Some(Self::End),
|
[0x00] => Some(Self::End),
|
||||||
[0x01] => Some(Self::from_bool(value)),
|
[0x01] => Some(Self::from_i8(value)),
|
||||||
[0x02] => Some(Self::from_i16(value)),
|
[0x02] => Some(Self::from_i16(value)),
|
||||||
[0x03] => Some(Self::from_i32(value)),
|
[0x03] => Some(Self::from_i32(value)),
|
||||||
[0x04] => Some(Self::from_i64(value)),
|
[0x04] => Some(Self::from_i64(value)),
|
||||||
@ -238,7 +238,7 @@ impl NbtValue {
|
|||||||
[0x00] => Some((Self::End, Arc::from(""))),
|
[0x00] => Some((Self::End, Arc::from(""))),
|
||||||
[0x01] => {
|
[0x01] => {
|
||||||
let name = Self::from_string(value).as_string().unwrap();
|
let name = Self::from_string(value).as_string().unwrap();
|
||||||
Some((Self::from_bool(value), name))
|
Some((Self::from_i8(value), name))
|
||||||
}
|
}
|
||||||
[0x02] => {
|
[0x02] => {
|
||||||
let name = Self::from_string(value).as_string().unwrap();
|
let name = Self::from_string(value).as_string().unwrap();
|
||||||
|
237
src/main.rs
237
src/main.rs
@ -1,7 +1,7 @@
|
|||||||
#![feature(buf_read_has_data_left)]
|
#![feature(buf_read_has_data_left)]
|
||||||
|
|
||||||
use std::io::Read;
|
|
||||||
use crate::data::Reader;
|
use crate::data::Reader;
|
||||||
|
use std::io::Read;
|
||||||
|
|
||||||
mod data;
|
mod data;
|
||||||
mod read;
|
mod read;
|
||||||
@ -40,111 +40,119 @@ fn cli_read_test() {
|
|||||||
|
|
||||||
fn small_read_test() {
|
fn small_read_test() {
|
||||||
let data: [u8; 0x21] = [
|
let data: [u8; 0x21] = [
|
||||||
0x0A, 0x00, 0x0B, 0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x64, 0x08, 0x00,
|
0x0A, 0x00, 0x0B, 0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x64, 0x08,
|
||||||
0x04, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x09, 0x42, 0x61, 0x6E, 0x61, 0x6E, 0x72, 0x61, 0x6D, 0x61,
|
0x00, 0x04, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x09, 0x42, 0x61, 0x6E, 0x61, 0x6E, 0x72, 0x61,
|
||||||
0x00];
|
0x6D, 0x61, 0x00,
|
||||||
|
];
|
||||||
read_test(data.to_vec());
|
read_test(data.to_vec());
|
||||||
}
|
}
|
||||||
|
|
||||||
fn big_read_test() {
|
fn big_read_test() {
|
||||||
let data: [u8; 0x608] = [
|
let data: [u8; 0x608] = [
|
||||||
0x0A, 0x00, 0x05, 0x4C, 0x65, 0x76, 0x65, 0x6C, 0x04, 0x00, 0x08, 0x6C, 0x6F, 0x6E, 0x67, 0x54,
|
0x0A, 0x00, 0x05, 0x4C, 0x65, 0x76, 0x65, 0x6C, 0x04, 0x00, 0x08, 0x6C, 0x6F, 0x6E, 0x67,
|
||||||
0x65, 0x73, 0x74, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x09, 0x73, 0x68,
|
0x54, 0x65, 0x73, 0x74, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x09,
|
||||||
0x6F, 0x72, 0x74, 0x54, 0x65, 0x73, 0x74, 0x7F, 0xFF, 0x08, 0x00, 0x0A, 0x73, 0x74, 0x72, 0x69,
|
0x73, 0x68, 0x6F, 0x72, 0x74, 0x54, 0x65, 0x73, 0x74, 0x7F, 0xFF, 0x08, 0x00, 0x0A, 0x73,
|
||||||
0x6E, 0x67, 0x54, 0x65, 0x73, 0x74, 0x00, 0x29, 0x48, 0x45, 0x4C, 0x4C, 0x4F, 0x20, 0x57, 0x4F,
|
0x74, 0x72, 0x69, 0x6E, 0x67, 0x54, 0x65, 0x73, 0x74, 0x00, 0x29, 0x48, 0x45, 0x4C, 0x4C,
|
||||||
0x52, 0x4C, 0x44, 0x20, 0x54, 0x48, 0x49, 0x53, 0x20, 0x49, 0x53, 0x20, 0x41, 0x20, 0x54, 0x45,
|
0x4F, 0x20, 0x57, 0x4F, 0x52, 0x4C, 0x44, 0x20, 0x54, 0x48, 0x49, 0x53, 0x20, 0x49, 0x53,
|
||||||
0x53, 0x54, 0x20, 0x53, 0x54, 0x52, 0x49, 0x4E, 0x47, 0x20, 0xC3, 0x85, 0xC3, 0x84, 0xC3, 0x96,
|
0x20, 0x41, 0x20, 0x54, 0x45, 0x53, 0x54, 0x20, 0x53, 0x54, 0x52, 0x49, 0x4E, 0x47, 0x20,
|
||||||
0x21, 0x05, 0x00, 0x09, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x54, 0x65, 0x73, 0x74, 0x3E, 0xFF, 0x18,
|
0xC3, 0x85, 0xC3, 0x84, 0xC3, 0x96, 0x21, 0x05, 0x00, 0x09, 0x66, 0x6C, 0x6F, 0x61, 0x74,
|
||||||
0x32, 0x03, 0x00, 0x07, 0x69, 0x6E, 0x74, 0x54, 0x65, 0x73, 0x74, 0x7F, 0xFF, 0xFF, 0xFF, 0x0A,
|
0x54, 0x65, 0x73, 0x74, 0x3E, 0xFF, 0x18, 0x32, 0x03, 0x00, 0x07, 0x69, 0x6E, 0x74, 0x54,
|
||||||
0x00, 0x14, 0x6E, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x63, 0x6F, 0x6D, 0x70, 0x6F, 0x75, 0x6E,
|
0x65, 0x73, 0x74, 0x7F, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x14, 0x6E, 0x65, 0x73, 0x74, 0x65,
|
||||||
0x64, 0x20, 0x74, 0x65, 0x73, 0x74, 0x0A, 0x00, 0x03, 0x68, 0x61, 0x6D, 0x08, 0x00, 0x04, 0x6E,
|
0x64, 0x20, 0x63, 0x6F, 0x6D, 0x70, 0x6F, 0x75, 0x6E, 0x64, 0x20, 0x74, 0x65, 0x73, 0x74,
|
||||||
0x61, 0x6D, 0x65, 0x00, 0x06, 0x48, 0x61, 0x6D, 0x70, 0x75, 0x73, 0x05, 0x00, 0x05, 0x76, 0x61,
|
0x0A, 0x00, 0x03, 0x68, 0x61, 0x6D, 0x08, 0x00, 0x04, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x06,
|
||||||
0x6C, 0x75, 0x65, 0x3F, 0x40, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x03, 0x65, 0x67, 0x67, 0x08, 0x00,
|
0x48, 0x61, 0x6D, 0x70, 0x75, 0x73, 0x05, 0x00, 0x05, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3F,
|
||||||
0x04, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x07, 0x45, 0x67, 0x67, 0x62, 0x65, 0x72, 0x74, 0x05, 0x00,
|
0x40, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x03, 0x65, 0x67, 0x67, 0x08, 0x00, 0x04, 0x6E, 0x61,
|
||||||
0x05, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x0F, 0x6C,
|
0x6D, 0x65, 0x00, 0x07, 0x45, 0x67, 0x67, 0x62, 0x65, 0x72, 0x74, 0x05, 0x00, 0x05, 0x76,
|
||||||
0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x20, 0x28, 0x6C, 0x6F, 0x6E, 0x67, 0x29, 0x04, 0x00,
|
0x61, 0x6C, 0x75, 0x65, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x0F, 0x6C, 0x69,
|
||||||
0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x20, 0x28, 0x6C, 0x6F, 0x6E, 0x67, 0x29, 0x04, 0x00,
|
||||||
0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x09, 0x00, 0x13, 0x6C, 0x69,
|
0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00,
|
||||||
0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x20, 0x28, 0x63, 0x6F, 0x6D, 0x70, 0x6F, 0x75, 0x6E, 0x64,
|
0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x09, 0x00,
|
||||||
0x29, 0x0A, 0x00, 0x00, 0x00, 0x02, 0x08, 0x00, 0x04, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x0F, 0x43,
|
0x13, 0x6C, 0x69, 0x73, 0x74, 0x54, 0x65, 0x73, 0x74, 0x20, 0x28, 0x63, 0x6F, 0x6D, 0x70,
|
||||||
0x6F, 0x6D, 0x70, 0x6F, 0x75, 0x6E, 0x64, 0x20, 0x74, 0x61, 0x67, 0x20, 0x23, 0x30, 0x04, 0x00,
|
0x6F, 0x75, 0x6E, 0x64, 0x29, 0x0A, 0x00, 0x00, 0x00, 0x02, 0x08, 0x00, 0x04, 0x6E, 0x61,
|
||||||
0x0A, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2D, 0x6F, 0x6E, 0x00, 0x00, 0x01, 0x26, 0x52,
|
0x6D, 0x65, 0x00, 0x0F, 0x43, 0x6F, 0x6D, 0x70, 0x6F, 0x75, 0x6E, 0x64, 0x20, 0x74, 0x61,
|
||||||
0x37, 0xD5, 0x8D, 0x00, 0x08, 0x00, 0x04, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x0F, 0x43, 0x6F, 0x6D,
|
0x67, 0x20, 0x23, 0x30, 0x04, 0x00, 0x0A, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2D,
|
||||||
0x70, 0x6F, 0x75, 0x6E, 0x64, 0x20, 0x74, 0x61, 0x67, 0x20, 0x23, 0x31, 0x04, 0x00, 0x0A, 0x63,
|
0x6F, 0x6E, 0x00, 0x00, 0x01, 0x26, 0x52, 0x37, 0xD5, 0x8D, 0x00, 0x08, 0x00, 0x04, 0x6E,
|
||||||
0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2D, 0x6F, 0x6E, 0x00, 0x00, 0x01, 0x26, 0x52, 0x37, 0xD5,
|
0x61, 0x6D, 0x65, 0x00, 0x0F, 0x43, 0x6F, 0x6D, 0x70, 0x6F, 0x75, 0x6E, 0x64, 0x20, 0x74,
|
||||||
0x8D, 0x00, 0x01, 0x00, 0x08, 0x62, 0x79, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x7F, 0x07, 0x00,
|
0x61, 0x67, 0x20, 0x23, 0x31, 0x04, 0x00, 0x0A, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64,
|
||||||
0x65, 0x62, 0x79, 0x74, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x54, 0x65, 0x73, 0x74, 0x20, 0x28,
|
0x2D, 0x6F, 0x6E, 0x00, 0x00, 0x01, 0x26, 0x52, 0x37, 0xD5, 0x8D, 0x00, 0x01, 0x00, 0x08,
|
||||||
0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x31, 0x30, 0x30, 0x30, 0x20, 0x76,
|
0x62, 0x79, 0x74, 0x65, 0x54, 0x65, 0x73, 0x74, 0x7F, 0x07, 0x00, 0x65, 0x62, 0x79, 0x74,
|
||||||
0x61, 0x6C, 0x75, 0x65, 0x73, 0x20, 0x6F, 0x66, 0x20, 0x28, 0x6E, 0x2A, 0x6E, 0x2A, 0x32, 0x35,
|
0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x54, 0x65, 0x73, 0x74, 0x20, 0x28, 0x74, 0x68, 0x65,
|
||||||
0x35, 0x2B, 0x6E, 0x2A, 0x37, 0x29, 0x25, 0x31, 0x30, 0x30, 0x2C, 0x20, 0x73, 0x74, 0x61, 0x72,
|
0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x31, 0x30, 0x30, 0x30, 0x20, 0x76, 0x61, 0x6C,
|
||||||
0x74, 0x69, 0x6E, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6E, 0x3D, 0x30, 0x20, 0x28, 0x30,
|
0x75, 0x65, 0x73, 0x20, 0x6F, 0x66, 0x20, 0x28, 0x6E, 0x2A, 0x6E, 0x2A, 0x32, 0x35, 0x35,
|
||||||
0x2C, 0x20, 0x36, 0x32, 0x2C, 0x20, 0x33, 0x34, 0x2C, 0x20, 0x31, 0x36, 0x2C, 0x20, 0x38, 0x2C,
|
0x2B, 0x6E, 0x2A, 0x37, 0x29, 0x25, 0x31, 0x30, 0x30, 0x2C, 0x20, 0x73, 0x74, 0x61, 0x72,
|
||||||
0x20, 0x2E, 0x2E, 0x2E, 0x29, 0x29, 0x00, 0x00, 0x03, 0xE8, 0x00, 0x3E, 0x22, 0x10, 0x08, 0x0A,
|
0x74, 0x69, 0x6E, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6E, 0x3D, 0x30, 0x20, 0x28,
|
||||||
0x16, 0x2C, 0x4C, 0x12, 0x46, 0x20, 0x04, 0x56, 0x4E, 0x50, 0x5C, 0x0E, 0x2E, 0x58, 0x28, 0x02,
|
0x30, 0x2C, 0x20, 0x36, 0x32, 0x2C, 0x20, 0x33, 0x34, 0x2C, 0x20, 0x31, 0x36, 0x2C, 0x20,
|
||||||
0x4A, 0x38, 0x30, 0x32, 0x3E, 0x54, 0x10, 0x3A, 0x0A, 0x48, 0x2C, 0x1A, 0x12, 0x14, 0x20, 0x36,
|
0x38, 0x2C, 0x20, 0x2E, 0x2E, 0x2E, 0x29, 0x29, 0x00, 0x00, 0x03, 0xE8, 0x00, 0x3E, 0x22,
|
||||||
0x56, 0x1C, 0x50, 0x2A, 0x0E, 0x60, 0x58, 0x5A, 0x02, 0x18, 0x38, 0x62, 0x32, 0x0C, 0x54, 0x42,
|
0x10, 0x08, 0x0A, 0x16, 0x2C, 0x4C, 0x12, 0x46, 0x20, 0x04, 0x56, 0x4E, 0x50, 0x5C, 0x0E,
|
||||||
0x3A, 0x3C, 0x48, 0x5E, 0x1A, 0x44, 0x14, 0x52, 0x36, 0x24, 0x1C, 0x1E, 0x2A, 0x40, 0x60, 0x26,
|
0x2E, 0x58, 0x28, 0x02, 0x4A, 0x38, 0x30, 0x32, 0x3E, 0x54, 0x10, 0x3A, 0x0A, 0x48, 0x2C,
|
||||||
0x5A, 0x34, 0x18, 0x06, 0x62, 0x00, 0x0C, 0x22, 0x42, 0x08, 0x3C, 0x16, 0x5E, 0x4C, 0x44, 0x46,
|
0x1A, 0x12, 0x14, 0x20, 0x36, 0x56, 0x1C, 0x50, 0x2A, 0x0E, 0x60, 0x58, 0x5A, 0x02, 0x18,
|
||||||
0x52, 0x04, 0x24, 0x4E, 0x1E, 0x5C, 0x40, 0x2E, 0x26, 0x28, 0x34, 0x4A, 0x06, 0x30, 0x00, 0x3E,
|
0x38, 0x62, 0x32, 0x0C, 0x54, 0x42, 0x3A, 0x3C, 0x48, 0x5E, 0x1A, 0x44, 0x14, 0x52, 0x36,
|
||||||
0x22, 0x10, 0x08, 0x0A, 0x16, 0x2C, 0x4C, 0x12, 0x46, 0x20, 0x04, 0x56, 0x4E, 0x50, 0x5C, 0x0E,
|
0x24, 0x1C, 0x1E, 0x2A, 0x40, 0x60, 0x26, 0x5A, 0x34, 0x18, 0x06, 0x62, 0x00, 0x0C, 0x22,
|
||||||
0x2E, 0x58, 0x28, 0x02, 0x4A, 0x38, 0x30, 0x32, 0x3E, 0x54, 0x10, 0x3A, 0x0A, 0x48, 0x2C, 0x1A,
|
0x42, 0x08, 0x3C, 0x16, 0x5E, 0x4C, 0x44, 0x46, 0x52, 0x04, 0x24, 0x4E, 0x1E, 0x5C, 0x40,
|
||||||
0x12, 0x14, 0x20, 0x36, 0x56, 0x1C, 0x50, 0x2A, 0x0E, 0x60, 0x58, 0x5A, 0x02, 0x18, 0x38, 0x62,
|
0x2E, 0x26, 0x28, 0x34, 0x4A, 0x06, 0x30, 0x00, 0x3E, 0x22, 0x10, 0x08, 0x0A, 0x16, 0x2C,
|
||||||
0x32, 0x0C, 0x54, 0x42, 0x3A, 0x3C, 0x48, 0x5E, 0x1A, 0x44, 0x14, 0x52, 0x36, 0x24, 0x1C, 0x1E,
|
0x4C, 0x12, 0x46, 0x20, 0x04, 0x56, 0x4E, 0x50, 0x5C, 0x0E, 0x2E, 0x58, 0x28, 0x02, 0x4A,
|
||||||
0x2A, 0x40, 0x60, 0x26, 0x5A, 0x34, 0x18, 0x06, 0x62, 0x00, 0x0C, 0x22, 0x42, 0x08, 0x3C, 0x16,
|
0x38, 0x30, 0x32, 0x3E, 0x54, 0x10, 0x3A, 0x0A, 0x48, 0x2C, 0x1A, 0x12, 0x14, 0x20, 0x36,
|
||||||
0x5E, 0x4C, 0x44, 0x46, 0x52, 0x04, 0x24, 0x4E, 0x1E, 0x5C, 0x40, 0x2E, 0x26, 0x28, 0x34, 0x4A,
|
0x56, 0x1C, 0x50, 0x2A, 0x0E, 0x60, 0x58, 0x5A, 0x02, 0x18, 0x38, 0x62, 0x32, 0x0C, 0x54,
|
||||||
0x06, 0x30, 0x00, 0x3E, 0x22, 0x10, 0x08, 0x0A, 0x16, 0x2C, 0x4C, 0x12, 0x46, 0x20, 0x04, 0x56,
|
0x42, 0x3A, 0x3C, 0x48, 0x5E, 0x1A, 0x44, 0x14, 0x52, 0x36, 0x24, 0x1C, 0x1E, 0x2A, 0x40,
|
||||||
0x4E, 0x50, 0x5C, 0x0E, 0x2E, 0x58, 0x28, 0x02, 0x4A, 0x38, 0x30, 0x32, 0x3E, 0x54, 0x10, 0x3A,
|
0x60, 0x26, 0x5A, 0x34, 0x18, 0x06, 0x62, 0x00, 0x0C, 0x22, 0x42, 0x08, 0x3C, 0x16, 0x5E,
|
||||||
0x0A, 0x48, 0x2C, 0x1A, 0x12, 0x14, 0x20, 0x36, 0x56, 0x1C, 0x50, 0x2A, 0x0E, 0x60, 0x58, 0x5A,
|
0x4C, 0x44, 0x46, 0x52, 0x04, 0x24, 0x4E, 0x1E, 0x5C, 0x40, 0x2E, 0x26, 0x28, 0x34, 0x4A,
|
||||||
0x02, 0x18, 0x38, 0x62, 0x32, 0x0C, 0x54, 0x42, 0x3A, 0x3C, 0x48, 0x5E, 0x1A, 0x44, 0x14, 0x52,
|
0x06, 0x30, 0x00, 0x3E, 0x22, 0x10, 0x08, 0x0A, 0x16, 0x2C, 0x4C, 0x12, 0x46, 0x20, 0x04,
|
||||||
0x36, 0x24, 0x1C, 0x1E, 0x2A, 0x40, 0x60, 0x26, 0x5A, 0x34, 0x18, 0x06, 0x62, 0x00, 0x0C, 0x22,
|
0x56, 0x4E, 0x50, 0x5C, 0x0E, 0x2E, 0x58, 0x28, 0x02, 0x4A, 0x38, 0x30, 0x32, 0x3E, 0x54,
|
||||||
0x42, 0x08, 0x3C, 0x16, 0x5E, 0x4C, 0x44, 0x46, 0x52, 0x04, 0x24, 0x4E, 0x1E, 0x5C, 0x40, 0x2E,
|
0x10, 0x3A, 0x0A, 0x48, 0x2C, 0x1A, 0x12, 0x14, 0x20, 0x36, 0x56, 0x1C, 0x50, 0x2A, 0x0E,
|
||||||
0x26, 0x28, 0x34, 0x4A, 0x06, 0x30, 0x00, 0x3E, 0x22, 0x10, 0x08, 0x0A, 0x16, 0x2C, 0x4C, 0x12,
|
0x60, 0x58, 0x5A, 0x02, 0x18, 0x38, 0x62, 0x32, 0x0C, 0x54, 0x42, 0x3A, 0x3C, 0x48, 0x5E,
|
||||||
0x46, 0x20, 0x04, 0x56, 0x4E, 0x50, 0x5C, 0x0E, 0x2E, 0x58, 0x28, 0x02, 0x4A, 0x38, 0x30, 0x32,
|
0x1A, 0x44, 0x14, 0x52, 0x36, 0x24, 0x1C, 0x1E, 0x2A, 0x40, 0x60, 0x26, 0x5A, 0x34, 0x18,
|
||||||
0x3E, 0x54, 0x10, 0x3A, 0x0A, 0x48, 0x2C, 0x1A, 0x12, 0x14, 0x20, 0x36, 0x56, 0x1C, 0x50, 0x2A,
|
0x06, 0x62, 0x00, 0x0C, 0x22, 0x42, 0x08, 0x3C, 0x16, 0x5E, 0x4C, 0x44, 0x46, 0x52, 0x04,
|
||||||
0x0E, 0x60, 0x58, 0x5A, 0x02, 0x18, 0x38, 0x62, 0x32, 0x0C, 0x54, 0x42, 0x3A, 0x3C, 0x48, 0x5E,
|
0x24, 0x4E, 0x1E, 0x5C, 0x40, 0x2E, 0x26, 0x28, 0x34, 0x4A, 0x06, 0x30, 0x00, 0x3E, 0x22,
|
||||||
0x1A, 0x44, 0x14, 0x52, 0x36, 0x24, 0x1C, 0x1E, 0x2A, 0x40, 0x60, 0x26, 0x5A, 0x34, 0x18, 0x06,
|
0x10, 0x08, 0x0A, 0x16, 0x2C, 0x4C, 0x12, 0x46, 0x20, 0x04, 0x56, 0x4E, 0x50, 0x5C, 0x0E,
|
||||||
0x62, 0x00, 0x0C, 0x22, 0x42, 0x08, 0x3C, 0x16, 0x5E, 0x4C, 0x44, 0x46, 0x52, 0x04, 0x24, 0x4E,
|
0x2E, 0x58, 0x28, 0x02, 0x4A, 0x38, 0x30, 0x32, 0x3E, 0x54, 0x10, 0x3A, 0x0A, 0x48, 0x2C,
|
||||||
0x1E, 0x5C, 0x40, 0x2E, 0x26, 0x28, 0x34, 0x4A, 0x06, 0x30, 0x00, 0x3E, 0x22, 0x10, 0x08, 0x0A,
|
0x1A, 0x12, 0x14, 0x20, 0x36, 0x56, 0x1C, 0x50, 0x2A, 0x0E, 0x60, 0x58, 0x5A, 0x02, 0x18,
|
||||||
0x16, 0x2C, 0x4C, 0x12, 0x46, 0x20, 0x04, 0x56, 0x4E, 0x50, 0x5C, 0x0E, 0x2E, 0x58, 0x28, 0x02,
|
0x38, 0x62, 0x32, 0x0C, 0x54, 0x42, 0x3A, 0x3C, 0x48, 0x5E, 0x1A, 0x44, 0x14, 0x52, 0x36,
|
||||||
0x4A, 0x38, 0x30, 0x32, 0x3E, 0x54, 0x10, 0x3A, 0x0A, 0x48, 0x2C, 0x1A, 0x12, 0x14, 0x20, 0x36,
|
0x24, 0x1C, 0x1E, 0x2A, 0x40, 0x60, 0x26, 0x5A, 0x34, 0x18, 0x06, 0x62, 0x00, 0x0C, 0x22,
|
||||||
0x56, 0x1C, 0x50, 0x2A, 0x0E, 0x60, 0x58, 0x5A, 0x02, 0x18, 0x38, 0x62, 0x32, 0x0C, 0x54, 0x42,
|
0x42, 0x08, 0x3C, 0x16, 0x5E, 0x4C, 0x44, 0x46, 0x52, 0x04, 0x24, 0x4E, 0x1E, 0x5C, 0x40,
|
||||||
0x3A, 0x3C, 0x48, 0x5E, 0x1A, 0x44, 0x14, 0x52, 0x36, 0x24, 0x1C, 0x1E, 0x2A, 0x40, 0x60, 0x26,
|
0x2E, 0x26, 0x28, 0x34, 0x4A, 0x06, 0x30, 0x00, 0x3E, 0x22, 0x10, 0x08, 0x0A, 0x16, 0x2C,
|
||||||
0x5A, 0x34, 0x18, 0x06, 0x62, 0x00, 0x0C, 0x22, 0x42, 0x08, 0x3C, 0x16, 0x5E, 0x4C, 0x44, 0x46,
|
0x4C, 0x12, 0x46, 0x20, 0x04, 0x56, 0x4E, 0x50, 0x5C, 0x0E, 0x2E, 0x58, 0x28, 0x02, 0x4A,
|
||||||
0x52, 0x04, 0x24, 0x4E, 0x1E, 0x5C, 0x40, 0x2E, 0x26, 0x28, 0x34, 0x4A, 0x06, 0x30, 0x00, 0x3E,
|
0x38, 0x30, 0x32, 0x3E, 0x54, 0x10, 0x3A, 0x0A, 0x48, 0x2C, 0x1A, 0x12, 0x14, 0x20, 0x36,
|
||||||
0x22, 0x10, 0x08, 0x0A, 0x16, 0x2C, 0x4C, 0x12, 0x46, 0x20, 0x04, 0x56, 0x4E, 0x50, 0x5C, 0x0E,
|
0x56, 0x1C, 0x50, 0x2A, 0x0E, 0x60, 0x58, 0x5A, 0x02, 0x18, 0x38, 0x62, 0x32, 0x0C, 0x54,
|
||||||
0x2E, 0x58, 0x28, 0x02, 0x4A, 0x38, 0x30, 0x32, 0x3E, 0x54, 0x10, 0x3A, 0x0A, 0x48, 0x2C, 0x1A,
|
0x42, 0x3A, 0x3C, 0x48, 0x5E, 0x1A, 0x44, 0x14, 0x52, 0x36, 0x24, 0x1C, 0x1E, 0x2A, 0x40,
|
||||||
0x12, 0x14, 0x20, 0x36, 0x56, 0x1C, 0x50, 0x2A, 0x0E, 0x60, 0x58, 0x5A, 0x02, 0x18, 0x38, 0x62,
|
0x60, 0x26, 0x5A, 0x34, 0x18, 0x06, 0x62, 0x00, 0x0C, 0x22, 0x42, 0x08, 0x3C, 0x16, 0x5E,
|
||||||
0x32, 0x0C, 0x54, 0x42, 0x3A, 0x3C, 0x48, 0x5E, 0x1A, 0x44, 0x14, 0x52, 0x36, 0x24, 0x1C, 0x1E,
|
0x4C, 0x44, 0x46, 0x52, 0x04, 0x24, 0x4E, 0x1E, 0x5C, 0x40, 0x2E, 0x26, 0x28, 0x34, 0x4A,
|
||||||
0x2A, 0x40, 0x60, 0x26, 0x5A, 0x34, 0x18, 0x06, 0x62, 0x00, 0x0C, 0x22, 0x42, 0x08, 0x3C, 0x16,
|
0x06, 0x30, 0x00, 0x3E, 0x22, 0x10, 0x08, 0x0A, 0x16, 0x2C, 0x4C, 0x12, 0x46, 0x20, 0x04,
|
||||||
0x5E, 0x4C, 0x44, 0x46, 0x52, 0x04, 0x24, 0x4E, 0x1E, 0x5C, 0x40, 0x2E, 0x26, 0x28, 0x34, 0x4A,
|
0x56, 0x4E, 0x50, 0x5C, 0x0E, 0x2E, 0x58, 0x28, 0x02, 0x4A, 0x38, 0x30, 0x32, 0x3E, 0x54,
|
||||||
0x06, 0x30, 0x00, 0x3E, 0x22, 0x10, 0x08, 0x0A, 0x16, 0x2C, 0x4C, 0x12, 0x46, 0x20, 0x04, 0x56,
|
0x10, 0x3A, 0x0A, 0x48, 0x2C, 0x1A, 0x12, 0x14, 0x20, 0x36, 0x56, 0x1C, 0x50, 0x2A, 0x0E,
|
||||||
0x4E, 0x50, 0x5C, 0x0E, 0x2E, 0x58, 0x28, 0x02, 0x4A, 0x38, 0x30, 0x32, 0x3E, 0x54, 0x10, 0x3A,
|
0x60, 0x58, 0x5A, 0x02, 0x18, 0x38, 0x62, 0x32, 0x0C, 0x54, 0x42, 0x3A, 0x3C, 0x48, 0x5E,
|
||||||
0x0A, 0x48, 0x2C, 0x1A, 0x12, 0x14, 0x20, 0x36, 0x56, 0x1C, 0x50, 0x2A, 0x0E, 0x60, 0x58, 0x5A,
|
0x1A, 0x44, 0x14, 0x52, 0x36, 0x24, 0x1C, 0x1E, 0x2A, 0x40, 0x60, 0x26, 0x5A, 0x34, 0x18,
|
||||||
0x02, 0x18, 0x38, 0x62, 0x32, 0x0C, 0x54, 0x42, 0x3A, 0x3C, 0x48, 0x5E, 0x1A, 0x44, 0x14, 0x52,
|
0x06, 0x62, 0x00, 0x0C, 0x22, 0x42, 0x08, 0x3C, 0x16, 0x5E, 0x4C, 0x44, 0x46, 0x52, 0x04,
|
||||||
0x36, 0x24, 0x1C, 0x1E, 0x2A, 0x40, 0x60, 0x26, 0x5A, 0x34, 0x18, 0x06, 0x62, 0x00, 0x0C, 0x22,
|
0x24, 0x4E, 0x1E, 0x5C, 0x40, 0x2E, 0x26, 0x28, 0x34, 0x4A, 0x06, 0x30, 0x00, 0x3E, 0x22,
|
||||||
0x42, 0x08, 0x3C, 0x16, 0x5E, 0x4C, 0x44, 0x46, 0x52, 0x04, 0x24, 0x4E, 0x1E, 0x5C, 0x40, 0x2E,
|
0x10, 0x08, 0x0A, 0x16, 0x2C, 0x4C, 0x12, 0x46, 0x20, 0x04, 0x56, 0x4E, 0x50, 0x5C, 0x0E,
|
||||||
0x26, 0x28, 0x34, 0x4A, 0x06, 0x30, 0x00, 0x3E, 0x22, 0x10, 0x08, 0x0A, 0x16, 0x2C, 0x4C, 0x12,
|
0x2E, 0x58, 0x28, 0x02, 0x4A, 0x38, 0x30, 0x32, 0x3E, 0x54, 0x10, 0x3A, 0x0A, 0x48, 0x2C,
|
||||||
0x46, 0x20, 0x04, 0x56, 0x4E, 0x50, 0x5C, 0x0E, 0x2E, 0x58, 0x28, 0x02, 0x4A, 0x38, 0x30, 0x32,
|
0x1A, 0x12, 0x14, 0x20, 0x36, 0x56, 0x1C, 0x50, 0x2A, 0x0E, 0x60, 0x58, 0x5A, 0x02, 0x18,
|
||||||
0x3E, 0x54, 0x10, 0x3A, 0x0A, 0x48, 0x2C, 0x1A, 0x12, 0x14, 0x20, 0x36, 0x56, 0x1C, 0x50, 0x2A,
|
0x38, 0x62, 0x32, 0x0C, 0x54, 0x42, 0x3A, 0x3C, 0x48, 0x5E, 0x1A, 0x44, 0x14, 0x52, 0x36,
|
||||||
0x0E, 0x60, 0x58, 0x5A, 0x02, 0x18, 0x38, 0x62, 0x32, 0x0C, 0x54, 0x42, 0x3A, 0x3C, 0x48, 0x5E,
|
0x24, 0x1C, 0x1E, 0x2A, 0x40, 0x60, 0x26, 0x5A, 0x34, 0x18, 0x06, 0x62, 0x00, 0x0C, 0x22,
|
||||||
0x1A, 0x44, 0x14, 0x52, 0x36, 0x24, 0x1C, 0x1E, 0x2A, 0x40, 0x60, 0x26, 0x5A, 0x34, 0x18, 0x06,
|
0x42, 0x08, 0x3C, 0x16, 0x5E, 0x4C, 0x44, 0x46, 0x52, 0x04, 0x24, 0x4E, 0x1E, 0x5C, 0x40,
|
||||||
0x62, 0x00, 0x0C, 0x22, 0x42, 0x08, 0x3C, 0x16, 0x5E, 0x4C, 0x44, 0x46, 0x52, 0x04, 0x24, 0x4E,
|
0x2E, 0x26, 0x28, 0x34, 0x4A, 0x06, 0x30, 0x00, 0x3E, 0x22, 0x10, 0x08, 0x0A, 0x16, 0x2C,
|
||||||
0x1E, 0x5C, 0x40, 0x2E, 0x26, 0x28, 0x34, 0x4A, 0x06, 0x30, 0x00, 0x3E, 0x22, 0x10, 0x08, 0x0A,
|
0x4C, 0x12, 0x46, 0x20, 0x04, 0x56, 0x4E, 0x50, 0x5C, 0x0E, 0x2E, 0x58, 0x28, 0x02, 0x4A,
|
||||||
0x16, 0x2C, 0x4C, 0x12, 0x46, 0x20, 0x04, 0x56, 0x4E, 0x50, 0x5C, 0x0E, 0x2E, 0x58, 0x28, 0x02,
|
0x38, 0x30, 0x32, 0x3E, 0x54, 0x10, 0x3A, 0x0A, 0x48, 0x2C, 0x1A, 0x12, 0x14, 0x20, 0x36,
|
||||||
0x4A, 0x38, 0x30, 0x32, 0x3E, 0x54, 0x10, 0x3A, 0x0A, 0x48, 0x2C, 0x1A, 0x12, 0x14, 0x20, 0x36,
|
0x56, 0x1C, 0x50, 0x2A, 0x0E, 0x60, 0x58, 0x5A, 0x02, 0x18, 0x38, 0x62, 0x32, 0x0C, 0x54,
|
||||||
0x56, 0x1C, 0x50, 0x2A, 0x0E, 0x60, 0x58, 0x5A, 0x02, 0x18, 0x38, 0x62, 0x32, 0x0C, 0x54, 0x42,
|
0x42, 0x3A, 0x3C, 0x48, 0x5E, 0x1A, 0x44, 0x14, 0x52, 0x36, 0x24, 0x1C, 0x1E, 0x2A, 0x40,
|
||||||
0x3A, 0x3C, 0x48, 0x5E, 0x1A, 0x44, 0x14, 0x52, 0x36, 0x24, 0x1C, 0x1E, 0x2A, 0x40, 0x60, 0x26,
|
0x60, 0x26, 0x5A, 0x34, 0x18, 0x06, 0x62, 0x00, 0x0C, 0x22, 0x42, 0x08, 0x3C, 0x16, 0x5E,
|
||||||
0x5A, 0x34, 0x18, 0x06, 0x62, 0x00, 0x0C, 0x22, 0x42, 0x08, 0x3C, 0x16, 0x5E, 0x4C, 0x44, 0x46,
|
0x4C, 0x44, 0x46, 0x52, 0x04, 0x24, 0x4E, 0x1E, 0x5C, 0x40, 0x2E, 0x26, 0x28, 0x34, 0x4A,
|
||||||
0x52, 0x04, 0x24, 0x4E, 0x1E, 0x5C, 0x40, 0x2E, 0x26, 0x28, 0x34, 0x4A, 0x06, 0x30, 0x00, 0x3E,
|
0x06, 0x30, 0x00, 0x3E, 0x22, 0x10, 0x08, 0x0A, 0x16, 0x2C, 0x4C, 0x12, 0x46, 0x20, 0x04,
|
||||||
0x22, 0x10, 0x08, 0x0A, 0x16, 0x2C, 0x4C, 0x12, 0x46, 0x20, 0x04, 0x56, 0x4E, 0x50, 0x5C, 0x0E,
|
0x56, 0x4E, 0x50, 0x5C, 0x0E, 0x2E, 0x58, 0x28, 0x02, 0x4A, 0x38, 0x30, 0x32, 0x3E, 0x54,
|
||||||
0x2E, 0x58, 0x28, 0x02, 0x4A, 0x38, 0x30, 0x32, 0x3E, 0x54, 0x10, 0x3A, 0x0A, 0x48, 0x2C, 0x1A,
|
0x10, 0x3A, 0x0A, 0x48, 0x2C, 0x1A, 0x12, 0x14, 0x20, 0x36, 0x56, 0x1C, 0x50, 0x2A, 0x0E,
|
||||||
0x12, 0x14, 0x20, 0x36, 0x56, 0x1C, 0x50, 0x2A, 0x0E, 0x60, 0x58, 0x5A, 0x02, 0x18, 0x38, 0x62,
|
0x60, 0x58, 0x5A, 0x02, 0x18, 0x38, 0x62, 0x32, 0x0C, 0x54, 0x42, 0x3A, 0x3C, 0x48, 0x5E,
|
||||||
0x32, 0x0C, 0x54, 0x42, 0x3A, 0x3C, 0x48, 0x5E, 0x1A, 0x44, 0x14, 0x52, 0x36, 0x24, 0x1C, 0x1E,
|
0x1A, 0x44, 0x14, 0x52, 0x36, 0x24, 0x1C, 0x1E, 0x2A, 0x40, 0x60, 0x26, 0x5A, 0x34, 0x18,
|
||||||
0x2A, 0x40, 0x60, 0x26, 0x5A, 0x34, 0x18, 0x06, 0x62, 0x00, 0x0C, 0x22, 0x42, 0x08, 0x3C, 0x16,
|
0x06, 0x62, 0x00, 0x0C, 0x22, 0x42, 0x08, 0x3C, 0x16, 0x5E, 0x4C, 0x44, 0x46, 0x52, 0x04,
|
||||||
0x5E, 0x4C, 0x44, 0x46, 0x52, 0x04, 0x24, 0x4E, 0x1E, 0x5C, 0x40, 0x2E, 0x26, 0x28, 0x34, 0x4A,
|
0x24, 0x4E, 0x1E, 0x5C, 0x40, 0x2E, 0x26, 0x28, 0x34, 0x4A, 0x06, 0x30, 0x00, 0x3E, 0x22,
|
||||||
0x06, 0x30, 0x06, 0x00, 0x0A, 0x64, 0x6F, 0x75, 0x62, 0x6C, 0x65, 0x54, 0x65, 0x73, 0x74, 0x3F,
|
0x10, 0x08, 0x0A, 0x16, 0x2C, 0x4C, 0x12, 0x46, 0x20, 0x04, 0x56, 0x4E, 0x50, 0x5C, 0x0E,
|
||||||
0xDF, 0x8F, 0x6B, 0xBB, 0xFF, 0x6A, 0x5E, 0x00 ];
|
0x2E, 0x58, 0x28, 0x02, 0x4A, 0x38, 0x30, 0x32, 0x3E, 0x54, 0x10, 0x3A, 0x0A, 0x48, 0x2C,
|
||||||
|
0x1A, 0x12, 0x14, 0x20, 0x36, 0x56, 0x1C, 0x50, 0x2A, 0x0E, 0x60, 0x58, 0x5A, 0x02, 0x18,
|
||||||
|
0x38, 0x62, 0x32, 0x0C, 0x54, 0x42, 0x3A, 0x3C, 0x48, 0x5E, 0x1A, 0x44, 0x14, 0x52, 0x36,
|
||||||
|
0x24, 0x1C, 0x1E, 0x2A, 0x40, 0x60, 0x26, 0x5A, 0x34, 0x18, 0x06, 0x62, 0x00, 0x0C, 0x22,
|
||||||
|
0x42, 0x08, 0x3C, 0x16, 0x5E, 0x4C, 0x44, 0x46, 0x52, 0x04, 0x24, 0x4E, 0x1E, 0x5C, 0x40,
|
||||||
|
0x2E, 0x26, 0x28, 0x34, 0x4A, 0x06, 0x30, 0x06, 0x00, 0x0A, 0x64, 0x6F, 0x75, 0x62, 0x6C,
|
||||||
|
0x65, 0x54, 0x65, 0x73, 0x74, 0x3F, 0xDF, 0x8F, 0x6B, 0xBB, 0xFF, 0x6A, 0x5E, 0x00,
|
||||||
|
];
|
||||||
read_test(data.to_vec());
|
read_test(data.to_vec());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,14 +161,39 @@ fn read_test(data: Vec<u8>) {
|
|||||||
#[cfg(feature = "debug")]
|
#[cfg(feature = "debug")]
|
||||||
println!("data: {:?}", data);
|
println!("data: {:?}", data);
|
||||||
let cursor: Reader = std::io::Cursor::new(data.as_slice());
|
let cursor: Reader = std::io::Cursor::new(data.as_slice());
|
||||||
|
|
||||||
std::thread::sleep(std::time::Duration::from_secs(2));
|
std::thread::sleep(std::time::Duration::from_secs(2));
|
||||||
let start_time = std::time::Instant::now();
|
let start_time = std::time::Instant::now();
|
||||||
|
|
||||||
let nbt_data = data::NbtItem::try_from(cursor).unwrap();
|
let nbt_data = data::NbtItem::try_from(cursor).unwrap();
|
||||||
|
|
||||||
let end_time = std::time::Instant::now();
|
let end_time = std::time::Instant::now();
|
||||||
|
println!("===local nbt===");
|
||||||
println!("time: {:?}", end_time - start_time);
|
println!("time: {:?}", end_time - start_time);
|
||||||
println!("speed: {:?} (bytes/sec)", len as f64 / (end_time - start_time).as_secs_f64());
|
println!("speed: {:?} (bytes/sec)", len as f64 / (end_time - start_time).as_secs_f64());
|
||||||
println!("{:?} (kb/sec)", len as f64 / (end_time - start_time).as_secs_f64() / 1024.0);
|
println!("{:?} (kb/sec)", len as f64 / (end_time - start_time).as_secs_f64() / 1024.0);
|
||||||
println!("{:?} (mb/sec)", len as f64 / (end_time - start_time).as_secs_f64() / 1024.0 / 1024.0);
|
println!(
|
||||||
|
"{:?} (mb/sec)",
|
||||||
|
len as f64 / (end_time - start_time).as_secs_f64() / 1024.0 / 1024.0
|
||||||
|
);
|
||||||
|
#[cfg(feature = "core_debug")]
|
||||||
|
println!("nbt_data: {:#?}", nbt_data);
|
||||||
|
|
||||||
|
std::thread::sleep(std::time::Duration::from_secs(2));
|
||||||
|
let start_time = std::time::Instant::now();
|
||||||
|
|
||||||
|
let nbt_data: fastnbt::Value = fastnbt::from_bytes(data.as_slice()).unwrap();
|
||||||
|
|
||||||
|
let end_time = std::time::Instant::now();
|
||||||
|
println!("===fastnbt===");
|
||||||
|
println!("time: {:?}", end_time - start_time);
|
||||||
|
println!("speed: {:?} (bytes/sec)", len as f64 / (end_time - start_time).as_secs_f64());
|
||||||
|
println!("{:?} (kb/sec)", len as f64 / (end_time - start_time).as_secs_f64() / 1024.0);
|
||||||
|
println!(
|
||||||
|
"{:?} (mb/sec)",
|
||||||
|
len as f64 / (end_time - start_time).as_secs_f64() / 1024.0 / 1024.0
|
||||||
|
);
|
||||||
|
|
||||||
#[cfg(feature = "core_debug")]
|
#[cfg(feature = "core_debug")]
|
||||||
println!("nbt_data: {:#?}", nbt_data);
|
println!("nbt_data: {:#?}", nbt_data);
|
||||||
}
|
}
|
||||||
|
30
src/read.rs
30
src/read.rs
@ -19,14 +19,14 @@ pub mod read_data {
|
|||||||
/// 直接读取长度和值 不带名称
|
/// 直接读取长度和值 不带名称
|
||||||
/// 反正名字都在外面读过
|
/// 反正名字都在外面读过
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn from_bool_array(value: &mut Reader) -> Vec<bool> {
|
pub fn from_i8_array(value: &mut Reader) -> Vec<i8> {
|
||||||
// 读取长度
|
// 读取长度
|
||||||
let mut buff = [0_u8; 4];
|
let mut buff = [0_u8; 4];
|
||||||
_ = value.read(&mut buff).unwrap();
|
_ = value.read(&mut buff).unwrap();
|
||||||
let len = NbtLength::from_be_bytes(buff);
|
let len = NbtLength::from_be_bytes(buff);
|
||||||
let mut vec = Vec::with_capacity(len as usize);
|
let mut vec = Vec::with_capacity(len as usize);
|
||||||
for _ in 0..len {
|
for _ in 0..len {
|
||||||
vec.push(NbtValue::from_bool(value).as_bool().unwrap());
|
vec.push(NbtValue::from_i8(value).as_i8().unwrap());
|
||||||
}
|
}
|
||||||
vec
|
vec
|
||||||
}
|
}
|
||||||
@ -77,7 +77,7 @@ pub mod read_data {
|
|||||||
}
|
}
|
||||||
[0x01] => {
|
[0x01] => {
|
||||||
for _ in 0..len {
|
for _ in 0..len {
|
||||||
vec.push(NbtItem::Value(NbtValue::from_bool(value)));
|
vec.push(NbtItem::Value(NbtValue::from_i8(value)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[0x02] => {
|
[0x02] => {
|
||||||
@ -108,7 +108,7 @@ pub mod read_data {
|
|||||||
[0x07] => {
|
[0x07] => {
|
||||||
// ByteArray
|
// ByteArray
|
||||||
for _ in 0..len {
|
for _ in 0..len {
|
||||||
vec.push(NbtItem::from(from_bool_array(value)));
|
vec.push(NbtItem::from(from_i8_array(value)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[0x08] => {
|
[0x08] => {
|
||||||
@ -181,13 +181,13 @@ pub mod read_data {
|
|||||||
println!("compound type tag {:?} with name: {:?}", type_tag, name);
|
println!("compound type tag {:?} with name: {:?}", type_tag, name);
|
||||||
// 读取 value
|
// 读取 value
|
||||||
let nbt_value: NbtItem = match type_tag {
|
let nbt_value: NbtItem = match type_tag {
|
||||||
[0x01] => NbtItem::Value(NbtValue::from_bool(value)),
|
[0x01] => NbtItem::Value(NbtValue::from_i8(value)),
|
||||||
[0x02] => NbtItem::Value(NbtValue::from_i16(value)),
|
[0x02] => NbtItem::Value(NbtValue::from_i16(value)),
|
||||||
[0x03] => NbtItem::Value(NbtValue::from_i32(value)),
|
[0x03] => NbtItem::Value(NbtValue::from_i32(value)),
|
||||||
[0x04] => NbtItem::Value(NbtValue::from_i64(value)),
|
[0x04] => NbtItem::Value(NbtValue::from_i64(value)),
|
||||||
[0x05] => NbtItem::Value(NbtValue::from_f32(value)),
|
[0x05] => NbtItem::Value(NbtValue::from_f32(value)),
|
||||||
[0x06] => NbtItem::Value(NbtValue::from_f64(value)),
|
[0x06] => NbtItem::Value(NbtValue::from_f64(value)),
|
||||||
[0x07] => NbtItem::from(from_bool_array(value)),
|
[0x07] => NbtItem::from(from_i8_array(value)),
|
||||||
[0x08] => NbtItem::Value(NbtValue::from_string(value)),
|
[0x08] => NbtItem::Value(NbtValue::from_string(value)),
|
||||||
[0x09] => NbtItem::from(from_nbt_list(value)),
|
[0x09] => NbtItem::from(from_nbt_list(value)),
|
||||||
[0x0A] => {
|
[0x0A] => {
|
||||||
@ -195,11 +195,11 @@ pub mod read_data {
|
|||||||
NbtList::Compound(mut get_name, item) => {
|
NbtList::Compound(mut get_name, item) => {
|
||||||
get_name = name.clone();
|
get_name = name.clone();
|
||||||
NbtList::Compound(get_name, item)
|
NbtList::Compound(get_name, item)
|
||||||
},
|
}
|
||||||
_ => panic!("WTF")
|
_ => panic!("WTF"),
|
||||||
};
|
};
|
||||||
NbtItem::from(item)
|
NbtItem::from(item)
|
||||||
},
|
}
|
||||||
[0x0B] => NbtItem::from(from_i32_array(value)),
|
[0x0B] => NbtItem::from(from_i32_array(value)),
|
||||||
[0x0C] => NbtItem::from(from_i64_array(value)),
|
[0x0C] => NbtItem::from(from_i64_array(value)),
|
||||||
_ => {
|
_ => {
|
||||||
@ -223,7 +223,7 @@ pub mod read_data {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
use read_data::{from_bool_array, from_compound, from_i32_array, from_i64_array, from_nbt_list};
|
use read_data::{from_compound, from_i32_array, from_i64_array, from_i8_array, from_nbt_list};
|
||||||
|
|
||||||
pub enum NbtStatus {
|
pub enum NbtStatus {
|
||||||
/// 读取到了 End
|
/// 读取到了 End
|
||||||
@ -253,13 +253,13 @@ impl TryFrom<Cursor<&[u8]>> for NbtItem {
|
|||||||
let name = NbtValue::from_string(&mut value).as_string().unwrap();
|
let name = NbtValue::from_string(&mut value).as_string().unwrap();
|
||||||
let type_code: NbtStatus = match buff {
|
let type_code: NbtStatus = match buff {
|
||||||
[0x00] => NbtStatus::End,
|
[0x00] => NbtStatus::End,
|
||||||
[0x01] => NbtStatus::Going(NbtItem::Value(NbtValue::from_bool(&mut value))),
|
[0x01] => NbtStatus::Going(NbtItem::Value(NbtValue::from_i8(&mut value))),
|
||||||
[0x02] => NbtStatus::Going(NbtItem::Value(NbtValue::from_i16(&mut value))),
|
[0x02] => NbtStatus::Going(NbtItem::Value(NbtValue::from_i16(&mut value))),
|
||||||
[0x03] => NbtStatus::Going(NbtItem::Value(NbtValue::from_i32(&mut value))),
|
[0x03] => NbtStatus::Going(NbtItem::Value(NbtValue::from_i32(&mut value))),
|
||||||
[0x04] => NbtStatus::Going(NbtItem::Value(NbtValue::from_i64(&mut value))),
|
[0x04] => NbtStatus::Going(NbtItem::Value(NbtValue::from_i64(&mut value))),
|
||||||
[0x05] => NbtStatus::Going(NbtItem::Value(NbtValue::from_f32(&mut value))),
|
[0x05] => NbtStatus::Going(NbtItem::Value(NbtValue::from_f32(&mut value))),
|
||||||
[0x06] => NbtStatus::Going(NbtItem::Value(NbtValue::from_f64(&mut value))),
|
[0x06] => NbtStatus::Going(NbtItem::Value(NbtValue::from_f64(&mut value))),
|
||||||
[0x07] => NbtStatus::Going(NbtItem::from(from_bool_array(&mut value))),
|
[0x07] => NbtStatus::Going(NbtItem::from(from_i8_array(&mut value))),
|
||||||
[0x08] => NbtStatus::Going(NbtItem::Value(NbtValue::from_string(&mut value))),
|
[0x08] => NbtStatus::Going(NbtItem::Value(NbtValue::from_string(&mut value))),
|
||||||
[0x09] => NbtStatus::Going(NbtItem::from(from_nbt_list(&mut value))),
|
[0x09] => NbtStatus::Going(NbtItem::from(from_nbt_list(&mut value))),
|
||||||
[0x0A] => NbtStatus::Going(NbtItem::from(from_compound(&mut value))),
|
[0x0A] => NbtStatus::Going(NbtItem::from(from_compound(&mut value))),
|
||||||
@ -275,11 +275,7 @@ impl TryFrom<Cursor<&[u8]>> for NbtItem {
|
|||||||
)),
|
)),
|
||||||
};
|
};
|
||||||
#[cfg(feature = "core_debug")]
|
#[cfg(feature = "core_debug")]
|
||||||
println!(
|
println!("==type_code: {:?} reader pos: {:?}", buff, value.position());
|
||||||
"==type_code: {:?} reader pos: {:?}",
|
|
||||||
buff,
|
|
||||||
value.position()
|
|
||||||
);
|
|
||||||
match type_code {
|
match type_code {
|
||||||
NbtStatus::End => {
|
NbtStatus::End => {
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user