Merge "Update unsafe-libyaml to 0.2.11" into main
diff --git a/crates/aho-corasick/.android-checksum.json b/crates/aho-corasick/.android-checksum.json
new file mode 100644
index 0000000..dcc3a05
--- /dev/null
+++ b/crates/aho-corasick/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"src/byte_frequencies.rs":"48f82d36174dc29ec2d213057f828090cc9ae7cde6b29fd4821e5b2e750f8a7e","LICENSE-MIT":"e477ec620ffb08af8bae12ebe7771ec557bdf198ffd6015add93d41b75b64850","MODULE_LICENSE_MIT":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","src/packed/teddy/mod.rs":"cbdc9e3a5b584f08259d7580187b723cd9cca31054a958495a4fc7b51351dda4","Android.bp":"36e414362f0cd347bf04d3d6b6b2ea0dd781116ca5cf975311024cd05341661a","src/dfa.rs":"0f9b4a5dee19253b504254ffa58bcd94b63f3580a5435cd232c9b802deaf4b17","UNLICENSE":"967829e00fe60415a970e1672710f7f3b3ef4db1e08cd00e921961a829e51c09","README.md":"b8c59d13e2ad16ab0d1bccc3c1b7c1cb6037de06296d92ef5b14c3dd3abb3069","src/prefilter.rs":"327507b29727c2504821f5982b628e1657c4a3313ff67acc44566864ae42bb52","src/classes.rs":"3e7176b7c4662bcc62b87ca9b8253660786da5ff3e48b8ce16f8128fab9090e2","src/packed/teddy/README.md":"80acb387fcf8dca4a0be4c7480b06d1d792ebca7b02e02929cf42613ab598e05","DESIGN.md":"343bf543497f475db1d6a8da86c58ed6ed2c3a3423ec56af03362b341adab9d2","src/packed/pattern.rs":"1a143c304ef47e5f962a8775ca2227860e9c1c396573f9872237c2424aa0165d","METADATA":"c866a687c52edd0bc987790fb95db0b315c52fa1c7ad08327d3d72ad7cadb7f4","src/packed/teddy/compile.rs":"5fe2cfdb1a8a0248bc20d17dcc6cc1da5433ea8c28612803d85e11e462b31cae","src/packed/rabinkarp.rs":"679503f6375b2b966851fafc305834e78b1855ea32280864bf44c3c78b8a9e0a","src/packed/mod.rs":"ecc90be306db9aa25919a38b28f57b4fc289a52ed1e711f517a2fc667e5ebec1","src/nfa.rs":"60edf3499ce4d50143e03cd4a2e02b480c3501c1e6c3f135bfcc5f4767968a77","src/packed/tests.rs":"8e181bc4511c000c31f6590d8bfd04385633c09413d600dd9c8492473a8302dc","src/packed/api.rs":"d4832bebf8e98eb52261b206fc9edf73620e06acf47f97fefe17fc2c4dcecf3e","src/state_id.rs":"535bb308550d236ae6e462c1deb40fce894274e982f91edbb65a323cc9a3e928","rustfmt.toml":"180b0b088558e7982d755dba10aa4414920ed11c78cd96063404b84d690fb86f",".cargo-checksum.json":"adb12295ab4ca9191e5c95baa8efe78d3daf69b6e1632a13db8a66cc28abcb06","src/tests.rs":"ddf5ec8749629e61dbdaecfd92b18273a9589f23f8e5aee2405071534d8f2e8d","src/buffer.rs":"4732fba9d01d16f8228dc772c46ecb30cc7cb384523e1db9e454f9f9a0e192aa","src/automaton.rs":"14eba735f5fa2c361db38cfb3d1a5cdceade13149347d5a6793d53d02356ad57","src/lib.rs":"5e0025d37d72d3bde0cd1f0644e96c07a09e2a29959c771060dce75ea409d69e","COPYING":"7e2095b6d17d2d524a553ce879990287b4ca5be12c3ab759139f32ed920bd01e","cargo_embargo.json":"8aabc5e2932bd6a1575b498f0fc9b9058a68326b06550c00356d8ec97bcc04a3","src/error.rs":"401a220c493df019ac38c9caf9ffe17d75ef0416c0e1b2649080b9c34be9d936","src/ahocorasick.rs":"aae38fb5e19d1a402101b7dff50e0c57a0368a9b846f40e64a767b629fbd5ea6","src/packed/vector.rs":"84ca29c2df6d1ae8b5ccd20ec7979c9b9a5c93d9290d2b908cc2d473391a49f2","Cargo.toml":"b769554cf4764f7ad2d479f41044fdab9475d26afae75507b5fe90fa19fe5caa","LICENSE":"e477ec620ffb08af8bae12ebe7771ec557bdf198ffd6015add93d41b75b64850","src/packed/teddy/runtime.rs":"4824bd35fb50f994ab59802d9c33bf0caba46d5eb6320b0f022356ea065ac0bb","TEST_MAPPING":"6dd5db2416a8c37626e6080157b9e76ef4aae601b1a6a2fcec1e8789559e2595"}}
\ No newline at end of file
diff --git a/crates/aho-corasick/Android.bp b/crates/aho-corasick/Android.bp
index cce7692..131d08c 100644
--- a/crates/aho-corasick/Android.bp
+++ b/crates/aho-corasick/Android.bp
@@ -49,6 +49,7 @@
apex_available: [
"//apex_available:platform",
"com.android.compos",
+ "com.android.configinfrastructure",
"com.android.virt",
],
product_available: true,
diff --git a/crates/aho-corasick/cargo_embargo.json b/crates/aho-corasick/cargo_embargo.json
index be33f35..fda209b 100644
--- a/crates/aho-corasick/cargo_embargo.json
+++ b/crates/aho-corasick/cargo_embargo.json
@@ -3,8 +3,9 @@
"apex_available": [
"//apex_available:platform",
"com.android.compos",
+ "com.android.configinfrastructure",
"com.android.virt"
],
"run_cargo": false,
- "min_sdk_version": "29",
+ "min_sdk_version": "29"
}
diff --git a/crates/crossbeam-queue/.android-checksum.json b/crates/crossbeam-queue/.android-checksum.json
index d756584..93af0b1 100644
--- a/crates/crossbeam-queue/.android-checksum.json
+++ b/crates/crossbeam-queue/.android-checksum.json
@@ -1 +1 @@
-{"package":null,"files":{"LICENSE-MIT":"593bdd46275e49a263b81d8ee3722fd4fe9b452515844bcb39d06b9009948b6c","README.md":"9ed6153d3b087a6827edfb289cff02bd0b19fbdcbde0133cc0996327be0cb09e",".cargo-checksum.json":"45aa8ec8c037ce63e70a2d8d35ef96ba8a366ce65f37e6b70cc3064837016165","METADATA":"c14a0a8dcbab485078954f5811a6406227db1341abed84878ca86b01fa182567","LICENSE-APACHE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","src/array_queue.rs":"09f96c66a7f803f18eb4bedbfd6d3263163d148ca06ff0f58e153718e2c18e79","tests/array_queue.rs":"d7303d37dda188bef63d6d7f0e9b69fd946b305ffba81a7927649206258ad1a3","LICENSE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","Cargo.toml":"6e0090ab4559350f33ef28663682a776e3c8940fd9ea294d9fd6a138132f9c49","Android.bp":"38757d7abc13fa1ea0817044950223d2a0b5ec1d32aea6094718d85c13f7b657","src/seg_queue.rs":"706134bd840abc0b173b618337e2371b612212a84d964fabb725de5c67142ce3","src/lib.rs":"4ef695e550bc76c5f5ee2876b49c573ffccd1ce1feb20b301ee1027834ca5a6f","TEST_MAPPING":"6cb695115d16b2823afd2781f52efe8dd233f9b0d28bf942d2d6396c5a6e3b5d","CHANGELOG.md":"84d93453eb2c49a28f168723b76885a446c4c626b3af5a41165ab4686b1f246c","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","cargo_embargo.json":"40f98d98a6f4614cc2e26c1f364f1c3294773969ba80561c7030c2a156428ffe","tests/seg_queue.rs":"8b424c2ec55dccd3b7d2fea3044c1d9146afab1f99cb92f0555d2c18b9a5227c"}}
\ No newline at end of file
+{"package":null,"files":{"LICENSE-APACHE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","TEST_MAPPING":"6cb695115d16b2823afd2781f52efe8dd233f9b0d28bf942d2d6396c5a6e3b5d","LICENSE-MIT":"593bdd46275e49a263b81d8ee3722fd4fe9b452515844bcb39d06b9009948b6c","src/array_queue.rs":"ae8c317b357ce50f5bfcdd16ca64f89123d6b0dcdf67a3cc4c80cfd43216692a","CHANGELOG.md":"7bf3725b69856409e6722f91bac12285ba6ba761566b5627324859d78796eaa5","tests/array_queue.rs":"d7303d37dda188bef63d6d7f0e9b69fd946b305ffba81a7927649206258ad1a3","tests/seg_queue.rs":"3394f1b763826063b09c29c533fe1fa23fdf01e054645ce8daf3638ecde33748","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","README.md":"9ed6153d3b087a6827edfb289cff02bd0b19fbdcbde0133cc0996327be0cb09e","src/lib.rs":"a57ba412dcc39d5b5766ac2ec607b2520c83636890a1ef836787544e102727ee","Android.bp":"cb0a35aee6ffafe1b0ea05524fe7da9c476ed3bfb1a53f7e28ab5d139e7141c2",".cargo-checksum.json":"c2af5a379723767ae3f61759c07bb1610f80286a14e38fa09b19efc36b3ef257","LICENSE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","src/seg_queue.rs":"14b635bcf175f36402e29b8e520145a3f603520ac04bbf57092d5f5e2d4ee59f","Cargo.toml":"87bb63fad2ad0013088121b9ffd274dbdd6e7970d921c0693c8f78ef8e248f86","METADATA":"26eb3f181693a812225f153d599d1c68c6116fccd2d1d9a39776538e0aa167ca","cargo_embargo.json":"40f98d98a6f4614cc2e26c1f364f1c3294773969ba80561c7030c2a156428ffe"}}
\ No newline at end of file
diff --git a/crates/crossbeam-queue/.cargo-checksum.json b/crates/crossbeam-queue/.cargo-checksum.json
index 7203b0e..8393b1b 100644
--- a/crates/crossbeam-queue/.cargo-checksum.json
+++ b/crates/crossbeam-queue/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"CHANGELOG.md":"2c10a9c588d28ae9edabaaf50d224d523790080cbf82783143e170395aed2a35","Cargo.toml":"8435b3df4a6f66aa2860e874b1f98f074535b6ad9b92708ed90ccb3410f7479c","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"5734ed989dfca1f625b40281ee9f4530f91b2411ec01cb748223e7eb87e201ab","README.md":"88a50c7a414f6d8431061f0741dc6b46db012ec338b4e57d5d3e9746eeaaa543","src/array_queue.rs":"9c3360280522ae0ea3640bf8a3e454038860a6891a5fa11ef6c0237a45fb2963","src/lib.rs":"87d7a57fab9f20e088bb0612b10ee9499c2512d714b5453ab34c0400a3243ea0","src/seg_queue.rs":"f97a024d8f2a4dad332b5ff371c81a1b3750caf25cc67ae5d61ee789509b55b1","tests/array_queue.rs":"426dd0ff6698bd63108b3a567703ec2e635bce0f337134116e237b11925a7716","tests/seg_queue.rs":"7abb1008638a947440b201e1ad15f273020730715fae1f876407f1b967ae28ff"},"package":"df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35"}
\ No newline at end of file
+{"files":{"CHANGELOG.md":"6e8a6185cb02ca76f58a29feb15cf075807b89e578c4da1b7d6228e2598c0e01","Cargo.toml":"187f241aad3a4370b6e112f2f5ec5ee212e8ad36d7919d2db29bc4245e70f76f","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"5734ed989dfca1f625b40281ee9f4530f91b2411ec01cb748223e7eb87e201ab","README.md":"88a50c7a414f6d8431061f0741dc6b46db012ec338b4e57d5d3e9746eeaaa543","src/array_queue.rs":"86c732c258c8b929a259e22d772241de80ec2741b18fce8cbb23815e4dd731d4","src/lib.rs":"e3b6c8dacf2f9f18d66c82cafdc0b2a06d3b13af91a303e66f81f069bbff4627","src/seg_queue.rs":"49db03c80c97a44213a98e73b2db0be60b7d1253cd9d90bc01e8d3aa5e83bce3","tests/array_queue.rs":"426dd0ff6698bd63108b3a567703ec2e635bce0f337134116e237b11925a7716","tests/seg_queue.rs":"8dfa361d8f82467a58aff3741a3410689631d3c28d8e32b5c104148ba330ef74"},"package":"0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115"}
\ No newline at end of file
diff --git a/crates/crossbeam-queue/Android.bp b/crates/crossbeam-queue/Android.bp
index c464ae0..5738387 100644
--- a/crates/crossbeam-queue/Android.bp
+++ b/crates/crossbeam-queue/Android.bp
@@ -18,7 +18,7 @@
host_supported: true,
crate_name: "array_queue",
cargo_env_compat: true,
- cargo_pkg_version: "0.3.11",
+ cargo_pkg_version: "0.3.12",
crate_root: "tests/array_queue.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -43,7 +43,7 @@
host_supported: true,
crate_name: "seg_queue",
cargo_env_compat: true,
- cargo_pkg_version: "0.3.11",
+ cargo_pkg_version: "0.3.12",
crate_root: "tests/seg_queue.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -68,7 +68,7 @@
host_supported: true,
crate_name: "crossbeam_queue",
cargo_env_compat: true,
- cargo_pkg_version: "0.3.11",
+ cargo_pkg_version: "0.3.12",
crate_root: "src/lib.rs",
edition: "2021",
features: [
diff --git a/crates/crossbeam-queue/CHANGELOG.md b/crates/crossbeam-queue/CHANGELOG.md
index 68c9bbd..e19a639 100644
--- a/crates/crossbeam-queue/CHANGELOG.md
+++ b/crates/crossbeam-queue/CHANGELOG.md
@@ -1,3 +1,7 @@
+# Version 0.3.12
+
+- Fix stack overflow when pushing large value to `SegQueue`. (#1146, #1147, #1159)
+
# Version 0.3.11
- Remove dependency on `cfg-if`. (#1072)
diff --git a/crates/crossbeam-queue/Cargo.toml b/crates/crossbeam-queue/Cargo.toml
index 6853e32..fa771d0 100644
--- a/crates/crossbeam-queue/Cargo.toml
+++ b/crates/crossbeam-queue/Cargo.toml
@@ -13,7 +13,13 @@
edition = "2021"
rust-version = "1.60"
name = "crossbeam-queue"
-version = "0.3.11"
+version = "0.3.12"
+build = false
+autolib = false
+autobins = false
+autoexamples = false
+autotests = false
+autobenches = false
description = "Concurrent queues"
homepage = "https://github.com/crossbeam-rs/crossbeam/tree/master/crossbeam-queue"
readme = "README.md"
@@ -32,6 +38,18 @@
license = "MIT OR Apache-2.0"
repository = "https://github.com/crossbeam-rs/crossbeam"
+[lib]
+name = "crossbeam_queue"
+path = "src/lib.rs"
+
+[[test]]
+name = "array_queue"
+path = "tests/array_queue.rs"
+
+[[test]]
+name = "seg_queue"
+path = "tests/seg_queue.rs"
+
[dependencies.crossbeam-utils]
version = "0.8.18"
default-features = false
@@ -47,3 +65,19 @@
"alloc",
"crossbeam-utils/std",
]
+
+[lints.clippy.declare_interior_mutable_const]
+level = "allow"
+priority = 1
+
+[lints.clippy.lint_groups_priority]
+level = "allow"
+priority = 1
+
+[lints.rust.unexpected_cfgs]
+level = "warn"
+priority = 0
+check-cfg = [
+ "cfg(crossbeam_loom)",
+ "cfg(crossbeam_sanitize)",
+]
diff --git a/crates/crossbeam-queue/METADATA b/crates/crossbeam-queue/METADATA
index 77ef110..68a748d 100644
--- a/crates/crossbeam-queue/METADATA
+++ b/crates/crossbeam-queue/METADATA
@@ -1,17 +1,17 @@
name: "crossbeam-queue"
description: "Concurrent queues"
third_party {
- version: "0.3.11"
+ version: "0.3.12"
license_type: NOTICE
last_upgrade_date {
year: 2024
- month: 2
- day: 1
+ month: 12
+ day: 19
}
homepage: "https://crates.io/crates/crossbeam-queue"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/crossbeam-queue/crossbeam-queue-0.3.11.crate"
- version: "0.3.11"
+ value: "https://static.crates.io/crates/crossbeam-queue/crossbeam-queue-0.3.12.crate"
+ version: "0.3.12"
}
}
diff --git a/crates/crossbeam-queue/src/array_queue.rs b/crates/crossbeam-queue/src/array_queue.rs
index 3f6d195..0d2569d 100644
--- a/crates/crossbeam-queue/src/array_queue.rs
+++ b/crates/crossbeam-queue/src/array_queue.rs
@@ -290,7 +290,7 @@
let slot = unsafe { self.buffer.get_unchecked(index) };
let stamp = slot.stamp.load(Ordering::Acquire);
- // If the the stamp is ahead of the head by 1, we may attempt to pop.
+ // If the stamp is ahead of the head by 1, we may attempt to pop.
if head + 1 == stamp {
let new = if index + 1 < self.cap {
// Same lap, incremented index.
diff --git a/crates/crossbeam-queue/src/lib.rs b/crates/crossbeam-queue/src/lib.rs
index 4d95f54..c166187 100644
--- a/crates/crossbeam-queue/src/lib.rs
+++ b/crates/crossbeam-queue/src/lib.rs
@@ -5,6 +5,7 @@
//! * [`ArrayQueue`], a bounded MPMC queue that allocates a fixed-capacity buffer on construction.
//! * [`SegQueue`], an unbounded MPMC queue that allocates small buffers, segments, on demand.
+#![no_std]
#![doc(test(
no_crate_inject,
attr(
@@ -18,10 +19,11 @@
rust_2018_idioms,
unreachable_pub
)]
-#![cfg_attr(not(feature = "std"), no_std)]
#[cfg(all(feature = "alloc", target_has_atomic = "ptr"))]
extern crate alloc;
+#[cfg(feature = "std")]
+extern crate std;
#[cfg(all(feature = "alloc", target_has_atomic = "ptr"))]
mod array_queue;
diff --git a/crates/crossbeam-queue/src/seg_queue.rs b/crates/crossbeam-queue/src/seg_queue.rs
index 973a77f..ad8f9c1 100644
--- a/crates/crossbeam-queue/src/seg_queue.rs
+++ b/crates/crossbeam-queue/src/seg_queue.rs
@@ -1,3 +1,4 @@
+use alloc::alloc::{alloc_zeroed, handle_alloc_error, Layout};
use alloc::boxed::Box;
use core::cell::UnsafeCell;
use core::fmt;
@@ -36,11 +37,6 @@
}
impl<T> Slot<T> {
- const UNINIT: Self = Self {
- value: UnsafeCell::new(MaybeUninit::uninit()),
- state: AtomicUsize::new(0),
- };
-
/// Waits until a value is written into the slot.
fn wait_write(&self) {
let backoff = Backoff::new();
@@ -62,12 +58,31 @@
}
impl<T> Block<T> {
- /// Creates an empty block that starts at `start_index`.
- fn new() -> Block<T> {
- Self {
- next: AtomicPtr::new(ptr::null_mut()),
- slots: [Slot::UNINIT; BLOCK_CAP],
+ const LAYOUT: Layout = {
+ let layout = Layout::new::<Self>();
+ assert!(
+ layout.size() != 0,
+ "Block should never be zero-sized, as it has an AtomicPtr field"
+ );
+ layout
+ };
+
+ /// Creates an empty block.
+ fn new() -> Box<Self> {
+ // SAFETY: layout is not zero-sized
+ let ptr = unsafe { alloc_zeroed(Self::LAYOUT) };
+ // Handle allocation failure
+ if ptr.is_null() {
+ handle_alloc_error(Self::LAYOUT)
}
+ // SAFETY: This is safe because:
+ // [1] `Block::next` (AtomicPtr) may be safely zero initialized.
+ // [2] `Block::slots` (Array) may be safely zero initialized because of [3, 4].
+ // [3] `Slot::value` (UnsafeCell) may be safely zero initialized because it
+ // holds a MaybeUninit.
+ // [4] `Slot::state` (AtomicUsize) may be safely zero initialized.
+ // TODO: unsafe { Box::new_zeroed().assume_init() }
+ unsafe { Box::from_raw(ptr.cast()) }
}
/// Waits until the next pointer is set.
@@ -176,7 +191,7 @@
}
}
- /// Pushes an element into the queue.
+ /// Pushes back an element to the tail.
///
/// # Examples
///
@@ -209,12 +224,12 @@
// If we're going to have to install the next block, allocate it in advance in order to
// make the wait for other threads as short as possible.
if offset + 1 == BLOCK_CAP && next_block.is_none() {
- next_block = Some(Box::new(Block::<T>::new()));
+ next_block = Some(Block::<T>::new());
}
// If this is the first push operation, we need to allocate the first block.
if block.is_null() {
- let new = Box::into_raw(Box::new(Block::<T>::new()));
+ let new = Box::into_raw(Block::<T>::new());
if self
.tail
@@ -268,7 +283,7 @@
}
}
- /// Pops an element from the queue.
+ /// Pops the head element from the queue.
///
/// If the queue is empty, `None` is returned.
///
@@ -280,7 +295,9 @@
/// let q = SegQueue::new();
///
/// q.push(10);
+ /// q.push(20);
/// assert_eq!(q.pop(), Some(10));
+ /// assert_eq!(q.pop(), Some(20));
/// assert!(q.pop().is_none());
/// ```
pub fn pop(&self) -> Option<T> {
diff --git a/crates/crossbeam-queue/tests/seg_queue.rs b/crates/crossbeam-queue/tests/seg_queue.rs
index bf5fb99..d2ad1e4 100644
--- a/crates/crossbeam-queue/tests/seg_queue.rs
+++ b/crates/crossbeam-queue/tests/seg_queue.rs
@@ -193,3 +193,18 @@
assert_eq!(i, j);
}
}
+
+// If `Block` is created on the stack, the array of slots will multiply this `BigStruct` and
+// probably overflow the thread stack. It's now directly created on the heap to avoid this.
+#[test]
+fn stack_overflow() {
+ const N: usize = 32_768;
+ struct BigStruct {
+ _data: [u8; N],
+ }
+
+ let q = SegQueue::new();
+ q.push(BigStruct { _data: [0u8; N] });
+
+ for _data in q.into_iter() {}
+}
diff --git a/crates/crossbeam-utils/.android-checksum.json b/crates/crossbeam-utils/.android-checksum.json
index d11a849..d376bf2 100644
--- a/crates/crossbeam-utils/.android-checksum.json
+++ b/crates/crossbeam-utils/.android-checksum.json
@@ -1 +1 @@
-{"package":null,"files":{"cargo_embargo.json":"3b16a06c1ae79ed2753a650f5ba8bbea32e808419d9485b5b7f60a8c5e52de9c","LICENSE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","no_atomic.rs":"860fb5efe7fa54e4b16b08096b177c848445d51bdbbe4e58d046d41c8fc5d7b1","src/cache_padded.rs":"9c5c2f832a0ca89a9f56bb92cc3c6eb3f60b3662c8bd71183872aebd9e2905c7","src/atomic/atomic_cell.rs":"a5b34665b5fd30cc029aa892af320ad121db41b358cd7b40fc6a043d0adb6e2a","src/atomic/seq_lock.rs":"753f0449be335065ec5f60cdb97894b3e2643994ce79949263221ef52a33c188","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","src/atomic/seq_lock_wide.rs":"eb9c21f1ec1502927e7336cd24a0855ac004ea14029ac955d1214e100adac177","Cargo.toml":"de2577226fc63e9528b8dd6b772fc5f590e614ce485d27fc737fe7c2fc461b62","src/thread.rs":"bca88f2ef4e55e8d19f8d80f8fa30e018ecb76bb29a94da83790d6bce776b25c","src/atomic/mod.rs":"54033ed259d2fef98495b4dd976c6186fe7ebe20d520c238dc09df3ecf158b9b","tests/thread.rs":"61ea0589510cb70431a35815e24600187dbfe54541006c48b93dbbc1bc2bffab","tests/wait_group.rs":"0a8dfbb5accc16b1d594fee81637b0dd060f278f3c351b04eafc7135da587e3f","METADATA":"2ae4935737061b75f202b978e7d185d9d7acb6119faef69cc065a3363ec67fda","CHANGELOG.md":"db2abda1e8f05718fd1876cc7358f494b95b4bcab369cc30a3de7c7c1ce9a139","tests/sharded_lock.rs":"7d798ed8cd41400fc0e25b3e26d848378bbdc187dcd3839ed19453e674fee959","patches/disable_panic_tests_on_android.patch":"d2df839cd227770234097d4b015e85ae842534dc275ba6883f9f396fbe7b3d25","LICENSE-MIT":"593bdd46275e49a263b81d8ee3722fd4fe9b452515844bcb39d06b9009948b6c","build.rs":"c3c9a8ace58d37899da8f0d2ebf3fac09a0e8bcd5766f1de9ef3c64aa50964d3","tests/atomic_cell.rs":"074064ceae709270da24ee40136e9fb8454d1d0bd60c30f500f945e60c148457","src/sync/sharded_lock.rs":"a987298e37a26012844df517412444e0aa707607e2c975b773c71f5c4aa0e131","tests/parker.rs":"f737f376acae6c77757c4c366bb8c66d114f0ccd4dd1acef8357d60a003f26a0","src/atomic/consume.rs":"67f93b42f4bab80706930b0cc7567e49e23d532d12dd167b39ad5b509c63651e","src/sync/parker.rs":"8f5b4242a8a7d43cdd3db500015f93c86354ca988e721c34818a087ed3396584","benches/atomic_cell.rs":"84d149c89705cb2b154edc3a9be6aaad5ef23b14c893f6858d8ef016a3bbc6f2","build-common.rs":"e13e364f6b81015f842e88b4638b3ade364c3b2e87d46fe39ea0129768acf1d9","src/sync/once_lock.rs":"08a4108bd35c6b2bd5bb114cd21057955594651d8cfc711037751af0fd86c130","src/lib.rs":"3ea5d2df6e94a6c8c6506ba362cdc162d179dc901a467736c820f55a1dea929e","README.md":"1dd7c0be216daba7aa829bafc821cb41a449e250c0cdf50c73b0bbbf7905e998","TEST_MAPPING":"a80d38c2de632af2dbfbd2c2157833c104683caa49df776c4df68e0c08a6738a","src/sync/wait_group.rs":"0f93213e413717dc65aeb77f8b084c597217185aec7f5a4822639e2467c2f917",".cargo-checksum.json":"ce91e85d6a2fc2ff9705f8a7d5d90bba66cc7e5ef4a661d969815cc8cf2ba5df","Android.bp":"b130cb8b2a01cda00eea4beb172eca9173355b6a48d2b2cf4d21e20b9f33b30f","tests/cache_padded.rs":"e9f4bc385f30365fc41ff4278a3c238884155ca37eb7f7ccbec61ba604b93943","src/backoff.rs":"18f5ab1a802824843d6fa5fbb65dae8729e3d2d148e8a0d10c292fe7b1b73441","LICENSE-APACHE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","src/sync/mod.rs":"54792ddf6ebdef495d9adffda104aa208f09bdd7b0f6882721fddfdea2256048"}}
\ No newline at end of file
+{"package":null,"files":{"cargo_embargo.json":"3b16a06c1ae79ed2753a650f5ba8bbea32e808419d9485b5b7f60a8c5e52de9c","src/atomic/atomic_cell.rs":"bd532d25debe9a7891f576f5c2b0dd29e25382ea76d50b61073e7367d5d2a9d4","src/sync/parker.rs":"8f5b4242a8a7d43cdd3db500015f93c86354ca988e721c34818a087ed3396584","tests/wait_group.rs":"0a8dfbb5accc16b1d594fee81637b0dd060f278f3c351b04eafc7135da587e3f","src/sync/once_lock.rs":"08a4108bd35c6b2bd5bb114cd21057955594651d8cfc711037751af0fd86c130","src/sync/wait_group.rs":"0f93213e413717dc65aeb77f8b084c597217185aec7f5a4822639e2467c2f917","src/atomic/seq_lock.rs":"753f0449be335065ec5f60cdb97894b3e2643994ce79949263221ef52a33c188","tests/thread.rs":"61ea0589510cb70431a35815e24600187dbfe54541006c48b93dbbc1bc2bffab","LICENSE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","src/atomic/consume.rs":"67f93b42f4bab80706930b0cc7567e49e23d532d12dd167b39ad5b509c63651e","Android.bp":"4391e5848210b359151ac6d2580490e9337f31ff8bfc1edeade4178b6f7fe093","src/sync/sharded_lock.rs":"a987298e37a26012844df517412444e0aa707607e2c975b773c71f5c4aa0e131",".cargo-checksum.json":"99f0009f323669991de21bc0e3b4dd0d72d550a73256c9773c6373856e3b3563","LICENSE-MIT":"593bdd46275e49a263b81d8ee3722fd4fe9b452515844bcb39d06b9009948b6c","tests/cache_padded.rs":"e9f4bc385f30365fc41ff4278a3c238884155ca37eb7f7ccbec61ba604b93943","src/thread.rs":"bca88f2ef4e55e8d19f8d80f8fa30e018ecb76bb29a94da83790d6bce776b25c","benches/atomic_cell.rs":"84d149c89705cb2b154edc3a9be6aaad5ef23b14c893f6858d8ef016a3bbc6f2","src/atomic/mod.rs":"54033ed259d2fef98495b4dd976c6186fe7ebe20d520c238dc09df3ecf158b9b","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","tests/atomic_cell.rs":"074064ceae709270da24ee40136e9fb8454d1d0bd60c30f500f945e60c148457","tests/parker.rs":"f737f376acae6c77757c4c366bb8c66d114f0ccd4dd1acef8357d60a003f26a0","TEST_MAPPING":"a80d38c2de632af2dbfbd2c2157833c104683caa49df776c4df68e0c08a6738a","patches/disable_panic_tests_on_android.patch":"d2df839cd227770234097d4b015e85ae842534dc275ba6883f9f396fbe7b3d25","tests/sharded_lock.rs":"7d798ed8cd41400fc0e25b3e26d848378bbdc187dcd3839ed19453e674fee959","build.rs":"c3c9a8ace58d37899da8f0d2ebf3fac09a0e8bcd5766f1de9ef3c64aa50964d3","src/atomic/seq_lock_wide.rs":"eb9c21f1ec1502927e7336cd24a0855ac004ea14029ac955d1214e100adac177","src/cache_padded.rs":"a33523dd74d374924d29ce186269962393bd3c50657cd66d14d1e20147b01f8f","LICENSE-APACHE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","README.md":"1dd7c0be216daba7aa829bafc821cb41a449e250c0cdf50c73b0bbbf7905e998","Cargo.toml":"bea41aba2e97535acf1a58efedd3bfa9caa8edaae459620732df014c87cfa91f","build-common.rs":"e13e364f6b81015f842e88b4638b3ade364c3b2e87d46fe39ea0129768acf1d9","src/lib.rs":"3ea5d2df6e94a6c8c6506ba362cdc162d179dc901a467736c820f55a1dea929e","src/backoff.rs":"18f5ab1a802824843d6fa5fbb65dae8729e3d2d148e8a0d10c292fe7b1b73441","src/sync/mod.rs":"54792ddf6ebdef495d9adffda104aa208f09bdd7b0f6882721fddfdea2256048","CHANGELOG.md":"f0edcd8c0607f34e8ae536e348cdb39ee8708cfcc97a5abbd3ecc8a1788805c9","METADATA":"9b716a4f7244a4e4f363fc39ac60e380842c5c0d619688eb1e1d0a44f2dd80e0","no_atomic.rs":"860fb5efe7fa54e4b16b08096b177c848445d51bdbbe4e58d046d41c8fc5d7b1"}}
\ No newline at end of file
diff --git a/crates/crossbeam-utils/.cargo-checksum.json b/crates/crossbeam-utils/.cargo-checksum.json
index 52c2591..6b57c4f 100644
--- a/crates/crossbeam-utils/.cargo-checksum.json
+++ b/crates/crossbeam-utils/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"CHANGELOG.md":"7c2aa4bd785c04b76aee28092d94326ecdd2db9e835602b9ebd22d92691ff492","Cargo.toml":"23eb8e5ae0b5a1a16ac02e5948457cce8fe212a72dddbba9046384306aa29695","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"5734ed989dfca1f625b40281ee9f4530f91b2411ec01cb748223e7eb87e201ab","README.md":"3c82bbb994f54ab76a9ed30a42dfd095c6e636258d379b9be3fbf66324310e71","benches/atomic_cell.rs":"c927eb3cd1e5ecc4b91adbc3bde98af15ffab4086190792ba64d5cde0e24df3d","build-common.rs":"502cb7494549bed6fa10ac7bea36e880eeb60290dc69b679ac5c92b376469562","build.rs":"7a7f9e56ea7fb4f78c4e532b84b9d27be719d600e85eaeb3a2f4b79a4f0b419c","no_atomic.rs":"fc1baa4489d9842988bacaaa545a7d7d0e2f8b93cfa0b7d1ae31f21256e4cb0a","src/atomic/atomic_cell.rs":"cc7078265c6df82f544eb1adf0962ee9fffbb650b8f793d57047afbf205022ac","src/atomic/consume.rs":"381c2a8b13312ca0525d53ca1b7d0d4f525ddb154951fa3e216b061ad22012ff","src/atomic/mod.rs":"712e2337e710c07116e977154ea4247a1c065bf5599e6bf368138e715b403f6d","src/atomic/seq_lock.rs":"27182e6b87a9db73c5f6831759f8625f9fcdec3c2828204c444aef04f427735a","src/atomic/seq_lock_wide.rs":"9888dd03116bb89ca36d4ab8d5a0b5032107a2983a7eb8024454263b09080088","src/backoff.rs":"8715f0303ec91d1847c8ac3fc24bcc002a22a7284ade610e5eff4181f85827c7","src/cache_padded.rs":"2134de7661d9dd2dec05fdc862b9c0cb6483344d97095817ea83475a919d8c3b","src/lib.rs":"060dabc6dc07de92a7afa57dcbc47222a95ef5819d543ad854858c3b329d6637","src/sync/mod.rs":"eca73c04f821859b8434d2b93db87d160dc6a3f65498ca201cd40d732ca4c134","src/sync/once_lock.rs":"aa8f957604d1119c4fc7038a18c14a6281230e81005f31201c099acff284ad4b","src/sync/parker.rs":"698996e7530da1f3815df11c89df7d916155229cbfd022cccbd555f1d1d31985","src/sync/sharded_lock.rs":"f96d536f5622fe2a0a0f7d8117be31e4b1ed607544c52c7e2ffcd1f51a6b93a1","src/sync/wait_group.rs":"3e339aab014f50e214fea535c841755113ea058153378ed54e50a4acb403c937","src/thread.rs":"04610787ba88f1f59549874a13fc037f2dcf4d8b5f1daaf08378f05c2b3c0039","tests/atomic_cell.rs":"716c864d4e103039dc5cd8bf6110da4cbabafc7e4e03819aa197828e8fb0a9c7","tests/cache_padded.rs":"1bfaff8354c8184e1ee1f902881ca9400b60effb273b0d3f752801a483d2b66d","tests/parker.rs":"6def4721287d9d70b1cfd63ebb34e1c83fbb3376edbad2bc8aac6ef69dd99d20","tests/sharded_lock.rs":"314adeb8a651a28935f7a49c9a261b8fa1fd82bf6a16c865a5aced6216d7e40b","tests/thread.rs":"9a7d7d3028c552fd834c68598b04a1cc252a816bc20ab62cec060d6cd09cab10","tests/wait_group.rs":"2a41533a5f7f113d19cd2bdafcc2abf86509109652274156efdd74abd00896b6"},"package":"22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"}
\ No newline at end of file
+{"files":{"CHANGELOG.md":"366caba01b88f421c71b97f61b9806abbf05e1ba0d24e4bf034191c1f8aa03b8","Cargo.toml":"961aa297754d8fdbae9e23d15bbbcfdcd2b50b2db56becddb84e8cba4f730713","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"5734ed989dfca1f625b40281ee9f4530f91b2411ec01cb748223e7eb87e201ab","README.md":"3c82bbb994f54ab76a9ed30a42dfd095c6e636258d379b9be3fbf66324310e71","benches/atomic_cell.rs":"c927eb3cd1e5ecc4b91adbc3bde98af15ffab4086190792ba64d5cde0e24df3d","build-common.rs":"502cb7494549bed6fa10ac7bea36e880eeb60290dc69b679ac5c92b376469562","build.rs":"7a7f9e56ea7fb4f78c4e532b84b9d27be719d600e85eaeb3a2f4b79a4f0b419c","no_atomic.rs":"fc1baa4489d9842988bacaaa545a7d7d0e2f8b93cfa0b7d1ae31f21256e4cb0a","src/atomic/atomic_cell.rs":"6d8b83b65c73644abc10ec88a1442c8db531ae140de79197901510fcaea45966","src/atomic/consume.rs":"381c2a8b13312ca0525d53ca1b7d0d4f525ddb154951fa3e216b061ad22012ff","src/atomic/mod.rs":"712e2337e710c07116e977154ea4247a1c065bf5599e6bf368138e715b403f6d","src/atomic/seq_lock.rs":"27182e6b87a9db73c5f6831759f8625f9fcdec3c2828204c444aef04f427735a","src/atomic/seq_lock_wide.rs":"9888dd03116bb89ca36d4ab8d5a0b5032107a2983a7eb8024454263b09080088","src/backoff.rs":"8715f0303ec91d1847c8ac3fc24bcc002a22a7284ade610e5eff4181f85827c7","src/cache_padded.rs":"b6ff04ecf6de9124c0069c014d35f37de543cff1c4bfc1f260586aa49a5af6d8","src/lib.rs":"060dabc6dc07de92a7afa57dcbc47222a95ef5819d543ad854858c3b329d6637","src/sync/mod.rs":"eca73c04f821859b8434d2b93db87d160dc6a3f65498ca201cd40d732ca4c134","src/sync/once_lock.rs":"aa8f957604d1119c4fc7038a18c14a6281230e81005f31201c099acff284ad4b","src/sync/parker.rs":"698996e7530da1f3815df11c89df7d916155229cbfd022cccbd555f1d1d31985","src/sync/sharded_lock.rs":"f96d536f5622fe2a0a0f7d8117be31e4b1ed607544c52c7e2ffcd1f51a6b93a1","src/sync/wait_group.rs":"3e339aab014f50e214fea535c841755113ea058153378ed54e50a4acb403c937","src/thread.rs":"04610787ba88f1f59549874a13fc037f2dcf4d8b5f1daaf08378f05c2b3c0039","tests/atomic_cell.rs":"716c864d4e103039dc5cd8bf6110da4cbabafc7e4e03819aa197828e8fb0a9c7","tests/cache_padded.rs":"1bfaff8354c8184e1ee1f902881ca9400b60effb273b0d3f752801a483d2b66d","tests/parker.rs":"6def4721287d9d70b1cfd63ebb34e1c83fbb3376edbad2bc8aac6ef69dd99d20","tests/sharded_lock.rs":"314adeb8a651a28935f7a49c9a261b8fa1fd82bf6a16c865a5aced6216d7e40b","tests/thread.rs":"9a7d7d3028c552fd834c68598b04a1cc252a816bc20ab62cec060d6cd09cab10","tests/wait_group.rs":"2a41533a5f7f113d19cd2bdafcc2abf86509109652274156efdd74abd00896b6"},"package":"d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"}
\ No newline at end of file
diff --git a/crates/crossbeam-utils/Android.bp b/crates/crossbeam-utils/Android.bp
index deecf19..e3c3230 100644
--- a/crates/crossbeam-utils/Android.bp
+++ b/crates/crossbeam-utils/Android.bp
@@ -18,7 +18,7 @@
host_supported: true,
crate_name: "crossbeam_utils",
cargo_env_compat: true,
- cargo_pkg_version: "0.8.20",
+ cargo_pkg_version: "0.8.21",
crate_root: "src/lib.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -38,7 +38,7 @@
host_supported: true,
crate_name: "atomic_cell",
cargo_env_compat: true,
- cargo_pkg_version: "0.8.20",
+ cargo_pkg_version: "0.8.21",
crate_root: "tests/atomic_cell.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -61,7 +61,7 @@
host_supported: true,
crate_name: "cache_padded",
cargo_env_compat: true,
- cargo_pkg_version: "0.8.20",
+ cargo_pkg_version: "0.8.21",
crate_root: "tests/cache_padded.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -84,7 +84,7 @@
host_supported: true,
crate_name: "parker",
cargo_env_compat: true,
- cargo_pkg_version: "0.8.20",
+ cargo_pkg_version: "0.8.21",
crate_root: "tests/parker.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -107,7 +107,7 @@
host_supported: true,
crate_name: "sharded_lock",
cargo_env_compat: true,
- cargo_pkg_version: "0.8.20",
+ cargo_pkg_version: "0.8.21",
crate_root: "tests/sharded_lock.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -130,7 +130,7 @@
host_supported: true,
crate_name: "thread",
cargo_env_compat: true,
- cargo_pkg_version: "0.8.20",
+ cargo_pkg_version: "0.8.21",
crate_root: "tests/thread.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -153,7 +153,7 @@
host_supported: true,
crate_name: "wait_group",
cargo_env_compat: true,
- cargo_pkg_version: "0.8.20",
+ cargo_pkg_version: "0.8.21",
crate_root: "tests/wait_group.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -176,7 +176,7 @@
host_supported: true,
crate_name: "crossbeam_utils",
cargo_env_compat: true,
- cargo_pkg_version: "0.8.20",
+ cargo_pkg_version: "0.8.21",
crate_root: "src/lib.rs",
edition: "2021",
features: [
diff --git a/crates/crossbeam-utils/CHANGELOG.md b/crates/crossbeam-utils/CHANGELOG.md
index 4da2deb..5aa1967 100644
--- a/crates/crossbeam-utils/CHANGELOG.md
+++ b/crates/crossbeam-utils/CHANGELOG.md
@@ -1,3 +1,7 @@
+# Version 0.8.21
+
+- Improve implementation of `CachePadded`. (#1152)
+
# Version 0.8.20
- Implement `Display` for `CachePadded`. (#1097)
@@ -29,7 +33,7 @@
- Add `#[clippy::has_significant_drop]` to `ShardedLock{Read,Write}Guard`. (#958)
- Improve handling of very large timeout. (#953)
-- Soft-deprecate `thread::scope()` in favor of the more efficient `std::thread::scope` that stabilized on Rust 1.63. (#954)
+- Soft-deprecate `thread::scope()` in favor of the more efficient `std::thread::scope` that stabilized in Rust 1.63. (#954)
# Version 0.8.14
diff --git a/crates/crossbeam-utils/Cargo.toml b/crates/crossbeam-utils/Cargo.toml
index 33bafd7..c93dc2f 100644
--- a/crates/crossbeam-utils/Cargo.toml
+++ b/crates/crossbeam-utils/Cargo.toml
@@ -13,7 +13,13 @@
edition = "2021"
rust-version = "1.60"
name = "crossbeam-utils"
-version = "0.8.20"
+version = "0.8.21"
+build = "build.rs"
+autolib = false
+autobins = false
+autoexamples = false
+autotests = false
+autobenches = false
description = "Utilities for concurrent programming"
homepage = "https://github.com/crossbeam-rs/crossbeam/tree/master/crossbeam-utils"
readme = "README.md"
@@ -32,6 +38,38 @@
license = "MIT OR Apache-2.0"
repository = "https://github.com/crossbeam-rs/crossbeam"
+[lib]
+name = "crossbeam_utils"
+path = "src/lib.rs"
+
+[[test]]
+name = "atomic_cell"
+path = "tests/atomic_cell.rs"
+
+[[test]]
+name = "cache_padded"
+path = "tests/cache_padded.rs"
+
+[[test]]
+name = "parker"
+path = "tests/parker.rs"
+
+[[test]]
+name = "sharded_lock"
+path = "tests/sharded_lock.rs"
+
+[[test]]
+name = "thread"
+path = "tests/thread.rs"
+
+[[test]]
+name = "wait_group"
+path = "tests/wait_group.rs"
+
+[[bench]]
+name = "atomic_cell"
+path = "benches/atomic_cell.rs"
+
[dependencies]
[dev-dependencies.rand]
@@ -46,6 +84,18 @@
version = "0.7.1"
optional = true
+[lints.clippy.declare_interior_mutable_const]
+level = "allow"
+priority = 1
+
+[lints.clippy.lint_groups_priority]
+level = "allow"
+priority = 1
+
[lints.rust.unexpected_cfgs]
level = "warn"
priority = 0
+check-cfg = [
+ "cfg(crossbeam_loom)",
+ "cfg(crossbeam_sanitize)",
+]
diff --git a/crates/crossbeam-utils/METADATA b/crates/crossbeam-utils/METADATA
index 315ca8f..a588177 100644
--- a/crates/crossbeam-utils/METADATA
+++ b/crates/crossbeam-utils/METADATA
@@ -1,17 +1,17 @@
name: "crossbeam-utils"
description: "Utilities for concurrent programming"
third_party {
- version: "0.8.20"
+ version: "0.8.21"
license_type: NOTICE
last_upgrade_date {
year: 2024
- month: 10
- day: 3
+ month: 12
+ day: 19
}
homepage: "https://crates.io/crates/crossbeam-utils"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/crossbeam-utils/crossbeam-utils-0.8.20.crate"
- version: "0.8.20"
+ value: "https://static.crates.io/crates/crossbeam-utils/crossbeam-utils-0.8.21.crate"
+ version: "0.8.21"
}
}
diff --git a/crates/crossbeam-utils/src/atomic/atomic_cell.rs b/crates/crossbeam-utils/src/atomic/atomic_cell.rs
index 06ccf2e..4747253 100644
--- a/crates/crossbeam-utils/src/atomic/atomic_cell.rs
+++ b/crates/crossbeam-utils/src/atomic/atomic_cell.rs
@@ -36,6 +36,7 @@
///
/// Using MaybeUninit to prevent code outside the cell from observing partially initialized state:
/// <https://github.com/crossbeam-rs/crossbeam/issues/833>
+ /// (This rustc bug has been fixed in Rust 1.64.)
///
/// Note:
/// - we'll never store uninitialized `T` due to our API only using initialized `T`.
@@ -1000,7 +1001,6 @@
// stored at addresses that are multiples of 3. It'd be too bad if `LEN` was divisible by 3.
// In order to protect from such cases, we simply choose a large prime number for `LEN`.
const LEN: usize = 67;
- #[allow(clippy::declare_interior_mutable_const)]
const L: CachePadded<SeqLock> = CachePadded::new(SeqLock::new());
static LOCKS: [CachePadded<SeqLock>; LEN] = [L; LEN];
diff --git a/crates/crossbeam-utils/src/cache_padded.rs b/crates/crossbeam-utils/src/cache_padded.rs
index 44212b8..6c930c6 100644
--- a/crates/crossbeam-utils/src/cache_padded.rs
+++ b/crates/crossbeam-utils/src/cache_padded.rs
@@ -67,7 +67,7 @@
// - https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf
// - https://github.com/facebook/folly/blob/1b5288e6eea6df074758f877c849b6e73bbb9fbb/folly/lang/Align.h#L107
//
-// ARM's big.LITTLE architecture has asymmetric cores and "big" cores have 128-byte cache line size.
+// aarch64/arm64ec's big.LITTLE architecture has asymmetric cores and "big" cores have 128-byte cache line size.
//
// Sources:
// - https://www.mono-project.com/news/2016/09/12/arm64-icache/
@@ -81,6 +81,7 @@
any(
target_arch = "x86_64",
target_arch = "aarch64",
+ target_arch = "arm64ec",
target_arch = "powerpc64",
),
repr(align(128))
@@ -130,6 +131,7 @@
not(any(
target_arch = "x86_64",
target_arch = "aarch64",
+ target_arch = "arm64ec",
target_arch = "powerpc64",
target_arch = "arm",
target_arch = "mips",
diff --git a/crates/gdbstub_arch/.android-checksum.json b/crates/gdbstub_arch/.android-checksum.json
new file mode 100644
index 0000000..c596c5f
--- /dev/null
+++ b/crates/gdbstub_arch/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"src/mips/reg/id.rs":"48164d6873d5a980dbe2aa52c0399bd5a1130cd387049b0c0c18d155d545587e","cargo_embargo.json":"84459a3d28b2de537000617d709682791207b299a562af849851183686bc30fe","src/x86/mod.rs":"2e329aa7eea892f75f3fd85d6f1a673a4bc1eacc5228ed9c32649cfc266306bc","src/msp430/mod.rs":"b925be0db26014ce4ee93f8fbb5c09d8ad53a6ce3145293dc0970aa503ed6a86","MODULE_LICENSE_MIT":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","src/lib.rs":"f723e0304e67d1e7127973268b07fb009b5ef3e5bad1505169859622e8b0985d","src/msp430/reg/id.rs":"c27920185d243033c980f382b18ab8968776df538e2b0d0330abc9a54a8bfdb6","src/mips/reg/mips.rs":"ce0479d4a40324d44062dd618796129f7549c3b7b84125fe5c9015cd6341f65e","src/ppc/reg/common.rs":"1eaec3126ac8fb2682796699bc6486bd33e457d7f5645c5b2d49c2b008716abc","src/aarch64/sysregs.xml":"f32263dcaedfc1e813bbd88c6aa1e857b612140a13d4d45f08a2740763f33f36","src/x86/reg/id.rs":"f840d620d50b58e71fc0dfd5ffe1371d96b541bb3a910ef9069a9d0797cbe626","TEST_MAPPING":"facb3f06cc1efeab2fb418ebf419ee9c930e6ba8c6058f4f1318fcadbee3d501","src/aarch64/core.xml":"b066884eb741838faa841a7317f8be7c59020216375066dc43fbba6f4ee39776",".cargo-checksum.json":"1c3cdadbf908a426cc4596bb92955e8c61805949635d110e55d1f391e56d7953","src/aarch64/reg/id.rs":"01f85fb8a5cc827463577230a42e385034334f71737009b39064085f1d5ee4d8","LICENSE":"7457894bdaad6d42efadc1cfb5f1325f7daff52ac0716f313078b39542139c26","src/aarch64/mod.rs":"4a1944551d28c28a2c8ee55f01e8cd2396aed0e9f43ebda7b9745509ee26e294","src/arm/reg/mod.rs":"255404bea529fa02d4d85cfb18760c2da43316a9b6b70e847ee43eef734a7344","src/arm/reg/arm_core.rs":"c0570a8d35a3172db22962fd9cc64903be754878ed86bcf5b4f9c04c62857a54","src/arm/reg/id.rs":"9908d494f17de614d3627797506a4d2d6fba57280965d49c51352e73a777ead6","src/ppc/reg/mod.rs":"63f1177e874efe736bd4b83a06fe8a431a5283871239db553942921ac2d697b0","src/msp430/reg/msp430.rs":"5a5826130be6671bc94ee62de2e5125d1e0ce080442df8a7adfbe4a0f97790de","src/mips/mod.rs":"30583a73923314085851c783fda39c06f0843ab4d43e0aedb2ad1c482bd31903","src/msp430/reg/mod.rs":"26ddafd5afa38179a0e8a7256c2a068c8460279e1833e1337f069f8450651b01","METADATA":"a418c8b3823ca3a9602543ab918e0b079912093590e6b6990e10b78a13cf5331","src/riscv/rv64i.xml":"781db55b72e04d0e3cf0db375875699b5c1db4196554e5d0c17199b3ead85895","CHANGELOG.md":"7b531484e82cb421b1b70221f0590bce765cdba2b1ccf24beef8b45eacda87f0","src/riscv/rv32i.xml":"7ffb3476abd38666fd4be49f5e236fd0ddcbf131767b3da6efe6408d89415bb3","src/x86/reg/core64.rs":"fa09bc7be825fe85153edfeb90e4fcf80389fd67ed51bc521595455941943145","src/ppc/reg/id.rs":"6ef1c58c8ae35e73332504be55e5782c920b09fa68448f406b1473a5c637f9a2","src/x86/reg/core32.rs":"8b2e89881454145a6253b0095d896dfdb98592d8f271a664a3c68a2ad21a4d1a","Cargo.toml":"d871874f39446a9ffe797d3efdb4b6a9698584805e5c707a2ad63061b20db9b6","src/mips/reg/mod.rs":"8dfcdeb2b979a396fea5e85f2c900e8e5f1cd2058dc882e8556f6a4906c68019","src/aarch64/reg/mod.rs":"6966d5861acc747cec0faad7ab86caea0a356a734e9f8d5f865286751f706e5a","src/aarch64/reg/aarch64_core.rs":"d862106bbb3ffdc9a92e099fafcbd8112e1d59eced2b5ddad6724d35759ada3f","Android.bp":"20daa2f1d6b682eca294425b9163637cdbb1a0ce420e07d69f169fbfc2a4af77","src/riscv/mod.rs":"a470b480bdcac06e36cb53f0d2337605e49ab5c83a2b21dafadde370ddf8a1ff","src/aarch64/fpu.xml":"ad266a2f56e2d6a3c9da2b1f1ecb66cd1a0e8fc27dbae1714c2ecc7ae7c89a9e","src/ppc/mod.rs":"5e938c21d7bfbfdab3535931aa610b39602f76a0200b4b2c4a108fb793d1dd67","src/x86/reg/mod.rs":"cbc81d4b4b0f749b4b1244cb015c145345cdc7025fed83a5d226736908636435","src/riscv/reg/id.rs":"15ce985d288ba2f55eec435c4591e5558c885245884f73267308c004bf7dbc81","README.md":"3b266d0ca59d3c643ed2deb5299929f4772da61855f713bde64526bf6b922a10","src/arm/mod.rs":"6aafcd42e46c934a70f806e80c4daf842bc7203a8272676ef6364f5a96b58ecc","src/riscv/reg/mod.rs":"00a644b696af94e95dd96c09161e5bf75d254dc6c55ba959daac662f2868098c","src/riscv/reg/riscv.rs":"bd77fe51e7ca51fefa0bbdaea85207885435351de4f29898dafc9651a0d2ef3a"}}
\ No newline at end of file
diff --git a/crates/gdbstub_arch/.cargo-checksum.json b/crates/gdbstub_arch/.cargo-checksum.json
index c08b077..7aa358f 100644
--- a/crates/gdbstub_arch/.cargo-checksum.json
+++ b/crates/gdbstub_arch/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"CHANGELOG.md":"455f1e7e2354c7211bc62ef338c5427266582c9eca3569c63c96e16a6249e768","Cargo.toml":"ff019f46d835cf1bb9171b58a343fdda59aeca1616cea488bd0d296e856eaa1a","LICENSE":"ee94602763c4e8b0a677881f52d71fa5bd326066cd843de8c6cc2173d5ebe32b","README.md":"579c9c555a81d6994516fa21b4920edf4469b53cda0f4d11f1cf792d3cb4cef7","src/aarch64/core.xml":"f39407719cb6051c1cbd8c17202dc60aa0933d1f2b15af1b98e14f0a37ec8ec2","src/aarch64/fpu.xml":"50f8ecab782ceb7e772d75b2b20d914d533e0c2589f0341c1aab0763f39778ad","src/aarch64/mod.rs":"01920d6da255601ac90eb7e6df8d348a8eb7c461c4cf47ee97aae06a852e8dd8","src/aarch64/reg/aarch64_core.rs":"3afef4419896e26bfc96a233f3eed360d45d9ed7b2cc88cd9a465c84f0d27036","src/aarch64/reg/id.rs":"1bc4d7651d3d42afbaf92475c8eb9ae03d64bac33534484dd866e26fb1f0af95","src/aarch64/reg/mod.rs":"f49b5ad5688262d5ba799c6086f8167bc4291d54773810e31e9bcbaf75cf7d55","src/aarch64/sysregs.xml":"bdbb19daa7f9fdc3ca0cb2a8efba663740d26040d76beb75fe75aead54982f24","src/arm/mod.rs":"5b6f674a882138c510902441cf3f9c9f9e2737622637101941537efa1388eb84","src/arm/reg/arm_core.rs":"3a075aae4ec2912b50becd8edfa9109044c97d43e8c087d88d6835c3d910892a","src/arm/reg/id.rs":"12e93c35abca1a1a37969e50fe0bbe2107326b2581bad3e0c74a8741c18bbb5b","src/arm/reg/mod.rs":"7a36c878ed0152e2f19d38ebedb750044b2b2563de9c0d6202c607ee05d80902","src/lib.rs":"5bfc9f034d99fa9c9e9de54503f3a8a3478eddec11e403a680d93f0f7e327334","src/mips/mod.rs":"6ac86ce44c9ad70f13dc7208c21a39c6ec74ffd2ab38a9086fe5871ad3b192f9","src/mips/reg/id.rs":"cc727dd56a52cf4801d7ae9b4c539881e50acff2af5d3a68c4b0c52190b47dce","src/mips/reg/mips.rs":"34623959dceed2127d86c3deea02253db1f5e8bbeebb28795d54d331476f4903","src/mips/reg/mod.rs":"10a42597e193e8d713e400fc940536dc588d5f4a348998a4f0197f65a31c858a","src/msp430/mod.rs":"786b8fe436ff72b0ddefeea0143fa4761c0c75fe56f59c0d7b6add32545e3b11","src/msp430/reg/id.rs":"73581adb85b529f56daaf997539a7075d6ae444e2cedf2fe78e1257084356f3b","src/msp430/reg/mod.rs":"b3022fb95f30d2212500034506ae0255843b845c3538e7bcf2afb10c7d280cc5","src/msp430/reg/msp430.rs":"467f47ef12fd3873eea5f86fb6db61d69bb6877c0919e6e673178ca0697ed10b","src/ppc/mod.rs":"be59421298ae973479e1c0bd3c8d7d42b6f3e7b5b403d22bd5666225e91eb2dc","src/ppc/reg/common.rs":"e7a0eca316130f2c21ec240f20cd5120257d7aa81c473030ee47398e1639997b","src/ppc/reg/id.rs":"ba6128cb64254419c629233c073d01fc1bd01ee767318a6de555fc66fa939016","src/ppc/reg/mod.rs":"d6fe08eb10d2fbab7e6033255f11c849866d22e0b5b85f77c444ab97093c1461","src/riscv/mod.rs":"ea796dc2e7d01247bf05fd1b8835e5d76cddb487d792ac6d70ea7df7906358fe","src/riscv/reg/id.rs":"b098712c791b3cc2bdbd7e9e84e27d1c66ec27049f0fdfaf3eb085f14fb487a4","src/riscv/reg/mod.rs":"7c9b9d3a48304fad09c3a28d393f1a04cd8d4680a338afb23fdc5a67ff9bf599","src/riscv/reg/riscv.rs":"1636e1d8c6bab6bf053a869e46f86ff3323fb96a8056cad4ddad49e290f261da","src/x86/mod.rs":"d943aa3590dfc0702b81955572512be77853aab60fdda8ea71e01fbb9ef96568","src/x86/reg/core32.rs":"c7deabc0fe78344cf6a03bce31f2153aae01b124275761f5252c740f995e4d4b","src/x86/reg/core64.rs":"6b5c64c75a6649442f4cf1e0e2e533d343aa2d6e7434e2f2cf13662165e24036","src/x86/reg/id.rs":"a0864258a66c1cc48d871fb3510bdeb7e1d16d822ead87f2c580a4823bf321c1","src/x86/reg/mod.rs":"2d5b56b51f84d9f796ecc1645d3f3e57479d323b167210be7fa2cf63cd2008e0"},"package":"4e3b1357bd3203fc09a6601327ae0ab38865d14231d0b65d3143f5762cc7977d"}
\ No newline at end of file
+{"files":{"CHANGELOG.md":"0729d23a90de33d56a2e4bbaff7b6249b3bf6a2d28afcc7905edd73b476da73b","Cargo.toml":"0588287bc61d9e1a8cef3d9a8857186b3b549a589b8391f2ce8f76147cdff7d1","LICENSE":"ee94602763c4e8b0a677881f52d71fa5bd326066cd843de8c6cc2173d5ebe32b","README.md":"579c9c555a81d6994516fa21b4920edf4469b53cda0f4d11f1cf792d3cb4cef7","src/aarch64/core.xml":"f39407719cb6051c1cbd8c17202dc60aa0933d1f2b15af1b98e14f0a37ec8ec2","src/aarch64/fpu.xml":"50f8ecab782ceb7e772d75b2b20d914d533e0c2589f0341c1aab0763f39778ad","src/aarch64/mod.rs":"01920d6da255601ac90eb7e6df8d348a8eb7c461c4cf47ee97aae06a852e8dd8","src/aarch64/reg/aarch64_core.rs":"3afef4419896e26bfc96a233f3eed360d45d9ed7b2cc88cd9a465c84f0d27036","src/aarch64/reg/id.rs":"1bc4d7651d3d42afbaf92475c8eb9ae03d64bac33534484dd866e26fb1f0af95","src/aarch64/reg/mod.rs":"f49b5ad5688262d5ba799c6086f8167bc4291d54773810e31e9bcbaf75cf7d55","src/aarch64/sysregs.xml":"bdbb19daa7f9fdc3ca0cb2a8efba663740d26040d76beb75fe75aead54982f24","src/arm/mod.rs":"5b6f674a882138c510902441cf3f9c9f9e2737622637101941537efa1388eb84","src/arm/reg/arm_core.rs":"3a075aae4ec2912b50becd8edfa9109044c97d43e8c087d88d6835c3d910892a","src/arm/reg/id.rs":"12e93c35abca1a1a37969e50fe0bbe2107326b2581bad3e0c74a8741c18bbb5b","src/arm/reg/mod.rs":"7a36c878ed0152e2f19d38ebedb750044b2b2563de9c0d6202c607ee05d80902","src/lib.rs":"5bfc9f034d99fa9c9e9de54503f3a8a3478eddec11e403a680d93f0f7e327334","src/mips/mod.rs":"6ac86ce44c9ad70f13dc7208c21a39c6ec74ffd2ab38a9086fe5871ad3b192f9","src/mips/reg/id.rs":"cc727dd56a52cf4801d7ae9b4c539881e50acff2af5d3a68c4b0c52190b47dce","src/mips/reg/mips.rs":"34623959dceed2127d86c3deea02253db1f5e8bbeebb28795d54d331476f4903","src/mips/reg/mod.rs":"10a42597e193e8d713e400fc940536dc588d5f4a348998a4f0197f65a31c858a","src/msp430/mod.rs":"786b8fe436ff72b0ddefeea0143fa4761c0c75fe56f59c0d7b6add32545e3b11","src/msp430/reg/id.rs":"73581adb85b529f56daaf997539a7075d6ae444e2cedf2fe78e1257084356f3b","src/msp430/reg/mod.rs":"b3022fb95f30d2212500034506ae0255843b845c3538e7bcf2afb10c7d280cc5","src/msp430/reg/msp430.rs":"467f47ef12fd3873eea5f86fb6db61d69bb6877c0919e6e673178ca0697ed10b","src/ppc/mod.rs":"be59421298ae973479e1c0bd3c8d7d42b6f3e7b5b403d22bd5666225e91eb2dc","src/ppc/reg/common.rs":"e7a0eca316130f2c21ec240f20cd5120257d7aa81c473030ee47398e1639997b","src/ppc/reg/id.rs":"ba6128cb64254419c629233c073d01fc1bd01ee767318a6de555fc66fa939016","src/ppc/reg/mod.rs":"d6fe08eb10d2fbab7e6033255f11c849866d22e0b5b85f77c444ab97093c1461","src/riscv/mod.rs":"c75903293f857f3b885d30cf45d0902218e925b055466ebed2e9c03683ce1c38","src/riscv/reg/id.rs":"b098712c791b3cc2bdbd7e9e84e27d1c66ec27049f0fdfaf3eb085f14fb487a4","src/riscv/reg/mod.rs":"7c9b9d3a48304fad09c3a28d393f1a04cd8d4680a338afb23fdc5a67ff9bf599","src/riscv/reg/riscv.rs":"1636e1d8c6bab6bf053a869e46f86ff3323fb96a8056cad4ddad49e290f261da","src/riscv/rv32i.xml":"b83bf38286d3df94a4a1895ef0d8d22427a20a30de6fa840b3fdb8f1c4db4a01","src/riscv/rv64i.xml":"c8eee48ef707a951b587753712d1d02bcec644e13fed32a10461eb4a2e799bbd","src/x86/mod.rs":"d943aa3590dfc0702b81955572512be77853aab60fdda8ea71e01fbb9ef96568","src/x86/reg/core32.rs":"c7deabc0fe78344cf6a03bce31f2153aae01b124275761f5252c740f995e4d4b","src/x86/reg/core64.rs":"6b5c64c75a6649442f4cf1e0e2e533d343aa2d6e7434e2f2cf13662165e24036","src/x86/reg/id.rs":"a0864258a66c1cc48d871fb3510bdeb7e1d16d822ead87f2c580a4823bf321c1","src/x86/reg/mod.rs":"2d5b56b51f84d9f796ecc1645d3f3e57479d323b167210be7fa2cf63cd2008e0"},"package":"328a9e9425db13770d0d11de6332a608854266e44c53d12776be7b4aa427e3de"}
\ No newline at end of file
diff --git a/crates/gdbstub_arch/Android.bp b/crates/gdbstub_arch/Android.bp
index 1def445..f1b3b5d 100644
--- a/crates/gdbstub_arch/Android.bp
+++ b/crates/gdbstub_arch/Android.bp
@@ -18,7 +18,7 @@
host_supported: true,
crate_name: "gdbstub_arch",
cargo_env_compat: true,
- cargo_pkg_version: "0.3.0",
+ cargo_pkg_version: "0.3.1",
crate_root: "src/lib.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -37,7 +37,7 @@
host_supported: true,
crate_name: "gdbstub_arch",
cargo_env_compat: true,
- cargo_pkg_version: "0.3.0",
+ cargo_pkg_version: "0.3.1",
crate_root: "src/lib.rs",
edition: "2018",
rustlibs: [
diff --git a/crates/gdbstub_arch/CHANGELOG.md b/crates/gdbstub_arch/CHANGELOG.md
index 2c5a96a..13bd8da 100644
--- a/crates/gdbstub_arch/CHANGELOG.md
+++ b/crates/gdbstub_arch/CHANGELOG.md
@@ -2,6 +2,10 @@
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+# 0.3.1
+
+- RISC-V: List all integer registers (for lldb compatibility) [\#149](https://github.com/daniel5151/gdbstub/pull/149) ([danlehmann](https://github.com/danlehmann))
+
# 0.3.0
#### Breaking Arch Changes
diff --git a/crates/gdbstub_arch/Cargo.toml b/crates/gdbstub_arch/Cargo.toml
index 0e3562d..e5c3c9d 100644
--- a/crates/gdbstub_arch/Cargo.toml
+++ b/crates/gdbstub_arch/Cargo.toml
@@ -12,8 +12,13 @@
[package]
edition = "2018"
name = "gdbstub_arch"
-version = "0.3.0"
+version = "0.3.1"
authors = ["Daniel Prilik <[email protected]>"]
+build = false
+autobins = false
+autoexamples = false
+autotests = false
+autobenches = false
description = "Implementations of `gdbstub::arch::Arch` for various architectures."
homepage = "https://github.com/daniel5151/gdbstub"
documentation = "https://docs.rs/gdbstub_arch"
@@ -33,6 +38,10 @@
license = "MIT OR Apache-2.0"
repository = "https://github.com/daniel5151/gdbstub"
+[lib]
+name = "gdbstub_arch"
+path = "src/lib.rs"
+
[dependencies.gdbstub]
version = "0.7"
default-features = false
diff --git a/crates/gdbstub_arch/METADATA b/crates/gdbstub_arch/METADATA
index e8e1c52..b55b5b9 100644
--- a/crates/gdbstub_arch/METADATA
+++ b/crates/gdbstub_arch/METADATA
@@ -1,17 +1,17 @@
name: "gdbstub_arch"
description: "Implementations of `gdbstub::arch::Arch` for various architectures."
third_party {
- version: "0.3.0"
+ version: "0.3.1"
license_type: NOTICE
last_upgrade_date {
- year: 2023
+ year: 2024
month: 12
- day: 16
+ day: 19
}
homepage: "https://crates.io/crates/gdbstub_arch"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/gdbstub_arch/gdbstub_arch-0.3.0.crate"
- version: "0.3.0"
+ value: "https://static.crates.io/crates/gdbstub_arch/gdbstub_arch-0.3.1.crate"
+ version: "0.3.1"
}
}
diff --git a/crates/gdbstub_arch/src/riscv/mod.rs b/crates/gdbstub_arch/src/riscv/mod.rs
index b086396..8faed74 100644
--- a/crates/gdbstub_arch/src/riscv/mod.rs
+++ b/crates/gdbstub_arch/src/riscv/mod.rs
@@ -15,21 +15,21 @@
impl Arch for Riscv32 {
type Usize = u32;
type Registers = reg::RiscvCoreRegs<u32>;
- type RegId = reg::id::RiscvRegId<u32>;
type BreakpointKind = usize;
+ type RegId = reg::id::RiscvRegId<u32>;
fn target_description_xml() -> Option<&'static str> {
- Some(r#"<target version="1.0"><architecture>riscv:rv32</architecture></target>"#)
+ Some(include_str!("rv32i.xml"))
}
}
impl Arch for Riscv64 {
type Usize = u64;
type Registers = reg::RiscvCoreRegs<u64>;
- type RegId = reg::id::RiscvRegId<u64>;
type BreakpointKind = usize;
+ type RegId = reg::id::RiscvRegId<u64>;
fn target_description_xml() -> Option<&'static str> {
- Some(r#"<target version="1.0"><architecture>riscv:rv64</architecture></target>"#)
+ Some(include_str!("rv64i.xml"))
}
}
diff --git a/crates/gdbstub_arch/src/riscv/rv32i.xml b/crates/gdbstub_arch/src/riscv/rv32i.xml
new file mode 100644
index 0000000..dc948c7
--- /dev/null
+++ b/crates/gdbstub_arch/src/riscv/rv32i.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2018-2024 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!-- Register numbers are hard-coded in order to maintain backward
+ compatibility with older versions of tools that didn't use xml
+ register descriptions. -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.riscv.cpu">
+ <reg name="zero" bitsize="32" type="int" regnum="0"/>
+ <reg name="ra" bitsize="32" type="code_ptr"/>
+ <reg name="sp" bitsize="32" type="data_ptr"/>
+ <reg name="gp" bitsize="32" type="data_ptr"/>
+ <reg name="tp" bitsize="32" type="data_ptr"/>
+ <reg name="t0" bitsize="32" type="int"/>
+ <reg name="t1" bitsize="32" type="int"/>
+ <reg name="t2" bitsize="32" type="int"/>
+ <reg name="fp" bitsize="32" type="data_ptr"/>
+ <reg name="s1" bitsize="32" type="int"/>
+ <reg name="a0" bitsize="32" type="int"/>
+ <reg name="a1" bitsize="32" type="int"/>
+ <reg name="a2" bitsize="32" type="int"/>
+ <reg name="a3" bitsize="32" type="int"/>
+ <reg name="a4" bitsize="32" type="int"/>
+ <reg name="a5" bitsize="32" type="int"/>
+ <reg name="a6" bitsize="32" type="int"/>
+ <reg name="a7" bitsize="32" type="int"/>
+ <reg name="s2" bitsize="32" type="int"/>
+ <reg name="s3" bitsize="32" type="int"/>
+ <reg name="s4" bitsize="32" type="int"/>
+ <reg name="s5" bitsize="32" type="int"/>
+ <reg name="s6" bitsize="32" type="int"/>
+ <reg name="s7" bitsize="32" type="int"/>
+ <reg name="s8" bitsize="32" type="int"/>
+ <reg name="s9" bitsize="32" type="int"/>
+ <reg name="s10" bitsize="32" type="int"/>
+ <reg name="s11" bitsize="32" type="int"/>
+ <reg name="t3" bitsize="32" type="int"/>
+ <reg name="t4" bitsize="32" type="int"/>
+ <reg name="t5" bitsize="32" type="int"/>
+ <reg name="t6" bitsize="32" type="int"/>
+ <reg name="pc" bitsize="32" type="code_ptr"/>
+</feature>
diff --git a/crates/gdbstub_arch/src/riscv/rv64i.xml b/crates/gdbstub_arch/src/riscv/rv64i.xml
new file mode 100644
index 0000000..60f42f2
--- /dev/null
+++ b/crates/gdbstub_arch/src/riscv/rv64i.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2018-2024 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!-- Register numbers are hard-coded in order to maintain backward
+ compatibility with older versions of tools that didn't use xml
+ register descriptions. -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.riscv.cpu">
+ <reg name="zero" bitsize="64" type="int" regnum="0"/>
+ <reg name="ra" bitsize="64" type="code_ptr"/>
+ <reg name="sp" bitsize="64" type="data_ptr"/>
+ <reg name="gp" bitsize="64" type="data_ptr"/>
+ <reg name="tp" bitsize="64" type="data_ptr"/>
+ <reg name="t0" bitsize="64" type="int"/>
+ <reg name="t1" bitsize="64" type="int"/>
+ <reg name="t2" bitsize="64" type="int"/>
+ <reg name="fp" bitsize="64" type="data_ptr"/>
+ <reg name="s1" bitsize="64" type="int"/>
+ <reg name="a0" bitsize="64" type="int"/>
+ <reg name="a1" bitsize="64" type="int"/>
+ <reg name="a2" bitsize="64" type="int"/>
+ <reg name="a3" bitsize="64" type="int"/>
+ <reg name="a4" bitsize="64" type="int"/>
+ <reg name="a5" bitsize="64" type="int"/>
+ <reg name="a6" bitsize="64" type="int"/>
+ <reg name="a7" bitsize="64" type="int"/>
+ <reg name="s2" bitsize="64" type="int"/>
+ <reg name="s3" bitsize="64" type="int"/>
+ <reg name="s4" bitsize="64" type="int"/>
+ <reg name="s5" bitsize="64" type="int"/>
+ <reg name="s6" bitsize="64" type="int"/>
+ <reg name="s7" bitsize="64" type="int"/>
+ <reg name="s8" bitsize="64" type="int"/>
+ <reg name="s9" bitsize="64" type="int"/>
+ <reg name="s10" bitsize="64" type="int"/>
+ <reg name="s11" bitsize="64" type="int"/>
+ <reg name="t3" bitsize="64" type="int"/>
+ <reg name="t4" bitsize="64" type="int"/>
+ <reg name="t5" bitsize="64" type="int"/>
+ <reg name="t6" bitsize="64" type="int"/>
+ <reg name="pc" bitsize="64" type="code_ptr"/>
+</feature>
diff --git a/crates/getrandom/.android-checksum.json b/crates/getrandom/.android-checksum.json
index 3a3ddb8..cbcc000 100644
--- a/crates/getrandom/.android-checksum.json
+++ b/crates/getrandom/.android-checksum.json
@@ -1 +1 @@
-{"package":null,"files":{"README.md":"a4cd5c22091413629aea58cc34f0014237b266eaa0534ef0a46cbfa35511c42e","src/macos.rs":"a47d672888680b4c7be4c081248981bf9911784edad0c6d06a42c3311863e7b6","src/emscripten.rs":"94fea8e5c384f2d7a956e52348ee0354c48fa766effefa7ab0491318e77b634d","src/wasi.rs":"839bb7bce5633b54ba2a4e43404cc3712a25a1e8f82d5ae44fad775bba9bc800","SECURITY.md":"929082ae171a30fb927a138b78f73ab7aea17e40de4edc4654abc016e8543015","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","tests/common/mod.rs":"b613a10410fcf889671159ade1640be8d280081dbe9fdb1820d50c1fdaccebdf","tests/normal.rs":"9384081481d1938914f0ad2fdeaf25a77837f29a9494e7b434901c68e6249e94","TEST_MAPPING":"2cd6f4afb5af5c3904391c9529784cc5cb807ff26fded3432926596cf2dea2e2","src/error.rs":"0450cdd547033f28d8e3dc1b0d074bcd30d35ebd1f3a7a0c6627a5f79cac9533","src/util_libc.rs":"2b233d92061f3be0f7a206b5687e9537d7f20671c3a2703c3c75240e12ba048c","src/custom.rs":"0ad89672700339a265dc2eb2aaf711bfa663dd6cdc6ffb5035b19bb08d613869","src/apple-other.rs":"507348cfd9f7a901775736141a823a2fc9bd3df4031d4b60145e6352b9c49889","src/error_impls.rs":"c0c3142124738475055c7d40c2b03eeae12a8134002d63f183bda06ddb7d39f8","src/linux_android.rs":"dd66a6d8bf3122b3b35c749dee99f0be88c4932060d11dc18dd888c8523b5e8a","LICENSE":"03b15e95d152fa1cbd3018297314e1dddc2f42a60e0dac5f5911cee6ef32362c","src/use_file.rs":"5b3e45e7d1160f78bad99f21f08a004f5f6a968522346dc57c1b70180c25c8a1","src/lazy.rs":"f0d8fe778ec52bcb68a7bcc1edbd5c6a4dde5132fa50bee7e37f59375d3a7b6f","src/openbsd.rs":"7320f1f5bc3731a85f5c065141aecb6d36f12c65b1317169ab94bfb5c64bd083","LICENSE-MIT":"592035a4fc2b0ed693143496481a6795b646d7021f271c5d2411cfed024a48d4","src/vita.rs":"ea6f892fcd554013ec0d77155796ff7da2e505fb13f7ab4f2cd9ca6387387267","src/bsd_arandom.rs":"1932f7cc4f28774cd65648d6377eae8573d91589d02e07af27c7e1f48dc1fa63","Cargo.toml":"91d5b922661defa2a6f3ad2915679e917aa74e1880697e1d367db301a245ec70","Android.bp":"285937f40dd02e23d5329b3d4dc6fdb83588853929ced4e31838c6ad76a875ac","src/js.rs":"7cf7c5d1204347937afb7a4dd784b824687a0f845d56f6c0a10ffb64fc87bf9d","src/dragonfly.rs":"ea373dbacb81b376184d71269199cffa7b43ce9bddb517062620c00583b47a73","src/util.rs":"73e191ac7cfca223ff3a4b3f0fb08a7619d9d7c9b6096b25ec09916e3bf173f2","src/hermit.rs":"a0e3e3814e047c432021e026841f22d1e135aed10aa011b13a66f702ae9cf9cf",".cargo-checksum.json":"f75d4441d013b028eb9fabbe89181be3108c9fa730f9d0d8a96c80cadf6d0025","CHANGELOG.md":"2768aa20ff1c8893ba547e38b62d381008631de5383f5aae3cbe6773669d379d","tests/rdrand.rs":"8540ee451df9db01e9e907652792bbbdcc04f4bd4d8851215ddae01f9944eafd","src/solid.rs":"a0d725d4a9f8592c4b5befaac871eb7ffededb95d051541bfb07d1543489fc53","src/solaris_illumos.rs":"3a70106bd8662f64e64ad5f61ba09f73407b4ce73d12807cd7aeaf9a1834ba12","tests/custom.rs":"67cd8fe2148fe8c4b56bef38b5020a54657b5dc7c71b9965c17fa6c41aa0308a","METADATA":"beddb7489ea6d0140b54e3240ff3f93ab1ee8b8e2bd26fd8124a87a7027bb5f7","LICENSE-APACHE":"03b15e95d152fa1cbd3018297314e1dddc2f42a60e0dac5f5911cee6ef32362c","cargo_embargo.json":"9c226dbb5951904cb949dc299b21a4922a0b195ef445337d6d3abe0547d76048","src/3ds.rs":"1404f3ea1469d1e11955d98415aadc92a732154fd7a1df1b395261333b01f516","benches/buffer.rs":"8cfe97a19185f7edc87db501ca635742bc3e85a3d6fe1285070bad1018f113eb","src/windows.rs":"e8e139f2b42fcddc4eeb22af616cc55b2f24e4b170a747c6ee1a537d8010ed6e","src/vxworks.rs":"4180c5d67cd00267ab7ea7fd04b5739323ca0004e67557fec6db466ed95a5d5f","src/hurd.rs":"f9d3ff5e672074a1948f40de5711d4a099ebc117f01a908de405b27362642efb","src/rdrand.rs":"33916d0f9bd802862fbdc003a175e8b8969a126118a169027ec017a4937d8748","src/fuchsia.rs":"9bf7cfe31b1b0121164d20795e114ea8eaf2f1e0cab1622a538b070b7e14e513","src/lib.rs":"f7f21d4d14d0f1054b179d5d2774b5e3c6a3685d7ab4460b652c7b62b8eb3eff","src/espidf.rs":"a8aea26e1081c15e4a2d3755205943e0bb6080d10d0e5266acea5f3feae7ee6e"}}
\ No newline at end of file
+{"package":null,"files":{"src/js.rs":"7cf7c5d1204347937afb7a4dd784b824687a0f845d56f6c0a10ffb64fc87bf9d","src/wasi.rs":"839bb7bce5633b54ba2a4e43404cc3712a25a1e8f82d5ae44fad775bba9bc800","src/lazy.rs":"0bff5d7914b0e39b62b55da750878ddbc84ab70f8f61a292515c8233d0f17722","src/util.rs":"73e191ac7cfca223ff3a4b3f0fb08a7619d9d7c9b6096b25ec09916e3bf173f2","src/solaris.rs":"b439f3f47b8038b782fe4d523310c7a1ffeb5ce6bb2fd0b555920397592b4bf8","src/util_libc.rs":"e9190f2ef0b15a604090988957c2c3899e0dee535df789a21682e58321906f5f","src/error_impls.rs":"e17455348fe2bc69feaac4fc778ebbc0cc1ed1611f2cf1a46cfdde9c671c1d5f","src/linux_android.rs":"2674d11075372aad8b0b414237ad09f05fa937d3ca93eb40b28aba6bd5167042","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","Android.bp":"797baa979a85c344925762eaead8915198a1dfb53509c6be01837fae45148473","src/getentropy.rs":"fd8c49056407c1d05c5fd34f9391499a671514e547377fc5e8d6e75ea5073514","LICENSE":"03b15e95d152fa1cbd3018297314e1dddc2f42a60e0dac5f5911cee6ef32362c","src/rdrand.rs":"33916d0f9bd802862fbdc003a175e8b8969a126118a169027ec017a4937d8748","src/vxworks.rs":"4180c5d67cd00267ab7ea7fd04b5739323ca0004e67557fec6db466ed95a5d5f",".cargo-checksum.json":"215544b1a171c0aadab7495dbfc784c9e0732aa54e69c4261a8694ed831e60de","src/windows.rs":"e8e139f2b42fcddc4eeb22af616cc55b2f24e4b170a747c6ee1a537d8010ed6e","CHANGELOG.md":"59d981314d9ea7926c472fbc22d5183607856b9a761b8c190d7d5469580491a1","src/lib.rs":"8208d679f98b88069a4bf4f6b3deeef0e1f04f6cfd3f9c45adbd13f8bde21346","src/error.rs":"0450cdd547033f28d8e3dc1b0d074bcd30d35ebd1f3a7a0c6627a5f79cac9533","src/apple-other.rs":"507348cfd9f7a901775736141a823a2fc9bd3df4031d4b60145e6352b9c49889","tests/normal.rs":"9384081481d1938914f0ad2fdeaf25a77837f29a9494e7b434901c68e6249e94","src/getrandom.rs":"f932d729677b37f9878b5f202d6c7aeaa7985282b9237ed1254634374af1a4fa","tests/rdrand.rs":"8540ee451df9db01e9e907652792bbbdcc04f4bd4d8851215ddae01f9944eafd","TEST_MAPPING":"2cd6f4afb5af5c3904391c9529784cc5cb807ff26fded3432926596cf2dea2e2","SECURITY.md":"929082ae171a30fb927a138b78f73ab7aea17e40de4edc4654abc016e8543015","src/use_file.rs":"17b10593a5a3a8eeb1f53651d22480a78a2b13a586ab1084a03b0989cdf177ac","tests/common/mod.rs":"b613a10410fcf889671159ade1640be8d280081dbe9fdb1820d50c1fdaccebdf","tests/custom.rs":"67cd8fe2148fe8c4b56bef38b5020a54657b5dc7c71b9965c17fa6c41aa0308a","src/linux_android_with_fallback.rs":"0e094b0b72aaadc77caa7feaf66368d1af9ea062c593dec11cc3f0155f993351","src/fuchsia.rs":"9bf7cfe31b1b0121164d20795e114ea8eaf2f1e0cab1622a538b070b7e14e513","src/netbsd.rs":"37f8f6f92ce1bb3e115779749cb9807150556d7c5e2db8568bdb47377108bc3d","LICENSE-APACHE":"03b15e95d152fa1cbd3018297314e1dddc2f42a60e0dac5f5911cee6ef32362c","benches/buffer.rs":"8cfe97a19185f7edc87db501ca635742bc3e85a3d6fe1285070bad1018f113eb","src/hermit.rs":"a0e3e3814e047c432021e026841f22d1e135aed10aa011b13a66f702ae9cf9cf","src/custom.rs":"701ce24f26734396fc444396f653242679b30d0072c1eb57728ec8f328e8ab0d","METADATA":"11613d9b614f6e57d37d263928983f9d1d107479ca49356704b48cf33c0223f1","src/solid.rs":"a0d725d4a9f8592c4b5befaac871eb7ffededb95d051541bfb07d1543489fc53","src/espidf.rs":"a8aea26e1081c15e4a2d3755205943e0bb6080d10d0e5266acea5f3feae7ee6e","README.md":"a4cd5c22091413629aea58cc34f0014237b266eaa0534ef0a46cbfa35511c42e","cargo_embargo.json":"9c226dbb5951904cb949dc299b21a4922a0b195ef445337d6d3abe0547d76048","Cargo.toml":"87a3b1a510fb332cad64c7c3ec1ba8b372e35e1fce99701abb6bad3f00f537d9","LICENSE-MIT":"592035a4fc2b0ed693143496481a6795b646d7021f271c5d2411cfed024a48d4"}}
\ No newline at end of file
diff --git a/crates/getrandom/.cargo-checksum.json b/crates/getrandom/.cargo-checksum.json
index fc62f6b..e34c736 100644
--- a/crates/getrandom/.cargo-checksum.json
+++ b/crates/getrandom/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"CHANGELOG.md":"b92c1150dd0e321d4b57151949cb079e0fff6cadb068ed7116ff57e8ffba547b","Cargo.toml":"e063c2ea7cdaf007c46bf862e0048b738f6a9619cfb2a02b9b15e0b600bb3ece","LICENSE-APACHE":"aaff376532ea30a0cd5330b9502ad4a4c8bf769c539c87ffe78819d188a18ebf","LICENSE-MIT":"42fa16951ce7f24b5a467a40e5b449a1d41e662f97ca779864f053f39e097737","README.md":"543f0efa922ff55d3cdc1c96a188dff669f57a2ff3b7dfa0c95368b8e646b5dd","SECURITY.md":"816ea79f8c7937888ab5a972a1efb270c4bada028b448953a195359fe11d526e","benches/buffer.rs":"242f56eaeecd1d0a0f6f9419d1bf312b8d211215355022bd4aef5e5e0f53e2a5","src/3ds.rs":"dae5b84328b063a3750a67e5086db530b905a661b152181f0d6b4d63e72b70e2","src/apple-other.rs":"75f2c3319068e06ec27135d516953ab645cc7c45033f045cba44136236ef5601","src/bsd_arandom.rs":"2ace9473afc3df95594884d87d8f484cf141c9d01f2c22ece2bb1118b73d51bb","src/custom.rs":"3fb6b72a45f1d7467bdcb1508441d41c0c7cd30bcc581c5991cdd404004d4345","src/dragonfly.rs":"4cffb7af2b62d515f28790b906f0293b44af1d75b23c87fa9e50d5ef99bfa02c","src/emscripten.rs":"e0b3b44b52f54454ec3e0a9e7c5222003369d9d1575cc0652e3e7cbe1b3b6da7","src/error.rs":"ab5b82ddb8304e8ad75d905d7dc5ba8deec92096930e81e87d7a28f3da382dee","src/error_impls.rs":"668a94c2086ad280c00d7a8e515cbc358e83a87249e65a0d41decdd6ae8c3ab0","src/espidf.rs":"50f70136fe46f9fe9a728aa7881cdc8144f430620168cf42519c2666a8edc11f","src/fuchsia.rs":"535ed84250cfe8f176494eba226d1c1df9687b5c30cf52d5949f56a591947656","src/hermit.rs":"c9d9d5c78e0e435c2678ef43d1296aef885fd62957d6b454d758ca475cd4e544","src/hurd.rs":"c0f807d7cc4ae6a5e0b1800bbd76639270503596c8f3cade2e59bf62e0bc7a89","src/js.rs":"4306b7a49441e0da2a0737f92f56d3258ddcd1566ec3aea4a4f4a865bbf0ff87","src/lazy.rs":"7519937544e9af04ce008452a65f7441adca7742d89e6afd373c7cede8828ad9","src/lib.rs":"c0c865fdadae4f7bf06a056bd2e42b193d24c1166fd220c57aca19cb96a685a5","src/linux_android.rs":"7bd8293d45f9897ee3a4a362c92b0570bd8c6e9f430a9cee8517fbc019e09114","src/macos.rs":"6e4f8377c7ad3c5dea1816a7bac22a3bb5ba85260aee71d027e32cd6602cb2dd","src/openbsd.rs":"f22ffe151d1797785c32e165459e15a34643f8a441c12da736e8a22d7103db6e","src/rdrand.rs":"ffbe1bfb8f5b30a95f462fa85db07e251f63248c6c0daf3b5f586034cedfa976","src/solaris_illumos.rs":"2f0d03956d042249aed1c2f02fc9ad389ab4dcd1dfe5c5e7c189830545497259","src/solid.rs":"a5a6e4b2b43400548b36035b9a513e70ec17809d521757e7228d2214352d24ed","src/use_file.rs":"1d7cf9370697ae69d29792d0a50ae972b093676536eb0529d9a801efbecbb096","src/util.rs":"e2c1b86ea97ca5c61d562182890cbe24c7eaa37ff8945c17fcfa665b767da1b0","src/util_libc.rs":"f586159c1fb87db093e89eac29fc2a144c6c070d1a6ccb3c3261d810ba88d6b1","src/vita.rs":"97dc7ddd706c0c64273cc5b2a6c9cab47c221921908809a9f9a8b72a1753ce90","src/vxworks.rs":"3c132cd52df3a8cf903f430ce90d3432c4b4bb99bf069f5546dee43f4f10a555","src/wasi.rs":"45b95d98766cfdc0495cfe5da6c3b63e99dda34c334deee779cf146a29350344","src/windows.rs":"7e3e73fb29a7e2748d32344d1bb9327603c6d78eb0fc5e62f50c6fa93b648c60","tests/common/mod.rs":"b9a36043d71963ba43a9e2899ba8eea80ff9f3284d243d9b9b9f941afa4f4aa4","tests/custom.rs":"1e944ae523b62dba53fe3daf1b964a2498c8fdd21dfa7afe53781bff2fcf276e","tests/normal.rs":"9e1c4b1e468a09ed0225370dfb6608f8b8135e0fabb09bbc1a718105164aade6","tests/rdrand.rs":"fcf3f78e3078e1b262d0efae8f3c4a730f3fbf68df656fceb78e22ee4cc98990"},"package":"190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5"}
\ No newline at end of file
+{"files":{"CHANGELOG.md":"e105a0bf8bd52de355585b2bd2f56c0d620ecee95dfca5ca5b79a80c03ba54d6","Cargo.toml":"399f9dedfeccab167e30de49d9da99649f1e3b8c2d727cec8efe1e996829205b","LICENSE-APACHE":"aaff376532ea30a0cd5330b9502ad4a4c8bf769c539c87ffe78819d188a18ebf","LICENSE-MIT":"42fa16951ce7f24b5a467a40e5b449a1d41e662f97ca779864f053f39e097737","README.md":"543f0efa922ff55d3cdc1c96a188dff669f57a2ff3b7dfa0c95368b8e646b5dd","SECURITY.md":"816ea79f8c7937888ab5a972a1efb270c4bada028b448953a195359fe11d526e","benches/buffer.rs":"242f56eaeecd1d0a0f6f9419d1bf312b8d211215355022bd4aef5e5e0f53e2a5","src/apple-other.rs":"75f2c3319068e06ec27135d516953ab645cc7c45033f045cba44136236ef5601","src/custom.rs":"ae5dc94bc12a4a284762e99891b013c509942b1a802ea559e04e572ed44479dc","src/error.rs":"ab5b82ddb8304e8ad75d905d7dc5ba8deec92096930e81e87d7a28f3da382dee","src/error_impls.rs":"4c068e81d876237a7e0a0e91519896bd670c2f999ca729f7fb970caf888cab46","src/espidf.rs":"50f70136fe46f9fe9a728aa7881cdc8144f430620168cf42519c2666a8edc11f","src/fuchsia.rs":"535ed84250cfe8f176494eba226d1c1df9687b5c30cf52d5949f56a591947656","src/getentropy.rs":"5beb52344a9b71c75426bbc56eb989f5fcb81642772737d52e92578b315615a1","src/getrandom.rs":"aad70b8e54710deef974d04d6f5473bf1b47b6fef16c751046b87f2a30a1dbe2","src/hermit.rs":"c9d9d5c78e0e435c2678ef43d1296aef885fd62957d6b454d758ca475cd4e544","src/js.rs":"4306b7a49441e0da2a0737f92f56d3258ddcd1566ec3aea4a4f4a865bbf0ff87","src/lazy.rs":"21764d7cffe5177a331ec37758cc550c6e3be8c5f6fdfb7606053dafbe6a994b","src/lib.rs":"7c9d350230b31b85cd3225446c5b49204b352d9006e07b9986db6b92a9dd4858","src/linux_android.rs":"92c71e68adcb9bc4ee39e6b2db730e06af1e0c8db0389712b5ea8a1d86991277","src/linux_android_with_fallback.rs":"620577d889d92916aeed62ac0e4f711725fddb7e7bb331f02474160104354e8e","src/netbsd.rs":"765e6820c840d1a6931b7f0d60f373d46a7bca472e5bb1bb9a0b8fcf64b93688","src/rdrand.rs":"ffbe1bfb8f5b30a95f462fa85db07e251f63248c6c0daf3b5f586034cedfa976","src/solaris.rs":"ea2482d6e99a7f18c21c76327c2c61cd462ffa9811e04107ada36dfee42baf7d","src/solid.rs":"a5a6e4b2b43400548b36035b9a513e70ec17809d521757e7228d2214352d24ed","src/use_file.rs":"9a743fbf324120cfb4fd23c925f6b756edb3898f269654bc50dc5a73d6329266","src/util.rs":"e2c1b86ea97ca5c61d562182890cbe24c7eaa37ff8945c17fcfa665b767da1b0","src/util_libc.rs":"8088d7d3eae15a958a243b2ef77f335987bee0ac10b95984fc1ea4a60124b64b","src/vxworks.rs":"3c132cd52df3a8cf903f430ce90d3432c4b4bb99bf069f5546dee43f4f10a555","src/wasi.rs":"45b95d98766cfdc0495cfe5da6c3b63e99dda34c334deee779cf146a29350344","src/windows.rs":"7e3e73fb29a7e2748d32344d1bb9327603c6d78eb0fc5e62f50c6fa93b648c60","tests/common/mod.rs":"b9a36043d71963ba43a9e2899ba8eea80ff9f3284d243d9b9b9f941afa4f4aa4","tests/custom.rs":"1e944ae523b62dba53fe3daf1b964a2498c8fdd21dfa7afe53781bff2fcf276e","tests/normal.rs":"9e1c4b1e468a09ed0225370dfb6608f8b8135e0fabb09bbc1a718105164aade6","tests/rdrand.rs":"fcf3f78e3078e1b262d0efae8f3c4a730f3fbf68df656fceb78e22ee4cc98990"},"package":"c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"}
\ No newline at end of file
diff --git a/crates/getrandom/Android.bp b/crates/getrandom/Android.bp
index bc85d6f..d107f14 100644
--- a/crates/getrandom/Android.bp
+++ b/crates/getrandom/Android.bp
@@ -18,7 +18,7 @@
host_supported: true,
crate_name: "getrandom",
cargo_env_compat: true,
- cargo_pkg_version: "0.2.12",
+ cargo_pkg_version: "0.2.15",
crate_root: "src/lib.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -38,7 +38,7 @@
host_supported: true,
crate_name: "normal",
cargo_env_compat: true,
- cargo_pkg_version: "0.2.12",
+ cargo_pkg_version: "0.2.15",
crate_root: "tests/normal.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -59,7 +59,7 @@
host_supported: true,
crate_name: "rdrand",
cargo_env_compat: true,
- cargo_pkg_version: "0.2.12",
+ cargo_pkg_version: "0.2.15",
crate_root: "tests/rdrand.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -80,7 +80,7 @@
host_supported: true,
crate_name: "getrandom",
cargo_env_compat: true,
- cargo_pkg_version: "0.2.12",
+ cargo_pkg_version: "0.2.15",
crate_root: "src/lib.rs",
edition: "2018",
features: ["std"],
diff --git a/crates/getrandom/CHANGELOG.md b/crates/getrandom/CHANGELOG.md
index a283d38..b6763b5 100644
--- a/crates/getrandom/CHANGELOG.md
+++ b/crates/getrandom/CHANGELOG.md
@@ -4,6 +4,41 @@
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [0.2.15] - 2024-05-06
+### Added
+- Apple visionOS support [#410]
+
+### Changed
+- Use `libc::getrandom` on DragonflyBSD, FreeBSD, illumos, and Solaris [#411] [#416] [#417] [#420]
+- Unify `libc::getentropy`-based implementations [#418]
+
+[#410]: https://github.com/rust-random/getrandom/pull/410
+[#411]: https://github.com/rust-random/getrandom/pull/411
+[#416]: https://github.com/rust-random/getrandom/pull/416
+[#417]: https://github.com/rust-random/getrandom/pull/417
+[#418]: https://github.com/rust-random/getrandom/pull/418
+[#420]: https://github.com/rust-random/getrandom/pull/420
+
+## [0.2.14] - 2024-04-08
+### Fixed
+- Enable `/dev/urandom` fallback for MUSL-based Linux targets [#408]
+
+[#408]: https://github.com/rust-random/getrandom/pull/408
+
+## [0.2.13] - 2024-04-06
+### Added
+- `linux_disable_fallback` crate feature to disable `/dev/urandom`-based fallback on Linux and
+ Android targets. Enabling this feature bumps minimum supported Linux kernel version to 3.17 and
+ Android API level to 23 (Marshmallow). [#396]
+
+### Changed
+- Disable `/dev/urandom` fallback for Linux targets outside of the following `target_arch`es:
+ `aarch64`, `arm`, `powerpc`, `powerpc64`, `s390x`, `x86`, `x86_64` [#396]
+- Do not catch `EPERM` error code on Android while checking availability of
+ the `getrandom` syscall [#396]
+
+[#396]: https://github.com/rust-random/getrandom/pull/396
+
## [0.2.12] - 2024-01-09
### Fixed
- Custom backend for targets without atomics [#385]
@@ -419,6 +454,9 @@
## [0.0.0] - 2019-01-19
Publish an empty template library.
+[0.2.15]: https://github.com/rust-random/getrandom/compare/v0.2.14...v0.2.15
+[0.2.14]: https://github.com/rust-random/getrandom/compare/v0.2.13...v0.2.14
+[0.2.13]: https://github.com/rust-random/getrandom/compare/v0.2.12...v0.2.13
[0.2.12]: https://github.com/rust-random/getrandom/compare/v0.2.11...v0.2.12
[0.2.11]: https://github.com/rust-random/getrandom/compare/v0.2.10...v0.2.11
[0.2.10]: https://github.com/rust-random/getrandom/compare/v0.2.9...v0.2.10
diff --git a/crates/getrandom/Cargo.toml b/crates/getrandom/Cargo.toml
index 5d94d81..b19065c 100644
--- a/crates/getrandom/Cargo.toml
+++ b/crates/getrandom/Cargo.toml
@@ -12,9 +12,14 @@
[package]
edition = "2018"
name = "getrandom"
-version = "0.2.12"
+version = "0.2.15"
authors = ["The Rand Project Developers"]
+build = false
exclude = [".*"]
+autobins = false
+autoexamples = false
+autotests = false
+autobenches = false
description = "A small cross-platform library for retrieving random data from system source"
documentation = "https://docs.rs/getrandom"
readme = "README.md"
@@ -45,6 +50,26 @@
"docsrs",
]
+[lib]
+name = "getrandom"
+path = "src/lib.rs"
+
+[[test]]
+name = "custom"
+path = "tests/custom.rs"
+
+[[test]]
+name = "normal"
+path = "tests/normal.rs"
+
+[[test]]
+name = "rdrand"
+path = "tests/rdrand.rs"
+
+[[bench]]
+name = "buffer"
+path = "benches/buffer.rs"
+
[dependencies.cfg-if]
version = "1"
@@ -63,6 +88,7 @@
"wasm-bindgen",
"js-sys",
]
+linux_disable_fallback = []
rdrand = []
rustc-dep-of-std = [
"compiler_builtins",
@@ -90,5 +116,5 @@
default-features = false
[target."cfg(unix)".dependencies.libc]
-version = "0.2.149"
+version = "0.2.154"
default-features = false
diff --git a/crates/getrandom/METADATA b/crates/getrandom/METADATA
index 17f6017..6a1edae 100644
--- a/crates/getrandom/METADATA
+++ b/crates/getrandom/METADATA
@@ -1,17 +1,17 @@
name: "getrandom"
description: "A small cross-platform library for retrieving random data from system source"
third_party {
- version: "0.2.12"
+ version: "0.2.15"
license_type: NOTICE
last_upgrade_date {
year: 2024
- month: 2
- day: 1
+ month: 12
+ day: 19
}
homepage: "https://crates.io/crates/getrandom"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/getrandom/getrandom-0.2.12.crate"
- version: "0.2.12"
+ value: "https://static.crates.io/crates/getrandom/getrandom-0.2.15.crate"
+ version: "0.2.15"
}
}
diff --git a/crates/getrandom/src/3ds.rs b/crates/getrandom/src/3ds.rs
deleted file mode 100644
index a5aae77..0000000
--- a/crates/getrandom/src/3ds.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-//! Implementation for Nintendo 3DS
-use crate::util_libc::sys_fill_exact;
-use crate::Error;
-use core::mem::MaybeUninit;
-
-pub fn getrandom_inner(dest: &mut [MaybeUninit<u8>]) -> Result<(), Error> {
- sys_fill_exact(dest, |buf| unsafe {
- libc::getrandom(buf.as_mut_ptr() as *mut libc::c_void, buf.len(), 0)
- })
-}
diff --git a/crates/getrandom/src/custom.rs b/crates/getrandom/src/custom.rs
index 8dc9cb7..79be7fc 100644
--- a/crates/getrandom/src/custom.rs
+++ b/crates/getrandom/src/custom.rs
@@ -65,7 +65,6 @@
/// [top-level documentation](index.html#custom-implementations) this
/// registration only has an effect on unsupported targets.
#[macro_export]
-#[cfg_attr(docsrs, doc(cfg(feature = "custom")))]
macro_rules! register_custom_getrandom {
($path:path) => {
// TODO(MSRV 1.37): change to unnamed block
diff --git a/crates/getrandom/src/dragonfly.rs b/crates/getrandom/src/dragonfly.rs
deleted file mode 100644
index ac4794c..0000000
--- a/crates/getrandom/src/dragonfly.rs
+++ /dev/null
@@ -1,22 +0,0 @@
-//! Implementation for DragonFly BSD
-use crate::{
- use_file,
- util_libc::{sys_fill_exact, Weak},
- Error,
-};
-use core::mem::MaybeUninit;
-
-pub fn getrandom_inner(dest: &mut [MaybeUninit<u8>]) -> Result<(), Error> {
- static GETRANDOM: Weak = unsafe { Weak::new("getrandom\0") };
- type GetRandomFn = unsafe extern "C" fn(*mut u8, libc::size_t, libc::c_uint) -> libc::ssize_t;
-
- // getrandom(2) was introduced in DragonflyBSD 5.7
- if let Some(fptr) = GETRANDOM.ptr() {
- let func: GetRandomFn = unsafe { core::mem::transmute(fptr) };
- return sys_fill_exact(dest, |buf| unsafe {
- func(buf.as_mut_ptr() as *mut u8, buf.len(), 0)
- });
- } else {
- use_file::getrandom_inner(dest)
- }
-}
diff --git a/crates/getrandom/src/emscripten.rs b/crates/getrandom/src/emscripten.rs
deleted file mode 100644
index 30221c6..0000000
--- a/crates/getrandom/src/emscripten.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-//! Implementation for Emscripten
-use crate::{util_libc::last_os_error, Error};
-use core::mem::MaybeUninit;
-
-pub fn getrandom_inner(dest: &mut [MaybeUninit<u8>]) -> Result<(), Error> {
- // Emscripten 2.0.5 added getentropy, so we can use it unconditionally.
- // Unlike other getentropy implementations, there is no max buffer length.
- let ret = unsafe { libc::getentropy(dest.as_mut_ptr() as *mut libc::c_void, dest.len()) };
- if ret < 0 {
- return Err(last_os_error());
- }
- Ok(())
-}
diff --git a/crates/getrandom/src/error_impls.rs b/crates/getrandom/src/error_impls.rs
index a7bffb8..2c32601 100644
--- a/crates/getrandom/src/error_impls.rs
+++ b/crates/getrandom/src/error_impls.rs
@@ -1,8 +1,6 @@
-#![cfg_attr(docsrs, doc(cfg(feature = "std")))]
extern crate std;
use crate::Error;
-use core::convert::From;
use std::io;
impl From<Error> for io::Error {
diff --git a/crates/getrandom/src/getentropy.rs b/crates/getrandom/src/getentropy.rs
new file mode 100644
index 0000000..41bab8f
--- /dev/null
+++ b/crates/getrandom/src/getentropy.rs
@@ -0,0 +1,21 @@
+//! Implementation using getentropy(2)
+//!
+//! Available since:
+//! - macOS 10.12
+//! - OpenBSD 5.6
+//! - Emscripten 2.0.5
+//! - vita newlib since Dec 2021
+//!
+//! For these targets, we use getentropy(2) because getrandom(2) doesn't exist.
+use crate::{util_libc::last_os_error, Error};
+use core::mem::MaybeUninit;
+
+pub fn getrandom_inner(dest: &mut [MaybeUninit<u8>]) -> Result<(), Error> {
+ for chunk in dest.chunks_mut(256) {
+ let ret = unsafe { libc::getentropy(chunk.as_mut_ptr() as *mut libc::c_void, chunk.len()) };
+ if ret != 0 {
+ return Err(last_os_error());
+ }
+ }
+ Ok(())
+}
diff --git a/crates/getrandom/src/getrandom.rs b/crates/getrandom/src/getrandom.rs
new file mode 100644
index 0000000..bc58365
--- /dev/null
+++ b/crates/getrandom/src/getrandom.rs
@@ -0,0 +1,25 @@
+//! Implementation using getrandom(2).
+//!
+//! Available since:
+//! - Linux Kernel 3.17, Glibc 2.25, Musl 1.1.20
+//! - Android API level 23 (Marshmallow)
+//! - NetBSD 10.0
+//! - FreeBSD 12.0
+//! - illumos since Dec 2018
+//! - DragonFly 5.7
+//! - Hurd Glibc 2.31
+//! - shim-3ds since Feb 2022
+//!
+//! For these platforms, we always use the default pool and never set the
+//! GRND_RANDOM flag to use the /dev/random pool. On Linux/Android/Hurd, using
+//! GRND_RANDOM is not recommended. On NetBSD/FreeBSD/Dragonfly/3ds, it does
+//! nothing. On illumos, the default pool is used to implement getentropy(2),
+//! so we assume it is acceptable here.
+use crate::{util_libc::sys_fill_exact, Error};
+use core::mem::MaybeUninit;
+
+pub fn getrandom_inner(dest: &mut [MaybeUninit<u8>]) -> Result<(), Error> {
+ sys_fill_exact(dest, |buf| unsafe {
+ libc::getrandom(buf.as_mut_ptr() as *mut libc::c_void, buf.len(), 0)
+ })
+}
diff --git a/crates/getrandom/src/hurd.rs b/crates/getrandom/src/hurd.rs
deleted file mode 100644
index 472a7d8..0000000
--- a/crates/getrandom/src/hurd.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-//! Implementation for GNU/Hurd
-use crate::util_libc::sys_fill_exact;
-use crate::Error;
-use core::mem::MaybeUninit;
-
-pub fn getrandom_inner(dest: &mut [MaybeUninit<u8>]) -> Result<(), Error> {
- sys_fill_exact(dest, |buf| unsafe {
- libc::getrandom(buf.as_mut_ptr() as *mut libc::c_void, buf.len(), 0)
- })
-}
diff --git a/crates/getrandom/src/lazy.rs b/crates/getrandom/src/lazy.rs
index b9c2f88..100ce1e 100644
--- a/crates/getrandom/src/lazy.rs
+++ b/crates/getrandom/src/lazy.rs
@@ -2,10 +2,10 @@
// This structure represents a lazily initialized static usize value. Useful
// when it is preferable to just rerun initialization instead of locking.
-// Both unsync_init and sync_init will invoke an init() function until it
-// succeeds, then return the cached value for future calls.
+// unsync_init will invoke an init() function until it succeeds, then return the
+// cached value for future calls.
//
-// Both methods support init() "failing". If the init() method returns UNINIT,
+// unsync_init supports init() "failing". If the init() method returns UNINIT,
// that value will be returned as normal, but will not be cached.
//
// Users should only depend on the _value_ returned by init() functions.
@@ -17,7 +17,7 @@
// v
// }
// the effects of c() or writes to shared memory will not necessarily be
-// observed and additional synchronization methods with be needed.
+// observed and additional synchronization methods may be needed.
pub(crate) struct LazyUsize(AtomicUsize);
impl LazyUsize {
@@ -28,8 +28,8 @@
// The initialization is not completed.
pub const UNINIT: usize = usize::max_value();
- // Runs the init() function at least once, returning the value of some run
- // of init(). Multiple callers can run their init() functions in parallel.
+ // Runs the init() function at most once, returning the value of some run of
+ // init(). Multiple callers can run their init() functions in parallel.
// init() should always return the same value, if it succeeds.
pub fn unsync_init(&self, init: impl FnOnce() -> usize) -> usize {
// Relaxed ordering is fine, as we only have a single atomic variable.
diff --git a/crates/getrandom/src/lib.rs b/crates/getrandom/src/lib.rs
index e80ec6f..bc3695b 100644
--- a/crates/getrandom/src/lib.rs
+++ b/crates/getrandom/src/lib.rs
@@ -8,11 +8,12 @@
//! | Windows | `*‑windows‑*` | [`BCryptGenRandom`]
//! | macOS | `*‑apple‑darwin` | [`getentropy`][3]
//! | iOS, tvOS, watchOS | `*‑apple‑ios`, `*-apple-tvos`, `*-apple-watchos` | [`CCRandomGenerateBytes`]
-//! | FreeBSD | `*‑freebsd` | [`getrandom`][5] if available, otherwise [`kern.arandom`][6]
+//! | FreeBSD | `*‑freebsd` | [`getrandom`][5]
//! | OpenBSD | `*‑openbsd` | [`getentropy`][7]
//! | NetBSD | `*‑netbsd` | [`getrandom`][16] if available, otherwise [`kern.arandom`][8]
-//! | Dragonfly BSD | `*‑dragonfly` | [`getrandom`][9] if available, otherwise [`/dev/urandom`][10] (identical to `/dev/random`)
-//! | Solaris, illumos | `*‑solaris`, `*‑illumos` | [`getrandom`][11] if available, otherwise [`/dev/random`][12]
+//! | Dragonfly BSD | `*‑dragonfly` | [`getrandom`][9]
+//! | Solaris | `*‑solaris` | [`getrandom`][11] (with `GRND_RANDOM`)
+//! | illumos | `*‑illumos` | [`getrandom`][12]
//! | Fuchsia OS | `*‑fuchsia` | [`cprng_draw`]
//! | Redox | `*‑redox` | `/dev/urandom`
//! | Haiku | `*‑haiku` | `/dev/urandom` (identical to `/dev/random`)
@@ -25,15 +26,11 @@
//! | WASI | `wasm32‑wasi` | [`random_get`]
//! | Web Browser and Node.js | `wasm*‑*‑unknown` | [`Crypto.getRandomValues`] if available, then [`crypto.randomFillSync`] if on Node.js, see [WebAssembly support]
//! | SOLID | `*-kmc-solid_*` | `SOLID_RNG_SampleRandomBytes`
-//! | Nintendo 3DS | `armv6k-nintendo-3ds` | [`getrandom`][1]
-//! | PS Vita | `armv7-sony-vita-newlibeabihf` | [`getentropy`][13]
-//! | QNX Neutrino | `*‑nto-qnx*` | [`/dev/urandom`][14] (identical to `/dev/random`)
+//! | Nintendo 3DS | `*-nintendo-3ds` | [`getrandom`][18]
+//! | PS Vita | `*-vita-*` | [`getentropy`][13]
+//! | QNX Neutrino | `*‑nto-qnx*` | [`/dev/urandom`][14] (identical to `/dev/random`)
//! | AIX | `*-ibm-aix` | [`/dev/urandom`][15]
//!
-//! There is no blanket implementation on `unix` targets that reads from
-//! `/dev/urandom`. This ensures all supported targets are using the recommended
-//! interface and respect maximum buffer sizes.
-//!
//! Pull Requests that add support for new targets to `getrandom` are always welcome.
//!
//! ## Unsupported targets
@@ -47,6 +44,21 @@
//! This prevents a crate from overriding a secure source of randomness
//! (either accidentally or intentionally).
//!
+//! ## `/dev/urandom` fallback on Linux and Android
+//!
+//! On Linux targets the fallback is present only if either `target_env` is `musl`,
+//! or `target_arch` is one of the following: `aarch64`, `arm`, `powerpc`, `powerpc64`,
+//! `s390x`, `x86`, `x86_64`. Other supported targets [require][platform-support]
+//! kernel versions which support `getrandom` system call, so fallback is not needed.
+//!
+//! On Android targets the fallback is present only for the following `target_arch`es:
+//! `aarch64`, `arm`, `x86`, `x86_64`. Other `target_arch`es (e.g. RISC-V) require
+//! sufficiently high API levels.
+//!
+//! The fallback can be disabled by enabling the `linux_disable_fallback` crate feature.
+//! Note that doing so will bump minimum supported Linux kernel version to 3.17 and
+//! Android API level to 23 (Marshmallow).
+//!
//! ### RDRAND on x86
//!
//! *If the `rdrand` Cargo feature is enabled*, `getrandom` will fallback to using
@@ -99,11 +111,14 @@
//! This crate will then use the provided `webcrypto` implementation.
//!
//! ### Platform Support
-//! This crate generally supports the same operating system and platform versions that the Rust standard library does.
-//! Additional targets may be supported using pluggable custom implementations.
+//! This crate generally supports the same operating system and platform versions
+//! that the Rust standard library does. Additional targets may be supported using
+//! pluggable custom implementations.
//!
-//! This means that as Rust drops support for old versions of operating systems (such as old Linux kernel versions, Android API levels, etc)
-//! in stable releases, `getrandom` may create new patch releases (`0.N.x`) that remove support for outdated platform versions.
+//! This means that as Rust drops support for old versions of operating systems
+//! (such as old Linux kernel versions, Android API levels, etc) in stable releases,
+//! `getrandom` may create new patch releases (`0.N.x`) that remove support for
+//! outdated platform versions.
//!
//! ### Custom implementations
//!
@@ -150,23 +165,22 @@
//! on every call to `getrandom`, hence after the first successful call one
//! can be reasonably confident that no errors will occur.
//!
-//! [1]: http://man7.org/linux/man-pages/man2/getrandom.2.html
-//! [2]: http://man7.org/linux/man-pages/man4/urandom.4.html
+//! [1]: https://manned.org/getrandom.2
+//! [2]: https://manned.org/urandom.4
//! [3]: https://www.unix.com/man-page/mojave/2/getentropy/
//! [4]: https://www.unix.com/man-page/mojave/4/urandom/
//! [5]: https://www.freebsd.org/cgi/man.cgi?query=getrandom&manpath=FreeBSD+12.0-stable
-//! [6]: https://www.freebsd.org/cgi/man.cgi?query=random&sektion=4
//! [7]: https://man.openbsd.org/getentropy.2
//! [8]: https://man.netbsd.org/sysctl.7
//! [9]: https://leaf.dragonflybsd.org/cgi/web-man?command=getrandom
-//! [10]: https://leaf.dragonflybsd.org/cgi/web-man?command=random§ion=4
//! [11]: https://docs.oracle.com/cd/E88353_01/html/E37841/getrandom-2.html
-//! [12]: https://docs.oracle.com/cd/E86824_01/html/E54777/random-7d.html
+//! [12]: https://illumos.org/man/2/getrandom
//! [13]: https://github.com/emscripten-core/emscripten/pull/12240
//! [14]: https://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.neutrino.utilities/topic/r/random.html
//! [15]: https://www.ibm.com/docs/en/aix/7.3?topic=files-random-urandom-devices
//! [16]: https://man.netbsd.org/getrandom.2
//! [17]: https://www.gnu.org/software/libc/manual/html_mono/libc.html#index-getrandom
+//! [18]: https://github.com/rust3ds/shim-3ds/commit/b01d2568836dea2a65d05d662f8e5f805c64389d
//!
//! [`BCryptGenRandom`]: https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/nf-bcrypt-bcryptgenrandom
//! [`Crypto.getRandomValues`]: https://www.w3.org/TR/WebCryptoAPI/#Crypto-method-getRandomValues
@@ -182,15 +196,16 @@
//! [CommonJS modules]: https://nodejs.org/api/modules.html
//! [ES modules]: https://nodejs.org/api/esm.html
//! [`sys_read_entropy`]: https://github.com/hermit-os/kernel/blob/315f58ff5efc81d9bf0618af85a59963ff55f8b1/src/syscalls/entropy.rs#L47-L55
+//! [platform-support]: https://doc.rust-lang.org/stable/rustc/platform-support.html
#![doc(
html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk.png",
html_favicon_url = "https://www.rust-lang.org/favicon.ico",
- html_root_url = "https://docs.rs/getrandom/0.2.12"
+ html_root_url = "https://docs.rs/getrandom/0.2.15"
)]
#![no_std]
#![warn(rust_2018_idioms, unused_lifetimes, missing_docs)]
-#![cfg_attr(docsrs, feature(doc_cfg))]
+#![cfg_attr(docsrs, feature(doc_auto_cfg))]
#[macro_use]
extern crate cfg_if;
@@ -220,32 +235,82 @@
if #[cfg(any(target_os = "haiku", target_os = "redox", target_os = "nto", target_os = "aix"))] {
mod util_libc;
#[path = "use_file.rs"] mod imp;
- } else if #[cfg(any(target_os = "android", target_os = "linux"))] {
+ } else if #[cfg(any(
+ target_os = "macos",
+ target_os = "openbsd",
+ target_os = "vita",
+ target_os = "emscripten",
+ ))] {
+ mod util_libc;
+ #[path = "getentropy.rs"] mod imp;
+ } else if #[cfg(any(
+ target_os = "dragonfly",
+ target_os = "freebsd",
+ target_os = "hurd",
+ target_os = "illumos",
+ // Check for target_arch = "arm" to only include the 3DS. Does not
+ // include the Nintendo Switch (which is target_arch = "aarch64").
+ all(target_os = "horizon", target_arch = "arm"),
+ ))] {
+ mod util_libc;
+ #[path = "getrandom.rs"] mod imp;
+ } else if #[cfg(all(
+ not(feature = "linux_disable_fallback"),
+ any(
+ // Rust supports Android API level 19 (KitKat) [0] and the next upgrade targets
+ // level 21 (Lollipop) [1], while `getrandom(2)` was added only in
+ // level 23 (Marshmallow). Note that it applies only to the "old" `target_arch`es,
+ // RISC-V Android targets sufficiently new API level, same will apply for potential
+ // new Android `target_arch`es.
+ // [0]: https://blog.rust-lang.org/2023/01/09/android-ndk-update-r25.html
+ // [1]: https://github.com/rust-lang/rust/pull/120593
+ all(
+ target_os = "android",
+ any(
+ target_arch = "aarch64",
+ target_arch = "arm",
+ target_arch = "x86",
+ target_arch = "x86_64",
+ ),
+ ),
+ // Only on these `target_arch`es Rust supports Linux kernel versions (3.2+)
+ // that precede the version (3.17) in which `getrandom(2)` was added:
+ // https://doc.rust-lang.org/stable/rustc/platform-support.html
+ all(
+ target_os = "linux",
+ any(
+ target_arch = "aarch64",
+ target_arch = "arm",
+ target_arch = "powerpc",
+ target_arch = "powerpc64",
+ target_arch = "s390x",
+ target_arch = "x86",
+ target_arch = "x86_64",
+ // Minimum supported Linux kernel version for MUSL targets
+ // is not specified explicitly (as of Rust 1.77) and they
+ // are used in practice to target pre-3.17 kernels.
+ target_env = "musl",
+ ),
+ )
+ ),
+ ))] {
mod util_libc;
mod use_file;
mod lazy;
+ #[path = "linux_android_with_fallback.rs"] mod imp;
+ } else if #[cfg(any(target_os = "android", target_os = "linux"))] {
+ mod util_libc;
#[path = "linux_android.rs"] mod imp;
- } else if #[cfg(any(target_os = "illumos", target_os = "solaris"))] {
+ } else if #[cfg(target_os = "solaris")] {
mod util_libc;
- mod use_file;
- #[path = "solaris_illumos.rs"] mod imp;
- } else if #[cfg(any(target_os = "freebsd", target_os = "netbsd"))] {
+ #[path = "solaris.rs"] mod imp;
+ } else if #[cfg(target_os = "netbsd")] {
mod util_libc;
- #[path = "bsd_arandom.rs"] mod imp;
- } else if #[cfg(target_os = "dragonfly")] {
- mod util_libc;
- mod use_file;
- #[path = "dragonfly.rs"] mod imp;
+ #[path = "netbsd.rs"] mod imp;
} else if #[cfg(target_os = "fuchsia")] {
#[path = "fuchsia.rs"] mod imp;
- } else if #[cfg(any(target_os = "ios", target_os = "watchos", target_os = "tvos"))] {
+ } else if #[cfg(any(target_os = "ios", target_os = "visionos", target_os = "watchos", target_os = "tvos"))] {
#[path = "apple-other.rs"] mod imp;
- } else if #[cfg(target_os = "macos")] {
- mod util_libc;
- #[path = "macos.rs"] mod imp;
- } else if #[cfg(target_os = "openbsd")] {
- mod util_libc;
- #[path = "openbsd.rs"] mod imp;
} else if #[cfg(all(target_arch = "wasm32", target_os = "wasi"))] {
#[path = "wasi.rs"] mod imp;
} else if #[cfg(target_os = "hermit")] {
@@ -259,17 +324,6 @@
#[path = "espidf.rs"] mod imp;
} else if #[cfg(windows)] {
#[path = "windows.rs"] mod imp;
- } else if #[cfg(all(target_os = "horizon", target_arch = "arm"))] {
- // We check for target_arch = "arm" because the Nintendo Switch also
- // uses Horizon OS (it is aarch64).
- mod util_libc;
- #[path = "3ds.rs"] mod imp;
- } else if #[cfg(target_os = "vita")] {
- mod util_libc;
- #[path = "vita.rs"] mod imp;
- } else if #[cfg(target_os = "emscripten")] {
- mod util_libc;
- #[path = "emscripten.rs"] mod imp;
} else if #[cfg(all(target_arch = "x86_64", target_env = "sgx"))] {
mod lazy;
#[path = "rdrand.rs"] mod imp;
@@ -281,9 +335,6 @@
any(target_arch = "wasm32", target_arch = "wasm64"),
target_os = "unknown"))] {
#[path = "js.rs"] mod imp;
- } else if #[cfg(target_os = "hurd")] {
- mod util_libc;
- #[path = "hurd.rs"] mod imp;
} else if #[cfg(feature = "custom")] {
use custom as imp;
} else if #[cfg(all(any(target_arch = "wasm32", target_arch = "wasm64"),
diff --git a/crates/getrandom/src/linux_android.rs b/crates/getrandom/src/linux_android.rs
index 2517159..93a6494 100644
--- a/crates/getrandom/src/linux_android.rs
+++ b/crates/getrandom/src/linux_android.rs
@@ -1,40 +1,7 @@
-//! Implementation for Linux / Android
-use crate::{
- lazy::LazyBool,
- util_libc::{last_os_error, sys_fill_exact},
- {use_file, Error},
-};
+//! Implementation for Linux / Android without `/dev/urandom` fallback
+use crate::{util_libc, Error};
use core::mem::MaybeUninit;
pub fn getrandom_inner(dest: &mut [MaybeUninit<u8>]) -> Result<(), Error> {
- // getrandom(2) was introduced in Linux 3.17
- static HAS_GETRANDOM: LazyBool = LazyBool::new();
- if HAS_GETRANDOM.unsync_init(is_getrandom_available) {
- sys_fill_exact(dest, |buf| unsafe {
- getrandom(buf.as_mut_ptr() as *mut libc::c_void, buf.len(), 0)
- })
- } else {
- use_file::getrandom_inner(dest)
- }
-}
-
-fn is_getrandom_available() -> bool {
- let res = unsafe { getrandom(core::ptr::null_mut(), 0, libc::GRND_NONBLOCK) };
- if res < 0 {
- match last_os_error().raw_os_error() {
- Some(libc::ENOSYS) => false, // No kernel support
- Some(libc::EPERM) => false, // Blocked by seccomp
- _ => true,
- }
- } else {
- true
- }
-}
-
-unsafe fn getrandom(
- buf: *mut libc::c_void,
- buflen: libc::size_t,
- flags: libc::c_uint,
-) -> libc::ssize_t {
- libc::syscall(libc::SYS_getrandom, buf, buflen, flags) as libc::ssize_t
+ util_libc::sys_fill_exact(dest, util_libc::getrandom_syscall)
}
diff --git a/crates/getrandom/src/linux_android_with_fallback.rs b/crates/getrandom/src/linux_android_with_fallback.rs
new file mode 100644
index 0000000..0f5ea8a
--- /dev/null
+++ b/crates/getrandom/src/linux_android_with_fallback.rs
@@ -0,0 +1,33 @@
+//! Implementation for Linux / Android with `/dev/urandom` fallback
+use crate::{
+ lazy::LazyBool,
+ util_libc::{getrandom_syscall, last_os_error, sys_fill_exact},
+ {use_file, Error},
+};
+use core::mem::MaybeUninit;
+
+pub fn getrandom_inner(dest: &mut [MaybeUninit<u8>]) -> Result<(), Error> {
+ // getrandom(2) was introduced in Linux 3.17
+ static HAS_GETRANDOM: LazyBool = LazyBool::new();
+ if HAS_GETRANDOM.unsync_init(is_getrandom_available) {
+ sys_fill_exact(dest, getrandom_syscall)
+ } else {
+ use_file::getrandom_inner(dest)
+ }
+}
+
+fn is_getrandom_available() -> bool {
+ if getrandom_syscall(&mut []) < 0 {
+ match last_os_error().raw_os_error() {
+ Some(libc::ENOSYS) => false, // No kernel support
+ // The fallback on EPERM is intentionally not done on Android since this workaround
+ // seems to be needed only for specific Linux-based products that aren't based
+ // on Android. See https://github.com/rust-random/getrandom/issues/229.
+ #[cfg(target_os = "linux")]
+ Some(libc::EPERM) => false, // Blocked by seccomp
+ _ => true,
+ }
+ } else {
+ true
+ }
+}
diff --git a/crates/getrandom/src/macos.rs b/crates/getrandom/src/macos.rs
deleted file mode 100644
index 44af76b..0000000
--- a/crates/getrandom/src/macos.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-//! Implementation for macOS
-use crate::{util_libc::last_os_error, Error};
-use core::mem::MaybeUninit;
-
-extern "C" {
- // Supported as of macOS 10.12+.
- fn getentropy(buf: *mut u8, size: libc::size_t) -> libc::c_int;
-}
-
-pub fn getrandom_inner(dest: &mut [MaybeUninit<u8>]) -> Result<(), Error> {
- for chunk in dest.chunks_mut(256) {
- let ret = unsafe { getentropy(chunk.as_mut_ptr() as *mut u8, chunk.len()) };
- if ret != 0 {
- return Err(last_os_error());
- }
- }
- Ok(())
-}
diff --git a/crates/getrandom/src/bsd_arandom.rs b/crates/getrandom/src/netbsd.rs
similarity index 86%
rename from crates/getrandom/src/bsd_arandom.rs
rename to crates/getrandom/src/netbsd.rs
index 6e133d8..b8a770f 100644
--- a/crates/getrandom/src/bsd_arandom.rs
+++ b/crates/getrandom/src/netbsd.rs
@@ -1,4 +1,4 @@
-//! Implementation for FreeBSD and NetBSD
+//! Implementation for NetBSD
use crate::{
util_libc::{sys_fill_exact, Weak},
Error,
@@ -28,7 +28,7 @@
type GetRandomFn = unsafe extern "C" fn(*mut u8, libc::size_t, libc::c_uint) -> libc::ssize_t;
pub fn getrandom_inner(dest: &mut [MaybeUninit<u8>]) -> Result<(), Error> {
- // getrandom(2) was introduced in FreeBSD 12.0 and NetBSD 10.0
+ // getrandom(2) was introduced in NetBSD 10.0
static GETRANDOM: Weak = unsafe { Weak::new("getrandom\0") };
if let Some(fptr) = GETRANDOM.ptr() {
let func: GetRandomFn = unsafe { core::mem::transmute(fptr) };
@@ -37,7 +37,7 @@
});
}
- // Both FreeBSD and NetBSD will only return up to 256 bytes at a time, and
+ // NetBSD will only return up to 256 bytes at a time, and
// older NetBSD kernels will fail on longer buffers.
for chunk in dest.chunks_mut(256) {
sys_fill_exact(chunk, kern_arnd)?
diff --git a/crates/getrandom/src/openbsd.rs b/crates/getrandom/src/openbsd.rs
deleted file mode 100644
index f4d64da..0000000
--- a/crates/getrandom/src/openbsd.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-//! Implementation for OpenBSD
-use crate::{util_libc::last_os_error, Error};
-use core::mem::MaybeUninit;
-
-pub fn getrandom_inner(dest: &mut [MaybeUninit<u8>]) -> Result<(), Error> {
- // getentropy(2) was added in OpenBSD 5.6, so we can use it unconditionally.
- for chunk in dest.chunks_mut(256) {
- let ret = unsafe { libc::getentropy(chunk.as_mut_ptr() as *mut libc::c_void, chunk.len()) };
- if ret == -1 {
- return Err(last_os_error());
- }
- }
- Ok(())
-}
diff --git a/crates/getrandom/src/solaris.rs b/crates/getrandom/src/solaris.rs
new file mode 100644
index 0000000..8a3401e
--- /dev/null
+++ b/crates/getrandom/src/solaris.rs
@@ -0,0 +1,34 @@
+//! Solaris implementation using getrandom(2).
+//!
+//! While getrandom(2) has been available since Solaris 11.3, it has a few
+//! quirks not present on other OSes. First, on Solaris 11.3, calls will always
+//! fail if bufsz > 1024. Second, it will always either fail or completely fill
+//! the buffer (returning bufsz). Third, error is indicated by returning 0,
+//! rather than by returning -1. Finally, "if GRND_RANDOM is not specified
+//! then getrandom(2) is always a non blocking call". This _might_ imply that
+//! in early-boot scenarios with low entropy, getrandom(2) will not properly
+//! block. To be safe, we set GRND_RANDOM, mirroring the man page examples.
+//!
+//! For more information, see the man page linked in lib.rs and this blog post:
+//! https://blogs.oracle.com/solaris/post/solaris-new-system-calls-getentropy2-and-getrandom2
+//! which also explains why this crate should not use getentropy(2).
+use crate::{util_libc::last_os_error, Error};
+use core::mem::MaybeUninit;
+
+const MAX_BYTES: usize = 1024;
+
+pub fn getrandom_inner(dest: &mut [MaybeUninit<u8>]) -> Result<(), Error> {
+ for chunk in dest.chunks_mut(MAX_BYTES) {
+ let ptr = chunk.as_mut_ptr() as *mut libc::c_void;
+ let ret = unsafe { libc::getrandom(ptr, chunk.len(), libc::GRND_RANDOM) };
+ // In case the man page has a typo, we also check for negative ret.
+ if ret <= 0 {
+ return Err(last_os_error());
+ }
+ // If getrandom(2) succeeds, it should have completely filled chunk.
+ if (ret as usize) != chunk.len() {
+ return Err(Error::UNEXPECTED);
+ }
+ }
+ Ok(())
+}
diff --git a/crates/getrandom/src/solaris_illumos.rs b/crates/getrandom/src/solaris_illumos.rs
deleted file mode 100644
index fbc2394..0000000
--- a/crates/getrandom/src/solaris_illumos.rs
+++ /dev/null
@@ -1,41 +0,0 @@
-//! Implementation for the Solaris family
-//!
-//! `/dev/random` uses the Hash_DRBG with SHA512 algorithm from NIST SP 800-90A.
-//! `/dev/urandom` uses the FIPS 186-2 algorithm, which is considered less
-//! secure. We choose to read from `/dev/random` (and use GRND_RANDOM).
-//!
-//! Solaris 11.3 and late-2018 illumos added the getrandom(2) libc function.
-//! To make sure we can compile on both Solaris and its derivatives, as well as
-//! function, we check for the existence of getrandom(2) in libc by calling
-//! libc::dlsym.
-use crate::{
- use_file,
- util_libc::{sys_fill_exact, Weak},
- Error,
-};
-use core::mem::{self, MaybeUninit};
-
-static GETRANDOM: Weak = unsafe { Weak::new("getrandom\0") };
-type GetRandomFn =
- unsafe extern "C" fn(*mut libc::c_void, libc::size_t, libc::c_uint) -> libc::ssize_t;
-
-pub fn getrandom_inner(dest: &mut [MaybeUninit<u8>]) -> Result<(), Error> {
- if let Some(fptr) = GETRANDOM.ptr() {
- let func: GetRandomFn = unsafe { mem::transmute(fptr) };
- // 256 bytes is the lowest common denominator across all the Solaris
- // derived platforms for atomically obtaining random data.
- for chunk in dest.chunks_mut(256) {
- sys_fill_exact(chunk, |buf| unsafe {
- // A cast is needed for the flags as libc uses the wrong type.
- func(
- buf.as_mut_ptr() as *mut libc::c_void,
- buf.len(),
- libc::GRND_RANDOM as libc::c_uint,
- )
- })?
- }
- Ok(())
- } else {
- use_file::getrandom_inner(dest)
- }
-}
diff --git a/crates/getrandom/src/use_file.rs b/crates/getrandom/src/use_file.rs
index 333325b..bd643ae 100644
--- a/crates/getrandom/src/use_file.rs
+++ b/crates/getrandom/src/use_file.rs
@@ -9,21 +9,12 @@
sync::atomic::{AtomicUsize, Ordering::Relaxed},
};
-// We prefer using /dev/urandom and only use /dev/random if the OS
-// documentation indicates that /dev/urandom is insecure.
-// On Solaris/Illumos, see src/solaris_illumos.rs
-// On Dragonfly, Haiku, and QNX Neutrino the devices are identical.
-#[cfg(any(target_os = "solaris", target_os = "illumos"))]
-const FILE_PATH: &str = "/dev/random\0";
-#[cfg(any(
- target_os = "aix",
- target_os = "android",
- target_os = "linux",
- target_os = "redox",
- target_os = "dragonfly",
- target_os = "haiku",
- target_os = "nto",
-))]
+/// For all platforms, we use `/dev/urandom` rather than `/dev/random`.
+/// For more information see the linked man pages in lib.rs.
+/// - On Linux, "/dev/urandom is preferred and sufficient in all use cases".
+/// - On Redox, only /dev/urandom is provided.
+/// - On AIX, /dev/urandom will "provide cryptographically secure output".
+/// - On Haiku and QNX Neutrino they are identical.
const FILE_PATH: &str = "/dev/urandom\0";
const FD_UNINIT: usize = usize::max_value();
diff --git a/crates/getrandom/src/util_libc.rs b/crates/getrandom/src/util_libc.rs
index 0b792c3..129362d 100644
--- a/crates/getrandom/src/util_libc.rs
+++ b/crates/getrandom/src/util_libc.rs
@@ -11,7 +11,7 @@
cfg_if! {
if #[cfg(any(target_os = "netbsd", target_os = "openbsd", target_os = "android"))] {
use libc::__errno as errno_location;
- } else if #[cfg(any(target_os = "linux", target_os = "emscripten", target_os = "hurd", target_os = "redox"))] {
+ } else if #[cfg(any(target_os = "linux", target_os = "emscripten", target_os = "hurd", target_os = "redox", target_os = "dragonfly"))] {
use libc::__errno_location as errno_location;
} else if #[cfg(any(target_os = "solaris", target_os = "illumos"))] {
use libc::___errno as errno_location;
@@ -35,10 +35,6 @@
cfg_if! {
if #[cfg(target_os = "vxworks")] {
use libc::errnoGet as get_errno;
- } else if #[cfg(target_os = "dragonfly")] {
- // Until rust-lang/rust#29594 is stable, we cannot get the errno value
- // on DragonFlyBSD. So we just return an out-of-range errno.
- unsafe fn get_errno() -> libc::c_int { -1 }
} else {
unsafe fn get_errno() -> libc::c_int { *errno_location() }
}
@@ -151,3 +147,16 @@
}
}
}
+
+/// Thin wrapper around the `getrandom()` Linux system call
+#[cfg(any(target_os = "android", target_os = "linux"))]
+pub fn getrandom_syscall(buf: &mut [MaybeUninit<u8>]) -> libc::ssize_t {
+ unsafe {
+ libc::syscall(
+ libc::SYS_getrandom,
+ buf.as_mut_ptr() as *mut libc::c_void,
+ buf.len(),
+ 0,
+ ) as libc::ssize_t
+ }
+}
diff --git a/crates/getrandom/src/vita.rs b/crates/getrandom/src/vita.rs
deleted file mode 100644
index 20a9878..0000000
--- a/crates/getrandom/src/vita.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-//! Implementation for PS Vita
-use crate::{util_libc::last_os_error, Error};
-use core::mem::MaybeUninit;
-
-pub fn getrandom_inner(dest: &mut [MaybeUninit<u8>]) -> Result<(), Error> {
- for chunk in dest.chunks_mut(256) {
- let ret = unsafe { libc::getentropy(chunk.as_mut_ptr() as *mut libc::c_void, chunk.len()) };
- if ret == -1 {
- return Err(last_os_error());
- }
- }
- Ok(())
-}
diff --git a/crates/hyper/.android-checksum.json b/crates/hyper/.android-checksum.json
new file mode 100644
index 0000000..b937334
--- /dev/null
+++ b/crates/hyper/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"src/headers.rs":"000622c2e2130af0b90ee2ba62a34333e452647c687c220e12b96867cdd97667","src/body/mod.rs":"df0b6ddfd5d1e0d9af6e3b6cb0831525fea2540232a727b7192d25b986fd7fc5","src/mock.rs":"8fdd1b2fcc8ffb25245ab8e936317cbeeedf7d3d31104410781a1d74e906a505","MODULE_LICENSE_MIT":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","src/server/mod.rs":"b72dc2fbbf8efe36a245f615507603893cb337684287325199aea36baa2bfed1","src/ext/h1_reason_phrase.rs":"62dcc1fd804817f058a104f43fa60d663cbdde5d2ae3ff7a6a170b19a23c1ad7","src/server/server.rs":"e5c524ff38a3b6ce057de05a133676175f2487befbeed0011edc7a00638e43f6","src/proto/h1/encode.rs":"603ca7373ff015f7da8c6a884e2b19fb951104eba4d9856d6f4a1abf0de0871f","cargo_embargo.json":"67cc237cbe62e7a59ab7d4b53e2eb659384fce7c78f62b03b9a7320cdc4f2070","src/common/task.rs":"253006d3f12140780067aab1d2462a44d167543a31b5ead21fc8b004ad36607c","src/service/oneshot.rs":"c3cdca04f62eca50ae6813b72b315ba57008e1e282c185afdd10babd149172e5","src/ffi/macros.rs":"55c89daba693c4cd0040babb00623d0c5f1d1422a0a7fbeb7cfc2a90a4b6ec5b","src/server/conn/http1.rs":"8a907a0339f8784dbb092ad533bb44b496a2ac66c23c9db5f6542a44b1c52905","src/server/conn.rs":"6e0e30941d72655d6e65d38353da0bb9d3524f14ca95595807599e98ef1f7c24","src/ffi/error.rs":"2483a5b62f86618afbe426c12320134383d6c08b83cb14823372fe790673048d","src/common/watch.rs":"88fe7fd7c362bf7ed877379180cdf318038c266517c15393b2c73bfecd1a977f","src/common/io/mod.rs":"56a0b60bbd35d0a3b4791fb18636929f5ae2400aa02bf31bc32ba9cbb051c4a1","src/common/exec.rs":"1aba495bb2afee9413cd7a7494c28017bb7c3671f63f6ced26d3e8385f52a00b","src/service/util.rs":"29074fdbbd5de0776bf4343351e043dc36ec723621cc863199b0f4c669ab063a","src/ffi/task.rs":"829a6c90ee277d3a09f5ebe37cc8bae1b19a199418959b36142302087e70d17c","src/client/dispatch.rs":"142ffcfa380ac4d47c476054dc1a5d010b3421cda4fa098b985aeba71b41f6df","src/server/accept.rs":"7f2a7a4f62743d99c655fc97d8e2dcf3af83c6ea95ddcfe824ba7a5dd45f5c47","src/proto/h1/decode.rs":"9f763c0e9a0ff3320edf137f0d31ee0ea7721b95f164ca03e579ec51943f2736","src/proto/mod.rs":"23aa66c08735cc9f9d91467fdb6d9dee60a8dc0db419e05db49d459ef36d4c04","src/client/client.rs":"6f24706b2187d45b338cd20a7fe566d9e1e01f40903e9ac4f8bf20018a02caef","src/body/length.rs":"0820ae2977362af64e014d7e8f2ae9b2560db7d0e5be8f5c1ff618356c120bab","src/cfg.rs":"0a379bcff467d4c11fee118e1c98ae10e45836e7699bce50f870eaca1fcefcaa","src/common/buf.rs":"63ee30e410d1a4369eb41a560959031b17c0f67cb118ce96ccaa1793d0fa671c","src/client/mod.rs":"89e26ce9241cbf07d9a5efa2ca220b9f9704c78791f68f49dafd87dfacc13048","src/client/connect/dns.rs":"a8c24e2d4c63603e8a2b556b93a7aba0464a52c3b33b0dbeb2b09bcd17b4de28","src/lib.rs":"4b6eac8453c6f32b277ffd2abac4e37e1c6c64ebf90068e7f08988f82ab4308c","src/proto/h2/client.rs":"c5bed14f988f8c6c3abaa718eaf07487f7cc3e421bc040f8037cffc46cda2e45","src/body/body.rs":"a02ffdce570917c4917c4ad720119736ae37fe3733065a470acb94d1160da8fd","src/client/connect/mod.rs":"28ecfb6a453cb9d400dc635ffce9d6c18dcc5d2df78f2fa3086bb1a4be2175ce","LICENSE":"d966de049f593320c234ffcd560a0c425bbc3be523ab1d85777ef082b7918c32","src/common/drain.rs":"b7c73cf06601198aa66f68e0608e7526ca150cfff758f8fc6fe6132ab5bdb7c5","src/error.rs":"0ee6ef678673400fc3ebd677a981b8ad7971aedb4bb24412f36325f170bea709","src/service/http.rs":"ef3ab1b3f2521336b49e0c250e902660207d4cd1deb56abc25b47f811c478931","src/service/mod.rs":"bd2ee22a4dde7de0259f3514260537654670ba389ac80aba4bd845a52a43e936","src/proto/h1/conn.rs":"77c7f775d2acc6eb9697d76670920329bba578e6e989b1d40339fef2f1ab3c9e","src/proto/h2/mod.rs":"916b50584aeacbcb38c82f55a1c3354dc72d6a907a5beedf3603fe45659c78d0","src/client/conn.rs":"d092c41ea27636b3e9ba6e3af35aeca4faac2949a6674a06ca23471d20b8e298","src/ffi/http_types.rs":"f2a8d8d922fe59b65a755a0d4b71bf20e2699610ff41e9fbcbef17ba8b05d684","src/server/conn/http2.rs":"37ff57d1a004456ab45bda974587d86ad0703346ab614b70156867b4d2046db7","src/body/to_bytes.rs":"39ea8ee5e0848006e6d197da4a267772b6592646dd808c251ddc3eda8deaa726","src/client/service.rs":"5fbacad960cf36174bd657916494c4824ed52b6f346d6f7ef036ee47ea9281a5","src/proto/h2/ping.rs":"907857e1c0da5445b18c5075d10f6b81fd4c5aa89bffe6783e584ce7578cdc7c",".cargo-checksum.json":"5a0c5b0fc7fe4a2c10c1375c72dcb83ee9250444473b16cdd3f8c372d91c3166","src/common/sync_wrapper.rs":"966e2e432c73d917752fbf3be3dc48390e8a1409e8890448ad128a8428b6dec4","src/client/conn/http2.rs":"d412c6c1d52eece5a6c1cc5f99b27824f8473e3c39d3e93d0d4a9124ae807771","src/proto/h1/role.rs":"7782f38c5fb49f1608dba9f01782f64ec961bb76ad335c0976d566565d95b72d","src/proto/h1/io.rs":"1775757468982947dbd2bac8e7a56b319bb4a73b1ba5fefa3461760aea95e413","src/ffi/mod.rs":"373e9b10e0920006308ac95062880995a9b1b1718c32f5231a547d51c70a4db5","src/common/io/rewind.rs":"f5c504b350b50aed2a7f0f69fb33ff7fb59c276536aef3e3513e7dbbadda48ae","src/server/server_stub.rs":"626019543194f8bac4abce957e5c621c308f76733de7509ae0dfb9a0cd59c9df","src/common/mod.rs":"f51aecd5bd8d3d3e61b95cab3fd2092554b0ffe8b1354617057d67113453d08f","src/common/lazy.rs":"d265b76db04c5a9927fd1c748d6fe99522f9ae86c30eaa6d2e7a35e431bd96ee","src/proto/h2/server.rs":"83f8a61bc750b4d6219a4b291b05ea7c5cbd41a39c4cb8364c60a7056c0edfdd","src/client/conn/http1.rs":"aef119fe6baad32253b3113f3be04070d1d0d1b351e36afa7bf4f06ef6bd99e3","src/ffi/io.rs":"e94220bedb0d6aff09001de54e27729784ce64fd0d4e0fe778d1934511095159","src/upgrade.rs":"22f20064ef36705743ef49515bf0b69d84245b96d5ab30b1345144a7fe3bc7d0","src/service/make.rs":"e063fe6373c3deea57ba8fe170087d9a571b996d34f5718221f81ae5729bf60d","Cargo.toml":"29400cd268caa840ad7c5c2a87660a7c08faa3ad0061c6ea13aa7429651101b6","src/ffi/body.rs":"ea3dc0d640a9f345e87feb62f57a1f8f5cdb728c7f05737dec0dd4b7a6962a37","src/server/tcp.rs":"69fcbe8283ba2c3c7a4a6b9cf3c4bb868aaea71f6a1b3a3ee429595836e253f8","src/rt.rs":"5965678dbb9a8a5ecd8ff23ebca378017133633afe46148afa3c37d82476a77c","src/server/shutdown.rs":"4544609826b5815efc086d8ea7ed64d462f26de35d1ecf6039a8616a863dff6a","Android.bp":"b1bc96f386dec4b8eb42eb79d83a3a70b5ff8b439d1173123136d830cb96c80c","src/client/pool.rs":"930a5e81d381679cf71f7fa69699beb73fe41b5c724a5dfb1c4565bdb3365d5a","src/ffi/client.rs":"5bc3910b3851dec754254ee4f08aa47e45ad9bb962d54de83b0156bc937c77df","src/client/connect/http.rs":"29637ed8a5fdd20377fc24753706d708d4ed907036d12a1ebafebcef1a6f35d3","src/body/aggregate.rs":"67ab42c9c4fbc2743ad24c5b4d96de83a3abf85f09e53102817b119345a22afb","src/proto/h1/dispatch.rs":"817f015108dc2dcfcaf37a90b43955b1fbcb55792e830c2daadc099ad5085121","src/client/tests.rs":"43d07002a845d14b6b45f7b31578c5c8a41452880f4215b9c60605eb2446b537","METADATA":"744c5f3ad5eb61242b281c5ffcde12f7936181b141fbb29361e17917faf4fe1d","src/proto/h1/mod.rs":"24943821d5880e15725cc84c9d5f5de355d3e6773e3e2d08bd8befabbb454221","src/ext.rs":"96f2c7324b8e964ec424dd88d43616b6a659aa224367af61e52eb81a836f233a","src/common/date.rs":"026518cc90448257298b4ba4025b52a159aa7d9d6ae90808d5e1ed76eef2648d"}}
\ No newline at end of file
diff --git a/crates/hyper/.cargo-checksum.json b/crates/hyper/.cargo-checksum.json
index 68a7797..11c8504 100644
--- a/crates/hyper/.cargo-checksum.json
+++ b/crates/hyper/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.lock":"4ca397505ef102bb00638adc898b4bfbded735a57fa792a7d925915f30667239","Cargo.toml":"f902a0301e0322d08ab95ca777bdc1726944a59c30de0a6ae4d506fe8ab60251","LICENSE":"25dfd9ec24ebbee73dc93e687526cd4c26deae17bc2179ea0fe3e5dc96105b9b","src/body/aggregate.rs":"a4b05d775a7ef7807ce4eb3ccd0592f542398c7e14c876cb07298dc792b076e3","src/body/body.rs":"1fafdc91f9a48c19ec3eaeede79adc1b7c0162bca03efb40f85e9d7f7ed9eb3f","src/body/length.rs":"2d186f50f05b0562db92d3e1d272521c60c9ad259222ccb1a9310b1ff380a64e","src/body/mod.rs":"8098a367c239f05ba443a9b5394449142c6f144ad187f87f8d9f9cde74405b44","src/body/to_bytes.rs":"517077ed79a987c96a89f70a09eba776db5e8b867768da2ca291d28c2c0d70d2","src/cfg.rs":"de5fee5bba45a982c10e8f09fc24677be5494bf6da0b39a3a132f0f6eb3fe41e","src/client/client.rs":"00df0ef99e35d7b3b60c2da6aabee3418f2d35c45a0127ce64893331db040972","src/client/conn.rs":"1358a7b7b43588bd9863f2243ac78381d20018e530e3f8efc58fe4d7df239d04","src/client/conn/http1.rs":"9e4a9f2565f5a4bb8201d5a7321b89b6597b0a05f899da1326b72a9668639e15","src/client/conn/http2.rs":"95f2ae02b8297d48560049a5fd557d374fa6a325ac563996e88e2ae5fff0b4ec","src/client/connect/dns.rs":"98830a9163eae71cbf8d240c6e531ae98d6b51653c0d158fc1c5bddad4f7321e","src/client/connect/http.rs":"6d5b6e0d4f83ecfe66e79d1d4eb72597588af0ba70576faab2e658e3b781c09e","src/client/connect/mod.rs":"83ef7a4d8e8376bfd69321d4646ac439158f3d2c228acbc74dba208bfa0ae938","src/client/dispatch.rs":"39cac7daaf4b473c030d338e48c6fd4e4133742a06a0047ea7153e56def3cbdc","src/client/mod.rs":"d5580cda5e7dc9c5240c72a9ea0005d34b5412c28067ab3fa2301ba4cf49d9fa","src/client/pool.rs":"584f473408059b230adc1a74e80795d27b402e5de16224017157ed06694f7eab","src/client/service.rs":"e61baf9c206da67265c4fefe48fc037d65d93eebfecca68e3dc2215896ef4bd0","src/client/tests.rs":"f7eb2d1dba18e1bd69990f59e61b73a0477db5cc4de68fd64bd7cd36a9406072","src/common/buf.rs":"c762dc2688828ffc88f0549ceddeef65e57d404c245118bcacf3dd8d402bc9cc","src/common/date.rs":"f9a1a63aa7e8f5d6f5800cd56e7e6182cf07e781089930afb529263c1d8adf14","src/common/drain.rs":"058bbcf26dfeb96d7646c69e03b5a5f363b3bcee9afe0a9fe30ea52a9eb995ff","src/common/exec.rs":"c9e24d6c624b9c237bcdea7c59c60c9b8539510ac053cad50e861567cea3e17b","src/common/io/mod.rs":"6f8e4518df7f24d81fc59b46a2deb61557e8d92700bdc62539fe0f034066fc89","src/common/io/rewind.rs":"a708a373d96e7b1444d8497d57f0fe1902456fda8eb3dc42ade3a8f305880625","src/common/lazy.rs":"5cee776d65f28282e556567b433bddb908947df6601218872496ba088c2a7d12","src/common/mod.rs":"363cbf3853ffe6c4258010b17e67babdb8f518fc3cad39dc6588e7ba75587405","src/common/sync_wrapper.rs":"76206c2a52eeb62cdba279d620a4aef52134c6ac782a9f61e741edc8b653cb50","src/common/task.rs":"5a7c2b9255ab023cceedb8e42bd26db7ba8f11498d2f14d4b23a798618cbc920","src/common/watch.rs":"eb6db13fbb266ec11200ffa1f5e7a9a132d7e6555373895efde1e2daea428e03","src/error.rs":"d3f3c8e2303c964904e84a4bf8b93ff6b036c8918bac2bd66edac5fd5967c7e3","src/ext.rs":"19a65a25be9b821ad4088583f712d4d7f388096ec9d69b33f40129c9945afe2c","src/ext/h1_reason_phrase.rs":"e1d18088f942b52dbee766d81e11a9caeadaf368ff12b58d53b97fc62d08876c","src/ffi/body.rs":"941fb8b79097e5a4eec0c611a1cd5db24bed3479f1a14cf754e33d19f6d25854","src/ffi/client.rs":"6b35700e9dec4a9cb40ad3155327bd6fe11165e0cef1874a3916cf96d8b0c7a6","src/ffi/error.rs":"de3d8c1eb3818b438ed28a9dea800dfdac47bf2dd21a7c3e5fc10cb331b6e39f","src/ffi/http_types.rs":"ae25e0fd07ec80e90d5b4f488ce972fe7858f009261fdf16a35b2bd0b1bbdad3","src/ffi/io.rs":"ab176e866c179a589d22e3aa7410612615e60117019d1e589f9732c36a2282da","src/ffi/macros.rs":"8e1fe58244295db1d19aceeb0e9a777fe484ccc20194fae88b54208e0cbeb515","src/ffi/mod.rs":"0e52ae3586c6a960ae68e862561aabcee690a1e23c6d5d1045fcdc3c74b7fc96","src/ffi/task.rs":"f348cdbe1f1d4e26b339cd9382bb739b0f37aaceb2aa85627b7fda0c6326de56","src/headers.rs":"4d76596bfc90f88fe8b48bb8d0552a215a20c452197ea982b37ba30fa496e007","src/lib.rs":"4014d93b86bda6a5f9beaed8f98b152a9d5d67517f08bbe1aa04e2f078f80553","src/mock.rs":"8b455312be74af6c4a27b3beba85a9493c86d43097947c5aad8a5e9dc0dcdbb3","src/proto/h1/conn.rs":"ba7d5bb4875dbd11f622986034cab8eaa2a751235324bf7cf03bea20c66f9f00","src/proto/h1/decode.rs":"0d92ed844160099d385fa5b13afa6b8134700373b097c81f91416f7f2b800333","src/proto/h1/dispatch.rs":"da3a986e8e0d255bedac48109a31921b3faf575c6821d5f0f60dd06a24900f75","src/proto/h1/encode.rs":"3a360356431ff3f011226cf81fb4eeb63cfe9ca25140e41e2e3907f6d64725f9","src/proto/h1/io.rs":"321d845a497eb4761dbd4eedb994ae9d6e5aca7faabf3b05e83eb35cb4ebf214","src/proto/h1/mod.rs":"61ec22d19567116aadc365ca424c958744b058b55d2f064b9a74ee88b126c7be","src/proto/h1/role.rs":"60ecf2caad5d54f78234a12b58eb75d9fb72509313f194b9475301ad60756262","src/proto/h2/client.rs":"5862ca7bc2847f58ed5f57464f8eb74abe3fe89afe4bd632e575a3c51b8a8744","src/proto/h2/mod.rs":"1f3f157aaef6d91b7af8abea7f76ab1c49ee2038b71027c83f83a2648786fafc","src/proto/h2/ping.rs":"1ea4daea2317a72958879a89baecdea02fb7ab238083606461400ed9e3df0c83","src/proto/h2/server.rs":"a0a221bd960c57117da94160d9baddbbdd73ddfc06c328cd86d407bc25e07314","src/proto/mod.rs":"1a935a3da830131f848a6a64c049c559ce07e6b0012fd6e4002bb365f562ebeb","src/rt.rs":"1ef7d4bb3ad6637c6f37189e30d740c061a3c98ca008d266a99f865130909427","src/server/accept.rs":"07b9b520fbf7d8f472455412f359afdd7713fb408f88dbc050585249023fc075","src/server/conn.rs":"9b92acb5f53301cf623ffc0f347363dd6981c3deaed6c8ab425c28a3152e571b","src/server/conn/http1.rs":"af364abcd92aa78e05af83c9c606de66447170dc73276896294c4257e903a047","src/server/conn/http2.rs":"73bb19450798d804bf1b76e8ac495f9cdbad3453c009756b66f06c1e47f2f664","src/server/mod.rs":"2375370854ac8ae5b80378aa1e29bc781c50aad1d1150c32515393a3316b745c","src/server/server.rs":"f8d9007c44da3fded15244f88f9b781a9ec94924789136aba6b7c86312816e90","src/server/server_stub.rs":"ab443f51ede637e0b0c08f36fbc143a34935102af2921edcc257660eeaad4537","src/server/shutdown.rs":"45bf03fc9314873572775fb4ea336230340108239c88f2cd2b435759ad8c693c","src/server/tcp.rs":"8ed09df1ccfb59d0c9ff2561acd0f3d5e2a03929c960f6923e208e08fb5f1806","src/service/http.rs":"ac930efc71bcecc904fa65a44af254501ce8abd6f7d36e591b907eee45e77979","src/service/make.rs":"ee11adc469796427c7b694551d0bbda69f732536079aee53e3ef7f9be4385b2d","src/service/mod.rs":"92c05f08a175fb847868a02e7aca96176df1237458d40a17a7a6aa377476df90","src/service/oneshot.rs":"3ac3f0c7c20fcc3790cef868ca7a70c87a36687ae28c44e0c9978d2e514e4b22","src/service/util.rs":"67f5b4373a4d705a7277cda717b5f3a3ebd00365446e2beb60c1d6193d071a85","src/upgrade.rs":"d6c68680ad74ebbd6ff74ea28b52704c14d4547c67520048f7f84cfe03d11f94"},"package":"bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80"}
\ No newline at end of file
+{"files":{"Cargo.toml":"d48706237560dccaf26eb27a9c9b0f25ac9ecc31c45db55e7cd4c9a7f273e165","LICENSE":"25dfd9ec24ebbee73dc93e687526cd4c26deae17bc2179ea0fe3e5dc96105b9b","src/body/aggregate.rs":"a4b05d775a7ef7807ce4eb3ccd0592f542398c7e14c876cb07298dc792b076e3","src/body/body.rs":"1fafdc91f9a48c19ec3eaeede79adc1b7c0162bca03efb40f85e9d7f7ed9eb3f","src/body/length.rs":"2d186f50f05b0562db92d3e1d272521c60c9ad259222ccb1a9310b1ff380a64e","src/body/mod.rs":"8098a367c239f05ba443a9b5394449142c6f144ad187f87f8d9f9cde74405b44","src/body/to_bytes.rs":"517077ed79a987c96a89f70a09eba776db5e8b867768da2ca291d28c2c0d70d2","src/cfg.rs":"de5fee5bba45a982c10e8f09fc24677be5494bf6da0b39a3a132f0f6eb3fe41e","src/client/client.rs":"00df0ef99e35d7b3b60c2da6aabee3418f2d35c45a0127ce64893331db040972","src/client/conn.rs":"1358a7b7b43588bd9863f2243ac78381d20018e530e3f8efc58fe4d7df239d04","src/client/conn/http1.rs":"9e4a9f2565f5a4bb8201d5a7321b89b6597b0a05f899da1326b72a9668639e15","src/client/conn/http2.rs":"95f2ae02b8297d48560049a5fd557d374fa6a325ac563996e88e2ae5fff0b4ec","src/client/connect/dns.rs":"98830a9163eae71cbf8d240c6e531ae98d6b51653c0d158fc1c5bddad4f7321e","src/client/connect/http.rs":"6d5b6e0d4f83ecfe66e79d1d4eb72597588af0ba70576faab2e658e3b781c09e","src/client/connect/mod.rs":"83ef7a4d8e8376bfd69321d4646ac439158f3d2c228acbc74dba208bfa0ae938","src/client/dispatch.rs":"39cac7daaf4b473c030d338e48c6fd4e4133742a06a0047ea7153e56def3cbdc","src/client/mod.rs":"d5580cda5e7dc9c5240c72a9ea0005d34b5412c28067ab3fa2301ba4cf49d9fa","src/client/pool.rs":"584f473408059b230adc1a74e80795d27b402e5de16224017157ed06694f7eab","src/client/service.rs":"e61baf9c206da67265c4fefe48fc037d65d93eebfecca68e3dc2215896ef4bd0","src/client/tests.rs":"f7eb2d1dba18e1bd69990f59e61b73a0477db5cc4de68fd64bd7cd36a9406072","src/common/buf.rs":"c762dc2688828ffc88f0549ceddeef65e57d404c245118bcacf3dd8d402bc9cc","src/common/date.rs":"f9a1a63aa7e8f5d6f5800cd56e7e6182cf07e781089930afb529263c1d8adf14","src/common/drain.rs":"058bbcf26dfeb96d7646c69e03b5a5f363b3bcee9afe0a9fe30ea52a9eb995ff","src/common/exec.rs":"c9e24d6c624b9c237bcdea7c59c60c9b8539510ac053cad50e861567cea3e17b","src/common/io/mod.rs":"6f8e4518df7f24d81fc59b46a2deb61557e8d92700bdc62539fe0f034066fc89","src/common/io/rewind.rs":"a708a373d96e7b1444d8497d57f0fe1902456fda8eb3dc42ade3a8f305880625","src/common/lazy.rs":"5cee776d65f28282e556567b433bddb908947df6601218872496ba088c2a7d12","src/common/mod.rs":"363cbf3853ffe6c4258010b17e67babdb8f518fc3cad39dc6588e7ba75587405","src/common/sync_wrapper.rs":"76206c2a52eeb62cdba279d620a4aef52134c6ac782a9f61e741edc8b653cb50","src/common/task.rs":"5a7c2b9255ab023cceedb8e42bd26db7ba8f11498d2f14d4b23a798618cbc920","src/common/watch.rs":"eb6db13fbb266ec11200ffa1f5e7a9a132d7e6555373895efde1e2daea428e03","src/error.rs":"d3f3c8e2303c964904e84a4bf8b93ff6b036c8918bac2bd66edac5fd5967c7e3","src/ext.rs":"19a65a25be9b821ad4088583f712d4d7f388096ec9d69b33f40129c9945afe2c","src/ext/h1_reason_phrase.rs":"e1d18088f942b52dbee766d81e11a9caeadaf368ff12b58d53b97fc62d08876c","src/ffi/body.rs":"941fb8b79097e5a4eec0c611a1cd5db24bed3479f1a14cf754e33d19f6d25854","src/ffi/client.rs":"6b35700e9dec4a9cb40ad3155327bd6fe11165e0cef1874a3916cf96d8b0c7a6","src/ffi/error.rs":"de3d8c1eb3818b438ed28a9dea800dfdac47bf2dd21a7c3e5fc10cb331b6e39f","src/ffi/http_types.rs":"ae25e0fd07ec80e90d5b4f488ce972fe7858f009261fdf16a35b2bd0b1bbdad3","src/ffi/io.rs":"ab176e866c179a589d22e3aa7410612615e60117019d1e589f9732c36a2282da","src/ffi/macros.rs":"8e1fe58244295db1d19aceeb0e9a777fe484ccc20194fae88b54208e0cbeb515","src/ffi/mod.rs":"0e52ae3586c6a960ae68e862561aabcee690a1e23c6d5d1045fcdc3c74b7fc96","src/ffi/task.rs":"f348cdbe1f1d4e26b339cd9382bb739b0f37aaceb2aa85627b7fda0c6326de56","src/headers.rs":"4d76596bfc90f88fe8b48bb8d0552a215a20c452197ea982b37ba30fa496e007","src/lib.rs":"cff8e513cb2d9611ba30a7a7787fe5220b848819e9f46267a8fe2acaf465ec28","src/mock.rs":"8b455312be74af6c4a27b3beba85a9493c86d43097947c5aad8a5e9dc0dcdbb3","src/proto/h1/conn.rs":"ba7d5bb4875dbd11f622986034cab8eaa2a751235324bf7cf03bea20c66f9f00","src/proto/h1/decode.rs":"ac06e4fb3b0bf07907581949ad361e4ba05559fd8add253b90bd183cfb09e34f","src/proto/h1/dispatch.rs":"da3a986e8e0d255bedac48109a31921b3faf575c6821d5f0f60dd06a24900f75","src/proto/h1/encode.rs":"3a360356431ff3f011226cf81fb4eeb63cfe9ca25140e41e2e3907f6d64725f9","src/proto/h1/io.rs":"0d5f4f6dde439f4b69f24e4c98e05a7dfbcead42beda850dd54705bc6dec357f","src/proto/h1/mod.rs":"61ec22d19567116aadc365ca424c958744b058b55d2f064b9a74ee88b126c7be","src/proto/h1/role.rs":"e7a1300cc27e25519c7b61026f7c4b966faae06db722c8ff42dc07682fecbb58","src/proto/h2/client.rs":"5862ca7bc2847f58ed5f57464f8eb74abe3fe89afe4bd632e575a3c51b8a8744","src/proto/h2/mod.rs":"1f3f157aaef6d91b7af8abea7f76ab1c49ee2038b71027c83f83a2648786fafc","src/proto/h2/ping.rs":"1ea4daea2317a72958879a89baecdea02fb7ab238083606461400ed9e3df0c83","src/proto/h2/server.rs":"705f8ecea99dbf5fe74188ba4f5fa2ea22c252fc443eed51171a89f845dc729d","src/proto/mod.rs":"1a935a3da830131f848a6a64c049c559ce07e6b0012fd6e4002bb365f562ebeb","src/rt.rs":"1ef7d4bb3ad6637c6f37189e30d740c061a3c98ca008d266a99f865130909427","src/server/accept.rs":"07b9b520fbf7d8f472455412f359afdd7713fb408f88dbc050585249023fc075","src/server/conn.rs":"25e1b5dfbd74fd62b41800c49a9492f0f74bc20285c3783a6a2f8a1a9ffbb4cd","src/server/conn/http1.rs":"af364abcd92aa78e05af83c9c606de66447170dc73276896294c4257e903a047","src/server/conn/http2.rs":"9f9843891e7dc56ee8d5f0b8b4d38e77b0e327de73babdfdc05da9c5641f09dd","src/server/mod.rs":"2375370854ac8ae5b80378aa1e29bc781c50aad1d1150c32515393a3316b745c","src/server/server.rs":"5294facdd9abae7a2bc9a7eb7ce1521437780a0f6505fee44e8aa8a2dd909e5e","src/server/server_stub.rs":"ab443f51ede637e0b0c08f36fbc143a34935102af2921edcc257660eeaad4537","src/server/shutdown.rs":"45bf03fc9314873572775fb4ea336230340108239c88f2cd2b435759ad8c693c","src/server/tcp.rs":"8ed09df1ccfb59d0c9ff2561acd0f3d5e2a03929c960f6923e208e08fb5f1806","src/service/http.rs":"ac930efc71bcecc904fa65a44af254501ce8abd6f7d36e591b907eee45e77979","src/service/make.rs":"ee11adc469796427c7b694551d0bbda69f732536079aee53e3ef7f9be4385b2d","src/service/mod.rs":"92c05f08a175fb847868a02e7aca96176df1237458d40a17a7a6aa377476df90","src/service/oneshot.rs":"3ac3f0c7c20fcc3790cef868ca7a70c87a36687ae28c44e0c9978d2e514e4b22","src/service/util.rs":"67f5b4373a4d705a7277cda717b5f3a3ebd00365446e2beb60c1d6193d071a85","src/upgrade.rs":"d6c68680ad74ebbd6ff74ea28b52704c14d4547c67520048f7f84cfe03d11f94"},"package":"41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7"}
\ No newline at end of file
diff --git a/crates/hyper/Android.bp b/crates/hyper/Android.bp
index b5df6a9..b9acf91 100644
--- a/crates/hyper/Android.bp
+++ b/crates/hyper/Android.bp
@@ -18,7 +18,7 @@
host_supported: true,
crate_name: "hyper",
cargo_env_compat: true,
- cargo_pkg_version: "0.14.28",
+ cargo_pkg_version: "0.14.32",
crate_root: "src/lib.rs",
edition: "2018",
features: [
diff --git a/crates/hyper/Cargo.lock b/crates/hyper/Cargo.lock
deleted file mode 100644
index 455bed9..0000000
--- a/crates/hyper/Cargo.lock
+++ /dev/null
@@ -1,897 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-version = 3
-
-[[package]]
-name = "addr2line"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
-dependencies = [
- "gimli",
-]
-
-[[package]]
-name = "adler"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
-
-[[package]]
-name = "aho-corasick"
-version = "1.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "async-stream"
-version = "0.3.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
-dependencies = [
- "async-stream-impl",
- "futures-core",
- "pin-project-lite",
-]
-
-[[package]]
-name = "async-stream-impl"
-version = "0.3.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "atty"
-version = "0.2.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
-dependencies = [
- "hermit-abi 0.1.19",
- "libc",
- "winapi",
-]
-
-[[package]]
-name = "autocfg"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
-
-[[package]]
-name = "backtrace"
-version = "0.3.69"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
-dependencies = [
- "addr2line",
- "cc",
- "cfg-if",
- "libc",
- "miniz_oxide",
- "object",
- "rustc-demangle",
-]
-
-[[package]]
-name = "bytes"
-version = "1.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
-
-[[package]]
-name = "cc"
-version = "1.0.83"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "cfg-if"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-
-[[package]]
-name = "env_logger"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
-dependencies = [
- "atty",
- "humantime",
- "log",
- "regex",
- "termcolor",
-]
-
-[[package]]
-name = "equivalent"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
-
-[[package]]
-name = "fnv"
-version = "1.0.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
-
-[[package]]
-name = "form_urlencoded"
-version = "1.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
-dependencies = [
- "percent-encoding",
-]
-
-[[package]]
-name = "futures-channel"
-version = "0.3.29"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
-dependencies = [
- "futures-core",
-]
-
-[[package]]
-name = "futures-core"
-version = "0.3.29"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
-
-[[package]]
-name = "futures-sink"
-version = "0.3.29"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
-
-[[package]]
-name = "futures-task"
-version = "0.3.29"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
-
-[[package]]
-name = "futures-util"
-version = "0.3.29"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
-dependencies = [
- "futures-core",
- "futures-task",
- "pin-project-lite",
- "pin-utils",
-]
-
-[[package]]
-name = "gimli"
-version = "0.28.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
-
-[[package]]
-name = "h2"
-version = "0.3.22"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178"
-dependencies = [
- "bytes",
- "fnv",
- "futures-core",
- "futures-sink",
- "futures-util",
- "http",
- "indexmap",
- "slab",
- "tokio",
- "tokio-util",
- "tracing",
-]
-
-[[package]]
-name = "hashbrown"
-version = "0.14.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156"
-
-[[package]]
-name = "hermit-abi"
-version = "0.1.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "hermit-abi"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
-
-[[package]]
-name = "http"
-version = "0.2.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb"
-dependencies = [
- "bytes",
- "fnv",
- "itoa",
-]
-
-[[package]]
-name = "http-body"
-version = "0.4.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
-dependencies = [
- "bytes",
- "http",
- "pin-project-lite",
-]
-
-[[package]]
-name = "httparse"
-version = "1.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
-
-[[package]]
-name = "httpdate"
-version = "1.0.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
-
-[[package]]
-name = "humantime"
-version = "1.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
-dependencies = [
- "quick-error",
-]
-
-[[package]]
-name = "hyper"
-version = "0.14.28"
-dependencies = [
- "bytes",
- "futures-channel",
- "futures-core",
- "futures-util",
- "h2",
- "http",
- "http-body",
- "httparse",
- "httpdate",
- "itoa",
- "libc",
- "matches",
- "num_cpus",
- "pin-project-lite",
- "pnet_datalink",
- "pretty_env_logger",
- "serde",
- "serde_json",
- "socket2",
- "spmc",
- "tokio",
- "tokio-test",
- "tokio-util",
- "tower",
- "tower-service",
- "tracing",
- "url",
- "want",
-]
-
-[[package]]
-name = "idna"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
-dependencies = [
- "unicode-bidi",
- "unicode-normalization",
-]
-
-[[package]]
-name = "indexmap"
-version = "2.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
-dependencies = [
- "equivalent",
- "hashbrown",
-]
-
-[[package]]
-name = "ipnetwork"
-version = "0.17.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02c3eaab3ac0ede60ffa41add21970a7df7d91772c03383aac6c2c3d53cc716b"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "itoa"
-version = "1.0.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
-
-[[package]]
-name = "libc"
-version = "0.2.150"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
-
-[[package]]
-name = "log"
-version = "0.4.20"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
-
-[[package]]
-name = "matches"
-version = "0.1.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
-
-[[package]]
-name = "memchr"
-version = "2.6.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
-
-[[package]]
-name = "miniz_oxide"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
-dependencies = [
- "adler",
-]
-
-[[package]]
-name = "mio"
-version = "0.8.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0"
-dependencies = [
- "libc",
- "wasi",
- "windows-sys",
-]
-
-[[package]]
-name = "num_cpus"
-version = "1.16.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
-dependencies = [
- "hermit-abi 0.3.3",
- "libc",
-]
-
-[[package]]
-name = "object"
-version = "0.32.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "once_cell"
-version = "1.18.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
-
-[[package]]
-name = "percent-encoding"
-version = "2.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
-
-[[package]]
-name = "pin-project"
-version = "1.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
-dependencies = [
- "pin-project-internal",
-]
-
-[[package]]
-name = "pin-project-internal"
-version = "1.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "pin-project-lite"
-version = "0.2.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
-
-[[package]]
-name = "pin-utils"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
-
-[[package]]
-name = "pnet_base"
-version = "0.27.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e4688aa497ef62129f302a5800ebde67825f8ff129f43690ca84099f6620bed"
-
-[[package]]
-name = "pnet_datalink"
-version = "0.27.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59001c9c4d9d23bf2f61afaaf134a766fd6932ba2557c606b9112157053b9ac7"
-dependencies = [
- "ipnetwork",
- "libc",
- "pnet_base",
- "pnet_sys",
- "winapi",
-]
-
-[[package]]
-name = "pnet_sys"
-version = "0.27.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7589e4c4e7ed72a3ffdff8a65d3bea84e8c3a23e19d0a10e8f45efdf632fff15"
-dependencies = [
- "libc",
- "winapi",
-]
-
-[[package]]
-name = "pretty_env_logger"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "926d36b9553851b8b0005f1275891b392ee4d2d833852c417ed025477350fb9d"
-dependencies = [
- "env_logger",
- "log",
-]
-
-[[package]]
-name = "proc-macro2"
-version = "1.0.69"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
-dependencies = [
- "unicode-ident",
-]
-
-[[package]]
-name = "quick-error"
-version = "1.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
-
-[[package]]
-name = "quote"
-version = "1.0.33"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
-dependencies = [
- "proc-macro2",
-]
-
-[[package]]
-name = "regex"
-version = "1.10.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-automata",
- "regex-syntax",
-]
-
-[[package]]
-name = "regex-automata"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-syntax",
-]
-
-[[package]]
-name = "regex-syntax"
-version = "0.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
-
-[[package]]
-name = "rustc-demangle"
-version = "0.1.23"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
-
-[[package]]
-name = "ryu"
-version = "1.0.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
-
-[[package]]
-name = "serde"
-version = "1.0.192"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001"
-dependencies = [
- "serde_derive",
-]
-
-[[package]]
-name = "serde_derive"
-version = "1.0.192"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "serde_json"
-version = "1.0.108"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
-dependencies = [
- "itoa",
- "ryu",
- "serde",
-]
-
-[[package]]
-name = "slab"
-version = "0.4.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
-dependencies = [
- "autocfg",
-]
-
-[[package]]
-name = "socket2"
-version = "0.5.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
-dependencies = [
- "libc",
- "windows-sys",
-]
-
-[[package]]
-name = "spmc"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02a8428da277a8e3a15271d79943e80ccc2ef254e78813a166a08d65e4c3ece5"
-
-[[package]]
-name = "syn"
-version = "2.0.39"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-ident",
-]
-
-[[package]]
-name = "termcolor"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449"
-dependencies = [
- "winapi-util",
-]
-
-[[package]]
-name = "tinyvec"
-version = "1.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
-dependencies = [
- "tinyvec_macros",
-]
-
-[[package]]
-name = "tinyvec_macros"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
-
-[[package]]
-name = "tokio"
-version = "1.34.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9"
-dependencies = [
- "backtrace",
- "bytes",
- "libc",
- "mio",
- "num_cpus",
- "pin-project-lite",
- "socket2",
- "tokio-macros",
- "windows-sys",
-]
-
-[[package]]
-name = "tokio-macros"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "tokio-stream"
-version = "0.1.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
-dependencies = [
- "futures-core",
- "pin-project-lite",
- "tokio",
-]
-
-[[package]]
-name = "tokio-test"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e89b3cbabd3ae862100094ae433e1def582cf86451b4e9bf83aa7ac1d8a7d719"
-dependencies = [
- "async-stream",
- "bytes",
- "futures-core",
- "tokio",
- "tokio-stream",
-]
-
-[[package]]
-name = "tokio-util"
-version = "0.7.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
-dependencies = [
- "bytes",
- "futures-core",
- "futures-sink",
- "pin-project-lite",
- "tokio",
- "tracing",
-]
-
-[[package]]
-name = "tower"
-version = "0.4.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
-dependencies = [
- "futures-core",
- "futures-util",
- "pin-project",
- "pin-project-lite",
- "tokio",
- "tower-layer",
- "tower-service",
-]
-
-[[package]]
-name = "tower-layer"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
-
-[[package]]
-name = "tower-service"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
-
-[[package]]
-name = "tracing"
-version = "0.1.40"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
-dependencies = [
- "pin-project-lite",
- "tracing-core",
-]
-
-[[package]]
-name = "tracing-core"
-version = "0.1.32"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
-dependencies = [
- "once_cell",
-]
-
-[[package]]
-name = "try-lock"
-version = "0.2.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
-
-[[package]]
-name = "unicode-bidi"
-version = "0.3.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416"
-
-[[package]]
-name = "unicode-ident"
-version = "1.0.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
-
-[[package]]
-name = "unicode-normalization"
-version = "0.1.22"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
-dependencies = [
- "tinyvec",
-]
-
-[[package]]
-name = "url"
-version = "2.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
-dependencies = [
- "form_urlencoded",
- "idna",
- "percent-encoding",
-]
-
-[[package]]
-name = "want"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
-dependencies = [
- "try-lock",
-]
-
-[[package]]
-name = "wasi"
-version = "0.11.0+wasi-snapshot-preview1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
-
-[[package]]
-name = "winapi"
-version = "0.3.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
-dependencies = [
- "winapi-i686-pc-windows-gnu",
- "winapi-x86_64-pc-windows-gnu",
-]
-
-[[package]]
-name = "winapi-i686-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-
-[[package]]
-name = "winapi-util"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
-dependencies = [
- "winapi",
-]
-
-[[package]]
-name = "winapi-x86_64-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-
-[[package]]
-name = "windows-sys"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
-dependencies = [
- "windows-targets",
-]
-
-[[package]]
-name = "windows-targets"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
-dependencies = [
- "windows_aarch64_gnullvm",
- "windows_aarch64_msvc",
- "windows_i686_gnu",
- "windows_i686_msvc",
- "windows_x86_64_gnu",
- "windows_x86_64_gnullvm",
- "windows_x86_64_msvc",
-]
-
-[[package]]
-name = "windows_aarch64_gnullvm"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
-
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
-
-[[package]]
-name = "windows_i686_gnu"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
-
-[[package]]
-name = "windows_i686_msvc"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
-
-[[package]]
-name = "windows_x86_64_gnu"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
-
-[[package]]
-name = "windows_x86_64_gnullvm"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
-
-[[package]]
-name = "windows_x86_64_msvc"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
diff --git a/crates/hyper/Cargo.toml b/crates/hyper/Cargo.toml
index 1ceb406..d1cd9c3 100644
--- a/crates/hyper/Cargo.toml
+++ b/crates/hyper/Cargo.toml
@@ -12,13 +12,19 @@
[package]
edition = "2018"
name = "hyper"
-version = "0.14.28"
+version = "0.14.32"
authors = ["Sean McArthur <[email protected]>"]
+build = false
include = [
"Cargo.toml",
"LICENSE",
"src/**/*",
]
+autolib = false
+autobins = false
+autoexamples = false
+autotests = false
+autobenches = false
description = "A fast and correct HTTP library."
homepage = "https://hyper.rs"
documentation = "https://docs.rs/hyper"
@@ -51,136 +57,41 @@
[package.metadata.playground]
features = ["full"]
-[profile.bench]
-codegen-units = 1
-incremental = false
-
-[profile.release]
-codegen-units = 1
-incremental = false
-
-[[example]]
-name = "client"
-path = "examples/client.rs"
-required-features = ["full"]
-
-[[example]]
-name = "client_json"
-path = "examples/client_json.rs"
-required-features = ["full"]
-
-[[example]]
-name = "echo"
-path = "examples/echo.rs"
-required-features = ["full"]
-
-[[example]]
-name = "gateway"
-path = "examples/gateway.rs"
-required-features = ["full"]
-
-[[example]]
-name = "hello"
-path = "examples/hello.rs"
-required-features = ["full"]
-
-[[example]]
-name = "http_proxy"
-path = "examples/http_proxy.rs"
-required-features = ["full"]
-
-[[example]]
-name = "multi_server"
-path = "examples/multi_server.rs"
-required-features = ["full"]
-
-[[example]]
-name = "params"
-path = "examples/params.rs"
-required-features = ["full"]
-
-[[example]]
-name = "send_file"
-path = "examples/send_file.rs"
-required-features = ["full"]
-
-[[example]]
-name = "service_struct_impl"
-path = "examples/service_struct_impl.rs"
-required-features = ["full"]
-
-[[example]]
-name = "single_threaded"
-path = "examples/single_threaded.rs"
-required-features = ["full"]
-
-[[example]]
-name = "state"
-path = "examples/state.rs"
-required-features = ["full"]
-
-[[example]]
-name = "tower_client"
-path = "examples/tower_client.rs"
-required-features = [
- "full",
- "backports",
+[features]
+__internal_happy_eyeballs_tests = []
+backports = []
+client = []
+default = []
+deprecated = []
+ffi = ["libc"]
+full = [
+ "client",
+ "http1",
+ "http2",
+ "server",
+ "stream",
+ "runtime",
+]
+http1 = []
+http2 = ["h2"]
+nightly = []
+runtime = [
+ "tcp",
+ "tokio/rt",
+ "tokio/time",
+]
+server = []
+stream = []
+tcp = [
+ "socket2",
+ "tokio/net",
+ "tokio/rt",
+ "tokio/time",
]
-[[example]]
-name = "tower_server"
-path = "examples/tower_server.rs"
-required-features = ["full"]
-
-[[example]]
-name = "upgrades"
-path = "examples/upgrades.rs"
-required-features = ["full"]
-
-[[example]]
-name = "web_api"
-path = "examples/web_api.rs"
-required-features = ["full"]
-
-[[test]]
-name = "client"
-path = "tests/client.rs"
-required-features = ["full"]
-
-[[test]]
-name = "integration"
-path = "tests/integration.rs"
-required-features = ["full"]
-
-[[test]]
-name = "server"
-path = "tests/server.rs"
-required-features = ["full"]
-
-[[bench]]
-name = "body"
-path = "benches/body.rs"
-required-features = ["full"]
-
-[[bench]]
-name = "connect"
-path = "benches/connect.rs"
-required-features = ["full"]
-
-[[bench]]
-name = "end_to_end"
-path = "benches/end_to_end.rs"
-required-features = ["full"]
-
-[[bench]]
-name = "pipeline"
-path = "benches/pipeline.rs"
-required-features = ["full"]
-
-[[bench]]
-name = "server"
-path = "benches/server.rs"
-required-features = ["full"]
+[lib]
+name = "hyper"
+path = "src/lib.rs"
[dependencies.bytes]
version = "1"
@@ -197,7 +108,7 @@
default-features = false
[dependencies.h2]
-version = "0.3.17"
+version = "0.3.24"
optional = true
[dependencies.http]
@@ -228,7 +139,7 @@
optional = true
[dependencies.tokio]
-version = "1"
+version = "1.27"
features = ["sync"]
[dependencies.tower-service]
@@ -267,7 +178,7 @@
version = "0.3"
[dev-dependencies.tokio]
-version = "1"
+version = "1.27"
features = [
"fs",
"macros",
@@ -298,37 +209,13 @@
[dev-dependencies.url]
version = "2.2"
-[features]
-__internal_happy_eyeballs_tests = []
-backports = []
-client = []
-default = []
-deprecated = []
-ffi = ["libc"]
-full = [
- "client",
- "http1",
- "http2",
- "server",
- "stream",
- "runtime",
-]
-http1 = []
-http2 = ["h2"]
-nightly = []
-runtime = [
- "tcp",
- "tokio/rt",
- "tokio/time",
-]
-server = []
-stream = []
-tcp = [
- "socket2",
- "tokio/net",
- "tokio/rt",
- "tokio/time",
-]
-
-[target."cfg(any(target_os = \"linux\", target_os = \"macos\"))".dev-dependencies.pnet_datalink]
+[target.'cfg(any(target_os = "linux", target_os = "macos"))'.dev-dependencies.pnet_datalink]
version = "0.27.2"
+
+[profile.bench]
+codegen-units = 1
+incremental = false
+
+[profile.release]
+codegen-units = 1
+incremental = false
diff --git a/crates/hyper/METADATA b/crates/hyper/METADATA
index 8e14012..32ebbf3 100644
--- a/crates/hyper/METADATA
+++ b/crates/hyper/METADATA
@@ -1,17 +1,17 @@
name: "hyper"
description: "A fast and correct HTTP library."
third_party {
- version: "0.14.28"
+ version: "0.14.32"
license_type: NOTICE
last_upgrade_date {
year: 2024
- month: 6
- day: 3
+ month: 12
+ day: 19
}
homepage: "https://crates.io/crates/hyper"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/hyper/hyper-0.14.28.crate"
- version: "0.14.28"
+ value: "https://static.crates.io/crates/hyper/hyper-0.14.32.crate"
+ version: "0.14.32"
}
}
diff --git a/crates/hyper/src/lib.rs b/crates/hyper/src/lib.rs
index e5e4cfc..064a18e 100644
--- a/crates/hyper/src/lib.rs
+++ b/crates/hyper/src/lib.rs
@@ -2,7 +2,8 @@
#![deny(missing_debug_implementations)]
#![cfg_attr(test, deny(rust_2018_idioms))]
#![cfg_attr(all(test, feature = "full"), deny(unreachable_pub))]
-#![cfg_attr(all(test, feature = "full"), deny(warnings))]
+// 0.14.x is not actively developed, new warnings just get in the way.
+//#![cfg_attr(all(test, feature = "full", not(feature = "nightly")), deny(warnings))]
#![cfg_attr(all(test, feature = "nightly"), feature(test))]
#![cfg_attr(docsrs, feature(doc_cfg))]
diff --git a/crates/hyper/src/proto/h1/decode.rs b/crates/hyper/src/proto/h1/decode.rs
index 6752d58..3206863 100644
--- a/crates/hyper/src/proto/h1/decode.rs
+++ b/crates/hyper/src/proto/h1/decode.rs
@@ -431,7 +431,7 @@
rdr: &mut R,
) -> Poll<Result<ChunkedState, io::Error>> {
match byte!(rdr, cx) {
- b'\n' => Poll::Ready(Ok(ChunkedState::Size)),
+ b'\n' => Poll::Ready(Ok(ChunkedState::Start)),
_ => Poll::Ready(Err(io::Error::new(
io::ErrorKind::InvalidInput,
"Invalid chunk body LF",
@@ -667,6 +667,21 @@
}
#[tokio::test]
+ async fn test_read_chunked_with_missing_zero_digit() {
+ // After reading a valid chunk, the ending is missing a zero.
+ let mut mock_buf = &b"1\r\nZ\r\n\r\n\r\n"[..];
+ let mut decoder = Decoder::chunked();
+ let buf = decoder.decode_fut(&mut mock_buf).await.expect("decode");
+ assert_eq!("Z", buf);
+
+ let err = decoder
+ .decode_fut(&mut mock_buf)
+ .await
+ .expect_err("decode 2");
+ assert_eq!(err.kind(), io::ErrorKind::InvalidInput);
+ }
+
+ #[tokio::test]
async fn test_read_chunked_extensions_over_limit() {
// construct a chunked body where each individual chunked extension
// is totally fine, but combined is over the limit.
diff --git a/crates/hyper/src/proto/h1/io.rs b/crates/hyper/src/proto/h1/io.rs
index 02d8a4a..88ce9da 100644
--- a/crates/hyper/src/proto/h1/io.rs
+++ b/crates/hyper/src/proto/h1/io.rs
@@ -40,6 +40,7 @@
pub(crate) struct Buffered<T, B> {
flush_pipeline: bool,
io: T,
+ partial_len: Option<usize>,
read_blocked: bool,
read_buf: BytesMut,
read_buf_strategy: ReadStrategy,
@@ -73,6 +74,7 @@
Buffered {
flush_pipeline: false,
io,
+ partial_len: None,
read_blocked: false,
read_buf: BytesMut::with_capacity(0),
read_buf_strategy: ReadStrategy::default(),
@@ -184,6 +186,7 @@
loop {
match super::role::parse_headers::<S>(
&mut self.read_buf,
+ self.partial_len,
ParseContext {
cached_headers: parse_ctx.cached_headers,
req_method: parse_ctx.req_method,
@@ -220,11 +223,13 @@
.reset(Instant::now() + Duration::from_secs(30 * 24 * 60 * 60));
}
}
+ self.partial_len = None;
return Poll::Ready(Ok(msg));
}
None => {
let max = self.read_buf_strategy.max();
- if self.read_buf.len() >= max {
+ let curr_len = self.read_buf.len();
+ if curr_len >= max {
debug!("max_buf_size ({}) reached, closing", max);
return Poll::Ready(Err(crate::Error::new_too_large()));
}
@@ -242,6 +247,13 @@
}
}
}
+ if curr_len > 0 {
+ trace!("partial headers; {} bytes so far", curr_len);
+ self.partial_len = Some(curr_len);
+ } else {
+ // 1xx gobled some bytes
+ self.partial_len = None;
+ }
}
}
if ready!(self.poll_read_from_io(cx)).map_err(crate::Error::new_io)? == 0 {
diff --git a/crates/hyper/src/proto/h1/role.rs b/crates/hyper/src/proto/h1/role.rs
index 6252207..1c00d74 100644
--- a/crates/hyper/src/proto/h1/role.rs
+++ b/crates/hyper/src/proto/h1/role.rs
@@ -62,22 +62,18 @@
pub(super) fn parse_headers<T>(
bytes: &mut BytesMut,
+ prev_len: Option<usize>,
ctx: ParseContext<'_>,
) -> ParseResult<T::Incoming>
where
T: Http1Transaction,
{
- // If the buffer is empty, don't bother entering the span, it's just noise.
- if bytes.is_empty() {
- return Ok(None);
- }
-
- let span = trace_span!("parse_headers");
- let _s = span.enter();
-
#[cfg(all(feature = "server", feature = "runtime"))]
if !*ctx.h1_header_read_timeout_running {
if let Some(h1_header_read_timeout) = ctx.h1_header_read_timeout {
+ let span = trace_span!("parse_headers");
+ let _s = span.enter();
+
let deadline = Instant::now() + h1_header_read_timeout;
*ctx.h1_header_read_timeout_running = true;
match ctx.h1_header_read_timeout_fut {
@@ -94,9 +90,45 @@
}
}
+ // If the buffer is empty, don't bother entering the span, it's just noise.
+ if bytes.is_empty() {
+ return Ok(None);
+ }
+
+ let span = trace_span!("parse_headers");
+ let _s = span.enter();
+
+ if let Some(prev_len) = prev_len {
+ if !is_complete_fast(bytes, prev_len) {
+ return Ok(None);
+ }
+ }
+
T::parse(bytes, ctx)
}
+/// A fast scan for the end of a message.
+/// Used when there was a partial read, to skip full parsing on a
+/// a slow connection.
+fn is_complete_fast(bytes: &[u8], prev_len: usize) -> bool {
+ let start = if prev_len < 3 { 0 } else { prev_len - 3 };
+ let bytes = &bytes[start..];
+
+ for (i, b) in bytes.iter().copied().enumerate() {
+ if b == b'\r' {
+ if bytes[i + 1..].chunks(3).next() == Some(&b"\n\r\n"[..]) {
+ return true;
+ }
+ } else if b == b'\n' {
+ if bytes.get(i + 1) == Some(&b'\n') {
+ return true;
+ }
+ }
+ }
+
+ false
+}
+
pub(super) fn encode_headers<T>(
enc: Encode<'_, T::Outgoing>,
dst: &mut Vec<u8>,
@@ -2633,6 +2665,28 @@
}
#[test]
+ fn test_is_complete_fast() {
+ let s = b"GET / HTTP/1.1\r\na: b\r\n\r\n";
+ for n in 0..s.len() {
+ assert!(is_complete_fast(s, n), "{:?}; {}", s, n);
+ }
+ let s = b"GET / HTTP/1.1\na: b\n\n";
+ for n in 0..s.len() {
+ assert!(is_complete_fast(s, n));
+ }
+
+ // Not
+ let s = b"GET / HTTP/1.1\r\na: b\r\n\r";
+ for n in 0..s.len() {
+ assert!(!is_complete_fast(s, n));
+ }
+ let s = b"GET / HTTP/1.1\na: b\n";
+ for n in 0..s.len() {
+ assert!(!is_complete_fast(s, n));
+ }
+ }
+
+ #[test]
fn test_write_headers_orig_case_empty_value() {
let mut headers = HeaderMap::new();
let name = http::header::HeaderName::from_static("x-empty");
diff --git a/crates/hyper/src/proto/h2/server.rs b/crates/hyper/src/proto/h2/server.rs
index b4e8d68..b7bff59 100644
--- a/crates/hyper/src/proto/h2/server.rs
+++ b/crates/hyper/src/proto/h2/server.rs
@@ -39,6 +39,7 @@
const DEFAULT_MAX_FRAME_SIZE: u32 = 1024 * 16; // 16kb
const DEFAULT_MAX_SEND_BUF_SIZE: usize = 1024 * 400; // 400kb
const DEFAULT_SETTINGS_MAX_HEADER_LIST_SIZE: u32 = 16 << 20; // 16 MB "sane default" taken from golang http2
+const DEFAULT_MAX_LOCAL_ERROR_RESET_STREAMS: usize = 1024;
#[derive(Clone, Debug)]
pub(crate) struct Config {
@@ -49,6 +50,7 @@
pub(crate) enable_connect_protocol: bool,
pub(crate) max_concurrent_streams: Option<u32>,
pub(crate) max_pending_accept_reset_streams: Option<usize>,
+ pub(crate) max_local_error_reset_streams: Option<usize>,
#[cfg(feature = "runtime")]
pub(crate) keep_alive_interval: Option<Duration>,
#[cfg(feature = "runtime")]
@@ -67,6 +69,7 @@
enable_connect_protocol: false,
max_concurrent_streams: None,
max_pending_accept_reset_streams: None,
+ max_local_error_reset_streams: Some(DEFAULT_MAX_LOCAL_ERROR_RESET_STREAMS),
#[cfg(feature = "runtime")]
keep_alive_interval: None,
#[cfg(feature = "runtime")]
@@ -125,6 +128,7 @@
.initial_connection_window_size(config.initial_conn_window_size)
.max_frame_size(config.max_frame_size)
.max_header_list_size(config.max_header_list_size)
+ .max_local_error_reset_streams(config.max_local_error_reset_streams)
.max_send_buffer_size(config.max_send_buffer_size);
if let Some(max) = config.max_concurrent_streams {
builder.max_concurrent_streams(max);
diff --git a/crates/hyper/src/server/conn.rs b/crates/hyper/src/server/conn.rs
index 8ce4c95..951c9ee 100644
--- a/crates/hyper/src/server/conn.rs
+++ b/crates/hyper/src/server/conn.rs
@@ -414,6 +414,23 @@
self
}
+ /// Configures the maximum number of pending reset streams allowed before a GOAWAY will be sent.
+ ///
+ /// This will default to the default value set by the [`h2` crate](https://crates.io/crates/h2).
+ /// As of v0.3.17, it is 20.
+ ///
+ /// See <https://github.com/hyperium/hyper/issues/2877> for more information.
+ #[cfg(feature = "http2")]
+ #[cfg_attr(docsrs, doc(cfg(feature = "http2")))]
+ pub fn http2_max_local_error_reset_streams(
+ &mut self,
+ max: impl Into<Option<usize>>,
+ ) -> &mut Self {
+ self.h2_builder.max_local_error_reset_streams = max.into();
+
+ self
+ }
+
/// Sets the [`SETTINGS_INITIAL_WINDOW_SIZE`][spec] option for HTTP2
/// stream-level flow control.
///
diff --git a/crates/hyper/src/server/conn/http2.rs b/crates/hyper/src/server/conn/http2.rs
index 4f7df82..4e68545 100644
--- a/crates/hyper/src/server/conn/http2.rs
+++ b/crates/hyper/src/server/conn/http2.rs
@@ -175,6 +175,17 @@
self
}
+ /// Configures the maximum number of pending reset streams allowed before a GOAWAY will be sent.
+ ///
+ /// This will default to the default value set by the [`h2` crate](https://crates.io/crates/h2).
+ /// As of v0.3.17, it is 20.
+ ///
+ /// See <https://github.com/hyperium/hyper/issues/2877> for more information.
+ pub fn max_pending_accept_reset_streams(&mut self, max: impl Into<Option<usize>>) -> &mut Self {
+ self.h2_builder.max_pending_accept_reset_streams = max.into();
+ self
+ }
+
/// Sets an interval for HTTP2 Ping frames should be sent to keep a
/// connection alive.
///
diff --git a/crates/hyper/src/server/server.rs b/crates/hyper/src/server/server.rs
index 6d7d69e..4cccedd 100644
--- a/crates/hyper/src/server/server.rs
+++ b/crates/hyper/src/server/server.rs
@@ -387,6 +387,21 @@
self
}
+ /// Configures the maximum number of local reset streams allowed before a GOAWAY will be sent.
+ ///
+ /// If not set, hyper will use a default, currently of 1024.
+ ///
+ /// If `None` is supplied, hyper will not apply any limit.
+ /// This is not advised, as it can potentially expose servers to DOS vulnerabilities.
+ ///
+ /// See <https://rustsec.org/advisories/RUSTSEC-2024-0003.html> for more information.
+ #[cfg(feature = "http2")]
+ #[cfg_attr(docsrs, doc(cfg(feature = "http2")))]
+ pub fn http2_max_local_error_reset_streams(mut self, max: impl Into<Option<usize>>) -> Self {
+ self.protocol.http2_max_local_error_reset_streams(max);
+ self
+ }
+
/// Sets the [`SETTINGS_INITIAL_WINDOW_SIZE`][spec] option for HTTP2
/// stream-level flow control.
///
diff --git a/crates/itoa/.android-checksum.json b/crates/itoa/.android-checksum.json
index 599a979..05f864f 100644
--- a/crates/itoa/.android-checksum.json
+++ b/crates/itoa/.android-checksum.json
@@ -1 +1 @@
-{"package":null,"files":{"LICENSE-MIT":"38620a3cfaeec97a9197e8c39e436ea7f0bc86699b1f1c35f1aa41785b6d4eac","cargo_embargo.json":"1fff897cc03e804295cd1dae15c1cdc236babd868c7baf71b74bc6233a323c99","LICENSE":"2806ebe733d2e748cfa8df7617c007fd789c530fe02cf22b0e10c79c48a2cca4","patches/std.diff":"97242bd9ec2de4dbb3d2e3e6b7af00a522eefd3b31931d9582bd54beb9856edb","LICENSE-APACHE":"50f827348bfd5def2df4f30cb41264072cf9c180bd9ed698437e8d85b2482754","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","patches/LICENSE.patch":"9b9d1e329f253deb5191cddc3c8a386ae4b243903a9550cc47aee002388bfeb5","src/lib.rs":"c826120e7b0bd88833ba5f239fa419bee40c7a0a808ccbf5c4c48f1c742cde6e",".cargo-checksum.json":"290f95dc4a38529f9ce287dd9ca52eca02d9186d56d5b1890e88ea6aad5b1f68","Android.bp":"5de771498f30d9358a74c4a99009a3f45f8501954ada8f4c257dc4abb40f2afc","tests/test.rs":"07e3868687db53b3c0000c6484a0f00fc7b3be3e8417781a7762a24aeb2c7474","TEST_MAPPING":"cb5c0557fe3cdec0a274b08790008c5256c404826411ab3b7b08301d0b5160f0","benches/bench.rs":"450ba6768f0f10ac5bcee2bf3356a182784000a6bf4e136cdae666f35c0cfef1","METADATA":"3c485f711ec592035b4cf33706167b03b6e86de266e1b8191c677d232f251e19","README.md":"84ae617d8f4059eb010591fec3e0520dec5b1718fff2ef01c7b71903f3091e3c","src/udiv128.rs":"a3bcd0f26bf36de1d2b52afd1a9ef8ee2dd92aa92d7377a532636bd0656352eb","Cargo.toml":"7da84a1e36b6410555a844f77e5b1971bf1a11f6203aac90f9488037e859e161"}}
\ No newline at end of file
+{"package":null,"files":{"LICENSE-MIT":"38620a3cfaeec97a9197e8c39e436ea7f0bc86699b1f1c35f1aa41785b6d4eac","README.md":"84ae617d8f4059eb010591fec3e0520dec5b1718fff2ef01c7b71903f3091e3c","benches/bench.rs":"450ba6768f0f10ac5bcee2bf3356a182784000a6bf4e136cdae666f35c0cfef1","src/udiv128.rs":"a3bcd0f26bf36de1d2b52afd1a9ef8ee2dd92aa92d7377a532636bd0656352eb","Cargo.toml":"971789550467ab2ca36700df3040266c59da45c164b9df6f1f897ff63104f8a7","tests/test.rs":"07e3868687db53b3c0000c6484a0f00fc7b3be3e8417781a7762a24aeb2c7474","TEST_MAPPING":"cb5c0557fe3cdec0a274b08790008c5256c404826411ab3b7b08301d0b5160f0","src/lib.rs":"0747290b083baf87cc592a1627ab39755133646b1198414cbccbb9bf7fab05bf","patches/std.diff":"97242bd9ec2de4dbb3d2e3e6b7af00a522eefd3b31931d9582bd54beb9856edb","METADATA":"f7d6c004c14d94f37eb50d25bb6bb0be09e3e075310efb34a10a37c204c6edda","patches/LICENSE.patch":"9b9d1e329f253deb5191cddc3c8a386ae4b243903a9550cc47aee002388bfeb5","cargo_embargo.json":"1fff897cc03e804295cd1dae15c1cdc236babd868c7baf71b74bc6233a323c99","Android.bp":"e7120667f5b9e33eda87378c68033ccb782438d5159590838559269b48a1d856","LICENSE-APACHE":"50f827348bfd5def2df4f30cb41264072cf9c180bd9ed698437e8d85b2482754",".cargo-checksum.json":"4fdd36764139d5658ac3218d3f6cd1debc0f587b2a65fead314c4e4e7aa2eef2","LICENSE":"2806ebe733d2e748cfa8df7617c007fd789c530fe02cf22b0e10c79c48a2cca4","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a"}}
\ No newline at end of file
diff --git a/crates/itoa/.cargo-checksum.json b/crates/itoa/.cargo-checksum.json
index efd76a8..44b811e 100644
--- a/crates/itoa/.cargo-checksum.json
+++ b/crates/itoa/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"fc26fe5442702edfa4cd1a9b0330aa51043d9f7b6a653decddabdf930543a424","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"48573443063fa4e0786c3b46f42b6efd1f171c6b73408a64afc1b34de89f31fe","benches/bench.rs":"636f3093bd461210ad3063289d455f90669c4a1be3273bcd30898de39f02c641","src/lib.rs":"c4c7f2e0bb9cb5090837629bfa8752e5b6cd537c98947e6ddd9467c81460ea51","src/udiv128.rs":"d28c1872c37ee2185931babcb20a221b8706a5aa8abc4963419763888023ff17","tests/test.rs":"aa1e910573a1d847d39773b4a2e4c597a8d3810070332673df0f6864cab24807"},"package":"b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"}
\ No newline at end of file
+{"files":{"Cargo.toml":"c58e95a74946183c8bf64639dd74d9eaefa6c28a74ea595929a6b9d53e24bc49","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"48573443063fa4e0786c3b46f42b6efd1f171c6b73408a64afc1b34de89f31fe","benches/bench.rs":"636f3093bd461210ad3063289d455f90669c4a1be3273bcd30898de39f02c641","src/lib.rs":"dda57223f32db917f3996d5294acbbdff61e4860fc7d1b284a105c6f77399e28","src/udiv128.rs":"d28c1872c37ee2185931babcb20a221b8706a5aa8abc4963419763888023ff17","tests/test.rs":"aa1e910573a1d847d39773b4a2e4c597a8d3810070332673df0f6864cab24807"},"package":"d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674"}
\ No newline at end of file
diff --git a/crates/itoa/Android.bp b/crates/itoa/Android.bp
index 4bea27b..7096d45 100644
--- a/crates/itoa/Android.bp
+++ b/crates/itoa/Android.bp
@@ -18,7 +18,7 @@
host_supported: true,
crate_name: "test",
cargo_env_compat: true,
- cargo_pkg_version: "1.0.10",
+ cargo_pkg_version: "1.0.14",
crate_root: "tests/test.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -34,7 +34,7 @@
host_supported: true,
crate_name: "itoa",
cargo_env_compat: true,
- cargo_pkg_version: "1.0.10",
+ cargo_pkg_version: "1.0.14",
crate_root: "src/lib.rs",
edition: "2018",
apex_available: [
diff --git a/crates/itoa/Cargo.toml b/crates/itoa/Cargo.toml
index 889aa5d..629e79f 100644
--- a/crates/itoa/Cargo.toml
+++ b/crates/itoa/Cargo.toml
@@ -13,12 +13,18 @@
edition = "2018"
rust-version = "1.36"
name = "itoa"
-version = "1.0.10"
+version = "1.0.14"
authors = ["David Tolnay <[email protected]>"]
+build = false
exclude = [
"performance.png",
"chart/**",
]
+autolib = false
+autobins = false
+autoexamples = false
+autotests = false
+autobenches = false
description = "Fast integer primitive to string conversion"
documentation = "https://docs.rs/itoa"
readme = "README.md"
@@ -36,8 +42,18 @@
targets = ["x86_64-unknown-linux-gnu"]
[lib]
+name = "itoa"
+path = "src/lib.rs"
doc-scrape-examples = false
+[[test]]
+name = "test"
+path = "tests/test.rs"
+
+[[bench]]
+name = "bench"
+path = "benches/bench.rs"
+
[dependencies.no-panic]
version = "0.1"
optional = true
diff --git a/crates/itoa/METADATA b/crates/itoa/METADATA
index 64948af..e414a16 100644
--- a/crates/itoa/METADATA
+++ b/crates/itoa/METADATA
@@ -1,17 +1,17 @@
name: "itoa"
description: "Fast integer primitive to string conversion"
third_party {
- version: "1.0.10"
+ version: "1.0.14"
license_type: NOTICE
last_upgrade_date {
year: 2024
- month: 2
- day: 1
+ month: 12
+ day: 20
}
homepage: "https://crates.io/crates/itoa"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/itoa/itoa-1.0.10.crate"
- version: "1.0.10"
+ value: "https://static.crates.io/crates/itoa/itoa-1.0.14.crate"
+ version: "1.0.14"
}
}
diff --git a/crates/itoa/src/lib.rs b/crates/itoa/src/lib.rs
index 056bf45..aa68332 100644
--- a/crates/itoa/src/lib.rs
+++ b/crates/itoa/src/lib.rs
@@ -30,11 +30,13 @@
//!
//! 
-#![doc(html_root_url = "https://docs.rs/itoa/1.0.10")]
+#![doc(html_root_url = "https://docs.rs/itoa/1.0.14")]
#![no_std]
#![allow(
clippy::cast_lossless,
clippy::cast_possible_truncation,
+ clippy::cast_possible_wrap,
+ clippy::cast_sign_loss,
clippy::expl_impl_clone_on_copy,
clippy::must_use_candidate,
clippy::needless_doctest_main,
@@ -43,7 +45,8 @@
mod udiv128;
-use core::mem::{self, MaybeUninit};
+use core::hint;
+use core::mem::MaybeUninit;
use core::{ptr, slice, str};
#[cfg(feature = "no-panic")]
use no_panic::no_panic;
@@ -63,7 +66,7 @@
/// assert_eq!(printed, "1234");
/// ```
pub struct Buffer {
- bytes: [MaybeUninit<u8>; I128_MAX_LEN],
+ bytes: [MaybeUninit<u8>; i128::MAX_STR_LEN],
}
impl Default for Buffer {
@@ -89,7 +92,7 @@
#[inline]
#[cfg_attr(feature = "no-panic", no_panic)]
pub fn new() -> Buffer {
- let bytes = [MaybeUninit::<u8>::uninit(); I128_MAX_LEN];
+ let bytes = [MaybeUninit::<u8>::uninit(); i128::MAX_STR_LEN];
Buffer { bytes }
}
@@ -97,27 +100,37 @@
/// representation within the buffer.
#[cfg_attr(feature = "no-panic", no_panic)]
pub fn format<I: Integer>(&mut self, i: I) -> &str {
- i.write(unsafe {
- &mut *(&mut self.bytes as *mut [MaybeUninit<u8>; I128_MAX_LEN]
+ let string = i.write(unsafe {
+ &mut *(&mut self.bytes as *mut [MaybeUninit<u8>; i128::MAX_STR_LEN]
as *mut <I as private::Sealed>::Buffer)
- })
+ });
+ if string.len() > I::MAX_STR_LEN {
+ unsafe { hint::unreachable_unchecked() };
+ }
+ string
}
}
/// An integer that can be written into an [`itoa::Buffer`][Buffer].
///
/// This trait is sealed and cannot be implemented for types outside of itoa.
-pub trait Integer: private::Sealed {}
+pub trait Integer: private::Sealed {
+ /// The maximum length of string that formatting an integer of this type can
+ /// produce on the current target platform.
+ const MAX_STR_LEN: usize;
+}
// Seal to prevent downstream implementations of the Integer trait.
mod private {
+ #[doc(hidden)]
pub trait Sealed: Copy {
+ #[doc(hidden)]
type Buffer: 'static;
fn write(self, buf: &mut Self::Buffer) -> &str;
}
}
-const DEC_DIGITS_LUT: &[u8] = b"\
+const DEC_DIGITS_LUT: [u8; 200] = *b"\
0001020304050607080910111213141516171819\
2021222324252627282930313233343536373839\
4041424344454647484950515253545556575859\
@@ -127,8 +140,10 @@
// Adaptation of the original implementation at
// https://github.com/rust-lang/rust/blob/b8214dc6c6fc20d0a660fb5700dca9ebf51ebe89/src/libcore/fmt/num.rs#L188-L266
macro_rules! impl_Integer {
- ($($max_len:expr => $t:ident),* as $conv_fn:ident) => {$(
- impl Integer for $t {}
+ ($t:ty[len = $max_len:expr] as $large_unsigned:ty) => {
+ impl Integer for $t {
+ const MAX_STR_LEN: usize = $max_len;
+ }
impl private::Sealed for $t {
type Buffer = [MaybeUninit<u8>; $max_len];
@@ -139,98 +154,109 @@
fn write(self, buf: &mut [MaybeUninit<u8>; $max_len]) -> &str {
let is_nonnegative = self >= 0;
let mut n = if is_nonnegative {
- self as $conv_fn
+ self as $large_unsigned
} else {
- // convert the negative num to positive by summing 1 to it's 2 complement
- (!(self as $conv_fn)).wrapping_add(1)
+ // Convert negative number to positive by summing 1 to its two's complement.
+ (!(self as $large_unsigned)).wrapping_add(1)
};
- let mut curr = buf.len() as isize;
+ let mut curr = buf.len();
let buf_ptr = buf.as_mut_ptr() as *mut u8;
let lut_ptr = DEC_DIGITS_LUT.as_ptr();
- unsafe {
- // need at least 16 bits for the 4-characters-at-a-time to work.
- if mem::size_of::<$t>() >= 2 {
- // eagerly decode 4 characters at a time
- while n >= 10000 {
- let rem = (n % 10000) as isize;
- n /= 10000;
+ // Render 4 digits at a time.
+ while n >= 10000 {
+ let rem = n % 10000;
+ n /= 10000;
- let d1 = (rem / 100) << 1;
- let d2 = (rem % 100) << 1;
- curr -= 4;
- ptr::copy_nonoverlapping(lut_ptr.offset(d1), buf_ptr.offset(curr), 2);
- ptr::copy_nonoverlapping(lut_ptr.offset(d2), buf_ptr.offset(curr + 2), 2);
- }
- }
-
- // if we reach here numbers are <= 9999, so at most 4 chars long
- let mut n = n as isize; // possibly reduce 64bit math
-
- // decode 2 more chars, if > 2 chars
- if n >= 100 {
- let d1 = (n % 100) << 1;
- n /= 100;
- curr -= 2;
- ptr::copy_nonoverlapping(lut_ptr.offset(d1), buf_ptr.offset(curr), 2);
- }
-
- // decode last 1 or 2 chars
- if n < 10 {
- curr -= 1;
- *buf_ptr.offset(curr) = (n as u8) + b'0';
- } else {
- let d1 = n << 1;
- curr -= 2;
- ptr::copy_nonoverlapping(lut_ptr.offset(d1), buf_ptr.offset(curr), 2);
- }
-
- if !is_nonnegative {
- curr -= 1;
- *buf_ptr.offset(curr) = b'-';
+ let d1 = ((rem / 100) << 1) as usize;
+ let d2 = ((rem % 100) << 1) as usize;
+ curr -= 4;
+ unsafe {
+ ptr::copy_nonoverlapping(lut_ptr.add(d1), buf_ptr.add(curr), 2);
+ ptr::copy_nonoverlapping(lut_ptr.add(d2), buf_ptr.add(curr + 2), 2);
}
}
- let len = buf.len() - curr as usize;
- let bytes = unsafe { slice::from_raw_parts(buf_ptr.offset(curr), len) };
+ // Render 2 more digits, if >2 digits.
+ if n >= 100 {
+ let d1 = ((n % 100) << 1) as usize;
+ n /= 100;
+ curr -= 2;
+ unsafe {
+ ptr::copy_nonoverlapping(lut_ptr.add(d1), buf_ptr.add(curr), 2);
+ }
+ }
+
+ // Render last 1 or 2 digits.
+ if n < 10 {
+ curr -= 1;
+ unsafe {
+ *buf_ptr.add(curr) = (n as u8) + b'0';
+ }
+ } else {
+ let d1 = (n << 1) as usize;
+ curr -= 2;
+ unsafe {
+ ptr::copy_nonoverlapping(lut_ptr.add(d1), buf_ptr.add(curr), 2);
+ }
+ }
+
+ if !is_nonnegative {
+ curr -= 1;
+ unsafe {
+ *buf_ptr.add(curr) = b'-';
+ }
+ }
+
+ let len = buf.len() - curr;
+ let bytes = unsafe { slice::from_raw_parts(buf_ptr.add(curr), len) };
unsafe { str::from_utf8_unchecked(bytes) }
}
}
- )*};
+ };
}
-const I8_MAX_LEN: usize = 4;
-const U8_MAX_LEN: usize = 3;
-const I16_MAX_LEN: usize = 6;
-const U16_MAX_LEN: usize = 5;
-const I32_MAX_LEN: usize = 11;
-const U32_MAX_LEN: usize = 10;
-const I64_MAX_LEN: usize = 20;
-const U64_MAX_LEN: usize = 20;
+impl_Integer!(i8[len = 4] as u32);
+impl_Integer!(u8[len = 3] as u32);
+impl_Integer!(i16[len = 6] as u32);
+impl_Integer!(u16[len = 5] as u32);
+impl_Integer!(i32[len = 11] as u32);
+impl_Integer!(u32[len = 10] as u32);
+impl_Integer!(i64[len = 20] as u64);
+impl_Integer!(u64[len = 20] as u64);
-impl_Integer!(
- I8_MAX_LEN => i8,
- U8_MAX_LEN => u8,
- I16_MAX_LEN => i16,
- U16_MAX_LEN => u16,
- I32_MAX_LEN => i32,
- U32_MAX_LEN => u32
- as u32);
+macro_rules! impl_Integer_size {
+ ($t:ty as $primitive:ident #[cfg(target_pointer_width = $width:literal)]) => {
+ #[cfg(target_pointer_width = $width)]
+ impl Integer for $t {
+ const MAX_STR_LEN: usize = <$primitive as Integer>::MAX_STR_LEN;
+ }
-impl_Integer!(I64_MAX_LEN => i64, U64_MAX_LEN => u64 as u64);
+ #[cfg(target_pointer_width = $width)]
+ impl private::Sealed for $t {
+ type Buffer = <$primitive as private::Sealed>::Buffer;
-#[cfg(target_pointer_width = "16")]
-impl_Integer!(I16_MAX_LEN => isize, U16_MAX_LEN => usize as u16);
+ #[inline]
+ #[cfg_attr(feature = "no-panic", no_panic)]
+ fn write(self, buf: &mut Self::Buffer) -> &str {
+ (self as $primitive).write(buf)
+ }
+ }
+ };
+}
-#[cfg(target_pointer_width = "32")]
-impl_Integer!(I32_MAX_LEN => isize, U32_MAX_LEN => usize as u32);
-
-#[cfg(target_pointer_width = "64")]
-impl_Integer!(I64_MAX_LEN => isize, U64_MAX_LEN => usize as u64);
+impl_Integer_size!(isize as i16 #[cfg(target_pointer_width = "16")]);
+impl_Integer_size!(usize as u16 #[cfg(target_pointer_width = "16")]);
+impl_Integer_size!(isize as i32 #[cfg(target_pointer_width = "32")]);
+impl_Integer_size!(usize as u32 #[cfg(target_pointer_width = "32")]);
+impl_Integer_size!(isize as i64 #[cfg(target_pointer_width = "64")]);
+impl_Integer_size!(usize as u64 #[cfg(target_pointer_width = "64")]);
macro_rules! impl_Integer128 {
- ($($max_len:expr => $t:ident),*) => {$(
- impl Integer for $t {}
+ ($t:ty[len = $max_len:expr]) => {
+ impl Integer for $t {
+ const MAX_STR_LEN: usize = $max_len;
+ }
impl private::Sealed for $t {
type Buffer = [MaybeUninit<u8>; $max_len];
@@ -243,57 +269,66 @@
let n = if is_nonnegative {
self as u128
} else {
- // convert the negative num to positive by summing 1 to it's 2 complement
+ // Convert negative number to positive by summing 1 to its two's complement.
(!(self as u128)).wrapping_add(1)
};
- let mut curr = buf.len() as isize;
+ let mut curr = buf.len();
let buf_ptr = buf.as_mut_ptr() as *mut u8;
- unsafe {
- // Divide by 10^19 which is the highest power less than 2^64.
+ // Divide by 10^19 which is the highest power less than 2^64.
+ let (n, rem) = udiv128::udivmod_1e19(n);
+ let buf1 = unsafe {
+ buf_ptr.add(curr - u64::MAX_STR_LEN) as *mut [MaybeUninit<u8>; u64::MAX_STR_LEN]
+ };
+ curr -= rem.write(unsafe { &mut *buf1 }).len();
+
+ if n != 0 {
+ // Memset the base10 leading zeros of rem.
+ let target = buf.len() - 19;
+ unsafe {
+ ptr::write_bytes(buf_ptr.add(target), b'0', curr - target);
+ }
+ curr = target;
+
+ // Divide by 10^19 again.
let (n, rem) = udiv128::udivmod_1e19(n);
- let buf1 = buf_ptr.offset(curr - U64_MAX_LEN as isize) as *mut [MaybeUninit<u8>; U64_MAX_LEN];
- curr -= rem.write(&mut *buf1).len() as isize;
+ let buf2 = unsafe {
+ buf_ptr.add(curr - u64::MAX_STR_LEN)
+ as *mut [MaybeUninit<u8>; u64::MAX_STR_LEN]
+ };
+ curr -= rem.write(unsafe { &mut *buf2 }).len();
if n != 0 {
- // Memset the base10 leading zeros of rem.
- let target = buf.len() as isize - 19;
- ptr::write_bytes(buf_ptr.offset(target), b'0', (curr - target) as usize);
+ // Memset the leading zeros.
+ let target = buf.len() - 38;
+ unsafe {
+ ptr::write_bytes(buf_ptr.add(target), b'0', curr - target);
+ }
curr = target;
- // Divide by 10^19 again.
- let (n, rem) = udiv128::udivmod_1e19(n);
- let buf2 = buf_ptr.offset(curr - U64_MAX_LEN as isize) as *mut [MaybeUninit<u8>; U64_MAX_LEN];
- curr -= rem.write(&mut *buf2).len() as isize;
-
- if n != 0 {
- // Memset the leading zeros.
- let target = buf.len() as isize - 38;
- ptr::write_bytes(buf_ptr.offset(target), b'0', (curr - target) as usize);
- curr = target;
-
- // There is at most one digit left
- // because u128::max / 10^19 / 10^19 is 3.
- curr -= 1;
- *buf_ptr.offset(curr) = (n as u8) + b'0';
+ // There is at most one digit left
+ // because u128::MAX / 10^19 / 10^19 is 3.
+ curr -= 1;
+ unsafe {
+ *buf_ptr.add(curr) = (n as u8) + b'0';
}
}
-
- if !is_nonnegative {
- curr -= 1;
- *buf_ptr.offset(curr) = b'-';
- }
-
- let len = buf.len() - curr as usize;
- let bytes = slice::from_raw_parts(buf_ptr.offset(curr), len);
- str::from_utf8_unchecked(bytes)
}
+
+ if !is_nonnegative {
+ curr -= 1;
+ unsafe {
+ *buf_ptr.add(curr) = b'-';
+ }
+ }
+
+ let len = buf.len() - curr;
+ let bytes = unsafe { slice::from_raw_parts(buf_ptr.add(curr), len) };
+ unsafe { str::from_utf8_unchecked(bytes) }
}
}
- )*};
+ };
}
-const U128_MAX_LEN: usize = 39;
-const I128_MAX_LEN: usize = 40;
-
-impl_Integer128!(I128_MAX_LEN => i128, U128_MAX_LEN => u128);
+impl_Integer128!(i128[len = 40]);
+impl_Integer128!(u128[len = 39]);
diff --git a/crates/prettyplease/.android-checksum.json b/crates/prettyplease/.android-checksum.json
new file mode 100644
index 0000000..a587550
--- /dev/null
+++ b/crates/prettyplease/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"examples/input.rs":"c54e04743b9eb5665e7a2c0ea6cdd7d3a31fecec1258086b9268b8edf63c9bf7","METADATA":"ab3385c35023c2dee8d11dd63dd9a20099b563c2b891c541f33ffd17fb298444","src/path.rs":"c2c9a6f5fe868446427bb76ee17bbe14e6fb1fcd0d3d325fd3115f4057586638","src/ty.rs":"526800996453fd7068fc8f3e7e22a873f20bbcd89cd29f63e0cd32692b7559c1","LICENSE-APACHE":"50f827348bfd5def2df4f30cb41264072cf9c180bd9ed698437e8d85b2482754","src/item.rs":"c8f065dba1547b57c369e5b11956420d9e0979a6d5536225b370901a8160b7cc",".cargo-checksum.json":"7ae9e7a781bba8e321bc4192826c5653545bb4b05a74de388147bcbde6e2163c","examples/output.rustc.rs":"fe3e54f99bba0ad1aebace5e6a06cdf79548dac62524210064f1654a72968f96","src/lib.rs":"bcce5af8455aa032e41a165cbe064b719b9289af13627057c89a6526066fd1cf","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","LICENSE-MIT":"38620a3cfaeec97a9197e8c39e436ea7f0bc86699b1f1c35f1aa41785b6d4eac","src/attr.rs":"fecce86077baf55f95f0c595579fb5ab1001aa27235a8ad48eaafe1a2aefd8a5","Cargo.toml":"6f04fc844b204a1332d7af8c9fe5c82dae95bfa01698382a272a609933f468bc","cargo_embargo.json":"0a3aea02264006cd539344c6021258d9fc7c2f88bbe7510b351f5e3485244e08","build.rs":"53df216257bb8fbdc2212e23f60cf6261007366a73e9dc390dde3dcbde3d6251","src/ring.rs":"d2f765e033eea3aad1b8fd4351e8a3d32ff0c79be13a0104683d5fd38d0e131b","src/generics.rs":"73491a105c69318d01a6d090778d57102937f89fd9cd4cb8f2857c12a79e8dd5","src/mac.rs":"3df8a64cdb74ad433afe6a99f4d305bafbed0e7b2773f60fd7afaba91890a208","examples/output.prettyplease.rs":"11211b3ec0b461c64494cec9f240eac5c60084d55a2f9048d41dcca66ebb6f02","src/lifetime.rs":"b2f01d35e9faddd4a042dec30bb0f1668683ef11a9477e660e9eb4d480a08d61","src/expr.rs":"ef67c23508873d9f33004fcb6b63d2163d8a0873a118d98576fea193dc6a5e05","src/algorithm.rs":"0631caf6ac9fb58caf49dd2a321a096b21e6b7b4ee3b1e148a4b0e6529d59220","src/stmt.rs":"bce93e2b3af162871814b77ef1c350a4d0f71e423f74d1e5e93276dc39f1e23d","Android.bp":"af0d7dff9013da50fad4d4ae2a6a72b3edcf9e1fb1e642ca3d25f7f27413e2cf","src/token.rs":"881884adcb68dcd01f6d66459c7f49df2f6f8019f0718d0a146d9c23ea375af5","src/file.rs":"359101ac28e7e39a275b9837053e6841765a48d022ea1482d8ef80e34d860d44","README.md":"6cd24eece6714dc53f7f9f979abdc9cae292e172340688029b4a6ef5ae91ae24","LICENSE":"50f827348bfd5def2df4f30cb41264072cf9c180bd9ed698437e8d85b2482754","tests/test.rs":"42b5f9d824aff128e6caf5df9602fe36b279b32d5debcaecf68969fbff09af4f","src/convenience.rs":"faae49b9678e3fa882f287594cac24d2544308dbd21a5762b396a174ceb975cd","src/iter.rs":"63d7cf3313d8ed3fa1637c5c01d80ab48b8a742538b71fd792604246822d4d9d","examples/output.rustfmt.rs":"f5bcc4d1f873d76ce87834f9fa0d2e5c46042a6f0a2258b22ea4855a85e8b018","src/data.rs":"dcb2d7eaa744b5d9190fc90d7cca25d64bff38dc57f746581d6097b79ca67d03","src/pat.rs":"d3ff013f425aa46d26d8c1c075c4bdd9e924f198125d5793d409941c31bf1ae9","src/lit.rs":"39cd69038e2143b16dad6007033015ef4c8e116b4af78e12937e916aa92b8376"}}
\ No newline at end of file
diff --git a/crates/prettyplease/.cargo-checksum.json b/crates/prettyplease/.cargo-checksum.json
index cef4988..434d068 100644
--- a/crates/prettyplease/.cargo-checksum.json
+++ b/crates/prettyplease/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"6db1cca4fbfeefb2fcbac8874c25981ddc265bcccfe698fb27984508f368c858","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"dde54d4d5c759fbaea82b4039ab9cea7ee91918431dae011ffe01472e2e9eb44","build.rs":"fdf8aa9b5441b298c72ae23645e227adc52ac69d2decc1bda04e1a91f70ff87d","examples/input.rs":"53350088f12a346a99034af41ef432dedcc9e5d581c5592d9aae3807c42656c1","examples/output.prettyplease.rs":"fa63c118daadb64c456ec5b8d5e46e5d7fabbbeb6a6e61a08eabc23360a18fbd","examples/output.rustc.rs":"0c66f8929fa40a2822d4ea1aec3d8b83db598aba043b17f3c1a6133f0d657135","examples/output.rustfmt.rs":"914a9aea1c51e097bfd80c9af4011811e6126c9df5fb0eac3d40b1203fba7c58","src/algorithm.rs":"7a4a7b62f5300aabf7fcff3cd8c8aaa3ae1e3d1dc717eea1e4797988ce0e18c7","src/attr.rs":"54e829ae468f22c8e2853d669515575f1444bfee026cfd9b19538f77caf10ab7","src/convenience.rs":"dd392b009b691d3587c7d8e3caeaacf450303c4223792b5f89c336358e371c39","src/data.rs":"9db6623d3ccc79b541a28bdc88875ad0036576689e085007eb362819f8e9a2d3","src/expr.rs":"fd39086a275071f50cb4b519a6b5413a27863dc2a142888e9a1acc1c841b1a1a","src/file.rs":"5689efa3c5959a6a0d8cfc2c13bf8a37ab0669e2b81dbded3f3c28884a88fca0","src/generics.rs":"60df8d54fe81279bcdf790e027eb5e6f80798ffd0873fa0f5bdff921582df397","src/item.rs":"711f2c9a00e9577c058d38cf3e521390f77cb7d0a36955353a4fac2b64af2a4b","src/iter.rs":"38b2cd3b38719c6024fb6b3aa739f6f8736c83193fd21e2365d4f6c27bc41666","src/lib.rs":"09d5eb7ba944ab09e9094fbe9ce1f1a9b9942b8098fa6b84a20f3d079921b6f4","src/lifetime.rs":"6d420430168185b2da3409bc38a45f63cced9443915f04e6aec71367fc070dcf","src/lit.rs":"6aabc9c84f8914064536f7ed89547485c08f042f3f386e88fb1c8f82ec69d8e7","src/mac.rs":"62911747c308187afc750b4bd4f8bd24ee825081043d78da68a001ea55ab5853","src/pat.rs":"d130b141a3fd8098913cb179efe6600a5f010a2719447ecb3d4fb29e9b546220","src/path.rs":"b9c78a53c433678140b5a0e4044872989f25db2fe4fd44123e2500efbde671eb","src/ring.rs":"e23d133209b977e457b07b0cd93b3711d01f4172d7cfa4cf6a7247637390e606","src/stmt.rs":"c9328d8e5111087ed0f8226b9765ddc636e17cb9e4f86301794bb9d3a27cb39a","src/token.rs":"c288b1d81f2a35673d4ca1dd10d3386670b067460121df3038303e1ed73b41a7","src/ty.rs":"b5fa5f318c5e4593ed3eed4707e63dceaa62eea4ecdfba0f59bd946917ca3dbd","tests/test.rs":"04994ad0a37c43457390f11ade6ab74fc26c5e879b0a374f0b64acb530a0a496"},"package":"8d3928fb5db768cb86f891ff014f0144589297e3c6a1aba6ed7cecfdace270c7"}
\ No newline at end of file
+{"files":{"Cargo.toml":"0e165ac6d5ca01781b9c1586f976e6abeedaa534f1ba0dc0adf607f9b30795e0","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"a7e6d152cdc6ea603077e50b8d55af374d9d21fd9f62d08a008588b17d785e6e","build.rs":"79a5b2d260aa97aeac7105fbfa00774982f825cd708c100ea96d01c39974bb88","examples/input.rs":"53350088f12a346a99034af41ef432dedcc9e5d581c5592d9aae3807c42656c1","examples/output.prettyplease.rs":"fa63c118daadb64c456ec5b8d5e46e5d7fabbbeb6a6e61a08eabc23360a18fbd","examples/output.rustc.rs":"0c66f8929fa40a2822d4ea1aec3d8b83db598aba043b17f3c1a6133f0d657135","examples/output.rustfmt.rs":"914a9aea1c51e097bfd80c9af4011811e6126c9df5fb0eac3d40b1203fba7c58","src/algorithm.rs":"7a4a7b62f5300aabf7fcff3cd8c8aaa3ae1e3d1dc717eea1e4797988ce0e18c7","src/attr.rs":"54e829ae468f22c8e2853d669515575f1444bfee026cfd9b19538f77caf10ab7","src/convenience.rs":"dd392b009b691d3587c7d8e3caeaacf450303c4223792b5f89c336358e371c39","src/data.rs":"9db6623d3ccc79b541a28bdc88875ad0036576689e085007eb362819f8e9a2d3","src/expr.rs":"45a30de0afdf8e0564c221ebcb4cf11e2d8948b5b85cc99d5d55d1293e65dea9","src/file.rs":"5689efa3c5959a6a0d8cfc2c13bf8a37ab0669e2b81dbded3f3c28884a88fca0","src/generics.rs":"14a01f0602c005939f0324ef5e6b6624f477a531552bc764447e08875fb2ebbb","src/item.rs":"6793b19d8be3dd7cb75a984370a771d0592b9c4548d294cf246424947a3c8535","src/iter.rs":"38b2cd3b38719c6024fb6b3aa739f6f8736c83193fd21e2365d4f6c27bc41666","src/lib.rs":"a6c8e3e455f6b2f5b0800213464076f8ac49fc64aeddd77f3e4f0f9dbf554b18","src/lifetime.rs":"6d420430168185b2da3409bc38a45f63cced9443915f04e6aec71367fc070dcf","src/lit.rs":"9ea6d25533e64df4ff01c084fa1c31ddf64fb3b159409eec7d80dbf281e5171e","src/mac.rs":"62911747c308187afc750b4bd4f8bd24ee825081043d78da68a001ea55ab5853","src/pat.rs":"d130b141a3fd8098913cb179efe6600a5f010a2719447ecb3d4fb29e9b546220","src/path.rs":"4d3f7caa0bfe821bdb9ad00ee1d7d61101aef8a5cbea35d565b6da6217feefca","src/ring.rs":"e23d133209b977e457b07b0cd93b3711d01f4172d7cfa4cf6a7247637390e606","src/stmt.rs":"763f617a5535f8e61593b0cb1c6c9f5caef032085671dbce509b691d94d39835","src/token.rs":"c288b1d81f2a35673d4ca1dd10d3386670b067460121df3038303e1ed73b41a7","src/ty.rs":"b5fa5f318c5e4593ed3eed4707e63dceaa62eea4ecdfba0f59bd946917ca3dbd","tests/test.rs":"04994ad0a37c43457390f11ade6ab74fc26c5e879b0a374f0b64acb530a0a496"},"package":"64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033"}
\ No newline at end of file
diff --git a/crates/prettyplease/Android.bp b/crates/prettyplease/Android.bp
index eea80de..8e5fd1a 100644
--- a/crates/prettyplease/Android.bp
+++ b/crates/prettyplease/Android.bp
@@ -18,7 +18,7 @@
host_cross_supported: false,
crate_name: "prettyplease",
cargo_env_compat: true,
- cargo_pkg_version: "0.2.17",
+ cargo_pkg_version: "0.2.25",
crate_root: "src/lib.rs",
edition: "2021",
rustlibs: [
diff --git a/crates/prettyplease/Cargo.toml b/crates/prettyplease/Cargo.toml
index 5d74042..b39c5e3 100644
--- a/crates/prettyplease/Cargo.toml
+++ b/crates/prettyplease/Cargo.toml
@@ -11,13 +11,18 @@
[package]
edition = "2021"
-rust-version = "1.56"
+rust-version = "1.61"
name = "prettyplease"
-version = "0.2.17"
+version = "0.2.25"
authors = ["David Tolnay <[email protected]>"]
+build = "build.rs"
links = "prettyplease02"
exclude = ["cargo-expand"]
+autolib = false
+autobins = false
autoexamples = false
+autotests = false
+autobenches = false
description = "A minimal `syn` syntax tree pretty-printer"
documentation = "https://docs.rs/prettyplease"
readme = "README.md"
@@ -34,14 +39,20 @@
features = ["verbatim"]
[lib]
+name = "prettyplease"
+path = "src/lib.rs"
doc-scrape-examples = false
+[[test]]
+name = "test"
+path = "tests/test.rs"
+
[dependencies.proc-macro2]
-version = "1.0.74"
+version = "1.0.80"
default-features = false
[dependencies.syn]
-version = "2.0.46"
+version = "2.0.81"
features = ["full"]
default-features = false
@@ -49,7 +60,7 @@
version = "2"
[dev-dependencies.proc-macro2]
-version = "1.0.74"
+version = "1.0.80"
default-features = false
[dev-dependencies.quote]
@@ -57,7 +68,7 @@
default-features = false
[dev-dependencies.syn]
-version = "2.0.46"
+version = "2.0.81"
features = ["parsing"]
default-features = false
diff --git a/crates/prettyplease/METADATA b/crates/prettyplease/METADATA
index 2477bc8..13f0ff2 100644
--- a/crates/prettyplease/METADATA
+++ b/crates/prettyplease/METADATA
@@ -1,17 +1,17 @@
name: "prettyplease"
description: "A minimal `syn` syntax tree pretty-printer"
third_party {
- version: "0.2.17"
+ version: "0.2.25"
license_type: NOTICE
last_upgrade_date {
year: 2024
- month: 10
- day: 24
+ month: 12
+ day: 20
}
homepage: "https://crates.io/crates/prettyplease"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/prettyplease/prettyplease-0.2.17.crate"
- version: "0.2.17"
+ value: "https://static.crates.io/crates/prettyplease/prettyplease-0.2.25.crate"
+ version: "0.2.25"
}
}
diff --git a/crates/prettyplease/README.md b/crates/prettyplease/README.md
index bd0439b..4584c48 100644
--- a/crates/prettyplease/README.md
+++ b/crates/prettyplease/README.md
@@ -261,8 +261,8 @@
The reason is that in the paper, the complete non-whitespace contents are
assumed to be independent of linebreak decisions, with Scan and Print being only
in control of the whitespace (spaces and line breaks). In Rust as idiomatically
-formattted by rustfmt, that is not the case. Trailing commas are one example;
-the punctuation is only known *after* the broken vs non-broken status of the
+formatted by rustfmt, that is not the case. Trailing commas are one example; the
+punctuation is only known *after* the broken vs non-broken status of the
surrounding group is known:
```rust
diff --git a/crates/prettyplease/build.rs b/crates/prettyplease/build.rs
index 0d798ed..4fc36f7 100644
--- a/crates/prettyplease/build.rs
+++ b/crates/prettyplease/build.rs
@@ -1,5 +1,21 @@
+use std::env;
+use std::ffi::OsString;
+use std::process;
+
fn main() {
println!("cargo:rerun-if-changed=build.rs");
- println!(concat!("cargo:VERSION=", env!("CARGO_PKG_VERSION")));
+ println!("cargo:rustc-check-cfg=cfg(exhaustive)");
+ println!("cargo:rustc-check-cfg=cfg(prettyplease_debug)");
+ println!("cargo:rustc-check-cfg=cfg(prettyplease_debug_indent)");
+
+ let pkg_version = cargo_env_var("CARGO_PKG_VERSION");
+ println!("cargo:VERSION={}", pkg_version.to_str().unwrap());
+}
+
+fn cargo_env_var(key: &str) -> OsString {
+ env::var_os(key).unwrap_or_else(|| {
+ eprintln!("Environment variable ${key} is not set during execution of build script");
+ process::exit(1);
+ })
}
diff --git a/crates/prettyplease/src/expr.rs b/crates/prettyplease/src/expr.rs
index d3fb6d7..52c9e5a 100644
--- a/crates/prettyplease/src/expr.rs
+++ b/crates/prettyplease/src/expr.rs
@@ -10,10 +10,10 @@
token, Arm, Attribute, BinOp, Block, Expr, ExprArray, ExprAssign, ExprAsync, ExprAwait,
ExprBinary, ExprBlock, ExprBreak, ExprCall, ExprCast, ExprClosure, ExprConst, ExprContinue,
ExprField, ExprForLoop, ExprGroup, ExprIf, ExprIndex, ExprInfer, ExprLet, ExprLit, ExprLoop,
- ExprMacro, ExprMatch, ExprMethodCall, ExprParen, ExprPath, ExprRange, ExprReference,
- ExprRepeat, ExprReturn, ExprStruct, ExprTry, ExprTryBlock, ExprTuple, ExprUnary, ExprUnsafe,
- ExprWhile, ExprYield, FieldValue, Index, Label, Member, RangeLimits, ReturnType, Stmt, Token,
- UnOp,
+ ExprMacro, ExprMatch, ExprMethodCall, ExprParen, ExprPath, ExprRange, ExprRawAddr,
+ ExprReference, ExprRepeat, ExprReturn, ExprStruct, ExprTry, ExprTryBlock, ExprTuple, ExprUnary,
+ ExprUnsafe, ExprWhile, ExprYield, FieldValue, Index, Label, Member, PointerMutability,
+ RangeLimits, ReturnType, Stmt, Token, UnOp,
};
impl Printer {
@@ -48,6 +48,7 @@
Expr::Paren(expr) => self.expr_paren(expr),
Expr::Path(expr) => self.expr_path(expr),
Expr::Range(expr) => self.expr_range(expr),
+ Expr::RawAddr(expr) => self.expr_raw_addr(expr),
Expr::Reference(expr) => self.expr_reference(expr),
Expr::Repeat(expr) => self.expr_repeat(expr),
Expr::Return(expr) => self.expr_return(expr),
@@ -131,6 +132,7 @@
self.ibox(0);
self.expr(&expr.left);
self.word(" = ");
+ self.neverbreak();
self.expr(&expr.right);
self.end();
}
@@ -563,6 +565,14 @@
}
}
+ fn expr_raw_addr(&mut self, expr: &ExprRawAddr) {
+ self.outer_attrs(&expr.attrs);
+ self.word("&raw ");
+ self.pointer_mutability(&expr.mutability);
+ self.nbsp();
+ self.expr(&expr.expr);
+ }
+
fn expr_reference(&mut self, expr: &ExprReference) {
self.outer_attrs(&expr.attrs);
self.word("&");
@@ -680,8 +690,13 @@
enum ExprVerbatim {
Empty,
Ellipsis,
+ Become(Become),
Builtin(Builtin),
- RawReference(RawReference),
+ }
+
+ struct Become {
+ attrs: Vec<Attribute>,
+ tail_call: Expr,
}
struct Builtin {
@@ -690,12 +705,6 @@
args: TokenStream,
}
- struct RawReference {
- attrs: Vec<Attribute>,
- mutable: bool,
- expr: Expr,
- }
-
mod kw {
syn::custom_keyword!(builtin);
syn::custom_keyword!(raw);
@@ -708,6 +717,11 @@
let lookahead = ahead.lookahead1();
if input.is_empty() {
Ok(ExprVerbatim::Empty)
+ } else if lookahead.peek(Token![become]) {
+ input.advance_to(&ahead);
+ input.parse::<Token![become]>()?;
+ let tail_call: Expr = input.parse()?;
+ Ok(ExprVerbatim::Become(Become { attrs, tail_call }))
} else if lookahead.peek(kw::builtin) {
input.advance_to(&ahead);
input.parse::<kw::builtin>()?;
@@ -717,20 +731,6 @@
parenthesized!(args in input);
let args: TokenStream = args.parse()?;
Ok(ExprVerbatim::Builtin(Builtin { attrs, name, args }))
- } else if lookahead.peek(Token![&]) {
- input.advance_to(&ahead);
- input.parse::<Token![&]>()?;
- input.parse::<kw::raw>()?;
- let mutable = input.parse::<Option<Token![mut]>>()?.is_some();
- if !mutable {
- input.parse::<Token![const]>()?;
- }
- let expr: Expr = input.parse()?;
- Ok(ExprVerbatim::RawReference(RawReference {
- attrs,
- mutable,
- expr,
- }))
} else if lookahead.peek(Token![...]) {
input.parse::<Token![...]>()?;
Ok(ExprVerbatim::Ellipsis)
@@ -750,6 +750,12 @@
ExprVerbatim::Ellipsis => {
self.word("...");
}
+ ExprVerbatim::Become(expr) => {
+ self.outer_attrs(&expr.attrs);
+ self.word("become");
+ self.nbsp();
+ self.expr(&expr.tail_call);
+ }
ExprVerbatim::Builtin(expr) => {
self.outer_attrs(&expr.attrs);
self.word("builtin # ");
@@ -767,12 +773,6 @@
}
self.word(")");
}
- ExprVerbatim::RawReference(expr) => {
- self.outer_attrs(&expr.attrs);
- self.word("&raw ");
- self.word(if expr.mutable { "mut " } else { "const " });
- self.expr(&expr.expr);
- }
}
}
@@ -995,6 +995,13 @@
);
}
+ fn pointer_mutability(&mut self, mutability: &PointerMutability) {
+ match mutability {
+ PointerMutability::Const(_) => self.word("const"),
+ PointerMutability::Mut(_) => self.word("mut"),
+ }
+ }
+
fn zerobreak_unless_short_ident(&mut self, beginning_of_line: bool, expr: &Expr) {
if beginning_of_line && is_short_ident(expr) {
return;
@@ -1037,6 +1044,7 @@
| Expr::Paren(_)
| Expr::Path(_)
| Expr::Range(_)
+ | Expr::RawAddr(_)
| Expr::Reference(_)
| Expr::Repeat(_)
| Expr::Return(_)
@@ -1072,6 +1080,7 @@
| Expr::Group(ExprGroup { expr: e, .. })
| Expr::Index(ExprIndex { expr: e, .. })
| Expr::MethodCall(ExprMethodCall { receiver: e, .. })
+ | Expr::RawAddr(ExprRawAddr { expr: e, .. })
| Expr::Reference(ExprReference { expr: e, .. })
| Expr::Unary(ExprUnary { expr: e, .. }) => {
// &X { y: 1 }, X { y: 1 }.y
@@ -1154,6 +1163,7 @@
| Expr::Let(ExprLet { expr: e, .. })
| Expr::Paren(ExprParen { expr: e, .. })
| Expr::Range(ExprRange { end: Some(e), .. })
+ | Expr::RawAddr(ExprRawAddr { expr: e, .. })
| Expr::Reference(ExprReference { expr: e, .. })
| Expr::Return(ExprReturn { expr: Some(e), .. })
| Expr::Try(ExprTry { expr: e, .. })
@@ -1211,6 +1221,7 @@
| Expr::Paren(_)
| Expr::Path(_)
| Expr::Range(_)
+ | Expr::RawAddr(_)
| Expr::Reference(_)
| Expr::Repeat(_)
| Expr::Return(_)
@@ -1248,6 +1259,7 @@
| Expr::Match(_)
| Expr::Paren(_)
| Expr::Path(_)
+ | Expr::RawAddr(_)
| Expr::Reference(_)
| Expr::Repeat(_)
| Expr::Return(_)
diff --git a/crates/prettyplease/src/generics.rs b/crates/prettyplease/src/generics.rs
index 3c641fc..6145345 100644
--- a/crates/prettyplease/src/generics.rs
+++ b/crates/prettyplease/src/generics.rs
@@ -5,9 +5,9 @@
use proc_macro2::TokenStream;
use std::ptr;
use syn::{
- BoundLifetimes, ConstParam, GenericParam, Generics, LifetimeParam, PredicateLifetime,
- PredicateType, TraitBound, TraitBoundModifier, TypeParam, TypeParamBound, WhereClause,
- WherePredicate,
+ BoundLifetimes, CapturedParam, ConstParam, GenericParam, Generics, LifetimeParam,
+ PreciseCapture, PredicateLifetime, PredicateType, TraitBound, TraitBoundModifier, TypeParam,
+ TypeParamBound, WhereClause, WherePredicate,
};
impl Printer {
@@ -109,6 +109,9 @@
self.trait_bound(trait_bound, tilde_const);
}
TypeParamBound::Lifetime(lifetime) => self.lifetime(lifetime),
+ TypeParamBound::PreciseCapture(precise_capture) => {
+ self.precise_capture(precise_capture);
+ }
TypeParamBound::Verbatim(bound) => self.type_param_bound_verbatim(bound),
_ => unimplemented!("unknown TypeParamBound"),
}
@@ -334,4 +337,24 @@
}
self.end();
}
+
+ fn precise_capture(&mut self, precise_capture: &PreciseCapture) {
+ self.word("use<");
+ for capture in precise_capture.params.iter().delimited() {
+ self.captured_param(&capture);
+ if !capture.is_last {
+ self.word(", ");
+ }
+ }
+ self.word(">");
+ }
+
+ fn captured_param(&mut self, capture: &CapturedParam) {
+ match capture {
+ #![cfg_attr(all(test, exhaustive), deny(non_exhaustive_omitted_patterns))]
+ CapturedParam::Lifetime(lifetime) => self.lifetime(lifetime),
+ CapturedParam::Ident(ident) => self.ident(ident),
+ _ => unimplemented!("unknown CapturedParam"),
+ }
+ }
}
diff --git a/crates/prettyplease/src/item.rs b/crates/prettyplease/src/item.rs
index 6383111..8254429 100644
--- a/crates/prettyplease/src/item.rs
+++ b/crates/prettyplease/src/item.rs
@@ -91,7 +91,11 @@
self.outer_attrs(&item.attrs);
self.cbox(INDENT);
self.visibility(&item.vis);
- self.signature(&item.sig);
+ self.signature(
+ &item.sig,
+ #[cfg(feature = "verbatim")]
+ &verbatim::Safety::Disallowed,
+ );
self.where_clause_for_body(&item.sig.generics.where_clause);
self.word("{");
self.hardbreak_if_nonempty();
@@ -794,7 +798,11 @@
self.outer_attrs(&foreign_item.attrs);
self.cbox(INDENT);
self.visibility(&foreign_item.vis);
- self.signature(&foreign_item.sig);
+ self.signature(
+ &foreign_item.sig,
+ #[cfg(feature = "verbatim")]
+ &verbatim::Safety::Disallowed,
+ );
self.where_clause_semi(&foreign_item.sig.generics.where_clause);
self.end();
self.hardbreak();
@@ -844,8 +852,10 @@
#[cfg(feature = "verbatim")]
fn foreign_item_verbatim(&mut self, tokens: &TokenStream) {
use syn::parse::{Parse, ParseStream, Result};
- use syn::{Attribute, Token, Visibility};
- use verbatim::{FlexibleItemFn, FlexibleItemStatic, FlexibleItemType, WhereClauseLocation};
+ use syn::{Abi, Attribute, Token, Visibility};
+ use verbatim::{
+ kw, FlexibleItemFn, FlexibleItemStatic, FlexibleItemType, WhereClauseLocation,
+ };
enum ForeignItemVerbatim {
Empty,
@@ -855,6 +865,16 @@
TypeFlexible(FlexibleItemType),
}
+ fn peek_signature(input: ParseStream) -> bool {
+ let fork = input.fork();
+ fork.parse::<Option<Token![const]>>().is_ok()
+ && fork.parse::<Option<Token![async]>>().is_ok()
+ && ((fork.peek(kw::safe) && fork.parse::<kw::safe>().is_ok())
+ || fork.parse::<Option<Token![unsafe]>>().is_ok())
+ && fork.parse::<Option<Abi>>().is_ok()
+ && fork.peek(Token![fn])
+ }
+
impl Parse for ForeignItemVerbatim {
fn parse(input: ParseStream) -> Result<Self> {
if input.is_empty() {
@@ -869,15 +889,13 @@
let defaultness = false;
let lookahead = input.lookahead1();
- if lookahead.peek(Token![const])
- || lookahead.peek(Token![async])
- || lookahead.peek(Token![unsafe])
- || lookahead.peek(Token![extern])
- || lookahead.peek(Token![fn])
- {
+ if lookahead.peek(Token![fn]) || peek_signature(input) {
let flexible_item = FlexibleItemFn::parse(attrs, vis, defaultness, input)?;
Ok(ForeignItemVerbatim::FnFlexible(flexible_item))
- } else if lookahead.peek(Token![static]) {
+ } else if lookahead.peek(Token![static])
+ || ((input.peek(Token![unsafe]) || input.peek(kw::safe))
+ && input.peek2(Token![static]))
+ {
let flexible_item = FlexibleItemStatic::parse(attrs, vis, input)?;
Ok(ForeignItemVerbatim::StaticFlexible(flexible_item))
} else if lookahead.peek(Token![type]) {
@@ -953,7 +971,11 @@
fn trait_item_fn(&mut self, trait_item: &TraitItemFn) {
self.outer_attrs(&trait_item.attrs);
self.cbox(INDENT);
- self.signature(&trait_item.sig);
+ self.signature(
+ &trait_item.sig,
+ #[cfg(feature = "verbatim")]
+ &verbatim::Safety::Disallowed,
+ );
if let Some(block) = &trait_item.default {
self.where_clause_for_body(&trait_item.sig.generics.where_clause);
self.word("{");
@@ -1149,7 +1171,11 @@
if impl_item.defaultness.is_some() {
self.word("default ");
}
- self.signature(&impl_item.sig);
+ self.signature(
+ &impl_item.sig,
+ #[cfg(feature = "verbatim")]
+ &verbatim::Safety::Disallowed,
+ );
self.where_clause_for_body(&impl_item.sig.generics.where_clause);
self.word("{");
self.hardbreak_if_nonempty();
@@ -1277,15 +1303,32 @@
}
}
- fn signature(&mut self, signature: &Signature) {
+ fn signature(
+ &mut self,
+ signature: &Signature,
+ #[cfg(feature = "verbatim")] safety: &verbatim::Safety,
+ ) {
if signature.constness.is_some() {
self.word("const ");
}
if signature.asyncness.is_some() {
self.word("async ");
}
- if signature.unsafety.is_some() {
- self.word("unsafe ");
+ #[cfg(feature = "verbatim")]
+ {
+ if let verbatim::Safety::Disallowed = safety {
+ if signature.unsafety.is_some() {
+ self.word("unsafe ");
+ }
+ } else {
+ self.safety(safety);
+ }
+ }
+ #[cfg(not(feature = "verbatim"))]
+ {
+ if signature.unsafety.is_some() {
+ self.word("unsafe ");
+ }
}
if let Some(abi) = &signature.abi {
self.abi(abi);
@@ -1381,12 +1424,16 @@
use crate::iter::IterDelimited;
use crate::INDENT;
use syn::ext::IdentExt;
- use syn::parse::{ParseStream, Result};
+ use syn::parse::{Parse, ParseStream, Result};
use syn::{
braced, token, Attribute, Block, Expr, Generics, Ident, Signature, StaticMutability, Stmt,
Token, Type, TypeParamBound, Visibility, WhereClause,
};
+ pub mod kw {
+ syn::custom_keyword!(safe);
+ }
+
pub struct FlexibleItemConst {
pub attrs: Vec<Attribute>,
pub vis: Visibility,
@@ -1401,6 +1448,7 @@
pub attrs: Vec<Attribute>,
pub vis: Visibility,
pub defaultness: bool,
+ pub safety: Safety,
pub sig: Signature,
pub body: Option<Vec<Stmt>>,
}
@@ -1408,6 +1456,7 @@
pub struct FlexibleItemStatic {
pub attrs: Vec<Attribute>,
pub vis: Visibility,
+ pub safety: Safety,
pub mutability: StaticMutability,
pub ident: Ident,
pub ty: Option<Type>,
@@ -1425,6 +1474,13 @@
pub where_clause_after_eq: Option<WhereClause>,
}
+ pub enum Safety {
+ Unsafe,
+ Safe,
+ Default,
+ Disallowed,
+ }
+
pub enum WhereClauseLocation {
// type Ty<T> where T: 'static = T;
BeforeEq,
@@ -1474,7 +1530,16 @@
defaultness: bool,
input: ParseStream,
) -> Result<Self> {
- let sig: Signature = input.parse()?;
+ let constness: Option<Token![const]> = input.parse()?;
+ let asyncness: Option<Token![async]> = input.parse()?;
+ let safety: Safety = input.parse()?;
+
+ let lookahead = input.lookahead1();
+ let sig: Signature = if lookahead.peek(Token![extern]) || lookahead.peek(Token![fn]) {
+ input.parse()?
+ } else {
+ return Err(lookahead.error());
+ };
let lookahead = input.lookahead1();
let body = if lookahead.peek(Token![;]) {
@@ -1493,7 +1558,13 @@
attrs,
vis,
defaultness,
- sig,
+ safety,
+ sig: Signature {
+ constness,
+ asyncness,
+ unsafety: None,
+ ..sig
+ },
body,
})
}
@@ -1501,6 +1572,7 @@
impl FlexibleItemStatic {
pub fn parse(attrs: Vec<Attribute>, vis: Visibility, input: ParseStream) -> Result<Self> {
+ let safety: Safety = input.parse()?;
input.parse::<Token![static]>()?;
let mutability: StaticMutability = input.parse()?;
let ident = input.parse()?;
@@ -1530,6 +1602,7 @@
Ok(FlexibleItemStatic {
attrs,
vis,
+ safety,
mutability,
ident,
ty,
@@ -1601,6 +1674,20 @@
}
}
+ impl Parse for Safety {
+ fn parse(input: ParseStream) -> Result<Self> {
+ if input.peek(Token![unsafe]) {
+ input.parse::<Token![unsafe]>()?;
+ Ok(Safety::Unsafe)
+ } else if input.peek(kw::safe) {
+ input.parse::<kw::safe>()?;
+ Ok(Safety::Safe)
+ } else {
+ Ok(Safety::Default)
+ }
+ }
+ }
+
impl Printer {
pub fn flexible_item_const(&mut self, item: &FlexibleItemConst) {
self.outer_attrs(&item.attrs);
@@ -1635,7 +1722,7 @@
if item.defaultness {
self.word("default ");
}
- self.signature(&item.sig);
+ self.signature(&item.sig, &item.safety);
if let Some(body) = &item.body {
self.where_clause_for_body(&item.sig.generics.where_clause);
self.word("{");
@@ -1658,6 +1745,7 @@
self.outer_attrs(&item.attrs);
self.cbox(0);
self.visibility(&item.vis);
+ self.safety(&item.safety);
self.word("static ");
self.static_mutability(&item.mutability);
self.ident(&item.ident);
@@ -1708,5 +1796,14 @@
self.end();
self.hardbreak();
}
+
+ pub fn safety(&mut self, safety: &Safety) {
+ match safety {
+ Safety::Unsafe => self.word("unsafe "),
+ Safety::Safe => self.word("safe "),
+ Safety::Default => {}
+ Safety::Disallowed => unreachable!(),
+ }
+ }
}
}
diff --git a/crates/prettyplease/src/lib.rs b/crates/prettyplease/src/lib.rs
index 84d8e24..b970d8f 100644
--- a/crates/prettyplease/src/lib.rs
+++ b/crates/prettyplease/src/lib.rs
@@ -276,7 +276,7 @@
//! style. The reason is that in the paper, the complete non-whitespace contents
//! are assumed to be independent of linebreak decisions, with Scan and Print
//! being only in control of the whitespace (spaces and line breaks). In Rust as
-//! idiomatically formattted by rustfmt, that is not the case. Trailing commas
+//! idiomatically formatted by rustfmt, that is not the case. Trailing commas
//! are one example; the punctuation is only known *after* the broken vs
//! non-broken status of the surrounding group is known:
//!
@@ -320,7 +320,7 @@
//! these situations with conditional punctuation tokens whose selection can be
//! deferred and populated after it's known that the group is or is not broken.
-#![doc(html_root_url = "https://docs.rs/prettyplease/0.2.17")]
+#![doc(html_root_url = "https://docs.rs/prettyplease/0.2.25")]
#![allow(
clippy::cast_possible_wrap,
clippy::cast_sign_loss,
@@ -334,6 +334,7 @@
clippy::module_name_repetitions,
clippy::must_use_candidate,
clippy::needless_pass_by_value,
+ clippy::ref_option,
clippy::similar_names,
clippy::too_many_lines,
clippy::unused_self,
diff --git a/crates/prettyplease/src/lit.rs b/crates/prettyplease/src/lit.rs
index 3e6c145..10a86e4 100644
--- a/crates/prettyplease/src/lit.rs
+++ b/crates/prettyplease/src/lit.rs
@@ -1,6 +1,6 @@
use crate::algorithm::Printer;
use proc_macro2::Literal;
-use syn::{Lit, LitBool, LitByte, LitByteStr, LitChar, LitFloat, LitInt, LitStr};
+use syn::{Lit, LitBool, LitByte, LitByteStr, LitCStr, LitChar, LitFloat, LitInt, LitStr};
impl Printer {
pub fn lit(&mut self, lit: &Lit) {
@@ -8,6 +8,7 @@
#![cfg_attr(all(test, exhaustive), deny(non_exhaustive_omitted_patterns))]
Lit::Str(lit) => self.lit_str(lit),
Lit::ByteStr(lit) => self.lit_byte_str(lit),
+ Lit::CStr(lit) => self.lit_c_str(lit),
Lit::Byte(lit) => self.lit_byte(lit),
Lit::Char(lit) => self.lit_char(lit),
Lit::Int(lit) => self.lit_int(lit),
@@ -26,6 +27,10 @@
self.word(lit.token().to_string());
}
+ fn lit_c_str(&mut self, lit: &LitCStr) {
+ self.word(lit.token().to_string());
+ }
+
fn lit_byte(&mut self, lit: &LitByte) {
self.word(lit.token().to_string());
}
diff --git a/crates/prettyplease/src/path.rs b/crates/prettyplease/src/path.rs
index abe5d48..2ae94b3 100644
--- a/crates/prettyplease/src/path.rs
+++ b/crates/prettyplease/src/path.rs
@@ -172,12 +172,11 @@
}
pub fn qpath(&mut self, qself: &Option<QSelf>, path: &Path, kind: PathKind) {
- let qself = match qself {
- Some(qself) => qself,
- None => {
- self.path(path, kind);
- return;
- }
+ let qself = if let Some(qself) = qself {
+ qself
+ } else {
+ self.path(path, kind);
+ return;
};
assert!(qself.position < path.segments.len());
diff --git a/crates/prettyplease/src/stmt.rs b/crates/prettyplease/src/stmt.rs
index 110ab58..2b97da6 100644
--- a/crates/prettyplease/src/stmt.rs
+++ b/crates/prettyplease/src/stmt.rs
@@ -145,6 +145,7 @@
| Expr::Paren(_)
| Expr::Path(_)
| Expr::Range(_)
+ | Expr::RawAddr(_)
| Expr::Reference(_)
| Expr::Repeat(_)
| Expr::Struct(_)
@@ -203,6 +204,7 @@
| Expr::Paren(_)
| Expr::Path(_)
| Expr::Range(_)
+ | Expr::RawAddr(_)
| Expr::Reference(_)
| Expr::Repeat(_)
| Expr::Return(_)
diff --git a/crates/rayon/.android-checksum.json b/crates/rayon/.android-checksum.json
new file mode 100644
index 0000000..2fbe497
--- /dev/null
+++ b/crates/rayon/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"src/par_either.rs":"2f7b33ece394847e840854e614a6f732359d87fda6f7b9df13d39ed6084fdb7e","src/collections/linked_list.rs":"bd1e44d8d14a8410e4f9f2ac9b0fe2de60ee09433a8edb03c3860a43c99be9e2","LICENSE-APACHE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","src/range.rs":"c7bc2679c1d62674c8b0c62a91e5c9e89d01c46badc46c849d8c3ad9a43f28ae","src/slice/quicksort.rs":"8c5e8973604c67d0d49fc6998ec801415f513fef2355c13f8b16ab1f77af81df","src/split_producer.rs":"613a5507814983484420fc7a2bc1afa807a8af33543c19221ece128f6317d45a","src/iter/while_some.rs":"f947e488111e1c5780618eca6f12988dd6d720a0c26ebb96ba4a93a5a9b69af7","FAQ.md":"30ba5774520b7f153c6175f364da94ec7923b224fd62c3da29a7555de2a4c0bc","src/iter/walk_tree.rs":"bf5df026d64ccd440d350490c7e609572d7269897516c7574f5df1b75bf0cd63","src/iter/from_par_iter.rs":"4ccf6ee08c4eac63cb45c7d130eaf13baea82d97a501fa4cd0fb4a64b574c106","src/iter/take.rs":"ebc5c8517701d258b7fc016f2fd3ef20745f4f7f4ff4e3e76c34c34df960507f","Cargo.toml":"083fb090d9f0df12b72ee35125bfd21d028a679d3449a98c598707e183776c99","src/slice/mod.rs":"75efa595e6a3a42e291458343b9a1bb41ec8a3bce0db3a80b3553b8ba9ab2c60","src/collections/mod.rs":"ace8501823bf8ffae39cbb1eb63effd58cb4dba6b8e184afcb33a9b7b91108a0","src/iter/chain.rs":"bee429ef595d578c1d28bf5e2cec374d7ee7627d45c63f058e974e6776052e98","tests/sort-panic-safe.rs":"81026c82e9bc58638b38b05d294cb1ed723f221210b1ecab6f440a1c89f4ab37","src/iter/find_first_last/test.rs":"4d7e4050762b9f693288d7b1a0dbe7a5366768f67c3354cc0a51e764d582fe5e","TEST_MAPPING":"e458a5dbc17af3f85b874533972b22391a7a66fc5abac59c3eafe2d643b112a5","src/iter/fold_chunks.rs":"d83fab6308002fa0bf8b43a50d2f5c7552fa33f4145f945b9494d3d1f84b3197","src/iter/reduce.rs":"d1041401b83f95fdf4d3690bcb4d5fa7ebfdc1cfdaafa1913e4c5f2fc906c806","src/iter/test.rs":"3b36fb08512cc609eece5e569b7e366c8012be83ee16c7bfcd57a8482dddc41d","src/iter/update.rs":"f5b12c5341425b73462462bbd207e3ba4456dadefc1d61e97d3df3ac97bc946f","src/compile_fail/rc_par_iter.rs":"053c187cb7ef09d24005d004c251ac660ec6f4975b2126840f0b6b2ddcfd56d0","tests/drain_vec.rs":"f895075b252c7a30796a7778673c1af8d9bbbb114ea067194de6d25159350e13","src/iter/find_first_last/mod.rs":"b9c46e1a1d95328fde01ad1c60ec25bb19c06e88341b027d03fcf5b6e51152b1","README.md":"2491cf2a5de314fd7de283cc8e91857851ead49930af3af8320a9caa54325e28","LICENSE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","src/iter/skip_any.rs":"fb77380bdbaecd4925dc74e5b21153fc96c2cceac181dcb52b22f5e541083093","src/iter/enumerate.rs":"66734a3536383d918e4a7ac2b4a0f472fa291b6e3f93f9cb9c4bf156e96e8baa","src/iter/panic_fuse.rs":"1439b5d7e2800a3dd1bc755fc9968720a188e3be55628c818aa1c91c6ef60390","src/slice/rchunks.rs":"27aad48e862e92aa73ff63b40c0e893dbab73a4c98b4fb2dbde731d8354258f5","src/range_inclusive.rs":"91098fc212a98d30e38258a0f1a1d51ee8614585f2d7633a607d1d6a959de341","src/iter/take_any_while.rs":"5119ee7a7af1469778fe65c5661ddea8897b84723ebbabbaa0a336fd20726151","src/iter/noop.rs":"14519f326abbd7ae57425d4ab6157d54f4037c473f14d2f71ce3d751667afc4e","src/iter/cloned.rs":"b10d6b8c7c96aa6a22603a76f573902a451d3a56a44fcb057998603ec450e586","src/iter/try_reduce.rs":"de0516a3d83928cf11739532014f5ea2b5e7118239619e46c45894670f6e8445","src/result.rs":"2d59f2ae9ef9f0d6281c084d7ad368a7585be9af700fbf3b23ba085a6289f0ae","src/iter/filter_map.rs":"7bd1da465ec1f6bb9585b8e4ef9ef7cf0313f9511953b126450614226cc21d59","src/iter/extend.rs":"9276f84dcb084eee52212f0fee34cb502aa16c2c62cbbf97d1dd7e903ba065ce","src/slice/mergesort.rs":"8bc32ea95ba0fe576e632df98bb7c01ca1624bb99ca65a985f5c7290a2296e05","src/compile_fail/cannot_collect_filtermap_data.rs":"526672586bf3430d564408dcae7dc04cf1469c605ea78f2b504d4afe81749f74","src/collections/btree_set.rs":"e7147d8e690d64db014d1456dd70065293e9e202ef450fc529554b2cca02ce80","src/iter/map_with.rs":"9447648d59463cbdc6fc41bdd30b96dd6a0795aef752d163ea752456866d4a8b","src/private.rs":"8e352a194a56c98b48121a7b41bff4318b94e546739ee5192c0494aef761bd5a","tests/issue671-unzip.rs":"dd77a3961e80e351148c950472dafbc7dcb9a7babd6655fd668111554fd4d149","src/iter/flatten.rs":"e24c6b5e3012199957eaff583d321764821bcd036bb00eeefbd96be36c03434f","src/iter/unzip.rs":"2ec06a488b10d5c44f5d5419c0a40138450a40ddcb64565683c5b1b5a88bd863","src/option.rs":"9da38060e08d737e972ff0215818ed519441d3fcf48a97b32bddc10762abc738","src/iter/collect/test.rs":"38b806818e75fd58b2f2e9005282ef29effe46f726df64c7d5d49e6d67092eb4","src/collections/btree_map.rs":"d72349006de7e6ca5e77bde669b8f0af9f100556727e8f8c8a20f1c255dd1431","cargo_embargo.json":"aa45a963da01d3f018be316cd5b7646a5b413ce2611c5218f2914d2e8a9efd0e","tests/intersperse.rs":"00941115a4c86b15fd214484a371f921f957ad69971abd3d24d6cdd5e84eb62d","tests/cross-pool.rs":"a8c26a72dcd038cf34bbf3f9bfb6af3cc7d8e6c716ebefa77386c4bff4f8ad75","src/compile_fail/mod.rs":"7767194604d756f50a1e2704259ed555a113890c0599b66789f381d7ac6de245","src/compile_fail/no_send_par_iter.rs":"0b645dce06a905e06e7b73c71fd439f741e779a28e9abe5680528e108e064a49","src/iter/copied.rs":"e2d213709845dd701b934c16e791c55faf1c5d527ee8703f46ec08f0c144594b","src/compile_fail/cell_par_iter.rs":"b2d34601566dac16b7388f62026b9e4193c6c8ee9953df08621251e9c88833d3","tests/iter_panic.rs":"587578f3a5d5778ecc83dcecf6cf2eb5e74cafe36d585d181ccf69283a7a0ce8","LICENSE-MIT":"de7c8744ea78e2d84533278ddb0dc48f3063a10db72ad403d5eb571721e06908","src/string.rs":"a71d8ece94cfe4b2338671e5af4ec6e675c805321b02742276e0a814c62aa2c2","src/compile_fail/cannot_zip_filtered_data.rs":"a928d960a2a02644390303cc20ce06f20c266e8acdadba69df9b7036ab93823c","src/iter/collect/consumer.rs":"84e956c2d02deb986c36281bb9079e92a24142501bcaea74d20ed1b20d684263","src/iter/fold.rs":"a13c0884ed33a4b233066bfc5f0780985d13587e16edf2723014a4384e953521","tests/producer_split_at.rs":"8a83839eae2e2327e27a307d04da8c807a211f3ddb55f25fa35f52af49288673","src/slice/chunks.rs":"bb36b21e828cb25532ac49309c910dbff2a25f1ad37c8febd58430acadd733a6","src/iter/step_by.rs":"9a469abaec48544b317c8f126e8b97b2d033677549e425ca76074dfb71a4f778","src/collections/vec_deque.rs":"9f03b9807949aa33e0d6fec7b75692ae201b9a46a332b386f16b3bedc0946bde","tests/chars.rs":"710a0f90e28cec22084159b6c32fe693fe3c5e91790a9f0b243933f1547458ac","src/iter/interleave_shortest.rs":"e0664f1feb01ec61a68f8d953ef9288a6f6f482dcf49b97f441c6454e343f258","src/iter/skip.rs":"c8680db5de286fb3b11f448efda02fc5187f4e7f8e22adf885b6829bab3653f0","src/iter/flat_map.rs":"8de818980487af44e09baf0dc6dc611fbb2c56ba4c40792026ee1411f5732b06","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","tests/debug.rs":"7c91d4e0b850bbda5197252d04cf7a3fc260e009feb90cd5ac4771cfe659fe47","src/iter/try_reduce_with.rs":"e67a8b5c68ae7b179cede2ba0e0ec80db8512d5df1cfa091a3201dc7c3dc6206","src/collections/hash_set.rs":"645c561661790f516c83c9a6df51688128a9496e7d1d3327e1a9bc3b6575c1ab","METADATA":"55f199cbad42bff7fc907ba1d6b83606b998ec8df845054186a2f0b801b30f04","src/iter/len.rs":"72d806017afb9f813a38c2b7a2a6f07f11f78cb076fc3c97bfe647df7cce2e1a","src/iter/flat_map_iter.rs":"db2f32f4d18f7de669c287eeb0452f21923422fa7db0499f39e9f6c1fd84e6c3","src/iter/map.rs":"ff79598068b760e6d360aac5351b63cf4adeabecee7b99f03867c8f5367a446a","src/lib.rs":"c247b3e04318d097c208d737156c2459f396e7dcc870c505cb400fb17ba6e71e","src/iter/par_bridge.rs":"e6252135c6a527e48890d6c75a651da1b57db79972d19cb65ee15a8518a5063a","tests/named-threads.rs":"447a9597db409b37eb9449df000d1c85413cdd15ff035de45b143fb0f565fd38",".cargo-checksum.json":"6e03944a71d7773528386e32a2bcc1c3686a5481b31934ec0c45f9f77efd07cb","src/iter/interleave.rs":"e7b8c699ecaa5d87e6b735bf087c872bc12c716c96ffd634636fb0c28926d937","src/slice/chunk_by.rs":"898ff6e447139794eeeab1437be02351a73598f268560b8ab4528c9a21d95554","src/iter/zip.rs":"fcf547d068f7fa7aca4c8e05bb1c858cec89e78bf960ca982e046e247b2d3f0a","src/iter/intersperse.rs":"824d92114fd293403c36a33b8fd4ccd8f3f23d09e4648249046e092e8c34907a","src/collections/binary_heap.rs":"4b2d60380393b448c8a3ffd48aad88c527c3ca33b1a21bee64254c6006122e3b","src/iter/plumbing/mod.rs":"b9a69c9a5a3d7a3a6609ec20135260353652d5358d5f4ad206c547f5f8c46d90","src/iter/sum.rs":"fa8a05f0abc49c17e80035b8731fef3d3e4a4c267e69fec3e79d8589bc16b3d6","src/iter/for_each.rs":"da271856276f1174e9c0e90e8b858c2cea087373d72d15d78c87fec6b34b3d23","tests/str.rs":"0af127552d8733d8f7b20ac4b1e2536d11b4a6aebdd142130c1b60f52a70f601","src/iter/chunks.rs":"6320b85478206ce102875c6dced3ca0fc1d5ae485e65671db7577cd88fbd9354","src/prelude.rs":"1c88b395a4291cb1be5b0a8ec6918efe5b100fa19b8fa016a9550aa9e25b877a","Android.bp":"5ed073dacdd6daf981fa42184b3560bf20dd73caa6ef9c8f02f0f222f1a72f6c","src/delegate.rs":"e9c424d00792915eebab0f7bc6acac96b13dc1e385c657c4f3c5988ea03040c9","src/iter/find.rs":"7a2e8575133cddce4639e09f8e89e10be08f726cfaaf442c3b7d28cd760cb6e1","tests/collect.rs":"b06775ddeedcbee7dd1990e103b859a604e94c780d1135e5bf0c81f7c770a795","src/iter/mod.rs":"cded4b8bc8472a5c1f34b95282a5e4ebfdd692628c781ee92a355f2e73780cc4","src/iter/filter.rs":"2b4d92ec31b60c80a97feb593df54a1cd17cea18ee6f6c38bd216b30eaeb4ebc","src/compile_fail/must_use.rs":"41923aa1796397798813ec3d10b42e70443b5d95255aa096d22498897022aea6","src/iter/blocks.rs":"991ef448571360472725e07c64f788f8d6f692e8df397ad576e686ee370fbd1e","src/iter/multizip.rs":"ba839a9445c450c520162ea05f3ab5ef24b10721ef7acfa29d6d1264c9953916","RELEASES.md":"afea883b2bda400d07ca2f1125176aa8f81777420ac9d1e73caca691e1621f0e","src/slice/test.rs":"e85222988f6626dcf734b6c10021e58f4e9a7e0187b4aea6a37971f1796393a7","src/collections/hash_map.rs":"a9860256902962687a7d4927413113aeec9b8189962dc23f4a305baa15d7429f","src/iter/collect/mod.rs":"c17f8573309db4e01373d81b1c5e6b48d97629d98c9aac239b8ec8a305fc67fd","src/iter/take_any.rs":"616d788ede7ca6dd5febda171325f7a8dbcfe02a4a4f936de27479a827c024f4","src/array.rs":"ab25f505bc89da075eb19dde0c3b6572718769f519eca6de15836d8c24cf1099","src/str.rs":"ab1382c5e004b6b9a6f2ce902adcdc05f3e21b5169f8ffb1210b5d8182abb81d","src/iter/repeat.rs":"652ee7cd70ed60b16f4ed5d55c85611a9bee8f7d984c941ea0f9730ac3ac47e7","src/iter/positions.rs":"424b979c8c483c996a9f6e8103952f34679070f610e00f74f19f8b76ccc3da24","src/math.rs":"c5d64634d0f17c9e12958a72863baf3c014faa0f419333e060829b06d470a525","src/iter/skip_any_while.rs":"4c9b301c8308ad26c863763f471256139bef029225ce3298399da59e9264bd88","src/iter/fold_chunks_with.rs":"1a3b8ea7c6ce009064a9b28f254430c8608a7d420d8e587ae45bddd85571253d","src/iter/empty.rs":"b26da6460d553338e55c7a7ddf56f725b442744d985fe2b8cf7df903c019b64f","src/iter/plumbing/README.md":"57040f7a5e20e160be1d810cb9a330f9fe3f8491a353dbfd59c5047206fce8ba","src/iter/try_fold.rs":"33bc6f79ed2c330c7f6a6fe6b394d4ef72cca5cb7588be1657e59227dd700360","src/iter/inspect.rs":"05d95af90f7cf163a6104a6c70d8a3e34acb9fa030e2dc8c19a645c328f212c8","src/vec.rs":"c9a37f97de3a30e92d35431d85562089323a157df968830dcfe513a0222a55d4","src/iter/flatten_iter.rs":"7f9f3a6367cbbc76a4b417c829644c0c55b0af480a67a35c476d3527ea1e635a","src/iter/zip_eq.rs":"9ed4304a57fc259994f92ccba43fe7c60988c5ab80fb2b609282c8f245b06555","src/iter/once.rs":"a111703d5654602e6b4d695c8ad90e0c4e13378323987ca5350ad160d18b6c15","tests/clones.rs":"582cbda5e5c0300b8feecebb2b8ebd26cf68e77dba51ac70c8f655631f00e628","src/iter/splitter.rs":"a57becafe1e1b6870b4314f5288a21ea813e8e1bea00e3060d57b6f8b59168cf","tests/par_bridge_recursion.rs":"ff6b80d07049e4293151011c8efcadb375648b89476d5f4f147cb73dfed2b5a4","tests/octillion.rs":"19d19f12222de0b1de4714731dd869181e9699b6dfb396c3167caa1c7f5c27f0","src/iter/product.rs":"df88c3f67c706712f25fd090c29d2bdae10ee9ddaac3cfe41757463a4192211d","tests/issue671.rs":"3ef77b2d21860708078bdd5d7b795d3840566adf5e342d77e9956bec7c44d640","src/iter/rev.rs":"30b292dec6ecdcbefab82bc5d8ca3861f85a6288ea5201701c51d7fe559b02a1"}}
\ No newline at end of file
diff --git a/crates/rayon/.cargo-checksum.json b/crates/rayon/.cargo-checksum.json
index a6a3bf3..da027cf 100644
--- a/crates/rayon/.cargo-checksum.json
+++ b/crates/rayon/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"eeb8b2cf6665ad35f658a5788c9bd37f4886a01ad947ad665cce8199f0958781","FAQ.md":"e963b051f6295a2944ff5abec368c7da914b913e21049978c2ef0017294abf8f","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"0621878e61f0d0fda054bcbe02df75192c28bde1ecc8289cbd86aeba2dd72720","README.md":"d5a3ae90475558e39eb06be743ab77ebeb063a45e092df1bea9fcd9d0a66ba90","RELEASES.md":"105ce10e535624114a8fdd57654d4a8d19460546560a3705eb32768de5cb9c07","src/array.rs":"0e1524d222baa8b64f67689b0dea3115f3befb8cc3b5aee9ace169c57b2d29d2","src/collections/binary_heap.rs":"58e2590ff52fa2cfe7b5797fdc37902d0c111cca844aac21a4024add2f28a8db","src/collections/btree_map.rs":"d3094ed5c54620f81a86133f52e74164bae9f0137745eb66e6d31db2e942bcab","src/collections/btree_set.rs":"7de12e388d36cb2f8672bc3b68aed5b44d047c9f5fe262a7260584634299480f","src/collections/hash_map.rs":"cdaf1aa3bedf9bde591fcb323d64bee9366feb35fee6886bedb5fec8d0018564","src/collections/hash_set.rs":"685690108fc20eca2cf346e74e48d6c751f5ceb6028996366d49f1f1ad6051e0","src/collections/linked_list.rs":"bef7f32da49b55db76cfefa0afa4789a6979e08a69427e49bab2874967163fef","src/collections/mod.rs":"3978222720a2df20be7fd0856d8515b6f9fa40f6556662bd3c0726b1392970ca","src/collections/vec_deque.rs":"d14aa4edc858cd3469fff3597fc35ab83c27f3bdf66ede06d1dd25021f383109","src/compile_fail/cannot_collect_filtermap_data.rs":"f76e6727ae8bd0dc8fff5f4a79df3fc598daf5d7371bdf8b2e730fba4ba82719","src/compile_fail/cannot_zip_filtered_data.rs":"3588fcf72e804ea867ea525b6dfa7a3d45fe14e28088e849fa9ddb029acc8a7a","src/compile_fail/cell_par_iter.rs":"ebf8804993c103f9d8228aba0bb2a5f0aadb957de9f1eb59cf546dbace285201","src/compile_fail/mod.rs":"2c346e4b52941fe0ac2667eeb753c0c21a1f998a544bb9d9167f200caba0a7bb","src/compile_fail/must_use.rs":"42ae57ed7cb909fad8d079ce6e3742a92ca7f72a9cc209b149d1d88df568d757","src/compile_fail/no_send_par_iter.rs":"b241446439c659f35060df12ba91590ea4267f373ddc688e4ffc203321db24b3","src/compile_fail/rc_par_iter.rs":"938776b08612e35c85b99962024d54af5a8c87d45a050a76375d16ef6fe4299f","src/delegate.rs":"aad2a11998240fb7dd96bd054b588cac469df3b716b8dffb05239102b6507d05","src/iter/chain.rs":"f82a25577ca36bac93b5a13e75dcd70e8cee381b9baa5993dd645f0714fb9eb6","src/iter/chunks.rs":"9b901441bd8684782d4e50bf24c261bdf3392f576e7ab25b2b83be2fc9361545","src/iter/cloned.rs":"35e1c864f99f7bc93c258c4976d15ccfc1d04df969dc878fd03d35f6799377f7","src/iter/collect/consumer.rs":"5f9728fdf2db728a3ea37849c2fc43c417b221e580860be4dfc6cab526e57f8e","src/iter/collect/mod.rs":"ede28d59713c3291709a842cd54b17760008f6854a3982404eca973bdc3d2f23","src/iter/collect/test.rs":"9afcf4c6cf6bbfe22aed42e5bb5a0dcbd4d7c9b060d80d3b01fad665b46e4952","src/iter/copied.rs":"1a3457f3b0fb020593049b8b1f1be2f7a6684c2fcc66c02c911cb14e0a1943d7","src/iter/empty.rs":"3cb2d05721aab1a4d9e9c5813473e1646116c1ea570e26d9ac81e083688a0b7d","src/iter/enumerate.rs":"3204255723a93b3275cf0f208939de8960b13a9b13b8c2ba6b664e65da21cd87","src/iter/extend.rs":"211dcb0615e4a2eb00f85391c9c1c1a74754b998badc15b517c28a392595eab4","src/iter/filter.rs":"e48f317ee4d66dea6f19ac2607c6f764d20c023d847b66c6c01826e6a46f96ab","src/iter/filter_map.rs":"2530b726b27fe3a678a34722b1baf8e223a65a0770fa8ed5dca13786ea454580","src/iter/find.rs":"896ddb05b2fa7368462e0ff2a73982ced5f93266c0e0e8c27bb3fc4ec737af21","src/iter/find_first_last/mod.rs":"fa7d7692d81ecdbecb178606ad3b1b00c80e5e4159c57d34929b012b0bea0c82","src/iter/find_first_last/test.rs":"2052eb8b87c5a0a0d49a76c83d9d74f81be18aad52ceb1b06d7e209f4fefba94","src/iter/flat_map.rs":"4db54dcda5f1f916497d0162268e6cd554478bc7ea0190709cc7c73941a0e20f","src/iter/flat_map_iter.rs":"81886d1d71f4991963ec9b6d767d9ef391c9e84807d27f6135cd92a451dc1b32","src/iter/flatten.rs":"93407a8f44f4a265f47d7fe568508d6ef922597c4ca4558e8945cf1aacdd6b30","src/iter/flatten_iter.rs":"23cf3ddc25b6cad117932c4bac2e8b945c6b56626730fd3b1787f233495d15e6","src/iter/fold.rs":"874259b408d7f8cdc376d34276d37c1837950c035ff780de8281d1edf65ded9f","src/iter/fold_chunks.rs":"78c267cc341fa71206a587b548480038a7a9bbb29d341b43733515b34e4cec48","src/iter/fold_chunks_with.rs":"fc3a49dd6a2027ec8e0c78e459ed80da1185b365909694bf1395af12b22648a8","src/iter/for_each.rs":"7af0e21ed8479eec65831d1409f61a88d45a31764f2385ec759eda1a46d388b2","src/iter/from_par_iter.rs":"3f443878c95def492047b92ee2e3946179e21a8198330860927d5692611b4b79","src/iter/inspect.rs":"d502b6e435a44f34ba49dfe46aa809a1bad3dbaefa048540a98e3026437b1016","src/iter/interleave.rs":"3c6d82fe13b52e2ce5e1b3dba93c47f479ff44d232059cd88523b422c51dea96","src/iter/interleave_shortest.rs":"a2b1f31ea4cb29f4761d3724feddcf5a96e1f21fd623f95c85a8659294a6745a","src/iter/intersperse.rs":"6b5d3d826ed3499ba78f0ff07468d96a0e104c7ee142a2ced6be8143b43241a5","src/iter/len.rs":"1d890dffb912134402c4778b1635af713df23df8bd2a98890209926a936d8407","src/iter/map.rs":"f778f1bd0a71c962375d2ce886b40ac365afed4a032e2b9dd6c385712d3d75eb","src/iter/map_with.rs":"f83950016bb02addecec049fda73663861c80232477a7b89b7e8718291a4b481","src/iter/mod.rs":"db985d0c24bed56897bdc5771d4dc092a31eb42987380feba655b25ff415c01f","src/iter/multizip.rs":"10ec107f6673c9bc6d1d611e11b716c37e8601ab2f4257a460c4bc4962771347","src/iter/noop.rs":"5be6332ddfbb8fdbae1ffdb00983950a8b37a295bcb58e9a265b33806ee504e6","src/iter/once.rs":"fcebffc374dcdd206d13311dcc2e7d7a04da5687658b2f3ec3409f03ed12774b","src/iter/panic_fuse.rs":"2a4d43fa4e717629de7f69eb180f13db90ef95004975cfa20dcfaacc80435015","src/iter/par_bridge.rs":"ca6571ab851ca7794214a7b099c763dbf8aad676f42c0a885994f61f9dc27e6e","src/iter/plumbing/README.md":"da11d90143745b30efe99934bb5d8267d7b205c8096d0936ddb1bbba0b13ea17","src/iter/plumbing/mod.rs":"1156c55a15b651d161f463cb86b2f602f6246a3c7f8a82fb484db12aa6a60091","src/iter/positions.rs":"b7abfb59c12b6cceb5e539e85f9eca836054ae88225e16cfc0ba8e68177c7917","src/iter/product.rs":"eaddbf216b068d33cb92f594cf57522f6ea1e2d7699887a086484843bdec3585","src/iter/reduce.rs":"2f5d6e07d7c0de2360505fa5d9198c31fd43ba7e58a6ec40f79edec19319e502","src/iter/repeat.rs":"ed46b17b79d8569f9d67b50585b116ee0293e1d6c17c0dc683c66644f6a58fd5","src/iter/rev.rs":"c4c796d7cb6398e74bef043a080403acccdf70f6a4e74b242e530d1718969b8f","src/iter/skip.rs":"93d54e17316ae15ff3cc30ca7144cb448569b18ea967dd2cd8913ac6f1334390","src/iter/skip_any.rs":"e827e1658aea906ab1045533d97476a91886dc6c41ab1fe9b6147f90385e45b8","src/iter/skip_any_while.rs":"88e8f5aea16cde70ae41f5eb32749e955861a476766ff678b8bbfca96ed80803","src/iter/splitter.rs":"0024db04b4430c2a1e8c921cec86af641f612f877f3675b15df0da9122de5f00","src/iter/step_by.rs":"be7abe2c2fba252a1b69c8cf18adfe510036c30f8ee2994404c18ae15dde317e","src/iter/sum.rs":"073a886b8d6b0d7ca5621449a20e9980c90c6d39de56f074371fb075d9df2bed","src/iter/take.rs":"e47eeca1249553b0dfaf54cd8f99026be68db76b42f1f29e09c07a98c165c50a","src/iter/take_any.rs":"51f5b39c3fb608fcf7d7b35592a28d95250d9cbb28dbc13a0dc01d22aa0023f9","src/iter/take_any_while.rs":"8327c019b4047d567d8fdae975049c9bc1e4422dddffd3196b62c938d1f5e1fc","src/iter/test.rs":"385b65a973c2febbe97ab11cf7cc8ccf253a2c6dcd027213d56f1f63ddf59127","src/iter/try_fold.rs":"d4f40a00995273b8803031da4a4b139a5f462a174ef1d3c8ba54524b47ab8180","src/iter/try_reduce.rs":"12317a649f777e76e6ae610d205104d7946fbe45804fbf1caa0843118531baed","src/iter/try_reduce_with.rs":"9171563fc22110d7a359f19de7ca66a6823d8f712099d05d01560795781fdeec","src/iter/unzip.rs":"9a16ea1f3b3019a090b7189f6c42c75beb3537bc849bd4c51093120a907cea6b","src/iter/update.rs":"0362185a002cdda0e73b13237017ddc3d5e72390bba6cb2e2f021e947ed861dc","src/iter/while_some.rs":"a514891d7a07031354b48e377c239ff330d0955f184abc57a69d2a193e7fcb45","src/iter/zip.rs":"4d908f75a10b5e9b68d012bbba289f3e5e9d6a9570ce0f56fc1b4f9d96860499","src/iter/zip_eq.rs":"4c18d8f7a78e197a3268c9ef74d16690f8c960407c18bb63dc6905a2fe2bde62","src/lib.rs":"74e9dc639f5319859280c4d35575550420274769652f58fe78e47ab050f211a5","src/math.rs":"040e82a4ba7a6680eb65b65f4d1fc3dc477d902855d8651105b138ae2e71c8e8","src/option.rs":"00979a9bb8f42629f2b956a6cfbd286fc8a41ffbbec85f1b5d0f0da5615dac9c","src/par_either.rs":"afa4b04ba6ea1d37aed2d68eca44d7ba0d1d09ea985c9091540dd8d3c51974f1","src/prelude.rs":"b1af578abff57f9c8a285c39e3793125cf40d9901d0f2a4f0c5f1bb9252a08de","src/private.rs":"152f6d65ce4741616a1dec796b9442f78a018d38bb040f76c4cd85008333a3bb","src/range.rs":"93bd821b851d334a365211e14b60e0fc5052a7ee09e9a26ea7dd4f018c9bf7ae","src/range_inclusive.rs":"1f18ee155ab46e7398203163d49b4dfa87135e578de3d80e2641877c5b037126","src/result.rs":"0656f0000efcea10e571df90247925dfd00a0c2194043fcbc009711fb2f7af02","src/slice/chunks.rs":"2bf07a3522381e7747e40f787727747b62fbe1f1504eac6c383f0608a335ec91","src/slice/mergesort.rs":"effe59ecc40b330c364a3da868182b72b487025d9ba0256079f8a284b85a05ef","src/slice/mod.rs":"d293c9105edc3e51b11f873ac816f28232dd708120901ce3a518e03d5b748bcf","src/slice/quicksort.rs":"a7e5dd9f86e9292ccf6b2ca1668c93b8789eb85b7a9d3c9cb9fbe0ed49046e9b","src/slice/rchunks.rs":"23229976840da07e8fff6657ca626810ed380682719e4d1f0693ac08839e1b7c","src/slice/test.rs":"fca5e5e6bb5464c9332d14e7d963098ad9a072801ea508ae9eabf5d278b66bb2","src/split_producer.rs":"2b143e16bc6540792f861e215a86cfea7f4ee500d4faca2476d4165619eac90d","src/str.rs":"fe3fca9218fd17a265619551602001addf80f83187b086b3c65b4edd7857abd2","src/string.rs":"6691dd31264bd93a0528fc584585415c12f56cfb4baebbfd31ea2f1b21550f77","src/vec.rs":"c80653f3040c07e04fa293fa0359e1f8e7faad13d67899e78780e855b6f9f63a","tests/chars.rs":"5a2bef1cd8a7d1740a4e5403830da7bbdd584e97d602a07645c4986ee34c2ad3","tests/clones.rs":"1a8a4c053d2f5154c527cfb3396de2b3d1b3712e31a74f8b5e79862ea91359ea","tests/collect.rs":"3ae066cd89eacc9d171ad99ec73335e8040748370e3a3f46845d5af12ce30cc2","tests/cross-pool.rs":"d2ce3b9013f77c955aa02313b27436c5bf760ab0e6a1e7d768effae69b5bdbfe","tests/debug.rs":"187e3ef1ada63a91db117c02ca4b351d31e8eb6b891ca651bfa60a51afe4ea7c","tests/drain_vec.rs":"305ca40ba41ed3b459a334386cd742c66586d62aadfb624278aabdf10b872a12","tests/intersperse.rs":"bda4fb2179086e32c77c8293b9bb85d55509c282441837ba1849c2d3aa3186a7","tests/issue671-unzip.rs":"d5eb38d8a6d8f66fdf1c40293abbf58f3ac42b5acfc5dca62b02c7ace5bfc1a4","tests/issue671.rs":"52914cac517074deaedcb81bd76b867f0b99cc7b65c3e01cfe12dc9fe38c0266","tests/iter_panic.rs":"2ca857b37b740528b2e8395b479a409227383b46e0ed012286dcdd1330dacd70","tests/named-threads.rs":"9bd7ea27b4f6cf9e3b3486311747e15a3beb9b9d4e48f115d66ed8288ca19d38","tests/octillion.rs":"756d3789300d6eb4d5f7690937e06f87714b6b0a62ac812f72b622bb6974ccd2","tests/par_bridge_recursion.rs":"6e7030de6d97d1db1c335f676dd2a6348cde2873520df290c4a16bf949c06f00","tests/producer_split_at.rs":"fbb28da59e85e4c253cc314f35f113ced8db2981ceda9977145af540f9996837","tests/sort-panic-safe.rs":"2746cf3bca0c3ae4645ab124ae8027be9670aa749cfbb6f4205b095f6f1dbcad","tests/str.rs":"49059384999be57994841652718cc048389380741be5c493423f8bd2206e4453"},"package":"fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051"}
\ No newline at end of file
+{"files":{"Cargo.toml":"5c786211c556fd7f0a58c16d034d70bafe221c8c084d7af1d601c85053cec6ee","FAQ.md":"e963b051f6295a2944ff5abec368c7da914b913e21049978c2ef0017294abf8f","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"0621878e61f0d0fda054bcbe02df75192c28bde1ecc8289cbd86aeba2dd72720","README.md":"5dada1ceff462280be5af52131dbc529cb26bc6eb04d3cf2403ac234a0725fff","RELEASES.md":"2287b9d2894288c931aab43c26bef2fc76f97cef4accbb6cc9960680efaa7311","src/array.rs":"0e1524d222baa8b64f67689b0dea3115f3befb8cc3b5aee9ace169c57b2d29d2","src/collections/binary_heap.rs":"58e2590ff52fa2cfe7b5797fdc37902d0c111cca844aac21a4024add2f28a8db","src/collections/btree_map.rs":"d3094ed5c54620f81a86133f52e74164bae9f0137745eb66e6d31db2e942bcab","src/collections/btree_set.rs":"7de12e388d36cb2f8672bc3b68aed5b44d047c9f5fe262a7260584634299480f","src/collections/hash_map.rs":"cdaf1aa3bedf9bde591fcb323d64bee9366feb35fee6886bedb5fec8d0018564","src/collections/hash_set.rs":"685690108fc20eca2cf346e74e48d6c751f5ceb6028996366d49f1f1ad6051e0","src/collections/linked_list.rs":"bef7f32da49b55db76cfefa0afa4789a6979e08a69427e49bab2874967163fef","src/collections/mod.rs":"3978222720a2df20be7fd0856d8515b6f9fa40f6556662bd3c0726b1392970ca","src/collections/vec_deque.rs":"d14aa4edc858cd3469fff3597fc35ab83c27f3bdf66ede06d1dd25021f383109","src/compile_fail/cannot_collect_filtermap_data.rs":"f76e6727ae8bd0dc8fff5f4a79df3fc598daf5d7371bdf8b2e730fba4ba82719","src/compile_fail/cannot_zip_filtered_data.rs":"3588fcf72e804ea867ea525b6dfa7a3d45fe14e28088e849fa9ddb029acc8a7a","src/compile_fail/cell_par_iter.rs":"ebf8804993c103f9d8228aba0bb2a5f0aadb957de9f1eb59cf546dbace285201","src/compile_fail/mod.rs":"2c346e4b52941fe0ac2667eeb753c0c21a1f998a544bb9d9167f200caba0a7bb","src/compile_fail/must_use.rs":"39ab32af552c2b35e67593b54da146d8edd8e022dbadcf7a81983983a065bbc2","src/compile_fail/no_send_par_iter.rs":"b241446439c659f35060df12ba91590ea4267f373ddc688e4ffc203321db24b3","src/compile_fail/rc_par_iter.rs":"938776b08612e35c85b99962024d54af5a8c87d45a050a76375d16ef6fe4299f","src/delegate.rs":"aad2a11998240fb7dd96bd054b588cac469df3b716b8dffb05239102b6507d05","src/iter/blocks.rs":"851cd78b26d9ae0b789566f2fe018502c80ff6352b4a06f71f14326d78759074","src/iter/chain.rs":"9a79215e5f40619b023a6cc4111dd13644fa290397f01836a9f6cc1a3df5355a","src/iter/chunks.rs":"fa7242ce8e84b0f5c2d1c0116ad635ba149db988c903863bd62d64ff51065130","src/iter/cloned.rs":"35e1c864f99f7bc93c258c4976d15ccfc1d04df969dc878fd03d35f6799377f7","src/iter/collect/consumer.rs":"5f9728fdf2db728a3ea37849c2fc43c417b221e580860be4dfc6cab526e57f8e","src/iter/collect/mod.rs":"ede28d59713c3291709a842cd54b17760008f6854a3982404eca973bdc3d2f23","src/iter/collect/test.rs":"9afcf4c6cf6bbfe22aed42e5bb5a0dcbd4d7c9b060d80d3b01fad665b46e4952","src/iter/copied.rs":"1a3457f3b0fb020593049b8b1f1be2f7a6684c2fcc66c02c911cb14e0a1943d7","src/iter/empty.rs":"3cb2d05721aab1a4d9e9c5813473e1646116c1ea570e26d9ac81e083688a0b7d","src/iter/enumerate.rs":"3204255723a93b3275cf0f208939de8960b13a9b13b8c2ba6b664e65da21cd87","src/iter/extend.rs":"7f1d1f4e90f046ef2fd35736850aab0c1a92395cf83175f93f6bdac74c48f5b3","src/iter/filter.rs":"e48f317ee4d66dea6f19ac2607c6f764d20c023d847b66c6c01826e6a46f96ab","src/iter/filter_map.rs":"2530b726b27fe3a678a34722b1baf8e223a65a0770fa8ed5dca13786ea454580","src/iter/find.rs":"896ddb05b2fa7368462e0ff2a73982ced5f93266c0e0e8c27bb3fc4ec737af21","src/iter/find_first_last/mod.rs":"3759a42531b5593f4a19196a5cc38b4afc322b12ec50beb3c0bb1389de4b14ca","src/iter/find_first_last/test.rs":"fe11970bbe0eb07aee1bd44c3b0cdcdae3d0630269d6530658cadd7f17724e0b","src/iter/flat_map.rs":"4db54dcda5f1f916497d0162268e6cd554478bc7ea0190709cc7c73941a0e20f","src/iter/flat_map_iter.rs":"81886d1d71f4991963ec9b6d767d9ef391c9e84807d27f6135cd92a451dc1b32","src/iter/flatten.rs":"93407a8f44f4a265f47d7fe568508d6ef922597c4ca4558e8945cf1aacdd6b30","src/iter/flatten_iter.rs":"23cf3ddc25b6cad117932c4bac2e8b945c6b56626730fd3b1787f233495d15e6","src/iter/fold.rs":"874259b408d7f8cdc376d34276d37c1837950c035ff780de8281d1edf65ded9f","src/iter/fold_chunks.rs":"2c60b969fb5a148b092bd92619b13ee669ff82d008f36dae5f4f908eb277f1d8","src/iter/fold_chunks_with.rs":"d1bd686202c21a54b60cbe7c7db30a09c35ec35fb544c18966c8e8606ac25490","src/iter/for_each.rs":"7af0e21ed8479eec65831d1409f61a88d45a31764f2385ec759eda1a46d388b2","src/iter/from_par_iter.rs":"46d4e004a71fe83368c59dc85e9eca9bc813b40bf787b971a3e74efef3975c78","src/iter/inspect.rs":"d502b6e435a44f34ba49dfe46aa809a1bad3dbaefa048540a98e3026437b1016","src/iter/interleave.rs":"b3746c549cede5b978392f10305bd44fe12fa0566cd0be9c11587ed70eb92b19","src/iter/interleave_shortest.rs":"a2b1f31ea4cb29f4761d3724feddcf5a96e1f21fd623f95c85a8659294a6745a","src/iter/intersperse.rs":"6b5d3d826ed3499ba78f0ff07468d96a0e104c7ee142a2ced6be8143b43241a5","src/iter/len.rs":"5159ed82c624481808d94714a3c3151c431dd50d4dd27d4566c82de01be08b7d","src/iter/map.rs":"f778f1bd0a71c962375d2ce886b40ac365afed4a032e2b9dd6c385712d3d75eb","src/iter/map_with.rs":"f83950016bb02addecec049fda73663861c80232477a7b89b7e8718291a4b481","src/iter/mod.rs":"fd42fc5b56e05f1f18724472cd25938c05f78b463d2106df0d2fd48b3f200843","src/iter/multizip.rs":"10ec107f6673c9bc6d1d611e11b716c37e8601ab2f4257a460c4bc4962771347","src/iter/noop.rs":"5be6332ddfbb8fdbae1ffdb00983950a8b37a295bcb58e9a265b33806ee504e6","src/iter/once.rs":"fcebffc374dcdd206d13311dcc2e7d7a04da5687658b2f3ec3409f03ed12774b","src/iter/panic_fuse.rs":"2a4d43fa4e717629de7f69eb180f13db90ef95004975cfa20dcfaacc80435015","src/iter/par_bridge.rs":"344c6233e6f799a95b1df517429ee53c817dd227be3c351a7ccc725c57f9f962","src/iter/plumbing/README.md":"da11d90143745b30efe99934bb5d8267d7b205c8096d0936ddb1bbba0b13ea17","src/iter/plumbing/mod.rs":"cb6402a297ab7e43badd9dc6ec76f604525f5365d27e82ba829fb73b009f2ae2","src/iter/positions.rs":"b7abfb59c12b6cceb5e539e85f9eca836054ae88225e16cfc0ba8e68177c7917","src/iter/product.rs":"eaddbf216b068d33cb92f594cf57522f6ea1e2d7699887a086484843bdec3585","src/iter/reduce.rs":"2f5d6e07d7c0de2360505fa5d9198c31fd43ba7e58a6ec40f79edec19319e502","src/iter/repeat.rs":"ed46b17b79d8569f9d67b50585b116ee0293e1d6c17c0dc683c66644f6a58fd5","src/iter/rev.rs":"c4c796d7cb6398e74bef043a080403acccdf70f6a4e74b242e530d1718969b8f","src/iter/skip.rs":"8ac3dd56f306c40b86a4da32cf7f4ceee58a9c0f33dcad8b2b09fb74150bf5b4","src/iter/skip_any.rs":"e827e1658aea906ab1045533d97476a91886dc6c41ab1fe9b6147f90385e45b8","src/iter/skip_any_while.rs":"88e8f5aea16cde70ae41f5eb32749e955861a476766ff678b8bbfca96ed80803","src/iter/splitter.rs":"0024db04b4430c2a1e8c921cec86af641f612f877f3675b15df0da9122de5f00","src/iter/step_by.rs":"a8e0af1c831f843100ce1e1d8ff51a8d01a2935bdfbee74b5e7a65faf93a508c","src/iter/sum.rs":"073a886b8d6b0d7ca5621449a20e9980c90c6d39de56f074371fb075d9df2bed","src/iter/take.rs":"c3f8e46dca9bd89c26c15a2ecbd013ee3dfef4b3975c73c23849b03fb7493fc7","src/iter/take_any.rs":"51f5b39c3fb608fcf7d7b35592a28d95250d9cbb28dbc13a0dc01d22aa0023f9","src/iter/take_any_while.rs":"8327c019b4047d567d8fdae975049c9bc1e4422dddffd3196b62c938d1f5e1fc","src/iter/test.rs":"ae4de120904370fa197f950350b07db01da9f292769342616a516c9786de283f","src/iter/try_fold.rs":"d4f40a00995273b8803031da4a4b139a5f462a174ef1d3c8ba54524b47ab8180","src/iter/try_reduce.rs":"12317a649f777e76e6ae610d205104d7946fbe45804fbf1caa0843118531baed","src/iter/try_reduce_with.rs":"9171563fc22110d7a359f19de7ca66a6823d8f712099d05d01560795781fdeec","src/iter/unzip.rs":"9a16ea1f3b3019a090b7189f6c42c75beb3537bc849bd4c51093120a907cea6b","src/iter/update.rs":"0362185a002cdda0e73b13237017ddc3d5e72390bba6cb2e2f021e947ed861dc","src/iter/walk_tree.rs":"668e687fe7761008ea95d95f5e05bba6e63053ac90aa4677a619439801f2350d","src/iter/while_some.rs":"a514891d7a07031354b48e377c239ff330d0955f184abc57a69d2a193e7fcb45","src/iter/zip.rs":"b15e418daeb2feb85d3d993b307a47018f44746cc9669f15d6bee6c7840b0645","src/iter/zip_eq.rs":"4c18d8f7a78e197a3268c9ef74d16690f8c960407c18bb63dc6905a2fe2bde62","src/lib.rs":"027d4a42a3728ac6819c1fc2983d762ea66e2e29edc7ec7df2435884ad75bd6f","src/math.rs":"040e82a4ba7a6680eb65b65f4d1fc3dc477d902855d8651105b138ae2e71c8e8","src/option.rs":"00979a9bb8f42629f2b956a6cfbd286fc8a41ffbbec85f1b5d0f0da5615dac9c","src/par_either.rs":"afa4b04ba6ea1d37aed2d68eca44d7ba0d1d09ea985c9091540dd8d3c51974f1","src/prelude.rs":"b1af578abff57f9c8a285c39e3793125cf40d9901d0f2a4f0c5f1bb9252a08de","src/private.rs":"152f6d65ce4741616a1dec796b9442f78a018d38bb040f76c4cd85008333a3bb","src/range.rs":"e88bd691f0ce5b82f6d185df30180b143856cfde53974e1d8cf2a9d5abb2a867","src/range_inclusive.rs":"130a58852281195b979c5a2875349e99b7c72185e8da645addaacca33b7394de","src/result.rs":"0656f0000efcea10e571df90247925dfd00a0c2194043fcbc009711fb2f7af02","src/slice/chunk_by.rs":"bca36aa0920039d398b4f8e218ffe61bf657c2a782ed37d08680c94567e012f9","src/slice/chunks.rs":"8a2066ddda9f0cf00f2b284e211311ca26b33e9a8bdc2ae201369f5bae4fb41b","src/slice/mergesort.rs":"effe59ecc40b330c364a3da868182b72b487025d9ba0256079f8a284b85a05ef","src/slice/mod.rs":"d16808e3820166032bd32cc678ce80b01bd8c9420ab27d1717e4b72b4694d843","src/slice/quicksort.rs":"082eb0acb08b675607b0d5a6e99f40bebf924dad6f53c848fc3c2458cc1a48e5","src/slice/rchunks.rs":"23229976840da07e8fff6657ca626810ed380682719e4d1f0693ac08839e1b7c","src/slice/test.rs":"6789b33d62a913770d5b60d26eb587a4243c15b2a1c6f0a6f613806576943694","src/split_producer.rs":"b2633e62bf87ccdc81d0d738de8f184f5892129fc31e81bc891e978b7179e695","src/str.rs":"f8720e1a167a186169797dd4342cde7be45d0ded453c461c42a1331e1c9f6274","src/string.rs":"6691dd31264bd93a0528fc584585415c12f56cfb4baebbfd31ea2f1b21550f77","src/vec.rs":"c80653f3040c07e04fa293fa0359e1f8e7faad13d67899e78780e855b6f9f63a","tests/chars.rs":"6e1aeda8aa604f15965aa3c735da07f2145bd06079abb684b70598c86d99a263","tests/clones.rs":"6088be680e6b25d919ae4a23c1185202870b83789fedaed3cbf2d9e8fb612212","tests/collect.rs":"3ae066cd89eacc9d171ad99ec73335e8040748370e3a3f46845d5af12ce30cc2","tests/cross-pool.rs":"d2ce3b9013f77c955aa02313b27436c5bf760ab0e6a1e7d768effae69b5bdbfe","tests/debug.rs":"5c77126f8145bca24d76022649d84d5d525d90c7fcb3a8d3c0cd1ac05439cf17","tests/drain_vec.rs":"305ca40ba41ed3b459a334386cd742c66586d62aadfb624278aabdf10b872a12","tests/intersperse.rs":"bda4fb2179086e32c77c8293b9bb85d55509c282441837ba1849c2d3aa3186a7","tests/issue671-unzip.rs":"d5eb38d8a6d8f66fdf1c40293abbf58f3ac42b5acfc5dca62b02c7ace5bfc1a4","tests/issue671.rs":"52914cac517074deaedcb81bd76b867f0b99cc7b65c3e01cfe12dc9fe38c0266","tests/iter_panic.rs":"2ca857b37b740528b2e8395b479a409227383b46e0ed012286dcdd1330dacd70","tests/named-threads.rs":"9bd7ea27b4f6cf9e3b3486311747e15a3beb9b9d4e48f115d66ed8288ca19d38","tests/octillion.rs":"756d3789300d6eb4d5f7690937e06f87714b6b0a62ac812f72b622bb6974ccd2","tests/par_bridge_recursion.rs":"6e7030de6d97d1db1c335f676dd2a6348cde2873520df290c4a16bf949c06f00","tests/producer_split_at.rs":"17caad52fb7c9b3e09a2a138e402db39d1d3a96f2305461cbe36c45f7b85f8d5","tests/sort-panic-safe.rs":"ee4093d5367e0a6dae086db71b5d25c4d37773b985575a41f30c72b151e4072d","tests/str.rs":"34aac04413ad0370e6abc66ccc21b00c07655f82d046e47134c6ae0a9c4642e1"},"package":"b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"}
\ No newline at end of file
diff --git a/crates/rayon/Android.bp b/crates/rayon/Android.bp
index 7bcdb2b..7902294 100644
--- a/crates/rayon/Android.bp
+++ b/crates/rayon/Android.bp
@@ -18,7 +18,7 @@
host_supported: true,
crate_name: "rayon",
cargo_env_compat: true,
- cargo_pkg_version: "1.8.1",
+ cargo_pkg_version: "1.10.0",
crate_root: "src/lib.rs",
edition: "2021",
rustlibs: [
diff --git a/crates/rayon/Cargo.toml b/crates/rayon/Cargo.toml
index a1761f1..9905f80 100644
--- a/crates/rayon/Cargo.toml
+++ b/crates/rayon/Cargo.toml
@@ -13,7 +13,7 @@
edition = "2021"
rust-version = "1.63"
name = "rayon"
-version = "1.8.1"
+version = "1.10.0"
authors = [
"Niko Matsakis <[email protected]>",
"Josh Stone <[email protected]>",
diff --git a/crates/rayon/METADATA b/crates/rayon/METADATA
index 6fe2f9d..1a2940c 100644
--- a/crates/rayon/METADATA
+++ b/crates/rayon/METADATA
@@ -1,17 +1,17 @@
name: "rayon"
description: "Simple work-stealing parallelism for Rust"
third_party {
- version: "1.8.1"
+ version: "1.10.0"
license_type: NOTICE
last_upgrade_date {
year: 2024
- month: 2
- day: 6
+ month: 12
+ day: 20
}
homepage: "https://crates.io/crates/rayon"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/rayon/rayon-1.8.1.crate"
- version: "1.8.1"
+ value: "https://static.crates.io/crates/rayon/rayon-1.10.0.crate"
+ version: "1.10.0"
}
}
diff --git a/crates/rayon/README.md b/crates/rayon/README.md
index 082f6a4..b052733 100644
--- a/crates/rayon/README.md
+++ b/crates/rayon/README.md
@@ -3,7 +3,7 @@
[](https://crates.io/crates/rayon)
[](https://docs.rs/rayon)

-[](https://github.com/rayon-rs/rayon/actions)
+[](https://github.com/rayon-rs/rayon/actions)
[](https://gitter.im/rayon-rs/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
Rayon is a data-parallelism library for Rust. It is extremely
@@ -88,12 +88,19 @@
### Usage with WebAssembly
-Rayon can work on the Web via WebAssembly, but requires an adapter and
-some project configuration to account for differences between
-WebAssembly threads and threads on the other platforms.
+By default, when building to WebAssembly, Rayon will treat it as any
+other platform without multithreading support and will fall back to
+sequential iteration. This allows existing code to compile and run
+successfully with no changes necessary, but it will run slower as it
+will only use a single CPU core.
+
+You can build Rayon-based projects with proper multithreading support
+for the Web, but you'll need an adapter and some project configuration
+to account for differences between WebAssembly threads and threads
+on the other platforms.
Check out the
-[wasm-bindgen-rayon](https://github.com/GoogleChromeLabs/wasm-bindgen-rayon)
+[wasm-bindgen-rayon](https://github.com/RReverser/wasm-bindgen-rayon)
docs for more details.
## Contribution
@@ -108,7 +115,7 @@
[Guide to Development](https://github.com/rayon-rs/rayon/wiki/Guide-to-Development)
page on the wiki. Note that all code submitted in PRs to Rayon is
assumed to
-[be licensed under Rayon's dual MIT/Apache 2.0 licensing](https://github.com/rayon-rs/rayon/blob/master/README.md#license).
+[be licensed under Rayon's dual MIT/Apache 2.0 licensing](https://github.com/rayon-rs/rayon/blob/main/README.md#license).
## Quick demo
@@ -134,7 +141,7 @@
See [the Rayon FAQ][faq].
-[faq]: https://github.com/rayon-rs/rayon/blob/master/FAQ.md
+[faq]: https://github.com/rayon-rs/rayon/blob/main/FAQ.md
## License
diff --git a/crates/rayon/RELEASES.md b/crates/rayon/RELEASES.md
index 9b71516..682ebb4 100644
--- a/crates/rayon/RELEASES.md
+++ b/crates/rayon/RELEASES.md
@@ -1,3 +1,29 @@
+# Release rayon 1.10.0 (2024-03-23)
+
+- The new methods `ParallelSlice::par_chunk_by` and
+ `ParallelSliceMut::par_chunk_by_mut` work like the slice methods `chunk_by`
+ and `chunk_by_mut` added in Rust 1.77.
+
+# Release rayon 1.9.0 (2024-02-27)
+
+- The new methods `IndexedParallelIterator::by_exponential_blocks` and
+ `by_uniform_blocks` allow processing items in smaller groups at a time.
+- The new `iter::walk_tree`, `walk_tree_prefix`, and `walk_tree_postfix`
+ functions enable custom parallel iteration over tree-like structures.
+- The new method `ParallelIterator::collect_vec_list` returns items as a linked
+ list of vectors, which is an efficient mode of parallel collection used by
+ many of the internal implementations of `collect`.
+- The new methods `ParallelSliceMut::par_split_inclusive_mut`,
+ `ParallelSlice::par_split_inclusive`, and
+ `ParallelString::par_split_inclusive` all work like a normal split but
+ keeping the separator as part of the left slice.
+- The new `ParallelString::par_split_ascii_whitespace` splits only on ASCII
+ whitespace, which is faster than including Unicode multi-byte whitespace.
+- `OsString` now implements `FromParallelIterator<_>` and `ParallelExtend<_>`
+ for a few item types similar to the standard `FromIterator` and `Extend`.
+- The internal `Pattern` trait for string methods is now implemented for
+ `[char; N]` and `&[char; N]`, matching any of the given characters.
+
# Release rayon 1.8.1 / rayon-core 1.12.1 (2024-01-17)
- The new `"web_spin_lock"` crate feature makes mutexes spin on the main
@@ -343,8 +369,8 @@
- @seanchen1991
- @yegeun542
-[RFC 1]: https://github.com/rayon-rs/rfcs/blob/master/accepted/rfc0001-scope-scheduling.md
-[RFC 3]: https://github.com/rayon-rs/rfcs/blob/master/accepted/rfc0003-minimum-rustc.md
+[RFC 1]: https://github.com/rayon-rs/rfcs/blob/main/accepted/rfc0001-scope-scheduling.md
+[RFC 3]: https://github.com/rayon-rs/rfcs/blob/main/accepted/rfc0003-minimum-rustc.md
# Release rayon 1.0.3 (2018-11-02)
diff --git a/crates/rayon/src/compile_fail/must_use.rs b/crates/rayon/src/compile_fail/must_use.rs
index b4b3d77..da03b8f 100644
--- a/crates/rayon/src/compile_fail/must_use.rs
+++ b/crates/rayon/src/compile_fail/must_use.rs
@@ -30,6 +30,8 @@
}
must_use! {
+ by_exponential_blocks /** v.par_iter().by_exponential_blocks(); */
+ by_uniform_blocks /** v.par_iter().by_uniform_blocks(2); */
step_by /** v.par_iter().step_by(2); */
chain /** v.par_iter().chain(&v); */
chunks /** v.par_iter().chunks(2); */
diff --git a/crates/rayon/src/iter/blocks.rs b/crates/rayon/src/iter/blocks.rs
new file mode 100644
index 0000000..0d4e06c
--- /dev/null
+++ b/crates/rayon/src/iter/blocks.rs
@@ -0,0 +1,131 @@
+use super::plumbing::*;
+use super::*;
+
+struct BlocksCallback<S, C> {
+ sizes: S,
+ consumer: C,
+ len: usize,
+}
+
+impl<T, S, C> ProducerCallback<T> for BlocksCallback<S, C>
+where
+ C: UnindexedConsumer<T>,
+ S: Iterator<Item = usize>,
+{
+ type Output = C::Result;
+
+ fn callback<P: Producer<Item = T>>(mut self, mut producer: P) -> Self::Output {
+ let mut remaining_len = self.len;
+ let mut consumer = self.consumer;
+
+ // we need a local variable for the accumulated results
+ // we call the reducer's identity by splitting at 0
+ let (left_consumer, right_consumer, _) = consumer.split_at(0);
+ let mut leftmost_res = left_consumer.into_folder().complete();
+ consumer = right_consumer;
+
+ // now we loop on each block size
+ while remaining_len > 0 && !consumer.full() {
+ // we compute the next block's size
+ let size = self.sizes.next().unwrap_or(std::usize::MAX);
+ let capped_size = remaining_len.min(size);
+ remaining_len -= capped_size;
+
+ // split the producer
+ let (left_producer, right_producer) = producer.split_at(capped_size);
+ producer = right_producer;
+
+ // split the consumer
+ let (left_consumer, right_consumer, _) = consumer.split_at(capped_size);
+ consumer = right_consumer;
+
+ leftmost_res = consumer.to_reducer().reduce(
+ leftmost_res,
+ bridge_producer_consumer(capped_size, left_producer, left_consumer),
+ );
+ }
+ leftmost_res
+ }
+}
+
+/// `ExponentialBlocks` is a parallel iterator that consumes itself as a sequence
+/// of parallel blocks of increasing sizes (exponentially).
+///
+/// This struct is created by the [`by_exponential_blocks()`] method on [`IndexedParallelIterator`]
+///
+/// [`by_exponential_blocks()`]: trait.IndexedParallelIterator.html#method.by_exponential_blocks
+/// [`IndexedParallelIterator`]: trait.IndexedParallelIterator.html
+#[must_use = "iterator adaptors are lazy and do nothing unless consumed"]
+#[derive(Debug, Clone)]
+pub struct ExponentialBlocks<I> {
+ base: I,
+}
+
+impl<I> ExponentialBlocks<I> {
+ pub(super) fn new(base: I) -> Self {
+ Self { base }
+ }
+}
+
+impl<I> ParallelIterator for ExponentialBlocks<I>
+where
+ I: IndexedParallelIterator,
+{
+ type Item = I::Item;
+
+ fn drive_unindexed<C>(self, consumer: C) -> C::Result
+ where
+ C: UnindexedConsumer<Self::Item>,
+ {
+ let first = crate::current_num_threads();
+ let callback = BlocksCallback {
+ consumer,
+ sizes: std::iter::successors(Some(first), exponential_size),
+ len: self.base.len(),
+ };
+ self.base.with_producer(callback)
+ }
+}
+
+fn exponential_size(size: &usize) -> Option<usize> {
+ Some(size.saturating_mul(2))
+}
+
+/// `UniformBlocks` is a parallel iterator that consumes itself as a sequence
+/// of parallel blocks of constant sizes.
+///
+/// This struct is created by the [`by_uniform_blocks()`] method on [`IndexedParallelIterator`]
+///
+/// [`by_uniform_blocks()`]: trait.IndexedParallelIterator.html#method.by_uniform_blocks
+/// [`IndexedParallelIterator`]: trait.IndexedParallelIterator.html
+#[must_use = "iterator adaptors are lazy and do nothing unless consumed"]
+#[derive(Debug, Clone)]
+pub struct UniformBlocks<I> {
+ base: I,
+ block_size: usize,
+}
+
+impl<I> UniformBlocks<I> {
+ pub(super) fn new(base: I, block_size: usize) -> Self {
+ Self { base, block_size }
+ }
+}
+
+impl<I> ParallelIterator for UniformBlocks<I>
+where
+ I: IndexedParallelIterator,
+{
+ type Item = I::Item;
+
+ fn drive_unindexed<C>(self, consumer: C) -> C::Result
+ where
+ C: UnindexedConsumer<Self::Item>,
+ {
+ let callback = BlocksCallback {
+ consumer,
+ sizes: std::iter::repeat(self.block_size),
+ len: self.base.len(),
+ };
+ self.base.with_producer(callback)
+ }
+}
diff --git a/crates/rayon/src/iter/chain.rs b/crates/rayon/src/iter/chain.rs
index 48fce07..25ee788 100644
--- a/crates/rayon/src/iter/chain.rs
+++ b/crates/rayon/src/iter/chain.rs
@@ -1,7 +1,6 @@
use super::plumbing::*;
use super::*;
use rayon_core::join;
-use std::cmp;
use std::iter;
/// `Chain` is an iterator that joins `b` after `a` in one continuous iterator.
@@ -178,11 +177,11 @@
}
fn min_len(&self) -> usize {
- cmp::max(self.a.min_len(), self.b.min_len())
+ Ord::max(self.a.min_len(), self.b.min_len())
}
fn max_len(&self) -> usize {
- cmp::min(self.a.max_len(), self.b.max_len())
+ Ord::min(self.a.max_len(), self.b.max_len())
}
fn split_at(self, index: usize) -> (Self, Self) {
diff --git a/crates/rayon/src/iter/chunks.rs b/crates/rayon/src/iter/chunks.rs
index ec48278..55f2ea8 100644
--- a/crates/rayon/src/iter/chunks.rs
+++ b/crates/rayon/src/iter/chunks.rs
@@ -1,5 +1,3 @@
-use std::cmp::min;
-
use super::plumbing::*;
use super::*;
use crate::math::div_round_up;
@@ -133,7 +131,7 @@
}
fn split_at(self, index: usize) -> (Self, Self) {
- let elem_index = min(index * self.chunk_size, self.len);
+ let elem_index = Ord::min(index * self.chunk_size, self.len);
let (left, right) = self.base.split_at(elem_index);
(
ChunkProducer {
diff --git a/crates/rayon/src/iter/extend.rs b/crates/rayon/src/iter/extend.rs
index a264528..3d19d9d 100644
--- a/crates/rayon/src/iter/extend.rs
+++ b/crates/rayon/src/iter/extend.rs
@@ -2,26 +2,83 @@
use super::plumbing::{Consumer, Folder, Reducer, UnindexedConsumer};
use super::{IntoParallelIterator, ParallelExtend, ParallelIterator};
+use either::Either;
use std::borrow::Cow;
use std::collections::LinkedList;
use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet};
use std::collections::{BinaryHeap, VecDeque};
+use std::ffi::{OsStr, OsString};
use std::hash::{BuildHasher, Hash};
/// Performs a generic `par_extend` by collecting to a `LinkedList<Vec<_>>` in
/// parallel, then extending the collection sequentially.
macro_rules! extend {
- ($self:ident, $par_iter:ident, $extend:ident) => {
- $extend(
- $self,
- $par_iter.into_par_iter().drive_unindexed(ListVecConsumer),
- );
+ ($self:ident, $par_iter:ident) => {
+ extend!($self <- fast_collect($par_iter))
+ };
+ ($self:ident <- $vecs:expr) => {
+ match $vecs {
+ Either::Left(vec) => $self.extend(vec),
+ Either::Right(list) => {
+ for vec in list {
+ $self.extend(vec);
+ }
+ }
+ }
+ };
+}
+macro_rules! extend_reserved {
+ ($self:ident, $par_iter:ident, $len:ident) => {
+ let vecs = fast_collect($par_iter);
+ $self.reserve($len(&vecs));
+ extend!($self <- vecs)
+ };
+ ($self:ident, $par_iter:ident) => {
+ extend_reserved!($self, $par_iter, len)
};
}
-/// Computes the total length of a `LinkedList<Vec<_>>`.
-fn len<T>(list: &LinkedList<Vec<T>>) -> usize {
- list.iter().map(Vec::len).sum()
+/// Computes the total length of a `fast_collect` result.
+fn len<T>(vecs: &Either<Vec<T>, LinkedList<Vec<T>>>) -> usize {
+ match vecs {
+ Either::Left(vec) => vec.len(),
+ Either::Right(list) => list.iter().map(Vec::len).sum(),
+ }
+}
+
+/// Computes the total string length of a `fast_collect` result.
+fn string_len<T: AsRef<str>>(vecs: &Either<Vec<T>, LinkedList<Vec<T>>>) -> usize {
+ let strs = match vecs {
+ Either::Left(vec) => Either::Left(vec.iter()),
+ Either::Right(list) => Either::Right(list.iter().flatten()),
+ };
+ strs.map(AsRef::as_ref).map(str::len).sum()
+}
+
+/// Computes the total OS-string length of a `fast_collect` result.
+fn osstring_len<T: AsRef<OsStr>>(vecs: &Either<Vec<T>, LinkedList<Vec<T>>>) -> usize {
+ let osstrs = match vecs {
+ Either::Left(vec) => Either::Left(vec.iter()),
+ Either::Right(list) => Either::Right(list.iter().flatten()),
+ };
+ osstrs.map(AsRef::as_ref).map(OsStr::len).sum()
+}
+
+pub(super) fn fast_collect<I, T>(pi: I) -> Either<Vec<T>, LinkedList<Vec<T>>>
+where
+ I: IntoParallelIterator<Item = T>,
+ T: Send,
+{
+ let par_iter = pi.into_par_iter();
+ match par_iter.opt_len() {
+ Some(len) => {
+ // Pseudo-specialization. See impl of ParallelExtend for Vec for more details.
+ let mut vec = Vec::new();
+ super::collect::special_extend(par_iter, len, &mut vec);
+ Either::Left(vec)
+ }
+ None => Either::Right(par_iter.drive_unindexed(ListVecConsumer)),
+ }
}
struct ListVecConsumer;
@@ -87,16 +144,6 @@
}
}
-fn heap_extend<T, Item>(heap: &mut BinaryHeap<T>, list: LinkedList<Vec<Item>>)
-where
- BinaryHeap<T>: Extend<Item>,
-{
- heap.reserve(len(&list));
- for vec in list {
- heap.extend(vec);
- }
-}
-
/// Extends a binary heap with items from a parallel iterator.
impl<T> ParallelExtend<T> for BinaryHeap<T>
where
@@ -106,7 +153,7 @@
where
I: IntoParallelIterator<Item = T>,
{
- extend!(self, par_iter, heap_extend);
+ extend_reserved!(self, par_iter);
}
}
@@ -119,16 +166,7 @@
where
I: IntoParallelIterator<Item = &'a T>,
{
- extend!(self, par_iter, heap_extend);
- }
-}
-
-fn btree_map_extend<K, V, Item>(map: &mut BTreeMap<K, V>, list: LinkedList<Vec<Item>>)
-where
- BTreeMap<K, V>: Extend<Item>,
-{
- for vec in list {
- map.extend(vec);
+ extend_reserved!(self, par_iter);
}
}
@@ -142,7 +180,7 @@
where
I: IntoParallelIterator<Item = (K, V)>,
{
- extend!(self, par_iter, btree_map_extend);
+ extend!(self, par_iter);
}
}
@@ -156,16 +194,7 @@
where
I: IntoParallelIterator<Item = (&'a K, &'a V)>,
{
- extend!(self, par_iter, btree_map_extend);
- }
-}
-
-fn btree_set_extend<T, Item>(set: &mut BTreeSet<T>, list: LinkedList<Vec<Item>>)
-where
- BTreeSet<T>: Extend<Item>,
-{
- for vec in list {
- set.extend(vec);
+ extend!(self, par_iter);
}
}
@@ -178,7 +207,7 @@
where
I: IntoParallelIterator<Item = T>,
{
- extend!(self, par_iter, btree_set_extend);
+ extend!(self, par_iter);
}
}
@@ -191,19 +220,7 @@
where
I: IntoParallelIterator<Item = &'a T>,
{
- extend!(self, par_iter, btree_set_extend);
- }
-}
-
-fn hash_map_extend<K, V, S, Item>(map: &mut HashMap<K, V, S>, list: LinkedList<Vec<Item>>)
-where
- HashMap<K, V, S>: Extend<Item>,
- K: Eq + Hash,
- S: BuildHasher,
-{
- map.reserve(len(&list));
- for vec in list {
- map.extend(vec);
+ extend!(self, par_iter);
}
}
@@ -219,7 +236,7 @@
I: IntoParallelIterator<Item = (K, V)>,
{
// See the map_collect benchmarks in rayon-demo for different strategies.
- extend!(self, par_iter, hash_map_extend);
+ extend_reserved!(self, par_iter);
}
}
@@ -234,19 +251,7 @@
where
I: IntoParallelIterator<Item = (&'a K, &'a V)>,
{
- extend!(self, par_iter, hash_map_extend);
- }
-}
-
-fn hash_set_extend<T, S, Item>(set: &mut HashSet<T, S>, list: LinkedList<Vec<Item>>)
-where
- HashSet<T, S>: Extend<Item>,
- T: Eq + Hash,
- S: BuildHasher,
-{
- set.reserve(len(&list));
- for vec in list {
- set.extend(vec);
+ extend_reserved!(self, par_iter);
}
}
@@ -260,7 +265,7 @@
where
I: IntoParallelIterator<Item = T>,
{
- extend!(self, par_iter, hash_set_extend);
+ extend_reserved!(self, par_iter);
}
}
@@ -274,7 +279,7 @@
where
I: IntoParallelIterator<Item = &'a T>,
{
- extend!(self, par_iter, hash_set_extend);
+ extend_reserved!(self, par_iter);
}
}
@@ -375,9 +380,34 @@
}
}
-fn flat_string_extend(string: &mut String, list: LinkedList<String>) {
- string.reserve(list.iter().map(String::len).sum());
- string.extend(list);
+/// Extends an OS-string with string slices from a parallel iterator.
+impl<'a> ParallelExtend<&'a OsStr> for OsString {
+ fn par_extend<I>(&mut self, par_iter: I)
+ where
+ I: IntoParallelIterator<Item = &'a OsStr>,
+ {
+ extend_reserved!(self, par_iter, osstring_len);
+ }
+}
+
+/// Extends an OS-string with strings from a parallel iterator.
+impl ParallelExtend<OsString> for OsString {
+ fn par_extend<I>(&mut self, par_iter: I)
+ where
+ I: IntoParallelIterator<Item = OsString>,
+ {
+ extend_reserved!(self, par_iter, osstring_len);
+ }
+}
+
+/// Extends an OS-string with string slices from a parallel iterator.
+impl<'a> ParallelExtend<Cow<'a, OsStr>> for OsString {
+ fn par_extend<I>(&mut self, par_iter: I)
+ where
+ I: IntoParallelIterator<Item = Cow<'a, OsStr>>,
+ {
+ extend_reserved!(self, par_iter, osstring_len);
+ }
}
/// Extends a string with characters from a parallel iterator.
@@ -389,7 +419,8 @@
// This is like `extend`, but `Vec<char>` is less efficient to deal
// with than `String`, so instead collect to `LinkedList<String>`.
let list = par_iter.into_par_iter().drive_unindexed(ListStringConsumer);
- flat_string_extend(self, list);
+ self.reserve(list.iter().map(String::len).sum());
+ self.extend(list);
}
}
@@ -468,25 +499,13 @@
}
}
-fn string_extend<Item>(string: &mut String, list: LinkedList<Vec<Item>>)
-where
- String: Extend<Item>,
- Item: AsRef<str>,
-{
- let len = list.iter().flatten().map(Item::as_ref).map(str::len).sum();
- string.reserve(len);
- for vec in list {
- string.extend(vec);
- }
-}
-
/// Extends a string with string slices from a parallel iterator.
impl<'a> ParallelExtend<&'a str> for String {
fn par_extend<I>(&mut self, par_iter: I)
where
I: IntoParallelIterator<Item = &'a str>,
{
- extend!(self, par_iter, string_extend);
+ extend_reserved!(self, par_iter, string_len);
}
}
@@ -496,7 +515,7 @@
where
I: IntoParallelIterator<Item = String>,
{
- extend!(self, par_iter, string_extend);
+ extend_reserved!(self, par_iter, string_len);
}
}
@@ -506,7 +525,7 @@
where
I: IntoParallelIterator<Item = Box<str>>,
{
- extend!(self, par_iter, string_extend);
+ extend_reserved!(self, par_iter, string_len);
}
}
@@ -516,17 +535,7 @@
where
I: IntoParallelIterator<Item = Cow<'a, str>>,
{
- extend!(self, par_iter, string_extend);
- }
-}
-
-fn deque_extend<T, Item>(deque: &mut VecDeque<T>, list: LinkedList<Vec<Item>>)
-where
- VecDeque<T>: Extend<Item>,
-{
- deque.reserve(len(&list));
- for vec in list {
- deque.extend(vec);
+ extend_reserved!(self, par_iter, string_len);
}
}
@@ -539,7 +548,7 @@
where
I: IntoParallelIterator<Item = T>,
{
- extend!(self, par_iter, deque_extend);
+ extend_reserved!(self, par_iter);
}
}
@@ -552,14 +561,7 @@
where
I: IntoParallelIterator<Item = &'a T>,
{
- extend!(self, par_iter, deque_extend);
- }
-}
-
-fn vec_append<T>(vec: &mut Vec<T>, list: LinkedList<Vec<T>>) {
- vec.reserve(len(&list));
- for mut other in list {
- vec.append(&mut other);
+ extend_reserved!(self, par_iter);
}
}
@@ -584,7 +586,10 @@
None => {
// This works like `extend`, but `Vec::append` is more efficient.
let list = par_iter.drive_unindexed(ListVecConsumer);
- vec_append(self, list);
+ self.reserve(list.iter().map(Vec::len).sum());
+ for mut other in list {
+ self.append(&mut other);
+ }
}
}
}
diff --git a/crates/rayon/src/iter/find_first_last/mod.rs b/crates/rayon/src/iter/find_first_last/mod.rs
index e5da8f0..a241373 100644
--- a/crates/rayon/src/iter/find_first_last/mod.rs
+++ b/crates/rayon/src/iter/find_first_last/mod.rs
@@ -181,25 +181,17 @@
};
if !found_best_in_range && (self.find_op)(&item) {
- // Continuously try to set best_found until we succeed or we
- // discover a better match was already found.
- let mut current = self.best_found.load(Ordering::Relaxed);
- loop {
- if better_position(current, self.boundary, self.match_position) {
- break;
- }
- match self.best_found.compare_exchange_weak(
- current,
- self.boundary,
- Ordering::Relaxed,
- Ordering::Relaxed,
- ) {
- Ok(_) => {
- self.item = Some(item);
- break;
- }
- Err(v) => current = v,
- }
+ // Update the best found index if ours is better.
+ let update =
+ self.best_found
+ .fetch_update(Ordering::Relaxed, Ordering::Relaxed, |current| {
+ better_position(self.boundary, current, self.match_position)
+ .then_some(self.boundary)
+ });
+
+ // Save this item if our index was better or equal.
+ if update.is_ok() || update == Err(self.boundary) {
+ self.item = Some(item);
}
}
self
diff --git a/crates/rayon/src/iter/find_first_last/test.rs b/crates/rayon/src/iter/find_first_last/test.rs
index 05271bc..374296d 100644
--- a/crates/rayon/src/iter/find_first_last/test.rs
+++ b/crates/rayon/src/iter/find_first_last/test.rs
@@ -1,5 +1,4 @@
use super::*;
-use std::sync::atomic::AtomicUsize;
#[test]
fn same_range_first_consumers_return_correct_answer() {
diff --git a/crates/rayon/src/iter/fold_chunks.rs b/crates/rayon/src/iter/fold_chunks.rs
index 185fb1a..287ec64 100644
--- a/crates/rayon/src/iter/fold_chunks.rs
+++ b/crates/rayon/src/iter/fold_chunks.rs
@@ -201,16 +201,16 @@
assert_eq!(4, (0..8).into_par_iter().fold_chunks(2, id, sum).len());
assert_eq!(3, (0..9).into_par_iter().fold_chunks(3, id, sum).len());
assert_eq!(3, (0..8).into_par_iter().fold_chunks(3, id, sum).len());
- assert_eq!(1, (&[1]).par_iter().fold_chunks(3, id, sum).len());
+ assert_eq!(1, [1].par_iter().fold_chunks(3, id, sum).len());
assert_eq!(0, (0..0).into_par_iter().fold_chunks(3, id, sum).len());
}
#[test]
fn check_fold_chunks_uneven() {
let cases: Vec<(Vec<u32>, usize, Vec<u32>)> = vec![
- ((0..5).collect(), 3, vec![0 + 1 + 2, 3 + 4]),
+ ((0..5).collect(), 3, vec![1 + 2, 3 + 4]),
(vec![1], 5, vec![1]),
- ((0..4).collect(), 3, vec![0 + 1 + 2, 3]),
+ ((0..4).collect(), 3, vec![1 + 2, 3]),
];
for (i, (v, n, expected)) in cases.into_iter().enumerate() {
diff --git a/crates/rayon/src/iter/fold_chunks_with.rs b/crates/rayon/src/iter/fold_chunks_with.rs
index af120ae..e388bdd 100644
--- a/crates/rayon/src/iter/fold_chunks_with.rs
+++ b/crates/rayon/src/iter/fold_chunks_with.rs
@@ -196,16 +196,16 @@
assert_eq!(4, (0..8).into_par_iter().fold_chunks_with(2, 0, sum).len());
assert_eq!(3, (0..9).into_par_iter().fold_chunks_with(3, 0, sum).len());
assert_eq!(3, (0..8).into_par_iter().fold_chunks_with(3, 0, sum).len());
- assert_eq!(1, (&[1]).par_iter().fold_chunks_with(3, 0, sum).len());
+ assert_eq!(1, [1].par_iter().fold_chunks_with(3, 0, sum).len());
assert_eq!(0, (0..0).into_par_iter().fold_chunks_with(3, 0, sum).len());
}
#[test]
fn check_fold_chunks_uneven() {
let cases: Vec<(Vec<u32>, usize, Vec<u32>)> = vec![
- ((0..5).collect(), 3, vec![0 + 1 + 2, 3 + 4]),
+ ((0..5).collect(), 3, vec![1 + 2, 3 + 4]),
(vec![1], 5, vec![1]),
- ((0..4).collect(), 3, vec![0 + 1 + 2, 3]),
+ ((0..4).collect(), 3, vec![1 + 2, 3]),
];
for (i, (v, n, expected)) in cases.into_iter().enumerate() {
diff --git a/crates/rayon/src/iter/from_par_iter.rs b/crates/rayon/src/iter/from_par_iter.rs
index 49afd6c..993899b 100644
--- a/crates/rayon/src/iter/from_par_iter.rs
+++ b/crates/rayon/src/iter/from_par_iter.rs
@@ -5,6 +5,7 @@
use std::collections::LinkedList;
use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet};
use std::collections::{BinaryHeap, VecDeque};
+use std::ffi::{OsStr, OsString};
use std::hash::{BuildHasher, Hash};
use std::rc::Rc;
use std::sync::Arc;
@@ -235,6 +236,36 @@
}
}
+/// Collects OS-string slices from a parallel iterator into an OS-string.
+impl<'a> FromParallelIterator<&'a OsStr> for OsString {
+ fn from_par_iter<I>(par_iter: I) -> Self
+ where
+ I: IntoParallelIterator<Item = &'a OsStr>,
+ {
+ collect_extended(par_iter)
+ }
+}
+
+/// Collects OS-strings from a parallel iterator into one large OS-string.
+impl FromParallelIterator<OsString> for OsString {
+ fn from_par_iter<I>(par_iter: I) -> Self
+ where
+ I: IntoParallelIterator<Item = OsString>,
+ {
+ collect_extended(par_iter)
+ }
+}
+
+/// Collects OS-string slices from a parallel iterator into an OS-string.
+impl<'a> FromParallelIterator<Cow<'a, OsStr>> for OsString {
+ fn from_par_iter<I>(par_iter: I) -> Self
+ where
+ I: IntoParallelIterator<Item = Cow<'a, OsStr>>,
+ {
+ collect_extended(par_iter)
+ }
+}
+
/// Collects an arbitrary `Cow` collection.
///
/// Note, the standard library only has `FromIterator` for `Cow<'a, str>` and
diff --git a/crates/rayon/src/iter/interleave.rs b/crates/rayon/src/iter/interleave.rs
index 3cacc49..f88d31e 100644
--- a/crates/rayon/src/iter/interleave.rs
+++ b/crates/rayon/src/iter/interleave.rs
@@ -1,6 +1,5 @@
use super::plumbing::*;
use super::*;
-use std::cmp;
use std::iter::Fuse;
/// `Interleave` is an iterator that interleaves elements of iterators
@@ -185,11 +184,11 @@
}
fn min_len(&self) -> usize {
- cmp::max(self.i.min_len(), self.j.min_len())
+ Ord::max(self.i.min_len(), self.j.min_len())
}
fn max_len(&self) -> usize {
- cmp::min(self.i.max_len(), self.j.max_len())
+ Ord::min(self.i.max_len(), self.j.max_len())
}
/// We know 0 < index <= self.i_len + self.j_len
diff --git a/crates/rayon/src/iter/len.rs b/crates/rayon/src/iter/len.rs
index 8ec7f33..ba3cca8 100644
--- a/crates/rayon/src/iter/len.rs
+++ b/crates/rayon/src/iter/len.rs
@@ -1,6 +1,5 @@
use super::plumbing::*;
use super::*;
-use std::cmp;
/// `MinLen` is an iterator that imposes a minimum length on iterator splits.
/// This struct is created by the [`with_min_len()`] method on [`IndexedParallelIterator`]
@@ -107,7 +106,7 @@
}
fn min_len(&self) -> usize {
- cmp::max(self.min, self.base.min_len())
+ Ord::max(self.min, self.base.min_len())
}
fn max_len(&self) -> usize {
@@ -245,7 +244,7 @@
}
fn max_len(&self) -> usize {
- cmp::min(self.max, self.base.max_len())
+ Ord::min(self.max, self.base.max_len())
}
fn split_at(self, index: usize) -> (Self, Self) {
diff --git a/crates/rayon/src/iter/mod.rs b/crates/rayon/src/iter/mod.rs
index 7b5a29a..9634572 100644
--- a/crates/rayon/src/iter/mod.rs
+++ b/crates/rayon/src/iter/mod.rs
@@ -82,7 +82,8 @@
use self::plumbing::*;
use self::private::Try;
pub use either::Either;
-use std::cmp::{self, Ordering};
+use std::cmp::Ordering;
+use std::collections::LinkedList;
use std::iter::{Product, Sum};
use std::ops::{Fn, RangeBounds};
@@ -102,6 +103,7 @@
// e.g. `find::find()`, are always used **prefixed**, so that they
// can be readily distinguished.
+mod blocks;
mod chain;
mod chunks;
mod cloned;
@@ -154,11 +156,13 @@
mod try_reduce_with;
mod unzip;
mod update;
+mod walk_tree;
mod while_some;
mod zip;
mod zip_eq;
pub use self::{
+ blocks::{ExponentialBlocks, UniformBlocks},
chain::Chain,
chunks::Chunks,
cloned::Cloned,
@@ -198,6 +202,9 @@
take_any_while::TakeAnyWhile,
try_fold::{TryFold, TryFoldWith},
update::Update,
+ walk_tree::{
+ walk_tree, walk_tree_postfix, walk_tree_prefix, WalkTree, WalkTreePostfix, WalkTreePrefix,
+ },
while_some::WhileSome,
zip::Zip,
zip_eq::ZipEq,
@@ -1425,7 +1432,7 @@
/// specified, so if the `Ord` impl is not truly associative, then
/// the results are not deterministic.
///
- /// Basically equivalent to `self.reduce_with(|a, b| cmp::min(a, b))`.
+ /// Basically equivalent to `self.reduce_with(|a, b| Ord::min(a, b))`.
///
/// # Examples
///
@@ -1444,7 +1451,7 @@
where
Self::Item: Ord,
{
- self.reduce_with(cmp::min)
+ self.reduce_with(Ord::min)
}
/// Computes the minimum of all the items in the iterator with respect to
@@ -1523,7 +1530,7 @@
/// specified, so if the `Ord` impl is not truly associative, then
/// the results are not deterministic.
///
- /// Basically equivalent to `self.reduce_with(|a, b| cmp::max(a, b))`.
+ /// Basically equivalent to `self.reduce_with(|a, b| Ord::max(a, b))`.
///
/// # Examples
///
@@ -1542,7 +1549,7 @@
where
Self::Item: Ord,
{
- self.reduce_with(cmp::max)
+ self.reduce_with(Ord::max)
}
/// Computes the maximum of all the items in the iterator with respect to
@@ -1673,6 +1680,9 @@
/// will be stopped, while attempts to the left must continue in case
/// an earlier match is found.
///
+ /// For added performance, you might consider using `find_first` in conjunction with
+ /// [`by_exponential_blocks()`][IndexedParallelIterator::by_exponential_blocks].
+ ///
/// Note that not all parallel iterators have a useful order, much like
/// sequential `HashMap` iteration, so "first" may be nebulous. If you
/// just want the first match that discovered anywhere in the iterator,
@@ -1961,6 +1971,9 @@
/// of how many elements the iterator contains, and even allows you to reuse
/// an existing vector's backing store rather than allocating a fresh vector.
///
+ /// See also [`collect_vec_list()`][Self::collect_vec_list] for collecting
+ /// into a `LinkedList<Vec<T>>`.
+ ///
/// [`IndexedParallelIterator`]: trait.IndexedParallelIterator.html
/// [`collect_into_vec()`]:
/// trait.IndexedParallelIterator.html#method.collect_into_vec
@@ -2339,6 +2352,51 @@
SkipAnyWhile::new(self, predicate)
}
+ /// Collects this iterator into a linked list of vectors.
+ ///
+ /// This is useful when you need to condense a parallel iterator into a collection,
+ /// but have no specific requirements for what that collection should be. If you
+ /// plan to store the collection longer-term, `Vec<T>` is, as always, likely the
+ /// best default choice, despite the overhead that comes from concatenating each
+ /// vector. Or, if this is an `IndexedParallelIterator`, you should also prefer to
+ /// just collect to a `Vec<T>`.
+ ///
+ /// Internally, most [`FromParallelIterator`]/[`ParallelExtend`] implementations
+ /// use this strategy; each job collecting their chunk of the iterator to a `Vec<T>`
+ /// and those chunks getting merged into a `LinkedList`, before then extending the
+ /// collection with each vector. This is a very efficient way to collect an
+ /// unindexed parallel iterator, without much intermediate data movement.
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// # use std::collections::LinkedList;
+ /// use rayon::prelude::*;
+ ///
+ /// let result: LinkedList<Vec<_>> = (0..=100)
+ /// .into_par_iter()
+ /// .filter(|x| x % 2 == 0)
+ /// .flat_map(|x| 0..x)
+ /// .collect_vec_list();
+ ///
+ /// // `par_iter.collect_vec_list().into_iter().flatten()` turns
+ /// // a parallel iterator into a serial one
+ /// let total_len = result.into_iter().flatten().count();
+ /// assert_eq!(total_len, 2550);
+ /// ```
+ fn collect_vec_list(self) -> LinkedList<Vec<Self::Item>> {
+ match extend::fast_collect(self) {
+ Either::Left(vec) => {
+ let mut list = LinkedList::new();
+ if !vec.is_empty() {
+ list.push_back(vec);
+ }
+ list
+ }
+ Either::Right(list) => list,
+ }
+ }
+
/// Internal method used to define the behavior of this parallel
/// iterator. You should not need to call this directly.
///
@@ -2350,7 +2408,7 @@
/// See the [README] for more details on the internals of parallel
/// iterators.
///
- /// [README]: https://github.com/rayon-rs/rayon/blob/master/src/iter/plumbing/README.md
+ /// [README]: https://github.com/rayon-rs/rayon/blob/main/src/iter/plumbing/README.md
fn drive_unindexed<C>(self, consumer: C) -> C::Result
where
C: UnindexedConsumer<Self::Item>;
@@ -2391,6 +2449,70 @@
// Waiting for `ExactSizeIterator::is_empty` to be stabilized. See rust-lang/rust#35428
#[allow(clippy::len_without_is_empty)]
pub trait IndexedParallelIterator: ParallelIterator {
+ /// Divides an iterator into sequential blocks of exponentially-increasing size.
+ ///
+ /// Normally, parallel iterators are recursively divided into tasks in parallel.
+ /// This adaptor changes the default behavior by splitting the iterator into a **sequence**
+ /// of parallel iterators of increasing sizes.
+ /// Sizes grow exponentially in order to avoid creating
+ /// too many blocks. This also allows to balance the current block with all previous ones.
+ ///
+ /// This can have many applications but the most notable ones are:
+ /// - better performance with [`find_first()`][ParallelIterator::find_first]
+ /// - more predictable performance with [`find_any()`][ParallelIterator::find_any]
+ /// or any interruptible computation
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// use rayon::prelude::*;
+ /// assert_eq!((0..10_000).into_par_iter()
+ /// .by_exponential_blocks()
+ /// .find_first(|&e| e==4_999), Some(4_999))
+ /// ```
+ ///
+ /// In this example, without blocks, rayon will split the initial range into two but all work
+ /// on the right hand side (from 5,000 onwards) is **useless** since the sequential algorithm
+ /// never goes there. This means that if two threads are used there will be **no** speedup **at
+ /// all**.
+ ///
+ /// `by_exponential_blocks` on the other hand will start with the leftmost range from 0
+ /// to `p` (threads number), continue with p to 3p, the 3p to 7p...
+ ///
+ /// Each subrange is treated in parallel, while all subranges are treated sequentially.
+ /// We therefore ensure a logarithmic number of blocks (and overhead) while guaranteeing
+ /// we stop at the first block containing the searched data.
+ fn by_exponential_blocks(self) -> ExponentialBlocks<Self> {
+ ExponentialBlocks::new(self)
+ }
+
+ /// Divides an iterator into sequential blocks of the given size.
+ ///
+ /// Normally, parallel iterators are recursively divided into tasks in parallel.
+ /// This adaptor changes the default behavior by splitting the iterator into a **sequence**
+ /// of parallel iterators of given `block_size`.
+ /// The main application is to obtain better
+ /// memory locality (especially if the reduce operation re-use folded data).
+ ///
+ /// **Panics** if `block_size` is 0.
+ ///
+ /// # Example
+ /// ```
+ /// use rayon::prelude::*;
+ /// // during most reductions v1 and v2 fit the cache
+ /// let v = (0u32..10_000_000)
+ /// .into_par_iter()
+ /// .by_uniform_blocks(1_000_000)
+ /// .fold(Vec::new, |mut v, e| { v.push(e); v})
+ /// .reduce(Vec::new, |mut v1, mut v2| { v1.append(&mut v2); v1});
+ /// assert_eq!(v, (0u32..10_000_000).collect::<Vec<u32>>());
+ /// ```
+ #[track_caller]
+ fn by_uniform_blocks(self, block_size: usize) -> UniformBlocks<Self> {
+ assert!(block_size != 0, "block_size must not be zero");
+ UniformBlocks::new(self, block_size)
+ }
+
/// Collects the results of the iterator into the specified
/// vector. The vector is always cleared before execution
/// begins. If possible, reusing the vector across calls can lead
@@ -2556,6 +2678,8 @@
/// [`par_chunks()`]: ../slice/trait.ParallelSlice.html#method.par_chunks
/// [`par_chunks_mut()`]: ../slice/trait.ParallelSliceMut.html#method.par_chunks_mut
///
+ /// **Panics** if `chunk_size` is 0.
+ ///
/// # Examples
///
/// ```
@@ -3123,7 +3247,7 @@
/// See the [README] for more details on the internals of parallel
/// iterators.
///
- /// [README]: https://github.com/rayon-rs/rayon/blob/master/src/iter/plumbing/README.md
+ /// [README]: https://github.com/rayon-rs/rayon/blob/main/src/iter/plumbing/README.md
fn drive<C: Consumer<Self::Item>>(self, consumer: C) -> C::Result;
/// Internal method used to define the behavior of this parallel
@@ -3140,7 +3264,7 @@
/// See the [README] for more details on the internals of parallel
/// iterators.
///
- /// [README]: https://github.com/rayon-rs/rayon/blob/master/src/iter/plumbing/README.md
+ /// [README]: https://github.com/rayon-rs/rayon/blob/main/src/iter/plumbing/README.md
fn with_producer<CB: ProducerCallback<Self::Item>>(self, callback: CB) -> CB::Output;
}
@@ -3188,14 +3312,15 @@
///
/// If your collection is not naturally parallel, the easiest (and
/// fastest) way to do this is often to collect `par_iter` into a
- /// [`LinkedList`] or other intermediate data structure and then
- /// sequentially extend your collection. However, a more 'native'
- /// technique is to use the [`par_iter.fold`] or
+ /// [`LinkedList`] (via [`collect_vec_list`]) or another intermediate
+ /// data structure and then sequentially extend your collection. However,
+ /// a more 'native' technique is to use the [`par_iter.fold`] or
/// [`par_iter.fold_with`] methods to create the collection.
/// Alternatively, if your collection is 'natively' parallel, you
/// can use `par_iter.for_each` to process each element in turn.
///
/// [`LinkedList`]: https://doc.rust-lang.org/std/collections/struct.LinkedList.html
+ /// [`collect_vec_list`]: ParallelIterator::collect_vec_list
/// [`par_iter.fold`]: trait.ParallelIterator.html#method.fold
/// [`par_iter.fold_with`]: trait.ParallelIterator.html#method.fold_with
/// [`par_iter.for_each`]: trait.ParallelIterator.html#method.for_each
diff --git a/crates/rayon/src/iter/par_bridge.rs b/crates/rayon/src/iter/par_bridge.rs
index 17bc15b..5a139ad 100644
--- a/crates/rayon/src/iter/par_bridge.rs
+++ b/crates/rayon/src/iter/par_bridge.rs
@@ -109,24 +109,11 @@
type Item = Iter::Item;
fn split(self) -> (Self, Option<Self>) {
- let mut count = self.split_count.load(Ordering::SeqCst);
-
- loop {
- // Check if the iterator is exhausted
- if let Some(new_count) = count.checked_sub(1) {
- match self.split_count.compare_exchange_weak(
- count,
- new_count,
- Ordering::SeqCst,
- Ordering::SeqCst,
- ) {
- Ok(_) => return (self, Some(self)),
- Err(last_count) => count = last_count,
- }
- } else {
- return (self, None);
- }
- }
+ // Check if the iterator is exhausted
+ let update = self
+ .split_count
+ .fetch_update(Ordering::Relaxed, Ordering::Relaxed, |c| c.checked_sub(1));
+ (self, update.is_ok().then_some(self))
}
fn fold_with<F>(self, mut folder: F) -> F
diff --git a/crates/rayon/src/iter/plumbing/mod.rs b/crates/rayon/src/iter/plumbing/mod.rs
index 71d4fb4..9d08daa 100644
--- a/crates/rayon/src/iter/plumbing/mod.rs
+++ b/crates/rayon/src/iter/plumbing/mod.rs
@@ -2,20 +2,19 @@
//! low-level details -- users of parallel iterators should not need to
//! interact with them directly. See [the `plumbing` README][r] for a general overview.
//!
-//! [r]: https://github.com/rayon-rs/rayon/blob/master/src/iter/plumbing/README.md
+//! [r]: https://github.com/rayon-rs/rayon/blob/main/src/iter/plumbing/README.md
use crate::join_context;
use super::IndexedParallelIterator;
-use std::cmp;
use std::usize;
/// The `ProducerCallback` trait is a kind of generic closure,
/// [analogous to `FnOnce`][FnOnce]. See [the corresponding section in
/// the plumbing README][r] for more details.
///
-/// [r]: https://github.com/rayon-rs/rayon/blob/master/src/iter/plumbing/README.md#producer-callback
+/// [r]: https://github.com/rayon-rs/rayon/blob/main/src/iter/plumbing/README.md#producer-callback
/// [FnOnce]: https://doc.rust-lang.org/std/ops/trait.FnOnce.html
pub trait ProducerCallback<T> {
/// The type of value returned by this callback. Analogous to
@@ -54,7 +53,7 @@
/// constraints on a required IntoIterator trait, so we inline
/// IntoIterator here until that issue is fixed.
///
-/// [r]: https://github.com/rayon-rs/rayon/blob/master/src/iter/plumbing/README.md
+/// [r]: https://github.com/rayon-rs/rayon/blob/main/src/iter/plumbing/README.md
/// [20671]: https://github.com/rust-lang/rust/issues/20671
pub trait Producer: Send + Sized {
/// The type of item that will be produced by this producer once
@@ -121,7 +120,7 @@
/// combine their two results into one. See [the `plumbing`
/// README][r] for further details.
///
-/// [r]: https://github.com/rayon-rs/rayon/blob/master/src/iter/plumbing/README.md
+/// [r]: https://github.com/rayon-rs/rayon/blob/main/src/iter/plumbing/README.md
/// [fold]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.fold
/// [`Folder`]: trait.Folder.html
/// [`Producer`]: trait.Producer.html
@@ -198,7 +197,7 @@
/// used to combine those two results into one. See [the `plumbing`
/// README][r] for further details.
///
-/// [r]: https://github.com/rayon-rs/rayon/blob/master/src/iter/plumbing/README.md
+/// [r]: https://github.com/rayon-rs/rayon/blob/main/src/iter/plumbing/README.md
pub trait Reducer<Result> {
/// Reduce two final results into one; this is executed after a
/// split.
@@ -275,7 +274,7 @@
if stolen {
// This job was stolen! Reset the number of desired splits to the
// thread count, if that's more than we had remaining anyway.
- self.splits = cmp::max(crate::current_num_threads(), self.splits / 2);
+ self.splits = Ord::max(crate::current_num_threads(), self.splits / 2);
true
} else if splits > 0 {
// We have splits remaining, make it so.
@@ -313,14 +312,14 @@
fn new(min: usize, max: usize, len: usize) -> LengthSplitter {
let mut splitter = LengthSplitter {
inner: Splitter::new(),
- min: cmp::max(min, 1),
+ min: Ord::max(min, 1),
};
// Divide the given length by the max working length to get the minimum
// number of splits we need to get under that max. This rounds down,
// but the splitter actually gives `next_power_of_two()` pieces anyway.
// e.g. len 12345 / max 100 = 123 min_splits -> 128 pieces.
- let min_splits = len / cmp::max(max, 1);
+ let min_splits = len / Ord::max(max, 1);
// Only update the value if it's not splitting enough already.
if min_splits > splitter.inner.splits {
diff --git a/crates/rayon/src/iter/skip.rs b/crates/rayon/src/iter/skip.rs
index 2d0f947..c06ca05 100644
--- a/crates/rayon/src/iter/skip.rs
+++ b/crates/rayon/src/iter/skip.rs
@@ -1,7 +1,6 @@
use super::noop::NoopConsumer;
use super::plumbing::*;
use super::*;
-use std::cmp::min;
/// `Skip` is an iterator that skips over the first `n` elements.
/// This struct is created by the [`skip()`] method on [`IndexedParallelIterator`]
@@ -21,7 +20,7 @@
{
/// Creates a new `Skip` iterator.
pub(super) fn new(base: I, n: usize) -> Self {
- let n = min(base.len(), n);
+ let n = Ord::min(base.len(), n);
Skip { base, n }
}
}
diff --git a/crates/rayon/src/iter/step_by.rs b/crates/rayon/src/iter/step_by.rs
index 94b8334..daf2806 100644
--- a/crates/rayon/src/iter/step_by.rs
+++ b/crates/rayon/src/iter/step_by.rs
@@ -1,5 +1,3 @@
-use std::cmp::min;
-
use super::plumbing::*;
use super::*;
use crate::math::div_round_up;
@@ -116,7 +114,7 @@
}
fn split_at(self, index: usize) -> (Self, Self) {
- let elem_index = min(index * self.step, self.len);
+ let elem_index = Ord::min(index * self.step, self.len);
let (left, right) = self.base.split_at(elem_index);
(
diff --git a/crates/rayon/src/iter/take.rs b/crates/rayon/src/iter/take.rs
index 52d15d8..60ec543 100644
--- a/crates/rayon/src/iter/take.rs
+++ b/crates/rayon/src/iter/take.rs
@@ -1,6 +1,5 @@
use super::plumbing::*;
use super::*;
-use std::cmp::min;
/// `Take` is an iterator that iterates over the first `n` elements.
/// This struct is created by the [`take()`] method on [`IndexedParallelIterator`]
@@ -20,7 +19,7 @@
{
/// Creates a new `Take` iterator.
pub(super) fn new(base: I, n: usize) -> Self {
- let n = min(base.len(), n);
+ let n = Ord::min(base.len(), n);
Take { base, n }
}
}
diff --git a/crates/rayon/src/iter/test.rs b/crates/rayon/src/iter/test.rs
index 45fb971..08fd57a 100644
--- a/crates/rayon/src/iter/test.rs
+++ b/crates/rayon/src/iter/test.rs
@@ -7,10 +7,10 @@
use rand::distributions::Standard;
use rand::{Rng, SeedableRng};
use rand_xorshift::XorShiftRng;
-use std::collections::LinkedList;
use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet};
use std::collections::{BinaryHeap, VecDeque};
use std::f64;
+use std::ffi::OsStr;
use std::fmt::Debug;
use std::sync::mpsc;
use std::usize;
@@ -60,8 +60,7 @@
#[test]
fn execute_pseudo_indexed_range() {
- use std::i128::MAX;
- let range = MAX - 1024..MAX;
+ let range = i128::MAX - 1024..i128::MAX;
// Given `Some` length, collecting `Vec` will try to act indexed.
let a = range.clone().into_par_iter();
@@ -278,6 +277,7 @@
let mut v1 = Vec::new();
a.par_iter().skip(0).collect_into_vec(&mut v1);
+ #[allow(clippy::iter_skip_zero)]
let v2 = a.iter().skip(0).collect::<Vec<_>>();
assert_eq!(v1, v2);
@@ -629,7 +629,7 @@
let result = a.par_iter().partial_cmp(b.par_iter());
- assert!(result == None);
+ assert!(result.is_none());
}
#[test]
@@ -984,6 +984,25 @@
}
#[test]
+fn check_slice_split_inclusive() {
+ let v: Vec<_> = (0..1000).collect();
+ for m in 1..100 {
+ let a: Vec<_> = v.split_inclusive(|x| x % m == 0).collect();
+ let b: Vec<_> = v.par_split_inclusive(|x| x % m == 0).collect();
+ assert_eq!(a, b);
+ }
+
+ // same as std::slice::split_inclusive() examples
+ let slice = [10, 40, 33, 20];
+ let v: Vec<_> = slice.par_split_inclusive(|num| num % 3 == 0).collect();
+ assert_eq!(v, &[&slice[..3], &slice[3..]]);
+
+ let slice = [3, 10, 40, 33];
+ let v: Vec<_> = slice.par_split_inclusive(|num| num % 3 == 0).collect();
+ assert_eq!(v, &[&slice[..1], &slice[1..]]);
+}
+
+#[test]
fn check_slice_split_mut() {
let mut v1: Vec<_> = (0..1000).collect();
let mut v2 = v1.clone();
@@ -1002,6 +1021,26 @@
}
#[test]
+fn check_slice_split_inclusive_mut() {
+ let mut v1: Vec<_> = (0..1000).collect();
+ let mut v2 = v1.clone();
+ for m in 1..100 {
+ let a: Vec<_> = v1.split_inclusive_mut(|x| x % m == 0).collect();
+ let b: Vec<_> = v2.par_split_inclusive_mut(|x| x % m == 0).collect();
+ assert_eq!(a, b);
+ }
+
+ // same as std::slice::split_inclusive_mut() example
+ let mut v = [10, 40, 30, 20, 60, 50];
+ v.par_split_inclusive_mut(|num| num % 3 == 0)
+ .for_each(|group| {
+ let terminator_idx = group.len() - 1;
+ group[terminator_idx] = 1;
+ });
+ assert_eq!(v, [10, 40, 1, 20, 1, 1]);
+}
+
+#[test]
fn check_chunks() {
let a: Vec<i32> = vec![1, 5, 10, 4, 100, 3, 1000, 2, 10000, 1];
let par_sum_product_pairs: i32 = a.par_chunks(2).map(|c| c.iter().product::<i32>()).sum();
@@ -1529,13 +1568,27 @@
assert_eq!(a, b);
// Collects `str` into a `String`
- let a: Cow<'_, str> = s.split_whitespace().collect();
- let b: Cow<'_, str> = s.par_split_whitespace().collect();
+ let sw = s.split_whitespace();
+ let psw = s.par_split_whitespace();
+ let a: Cow<'_, str> = sw.clone().collect();
+ let b: Cow<'_, str> = psw.clone().collect();
assert_eq!(a, b);
// Collects `String` into a `String`
- let a: Cow<'_, str> = s.split_whitespace().map(str::to_owned).collect();
- let b: Cow<'_, str> = s.par_split_whitespace().map(str::to_owned).collect();
+ let a: Cow<'_, str> = sw.map(str::to_owned).collect();
+ let b: Cow<'_, str> = psw.map(str::to_owned).collect();
+ assert_eq!(a, b);
+
+ // Collects `OsStr` into a `OsString`
+ let sw = s.split_whitespace().map(OsStr::new);
+ let psw = s.par_split_whitespace().map(OsStr::new);
+ let a: Cow<'_, OsStr> = Cow::Owned(sw.clone().collect());
+ let b: Cow<'_, OsStr> = psw.clone().collect();
+ assert_eq!(a, b);
+
+ // Collects `OsString` into a `OsString`
+ let a: Cow<'_, OsStr> = Cow::Owned(sw.map(OsStr::to_owned).collect());
+ let b: Cow<'_, OsStr> = psw.map(OsStr::to_owned).collect();
assert_eq!(a, b);
}
@@ -1654,8 +1707,8 @@
let range = 0..1024 * 1024;
// Check against normalized values.
- let min_check = cmp::min(cmp::max(min, 1), range.len());
- let max_check = cmp::max(max, min_check.saturating_add(min_check - 1));
+ let min_check = Ord::min(Ord::max(min, 1), range.len());
+ let max_check = Ord::max(max, min_check.saturating_add(min_check - 1));
assert!(
range
@@ -2186,3 +2239,95 @@
assert_eq!(v, vec![vec![1, 0], vec![3, 2, 1, 0]]);
}
+
+#[test]
+fn walk_tree_prefix() {
+ let v: Vec<u32> = crate::iter::walk_tree_prefix(0u32..100, |r| {
+ // root is smallest
+ let mid = (r.start + 1 + r.end) / 2;
+ // small indices to the left, large to the right
+ std::iter::once((r.start + 1)..mid)
+ .chain(std::iter::once(mid..r.end))
+ .filter(|r| !r.is_empty())
+ })
+ .map(|r| r.start)
+ .collect();
+ assert!(v.into_iter().eq(0..100));
+}
+
+#[test]
+fn walk_tree_postfix() {
+ let v: Vec<_> = crate::iter::walk_tree_postfix(0u64..100, |r| {
+ // root is largest
+ let mid = (r.start + r.end - 1) / 2;
+ // small indices to the left, large to the right
+ std::iter::once(r.start..mid)
+ .chain(std::iter::once(mid..(r.end - 1)))
+ .filter(|r| !r.is_empty())
+ })
+ .map(|r| r.end - 1)
+ .collect();
+ assert!(v.into_iter().eq(0..100));
+}
+
+#[test]
+fn walk_flat_tree_prefix() {
+ let v: Vec<_> =
+ crate::iter::walk_tree_prefix(0, |&e| if e < 99 { Some(e + 1) } else { None }).collect();
+ assert!(v.into_iter().eq(0..100));
+}
+
+#[test]
+fn walk_flat_tree_postfix() {
+ let v: Vec<_> =
+ crate::iter::walk_tree_postfix(99, |&e| if e > 0 { Some(e - 1) } else { None }).collect();
+ assert!(v.into_iter().eq(0..100));
+}
+
+#[test]
+fn walk_tree_prefix_degree5() {
+ let depth = 5;
+ let nodes_number = (1 - 5i32.pow(depth)) / (1 - 5);
+ let nodes = (0..nodes_number).collect::<Vec<_>>();
+ let v: Vec<i32> = crate::iter::walk_tree_prefix(nodes.as_slice(), |&r| {
+ r.split_first()
+ .into_iter()
+ .filter_map(|(_, r)| if r.is_empty() { None } else { Some(r) })
+ .flat_map(|r| r.chunks(r.len() / 5))
+ })
+ .filter_map(|r| r.first().copied())
+ .collect();
+ assert_eq!(v, nodes);
+}
+
+#[test]
+fn walk_tree_postfix_degree5() {
+ let depth = 5;
+ let nodes_number = (1 - 5i32.pow(depth)) / (1 - 5);
+ let nodes = (0..nodes_number).collect::<Vec<_>>();
+ let v: Vec<i32> = crate::iter::walk_tree_postfix(nodes.as_slice(), |&r| {
+ r.split_last()
+ .into_iter()
+ .filter_map(|(_, r)| if r.is_empty() { None } else { Some(r) })
+ .flat_map(|r| r.chunks(r.len() / 5))
+ })
+ .filter_map(|r| r.last().copied())
+ .collect();
+ assert_eq!(v, nodes)
+}
+
+#[test]
+fn blocks() {
+ let count = AtomicUsize::new(0);
+ let v: Vec<usize> = (0..1000)
+ .into_par_iter()
+ .map(|_| count.fetch_add(1, Ordering::Relaxed))
+ .by_uniform_blocks(100)
+ .collect();
+ let m = v
+ .chunks(100)
+ .map(|c| c.iter().max().copied().unwrap())
+ .collect::<Vec<usize>>();
+ assert!(m.windows(2).all(|w| w[0].lt(&w[1])));
+ assert_eq!(v.len(), 1000);
+}
diff --git a/crates/rayon/src/iter/walk_tree.rs b/crates/rayon/src/iter/walk_tree.rs
new file mode 100644
index 0000000..f7d6ca8
--- /dev/null
+++ b/crates/rayon/src/iter/walk_tree.rs
@@ -0,0 +1,529 @@
+use crate::iter::plumbing::{bridge_unindexed, Folder, UnindexedConsumer, UnindexedProducer};
+use crate::prelude::*;
+use std::iter::once;
+
+#[derive(Debug)]
+struct WalkTreePrefixProducer<'b, S, B> {
+ to_explore: Vec<S>, // nodes (and subtrees) we have to process
+ seen: Vec<S>, // nodes which have already been explored
+ children_of: &'b B, // function generating children
+}
+
+impl<S, B, I> UnindexedProducer for WalkTreePrefixProducer<'_, S, B>
+where
+ S: Send,
+ B: Fn(&S) -> I + Send + Sync,
+ I: IntoIterator<Item = S>,
+ I::IntoIter: DoubleEndedIterator,
+{
+ type Item = S;
+
+ fn split(mut self) -> (Self, Option<Self>) {
+ // explore while front is of size one.
+ while self.to_explore.len() == 1 {
+ let front_node = self.to_explore.pop().unwrap();
+ self.to_explore
+ .extend((self.children_of)(&front_node).into_iter().rev());
+ self.seen.push(front_node);
+ }
+ // now take half of the front.
+ let right_children = split_vec(&mut self.to_explore);
+ let right = right_children
+ .map(|mut c| {
+ std::mem::swap(&mut c, &mut self.to_explore);
+ WalkTreePrefixProducer {
+ to_explore: c,
+ seen: Vec::new(),
+ children_of: self.children_of,
+ }
+ })
+ .or_else(|| {
+ // we can still try to divide 'seen'
+ let right_seen = split_vec(&mut self.seen);
+ right_seen.map(|s| WalkTreePrefixProducer {
+ to_explore: Default::default(),
+ seen: s,
+ children_of: self.children_of,
+ })
+ });
+ (self, right)
+ }
+
+ fn fold_with<F>(mut self, mut folder: F) -> F
+ where
+ F: Folder<Self::Item>,
+ {
+ // start by consuming everything seen
+ folder = folder.consume_iter(self.seen);
+ if folder.full() {
+ return folder;
+ }
+ // now do all remaining explorations
+ while let Some(e) = self.to_explore.pop() {
+ self.to_explore
+ .extend((self.children_of)(&e).into_iter().rev());
+ folder = folder.consume(e);
+ if folder.full() {
+ return folder;
+ }
+ }
+ folder
+ }
+}
+
+/// ParallelIterator for arbitrary tree-shaped patterns.
+/// Returned by the [`walk_tree_prefix()`] function.
+#[derive(Debug)]
+pub struct WalkTreePrefix<S, B> {
+ initial_state: S,
+ children_of: B,
+}
+
+impl<S, B, I> ParallelIterator for WalkTreePrefix<S, B>
+where
+ S: Send,
+ B: Fn(&S) -> I + Send + Sync,
+ I: IntoIterator<Item = S>,
+ I::IntoIter: DoubleEndedIterator,
+{
+ type Item = S;
+
+ fn drive_unindexed<C>(self, consumer: C) -> C::Result
+ where
+ C: UnindexedConsumer<Self::Item>,
+ {
+ let producer = WalkTreePrefixProducer {
+ to_explore: once(self.initial_state).collect(),
+ seen: Vec::new(),
+ children_of: &self.children_of,
+ };
+ bridge_unindexed(producer, consumer)
+ }
+}
+
+/// Create a tree-like prefix parallel iterator from an initial root node.
+/// The `children_of` function should take a node and return an iterator over its child nodes.
+/// The best parallelization is obtained when the tree is balanced
+/// but we should also be able to handle harder cases.
+///
+/// # Ordering
+///
+/// This function guarantees a prefix ordering. See also [`walk_tree_postfix`],
+/// which guarantees a postfix order.
+/// If you don't care about ordering, you should use [`walk_tree`],
+/// which will use whatever is believed to be fastest.
+/// For example a perfect binary tree of 7 nodes will reduced in the following order:
+///
+/// ```text
+/// a
+/// / \
+/// / \
+/// b c
+/// / \ / \
+/// d e f g
+///
+/// reduced as a,b,d,e,c,f,g
+///
+/// ```
+///
+/// # Example
+///
+/// ```text
+/// 4
+/// / \
+/// / \
+/// 2 3
+/// / \
+/// 1 2
+/// ```
+///
+/// ```
+/// use rayon::iter::walk_tree_prefix;
+/// use rayon::prelude::*;
+///
+/// let par_iter = walk_tree_prefix(4, |&e| {
+/// if e <= 2 {
+/// Vec::new()
+/// } else {
+/// vec![e / 2, e / 2 + 1]
+/// }
+/// });
+/// assert_eq!(par_iter.sum::<u32>(), 12);
+/// ```
+///
+/// # Example
+///
+/// ```
+/// use rayon::prelude::*;
+/// use rayon::iter::walk_tree_prefix;
+///
+/// struct Node {
+/// content: u32,
+/// left: Option<Box<Node>>,
+/// right: Option<Box<Node>>,
+/// }
+///
+/// // Here we loop on the following tree:
+/// //
+/// // 10
+/// // / \
+/// // / \
+/// // 3 14
+/// // \
+/// // \
+/// // 18
+///
+/// let root = Node {
+/// content: 10,
+/// left: Some(Box::new(Node {
+/// content: 3,
+/// left: None,
+/// right: None,
+/// })),
+/// right: Some(Box::new(Node {
+/// content: 14,
+/// left: None,
+/// right: Some(Box::new(Node {
+/// content: 18,
+/// left: None,
+/// right: None,
+/// })),
+/// })),
+/// };
+///
+/// let mut v: Vec<u32> = walk_tree_prefix(&root, |r| {
+/// r.left
+/// .as_ref()
+/// .into_iter()
+/// .chain(r.right.as_ref())
+/// .map(|n| &**n)
+/// })
+/// .map(|node| node.content)
+/// .collect();
+/// assert_eq!(v, vec![10, 3, 14, 18]);
+/// ```
+///
+pub fn walk_tree_prefix<S, B, I>(root: S, children_of: B) -> WalkTreePrefix<S, B>
+where
+ S: Send,
+ B: Fn(&S) -> I + Send + Sync,
+ I: IntoIterator<Item = S>,
+ I::IntoIter: DoubleEndedIterator,
+{
+ WalkTreePrefix {
+ initial_state: root,
+ children_of,
+ }
+}
+
+// post fix
+
+#[derive(Debug)]
+struct WalkTreePostfixProducer<'b, S, B> {
+ to_explore: Vec<S>, // nodes (and subtrees) we have to process
+ seen: Vec<S>, // nodes which have already been explored
+ children_of: &'b B, // function generating children
+}
+
+impl<S, B, I> UnindexedProducer for WalkTreePostfixProducer<'_, S, B>
+where
+ S: Send,
+ B: Fn(&S) -> I + Send + Sync,
+ I: IntoIterator<Item = S>,
+{
+ type Item = S;
+
+ fn split(mut self) -> (Self, Option<Self>) {
+ // explore while front is of size one.
+ while self.to_explore.len() == 1 {
+ let front_node = self.to_explore.pop().unwrap();
+ self.to_explore
+ .extend((self.children_of)(&front_node).into_iter());
+ self.seen.push(front_node);
+ }
+ // now take half of the front.
+ let right_children = split_vec(&mut self.to_explore);
+ let right = right_children
+ .map(|c| {
+ let right_seen = std::mem::take(&mut self.seen); // postfix -> upper nodes are processed last
+ WalkTreePostfixProducer {
+ to_explore: c,
+ seen: right_seen,
+ children_of: self.children_of,
+ }
+ })
+ .or_else(|| {
+ // we can still try to divide 'seen'
+ let right_seen = split_vec(&mut self.seen);
+ right_seen.map(|mut s| {
+ std::mem::swap(&mut self.seen, &mut s);
+ WalkTreePostfixProducer {
+ to_explore: Default::default(),
+ seen: s,
+ children_of: self.children_of,
+ }
+ })
+ });
+ (self, right)
+ }
+
+ fn fold_with<F>(self, mut folder: F) -> F
+ where
+ F: Folder<Self::Item>,
+ {
+ // now do all remaining explorations
+ for e in self.to_explore {
+ folder = consume_rec_postfix(&self.children_of, e, folder);
+ if folder.full() {
+ return folder;
+ }
+ }
+ // end by consuming everything seen
+ folder.consume_iter(self.seen.into_iter().rev())
+ }
+}
+
+fn consume_rec_postfix<F, S, B, I>(children_of: &B, s: S, mut folder: F) -> F
+where
+ F: Folder<S>,
+ B: Fn(&S) -> I,
+ I: IntoIterator<Item = S>,
+{
+ let children = (children_of)(&s).into_iter();
+ for child in children {
+ folder = consume_rec_postfix(children_of, child, folder);
+ if folder.full() {
+ return folder;
+ }
+ }
+ folder.consume(s)
+}
+
+/// ParallelIterator for arbitrary tree-shaped patterns.
+/// Returned by the [`walk_tree_postfix()`] function.
+#[derive(Debug)]
+pub struct WalkTreePostfix<S, B> {
+ initial_state: S,
+ children_of: B,
+}
+
+impl<S, B, I> ParallelIterator for WalkTreePostfix<S, B>
+where
+ S: Send,
+ B: Fn(&S) -> I + Send + Sync,
+ I: IntoIterator<Item = S>,
+{
+ type Item = S;
+
+ fn drive_unindexed<C>(self, consumer: C) -> C::Result
+ where
+ C: UnindexedConsumer<Self::Item>,
+ {
+ let producer = WalkTreePostfixProducer {
+ to_explore: once(self.initial_state).collect(),
+ seen: Vec::new(),
+ children_of: &self.children_of,
+ };
+ bridge_unindexed(producer, consumer)
+ }
+}
+
+/// Divide given vector in two equally sized vectors.
+/// Return `None` if initial size is <=1.
+/// We return the first half and keep the last half in `v`.
+fn split_vec<T>(v: &mut Vec<T>) -> Option<Vec<T>> {
+ if v.len() <= 1 {
+ None
+ } else {
+ let n = v.len() / 2;
+ Some(v.split_off(n))
+ }
+}
+
+/// Create a tree like postfix parallel iterator from an initial root node.
+/// The `children_of` function should take a node and iterate on all of its child nodes.
+/// The best parallelization is obtained when the tree is balanced
+/// but we should also be able to handle harder cases.
+///
+/// # Ordering
+///
+/// This function guarantees a postfix ordering. See also [`walk_tree_prefix`] which guarantees a
+/// prefix order. If you don't care about ordering, you should use [`walk_tree`], which will use
+/// whatever is believed to be fastest.
+///
+/// Between siblings, children are reduced in order -- that is first children are reduced first.
+///
+/// For example a perfect binary tree of 7 nodes will reduced in the following order:
+///
+/// ```text
+/// a
+/// / \
+/// / \
+/// b c
+/// / \ / \
+/// d e f g
+///
+/// reduced as d,e,b,f,g,c,a
+///
+/// ```
+///
+/// # Example
+///
+/// ```text
+/// 4
+/// / \
+/// / \
+/// 2 3
+/// / \
+/// 1 2
+/// ```
+///
+/// ```
+/// use rayon::iter::walk_tree_postfix;
+/// use rayon::prelude::*;
+///
+/// let par_iter = walk_tree_postfix(4, |&e| {
+/// if e <= 2 {
+/// Vec::new()
+/// } else {
+/// vec![e / 2, e / 2 + 1]
+/// }
+/// });
+/// assert_eq!(par_iter.sum::<u32>(), 12);
+/// ```
+///
+/// # Example
+///
+/// ```
+/// use rayon::prelude::*;
+/// use rayon::iter::walk_tree_postfix;
+///
+/// struct Node {
+/// content: u32,
+/// left: Option<Box<Node>>,
+/// right: Option<Box<Node>>,
+/// }
+///
+/// // Here we loop on the following tree:
+/// //
+/// // 10
+/// // / \
+/// // / \
+/// // 3 14
+/// // \
+/// // \
+/// // 18
+///
+/// let root = Node {
+/// content: 10,
+/// left: Some(Box::new(Node {
+/// content: 3,
+/// left: None,
+/// right: None,
+/// })),
+/// right: Some(Box::new(Node {
+/// content: 14,
+/// left: None,
+/// right: Some(Box::new(Node {
+/// content: 18,
+/// left: None,
+/// right: None,
+/// })),
+/// })),
+/// };
+///
+/// let mut v: Vec<u32> = walk_tree_postfix(&root, |r| {
+/// r.left
+/// .as_ref()
+/// .into_iter()
+/// .chain(r.right.as_ref())
+/// .map(|n| &**n)
+/// })
+/// .map(|node| node.content)
+/// .collect();
+/// assert_eq!(v, vec![3, 18, 14, 10]);
+/// ```
+///
+pub fn walk_tree_postfix<S, B, I>(root: S, children_of: B) -> WalkTreePostfix<S, B>
+where
+ S: Send,
+ B: Fn(&S) -> I + Send + Sync,
+ I: IntoIterator<Item = S>,
+{
+ WalkTreePostfix {
+ initial_state: root,
+ children_of,
+ }
+}
+
+/// ParallelIterator for arbitrary tree-shaped patterns.
+/// Returned by the [`walk_tree()`] function.
+#[derive(Debug)]
+pub struct WalkTree<S, B>(WalkTreePostfix<S, B>);
+
+/// Create a tree like parallel iterator from an initial root node.
+/// The `children_of` function should take a node and iterate on all of its child nodes.
+/// The best parallelization is obtained when the tree is balanced
+/// but we should also be able to handle harder cases.
+///
+/// # Ordering
+///
+/// This function does not guarantee any ordering but will
+/// use whatever algorithm is thought to achieve the fastest traversal.
+/// See also [`walk_tree_prefix`] which guarantees a
+/// prefix order and [`walk_tree_postfix`] which guarantees a postfix order.
+///
+/// # Example
+///
+/// ```text
+/// 4
+/// / \
+/// / \
+/// 2 3
+/// / \
+/// 1 2
+/// ```
+///
+/// ```
+/// use rayon::iter::walk_tree;
+/// use rayon::prelude::*;
+///
+/// let par_iter = walk_tree(4, |&e| {
+/// if e <= 2 {
+/// Vec::new()
+/// } else {
+/// vec![e / 2, e / 2 + 1]
+/// }
+/// });
+/// assert_eq!(par_iter.sum::<u32>(), 12);
+/// ```
+pub fn walk_tree<S, B, I>(root: S, children_of: B) -> WalkTree<S, B>
+where
+ S: Send,
+ B: Fn(&S) -> I + Send + Sync,
+ I: IntoIterator<Item = S>,
+ I::IntoIter: DoubleEndedIterator,
+{
+ let walker = WalkTreePostfix {
+ initial_state: root,
+ children_of,
+ };
+ WalkTree(walker)
+}
+
+impl<S, B, I> ParallelIterator for WalkTree<S, B>
+where
+ S: Send,
+ B: Fn(&S) -> I + Send + Sync,
+ I: IntoIterator<Item = S> + Send,
+ I::IntoIter: DoubleEndedIterator,
+{
+ type Item = S;
+
+ fn drive_unindexed<C>(self, consumer: C) -> C::Result
+ where
+ C: UnindexedConsumer<Self::Item>,
+ {
+ self.0.drive_unindexed(consumer)
+ }
+}
diff --git a/crates/rayon/src/iter/zip.rs b/crates/rayon/src/iter/zip.rs
index 33823db..74fc977 100644
--- a/crates/rayon/src/iter/zip.rs
+++ b/crates/rayon/src/iter/zip.rs
@@ -1,6 +1,5 @@
use super::plumbing::*;
use super::*;
-use std::cmp;
use std::iter;
/// `Zip` is an iterator that zips up `a` and `b` into a single iterator
@@ -59,7 +58,7 @@
}
fn len(&self) -> usize {
- cmp::min(self.a.len(), self.b.len())
+ Ord::min(self.a.len(), self.b.len())
}
fn with_producer<CB>(self, callback: CB) -> CB::Output
@@ -135,11 +134,11 @@
}
fn min_len(&self) -> usize {
- cmp::max(self.a.min_len(), self.b.min_len())
+ Ord::max(self.a.min_len(), self.b.min_len())
}
fn max_len(&self) -> usize {
- cmp::min(self.a.max_len(), self.b.max_len())
+ Ord::min(self.a.max_len(), self.b.max_len())
}
fn split_at(self, index: usize) -> (Self, Self) {
diff --git a/crates/rayon/src/lib.rs b/crates/rayon/src/lib.rs
index dc7fcc0..09b5df3 100644
--- a/crates/rayon/src/lib.rs
+++ b/crates/rayon/src/lib.rs
@@ -3,10 +3,10 @@
#![deny(unreachable_pub)]
#![warn(rust_2018_idioms)]
-//! Data-parallelism library that makes it easy to convert sequential
-//! computations into parallel
+//! Rayon is a data-parallelism library that makes it easy to convert sequential
+//! computations into parallel.
//!
-//! Rayon is lightweight and convenient for introducing parallelism into existing
+//! It is lightweight and convenient for introducing parallelism into existing
//! code. It guarantees data-race free executions and takes advantage of
//! parallelism when sensible, based on work-load at runtime.
//!
@@ -85,7 +85,7 @@
//!
//! See [the Rayon FAQ][faq].
//!
-//! [faq]: https://github.com/rayon-rs/rayon/blob/master/FAQ.md
+//! [faq]: https://github.com/rayon-rs/rayon/blob/main/FAQ.md
#[macro_use]
mod delegate;
diff --git a/crates/rayon/src/range.rs b/crates/rayon/src/range.rs
index 57b613e..ed906c7 100644
--- a/crates/rayon/src/range.rs
+++ b/crates/rayon/src/range.rs
@@ -18,10 +18,7 @@
use crate::iter::plumbing::*;
use crate::iter::*;
-use std::char;
-use std::convert::TryFrom;
use std::ops::Range;
-use std::usize;
/// Parallel iterator over a range, implemented for all integer types and `char`.
///
@@ -379,8 +376,6 @@
#[test]
fn test_i128_len_doesnt_overflow() {
- use std::{i128, u128};
-
// Using parse because some versions of rust don't allow long literals
let octillion: i128 = "1000000000000000000000000000".parse().unwrap();
let producer = IterProducer {
@@ -396,7 +391,6 @@
#[test]
fn test_u64_opt_len() {
- use std::{u64, usize};
assert_eq!(Some(100), (0..100u64).into_par_iter().opt_len());
assert_eq!(
Some(usize::MAX),
@@ -415,7 +409,6 @@
#[test]
fn test_u128_opt_len() {
- use std::{u128, usize};
assert_eq!(Some(100), (0..100u128).into_par_iter().opt_len());
assert_eq!(
Some(usize::MAX),
@@ -431,7 +424,6 @@
#[cfg(target_pointer_width = "64")]
fn test_usize_i64_overflow() {
use crate::ThreadPoolBuilder;
- use std::i64;
let iter = (-2..i64::MAX).into_par_iter();
assert_eq!(iter.opt_len(), Some(i64::MAX as usize + 2));
diff --git a/crates/rayon/src/range_inclusive.rs b/crates/rayon/src/range_inclusive.rs
index b7bb0ca..9c10f08 100644
--- a/crates/rayon/src/range_inclusive.rs
+++ b/crates/rayon/src/range_inclusive.rs
@@ -18,7 +18,6 @@
use crate::iter::plumbing::*;
use crate::iter::*;
-use std::char;
use std::ops::RangeInclusive;
/// Parallel iterator over an inclusive range, implemented for all integer types and `char`.
@@ -313,7 +312,6 @@
#[test]
#[cfg(target_pointer_width = "64")]
fn test_u32_opt_len() {
- use std::u32;
assert_eq!(Some(101), (0..=100u32).into_par_iter().opt_len());
assert_eq!(
Some(u32::MAX as usize),
@@ -327,7 +325,6 @@
#[test]
fn test_u64_opt_len() {
- use std::{u64, usize};
assert_eq!(Some(101), (0..=100u64).into_par_iter().opt_len());
assert_eq!(
Some(usize::MAX),
@@ -339,7 +336,6 @@
#[test]
fn test_u128_opt_len() {
- use std::{u128, usize};
assert_eq!(Some(101), (0..=100u128).into_par_iter().opt_len());
assert_eq!(
Some(usize::MAX),
@@ -355,7 +351,6 @@
#[cfg(target_pointer_width = "64")]
fn test_usize_i64_overflow() {
use crate::ThreadPoolBuilder;
- use std::i64;
let iter = (-2..=i64::MAX).into_par_iter();
assert_eq!(iter.opt_len(), Some(i64::MAX as usize + 3));
diff --git a/crates/rayon/src/slice/chunk_by.rs b/crates/rayon/src/slice/chunk_by.rs
new file mode 100644
index 0000000..25833ca
--- /dev/null
+++ b/crates/rayon/src/slice/chunk_by.rs
@@ -0,0 +1,244 @@
+use crate::iter::plumbing::*;
+use crate::iter::*;
+use std::marker::PhantomData;
+use std::{fmt, mem};
+
+trait ChunkBySlice<T>: AsRef<[T]> + Default + Send {
+ fn split(self, index: usize) -> (Self, Self);
+
+ fn find(&self, pred: &impl Fn(&T, &T) -> bool, start: usize, end: usize) -> Option<usize> {
+ self.as_ref()[start..end]
+ .windows(2)
+ .position(move |w| !pred(&w[0], &w[1]))
+ .map(|i| i + 1)
+ }
+
+ fn rfind(&self, pred: &impl Fn(&T, &T) -> bool, end: usize) -> Option<usize> {
+ self.as_ref()[..end]
+ .windows(2)
+ .rposition(move |w| !pred(&w[0], &w[1]))
+ .map(|i| i + 1)
+ }
+}
+
+impl<T: Sync> ChunkBySlice<T> for &[T] {
+ fn split(self, index: usize) -> (Self, Self) {
+ self.split_at(index)
+ }
+}
+
+impl<T: Send> ChunkBySlice<T> for &mut [T] {
+ fn split(self, index: usize) -> (Self, Self) {
+ self.split_at_mut(index)
+ }
+}
+
+struct ChunkByProducer<'p, T, Slice, Pred> {
+ slice: Slice,
+ pred: &'p Pred,
+ tail: usize,
+ marker: PhantomData<fn(&T)>,
+}
+
+// Note: this implementation is very similar to `SplitProducer`.
+impl<T, Slice, Pred> UnindexedProducer for ChunkByProducer<'_, T, Slice, Pred>
+where
+ Slice: ChunkBySlice<T>,
+ Pred: Fn(&T, &T) -> bool + Send + Sync,
+{
+ type Item = Slice;
+
+ fn split(self) -> (Self, Option<Self>) {
+ if self.tail < 2 {
+ return (Self { tail: 0, ..self }, None);
+ }
+
+ // Look forward for the separator, and failing that look backward.
+ let mid = self.tail / 2;
+ let index = match self.slice.find(self.pred, mid, self.tail) {
+ Some(i) => Some(mid + i),
+ None => self.slice.rfind(self.pred, mid + 1),
+ };
+
+ if let Some(index) = index {
+ let (left, right) = self.slice.split(index);
+
+ let (left_tail, right_tail) = if index <= mid {
+ // If we scanned backwards to find the separator, everything in
+ // the right side is exhausted, with no separators left to find.
+ (index, 0)
+ } else {
+ (mid + 1, self.tail - index)
+ };
+
+ // Create the left split before the separator.
+ let left = Self {
+ slice: left,
+ tail: left_tail,
+ ..self
+ };
+
+ // Create the right split following the separator.
+ let right = Self {
+ slice: right,
+ tail: right_tail,
+ ..self
+ };
+
+ (left, Some(right))
+ } else {
+ // The search is exhausted, no more separators...
+ (Self { tail: 0, ..self }, None)
+ }
+ }
+
+ fn fold_with<F>(self, mut folder: F) -> F
+ where
+ F: Folder<Self::Item>,
+ {
+ let Self {
+ slice, pred, tail, ..
+ } = self;
+
+ let (slice, tail) = if tail == slice.as_ref().len() {
+ // No tail section, so just let `consume_iter` do it all.
+ (Some(slice), None)
+ } else if let Some(index) = slice.rfind(pred, tail) {
+ // We found the last separator to complete the tail, so
+ // end with that slice after `consume_iter` finds the rest.
+ let (left, right) = slice.split(index);
+ (Some(left), Some(right))
+ } else {
+ // We know there are no separators at all, so it's all "tail".
+ (None, Some(slice))
+ };
+
+ if let Some(mut slice) = slice {
+ // TODO (MSRV 1.77) use either:
+ // folder.consume_iter(slice.chunk_by(pred))
+ // folder.consume_iter(slice.chunk_by_mut(pred))
+
+ folder = folder.consume_iter(std::iter::from_fn(move || {
+ let len = slice.as_ref().len();
+ if len > 0 {
+ let i = slice.find(pred, 0, len).unwrap_or(len);
+ let (head, tail) = mem::take(&mut slice).split(i);
+ slice = tail;
+ Some(head)
+ } else {
+ None
+ }
+ }));
+ }
+
+ if let Some(tail) = tail {
+ folder = folder.consume(tail);
+ }
+
+ folder
+ }
+}
+
+/// Parallel iterator over slice in (non-overlapping) chunks separated by a predicate.
+///
+/// This struct is created by the [`par_chunk_by`] method on `&[T]`.
+///
+/// [`par_chunk_by`]: trait.ParallelSlice.html#method.par_chunk_by
+pub struct ChunkBy<'data, T, P> {
+ pred: P,
+ slice: &'data [T],
+}
+
+impl<'data, T, P: Clone> Clone for ChunkBy<'data, T, P> {
+ fn clone(&self) -> Self {
+ ChunkBy {
+ pred: self.pred.clone(),
+ slice: self.slice,
+ }
+ }
+}
+
+impl<'data, T: fmt::Debug, P> fmt::Debug for ChunkBy<'data, T, P> {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ f.debug_struct("ChunkBy")
+ .field("slice", &self.slice)
+ .finish()
+ }
+}
+
+impl<'data, T, P> ChunkBy<'data, T, P> {
+ pub(super) fn new(slice: &'data [T], pred: P) -> Self {
+ Self { pred, slice }
+ }
+}
+
+impl<'data, T, P> ParallelIterator for ChunkBy<'data, T, P>
+where
+ T: Sync,
+ P: Fn(&T, &T) -> bool + Send + Sync,
+{
+ type Item = &'data [T];
+
+ fn drive_unindexed<C>(self, consumer: C) -> C::Result
+ where
+ C: UnindexedConsumer<Self::Item>,
+ {
+ bridge_unindexed(
+ ChunkByProducer {
+ tail: self.slice.len(),
+ slice: self.slice,
+ pred: &self.pred,
+ marker: PhantomData,
+ },
+ consumer,
+ )
+ }
+}
+
+/// Parallel iterator over slice in (non-overlapping) mutable chunks
+/// separated by a predicate.
+///
+/// This struct is created by the [`par_chunk_by_mut`] method on `&mut [T]`.
+///
+/// [`par_chunk_by_mut`]: trait.ParallelSliceMut.html#method.par_chunk_by_mut
+pub struct ChunkByMut<'data, T, P> {
+ pred: P,
+ slice: &'data mut [T],
+}
+
+impl<'data, T: fmt::Debug, P> fmt::Debug for ChunkByMut<'data, T, P> {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ f.debug_struct("ChunkByMut")
+ .field("slice", &self.slice)
+ .finish()
+ }
+}
+
+impl<'data, T, P> ChunkByMut<'data, T, P> {
+ pub(super) fn new(slice: &'data mut [T], pred: P) -> Self {
+ Self { pred, slice }
+ }
+}
+
+impl<'data, T, P> ParallelIterator for ChunkByMut<'data, T, P>
+where
+ T: Send,
+ P: Fn(&T, &T) -> bool + Send + Sync,
+{
+ type Item = &'data mut [T];
+
+ fn drive_unindexed<C>(self, consumer: C) -> C::Result
+ where
+ C: UnindexedConsumer<Self::Item>,
+ {
+ bridge_unindexed(
+ ChunkByProducer {
+ tail: self.slice.len(),
+ slice: self.slice,
+ pred: &self.pred,
+ marker: PhantomData,
+ },
+ consumer,
+ )
+ }
+}
diff --git a/crates/rayon/src/slice/chunks.rs b/crates/rayon/src/slice/chunks.rs
index a3cc709..2b8222d 100644
--- a/crates/rayon/src/slice/chunks.rs
+++ b/crates/rayon/src/slice/chunks.rs
@@ -1,7 +1,6 @@
use crate::iter::plumbing::*;
use crate::iter::*;
use crate::math::div_round_up;
-use std::cmp;
/// Parallel iterator over immutable non-overlapping chunks of a slice
#[derive(Debug)]
@@ -74,7 +73,7 @@
}
fn split_at(self, index: usize) -> (Self, Self) {
- let elem_index = cmp::min(index * self.chunk_size, self.slice.len());
+ let elem_index = Ord::min(index * self.chunk_size, self.slice.len());
let (left, right) = self.slice.split_at(elem_index);
(
ChunksProducer {
@@ -255,7 +254,7 @@
}
fn split_at(self, index: usize) -> (Self, Self) {
- let elem_index = cmp::min(index * self.chunk_size, self.slice.len());
+ let elem_index = Ord::min(index * self.chunk_size, self.slice.len());
let (left, right) = self.slice.split_at_mut(elem_index);
(
ChunksMutProducer {
diff --git a/crates/rayon/src/slice/mod.rs b/crates/rayon/src/slice/mod.rs
index dab56de..1a1274b 100644
--- a/crates/rayon/src/slice/mod.rs
+++ b/crates/rayon/src/slice/mod.rs
@@ -5,6 +5,7 @@
//!
//! [std::slice]: https://doc.rust-lang.org/stable/std/slice/
+mod chunk_by;
mod chunks;
mod mergesort;
mod quicksort;
@@ -17,11 +18,12 @@
use crate::iter::plumbing::*;
use crate::iter::*;
use crate::split_producer::*;
-use std::cmp;
+
use std::cmp::Ordering;
use std::fmt::{self, Debug};
use std::mem;
+pub use self::chunk_by::{ChunkBy, ChunkByMut};
pub use self::chunks::{Chunks, ChunksExact, ChunksExactMut, ChunksMut};
pub use self::rchunks::{RChunks, RChunksExact, RChunksExactMut, RChunksMut};
@@ -38,11 +40,11 @@
///
/// ```
/// use rayon::prelude::*;
- /// let smallest = [1, 2, 3, 0, 2, 4, 8, 0, 3, 6, 9]
+ /// let products: Vec<_> = [1, 2, 3, 0, 2, 4, 8, 0, 3, 6, 9]
/// .par_split(|i| *i == 0)
- /// .map(|numbers| numbers.iter().min().unwrap())
- /// .min();
- /// assert_eq!(Some(&1), smallest);
+ /// .map(|numbers| numbers.iter().product::<i32>())
+ /// .collect();
+ /// assert_eq!(products, [6, 64, 162]);
/// ```
fn par_split<P>(&self, separator: P) -> Split<'_, T, P>
where
@@ -54,6 +56,29 @@
}
}
+ /// Returns a parallel iterator over subslices separated by elements that
+ /// match the separator, including the matched part as a terminator.
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// use rayon::prelude::*;
+ /// let lengths: Vec<_> = [1, 2, 3, 0, 2, 4, 8, 0, 3, 6, 9]
+ /// .par_split_inclusive(|i| *i == 0)
+ /// .map(|numbers| numbers.len())
+ /// .collect();
+ /// assert_eq!(lengths, [4, 4, 3]);
+ /// ```
+ fn par_split_inclusive<P>(&self, separator: P) -> SplitInclusive<'_, T, P>
+ where
+ P: Fn(&T) -> bool + Sync + Send,
+ {
+ SplitInclusive {
+ slice: self.as_parallel_slice(),
+ separator,
+ }
+ }
+
/// Returns a parallel iterator over all contiguous windows of length
/// `window_size`. The windows overlap.
///
@@ -150,6 +175,29 @@
assert!(chunk_size != 0, "chunk_size must not be zero");
RChunksExact::new(chunk_size, self.as_parallel_slice())
}
+
+ /// Returns a parallel iterator over the slice producing non-overlapping runs
+ /// of elements using the predicate to separate them.
+ ///
+ /// The predicate is called on two elements following themselves,
+ /// it means the predicate is called on `slice[0]` and `slice[1]`
+ /// then on `slice[1]` and `slice[2]` and so on.
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// use rayon::prelude::*;
+ /// let chunks: Vec<_> = [1, 2, 2, 3, 3, 3].par_chunk_by(|&x, &y| x == y).collect();
+ /// assert_eq!(chunks[0], &[1]);
+ /// assert_eq!(chunks[1], &[2, 2]);
+ /// assert_eq!(chunks[2], &[3, 3, 3]);
+ /// ```
+ fn par_chunk_by<F>(&self, pred: F) -> ChunkBy<'_, T, F>
+ where
+ F: Fn(&T, &T) -> bool + Send + Sync,
+ {
+ ChunkBy::new(self.as_parallel_slice(), pred)
+ }
}
impl<T: Sync> ParallelSlice<T> for [T] {
@@ -187,6 +235,28 @@
}
}
+ /// Returns a parallel iterator over mutable subslices separated by elements
+ /// that match the separator, including the matched part as a terminator.
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// use rayon::prelude::*;
+ /// let mut array = [1, 2, 3, 0, 2, 4, 8, 0, 3, 6, 9];
+ /// array.par_split_inclusive_mut(|i| *i == 0)
+ /// .for_each(|slice| slice.reverse());
+ /// assert_eq!(array, [0, 3, 2, 1, 0, 8, 4, 2, 9, 6, 3]);
+ /// ```
+ fn par_split_inclusive_mut<P>(&mut self, separator: P) -> SplitInclusiveMut<'_, T, P>
+ where
+ P: Fn(&T) -> bool + Sync + Send,
+ {
+ SplitInclusiveMut {
+ slice: self.as_parallel_slice_mut(),
+ separator,
+ }
+ }
+
/// Returns a parallel iterator over at most `chunk_size` elements of
/// `self` at a time. The chunks are mutable and do not overlap.
///
@@ -659,6 +729,30 @@
{
par_quicksort(self.as_parallel_slice_mut(), |a, b| f(a).lt(&f(b)));
}
+
+ /// Returns a parallel iterator over the slice producing non-overlapping mutable
+ /// runs of elements using the predicate to separate them.
+ ///
+ /// The predicate is called on two elements following themselves,
+ /// it means the predicate is called on `slice[0]` and `slice[1]`
+ /// then on `slice[1]` and `slice[2]` and so on.
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// use rayon::prelude::*;
+ /// let mut xs = [1, 2, 2, 3, 3, 3];
+ /// let chunks: Vec<_> = xs.par_chunk_by_mut(|&x, &y| x == y).collect();
+ /// assert_eq!(chunks[0], &mut [1]);
+ /// assert_eq!(chunks[1], &mut [2, 2]);
+ /// assert_eq!(chunks[2], &mut [3, 3, 3]);
+ /// ```
+ fn par_chunk_by_mut<F>(&mut self, pred: F) -> ChunkByMut<'_, T, F>
+ where
+ F: Fn(&T, &T) -> bool + Send + Sync,
+ {
+ ChunkByMut::new(self.as_parallel_slice_mut(), pred)
+ }
}
impl<T: Send> ParallelSliceMut<T> for [T] {
@@ -817,7 +911,7 @@
}
fn split_at(self, index: usize) -> (Self, Self) {
- let left_index = cmp::min(self.slice.len(), index + (self.window_size - 1));
+ let left_index = Ord::min(self.slice.len(), index + (self.window_size - 1));
let left = &self.slice[..left_index];
let right = &self.slice[index..];
(
@@ -932,6 +1026,46 @@
}
}
+/// Parallel iterator over slices separated by a predicate,
+/// including the matched part as a terminator.
+pub struct SplitInclusive<'data, T, P> {
+ slice: &'data [T],
+ separator: P,
+}
+
+impl<'data, T, P: Clone> Clone for SplitInclusive<'data, T, P> {
+ fn clone(&self) -> Self {
+ SplitInclusive {
+ separator: self.separator.clone(),
+ ..*self
+ }
+ }
+}
+
+impl<'data, T: Debug, P> Debug for SplitInclusive<'data, T, P> {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ f.debug_struct("SplitInclusive")
+ .field("slice", &self.slice)
+ .finish()
+ }
+}
+
+impl<'data, T, P> ParallelIterator for SplitInclusive<'data, T, P>
+where
+ P: Fn(&T) -> bool + Sync + Send,
+ T: Sync,
+{
+ type Item = &'data [T];
+
+ fn drive_unindexed<C>(self, consumer: C) -> C::Result
+ where
+ C: UnindexedConsumer<Self::Item>,
+ {
+ let producer = SplitInclusiveProducer::new_incl(self.slice, &self.separator);
+ bridge_unindexed(producer, consumer)
+ }
+}
+
/// Implement support for `SplitProducer`.
impl<'data, T, P> Fissile<P> for &'data [T]
where
@@ -953,21 +1087,31 @@
self[..end].iter().rposition(separator)
}
- fn split_once(self, index: usize) -> (Self, Self) {
- let (left, right) = self.split_at(index);
- (left, &right[1..]) // skip the separator
+ fn split_once<const INCL: bool>(self, index: usize) -> (Self, Self) {
+ if INCL {
+ // include the separator in the left side
+ self.split_at(index + 1)
+ } else {
+ let (left, right) = self.split_at(index);
+ (left, &right[1..]) // skip the separator
+ }
}
- fn fold_splits<F>(self, separator: &P, folder: F, skip_last: bool) -> F
+ fn fold_splits<F, const INCL: bool>(self, separator: &P, folder: F, skip_last: bool) -> F
where
F: Folder<Self>,
Self: Send,
{
- let mut split = self.split(separator);
- if skip_last {
- split.next_back();
+ if INCL {
+ debug_assert!(!skip_last);
+ folder.consume_iter(self.split_inclusive(separator))
+ } else {
+ let mut split = self.split(separator);
+ if skip_last {
+ split.next_back();
+ }
+ folder.consume_iter(split)
}
- folder.consume_iter(split)
}
}
@@ -1001,6 +1145,37 @@
}
}
+/// Parallel iterator over mutable slices separated by a predicate,
+/// including the matched part as a terminator.
+pub struct SplitInclusiveMut<'data, T, P> {
+ slice: &'data mut [T],
+ separator: P,
+}
+
+impl<'data, T: Debug, P> Debug for SplitInclusiveMut<'data, T, P> {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ f.debug_struct("SplitInclusiveMut")
+ .field("slice", &self.slice)
+ .finish()
+ }
+}
+
+impl<'data, T, P> ParallelIterator for SplitInclusiveMut<'data, T, P>
+where
+ P: Fn(&T) -> bool + Sync + Send,
+ T: Send,
+{
+ type Item = &'data mut [T];
+
+ fn drive_unindexed<C>(self, consumer: C) -> C::Result
+ where
+ C: UnindexedConsumer<Self::Item>,
+ {
+ let producer = SplitInclusiveProducer::new_incl(self.slice, &self.separator);
+ bridge_unindexed(producer, consumer)
+ }
+}
+
/// Implement support for `SplitProducer`.
impl<'data, T, P> Fissile<P> for &'data mut [T]
where
@@ -1022,20 +1197,30 @@
self[..end].iter().rposition(separator)
}
- fn split_once(self, index: usize) -> (Self, Self) {
- let (left, right) = self.split_at_mut(index);
- (left, &mut right[1..]) // skip the separator
+ fn split_once<const INCL: bool>(self, index: usize) -> (Self, Self) {
+ if INCL {
+ // include the separator in the left side
+ self.split_at_mut(index + 1)
+ } else {
+ let (left, right) = self.split_at_mut(index);
+ (left, &mut right[1..]) // skip the separator
+ }
}
- fn fold_splits<F>(self, separator: &P, folder: F, skip_last: bool) -> F
+ fn fold_splits<F, const INCL: bool>(self, separator: &P, folder: F, skip_last: bool) -> F
where
F: Folder<Self>,
Self: Send,
{
- let mut split = self.split_mut(separator);
- if skip_last {
- split.next_back();
+ if INCL {
+ debug_assert!(!skip_last);
+ folder.consume_iter(self.split_inclusive_mut(separator))
+ } else {
+ let mut split = self.split_mut(separator);
+ if skip_last {
+ split.next_back();
+ }
+ folder.consume_iter(split)
}
- folder.consume_iter(split)
}
}
diff --git a/crates/rayon/src/slice/quicksort.rs b/crates/rayon/src/slice/quicksort.rs
index 2bfc350..f042bd8 100644
--- a/crates/rayon/src/slice/quicksort.rs
+++ b/crates/rayon/src/slice/quicksort.rs
@@ -4,7 +4,6 @@
//! The only difference from the original is that calls to `recurse` are executed in parallel using
//! `rayon_core::join`.
-use std::cmp;
use std::marker::PhantomData;
use std::mem::{self, MaybeUninit};
use std::ptr;
@@ -378,7 +377,7 @@
}
// Number of out-of-order elements to swap between the left and right side.
- let count = cmp::min(width(start_l, end_l), width(start_r, end_r));
+ let count = Ord::min(width(start_l, end_l), width(start_r, end_r));
if count > 0 {
macro_rules! left {
@@ -811,7 +810,7 @@
// Partition the slice.
let (mid, was_p) = partition(v, pivot, is_less);
- was_balanced = cmp::min(mid, len - mid) >= len / 8;
+ was_balanced = Ord::min(mid, len - mid) >= len / 8;
was_partitioned = was_p;
// Split the slice into `left`, `pivot`, and `right`.
@@ -819,7 +818,7 @@
let (pivot, right) = right.split_at_mut(1);
let pivot = &mut pivot[0];
- if cmp::max(left.len(), right.len()) <= MAX_SEQUENTIAL {
+ if Ord::max(left.len(), right.len()) <= MAX_SEQUENTIAL {
// Recurse into the shorter side only in order to minimize the total number of recursive
// calls and consume less stack space. Then just continue with the longer side (this is
// akin to tail recursion).
diff --git a/crates/rayon/src/slice/test.rs b/crates/rayon/src/slice/test.rs
index f74ca0f..2538a86 100644
--- a/crates/rayon/src/slice/test.rs
+++ b/crates/rayon/src/slice/test.rs
@@ -5,6 +5,7 @@
use rand::seq::SliceRandom;
use rand::{thread_rng, Rng};
use std::cmp::Ordering::{Equal, Greater, Less};
+use std::sync::atomic::{AtomicUsize, Ordering::Relaxed};
macro_rules! sort {
($f:ident, $name:ident) => {
@@ -168,3 +169,48 @@
assert_eq!(c.take_remainder(), &[]);
assert_eq!(c.len(), 2);
}
+
+#[test]
+fn slice_chunk_by() {
+ let v: Vec<_> = (0..1000).collect();
+ assert_eq!(v[..0].par_chunk_by(|_, _| todo!()).count(), 0);
+ assert_eq!(v[..1].par_chunk_by(|_, _| todo!()).count(), 1);
+ assert_eq!(v[..2].par_chunk_by(|_, _| true).count(), 1);
+ assert_eq!(v[..2].par_chunk_by(|_, _| false).count(), 2);
+
+ let count = AtomicUsize::new(0);
+ let par: Vec<_> = v
+ .par_chunk_by(|x, y| {
+ count.fetch_add(1, Relaxed);
+ (x % 10 < 3) == (y % 10 < 3)
+ })
+ .collect();
+ assert_eq!(count.into_inner(), v.len() - 1);
+
+ let seq: Vec<_> = v.chunk_by(|x, y| (x % 10 < 3) == (y % 10 < 3)).collect();
+ assert_eq!(par, seq);
+}
+
+#[test]
+fn slice_chunk_by_mut() {
+ let mut v: Vec<_> = (0..1000).collect();
+ assert_eq!(v[..0].par_chunk_by_mut(|_, _| todo!()).count(), 0);
+ assert_eq!(v[..1].par_chunk_by_mut(|_, _| todo!()).count(), 1);
+ assert_eq!(v[..2].par_chunk_by_mut(|_, _| true).count(), 1);
+ assert_eq!(v[..2].par_chunk_by_mut(|_, _| false).count(), 2);
+
+ let mut v2 = v.clone();
+ let count = AtomicUsize::new(0);
+ let par: Vec<_> = v
+ .par_chunk_by_mut(|x, y| {
+ count.fetch_add(1, Relaxed);
+ (x % 10 < 3) == (y % 10 < 3)
+ })
+ .collect();
+ assert_eq!(count.into_inner(), v2.len() - 1);
+
+ let seq: Vec<_> = v2
+ .chunk_by_mut(|x, y| (x % 10 < 3) == (y % 10 < 3))
+ .collect();
+ assert_eq!(par, seq);
+}
diff --git a/crates/rayon/src/split_producer.rs b/crates/rayon/src/split_producer.rs
index 568657a..6e15b79 100644
--- a/crates/rayon/src/split_producer.rs
+++ b/crates/rayon/src/split_producer.rs
@@ -5,7 +5,7 @@
use crate::iter::plumbing::{Folder, UnindexedProducer};
/// Common producer for splitting on a predicate.
-pub(super) struct SplitProducer<'p, P, V> {
+pub(super) struct SplitProducer<'p, P, V, const INCL: bool = false> {
data: V,
separator: &'p P,
@@ -13,14 +13,16 @@
tail: usize,
}
+pub(super) type SplitInclusiveProducer<'p, P, V> = SplitProducer<'p, P, V, true>;
+
/// Helper trait so `&str`, `&[T]`, and `&mut [T]` can share `SplitProducer`.
pub(super) trait Fissile<P>: Sized {
fn length(&self) -> usize;
fn midpoint(&self, end: usize) -> usize;
fn find(&self, separator: &P, start: usize, end: usize) -> Option<usize>;
fn rfind(&self, separator: &P, end: usize) -> Option<usize>;
- fn split_once(self, index: usize) -> (Self, Self);
- fn fold_splits<F>(self, separator: &P, folder: F, skip_last: bool) -> F
+ fn split_once<const INCL: bool>(self, index: usize) -> (Self, Self);
+ fn fold_splits<F, const INCL: bool>(self, separator: &P, folder: F, skip_last: bool) -> F
where
F: Folder<Self>,
Self: Send;
@@ -37,7 +39,25 @@
separator,
}
}
+}
+impl<'p, P, V> SplitInclusiveProducer<'p, P, V>
+where
+ V: Fissile<P> + Send,
+{
+ pub(super) fn new_incl(data: V, separator: &'p P) -> Self {
+ SplitProducer {
+ tail: data.length(),
+ data,
+ separator,
+ }
+ }
+}
+
+impl<'p, P, V, const INCL: bool> SplitProducer<'p, P, V, INCL>
+where
+ V: Fissile<P> + Send,
+{
/// Common `fold_with` implementation, integrating `SplitTerminator`'s
/// need to sometimes skip its final empty item.
pub(super) fn fold_with<F>(self, folder: F, skip_last: bool) -> F
@@ -52,12 +72,12 @@
if tail == data.length() {
// No tail section, so just let `fold_splits` handle it.
- data.fold_splits(separator, folder, skip_last)
+ data.fold_splits::<F, INCL>(separator, folder, skip_last)
} else if let Some(index) = data.rfind(separator, tail) {
// We found the last separator to complete the tail, so
// end with that slice after `fold_splits` finds the rest.
- let (left, right) = data.split_once(index);
- let folder = left.fold_splits(separator, folder, false);
+ let (left, right) = data.split_once::<INCL>(index);
+ let folder = left.fold_splits::<F, INCL>(separator, folder, false);
if skip_last || folder.full() {
folder
} else {
@@ -74,7 +94,7 @@
}
}
-impl<'p, P, V> UnindexedProducer for SplitProducer<'p, P, V>
+impl<'p, P, V, const INCL: bool> UnindexedProducer for SplitProducer<'p, P, V, INCL>
where
V: Fissile<P> + Send,
P: Sync,
@@ -91,7 +111,7 @@
if let Some(index) = index {
let len = self.data.length();
- let (left, right) = self.data.split_once(index);
+ let (left, right) = self.data.split_once::<INCL>(index);
let (left_tail, right_tail) = if index < mid {
// If we scanned backwards to find the separator, everything in
diff --git a/crates/rayon/src/str.rs b/crates/rayon/src/str.rs
index c85754e..1e560a2 100644
--- a/crates/rayon/src/str.rs
+++ b/crates/rayon/src/str.rs
@@ -6,8 +6,8 @@
//! Note: [`ParallelString::par_split()`] and [`par_split_terminator()`]
//! reference a `Pattern` trait which is not visible outside this crate.
//! This trait is intentionally kept private, for use only by Rayon itself.
-//! It is implemented for `char`, `&[char]`, and any function or closure
-//! `F: Fn(char) -> bool + Sync + Send`.
+//! It is implemented for `char`, `&[char]`, `[char; N]`, `&[char; N]`,
+//! and any function or closure `F: Fn(char) -> bool + Sync + Send`.
//!
//! [`ParallelString::par_split()`]: trait.ParallelString.html#method.par_split
//! [`par_split_terminator()`]: trait.ParallelString.html#method.par_split_terminator
@@ -140,8 +140,8 @@
/// given character or predicate, similar to `str::split`.
///
/// Note: the `Pattern` trait is private, for use only by Rayon itself.
- /// It is implemented for `char`, `&[char]`, and any function or closure
- /// `F: Fn(char) -> bool + Sync + Send`.
+ /// It is implemented for `char`, `&[char]`, `[char; N]`, `&[char; N]`,
+ /// and any function or closure `F: Fn(char) -> bool + Sync + Send`.
///
/// # Examples
///
@@ -157,14 +157,35 @@
Split::new(self.as_parallel_string(), separator)
}
+ /// Returns a parallel iterator over substrings separated by a
+ /// given character or predicate, keeping the matched part as a terminator
+ /// of the substring similar to `str::split_inclusive`.
+ ///
+ /// Note: the `Pattern` trait is private, for use only by Rayon itself.
+ /// It is implemented for `char`, `&[char]`, `[char; N]`, `&[char; N]`,
+ /// and any function or closure `F: Fn(char) -> bool + Sync + Send`.
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// use rayon::prelude::*;
+ /// let lines: Vec<_> = "Mary had a little lamb\nlittle lamb\nlittle lamb."
+ /// .par_split_inclusive('\n')
+ /// .collect();
+ /// assert_eq!(lines, ["Mary had a little lamb\n", "little lamb\n", "little lamb."]);
+ /// ```
+ fn par_split_inclusive<P: Pattern>(&self, separator: P) -> SplitInclusive<'_, P> {
+ SplitInclusive::new(self.as_parallel_string(), separator)
+ }
+
/// Returns a parallel iterator over substrings terminated by a
/// given character or predicate, similar to `str::split_terminator`.
/// It's equivalent to `par_split`, except it doesn't produce an empty
/// substring after a trailing terminator.
///
/// Note: the `Pattern` trait is private, for use only by Rayon itself.
- /// It is implemented for `char`, `&[char]`, and any function or closure
- /// `F: Fn(char) -> bool + Sync + Send`.
+ /// It is implemented for `char`, `&[char]`, `[char; N]`, `&[char; N]`,
+ /// and any function or closure `F: Fn(char) -> bool + Sync + Send`.
///
/// # Examples
///
@@ -203,6 +224,8 @@
///
/// As with `str::split_whitespace`, 'whitespace' is defined according to
/// the terms of the Unicode Derived Core Property `White_Space`.
+ /// If you only want to split on ASCII whitespace instead, use
+ /// [`par_split_ascii_whitespace`][`ParallelString::par_split_ascii_whitespace`].
///
/// # Examples
///
@@ -213,16 +236,71 @@
/// .max_by_key(|word| word.len());
/// assert_eq!(Some("longest"), longest);
/// ```
+ ///
+ /// All kinds of whitespace are considered:
+ ///
+ /// ```
+ /// use rayon::prelude::*;
+ /// let words: Vec<&str> = " Mary had\ta\u{2009}little \n\t lamb"
+ /// .par_split_whitespace()
+ /// .collect();
+ /// assert_eq!(words, ["Mary", "had", "a", "little", "lamb"]);
+ /// ```
+ ///
+ /// If the string is empty or all whitespace, the iterator yields no string slices:
+ ///
+ /// ```
+ /// use rayon::prelude::*;
+ /// assert_eq!("".par_split_whitespace().count(), 0);
+ /// assert_eq!(" ".par_split_whitespace().count(), 0);
+ /// ```
fn par_split_whitespace(&self) -> SplitWhitespace<'_> {
SplitWhitespace(self.as_parallel_string())
}
+ /// Returns a parallel iterator over the sub-slices of a string that are
+ /// separated by any amount of ASCII whitespace.
+ ///
+ /// To split by Unicode `White_Space` instead, use
+ /// [`par_split_whitespace`][`ParallelString::par_split_whitespace`].
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// use rayon::prelude::*;
+ /// let longest = "which is the longest word?"
+ /// .par_split_ascii_whitespace()
+ /// .max_by_key(|word| word.len());
+ /// assert_eq!(Some("longest"), longest);
+ /// ```
+ ///
+ /// All kinds of ASCII whitespace are considered, but not Unicode `White_Space`:
+ ///
+ /// ```
+ /// use rayon::prelude::*;
+ /// let words: Vec<&str> = " Mary had\ta\u{2009}little \n\t lamb"
+ /// .par_split_ascii_whitespace()
+ /// .collect();
+ /// assert_eq!(words, ["Mary", "had", "a\u{2009}little", "lamb"]);
+ /// ```
+ ///
+ /// If the string is empty or all ASCII whitespace, the iterator yields no string slices:
+ ///
+ /// ```
+ /// use rayon::prelude::*;
+ /// assert_eq!("".par_split_whitespace().count(), 0);
+ /// assert_eq!(" ".par_split_whitespace().count(), 0);
+ /// ```
+ fn par_split_ascii_whitespace(&self) -> SplitAsciiWhitespace<'_> {
+ SplitAsciiWhitespace(self.as_parallel_string())
+ }
+
/// Returns a parallel iterator over substrings that match a
/// given character or predicate, similar to `str::matches`.
///
/// Note: the `Pattern` trait is private, for use only by Rayon itself.
- /// It is implemented for `char`, `&[char]`, and any function or closure
- /// `F: Fn(char) -> bool + Sync + Send`.
+ /// It is implemented for `char`, `&[char]`, `[char; N]`, `&[char; N]`,
+ /// and any function or closure `F: Fn(char) -> bool + Sync + Send`.
///
/// # Examples
///
@@ -245,8 +323,8 @@
/// or predicate, with their positions, similar to `str::match_indices`.
///
/// Note: the `Pattern` trait is private, for use only by Rayon itself.
- /// It is implemented for `char`, `&[char]`, and any function or closure
- /// `F: Fn(char) -> bool + Sync + Send`.
+ /// It is implemented for `char`, `&[char]`, `[char; N]`, `&[char; N]`,
+ /// and any function or closure `F: Fn(char) -> bool + Sync + Send`.
///
/// # Examples
///
@@ -293,6 +371,9 @@
fn fold_splits<'ch, F>(&self, haystack: &'ch str, folder: F, skip_last: bool) -> F
where
F: Folder<&'ch str>;
+ fn fold_inclusive_splits<'ch, F>(&self, haystack: &'ch str, folder: F) -> F
+ where
+ F: Folder<&'ch str>;
fn fold_matches<'ch, F>(&self, haystack: &'ch str, folder: F) -> F
where
F: Folder<&'ch str>;
@@ -338,6 +419,13 @@
folder.consume_iter(split)
}
+ fn fold_inclusive_splits<'ch, F>(&$self, chars: &'ch str, folder: F) -> F
+ where
+ F: Folder<&'ch str>,
+ {
+ folder.consume_iter(chars.split_inclusive($pattern))
+ }
+
fn fold_matches<'ch, F>(&$self, chars: &'ch str, folder: F) -> F
where
F: Folder<&'ch str>,
@@ -362,6 +450,17 @@
impl_pattern!(&self => *self);
}
+// TODO (MSRV 1.75): use `*self` for array patterns too.
+// - Needs `DoubleEndedSearcher` so `split.next_back()` works.
+
+impl<const N: usize> Pattern for [char; N] {
+ impl_pattern!(&self => self.as_slice());
+}
+
+impl<const N: usize> Pattern for &[char; N] {
+ impl_pattern!(&self => self.as_slice());
+}
+
impl<FN: Sync + Send + Fn(char) -> bool> Pattern for FN {
impl_pattern!(&self => self);
}
@@ -600,18 +699,56 @@
separator.rfind_in(&self[..end])
}
- fn split_once(self, index: usize) -> (Self, Self) {
- let (left, right) = self.split_at(index);
- let mut right_iter = right.chars();
- right_iter.next(); // skip the separator
- (left, right_iter.as_str())
+ fn split_once<const INCL: bool>(self, index: usize) -> (Self, Self) {
+ if INCL {
+ // include the separator in the left side
+ let separator = self[index..].chars().next().unwrap();
+ self.split_at(index + separator.len_utf8())
+ } else {
+ let (left, right) = self.split_at(index);
+ let mut right_iter = right.chars();
+ right_iter.next(); // skip the separator
+ (left, right_iter.as_str())
+ }
}
- fn fold_splits<F>(self, separator: &P, folder: F, skip_last: bool) -> F
+ fn fold_splits<F, const INCL: bool>(self, separator: &P, folder: F, skip_last: bool) -> F
where
F: Folder<Self>,
{
- separator.fold_splits(self, folder, skip_last)
+ if INCL {
+ debug_assert!(!skip_last);
+ separator.fold_inclusive_splits(self, folder)
+ } else {
+ separator.fold_splits(self, folder, skip_last)
+ }
+ }
+}
+
+// /////////////////////////////////////////////////////////////////////////
+
+/// Parallel iterator over substrings separated by a pattern
+#[derive(Debug, Clone)]
+pub struct SplitInclusive<'ch, P: Pattern> {
+ chars: &'ch str,
+ separator: P,
+}
+
+impl<'ch, P: Pattern> SplitInclusive<'ch, P> {
+ fn new(chars: &'ch str, separator: P) -> Self {
+ SplitInclusive { chars, separator }
+ }
+}
+
+impl<'ch, P: Pattern> ParallelIterator for SplitInclusive<'ch, P> {
+ type Item = &'ch str;
+
+ fn drive_unindexed<C>(self, consumer: C) -> C::Result
+ where
+ C: UnindexedConsumer<Self::Item>,
+ {
+ let producer = SplitInclusiveProducer::new_incl(self.chars, &self.separator);
+ bridge_unindexed(producer, consumer)
}
}
@@ -733,6 +870,31 @@
// /////////////////////////////////////////////////////////////////////////
+/// Parallel iterator over substrings separated by ASCII whitespace
+#[derive(Debug, Clone)]
+pub struct SplitAsciiWhitespace<'ch>(&'ch str);
+
+#[inline]
+fn is_ascii_whitespace(c: char) -> bool {
+ c.is_ascii_whitespace()
+}
+
+impl<'ch> ParallelIterator for SplitAsciiWhitespace<'ch> {
+ type Item = &'ch str;
+
+ fn drive_unindexed<C>(self, consumer: C) -> C::Result
+ where
+ C: UnindexedConsumer<Self::Item>,
+ {
+ self.0
+ .par_split(is_ascii_whitespace)
+ .filter(not_empty)
+ .drive_unindexed(consumer)
+ }
+}
+
+// /////////////////////////////////////////////////////////////////////////
+
/// Parallel iterator over substrings that match a pattern
#[derive(Debug, Clone)]
pub struct Matches<'ch, P: Pattern> {
diff --git a/crates/rayon/tests/chars.rs b/crates/rayon/tests/chars.rs
index ac8e3f3..6e2804f 100644
--- a/crates/rayon/tests/chars.rs
+++ b/crates/rayon/tests/chars.rs
@@ -1,5 +1,4 @@
use rayon::prelude::*;
-use std::char;
#[test]
fn half_open_correctness() {
diff --git a/crates/rayon/tests/clones.rs b/crates/rayon/tests/clones.rs
index 0d6c864..9ffa1d1 100644
--- a/crates/rayon/tests/clones.rs
+++ b/crates/rayon/tests/clones.rs
@@ -99,20 +99,24 @@
check(s.par_chars());
check(s.par_lines());
check(s.par_split('\n'));
+ check(s.par_split_inclusive('\n'));
check(s.par_split_terminator('\n'));
check(s.par_split_whitespace());
+ check(s.par_split_ascii_whitespace());
}
#[test]
fn clone_vec() {
let v: Vec<_> = (0..1000).collect();
check(v.par_iter());
+ check(v.par_chunk_by(i32::eq));
check(v.par_chunks(42));
check(v.par_chunks_exact(42));
check(v.par_rchunks(42));
check(v.par_rchunks_exact(42));
check(v.par_windows(42));
check(v.par_split(|x| x % 3 == 0));
+ check(v.par_split_inclusive(|x| x % 3 == 0));
check(v.into_par_iter());
}
@@ -125,6 +129,8 @@
#[test]
fn clone_adaptors() {
let v: Vec<_> = (0..1000).map(Some).collect();
+ check(v.par_iter().by_exponential_blocks());
+ check(v.par_iter().by_uniform_blocks(100));
check(v.par_iter().chain(&v));
check(v.par_iter().cloned());
check(v.par_iter().copied());
diff --git a/crates/rayon/tests/debug.rs b/crates/rayon/tests/debug.rs
index 14f3791..97d89cd 100644
--- a/crates/rayon/tests/debug.rs
+++ b/crates/rayon/tests/debug.rs
@@ -104,8 +104,10 @@
check(s.par_chars());
check(s.par_lines());
check(s.par_split('\n'));
+ check(s.par_split_inclusive('\n'));
check(s.par_split_terminator('\n'));
check(s.par_split_whitespace());
+ check(s.par_split_ascii_whitespace());
}
#[test]
@@ -119,6 +121,8 @@
let mut v: Vec<_> = (0..10).collect();
check(v.par_iter());
check(v.par_iter_mut());
+ check(v.par_chunk_by(i32::eq));
+ check(v.par_chunk_by_mut(i32::eq));
check(v.par_chunks(42));
check(v.par_chunks_exact(42));
check(v.par_chunks_mut(42));
@@ -129,7 +133,9 @@
check(v.par_rchunks_exact_mut(42));
check(v.par_windows(42));
check(v.par_split(|x| x % 3 == 0));
+ check(v.par_split_inclusive(|x| x % 3 == 0));
check(v.par_split_mut(|x| x % 3 == 0));
+ check(v.par_split_inclusive_mut(|x| x % 3 == 0));
check(v.par_drain(..));
check(v.into_par_iter());
}
@@ -143,6 +149,8 @@
#[test]
fn debug_adaptors() {
let v: Vec<_> = (0..10).collect();
+ check(v.par_iter().by_exponential_blocks());
+ check(v.par_iter().by_uniform_blocks(5));
check(v.par_iter().chain(&v));
check(v.par_iter().cloned());
check(v.par_iter().copied());
diff --git a/crates/rayon/tests/producer_split_at.rs b/crates/rayon/tests/producer_split_at.rs
index d710504..574fec1 100644
--- a/crates/rayon/tests/producer_split_at.rs
+++ b/crates/rayon/tests/producer_split_at.rs
@@ -116,20 +116,17 @@
#[test]
fn empty() {
- let v = vec![42];
- check(&v[..0], rayon::iter::empty);
+ check(&[], rayon::iter::empty::<i32>);
}
#[test]
fn once() {
- let v = vec![42];
- check(&v, || rayon::iter::once(42));
+ check(&[42], || rayon::iter::once(42));
}
#[test]
fn option() {
- let v = vec![42];
- check(&v, || Some(42));
+ check(&[42], || Some(42));
}
#[test]
diff --git a/crates/rayon/tests/sort-panic-safe.rs b/crates/rayon/tests/sort-panic-safe.rs
index 95ef88d..5ffe2bb 100644
--- a/crates/rayon/tests/sort-panic-safe.rs
+++ b/crates/rayon/tests/sort-panic-safe.rs
@@ -2,12 +2,14 @@
use rand::{thread_rng, Rng};
use rayon::prelude::*;
use std::cell::Cell;
-use std::cmp::{self, Ordering};
+use std::cmp::Ordering;
use std::panic;
use std::sync::atomic::AtomicUsize;
use std::sync::atomic::Ordering::Relaxed;
use std::thread;
+// const is needed for array initializer
+#[allow(clippy::declare_interior_mutable_const)]
const ZERO: AtomicUsize = AtomicUsize::new(0);
const LEN: usize = 20_000;
@@ -28,6 +30,7 @@
}
}
+#[allow(clippy::non_canonical_partial_ord_impl)]
impl PartialOrd for DropCounter {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
self.version.set(self.version.get() + 1);
@@ -66,7 +69,7 @@
let step = if len <= 100 {
1
} else {
- cmp::max(1, panic_countdown / 10)
+ Ord::max(1, panic_countdown / 10)
};
// ... and then panic after each `step` comparisons.
@@ -115,7 +118,7 @@
};
}
-thread_local!(static SILENCE_PANIC: Cell<bool> = Cell::new(false));
+thread_local!(static SILENCE_PANIC: Cell<bool> = const { Cell::new(false) });
#[test]
#[cfg_attr(any(target_os = "emscripten", target_family = "wasm"), ignore)]
@@ -146,8 +149,8 @@
}
for _ in 0..5 {
- let a = rng.sample(&len_dist);
- let b = rng.sample(&len_dist);
+ let a = rng.sample(len_dist);
+ let b = rng.sample(len_dist);
if a < b {
input[a..b].reverse();
} else {
diff --git a/crates/rayon/tests/str.rs b/crates/rayon/tests/str.rs
index f73a261..2c7e549 100644
--- a/crates/rayon/tests/str.rs
+++ b/crates/rayon/tests/str.rs
@@ -56,38 +56,44 @@
("foo\nbar\n\r\nbaz", '\n'),
("A few words", ' '),
(" Mary had\ta\u{2009}little \n\t lamb", ' '),
+ ("Mary had a little lamb\nlittle lamb\nlittle lamb.", '\n'),
+ ("Mary had a little lamb\nlittle lamb\nlittle lamb.\n", '\n'),
(include_str!("str.rs"), ' '),
];
- for &(string, separator) in &tests {
- let serial: Vec<_> = string.split(separator).collect();
- let parallel: Vec<_> = string.par_split(separator).collect();
- assert_eq!(serial, parallel);
+ macro_rules! check_separators {
+ ($split:ident, $par_split:ident) => {
+ for &(string, separator) in &tests {
+ let serial: Vec<_> = string.$split(separator).collect();
+ let parallel: Vec<_> = string.$par_split(separator).collect();
+ assert_eq!(serial, parallel);
- let pattern: &[char] = &['\u{0}', separator, '\u{1F980}'];
- let serial: Vec<_> = string.split(pattern).collect();
- let parallel: Vec<_> = string.par_split(pattern).collect();
- assert_eq!(serial, parallel);
+ let array = ['\u{0}', separator, '\u{1F980}'];
+ let array_ref = &array;
+ let slice: &[char] = array_ref;
- let serial_fn: Vec<_> = string.split(|c| c == separator).collect();
- let parallel_fn: Vec<_> = string.par_split(|c| c == separator).collect();
- assert_eq!(serial_fn, parallel_fn);
+ let serial: Vec<_> = string.$split(slice).collect();
+ let parallel: Vec<_> = string.$par_split(slice).collect();
+ assert_eq!(serial, parallel);
+
+ let serial: Vec<_> = string.$split(array).collect();
+ let parallel: Vec<_> = string.$par_split(array).collect();
+ assert_eq!(serial, parallel);
+
+ let serial: Vec<_> = string.$split(array_ref).collect();
+ let parallel: Vec<_> = string.$par_split(array_ref).collect();
+ assert_eq!(serial, parallel);
+
+ let serial_fn: Vec<_> = string.$split(|c| c == separator).collect();
+ let parallel_fn: Vec<_> = string.$par_split(|c| c == separator).collect();
+ assert_eq!(serial_fn, parallel_fn);
+ }
+ };
}
- for &(string, separator) in &tests {
- let serial: Vec<_> = string.split_terminator(separator).collect();
- let parallel: Vec<_> = string.par_split_terminator(separator).collect();
- assert_eq!(serial, parallel);
-
- let pattern: &[char] = &['\u{0}', separator, '\u{1F980}'];
- let serial: Vec<_> = string.split_terminator(pattern).collect();
- let parallel: Vec<_> = string.par_split_terminator(pattern).collect();
- assert_eq!(serial, parallel);
-
- let serial: Vec<_> = string.split_terminator(|c| c == separator).collect();
- let parallel: Vec<_> = string.par_split_terminator(|c| c == separator).collect();
- assert_eq!(serial, parallel);
- }
+ check_separators!(split, par_split);
+ check_separators!(split_inclusive, par_split_inclusive);
+ check_separators!(split_terminator, par_split_terminator);
for &(string, _) in &tests {
let serial: Vec<_> = string.lines().collect();
@@ -101,34 +107,13 @@
assert_eq!(serial, parallel);
}
+ for &(string, _) in &tests {
+ let serial: Vec<_> = string.split_ascii_whitespace().collect();
+ let parallel: Vec<_> = string.par_split_ascii_whitespace().collect();
+ assert_eq!(serial, parallel);
+ }
+
// try matching separators too!
- for &(string, separator) in &tests {
- let serial: Vec<_> = string.matches(separator).collect();
- let parallel: Vec<_> = string.par_matches(separator).collect();
- assert_eq!(serial, parallel);
-
- let pattern: &[char] = &['\u{0}', separator, '\u{1F980}'];
- let serial: Vec<_> = string.matches(pattern).collect();
- let parallel: Vec<_> = string.par_matches(pattern).collect();
- assert_eq!(serial, parallel);
-
- let serial_fn: Vec<_> = string.matches(|c| c == separator).collect();
- let parallel_fn: Vec<_> = string.par_matches(|c| c == separator).collect();
- assert_eq!(serial_fn, parallel_fn);
- }
-
- for &(string, separator) in &tests {
- let serial: Vec<_> = string.match_indices(separator).collect();
- let parallel: Vec<_> = string.par_match_indices(separator).collect();
- assert_eq!(serial, parallel);
-
- let pattern: &[char] = &['\u{0}', separator, '\u{1F980}'];
- let serial: Vec<_> = string.match_indices(pattern).collect();
- let parallel: Vec<_> = string.par_match_indices(pattern).collect();
- assert_eq!(serial, parallel);
-
- let serial_fn: Vec<_> = string.match_indices(|c| c == separator).collect();
- let parallel_fn: Vec<_> = string.par_match_indices(|c| c == separator).collect();
- assert_eq!(serial_fn, parallel_fn);
- }
+ check_separators!(matches, par_matches);
+ check_separators!(match_indices, par_match_indices);
}
diff --git a/crates/regex-syntax/.android-checksum.json b/crates/regex-syntax/.android-checksum.json
new file mode 100644
index 0000000..4865868
--- /dev/null
+++ b/crates/regex-syntax/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{".cargo-checksum.json":"aeb08dfc27a1512e439a34c815c0371cb3868d64c46aa80fad1b8c31cd2de1a3","src/hir/literal/mod.rs":"95bc863d7d8fbf3a2fadd88ee3f94f11b953d990bef89969b14e3d86782499a2","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","src/unicode_tables/property_bool.rs":"b1f6d1ccd0de55a9bbef5ec1290ad19e0faa0e80519e74ba692d1882c7c5132c","src/unicode_tables/property_names.rs":"f1d0ddd2bfa783c425a7d0aa37a0cc01a7905f3a5c7c4b7c1d65f1dd16a7970e","TEST_MAPPING":"1e98ce8b71fe8a0c851c102629a53472a4ee713c003c1d36f05fdd93423df423","Android.bp":"abec43f226fc9cad33334e87ff961b5008b5f44cac87b303645a68c5534ed758","src/unicode_tables/perl_decimal.rs":"c89644d16aa772c8a46e1ddd0153a4602b4787485913925b8c7b863aa20d62f7","src/utf8.rs":"2ab12da33cc8d09cb72108710a3def444c11322c8008692f353ef7c4ba5c4145","src/hir/interval.rs":"2cf267b6ba93003062197f709c1fabb6db478b3fe665352a35dc42740a5df893","src/parser.rs":"d72672af5332e619542020eca01e9771f90b609944f39e0dc9cf210eeb5dc470","src/unicode.rs":"7ca4ecb0a351f5da530cd8ba7710be7009d811b107e781f741d898ab3363b972","src/unicode_tables/grapheme_cluster_break.rs":"4908cf7b6136f52c13718862a93dfd992085f76e702d6b04e0287e6a0789376b","src/unicode_tables/script_extension.rs":"01ed1d616309f99cfde460cf5715cb66f42f2c743093f0073bc14e657f3132be","src/unicode_tables/general_category.rs":"9026bb33069174b77b006d9f0c55b8026f5328e59e3a2f6ced7372ec46b92011","src/hir/print.rs":"bcfc0379a29c73c23c3415d1e44896401897a6a715b76e3899a7bc2f1566536d","README.md":"c6f7a53058ed848af3ae030c072c28da59f3051556970b1702c4a40f1c345fa9","cargo_embargo.json":"fcadf6fcc638fe9f21a528ff83f7d3abd1ef4a4b86a1a0f8ded8e9e1c1ae5987","src/unicode_tables/property_values.rs":"7f40811da137f967a7248ac39670e59c9669419f747a464633fa5c0fcd6ef368","src/unicode_tables/perl_word.rs":"cab34163fad674e42c41eb6520d23f604771356e0aecf780a7be911d604908a6","src/unicode_tables/age.rs":"3a40178ccd8b715fffe86da4a27d0f8b89380fcd5c2027a06b32ffad6a77ab82","src/unicode_tables/case_folding_simple.rs":"a66060554ff82f05da24b7476243bb11eabac8bc9ee862fb599b5b38415565fb","src/ast/parse.rs":"9c5850d8e285a4be06e89630ed8bb5739bc6ca6f927956a4ee3a38db37902a22","src/ast/print.rs":"0045321c7adcbce67b93d58b2eca0267c3c1503b8551f5ca12a33de2e0af8c02","src/ast/mod.rs":"944aea05708c171700bd23d154e84c6d9d4960d0810dfa596e1b7e57d513212f","LICENSE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","METADATA":"65eadb4387c33cfba6319e018fe9d04e1e47fb8fb141b553efdbbf26a9bba1d5","src/unicode_tables/perl_space.rs":"835081ee822059137f30bffecc45869fde410b560a8760707bcd879a20140e05","src/error.rs":"9c38a48bc5c9c7878797b732eae53226b2f7210697f9baff5406b8e631ee146a","src/unicode_tables/sentence_break.rs":"bb2f3860c6a7dcd09a2b22b0081003e53069f6bca8cb62b3d56cf97b2240ea51","src/ast/visitor.rs":"4e6156ea38a29dff7a9c9535c3d1c304bb5d4d3f19c4e5542272bb0b7b05c2f2","LICENSE-APACHE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","LICENSE-MIT":"16693a68efd65bc6a9df3448c8f7ee6745418c73faff4ec4d443648c04285fa4","src/unicode_tables/word_break.rs":"3214ef5fae17e59c5f4a3870cb185ac63cf12acbbd93d056d4291e1859387600","src/either.rs":"814376b01d3133300f417575754f6526d919cbaee6734fb0e1f0987e833d37d0","src/lib.rs":"85860b98b1956b8b5d371b3a8d0eb74083977ce2ad2ba1ad4f01acdcf32896e4","src/hir/visitor.rs":"7cad55ed431236ff0ae8d20c2ba699c0e6636f810d358d9f539c3b068e6c12ad","src/unicode_tables/LICENSE-UNICODE":"a719fdaf57a3b770dcee2ed2bc3652e891e2a9f7b0bc2933bf77b5fc4d6500ee","src/unicode_tables/script.rs":"7dc5a45869b9207af6e6cdd461111dfd8d718a3f1fbb6375a33105c367862fc9","test":"be0e3fc08857aaf2b51b2611e8911b960cf8811d4ba2b6df6c97a978a6999839","src/hir/mod.rs":"5a0578c8569f7f8a9041da698a6e4e82627f8278a724c214dec1b0a56c2b9727","Cargo.toml":"4ca7c7f6a0cec354290954d2b59e32ff7730ae983cfbfef6d61b3dde09fb69d7","src/unicode_tables/mod.rs":"f795523c148c87497ff62b523370f1ce315efe1da0df10f14d925e965aa03c89","src/hir/translate.rs":"93f668fc5efeb16d261586af506370c3bf7d31ab64d827950a22ae31d31d11f6","benches/bench.rs":"14bf89b1cc8180121f44cf3c5e5c826cc3f5c9b63c49d079b9e3fe891f1f002c"}}
\ No newline at end of file
diff --git a/crates/regex-syntax/Android.bp b/crates/regex-syntax/Android.bp
index 2031713..e57dace 100644
--- a/crates/regex-syntax/Android.bp
+++ b/crates/regex-syntax/Android.bp
@@ -35,6 +35,7 @@
apex_available: [
"//apex_available:platform",
"com.android.compos",
+ "com.android.configinfrastructure",
"com.android.virt",
],
product_available: true,
diff --git a/crates/regex-syntax/cargo_embargo.json b/crates/regex-syntax/cargo_embargo.json
index 3f16d2f..c7cc517 100644
--- a/crates/regex-syntax/cargo_embargo.json
+++ b/crates/regex-syntax/cargo_embargo.json
@@ -2,9 +2,10 @@
"apex_available": [
"//apex_available:platform",
"com.android.compos",
+ "com.android.configinfrastructure",
"com.android.virt"
],
"run_cargo": false,
"tests": true,
- "min_sdk_version": "29",
+ "min_sdk_version": "29"
}
diff --git a/crates/remain/.android-checksum.json b/crates/remain/.android-checksum.json
new file mode 100644
index 0000000..90b6416
--- /dev/null
+++ b/crates/remain/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"tests/ui/unsupported.rs":"fa25bf6bc27dad24d7a2fb23942dc5c3a35058406064bd107b662354918c80a5","tests/ui/match-unstable.rs":"175fbad0431fa248508175de18f9bb59f518609a75bbe9ba553131ba755db598","src/visit.rs":"51ccba6c94d0053030ee41e155a127cd5a1245f8f2010dcf7ad690b1788d851d","tests/ui/unsorted-match-stable.stderr":"88001434fe35cd783d31feee13f6b450f5d0e27848954845af896bed067a9b73",".cargo-checksum.json":"e8eb82d2d9499477b1edeab51b4ffb1dd904a022ba8ad62daa960ba3e8f1398e","tests/stable.rs":"1c44792c3dcb9c99d6e74aa2eae30379c3ccbc920e07100933b8a1beae647d40","src/parse.rs":"f8d688bc46d1b54e910be31e92866956ca0156bad60cc077f7857d58b6dfaf3d","tests/ui/unnamed-fields.stderr":"ede05b50e557369a98be913375714540c04e33e0c67a06e073ebb1f4bdefbf24","tests/ui/match-stable.stderr":"45b8f64c3cc16c6a8e74a5cdc808bd6c444269d8abde82b85285887fc780f01b","tests/ui/match-stable.rs":"200b23f0eb841b827c4ae928d47a21513edc89248cb4a68e549a57180119a4e2","tests/order.rs":"f1f6cc82da212bcc67d40869a0df29cc9ff5bf13a3aba09897bec5837b543b22","LICENSE":"50f827348bfd5def2df4f30cb41264072cf9c180bd9ed698437e8d85b2482754","src/check.rs":"d60685a3053bf34b62ca474e3c3d961ffbc5ad716a7438d1d605e6085b980113","tests/ui/unsorted-struct.stderr":"e334c74c8f1baa01c65c32ac39132cfb15efdb94f657aac09a32fcddefba5d46","src/lib.rs":"895712d29c9c58c96c1eec305212119d55f0390d852319431572576e083248dc","Android.bp":"ed61fd01f4f4a6cf420a8068322aa92cd87ec7e9c34ac93ad0c97ef34f71850c","tests/ui/let-stable.stderr":"dfa443d7e5e312498b260977f26fd98da56489729c60c4254ee6123752fd6cd4","tests/ui/repeat.stderr":"319b454b42edbc62a64cf3afcf40cc865a491e768577073dcf2b8cf6734fee95","tests/compiletest.rs":"8f2cbc080ae802a72afbc627b943e187f66bfe0214f7d989460badb57ddfbb8d","tests/ui/struct.rs":"a2aeea7a29c74dc76829bcc4126d21f3f0086e4cc4c456833a01c3fb497c5dbb","tests/ui/enum.stderr":"25aaacabf55bd52a73ed585dffd6b07d1a51bd3aaad49f2d30910c4aad78ddab","tests/ui/unnamed-fields.rs":"a9dd904fbfd1b3678c0d4024bcc285d6ecaffd902b297644043ef37e4187d60e","tests/ui/unsorted-match-stable.rs":"2ebc8ec162d0179f78b9350c516eee526684eb80412feb1d29a086f07f9e471d","tests/ui/enum.rs":"dc9cbc89232d0e1ae99bda38328ab8fbaa59f7c30034d3f3db851bdb21c0f319","tests/ui/unsorted-enum.stderr":"7707ef9f1e76c643e4bc8daca497c6e686a0ffc5dc284ed0a5784d1596bd2839","tests/ui/unsorted-enum.rs":"43452ce86c9e142f54cbd030eb5f7a21b996dc39c23deaf12f11c3ab1cd81998","METADATA":"edce0e32d7e11152d5d96bf98839c6d25f06cdc8b674d8639bb2272dd5c5d4d6","tests/ui/let-unstable.rs":"c11ce9c83584efabafe9f05f8e5728b276f269f705af3efd532984efa512c5c4","README.md":"ca6f5d223e2232bf54766b451cf055ee5e872a040c69f4f7939a8b9387b009b2","LICENSE-MIT":"38620a3cfaeec97a9197e8c39e436ea7f0bc86699b1f1c35f1aa41785b6d4eac","Cargo.toml":"f0580fcc6b89b6699bc64ff8c0575778d98e8c3a1ff04b557039504292522b17","src/emit.rs":"1cc399b9c9fcaadfbaad756674c3eb4cad9212173dbf6e3a07f5ec91680877d6","tests/ui/unsorted-struct.rs":"daf24ceb1a35803e0b71a9f9ef0840ef338e5afc1480a63768781d9243655fcd","tests/ui/let-stable.rs":"7056943405ac5433eae4a306ddd886c8b68585ceea1b27175e51cc1d4c6c69b6","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","tests/ui/repeat.rs":"9cc6c49e2a4e1b18e89650cf2f9f8755cade66b52edba17ae57b1b0a2fbdb512","tests/unstable.rs":"7681308f7adae7c8b60b2b49fcf7759a1acc31316867467da108b86a78ce9269","TEST_MAPPING":"f13b56f27c5795049ae3d415b3adcb5a8e52973234a4d6ae39946ad5bbd61679","tests/ui/struct.stderr":"aace27891cf6ac82fe4b705cd2f7a7275b408a85848b682730e22ec2fcc33a01","tests/ui/unsupported.stderr":"6f9a56e228143ee60b1e36d761b8050f09cdf4d2209dab0749215ca9c5774107","cargo_embargo.json":"5cbeb8e419a0253697a92702d8bc56f1f2650da67f2605e01c7d0f744f1df4c2","tests/ui/unsorted-match-unstable.rs":"9039b3b2df62a1025ed810baa894a69a918c23c6afca05f6f11cd418f8867378","src/format.rs":"7239c0b64471d5e2d6bfb6f1259ca15759586f4529387b21da1c9d60f81e6601","tests/ui/let-unstable.stderr":"fd6d3438a865b2ca03e3a7066858ae6976736f09a94e84267e2863eb6058572b","tests/ui/unsorted-match-unstable.stderr":"c5d8ed5edf9562e746c3665d45346502435c7fe0cecae61b7a37716bba044e40","LICENSE-APACHE":"50f827348bfd5def2df4f30cb41264072cf9c180bd9ed698437e8d85b2482754","src/compare.rs":"a86d3ed29c98c58c4d5ca1e3050bed97d34328a4e5eca0ab200f6eaa70b07c46","tests/ui/match-unstable.stderr":"236514a469c04bfd2c833b98ff740fb651cef58968cb9ff8e3d6d63d1fa1fa47","src/atom.rs":"a65a8dabb4080c980d3905b5d6f8087ad9b56bb4d1c9549f155a9a06e3b64afc"}}
\ No newline at end of file
diff --git a/crates/remain/.cargo-checksum.json b/crates/remain/.cargo-checksum.json
index c17d5e8..4b2c63d 100644
--- a/crates/remain/.cargo-checksum.json
+++ b/crates/remain/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"5af4e18eca1ce99b769bb5703b69a4ede7ece19d99f20c832680d0d54d4a76d3","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"7c482f96f1bc81adf43e7e80a35cae14266479366d0e164ef0ce2a362492a1e4","src/atom.rs":"713c2d2591c1c331e681372b41006ed4798735fee9070e66c8d8011957d53aed","src/check.rs":"7298e5d45d7d348903a557eb9f42f52fc8b1b9703ed165e1eb12cc532bc01b0d","src/compare.rs":"0a0084ff1863536b01915ed8225860095b06f962f66a51ccb12494d5fcd231d4","src/emit.rs":"95559a0cecd7c6d8143089403faf409ba4ae28d7341ee1c27d143d7517189364","src/format.rs":"dfad2eff460c631b8b6a604db4d8c4f232973c4a52bcad409820652eec231a6d","src/lib.rs":"8bf0db52455f82561c2fe608fbc65912bf39c9d121ef45d8b32494449e73f9e1","src/parse.rs":"57be998eae09676d2b882f0495eaa97c35cd6529028552cc161d8944850753dd","src/visit.rs":"f7495a5f5da2592c34e6b7850a13844231d9da5defafeab5ab580ae4a6e1bf91","tests/compiletest.rs":"022a8e400ef813d7ea1875b944549cee5125f6a995dc33e93b48cba3e1b57bd1","tests/order.rs":"bba01782a898101fbd332417d9dd64f14700df8c880b729bb2b659953535eb16","tests/stable.rs":"1dfb0dc0080f9a2074cfb06d7b246253118c2e1cd6b739e5254ef16f11affcbf","tests/ui/enum.rs":"2e12d32637ce23201698bded6d888e2ea83145a887c97cbb8b0aa16e09fecc33","tests/ui/enum.stderr":"2d93d40bde8118ba67b76330fea0eaf756518853046f63a6ee305562097e7ea5","tests/ui/let-stable.rs":"45d40796a720591d57b8490f28aea2e41d69c5450e75f337312e59c9469b288d","tests/ui/let-stable.stderr":"137ddb59738263ccac0a595806714ea796c2efebb8b6bce05130b56ed0cab15d","tests/ui/let-unstable.rs":"55141eb552856937bd1f16802c9fc5c80e1a84e936b8379b72f6ef7e8b137f3e","tests/ui/let-unstable.stderr":"499d33f1f4e1f5267716ec03b3e88069db2df6cdad08fe1ebec2c63caa2a0e0d","tests/ui/match-stable.rs":"8d9422074a364db27a3ae9f4b0c7869f5b374738315536cf4c1a0a52d4731379","tests/ui/match-stable.stderr":"9ac7a1b08e1a383c687548deb2734fbfd0430d6bec4fd1fdcf039e2ed7e4d33d","tests/ui/match-unstable.rs":"374b606c355ce781406115c9920447bdf517dfd6a5bc9199fd5a1899bfd9b3bf","tests/ui/match-unstable.stderr":"9d57ce00dcdc69e8d9910e9921f3a5aa54e6fb1a860dd5d96e6ba6eef526b3d7","tests/ui/repeat.rs":"56c944e9c153381fba6274186468f085a37be53e88626133482d0c5f7c075c06","tests/ui/repeat.stderr":"e254f734a6081c74016f0211847d48ec1a25c5294d46d8a946da735f853bb491","tests/ui/struct.rs":"2d74dbe91a8af8da4a0f0267d34483dda63274d21f96a8d139d4a890571c233c","tests/ui/struct.stderr":"9a929841d56a0c83de1efc28af85669f0dfdd81487d29267baf91cecbaae2d65","tests/ui/unnamed-fields.rs":"aae1255b0e4e4f2f283d9112478e67ea271783685575db446a7041734043041b","tests/ui/unnamed-fields.stderr":"64043a3c49d62c93c1bc2c6bdda831633dda0c7819fa88de84ac508d705a38a8","tests/ui/unsorted-enum.rs":"56ec446d963972126f56530c03bd35124903515590d8ba73c1f4823c9da4d938","tests/ui/unsorted-enum.stderr":"a1ab5b0a7e351ef60853c39fbdf913295ba65c08137b20f4195db9bd8b79ab84","tests/ui/unsorted-match-stable.rs":"060e10284b10b2c38eca7ff44f35486c9b978e964ca4f1804a0d7bef28048097","tests/ui/unsorted-match-stable.stderr":"6156f6505eb6710d354fa770a27a55e06e5380a9135c2d2faa59dab3947cf2ce","tests/ui/unsorted-match-unstable.rs":"794551ca5ac479a63429167283c9511ddbb4d1b48537b4aabdc98d309fcb069f","tests/ui/unsorted-match-unstable.stderr":"815b2cfefc81cb4359238506e695adfcf0a3bb7554451e36bb295260b7d5fc1d","tests/ui/unsorted-struct.rs":"2c80d7b674297bf4661a9b42e65364a87294505636ebc4069683dc0656e73545","tests/ui/unsorted-struct.stderr":"6c0ff845b64f04351de967304845b98cbb51e39338b8adfb0b9ec1779bdda5aa","tests/ui/unsupported.rs":"ce4252df7a1c6801a0a4e4d962454013f7f137c30f92e501db409a15fdb35dde","tests/ui/unsupported.stderr":"8ccaf4b9b9cf6bea2e78b30a7116457f3126d4fd3d9ac7883a53eaa3398055fe","tests/unstable.rs":"8e78f214d7961face96879e37af409c2eb02ac209f5a6b783a7cb758df98db2d"},"package":"1ad5e011230cad274d0532460c5ab69828ea47ae75681b42a841663efffaf794"}
\ No newline at end of file
+{"files":{"Cargo.toml":"eb454a5adec84563f15babf1edd4c5eda21402b7ddaa93d2e2ccc82a40cceb24","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"7c482f96f1bc81adf43e7e80a35cae14266479366d0e164ef0ce2a362492a1e4","src/atom.rs":"e12584ec554f9ebbd952fc91ad45826734573b06deb4c1b906516a5690862ae9","src/check.rs":"7298e5d45d7d348903a557eb9f42f52fc8b1b9703ed165e1eb12cc532bc01b0d","src/compare.rs":"0a0084ff1863536b01915ed8225860095b06f962f66a51ccb12494d5fcd231d4","src/emit.rs":"95559a0cecd7c6d8143089403faf409ba4ae28d7341ee1c27d143d7517189364","src/format.rs":"dfad2eff460c631b8b6a604db4d8c4f232973c4a52bcad409820652eec231a6d","src/lib.rs":"7fccad0395c4bc7dde8442f63961b8622a3ae978b1f9fbc85f1b4c23f326e9ac","src/parse.rs":"57be998eae09676d2b882f0495eaa97c35cd6529028552cc161d8944850753dd","src/visit.rs":"f7495a5f5da2592c34e6b7850a13844231d9da5defafeab5ab580ae4a6e1bf91","tests/compiletest.rs":"022a8e400ef813d7ea1875b944549cee5125f6a995dc33e93b48cba3e1b57bd1","tests/order.rs":"bba01782a898101fbd332417d9dd64f14700df8c880b729bb2b659953535eb16","tests/stable.rs":"1dfb0dc0080f9a2074cfb06d7b246253118c2e1cd6b739e5254ef16f11affcbf","tests/ui/enum.rs":"2e12d32637ce23201698bded6d888e2ea83145a887c97cbb8b0aa16e09fecc33","tests/ui/enum.stderr":"2d93d40bde8118ba67b76330fea0eaf756518853046f63a6ee305562097e7ea5","tests/ui/let-stable.rs":"45d40796a720591d57b8490f28aea2e41d69c5450e75f337312e59c9469b288d","tests/ui/let-stable.stderr":"137ddb59738263ccac0a595806714ea796c2efebb8b6bce05130b56ed0cab15d","tests/ui/let-unstable.rs":"55141eb552856937bd1f16802c9fc5c80e1a84e936b8379b72f6ef7e8b137f3e","tests/ui/let-unstable.stderr":"499d33f1f4e1f5267716ec03b3e88069db2df6cdad08fe1ebec2c63caa2a0e0d","tests/ui/match-stable.rs":"8d9422074a364db27a3ae9f4b0c7869f5b374738315536cf4c1a0a52d4731379","tests/ui/match-stable.stderr":"9ac7a1b08e1a383c687548deb2734fbfd0430d6bec4fd1fdcf039e2ed7e4d33d","tests/ui/match-unstable.rs":"374b606c355ce781406115c9920447bdf517dfd6a5bc9199fd5a1899bfd9b3bf","tests/ui/match-unstable.stderr":"9d57ce00dcdc69e8d9910e9921f3a5aa54e6fb1a860dd5d96e6ba6eef526b3d7","tests/ui/repeat.rs":"56c944e9c153381fba6274186468f085a37be53e88626133482d0c5f7c075c06","tests/ui/repeat.stderr":"e254f734a6081c74016f0211847d48ec1a25c5294d46d8a946da735f853bb491","tests/ui/struct.rs":"2d74dbe91a8af8da4a0f0267d34483dda63274d21f96a8d139d4a890571c233c","tests/ui/struct.stderr":"9a929841d56a0c83de1efc28af85669f0dfdd81487d29267baf91cecbaae2d65","tests/ui/unnamed-fields.rs":"aae1255b0e4e4f2f283d9112478e67ea271783685575db446a7041734043041b","tests/ui/unnamed-fields.stderr":"64043a3c49d62c93c1bc2c6bdda831633dda0c7819fa88de84ac508d705a38a8","tests/ui/unsorted-enum.rs":"56ec446d963972126f56530c03bd35124903515590d8ba73c1f4823c9da4d938","tests/ui/unsorted-enum.stderr":"a1ab5b0a7e351ef60853c39fbdf913295ba65c08137b20f4195db9bd8b79ab84","tests/ui/unsorted-match-stable.rs":"060e10284b10b2c38eca7ff44f35486c9b978e964ca4f1804a0d7bef28048097","tests/ui/unsorted-match-stable.stderr":"6156f6505eb6710d354fa770a27a55e06e5380a9135c2d2faa59dab3947cf2ce","tests/ui/unsorted-match-unstable.rs":"794551ca5ac479a63429167283c9511ddbb4d1b48537b4aabdc98d309fcb069f","tests/ui/unsorted-match-unstable.stderr":"815b2cfefc81cb4359238506e695adfcf0a3bb7554451e36bb295260b7d5fc1d","tests/ui/unsorted-struct.rs":"2c80d7b674297bf4661a9b42e65364a87294505636ebc4069683dc0656e73545","tests/ui/unsorted-struct.stderr":"6c0ff845b64f04351de967304845b98cbb51e39338b8adfb0b9ec1779bdda5aa","tests/ui/unsupported.rs":"ce4252df7a1c6801a0a4e4d962454013f7f137c30f92e501db409a15fdb35dde","tests/ui/unsupported.stderr":"8ccaf4b9b9cf6bea2e78b30a7116457f3126d4fd3d9ac7883a53eaa3398055fe","tests/unstable.rs":"ade6f43d0e50c4d803f8f48cb27298f0f26a2677946e943b5ea82937e3395288"},"package":"46aef80f842736de545ada6ec65b81ee91504efd6853f4b96de7414c42ae7443"}
\ No newline at end of file
diff --git a/crates/remain/Android.bp b/crates/remain/Android.bp
index 39ce3fe..11a6a74 100644
--- a/crates/remain/Android.bp
+++ b/crates/remain/Android.bp
@@ -17,7 +17,7 @@
name: "libremain",
crate_name: "remain",
cargo_env_compat: true,
- cargo_pkg_version: "0.2.12",
+ cargo_pkg_version: "0.2.14",
crate_root: "src/lib.rs",
edition: "2021",
rustlibs: [
@@ -32,7 +32,7 @@
host_cross_supported: false,
crate_name: "stable",
cargo_env_compat: true,
- cargo_pkg_version: "0.2.12",
+ cargo_pkg_version: "0.2.14",
crate_root: "tests/stable.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -56,7 +56,7 @@
host_cross_supported: false,
crate_name: "unstable",
cargo_env_compat: true,
- cargo_pkg_version: "0.2.12",
+ cargo_pkg_version: "0.2.14",
crate_root: "tests/unstable.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
diff --git a/crates/remain/Cargo.toml b/crates/remain/Cargo.toml
index a65b7cc..ed32667 100644
--- a/crates/remain/Cargo.toml
+++ b/crates/remain/Cargo.toml
@@ -13,8 +13,14 @@
edition = "2021"
rust-version = "1.56"
name = "remain"
-version = "0.2.12"
+version = "0.2.14"
authors = ["David Tolnay <[email protected]>"]
+build = false
+exclude = ["build.rs"]
+autobins = false
+autoexamples = false
+autotests = false
+autobenches = false
description = "Compile-time checks that an enum, struct, or match is written in sorted order."
documentation = "https://docs.rs/remain"
readme = "README.md"
@@ -31,8 +37,26 @@
targets = ["x86_64-unknown-linux-gnu"]
[lib]
+name = "remain"
+path = "src/lib.rs"
proc-macro = true
+[[test]]
+name = "stable"
+path = "tests/stable.rs"
+
+[[test]]
+name = "order"
+path = "tests/order.rs"
+
+[[test]]
+name = "compiletest"
+path = "tests/compiletest.rs"
+
+[[test]]
+name = "unstable"
+path = "tests/unstable.rs"
+
[dependencies.proc-macro2]
version = "1.0.74"
diff --git a/crates/remain/METADATA b/crates/remain/METADATA
index 75ff7d4..a57f7c4 100644
--- a/crates/remain/METADATA
+++ b/crates/remain/METADATA
@@ -1,17 +1,17 @@
name: "remain"
description: "Compile-time checks that an enum, struct, or match is written in sorted order."
third_party {
- version: "0.2.12"
+ version: "0.2.14"
license_type: NOTICE
last_upgrade_date {
year: 2024
- month: 2
- day: 7
+ month: 12
+ day: 20
}
homepage: "https://crates.io/crates/remain"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/remain/remain-0.2.12.crate"
- version: "0.2.12"
+ value: "https://static.crates.io/crates/remain/remain-0.2.14.crate"
+ version: "0.2.14"
}
}
diff --git a/crates/remain/src/atom.rs b/crates/remain/src/atom.rs
index bd1ef86..b595dc4 100644
--- a/crates/remain/src/atom.rs
+++ b/crates/remain/src/atom.rs
@@ -1,4 +1,4 @@
-use std::cmp::{Ord, Ordering, PartialOrd};
+use std::cmp::Ordering;
use std::str;
#[derive(Copy, Clone, Eq, PartialEq)]
diff --git a/crates/remain/src/lib.rs b/crates/remain/src/lib.rs
index 44f81b1..dcd2524 100644
--- a/crates/remain/src/lib.rs
+++ b/crates/remain/src/lib.rs
@@ -143,7 +143,7 @@
//! # fn main() {}
//! ```
-#![doc(html_root_url = "https://docs.rs/remain/0.2.12")]
+#![doc(html_root_url = "https://docs.rs/remain/0.2.14")]
#![allow(
clippy::derive_partial_eq_without_eq,
clippy::enum_glob_use,
diff --git a/crates/remain/tests/unstable.rs b/crates/remain/tests/unstable.rs
index dd9fa80..b306de9 100644
--- a/crates/remain/tests/unstable.rs
+++ b/crates/remain/tests/unstable.rs
@@ -1,6 +1,7 @@
#![allow(dead_code)]
#![cfg(not(remain_stable_testing))]
#![feature(proc_macro_hygiene, stmt_expr_attributes)]
+#![cfg_attr(not(check_cfg), allow(unexpected_cfgs))]
#![allow(
clippy::derive_partial_eq_without_eq,
clippy::extra_unused_type_parameters,
diff --git a/crates/rustc-demangle/.android-checksum.json b/crates/rustc-demangle/.android-checksum.json
new file mode 100644
index 0000000..a7b2d21
--- /dev/null
+++ b/crates/rustc-demangle/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"cargo_embargo.json":"25644c9e2239d482f0457d4b6cb0f92ed570ff3d3433e412023940dfcd6282de","METADATA":"7672cafc74264ec3ca850df5807c303a0be7bcbb13f47b47f858e8b1036add6f","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","src/v0.rs":"8d1848f9b21bd70edd97952985bbc246acf4392341ed470e3ce3e9af8dada851","Cargo.toml":"3085021366dc49ca4f4d2a6cfc8516a38a1d1ca16afb2205cc088adab8620dc1","LICENSE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","README.md":"02a93ea3842604b1eeaa03432c87fbae2aca3b9e08b84f2ac102918345bf1360","src/lib.rs":"1a512f5e4d87d641bf03d6bf945d801bcb0a2d294ef4ff6f9f909d0d2f63222c","src/v0-large-test-symbols/early-recursion-limit":"d0ffb131dbc4e5df9e7cad4bdfada47c73d8182d164acf49ef54347dc4cdb6df","LICENSE-APACHE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","LICENSE-MIT":"f975a1d3055c02b62c0ba925c8204c30f15563946fbf252bffa3a951fb33bcf9","src/legacy.rs":"523fb3d1bdb4fab663c56aedb4e962d8452d461515f0a23c32f02194b9081891",".cargo-checksum.json":"57de72e875a33a8f8ffea369981ef80ecbe01617115e0e51fa05b2dea5943a81","Android.bp":"50aff9f4a4186bed7128d7781d45bee877b3b26965f1197700b7a6298018ba15","TEST_MAPPING":"402c64c1bed286b32380b9bb37008b1d6cd0fe04f8909e3c0bbf062a12106f9c"}}
\ No newline at end of file
diff --git a/crates/rustc-demangle/.cargo-checksum.json b/crates/rustc-demangle/.cargo-checksum.json
index 9ddcdb2..2443228 100644
--- a/crates/rustc-demangle/.cargo-checksum.json
+++ b/crates/rustc-demangle/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"f4132bc65d5e58e2f27b9f9ef197b1c286582137b65285292b75a5a230fc81c8","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"3bb7af78423e95b207beebd452cdd973d65663cf25a0fc9358c588f53783293c","src/legacy.rs":"b4d5a140ed0bf2d792431961d6fd44a21c99235489a2c9f6717d1577a42c09ce","src/lib.rs":"607fe60c1e65da3f86a0b4b8fececb7db79049a0cd4cb316492e8e6593bf39c6","src/v0-large-test-symbols/early-recursion-limit":"96861a7042db35ee0bd04802820d0f2d6a3b534ce13547912b6364001ffd1494","src/v0.rs":"4e5bd069aa61def3dc732b3a285861914895272668ddfcb6b9eef46dd5713041"},"package":"d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"}
\ No newline at end of file
+{"files":{"Cargo.toml":"1e2ff162f1fae19b2e5af0e0e3385e194c929ce98416e8b8af4b9e99412bb0d2","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"3bb7af78423e95b207beebd452cdd973d65663cf25a0fc9358c588f53783293c","src/legacy.rs":"b4d5a140ed0bf2d792431961d6fd44a21c99235489a2c9f6717d1577a42c09ce","src/lib.rs":"607fe60c1e65da3f86a0b4b8fececb7db79049a0cd4cb316492e8e6593bf39c6","src/v0-large-test-symbols/early-recursion-limit":"96861a7042db35ee0bd04802820d0f2d6a3b534ce13547912b6364001ffd1494","src/v0.rs":"bcfaed410cf8383843e2ee8fd3fd46e133cb95a330d431fe6b24062d4762074f"},"package":"719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"}
\ No newline at end of file
diff --git a/crates/rustc-demangle/Android.bp b/crates/rustc-demangle/Android.bp
index 46115e8..c0523cd 100644
--- a/crates/rustc-demangle/Android.bp
+++ b/crates/rustc-demangle/Android.bp
@@ -18,7 +18,7 @@
host_supported: true,
crate_name: "rustc_demangle",
cargo_env_compat: true,
- cargo_pkg_version: "0.1.23",
+ cargo_pkg_version: "0.1.24",
crate_root: "src/lib.rs",
edition: "2015",
features: ["std"],
@@ -42,7 +42,7 @@
host_supported: true,
crate_name: "rustc_demangle",
cargo_env_compat: true,
- cargo_pkg_version: "0.1.23",
+ cargo_pkg_version: "0.1.24",
crate_root: "src/lib.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
diff --git a/crates/rustc-demangle/Cargo.toml b/crates/rustc-demangle/Cargo.toml
index 61238e3..c4e53ab 100644
--- a/crates/rustc-demangle/Cargo.toml
+++ b/crates/rustc-demangle/Cargo.toml
@@ -11,16 +11,21 @@
[package]
name = "rustc-demangle"
-version = "0.1.23"
+version = "0.1.24"
authors = ["Alex Crichton <[email protected]>"]
+build = false
+autobins = false
+autoexamples = false
+autotests = false
+autobenches = false
description = """
Rust compiler symbol demangling.
"""
-homepage = "https://github.com/alexcrichton/rustc-demangle"
+homepage = "https://github.com/rust-lang/rustc-demangle"
documentation = "https://docs.rs/rustc-demangle"
readme = "README.md"
license = "MIT/Apache-2.0"
-repository = "https://github.com/alexcrichton/rustc-demangle"
+repository = "https://github.com/rust-lang/rustc-demangle"
[package.metadata.docs.rs]
features = ["std"]
@@ -32,6 +37,10 @@
[profile.release]
lto = true
+[lib]
+name = "rustc_demangle"
+path = "src/lib.rs"
+
[dependencies.compiler_builtins]
version = "0.1.2"
optional = true
diff --git a/crates/rustc-demangle/METADATA b/crates/rustc-demangle/METADATA
index 69397d1..4b0da2c 100644
--- a/crates/rustc-demangle/METADATA
+++ b/crates/rustc-demangle/METADATA
@@ -1,17 +1,17 @@
name: "rustc-demangle"
description: "Rust compiler symbol demangling."
third_party {
- version: "0.1.23"
+ version: "0.1.24"
license_type: NOTICE
last_upgrade_date {
year: 2024
- month: 2
- day: 8
+ month: 12
+ day: 20
}
homepage: "https://crates.io/crates/rustc-demangle"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/rustc-demangle/rustc-demangle-0.1.23.crate"
- version: "0.1.23"
+ value: "https://static.crates.io/crates/rustc-demangle/rustc-demangle-0.1.24.crate"
+ version: "0.1.24"
}
}
diff --git a/crates/rustc-demangle/src/v0.rs b/crates/rustc-demangle/src/v0.rs
index 3e88fa6..81cbdc4 100644
--- a/crates/rustc-demangle/src/v0.rs
+++ b/crates/rustc-demangle/src/v0.rs
@@ -803,7 +803,7 @@
self.print(name)?;
if let Some(out) = &mut self.out {
- if !out.alternate() {
+ if !out.alternate() && dis != 0 {
out.write_str("[")?;
fmt::LowerHex::fmt(&dis, out)?;
out.write_str("]")?;
@@ -1271,7 +1271,7 @@
t_const!($mangled, $value);
t!(
concat!("_RIC0K", $mangled, "E"),
- concat!("[0]::<", $value, $value_ty_suffix, ">")
+ concat!("::<", $value, $value_ty_suffix, ">")
);
}};
}
@@ -1282,6 +1282,12 @@
}
#[test]
+ fn demangle_crate_with_zero_disambiguator() {
+ t!("_RC4f128", "f128");
+ t_nohash!("_RC4f128", "f128");
+ }
+
+ #[test]
fn demangle_utf8_idents() {
t_nohash!(
"_RNqCs4fqI2P2rA04_11utf8_identsu30____7hkackfecea1cbdathfdh9hlq6y",
diff --git a/crates/ryu/.android-checksum.json b/crates/ryu/.android-checksum.json
index 98e6a9a..a95821d 100644
--- a/crates/ryu/.android-checksum.json
+++ b/crates/ryu/.android-checksum.json
@@ -1 +1 @@
-{"package":null,"files":{"src/s2d.rs":"5dd66391b99d9fcb86ca2e247f1886bfc8855c3ee6121548e2689e1066c0352f","METADATA":"f9ad3cd55da0e2ad469f3c987e6cacc0ff9ee4a02c276015be42ac7489bd8e06","LICENSE-BOOST":"a83f91f3bc906bf412251dedeafc8ce7e8c1c1cc8f7ac68e9927e76ca7e2798f","src/lib.rs":"77922ddf54d474b60b2c65f23946252be8c66b2ef1284c59c68c35cea08ac87d","LICENSE-APACHE":"50f827348bfd5def2df4f30cb41264072cf9c180bd9ed698437e8d85b2482754","LICENSE":"010a014e87d5287d38fd2bb19a1fc01faf03f5c05b0a47c21be94b0ea0497ef8","src/digit_table.rs":"2446328eb610585bf0bf27faed35d38b1848bb5127a099acd42ac36c49c991fa","src/parse.rs":"dadd9d98ccf871a7d2a90c0537b7495220ea02feec7f1e2556f2b691219e5bfd","Cargo.toml":"e1ee634353239e2ec181d4e970ea2e7236af632ce09db69650486c0da73f785d","src/d2s_intrinsics.rs":"fc5c642613a1dc1d67bfbb758ab1c4237d773f489cda9e030f6c3fd86aac0fb4","src/common.rs":"7a0c32d6dd802a9cae7a4abafcd4f51063ea8428b17d9afe420d1735f948ad9c","tests/f2s_test.rs":"736e0104cb6b2a994482d3951c129f79939613f6cb46d0dc2059b9790bacbc00","src/pretty/exponent.rs":"d52adcd7f518395a45b85b460b81ab8ea9a4bd73ac0b09b634f15c027fb490bf","tests/exhaustive.rs":"944ca0b590467ab8a34354daa3ad0c71b23091dff34e1612448a1c17cf87c412","Cargo.lock":"88b13488bc6252f977171922879f6b653ec85e2f30d841a82160471caed3d564","tests/macros/mod.rs":"3b4944363bbb0127d63d253e6017fc89772e02a99a6c68f35868c14bd4c45369",".cargo-checksum.json":"453da3ba82781c4756640bfe3ec952b8213457f491541248b43e87b407788a39","tests/d2s_table_test.rs":"cf07fab2dc8117d4f5321950b63aff4f5d51a4c34e7dc6e1ad9595e42ed70bbd","src/pretty/mantissa.rs":"c6e01ae6ffb86ebc1638a9eef17fc12dae0704cce9c8e4c711c8c9fa60ff03c9","benches/bench.rs":"c5a2bdbc71d5e294a3db795473fed081f400fd40278227cfc0d8d4d5648cacd8","src/pretty/mod.rs":"1bd850479a7d47d6d48891e4e327dbeddf1f759758f3e65db0124d842ffbb343","tests/d2s_intrinsics_test.rs":"a45e55152e97bf3897d9c586e000304df5900bf9ef6bcf2ee8072cd914a9e548","tests/d2s_test.rs":"7c05052312c8a8855ccde45ac20db48c72ee6fe8cab968f0f744808f45cbb86c","examples/upstream_benchmark.rs":"efb945cf51390e7902de202d327ddbe8d698b5fae40507654f39fcc13151c072","src/d2s_full_table.rs":"08fab3b397ef4bdb7ec26008442c991d97c851a49627c27e23fc78526d8adcb7","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","tests/common_test.rs":"6bee28b8270f3ba4a04e8a93891c663a8c7e595a6e66ae55368274fe93a1c717","tests/s2d_test.rs":"aaf39deb09e8fff74d22737d3fc1afdf7c76b1af5b26cfacabe726fcd67caa18","TEST_MAPPING":"4fface3aeaacc26ee715eda88e2eca1eaec62895765aaa58c3a6c1726bfd4380","cargo_embargo.json":"40f98d98a6f4614cc2e26c1f364f1c3294773969ba80561c7030c2a156428ffe","src/f2s.rs":"ce0080f986f8a0cbce03aea25e0a3cc9445f8b81878adc08ce1059dea177d3df","patches/std.diff":"73e8e32adac2c34bf9c9d1386c2035af2746b9a743aeb7cda02176e92c232482","tests/s2f_test.rs":"48ee209ec1d9370da8d0cee7428829b70d8c68c8aa1f6a3ffbd5eec8957f52e0","Android.bp":"4d88e009c18f6ddf238fe75b100508a7ee59ed089eb6bf3ff4e531c8a0077397","src/d2s.rs":"976138e8e634d66b788a9e618b6c8bb9f2a1dce547727bb2096aaa36a88e0f73","src/s2f.rs":"b2ba497088552d3eed0fe8aadaf93c80d24e69937b37b42e6c355d22d0abeb04","README.md":"9c24002ba6587573bb44f26a6dc6145b7877bd247a8b79b501e56166996bb80f","src/buffer/mod.rs":"b7ff2706da10b71593beff85167ba8809bb1586ac0332c46a27e883df41ceeee","patches/LICENSE.patch":"3a10599892df6f584a1e7a72c48be84aad079885df76285fbc9d35c35501bd7d","src/d2s_small_table.rs":"b538b5eb966109b225c9cd202bb31e536ad5e70f6fdfc5829c4f73ad6dd3528b","src/f2s_intrinsics.rs":"42caed3b9534bcba9610c5e142603229c78e62de4fee1349a415b237069e5e26"}}
\ No newline at end of file
+{"package":null,"files":{"TEST_MAPPING":"4fface3aeaacc26ee715eda88e2eca1eaec62895765aaa58c3a6c1726bfd4380","LICENSE-APACHE":"50f827348bfd5def2df4f30cb41264072cf9c180bd9ed698437e8d85b2482754","README.md":"9c24002ba6587573bb44f26a6dc6145b7877bd247a8b79b501e56166996bb80f","src/s2f.rs":"49d9680282fca631de391d273eddfa6e392eb101236d6f88e636eb598ee580f1","src/f2s_intrinsics.rs":"42caed3b9534bcba9610c5e142603229c78e62de4fee1349a415b237069e5e26","tests/common_test.rs":"64c3c55da06031d76b1c2db9e3df2cc1bf5454966c86f68552c8de33612e6798","src/s2d.rs":"be1076f40ef68e825033b997112034751beff4c63794db019b9d93cdd6505660","src/buffer/mod.rs":"b7ff2706da10b71593beff85167ba8809bb1586ac0332c46a27e883df41ceeee","src/f2s.rs":"9a356596ce373ddd9e44932e15b60797201236876d29fd3ca1ce863d28cef29d","Android.bp":"65363e8f672896ea8d34d2d5a62b1c1d8fa076baf08d064f9932d25055fca38e","src/d2s.rs":"6419e3d8a5c9229f76168a512ad80fd038c895f2f19158fe54bf0326629b01fc","tests/s2d_test.rs":"aaf39deb09e8fff74d22737d3fc1afdf7c76b1af5b26cfacabe726fcd67caa18","LICENSE-BOOST":"a83f91f3bc906bf412251dedeafc8ce7e8c1c1cc8f7ac68e9927e76ca7e2798f","METADATA":"2ae19c0eb3bf7de2ac11d2c51487c7dee81d1527f811483615e391c0cdebd44a",".cargo-checksum.json":"4c7243ce6b49c2f1a24316b02d52774b51ec7bd437edb56e0e3cbee1ad270925","src/pretty/mod.rs":"fc3f58b918b2a0493b19269fdff1e9048e3eba868552d77605c4ce4494f85138","cargo_embargo.json":"40f98d98a6f4614cc2e26c1f364f1c3294773969ba80561c7030c2a156428ffe","examples/upstream_benchmark.rs":"efb945cf51390e7902de202d327ddbe8d698b5fae40507654f39fcc13151c072","tests/f2s_test.rs":"736e0104cb6b2a994482d3951c129f79939613f6cb46d0dc2059b9790bacbc00","src/parse.rs":"dadd9d98ccf871a7d2a90c0537b7495220ea02feec7f1e2556f2b691219e5bfd","src/d2s_intrinsics.rs":"fc5c642613a1dc1d67bfbb758ab1c4237d773f489cda9e030f6c3fd86aac0fb4","LICENSE":"010a014e87d5287d38fd2bb19a1fc01faf03f5c05b0a47c21be94b0ea0497ef8","patches/LICENSE.patch":"3a10599892df6f584a1e7a72c48be84aad079885df76285fbc9d35c35501bd7d","tests/s2f_test.rs":"48ee209ec1d9370da8d0cee7428829b70d8c68c8aa1f6a3ffbd5eec8957f52e0","tests/d2s_test.rs":"7c05052312c8a8855ccde45ac20db48c72ee6fe8cab968f0f744808f45cbb86c","src/d2s_small_table.rs":"aa078e3eb2e6061e84d7a040f3e1c60d8d4237d7f2fb8031c3df5fd3f0d1d264","tests/exhaustive.rs":"944ca0b590467ab8a34354daa3ad0c71b23091dff34e1612448a1c17cf87c412","src/digit_table.rs":"2446328eb610585bf0bf27faed35d38b1848bb5127a099acd42ac36c49c991fa","src/common.rs":"7a0c32d6dd802a9cae7a4abafcd4f51063ea8428b17d9afe420d1735f948ad9c","src/lib.rs":"9571e88bb38b31b7a925baa2301f9cd4391fd7f2b5322b75e6b375817f69e765","Cargo.lock":"8f6e075661c9a911830923785a9359e093402ff8f61315ba5bf99efaca3bc8b3","src/pretty/exponent.rs":"d6f1b5b33f35b052f1d0a7d94a5c56a3b6a210ca708e7e1e1e0533290e7ac9b4","tests/d2s_table_test.rs":"41552541a6ca8f67f9d819d85b2214e54774d49aac244695b0193545191fc917","src/d2s_full_table.rs":"08fab3b397ef4bdb7ec26008442c991d97c851a49627c27e23fc78526d8adcb7","patches/std.diff":"73e8e32adac2c34bf9c9d1386c2035af2746b9a743aeb7cda02176e92c232482","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","tests/d2s_intrinsics_test.rs":"a45e55152e97bf3897d9c586e000304df5900bf9ef6bcf2ee8072cd914a9e548","tests/macros/mod.rs":"3b4944363bbb0127d63d253e6017fc89772e02a99a6c68f35868c14bd4c45369","benches/bench.rs":"c5a2bdbc71d5e294a3db795473fed081f400fd40278227cfc0d8d4d5648cacd8","Cargo.toml":"916942e5f68779f92a03a3bd48bbdb9fe88df58c066d4d1ee5f0da55ec492baf","src/pretty/mantissa.rs":"d5827a8862ea2115f887b54fead4576da613e1953e750338fd541ab2d0b24ea8"}}
\ No newline at end of file
diff --git a/crates/ryu/.cargo-checksum.json b/crates/ryu/.cargo-checksum.json
index e64ba5b..da5e42e 100644
--- a/crates/ryu/.cargo-checksum.json
+++ b/crates/ryu/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.lock":"bf05f9d2882172d0ced848ce2e28631c055b2102c2db2243aa7d4d4507624a9d","Cargo.toml":"c1299fe790cd356421da83744cf7a3c87285ae8b957af4ac8303b08b632ce11a","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-BOOST":"c9bff75738922193e67fa726fa225535870d2aa1059f91452c411736284ad566","README.md":"86f0a92cf076f4983f99926607ea272c9650a5996fa3921fc5ca5abceb0f18db","benches/bench.rs":"703521c8cb9c6959ee305776a9971d24754b6fff5c1737741be04f956a3692e8","examples/upstream_benchmark.rs":"f702d3598a8fac59134a8058ebf74ba90163b1f23ebbd6c5978a7bd8a888d357","src/buffer/mod.rs":"e32f3fa7e994ff704796e58e115c5258e94a79a184d1608864772f2f2f5274fc","src/common.rs":"cae347e97fc30c50a964f80425e8c3e69ece2b8ab81f9b81b9baa7fcec64a001","src/d2s.rs":"83f821f17fd8d2cf72bcc47cc8c603ab24f2377db6cd0f08638031716f8dc17c","src/d2s_full_table.rs":"9b0186acbc6d65dc55c17e16125be707a2bfb920d22b35d33234b4cc38566a36","src/d2s_intrinsics.rs":"bbf15472f4299942312e80a992cbc2f47f85f17ed193f24084534434dbfb26e7","src/d2s_small_table.rs":"7b25cfbf0793d0662d83f5d92a9f880295652db9979b5acf702b313359996508","src/digit_table.rs":"02351ca54cb8cb3679f635115dd094f32fd91750e9f66103c1ee9ec3db507072","src/f2s.rs":"55320c2301680d8be3a908620cccd9d103b0cd3ad7a7d3378589e274ffc2587b","src/f2s_intrinsics.rs":"97bab98093838e30c60f5135f54f5ccb039ff7d9f35553ac8e74437743ca47e2","src/lib.rs":"560602c3cca66958b710f788aa4415b3de67293db3c41cb0b5083b59eac28c5b","src/parse.rs":"7f8aa7e007caf5dcb03abdc4238157724bb742d0823a3b8a01646fa1f1129154","src/pretty/exponent.rs":"6c9aa1c707c567ae338647056e37557a94e5120781ee9f6f64e9c7071ffb50d0","src/pretty/mantissa.rs":"5e8d0a6bfdfd04e599a9fc8aefd638e3288651279e870e7cd44820717c3b6438","src/pretty/mod.rs":"731798246d414ca54df739c212f1cb8e05991a0472a7a1c28771e24d7a1cf09b","src/s2d.rs":"2f572603eedaa9efbe864105999a1ceac8aa4ff4e1d2fbd96127692460194d16","src/s2f.rs":"6ae7430fba61f59aa6010d446f5c1043974b6fadb8e4c75ce2ad56f73ee48f4a","tests/common_test.rs":"275184cf366f80c11e5f33c2d53065a073e20d81bf71ca70478c89e47fb8da36","tests/d2s_intrinsics_test.rs":"15d11b70810bf04f33f8b185bf7f010a436a4edb47fa4648b1a036568c2c5d15","tests/d2s_table_test.rs":"54b3a7d40aa9bec03e9dc555d15fb4512ee16a16398b3098a97819fab50c81f3","tests/d2s_test.rs":"d72aaf37c76a4042ecc12b7d6faf844696016bb72bb20d142ecab3bd6c87e29f","tests/exhaustive.rs":"f475ed9008a2cd86ce95abb577a4b01e9fed23fc16f7e217ccffb3b834005fa0","tests/f2s_test.rs":"ad9e6fe46e712c488b876428c144c79bdff0349b41c57eee5506fc3c9c156624","tests/macros/mod.rs":"8e90a674b3960f9516cb38f4eea0e0981ff902c3b33572ebdb6c5528d3ffa72c","tests/s2d_test.rs":"75c3a1044881718db65e05f25c9f6e1d005392dddb2e8dafb799668bb6a9a5c3","tests/s2f_test.rs":"1ec06646cb65229bfe866ec913901a0d8d736668f30b812fc4b00136a43f5142"},"package":"f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"}
\ No newline at end of file
+{"files":{"Cargo.lock":"2154f7e5f06489f3b42120f2165661fd552aa03b3d1f4f0cfeb380acad362b22","Cargo.toml":"708b4546804f6c500c45fd048921400f4328fe8f7159e0491faa4a64e38a2b0f","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-BOOST":"c9bff75738922193e67fa726fa225535870d2aa1059f91452c411736284ad566","README.md":"86f0a92cf076f4983f99926607ea272c9650a5996fa3921fc5ca5abceb0f18db","benches/bench.rs":"703521c8cb9c6959ee305776a9971d24754b6fff5c1737741be04f956a3692e8","examples/upstream_benchmark.rs":"f702d3598a8fac59134a8058ebf74ba90163b1f23ebbd6c5978a7bd8a888d357","src/buffer/mod.rs":"e32f3fa7e994ff704796e58e115c5258e94a79a184d1608864772f2f2f5274fc","src/common.rs":"cae347e97fc30c50a964f80425e8c3e69ece2b8ab81f9b81b9baa7fcec64a001","src/d2s.rs":"f2612785ebe510c935b979dc5f66f6b8c818ca8a4cf0364ce1fe1d41fea39592","src/d2s_full_table.rs":"9b0186acbc6d65dc55c17e16125be707a2bfb920d22b35d33234b4cc38566a36","src/d2s_intrinsics.rs":"bbf15472f4299942312e80a992cbc2f47f85f17ed193f24084534434dbfb26e7","src/d2s_small_table.rs":"db3bbe4002d816785b0ee233c330f19fa7002f31dab47dc6f67b266996fe3ae4","src/digit_table.rs":"02351ca54cb8cb3679f635115dd094f32fd91750e9f66103c1ee9ec3db507072","src/f2s.rs":"cb96f61d8c6c6c941803a7b629f2bf835e1a20ad9d3e5d3454a30ed3391c3515","src/f2s_intrinsics.rs":"97bab98093838e30c60f5135f54f5ccb039ff7d9f35553ac8e74437743ca47e2","src/lib.rs":"8020040eaf88b50ffe542691d4c5a63e9f07e8ae6893ab433ef86762655dc941","src/parse.rs":"7f8aa7e007caf5dcb03abdc4238157724bb742d0823a3b8a01646fa1f1129154","src/pretty/exponent.rs":"fa914ec63b3f86cbdaf7933d7c44e1bc1f93c1239a29a5f86934680a7e957570","src/pretty/mantissa.rs":"40cb00efe1c3fab559ab58389bd519d556548aa18fb261a90dd48138911d039b","src/pretty/mod.rs":"eb0a8c78019f55a1767943821340e8b1278455e0d88bb4f63f4bd3dde340e387","src/s2d.rs":"c804518a771654e3786bde2b776c56e94e198ce6d3fe1e4e5e2f2a9cb9e607e3","src/s2f.rs":"11d528931ce1a01a93f39efb3fe99fdc3041b41fefafb2efd6a338d2a12b628c","tests/common_test.rs":"599781a637d9b9756858aabfe5c38a0734a550debd3d94774f33792b7b3c8240","tests/d2s_intrinsics_test.rs":"15d11b70810bf04f33f8b185bf7f010a436a4edb47fa4648b1a036568c2c5d15","tests/d2s_table_test.rs":"819c39cc94e3462138d3be337d06e7334de126642d34bf1394e03d2df9c0c90c","tests/d2s_test.rs":"d72aaf37c76a4042ecc12b7d6faf844696016bb72bb20d142ecab3bd6c87e29f","tests/exhaustive.rs":"f475ed9008a2cd86ce95abb577a4b01e9fed23fc16f7e217ccffb3b834005fa0","tests/f2s_test.rs":"ad9e6fe46e712c488b876428c144c79bdff0349b41c57eee5506fc3c9c156624","tests/macros/mod.rs":"8e90a674b3960f9516cb38f4eea0e0981ff902c3b33572ebdb6c5528d3ffa72c","tests/s2d_test.rs":"75c3a1044881718db65e05f25c9f6e1d005392dddb2e8dafb799668bb6a9a5c3","tests/s2f_test.rs":"1ec06646cb65229bfe866ec913901a0d8d736668f30b812fc4b00136a43f5142"},"package":"f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"}
\ No newline at end of file
diff --git a/crates/ryu/Android.bp b/crates/ryu/Android.bp
index b6c5a90..305ea1a 100644
--- a/crates/ryu/Android.bp
+++ b/crates/ryu/Android.bp
@@ -18,7 +18,7 @@
host_supported: true,
crate_name: "ryu",
cargo_env_compat: true,
- cargo_pkg_version: "1.0.16",
+ cargo_pkg_version: "1.0.18",
crate_root: "src/lib.rs",
edition: "2018",
apex_available: [
@@ -34,7 +34,7 @@
host_supported: true,
crate_name: "common_test",
cargo_env_compat: true,
- cargo_pkg_version: "1.0.16",
+ cargo_pkg_version: "1.0.18",
crate_root: "tests/common_test.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -55,7 +55,7 @@
host_supported: true,
crate_name: "d2s_intrinsics_test",
cargo_env_compat: true,
- cargo_pkg_version: "1.0.16",
+ cargo_pkg_version: "1.0.18",
crate_root: "tests/d2s_intrinsics_test.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -76,7 +76,7 @@
host_supported: true,
crate_name: "d2s_table_test",
cargo_env_compat: true,
- cargo_pkg_version: "1.0.16",
+ cargo_pkg_version: "1.0.18",
crate_root: "tests/d2s_table_test.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -97,7 +97,7 @@
host_supported: true,
crate_name: "d2s_test",
cargo_env_compat: true,
- cargo_pkg_version: "1.0.16",
+ cargo_pkg_version: "1.0.18",
crate_root: "tests/d2s_test.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -118,7 +118,7 @@
host_supported: true,
crate_name: "f2s_test",
cargo_env_compat: true,
- cargo_pkg_version: "1.0.16",
+ cargo_pkg_version: "1.0.18",
crate_root: "tests/f2s_test.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -139,7 +139,7 @@
host_supported: true,
crate_name: "s2d_test",
cargo_env_compat: true,
- cargo_pkg_version: "1.0.16",
+ cargo_pkg_version: "1.0.18",
crate_root: "tests/s2d_test.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -160,7 +160,7 @@
host_supported: true,
crate_name: "s2f_test",
cargo_env_compat: true,
- cargo_pkg_version: "1.0.16",
+ cargo_pkg_version: "1.0.18",
crate_root: "tests/s2f_test.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
diff --git a/crates/ryu/Cargo.lock b/crates/ryu/Cargo.lock
index c52a439..9f361d6 100644
--- a/crates/ryu/Cargo.lock
+++ b/crates/ryu/Cargo.lock
@@ -10,9 +10,9 @@
[[package]]
name = "getrandom"
-version = "0.2.10"
+version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
dependencies = [
"cfg-if",
"libc",
@@ -21,21 +21,21 @@
[[package]]
name = "hermit-abi"
-version = "0.3.3"
+version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
[[package]]
name = "libc"
-version = "0.2.149"
+version = "0.2.154"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"
+checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346"
[[package]]
name = "no-panic"
-version = "0.1.26"
+version = "0.1.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "71a6d126424f5ce0bb4587ff4561421d44aeede520541cc66f1bb912506ae46a"
+checksum = "8540b7d99a20166178b42a05776aef900cdbfec397f861dfc7819bf1d7760b3d"
dependencies = [
"proc-macro2",
"quote",
@@ -60,18 +60,18 @@
[[package]]
name = "proc-macro2"
-version = "1.0.69"
+version = "1.0.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
-version = "1.0.33"
+version = "1.0.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
dependencies = [
"proc-macro2",
]
@@ -117,7 +117,7 @@
[[package]]
name = "ryu"
-version = "1.0.16"
+version = "1.0.18"
dependencies = [
"no-panic",
"num_cpus",
@@ -127,9 +127,9 @@
[[package]]
name = "syn"
-version = "2.0.38"
+version = "2.0.60"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
+checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3"
dependencies = [
"proc-macro2",
"quote",
diff --git a/crates/ryu/Cargo.toml b/crates/ryu/Cargo.toml
index a5c87c3..5fa419b 100644
--- a/crates/ryu/Cargo.toml
+++ b/crates/ryu/Cargo.toml
@@ -13,12 +13,18 @@
edition = "2018"
rust-version = "1.36"
name = "ryu"
-version = "1.0.16"
+version = "1.0.18"
authors = ["David Tolnay <[email protected]>"]
+build = false
exclude = [
+ "build.rs",
"performance.png",
"chart/**",
]
+autobins = false
+autoexamples = false
+autotests = false
+autobenches = false
description = "Fast floating point to string conversion"
documentation = "https://docs.rs/ryu"
readme = "README.md"
@@ -36,8 +42,50 @@
targets = ["x86_64-unknown-linux-gnu"]
[lib]
+name = "ryu"
+path = "src/lib.rs"
doc-scrape-examples = false
+[[example]]
+name = "upstream_benchmark"
+path = "examples/upstream_benchmark.rs"
+
+[[test]]
+name = "s2f_test"
+path = "tests/s2f_test.rs"
+
+[[test]]
+name = "common_test"
+path = "tests/common_test.rs"
+
+[[test]]
+name = "s2d_test"
+path = "tests/s2d_test.rs"
+
+[[test]]
+name = "d2s_test"
+path = "tests/d2s_test.rs"
+
+[[test]]
+name = "f2s_test"
+path = "tests/f2s_test.rs"
+
+[[test]]
+name = "d2s_table_test"
+path = "tests/d2s_table_test.rs"
+
+[[test]]
+name = "exhaustive"
+path = "tests/exhaustive.rs"
+
+[[test]]
+name = "d2s_intrinsics_test"
+path = "tests/d2s_intrinsics_test.rs"
+
+[[bench]]
+name = "bench"
+path = "benches/bench.rs"
+
[dependencies.no-panic]
version = "0.1"
optional = true
diff --git a/crates/ryu/METADATA b/crates/ryu/METADATA
index 0b494b6..6e7fec6 100644
--- a/crates/ryu/METADATA
+++ b/crates/ryu/METADATA
@@ -1,17 +1,17 @@
name: "ryu"
description: "Fast floating point to string conversion"
third_party {
- version: "1.0.16"
+ version: "1.0.18"
license_type: NOTICE
last_upgrade_date {
year: 2024
- month: 2
- day: 7
+ month: 12
+ day: 20
}
homepage: "https://crates.io/crates/ryu"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/ryu/ryu-1.0.16.crate"
- version: "1.0.16"
+ value: "https://static.crates.io/crates/ryu/ryu-1.0.18.crate"
+ version: "1.0.18"
}
}
diff --git a/crates/ryu/src/d2s.rs b/crates/ryu/src/d2s.rs
index 392577a..76a8164 100644
--- a/crates/ryu/src/d2s.rs
+++ b/crates/ryu/src/d2s.rs
@@ -18,12 +18,14 @@
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.
-use crate::common::*;
+use crate::common::{log10_pow2, log10_pow5, pow5bits};
#[cfg(not(feature = "small"))]
-pub use crate::d2s_full_table::*;
-use crate::d2s_intrinsics::*;
+pub use crate::d2s_full_table::{DOUBLE_POW5_INV_SPLIT, DOUBLE_POW5_SPLIT};
+use crate::d2s_intrinsics::{
+ div10, div100, div5, mul_shift_all_64, multiple_of_power_of_2, multiple_of_power_of_5,
+};
#[cfg(feature = "small")]
-pub use crate::d2s_small_table::*;
+pub use crate::d2s_small_table::{compute_inv_pow5, compute_pow5};
use core::mem::MaybeUninit;
pub const DOUBLE_MANTISSA_BITS: u32 = 52;
diff --git a/crates/ryu/src/d2s_small_table.rs b/crates/ryu/src/d2s_small_table.rs
index 262fc04..b6e3223 100644
--- a/crates/ryu/src/d2s_small_table.rs
+++ b/crates/ryu/src/d2s_small_table.rs
@@ -18,7 +18,7 @@
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.
-use crate::common::*;
+use crate::common::pow5bits;
pub static DOUBLE_POW5_INV_SPLIT2: [(u64, u64); 15] = [
(1, 2305843009213693952),
diff --git a/crates/ryu/src/f2s.rs b/crates/ryu/src/f2s.rs
index eeb457a..987fefb 100644
--- a/crates/ryu/src/f2s.rs
+++ b/crates/ryu/src/f2s.rs
@@ -18,8 +18,10 @@
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.
-use crate::common::*;
-use crate::f2s_intrinsics::*;
+use crate::common::{log10_pow2, log10_pow5, pow5bits};
+use crate::f2s_intrinsics::{
+ mul_pow5_div_pow2, mul_pow5_inv_div_pow2, multiple_of_power_of_2_32, multiple_of_power_of_5_32,
+};
pub const FLOAT_MANTISSA_BITS: u32 = 23;
pub const FLOAT_EXPONENT_BITS: u32 = 8;
diff --git a/crates/ryu/src/lib.rs b/crates/ryu/src/lib.rs
index 83f6bdf..dcc58e5 100644
--- a/crates/ryu/src/lib.rs
+++ b/crates/ryu/src/lib.rs
@@ -81,7 +81,8 @@
//! notation.
#![no_std]
-#![doc(html_root_url = "https://docs.rs/ryu/1.0.16")]
+#![doc(html_root_url = "https://docs.rs/ryu/1.0.18")]
+#![cfg_attr(not(check_cfg), allow(unexpected_cfgs))]
#![allow(
clippy::cast_lossless,
clippy::cast_possible_truncation,
diff --git a/crates/ryu/src/pretty/exponent.rs b/crates/ryu/src/pretty/exponent.rs
index b72add5..529d92b 100644
--- a/crates/ryu/src/pretty/exponent.rs
+++ b/crates/ryu/src/pretty/exponent.rs
@@ -1,4 +1,4 @@
-use crate::digit_table::*;
+use crate::digit_table::DIGIT_TABLE;
use core::ptr;
#[cfg_attr(feature = "no-panic", inline)]
diff --git a/crates/ryu/src/pretty/mantissa.rs b/crates/ryu/src/pretty/mantissa.rs
index 0149f5c..552dfe3 100644
--- a/crates/ryu/src/pretty/mantissa.rs
+++ b/crates/ryu/src/pretty/mantissa.rs
@@ -1,4 +1,4 @@
-use crate::digit_table::*;
+use crate::digit_table::DIGIT_TABLE;
use core::ptr;
#[cfg_attr(feature = "no-panic", inline)]
diff --git a/crates/ryu/src/pretty/mod.rs b/crates/ryu/src/pretty/mod.rs
index da49e86..f901c5f 100644
--- a/crates/ryu/src/pretty/mod.rs
+++ b/crates/ryu/src/pretty/mod.rs
@@ -1,11 +1,11 @@
mod exponent;
mod mantissa;
-use self::exponent::*;
-use self::mantissa::*;
+use self::exponent::{write_exponent2, write_exponent3};
+use self::mantissa::{write_mantissa, write_mantissa_long};
use crate::common;
-use crate::d2s::{self, *};
-use crate::f2s::*;
+use crate::d2s::{self, d2d, DOUBLE_EXPONENT_BITS, DOUBLE_MANTISSA_BITS};
+use crate::f2s::{f2d, FLOAT_EXPONENT_BITS, FLOAT_MANTISSA_BITS};
use core::ptr;
#[cfg(feature = "no-panic")]
use no_panic::no_panic;
diff --git a/crates/ryu/src/s2d.rs b/crates/ryu/src/s2d.rs
index 152ca97..c6b4fa4 100644
--- a/crates/ryu/src/s2d.rs
+++ b/crates/ryu/src/s2d.rs
@@ -1,6 +1,6 @@
-use crate::common::*;
+use crate::common::{ceil_log2_pow5, log2_pow5};
use crate::d2s;
-use crate::d2s_intrinsics::*;
+use crate::d2s_intrinsics::{mul_shift_64, multiple_of_power_of_2, multiple_of_power_of_5};
use crate::parse::Error;
#[cfg(feature = "no-panic")]
use no_panic::no_panic;
diff --git a/crates/ryu/src/s2f.rs b/crates/ryu/src/s2f.rs
index 9593528..52a3235 100644
--- a/crates/ryu/src/s2f.rs
+++ b/crates/ryu/src/s2f.rs
@@ -1,6 +1,8 @@
-use crate::common::*;
+use crate::common::{ceil_log2_pow5, log2_pow5};
use crate::f2s;
-use crate::f2s_intrinsics::*;
+use crate::f2s_intrinsics::{
+ mul_pow5_div_pow2, mul_pow5_inv_div_pow2, multiple_of_power_of_2_32, multiple_of_power_of_5_32,
+};
use crate::parse::Error;
#[cfg(feature = "no-panic")]
use no_panic::no_panic;
diff --git a/crates/ryu/tests/common_test.rs b/crates/ryu/tests/common_test.rs
index 2f05b33..e2bc4e1 100644
--- a/crates/ryu/tests/common_test.rs
+++ b/crates/ryu/tests/common_test.rs
@@ -31,7 +31,7 @@
#[path = "../src/common.rs"]
mod common;
-use common::*;
+use common::{ceil_log2_pow5, decimal_length9, log10_pow2, log10_pow5};
#[test]
fn test_decimal_length9() {
diff --git a/crates/ryu/tests/d2s_table_test.rs b/crates/ryu/tests/d2s_table_test.rs
index dce1be3..13c4216 100644
--- a/crates/ryu/tests/d2s_table_test.rs
+++ b/crates/ryu/tests/d2s_table_test.rs
@@ -41,8 +41,8 @@
#[path = "../src/d2s_small_table.rs"]
mod d2s_small_table;
-use d2s_full_table::*;
-use d2s_small_table::*;
+use d2s_full_table::{DOUBLE_POW5_INV_SPLIT, DOUBLE_POW5_SPLIT};
+use d2s_small_table::{compute_inv_pow5, compute_pow5};
#[test]
fn test_compute_pow5() {
diff --git a/crates/semver/.android-checksum.json b/crates/semver/.android-checksum.json
new file mode 100644
index 0000000..801a1c4
--- /dev/null
+++ b/crates/semver/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"src/identifier.rs":"05d8523968c522b679947d0f298819a422961fab999b7bfdf48123518d7b3c3c","LICENSE":"50f827348bfd5def2df4f30cb41264072cf9c180bd9ed698437e8d85b2482754","src/lib.rs":"57934f48ab9c4d43a99d9c09536e784f2659da3d435aefe412279992f4e29bdb","tests/test_version.rs":"d779e01b28a5aab488567ee7dd7f52a10f88485d64e6f1ce909c15250eda661a","src/parse.rs":"a2cf539f6c9700fd4c157ac751fe1487c1152b43605769f0ff8212ccf40712ed","build.rs":"70b8bed46a5b72bf343dd95b06d72ddf4cefe125353ff70260399759299fc4d6","src/serde.rs":"e98fb2f30cbfa2a94ee4bb1ed46e05f36627330fa5045825938c6121e5a8deb6","benches/parse.rs":"7e99d95a6a52c451be898700a2072479c4ee551d12d3c9dbfc7f4311188b40ae","tests/test_identifier.rs":"0f931656d0e56b21cde695970af28747177e00ec328036c64c3cb76f6d048d8a","Android.bp":"cbf8551c7570c91de9f4af9bf8d0f7d994f47de606c472d9f24a06647dffae09","tests/util/mod.rs":"faa2ec6b4616a24168debdfe42d25476b4766c005464d838a58cc4ea85ed0dbc","src/backport.rs":"f2a8b6107b004eeb5afec717a3d91b50b17b17cf03d687966da7c587ea362f4d","src/error.rs":"b12bb5d3b79b2c7c6b4f50c2dc81029a987e359e540e94bed96fcf22d8ec0aad","tests/test_version_req.rs":"6588cecf5e3c2cfce3d021de830c7b9db659a0aba3babb36c2f8ae4c5fa2de62","TEST_MAPPING":"63673b283d8a11f12f121eb2f00be291fd9abddad2f1afc28158ccb162d847c2","METADATA":"a7447485691ebc863a50efaa0f82ba15bd79734faa10a8003c0464bf05eea05d","LICENSE-APACHE":"50f827348bfd5def2df4f30cb41264072cf9c180bd9ed698437e8d85b2482754","tests/test_autotrait.rs":"892e1ec2998a6a350c0e387b2970d6f0ae4f6b30b9b9a5461c512bbc2014eec3",".cargo-checksum.json":"4b6c76f2d50ce5b55d7f1d6e7903c1d571707d0723e1f39345296532701413a4","tests/node/mod.rs":"20aad0b0a8f3ebd60ba1f9b3c718ab4d0fc4d80a231c0d4770f45e435139221a","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","src/display.rs":"1507845c8ea901f8bf35931505c721269cd25e654c0a7916ad449a543b853748","src/impls.rs":"b797a292640d7aa6a72c3c70b3e753baee565e4f6dd54bcd37af0640f309444a","src/eval.rs":"80afb4586adba4807db821ff83fc00ad380a0f67f4e39ecee5ce8d8742024ac0","cargo_embargo.json":"4b6ff78b72ad34a3853441adc0e68633bd86a6c1077bf7904515400398b1f111","Cargo.toml":"aa09385fb405151f163db618f4cec20a7b83b189a3ee7a4ec621a112edf0de42","README.md":"b62587aef2b39ebcc327acc3e5ab2e17a5e3c36eac31091a9a2e660c0135bf69","LICENSE-MIT":"38620a3cfaeec97a9197e8c39e436ea7f0bc86699b1f1c35f1aa41785b6d4eac"}}
\ No newline at end of file
diff --git a/crates/semver/.cargo-checksum.json b/crates/semver/.cargo-checksum.json
index 0273415..1fee0a3 100644
--- a/crates/semver/.cargo-checksum.json
+++ b/crates/semver/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"65083bb1e7b3b00b572b254123f243e4397a2e7324e36b1cd246b8e186dd34db","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"de1a03443ab8f147676199856a975ec00f3f7334fc5d5d5e056ec8f3fcb61dd5","benches/parse.rs":"6531f66f80ce2fc83878f9bf84f94c42e96f1e709466f2b88be8d95a3cec1511","build.rs":"9667e3ca925297ead07cdcf12a37af900ec9f849e05b126dfb02b681ee90c2e3","src/backport.rs":"66db55d15d0e2808bffe4cde7cd1d99bda999b26cbe40bb6b5e43b94f9b631d2","src/display.rs":"9ba42f7a6579aa9c7dd72f2380036f5c9664592f3eacd09ea25cef291a3e64e5","src/error.rs":"895e11a9e454cab207415186b15a29dac1f0a5bf9b8dba7bd45da5bb5a6ace31","src/eval.rs":"b7e7ec976051b9f87ddf5cfdbaad64654d98d86ae0763f7d88b14eeaeac6013c","src/identifier.rs":"f17b9cc2acdd3dbd51b8a4c25bb455acd73c788d23555dc97ef19bcd93bf04f5","src/impls.rs":"48baf552d28f6d0ce63da2d2d53a710222ed87834d44e8b0493a0827e1d718f2","src/lib.rs":"152e9707e805cb49c05cf2319af229687363e0895e4371defa77b8ec539f77dc","src/parse.rs":"920f8327a1ba0c16a28f518f2d50998faf1d6a8db379b92cb72976f176650f09","src/serde.rs":"e2a9b9dc3cd2cccc250eaffad049de418ef791bf8c4a34111a48f068353e0a37","tests/node/mod.rs":"2710d9b8daace2038b66db0f8f4cc522dee938e7cbc42d7739c31995343c32f4","tests/test_autotrait.rs":"2631b78c9c63f1829c814fa88fcab0c5d77eb4e2d9c0c418d50c33e12a511e90","tests/test_identifier.rs":"fba0428bf5c43c733d17ca30952822ed6e1af6de1e5ef11bd8fb46c6b10f65fd","tests/test_version.rs":"9587d2c397524e1d33499d9bb2725fe746406fa4d162713b7f56029942a4a84b","tests/test_version_req.rs":"1aa4ad4f58f1ec3226b334d0f82b6ebae732585dd9b2c35328b576a1b3638a8d","tests/util/mod.rs":"b35cd4e7fcc9a6fa2496d163d716155ddd379e027ef9516c1af05ce0cf605ae1"},"package":"61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"}
\ No newline at end of file
+{"files":{"Cargo.toml":"d118f34dc7bbf3ee6d369c937db9e1cf274a230022d408104e7597cdc8967351","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"de1a03443ab8f147676199856a975ec00f3f7334fc5d5d5e056ec8f3fcb61dd5","benches/parse.rs":"6531f66f80ce2fc83878f9bf84f94c42e96f1e709466f2b88be8d95a3cec1511","build.rs":"38626edb589ead6ccc23c07cb57f3f29b3cc479baee56de96abc284c776f9b17","src/backport.rs":"66db55d15d0e2808bffe4cde7cd1d99bda999b26cbe40bb6b5e43b94f9b631d2","src/display.rs":"9ba42f7a6579aa9c7dd72f2380036f5c9664592f3eacd09ea25cef291a3e64e5","src/error.rs":"d0311d2d3ec0c1c04f3067a59aed52bac57329e47801be67b09199d145c7f73e","src/eval.rs":"b7e7ec976051b9f87ddf5cfdbaad64654d98d86ae0763f7d88b14eeaeac6013c","src/identifier.rs":"d23055fd18623ef4b81b2a3d5df7a9efaf28d9c3b3fb73aa8dc2ff8611876508","src/impls.rs":"a364580f7c1a04b1fb5c39d1bb061ff897fe8c2cbe78543a7fa7978afcf25b33","src/lib.rs":"833bdd4037fd1989e753bebed75e40692f3379b32e36a29b5a605801bf0a154f","src/parse.rs":"920f8327a1ba0c16a28f518f2d50998faf1d6a8db379b92cb72976f176650f09","src/serde.rs":"e2a9b9dc3cd2cccc250eaffad049de418ef791bf8c4a34111a48f068353e0a37","tests/node/mod.rs":"2710d9b8daace2038b66db0f8f4cc522dee938e7cbc42d7739c31995343c32f4","tests/test_autotrait.rs":"2631b78c9c63f1829c814fa88fcab0c5d77eb4e2d9c0c418d50c33e12a511e90","tests/test_identifier.rs":"fba0428bf5c43c733d17ca30952822ed6e1af6de1e5ef11bd8fb46c6b10f65fd","tests/test_version.rs":"9587d2c397524e1d33499d9bb2725fe746406fa4d162713b7f56029942a4a84b","tests/test_version_req.rs":"1aa4ad4f58f1ec3226b334d0f82b6ebae732585dd9b2c35328b576a1b3638a8d","tests/util/mod.rs":"b35cd4e7fcc9a6fa2496d163d716155ddd379e027ef9516c1af05ce0cf605ae1"},"package":"3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba"}
\ No newline at end of file
diff --git a/crates/semver/Android.bp b/crates/semver/Android.bp
index ad9b7b4..14507c9 100644
--- a/crates/semver/Android.bp
+++ b/crates/semver/Android.bp
@@ -18,7 +18,7 @@
host_supported: true,
crate_name: "semver",
cargo_env_compat: true,
- cargo_pkg_version: "1.0.23",
+ cargo_pkg_version: "1.0.24",
crate_root: "src/lib.rs",
edition: "2018",
features: [
diff --git a/crates/semver/Cargo.toml b/crates/semver/Cargo.toml
index 73f0918..0136eac 100644
--- a/crates/semver/Cargo.toml
+++ b/crates/semver/Cargo.toml
@@ -13,9 +13,10 @@
edition = "2018"
rust-version = "1.31"
name = "semver"
-version = "1.0.23"
+version = "1.0.24"
authors = ["David Tolnay <[email protected]>"]
build = "build.rs"
+autolib = false
autobins = false
autoexamples = false
autotests = false
@@ -32,11 +33,7 @@
repository = "https://github.com/dtolnay/semver"
[package.metadata.docs.rs]
-rustdoc-args = [
- "--cfg",
- "doc_cfg",
- "--generate-link-to-definition",
-]
+rustdoc-args = ["--generate-link-to-definition"]
targets = ["x86_64-unknown-linux-gnu"]
[lib]
@@ -45,21 +42,21 @@
doc-scrape-examples = false
[[test]]
-name = "test_version_req"
-path = "tests/test_version_req.rs"
+name = "test_autotrait"
+path = "tests/test_autotrait.rs"
[[test]]
name = "test_identifier"
path = "tests/test_identifier.rs"
[[test]]
-name = "test_autotrait"
-path = "tests/test_autotrait.rs"
-
-[[test]]
name = "test_version"
path = "tests/test_version.rs"
+[[test]]
+name = "test_version_req"
+path = "tests/test_version_req.rs"
+
[[bench]]
name = "parse"
path = "benches/parse.rs"
diff --git a/crates/semver/METADATA b/crates/semver/METADATA
index 9668a0a..3586110 100644
--- a/crates/semver/METADATA
+++ b/crates/semver/METADATA
@@ -1,17 +1,17 @@
name: "semver"
description: "Parser and evaluator for Cargo\'s flavor of Semantic Versioning"
third_party {
- version: "1.0.23"
+ version: "1.0.24"
license_type: NOTICE
last_upgrade_date {
year: 2024
- month: 9
- day: 30
+ month: 12
+ day: 20
}
homepage: "https://crates.io/crates/semver"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/semver/semver-1.0.23.crate"
- version: "1.0.23"
+ value: "https://static.crates.io/crates/semver/semver-1.0.24.crate"
+ version: "1.0.24"
}
}
diff --git a/crates/semver/build.rs b/crates/semver/build.rs
index 6a7b67e..ae0aae9 100644
--- a/crates/semver/build.rs
+++ b/crates/semver/build.rs
@@ -11,7 +11,6 @@
};
if compiler >= 80 {
- println!("cargo:rustc-check-cfg=cfg(doc_cfg)");
println!("cargo:rustc-check-cfg=cfg(no_alloc_crate)");
println!("cargo:rustc-check-cfg=cfg(no_const_vec_new)");
println!("cargo:rustc-check-cfg=cfg(no_exhaustive_int_match)");
diff --git a/crates/semver/src/error.rs b/crates/semver/src/error.rs
index 93b05ee..44c3b58 100644
--- a/crates/semver/src/error.rs
+++ b/crates/semver/src/error.rs
@@ -26,7 +26,7 @@
}
#[cfg(feature = "std")]
-#[cfg_attr(doc_cfg, doc(cfg(feature = "std")))]
+#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
impl std::error::Error for Error {}
impl Display for Error {
diff --git a/crates/semver/src/identifier.rs b/crates/semver/src/identifier.rs
index 74a5ce7..4cc387b 100644
--- a/crates/semver/src/identifier.rs
+++ b/crates/semver/src/identifier.rs
@@ -200,6 +200,10 @@
unsafe { ptr_as_str(&self.head) }
}
}
+
+ pub(crate) fn ptr_eq(&self, rhs: &Self) -> bool {
+ self.head == rhs.head && self.tail == rhs.tail
+ }
}
impl Clone for Identifier {
@@ -259,10 +263,10 @@
impl PartialEq for Identifier {
fn eq(&self, rhs: &Self) -> bool {
- if self.is_empty_or_inline() {
+ if self.ptr_eq(rhs) {
// Fast path (most common)
- self.head == rhs.head && self.tail == rhs.tail
- } else if rhs.is_empty_or_inline() {
+ true
+ } else if self.is_empty_or_inline() || rhs.is_empty_or_inline() {
false
} else {
// SAFETY: both reprs are in the heap allocated representation.
diff --git a/crates/semver/src/impls.rs b/crates/semver/src/impls.rs
index cc4fd41..280c802 100644
--- a/crates/semver/src/impls.rs
+++ b/crates/semver/src/impls.rs
@@ -50,8 +50,11 @@
impl Ord for Prerelease {
fn cmp(&self, rhs: &Self) -> Ordering {
+ if self.identifier.ptr_eq(&rhs.identifier) {
+ return Ordering::Equal;
+ }
+
match self.is_empty() {
- true if rhs.is_empty() => return Ordering::Equal,
// A real release compares greater than prerelease.
true => return Ordering::Greater,
// Prerelease compares less than the real release.
@@ -105,6 +108,10 @@
impl Ord for BuildMetadata {
fn cmp(&self, rhs: &Self) -> Ordering {
+ if self.identifier.ptr_eq(&rhs.identifier) {
+ return Ordering::Equal;
+ }
+
let lhs = self.as_str().split('.');
let mut rhs = rhs.as_str().split('.');
diff --git a/crates/semver/src/lib.rs b/crates/semver/src/lib.rs
index cc1296a..fdc12ce 100644
--- a/crates/semver/src/lib.rs
+++ b/crates/semver/src/lib.rs
@@ -60,8 +60,8 @@
//!
//! [Specifying Dependencies]: https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html
-#![doc(html_root_url = "https://docs.rs/semver/1.0.23")]
-#![cfg_attr(doc_cfg, feature(doc_cfg))]
+#![doc(html_root_url = "https://docs.rs/semver/1.0.24")]
+#![cfg_attr(docsrs, feature(doc_cfg))]
#![cfg_attr(all(not(feature = "std"), not(no_alloc_crate)), no_std)]
#![cfg_attr(not(no_unsafe_op_in_unsafe_fn_lint), deny(unsafe_op_in_unsafe_fn))]
#![cfg_attr(no_unsafe_op_in_unsafe_fn_lint, allow(unused_unsafe))]
@@ -135,10 +135,10 @@
/// comparison operators.
///
/// - The major, minor, and patch number are compared numerically from left to
-/// right, lexicographically ordered as a 3-tuple of integers. So for example
-/// version `1.5.0` is less than version `1.19.0`, despite the fact that
-/// "1.19.0" < "1.5.0" as ASCIIbetically compared strings and 1.19 < 1.5
-/// as real numbers.
+/// right, lexicographically ordered as a 3-tuple of integers. So for example
+/// version `1.5.0` is less than version `1.19.0`, despite the fact that
+/// "1.19.0" < "1.5.0" as ASCIIbetically compared strings and 1.19 < 1.5
+/// as real numbers.
///
/// - When major, minor, and patch are equal, a pre-release version is
/// considered less than the ordinary release: version `1.0.0-alpha.1` is
diff --git a/crates/serde_spanned/.android-checksum.json b/crates/serde_spanned/.android-checksum.json
new file mode 100644
index 0000000..a253903
--- /dev/null
+++ b/crates/serde_spanned/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"src/spanned.rs":"99fa67064fa13cf657eda6eaf497b7844acf664964ec2a6452fc10502bff0e4d","LICENSE":"ca8c108c730bc014297428bf42afe28d87791ecc5e7c6302233ab041bc20815b","src/lib.rs":"941222f2e232d983ae5eca4fc8568d9bfacb371b354af25b8a7087d35e0df973","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","Cargo.toml":"e83d1ffd1fe58ed4541e0e665b480a5d8e59df9eb1010a3674ff9e56ea8d5373","Android.bp":"b03d36a4481d6a29a1ff99e26bde0dc71fbd15516e9a67aa1f2275db61f67c2e","LICENSE-APACHE":"e4493d0badd82c469fd611cf0c31ea8a74cce85c52c4a4c2579e344226f0602e","cargo_embargo.json":"76fbd1cd9b6f0edab2713da1de1d006ac8b8eb70b8603033380431a2debfbd95","README.md":"42a9fa2ccba37c3b95147a3257149a70f2aeccba9994454932d97d22280ff079","LICENSE-MIT":"538f704e6bc384de6dd775d81e9df89f9d718f0e2808a24a789eaa03beb129d3",".cargo-checksum.json":"f01672057bcf4afbaf6d0faab04417944055be67c5201997c9626184e79fe046","patches/LICENSE.patch":"67bfc7706d9a957a3b06ec11a323c95eb50826cec49c1749ed0fc3581bef2299","METADATA":"51fc2644c225177d1ebc5e2389d560069567f27f1f1d632f104baa833cf70303"}}
\ No newline at end of file
diff --git a/crates/serde_spanned/.cargo-checksum.json b/crates/serde_spanned/.cargo-checksum.json
index 5807092..e0d5e14 100644
--- a/crates/serde_spanned/.cargo-checksum.json
+++ b/crates/serde_spanned/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"85429aade314f881dcdfe183bdc047f50e0be27330a37a49f0282bf2fa5962dd","LICENSE-APACHE":"c6596eb7be8581c18be736c846fb9173b69eccf6ef94c5135893ec56bd92ba08","LICENSE-MIT":"6efb0476a1cc085077ed49357026d8c173bf33017278ef440f222fb9cbcb66e6","README.md":"b7f9ff28df562bb645d6466476cb8855e96c4a162f4ffbe1ecb82d814a9f19f6","src/lib.rs":"b46fc8a4d877770b9e217e824ef99db7fdbb3c5215083dc42306eaa9958d79a3","src/spanned.rs":"d188b10290af11adec2a78272eede2b7c04beb42e27b73679b1d8faa10ab0bc5"},"package":"eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"}
\ No newline at end of file
+{"files":{"Cargo.toml":"cee8b5f244150c9ea23b12ffab76d0e3033165e911fd9bb3b1d2ab10a8c8ebe9","LICENSE-APACHE":"c6596eb7be8581c18be736c846fb9173b69eccf6ef94c5135893ec56bd92ba08","LICENSE-MIT":"6efb0476a1cc085077ed49357026d8c173bf33017278ef440f222fb9cbcb66e6","README.md":"b7f9ff28df562bb645d6466476cb8855e96c4a162f4ffbe1ecb82d814a9f19f6","src/lib.rs":"fae836e211dc2ae053a8dc54f57f98786db272e06f42733bfde6de8c87969ca2","src/spanned.rs":"21d124cb0d475702c8bb58fe108a88830ff93b1378421799bb809d95d741247f"},"package":"87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1"}
\ No newline at end of file
diff --git a/crates/serde_spanned/Android.bp b/crates/serde_spanned/Android.bp
index 01ebd99..933c0d5 100644
--- a/crates/serde_spanned/Android.bp
+++ b/crates/serde_spanned/Android.bp
@@ -17,7 +17,7 @@
name: "libserde_spanned",
crate_name: "serde_spanned",
cargo_env_compat: true,
- cargo_pkg_version: "0.6.5",
+ cargo_pkg_version: "0.6.8",
crate_root: "src/lib.rs",
edition: "2021",
features: ["serde"],
diff --git a/crates/serde_spanned/Cargo.toml b/crates/serde_spanned/Cargo.toml
index 73887a4..5e4ec95 100644
--- a/crates/serde_spanned/Cargo.toml
+++ b/crates/serde_spanned/Cargo.toml
@@ -11,9 +11,10 @@
[package]
edition = "2021"
-rust-version = "1.67"
+rust-version = "1.65"
name = "serde_spanned"
-version = "0.6.5"
+version = "0.6.8"
+build = false
include = [
"build.rs",
"src/**/*",
@@ -25,6 +26,10 @@
"examples/**/*",
"tests/**/*",
]
+autobins = false
+autoexamples = false
+autotests = false
+autobenches = false
description = "Serde-compatible spanned Value"
homepage = "https://github.com/toml-rs/toml"
readme = "README.md"
@@ -83,6 +88,10 @@
[Unreleased]: https://github.com/toml-rs/toml/compare/{{tag_name}}...HEAD"""
search = "<!-- next-url -->"
+[lib]
+name = "serde_spanned"
+path = "src/lib.rs"
+
[dependencies.serde]
version = "1.0.145"
optional = true
@@ -95,3 +104,73 @@
[dev-dependencies.serde_derive]
version = "1"
+
+[lints.clippy]
+bool_assert_comparison = "allow"
+branches_sharing_code = "allow"
+checked_conversions = "warn"
+collapsible_else_if = "allow"
+create_dir = "warn"
+dbg_macro = "warn"
+debug_assert_with_mut_call = "warn"
+doc_markdown = "warn"
+empty_enum = "warn"
+enum_glob_use = "warn"
+expl_impl_clone_on_copy = "warn"
+explicit_deref_methods = "warn"
+explicit_into_iter_loop = "warn"
+fallible_impl_from = "warn"
+filter_map_next = "warn"
+flat_map_option = "warn"
+float_cmp_const = "warn"
+fn_params_excessive_bools = "warn"
+from_iter_instead_of_collect = "warn"
+if_same_then_else = "allow"
+implicit_clone = "warn"
+imprecise_flops = "warn"
+inconsistent_struct_constructor = "warn"
+inefficient_to_string = "warn"
+infinite_loop = "warn"
+invalid_upcast_comparisons = "warn"
+large_digit_groups = "warn"
+large_stack_arrays = "warn"
+large_types_passed_by_value = "warn"
+let_and_return = "allow"
+linkedlist = "warn"
+lossy_float_literal = "warn"
+macro_use_imports = "warn"
+mem_forget = "warn"
+mutex_integer = "warn"
+needless_continue = "warn"
+needless_for_each = "warn"
+negative_feature_names = "warn"
+path_buf_push_overwrite = "warn"
+ptr_as_ptr = "warn"
+rc_mutex = "warn"
+redundant_feature_names = "warn"
+ref_option_ref = "warn"
+rest_pat_in_fully_bound_structs = "warn"
+same_functions_in_if_condition = "warn"
+self_named_module_files = "warn"
+semicolon_if_nothing_returned = "warn"
+str_to_string = "warn"
+string_add = "warn"
+string_add_assign = "warn"
+string_lit_as_bytes = "warn"
+string_to_string = "warn"
+todo = "warn"
+trait_duplication_in_bounds = "warn"
+verbose_file_reads = "warn"
+wildcard_imports = "warn"
+zero_sized_map_values = "warn"
+
+[lints.rust]
+unreachable_pub = "warn"
+unsafe_op_in_unsafe_fn = "warn"
+unused_lifetimes = "warn"
+unused_macro_rules = "warn"
+unused_qualifications = "warn"
+
+[lints.rust.rust_2018_idioms]
+level = "warn"
+priority = -1
diff --git a/crates/serde_spanned/METADATA b/crates/serde_spanned/METADATA
index 3c386cd..95b460f 100644
--- a/crates/serde_spanned/METADATA
+++ b/crates/serde_spanned/METADATA
@@ -1,17 +1,17 @@
name: "serde_spanned"
description: "Serde-compatible spanned Value"
third_party {
- version: "0.6.5"
+ version: "0.6.8"
license_type: NOTICE
last_upgrade_date {
year: 2024
- month: 2
- day: 5
+ month: 12
+ day: 20
}
homepage: "https://crates.io/crates/serde_spanned"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/serde_spanned/serde_spanned-0.6.5.crate"
- version: "0.6.5"
+ value: "https://static.crates.io/crates/serde_spanned/serde_spanned-0.6.8.crate"
+ version: "0.6.8"
}
}
diff --git a/crates/serde_spanned/src/lib.rs b/crates/serde_spanned/src/lib.rs
index 8ff723f..1d4acb1 100644
--- a/crates/serde_spanned/src/lib.rs
+++ b/crates/serde_spanned/src/lib.rs
@@ -5,14 +5,15 @@
//!
//! [serde]: https://serde.rs/
-#![deny(missing_docs)]
-#![warn(rust_2018_idioms)]
+#![cfg_attr(docsrs, feature(doc_auto_cfg))]
+#![warn(missing_docs)]
// Makes rustc abort compilation if there are any unsafe blocks in the crate.
// Presence of this annotation is picked up by tools such as cargo-geiger
// and lets them ensure that there is indeed no unsafe code as opposed to
// something they couldn't detect (e.g. unsafe added via macro expansion, etc).
#![forbid(unsafe_code)]
-#![cfg_attr(docsrs, feature(doc_auto_cfg))]
+#![warn(clippy::print_stderr)]
+#![warn(clippy::print_stdout)]
mod spanned;
pub use crate::spanned::Spanned;
diff --git a/crates/serde_spanned/src/spanned.rs b/crates/serde_spanned/src/spanned.rs
index f4042a8..9dfc3d3 100644
--- a/crates/serde_spanned/src/spanned.rs
+++ b/crates/serde_spanned/src/spanned.rs
@@ -182,31 +182,53 @@
where
V: serde::de::MapAccess<'de>,
{
- if visitor.next_key()? != Some(START_FIELD) {
- return Err(serde::de::Error::custom("spanned start key not found"));
+ let mut start: Option<usize> = None;
+ let mut end: Option<usize> = None;
+ let mut value: Option<T> = None;
+ while let Some(key) = visitor.next_key()? {
+ match key {
+ START_FIELD => {
+ if start.is_some() {
+ return Err(serde::de::Error::duplicate_field(START_FIELD));
+ }
+ start = Some(visitor.next_value()?);
+ }
+ END_FIELD => {
+ if end.is_some() {
+ return Err(serde::de::Error::duplicate_field(END_FIELD));
+ }
+ end = Some(visitor.next_value()?);
+ }
+ VALUE_FIELD => {
+ if value.is_some() {
+ return Err(serde::de::Error::duplicate_field(VALUE_FIELD));
+ }
+ value = Some(visitor.next_value()?);
+ }
+ field => {
+ return Err(serde::de::Error::unknown_field(
+ field,
+ &[START_FIELD, END_FIELD, VALUE_FIELD],
+ ));
+ }
+ }
}
- let start: usize = visitor.next_value()?;
-
- if visitor.next_key()? != Some(END_FIELD) {
- return Err(serde::de::Error::custom("spanned end key not found"));
+ match (start, end, value) {
+ (Some(start), Some(end), Some(value)) => Ok(Spanned {
+ span: start..end,
+ value,
+ }),
+ (None, _, _) => Err(serde::de::Error::missing_field(START_FIELD)),
+ (_, None, _) => Err(serde::de::Error::missing_field(END_FIELD)),
+ (_, _, None) => Err(serde::de::Error::missing_field(VALUE_FIELD)),
}
- let end: usize = visitor.next_value()?;
-
- if visitor.next_key()? != Some(VALUE_FIELD) {
- return Err(serde::de::Error::custom("spanned value key not found"));
- }
- let value: T = visitor.next_value()?;
-
- Ok(Spanned {
- span: start..end,
- value,
- })
}
}
+ static FIELDS: [&str; 3] = [START_FIELD, END_FIELD, VALUE_FIELD];
+
let visitor = SpannedVisitor(::std::marker::PhantomData);
- static FIELDS: [&str; 3] = [START_FIELD, END_FIELD, VALUE_FIELD];
deserializer.deserialize_struct(NAME, &FIELDS, visitor)
}
}
diff --git a/crates/serde_yaml/.android-checksum.json b/crates/serde_yaml/.android-checksum.json
new file mode 100644
index 0000000..b433934
--- /dev/null
+++ b/crates/serde_yaml/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"src/value/from.rs":"2c2767e27060dcad93a3bbc20751bf1053c9d02896ac16ee5e1b7dbc9621bc70","README.md":"d6c6584dd07fbf1a9aaef80e3587dd3bed8793acd7d1253ef196bf8373235a0e","LICENSE-MIT":"38620a3cfaeec97a9197e8c39e436ea7f0bc86699b1f1c35f1aa41785b6d4eac","src/value/partial_eq.rs":"2c7acbfe7ef901f93e281fe8ae6f37e0941649824972224768969598a162f110","cargo_embargo.json":"aa45a963da01d3f018be316cd5b7646a5b413ce2611c5218f2914d2e8a9efd0e","src/value/index.rs":"49d08ed9e4b800c898f436b1c77b5488452b8c00393cced893fbe9b29ea0f4ba","src/value/mod.rs":"cf68e61300acbb292c5a7c4ca4dcbe0f49778dc297e2428d94d7f5bcdb4224f8","src/ser.rs":"d6378f1db1b1f321c9e7f1b8b3770ec35ed73f1fe70b8bf68e5a03cc75e98410","src/libyaml/error.rs":"c3c6174a0644bf15a450e1f24783ff85700cdd6f9eeeb0c007e60621d12e0d7b","tests/test_value.rs":"4abe535b7f978ee441cd5d3113f9d9dafd46b9bec9d76dec2732624acbbfcbd4","METADATA":"bab42b7df592adbe0422f9dee8ad20ebd4f45014b49f8f49285e902f07efdfc3","tests/test_serde.rs":"dcda237ab198ceeb908977b99cdb62c825cbbfb8d94179567916f0d2e9aa2048","src/libyaml/mod.rs":"49495b7ffcedd44a9e26ee9e87450dd6b1bff7c9eb012b9422746f4665c820b4","src/error.rs":"c21d3e400f8436054893860c9913caad10022e2c90c4c2a9f318afcab6070063","src/libyaml/util.rs":"20395293aef5fdd829cf2123a87e9166a4d8961eb61b0557a3b64e8916476926","src/value/tagged.rs":"b99f0577eda4a18cb5fe9e19cce5b17e214107e9f87a36dc502223a80ddd7dd7","src/libyaml/tag.rs":"d2e9b6b575b4057d34a72af0928ae66f169655f8e7997903535a239efd4c1cf0","src/libyaml/cstr.rs":"ef88427d90d5824160c837fde7825849567536b897d6dec3f893cf028e15193c","Android.bp":"342338f81e8c874e8384f719b7e98dfaacb15fb56804f015f26ac857a45e67f9","src/lib.rs":"b595b14cd9d43647b0c712f40d706d2ce3cee990b3299e33ffa49f5349145665","src/with.rs":"37e6788ac9c36f349fdde86c8b1da698f10d8dc838a399ebbae85592092a1102","src/mapping.rs":"1bedfb313ab0edf0ae9e1ca71c5f203ccaf710f489c0480fe2cfe6529a4a8c3d","src/loader.rs":"f9ac30e993f9da2c6f380922b52e1460ecbb5ebc807d228c6fbb207e2d01c887","src/libyaml/parser.rs":"9a59db7b6d2653cfca6e8235ab4e9a70479e882e9ddc37871e259ceb1b6b1033","LICENSE":"ef148b1097d08e1bad082544fb3c9440164fc0790765c1b1f8497010648308b3","LICENSE-APACHE":"50f827348bfd5def2df4f30cb41264072cf9c180bd9ed698437e8d85b2482754","src/libyaml/emitter.rs":"b73f89847287de1a4aa6f0f5c7931b0800b399c6fb40d0bc426ee8b74e1beed5","Cargo.toml":"7a1859ebd1e7d1d6b8792728ff1a653fb62bd5de7e8913597ca68aae5d4c2588","src/de.rs":"94be468888d5726f02855b6440439eef422a205b82b4a7a3e2e776df7cbe1d32","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a",".cargo-checksum.json":"5efd60aeb35dbecb7d3a2ebd6bb36a3ba744cef567f9b79ddbf2bb7b9fe7a9b4","src/value/debug.rs":"2db925a29e3dcc97d9fce4b0a8cc6369130bd7981ec28510b5766769f3dff5a3","src/path.rs":"316ba71199d13bce9062207d178337e09bd397fcd106e7a363a70fce69721171","tests/test_de.rs":"66db6c858066e1527d5b0272318419ff246dd4481dfc2fbcfd66adb138a5f38e","src/value/de.rs":"e1fb742765b0a61dea408fde283e57b7e245153c19d4fce6c4984a50adbf7bf4","patches/LICENSE.patch":"6684cc7c50c2c3cd58746892dc3fa706a3e727753f8f025c08d751cf2fdfcfee","src/value/ser.rs":"0012279dcdc4787275703b0830cc3a2877fe59b49dfe9aafa938a04366b721da","src/number.rs":"006d56a76745d57184a43ea2fa453cb8f61e756b2e4263f0dea21ec1bc5eee93","tests/test_error.rs":"9314875dd679691dcab836f1e3f6a6d055744ee442fa483418f7fa6cabc20feb"}}
\ No newline at end of file
diff --git a/crates/serde_yaml/.cargo-checksum.json b/crates/serde_yaml/.cargo-checksum.json
index bf03d31..e006827 100644
--- a/crates/serde_yaml/.cargo-checksum.json
+++ b/crates/serde_yaml/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"4b5aaa5a7cb90f50c8679c6b70690f61f90bde778313a5b691e8543de4ecf0b8","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"fdbbad6da49079485b19e9b96826de736da989960c1dca0dc2d2e1d4d515fd60","src/de.rs":"b5416aa3576e454aa92ee3fab10550f8de7d0d6e4d96a9a6a3afdafab12d12bc","src/error.rs":"7734732a5fc907e9a424cc7df48ca4a46cf5d57bedf3e328b0b31c5166d3421a","src/lib.rs":"7c0c9d43161861a469a03fa3adb0a6789f8e9ce308f70e7aba365e81e3bd9586","src/libyaml/cstr.rs":"37792e227a594ece956fb24da6b335ed902df760e7095af6197ea48c5ba1ce46","src/libyaml/emitter.rs":"2e6d50dba004b5e9ad7831e0f2c87c28f7752871f338f5e90750ebfe571634f0","src/libyaml/error.rs":"c8db3f27d7427d57b5f0b7b2400f4fff0b962104b8b45cd457145e1a6e84111f","src/libyaml/mod.rs":"a163ac16fc849a93e864beb794000487c4a1f40618060ed8f43f5f05178c0348","src/libyaml/parser.rs":"14d5c804ef1449616d77eb177eae7055009fc009d0406261d50e7b00c6c50dcd","src/libyaml/tag.rs":"9b3937b6983397446d9e7a417ac0735bff87e26bfafbca4205fac5e38c68cea2","src/libyaml/util.rs":"1550d2dcad69ba783f320c985a1e02b784e7f4c75700aad7820902dca256737b","src/loader.rs":"6360fd9a8e051e94ce3b3445af4042d7bee470d3822f452f8d22a6e36fd6bb88","src/mapping.rs":"c81865d5e08c303ec9ecf205be0a931c792783db2aad754634ca57eb63eaecaa","src/number.rs":"f723b17e21825c9b793de69ef17b5811322428ed62c34426c9f5a138550839e0","src/path.rs":"44d339ce1814effd10ba131ae0393df215f09dbfb35ab4d678f49d4081f58dd4","src/ser.rs":"371dae16bdffc02dc99a6447cc1c8eae610a89b48302e9c9ed6e0b2b9cbdc094","src/value/de.rs":"c7f25d5ace625000ea7b6387f2ad8d8e93ab882702b9c6953854d9f41defc0d5","src/value/debug.rs":"a1efda5de70e9ef85057490384968367335694bd22fb6a5c2096192797c87be9","src/value/from.rs":"cd66c76c4ab03bed32f8c4b22ffbd96274a837d587624a62d0584c7090633862","src/value/index.rs":"0969af1324c7b59d0e0b410144f25282fe0889fa6416cdc2c301f7f6d9114b5b","src/value/mod.rs":"bb8f14fb534e5d305e1e5c889bf4cb409f7d502030bda0629014ca05608fc2e1","src/value/partial_eq.rs":"69b5ed7a3735818e3e1140fca8a6318f4868045139bf4ea325c9738ea1bf1347","src/value/ser.rs":"35fcb93d0c6f7f72225c94fad85fc958f927a1f9a1ec97918cb97ec82b7df878","src/value/tagged.rs":"cdf3ff8ec39bb360b10f0e352dded4e5d6bacd3a131a707b8211e1635a1249d2","src/with.rs":"c83b0740a7700b436648310fa41f708bce8d61eb762ddcfc8a9d314bd7761ef0","tests/test_de.rs":"ad02c6e8e413f79132f6ffa9832ca5545d8eb21bf417ead31c88e75f669529a8","tests/test_error.rs":"c1925cf77bfa4d844a1345a34103b1ad7c1d729b32e5197e5934fa9d2d0256df","tests/test_serde.rs":"6ac4939a989f8689efa46e957608566fa69f34de7435a234e87a63c8cc8158fc","tests/test_value.rs":"8fe55f0108c84ec78c0de0e36bfc8d9f40a3eb8060d43edd7b9e170ce484a85c"},"package":"adf8a49373e98a4c5f0ceb5d05aa7c648d75f63774981ed95b7c7443bbd50c6e"}
\ No newline at end of file
+{"files":{"Cargo.toml":"0919ae36b448b187a2caf443f04d5f20da1ce4aabb1112a6b86b5859b41129e3","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"fdbbad6da49079485b19e9b96826de736da989960c1dca0dc2d2e1d4d515fd60","src/de.rs":"b5416aa3576e454aa92ee3fab10550f8de7d0d6e4d96a9a6a3afdafab12d12bc","src/error.rs":"7734732a5fc907e9a424cc7df48ca4a46cf5d57bedf3e328b0b31c5166d3421a","src/lib.rs":"b21e700fef5e6bc58fa41acda244888bacb20b3ce92e915469bc62550c3507e7","src/libyaml/cstr.rs":"37792e227a594ece956fb24da6b335ed902df760e7095af6197ea48c5ba1ce46","src/libyaml/emitter.rs":"2e6d50dba004b5e9ad7831e0f2c87c28f7752871f338f5e90750ebfe571634f0","src/libyaml/error.rs":"c8db3f27d7427d57b5f0b7b2400f4fff0b962104b8b45cd457145e1a6e84111f","src/libyaml/mod.rs":"a163ac16fc849a93e864beb794000487c4a1f40618060ed8f43f5f05178c0348","src/libyaml/parser.rs":"14d5c804ef1449616d77eb177eae7055009fc009d0406261d50e7b00c6c50dcd","src/libyaml/tag.rs":"9b3937b6983397446d9e7a417ac0735bff87e26bfafbca4205fac5e38c68cea2","src/libyaml/util.rs":"1550d2dcad69ba783f320c985a1e02b784e7f4c75700aad7820902dca256737b","src/loader.rs":"6360fd9a8e051e94ce3b3445af4042d7bee470d3822f452f8d22a6e36fd6bb88","src/mapping.rs":"345cdb55f36a25045dad40ead7cefeac82acb786bc09e608c46ea5d8e2ccabe0","src/number.rs":"f723b17e21825c9b793de69ef17b5811322428ed62c34426c9f5a138550839e0","src/path.rs":"44d339ce1814effd10ba131ae0393df215f09dbfb35ab4d678f49d4081f58dd4","src/ser.rs":"371dae16bdffc02dc99a6447cc1c8eae610a89b48302e9c9ed6e0b2b9cbdc094","src/value/de.rs":"c7f25d5ace625000ea7b6387f2ad8d8e93ab882702b9c6953854d9f41defc0d5","src/value/debug.rs":"a1efda5de70e9ef85057490384968367335694bd22fb6a5c2096192797c87be9","src/value/from.rs":"f694791e39e1ff03cb31aeb7c9780ab404afd378b513409fb4c245d56bbc969e","src/value/index.rs":"0969af1324c7b59d0e0b410144f25282fe0889fa6416cdc2c301f7f6d9114b5b","src/value/mod.rs":"bb8f14fb534e5d305e1e5c889bf4cb409f7d502030bda0629014ca05608fc2e1","src/value/partial_eq.rs":"69b5ed7a3735818e3e1140fca8a6318f4868045139bf4ea325c9738ea1bf1347","src/value/ser.rs":"35fcb93d0c6f7f72225c94fad85fc958f927a1f9a1ec97918cb97ec82b7df878","src/value/tagged.rs":"cdf3ff8ec39bb360b10f0e352dded4e5d6bacd3a131a707b8211e1635a1249d2","src/with.rs":"c83b0740a7700b436648310fa41f708bce8d61eb762ddcfc8a9d314bd7761ef0","tests/test_de.rs":"ad02c6e8e413f79132f6ffa9832ca5545d8eb21bf417ead31c88e75f669529a8","tests/test_error.rs":"c1925cf77bfa4d844a1345a34103b1ad7c1d729b32e5197e5934fa9d2d0256df","tests/test_serde.rs":"6ac4939a989f8689efa46e957608566fa69f34de7435a234e87a63c8cc8158fc","tests/test_value.rs":"8fe55f0108c84ec78c0de0e36bfc8d9f40a3eb8060d43edd7b9e170ce484a85c"},"package":"8fd075d994154d4a774f95b51fb96bdc2832b0ea48425c92546073816cda1f2f"}
\ No newline at end of file
diff --git a/crates/serde_yaml/Android.bp b/crates/serde_yaml/Android.bp
index 20cfda8..0b94b5c 100644
--- a/crates/serde_yaml/Android.bp
+++ b/crates/serde_yaml/Android.bp
@@ -18,7 +18,7 @@
host_supported: true,
crate_name: "serde_yaml",
cargo_env_compat: true,
- cargo_pkg_version: "0.9.31",
+ cargo_pkg_version: "0.9.32",
crate_root: "src/lib.rs",
edition: "2021",
rustlibs: [
diff --git a/crates/serde_yaml/Cargo.toml b/crates/serde_yaml/Cargo.toml
index f8b42b8..d777f14 100644
--- a/crates/serde_yaml/Cargo.toml
+++ b/crates/serde_yaml/Cargo.toml
@@ -13,7 +13,7 @@
edition = "2021"
rust-version = "1.64"
name = "serde_yaml"
-version = "0.9.31"
+version = "0.9.32"
authors = ["David Tolnay <[email protected]>"]
description = "YAML data format for Serde"
documentation = "https://docs.rs/serde_yaml/"
diff --git a/crates/serde_yaml/METADATA b/crates/serde_yaml/METADATA
index 60fd382..d3da4d9 100644
--- a/crates/serde_yaml/METADATA
+++ b/crates/serde_yaml/METADATA
@@ -1,17 +1,17 @@
name: "serde_yaml"
description: "YAML data format for Serde"
third_party {
- version: "0.9.31"
+ version: "0.9.32"
license_type: NOTICE
last_upgrade_date {
year: 2024
- month: 2
- day: 5
+ month: 12
+ day: 20
}
homepage: "https://crates.io/crates/serde_yaml"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/serde_yaml/serde_yaml-0.9.31.crate"
- version: "0.9.31"
+ value: "https://static.crates.io/crates/serde_yaml/serde_yaml-0.9.32.crate"
+ version: "0.9.32"
}
}
diff --git a/crates/serde_yaml/src/lib.rs b/crates/serde_yaml/src/lib.rs
index 7afcf93..500c90f 100644
--- a/crates/serde_yaml/src/lib.rs
+++ b/crates/serde_yaml/src/lib.rs
@@ -115,7 +115,7 @@
//! }
//! ```
-#![doc(html_root_url = "https://docs.rs/serde_yaml/0.9.31")]
+#![doc(html_root_url = "https://docs.rs/serde_yaml/0.9.32")]
#![deny(missing_docs, unsafe_op_in_unsafe_fn)]
// Suppressed clippy_pedantic lints
#![allow(
diff --git a/crates/serde_yaml/src/mapping.rs b/crates/serde_yaml/src/mapping.rs
index b1341a6..667cd4b 100644
--- a/crates/serde_yaml/src/mapping.rs
+++ b/crates/serde_yaml/src/mapping.rs
@@ -7,7 +7,6 @@
use std::collections::hash_map::DefaultHasher;
use std::fmt::{self, Display};
use std::hash::{Hash, Hasher};
-use std::iter::FromIterator;
use std::mem;
/// A YAML mapping in which the keys and values are both `serde_yaml::Value`.
@@ -76,7 +75,7 @@
index.index_into_mut(self)
}
- /// Gets the given key’s corresponding entry in the map for insertion and/or
+ /// Gets the given key's corresponding entry in the map for insertion and/or
/// in-place manipulation.
#[inline]
pub fn entry(&mut self, k: Value) -> Entry {
@@ -89,7 +88,7 @@
/// Removes and returns the value corresponding to the key from the map.
///
/// This is equivalent to [`.swap_remove(index)`][Self::swap_remove],
- /// replacing this entry’s position with the last element. If you need to
+ /// replacing this entry's position with the last element. If you need to
/// preserve the relative order of the keys in the map, use
/// [`.shift_remove(key)`][Self::shift_remove] instead.
#[inline]
@@ -100,7 +99,7 @@
/// Remove and return the key-value pair.
///
/// This is equivalent to [`.swap_remove_entry(index)`][Self::swap_remove_entry],
- /// replacing this entry’s position with the last element. If you need to
+ /// replacing this entry's position with the last element. If you need to
/// preserve the relative order of the keys in the map, use
/// [`.shift_remove_entry(key)`][Self::shift_remove_entry] instead.
#[inline]
diff --git a/crates/serde_yaml/src/value/from.rs b/crates/serde_yaml/src/value/from.rs
index c02855d..82412c4 100644
--- a/crates/serde_yaml/src/value/from.rs
+++ b/crates/serde_yaml/src/value/from.rs
@@ -145,8 +145,6 @@
}
}
-use std::iter::FromIterator;
-
impl<T: Into<Value>> FromIterator<T> for Value {
/// Convert an iteratable type to a YAML sequence
///
diff --git a/crates/shared_child/.android-checksum.json b/crates/shared_child/.android-checksum.json
new file mode 100644
index 0000000..aa1e222
--- /dev/null
+++ b/crates/shared_child/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"src/lib.rs":"033c710622208a31d764796228f746e5782bd3838c2dcd9cf4046f6e4c94fc85","MODULE_LICENSE_MIT":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","README.tpl":"5511055c4ee1eb92c28b4071aa824e6bf788adfaff0fbcdb01c6b3d30e42f665","Cargo.toml":"721dfa16f3ef683822d8e1c86fadcbc0ffca8a68c1b918de83c53fbf9c6c7389","src/sys/windows.rs":"dd101237e00bef5b5e9cb0cc36c69c22aeb9c0a90e66bfdfaa6f664f7026e76d","src/sys/mod.rs":"a7df4bf87fd497d2c5b8aec9a57447129d51e724ac0255eb2c58781af6b2fea6","Android.bp":"606285ef53315d03ef6914faa004ef8db7bafcfb6840fd939f16b134f76826da","cargo_embargo.json":"d22ac1fd1275371ceedbb94757f2a6c145fab2627db6d7a1f6945c1cdcda218c","README.md":"3d5db4ac0a3f8aa0a114594429de293584c524a8a5b67bfe340c81635d929607","src/sys/unix.rs":"05f90e4685a6f548925e807c00c883b4238db10cc30f2cfc59b0a3d829d31d7c","src/unix.rs":"0aa7cd7d4077efa7024a0842784aa8f0fef84790f117608c7c29ac9aa5a5d526",".cargo-checksum.json":"b6cf73a7fedd0d1997a00e85c1e904f841a898349c9611cd58deaae546ad3747","LICENSE":"29856856b1e210364711a1394960b7ffc52417a1ffa353f4b498400205e190fa","TEST_MAPPING":"63673b283d8a11f12f121eb2f00be291fd9abddad2f1afc28158ccb162d847c2","METADATA":"75937ef5d2fd3ebae706041f36b15ff6e92525dd7a601f0c923a5820bffdd5f2"}}
\ No newline at end of file
diff --git a/crates/shared_child/.cargo-checksum.json b/crates/shared_child/.cargo-checksum.json
index 90034a1..805c546 100644
--- a/crates/shared_child/.cargo-checksum.json
+++ b/crates/shared_child/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"e1cf32a2301066aa0b4fe8a182744d3382a2ca02a526d350c00f109ab00ef293","LICENSE":"8f71659370c5268d9a1dc962a46232540e8fca63462586d8efaa95aab492a208","README.md":"fafafb6b1b6c2de9dd365f60e6a3688b15a25684a7ed45d37327e91e469ba516","README.tpl":"1873b372342180ca3facc404b5ddfe19cd129d46f151e0b76bbb7270f103c982","src/lib.rs":"f386a2d28aaf9ac45f2d8d76aca9a4f4067408f30448e42e170a430091d2a233","src/sys/mod.rs":"93090b3afdec3a5115e004cf4448ae1a181df7aa6ed39aadb9637e3c9a9e8bc4","src/sys/unix.rs":"f13d657f995d25d7feaf641a24c564eee45544a4af17c0b19cca9fbbf8bc5703","src/sys/windows.rs":"7a13eb4e711529988cfd644b469f13cd2cef6e7f19b0ed3d5c5ee893d8bf85f1","src/unix.rs":"6fd24f30ffccf6c64ff8115d2e5c6dab72a8653b349394cfcfb76feabe8d0586"},"package":"b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef"}
\ No newline at end of file
+{"files":{"Cargo.toml":"adcf9d1cb1d335e1606b6a9d54b80fe02637964c158b1911d5d9bcaf9d4616a2","LICENSE":"8f71659370c5268d9a1dc962a46232540e8fca63462586d8efaa95aab492a208","README.md":"fafafb6b1b6c2de9dd365f60e6a3688b15a25684a7ed45d37327e91e469ba516","README.tpl":"1873b372342180ca3facc404b5ddfe19cd129d46f151e0b76bbb7270f103c982","src/lib.rs":"bd69c8af09565b41bb7ea583b350e737d171aed05511e073f52ea27d51d77022","src/sys/mod.rs":"93090b3afdec3a5115e004cf4448ae1a181df7aa6ed39aadb9637e3c9a9e8bc4","src/sys/unix.rs":"f13d657f995d25d7feaf641a24c564eee45544a4af17c0b19cca9fbbf8bc5703","src/sys/windows.rs":"61ebc0652b0376ae26973df75daa5634046a4e6ce20df92b0f7b5bf7407e6537","src/unix.rs":"6fd24f30ffccf6c64ff8115d2e5c6dab72a8653b349394cfcfb76feabe8d0586"},"package":"09fa9338aed9a1df411814a5b2252f7cd206c55ae9bf2fa763f8de84603aa60c"}
\ No newline at end of file
diff --git a/crates/shared_child/Android.bp b/crates/shared_child/Android.bp
index 709c6a6..bbdf73a 100644
--- a/crates/shared_child/Android.bp
+++ b/crates/shared_child/Android.bp
@@ -18,9 +18,9 @@
host_supported: true,
crate_name: "shared_child",
cargo_env_compat: true,
- cargo_pkg_version: "1.0.0",
+ cargo_pkg_version: "1.0.1",
crate_root: "src/lib.rs",
- edition: "2018",
+ edition: "2021",
rustlibs: ["liblibc"],
apex_available: [
"//apex_available:platform",
diff --git a/crates/shared_child/Cargo.toml b/crates/shared_child/Cargo.toml
index d13367c..fb85784 100644
--- a/crates/shared_child/Cargo.toml
+++ b/crates/shared_child/Cargo.toml
@@ -10,19 +10,38 @@
# See Cargo.toml.orig for the original contents.
[package]
-edition = "2018"
+edition = "2021"
name = "shared_child"
-version = "1.0.0"
+version = "1.0.1"
authors = ["jacko"]
+build = false
+autobins = false
+autoexamples = false
+autotests = false
+autobenches = false
description = "a library for using child processes from multiple threads"
documentation = "https://docs.rs/shared_child"
readme = "README.md"
-keywords = ["command", "process", "child", "subprocess"]
+keywords = [
+ "command",
+ "process",
+ "child",
+ "subprocess",
+]
categories = ["os"]
license = "MIT"
repository = "https://github.com/oconnor663/shared_child.rs"
+
+[lib]
+name = "shared_child"
+path = "src/lib.rs"
+
[target."cfg(not(windows))".dependencies.libc]
version = "0.2.42"
-[target."cfg(windows)".dependencies.winapi]
-version = "0.3.5"
-features = ["synchapi", "winbase", "winerror", "winnt"]
+
+[target."cfg(windows)".dependencies.windows-sys]
+version = "0.59.0"
+features = [
+ "Win32_Foundation",
+ "Win32_System_Threading",
+]
diff --git a/crates/shared_child/METADATA b/crates/shared_child/METADATA
index 2a93c10..8798c4f 100644
--- a/crates/shared_child/METADATA
+++ b/crates/shared_child/METADATA
@@ -1,17 +1,17 @@
name: "shared_child"
description: "a library for using child processes from multiple threads"
third_party {
- version: "1.0.0"
+ version: "1.0.1"
license_type: NOTICE
last_upgrade_date {
- year: 2022
- month: 3
- day: 1
+ year: 2024
+ month: 12
+ day: 20
}
homepage: "https://crates.io/crates/shared_child"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/shared_child/shared_child-1.0.0.crate"
- version: "1.0.0"
+ value: "https://static.crates.io/crates/shared_child/shared_child-1.0.1.crate"
+ version: "1.0.1"
}
}
diff --git a/crates/shared_child/src/lib.rs b/crates/shared_child/src/lib.rs
index 5c4f200..ca08e94 100644
--- a/crates/shared_child/src/lib.rs
+++ b/crates/shared_child/src/lib.rs
@@ -400,14 +400,8 @@
shared_child.kill().unwrap();
shared_child.wait().unwrap();
let mut child = shared_child.into_inner();
- // The child has already been waited on, so kill should be an error.
- let kill_err = child.kill().unwrap_err();
- if cfg!(windows) {
- assert_eq!(std::io::ErrorKind::PermissionDenied, kill_err.kind());
- } else {
- assert_eq!(std::io::ErrorKind::InvalidInput, kill_err.kind());
- }
- // But wait should succeed.
+ // Wait should succeed. (Note that we also used to test that
+ // child.kill() failed here, but its behavior changed in Rust 1.72.)
child.wait().unwrap();
}
diff --git a/crates/shared_child/src/sys/windows.rs b/crates/shared_child/src/sys/windows.rs
index 3e8fbc9..6282d1c 100644
--- a/crates/shared_child/src/sys/windows.rs
+++ b/crates/shared_child/src/sys/windows.rs
@@ -1,10 +1,8 @@
use std::io;
use std::os::windows::io::{AsRawHandle, RawHandle};
use std::process::Child;
-use winapi::shared::winerror::WAIT_TIMEOUT;
-use winapi::um::synchapi::WaitForSingleObject;
-use winapi::um::winbase::{INFINITE, WAIT_OBJECT_0};
-use winapi::um::winnt::HANDLE;
+use windows_sys::Win32::Foundation::{HANDLE, WAIT_OBJECT_0, WAIT_TIMEOUT};
+use windows_sys::Win32::System::Threading::{WaitForSingleObject, INFINITE};
pub struct Handle(RawHandle);
diff --git a/crates/smallvec/.android-checksum.json b/crates/smallvec/.android-checksum.json
index 248183f..396cf5d 100644
--- a/crates/smallvec/.android-checksum.json
+++ b/crates/smallvec/.android-checksum.json
@@ -1 +1 @@
-{"package":null,"files":{"scripts/run_miri.sh":"d2e9617474d74e6ac5a849148366e8ca980f42ffca842986d7e09f3d0f84a755","tests/macro.rs":"6dc873dfc1d8cb3175cb8865cb86e9e51eca979d40ae0c6aa47ea2080751c422","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","METADATA":"34e75997571383e69174f25f14d021e888b0311ad66f4dd14edcf9773526577d","LICENSE-APACHE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","debug_metadata/README.md":"418c67b73cea98f2ecb4ed6e196b39fe126955c59118d5f090dbca83a9985abf",".cargo-checksum.json":"9bcd4e000642ce9a76b78326699ccaa7e7fccd41474a40a3b652fcab888131ff","benches/bench.rs":"f251efa86860f98aa4f9423fbc03caf56ed0b3d09835da9e41cc206c74535dfe","Cargo.toml":"2c0edb2bacc3ffcad8fa294772ed4c633ba4e16b7a9ab309cb2278c5697c11e7","Android.bp":"8247868e80d8ef08095489502e311c96a54ffde242705fc0bfd48e02fa772f9f","src/tests.rs":"88c327697b645c24cbbafe7daf0441f434645bc87ef77a803bed1e2f550789d5","TEST_MAPPING":"5a419c7163155a91e02d7a9286f347e2ab6ce5a379de68e54f10b217566f988e","cargo_embargo.json":"88d25cd0fee248d4f4bcfa4300c5cd0914f1e7a046a3d0b9e2438c18fe5e42ff","LICENSE-MIT":"fe6a4e93451059cce8c1c9ddbe92a0fa82ab3e0e5b0a0f001909d45f40dc2a1b","src/specialization.rs":"c6a067616626342b26504ac87dacd4320de1f2d6a692795412750b3c52c23f21","src/arbitrary.rs":"e02f84c3297fe05f999bd8cc2283b0130cc3161bd950f1aaca29a10b961da3c2","LICENSE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","src/lib.rs":"c3d93ab43d8bf31082b99a06bf328c7507f2327f4be9d8c97bfab1d1a2376994","README.md":"b61db92707b86734601ab3bfaf036f14f1d2520b54d1494a5cbfb47d0facd3ff","debug_metadata/smallvec.natvis":"479c9285eeb589637c56a36214ebae471d7261528dfa48d231b6d69245b93532","tests/debugger_visualizer.rs":"3b584ac2297d01e10e06e3162112657f8e615c08c8b02f1f66255c676ae25264"}}
\ No newline at end of file
+{"package":null,"files":{"MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","debug_metadata/README.md":"418c67b73cea98f2ecb4ed6e196b39fe126955c59118d5f090dbca83a9985abf","LICENSE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","src/specialization.rs":"c6a067616626342b26504ac87dacd4320de1f2d6a692795412750b3c52c23f21","tests/debugger_visualizer.rs":"3b584ac2297d01e10e06e3162112657f8e615c08c8b02f1f66255c676ae25264","TEST_MAPPING":"5a419c7163155a91e02d7a9286f347e2ab6ce5a379de68e54f10b217566f988e","METADATA":"f8b69d086a594a5492881bbce07c6eea4771a57cfbd4b8aec07852763185ebc9","src/arbitrary.rs":"e02f84c3297fe05f999bd8cc2283b0130cc3161bd950f1aaca29a10b961da3c2","LICENSE-APACHE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","benches/bench.rs":"f251efa86860f98aa4f9423fbc03caf56ed0b3d09835da9e41cc206c74535dfe","Cargo.toml":"53ecf99b17de3844717ba89d11770686778cc8819269c8872fbd65b4f9e41678","debug_metadata/smallvec.natvis":"479c9285eeb589637c56a36214ebae471d7261528dfa48d231b6d69245b93532","src/tests.rs":"8d208ccf3e42d516d39319fb7cd54ec4f17f444bb8a9d15dccfe55e6b19eec1f","Android.bp":"1e4b6ac1f097c45edc4cd8e87ec8124807d0b642c7bb605afac5d27940e52973","tests/macro.rs":"6dc873dfc1d8cb3175cb8865cb86e9e51eca979d40ae0c6aa47ea2080751c422","cargo_embargo.json":"88d25cd0fee248d4f4bcfa4300c5cd0914f1e7a046a3d0b9e2438c18fe5e42ff",".cargo-checksum.json":"708f69922d9729f09d5c5e35b4316cdcbf09ff34f4501b9635a556e50bf7c312","README.md":"b61db92707b86734601ab3bfaf036f14f1d2520b54d1494a5cbfb47d0facd3ff","src/lib.rs":"45b3057f0d1199b8d07a44e1320edd2bc32efea25c612b8eb4d862e531a3fb54","LICENSE-MIT":"fe6a4e93451059cce8c1c9ddbe92a0fa82ab3e0e5b0a0f001909d45f40dc2a1b","scripts/run_miri.sh":"d2e9617474d74e6ac5a849148366e8ca980f42ffca842986d7e09f3d0f84a755"}}
\ No newline at end of file
diff --git a/crates/smallvec/.cargo-checksum.json b/crates/smallvec/.cargo-checksum.json
index bdb1fcd..894c93a 100644
--- a/crates/smallvec/.cargo-checksum.json
+++ b/crates/smallvec/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"668bb964a243127d65605bb7a0d8d3c81bcbd8f7656a5b5734766ef534b4abcb","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"0b28172679e0009b655da42797c03fd163a3379d5cfa67ba1f1655e974a2a1a9","README.md":"a01127c37308457e8d396b176fb790846be0978c173be3f13260b62efcef011b","benches/bench.rs":"d82015eae942ee5cf74ace8c3c260ee2c6b5bcbeeb87254d2c72622c747a708a","debug_metadata/README.md":"4d7f1c1b2c25ce2231ef71864d06e54323867459035b53bc9e00f66a0a44f82e","debug_metadata/smallvec.natvis":"3092ddebd8fffc3486536d7f27f8c5eae3a8a093d45cd8eeb3946ea2b0c35a15","scripts/run_miri.sh":"74a9f9adc43f986e81977b03846f7dd00122a0150bd8ec3fe4842a1a787e0f07","src/arbitrary.rs":"22e55cfbf60374945b30e6d0855129eff67cd8b878cef6fa997e1f4be67b9e3d","src/lib.rs":"25fe85b6ae7b3972211bf57aeded4c7b72c47e4d843c7a4ba66908442197b5a0","src/specialization.rs":"46433586203399251cba496d67b88d34e1be3c2b591986b77463513da1c66471","src/tests.rs":"29c6e5dad62ebfea74e5116ac4a344b127b91cfb769fe9ba8b02b53773cf7ec8","tests/debugger_visualizer.rs":"185456ad253957fc0c9e904ff8a1135397ac991c29fa3c60f75d8d81f7463022","tests/macro.rs":"22ad4f6f104a599fdcba19cad8834105b8656b212fb6c7573a427d447f5db14f"},"package":"e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"}
\ No newline at end of file
+{"files":{"Cargo.toml":"596bd9699b610b359a05ffa8a628186d640c1090c13f7b980c4a6552630ecdff","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"0b28172679e0009b655da42797c03fd163a3379d5cfa67ba1f1655e974a2a1a9","README.md":"a01127c37308457e8d396b176fb790846be0978c173be3f13260b62efcef011b","benches/bench.rs":"d82015eae942ee5cf74ace8c3c260ee2c6b5bcbeeb87254d2c72622c747a708a","debug_metadata/README.md":"4d7f1c1b2c25ce2231ef71864d06e54323867459035b53bc9e00f66a0a44f82e","debug_metadata/smallvec.natvis":"3092ddebd8fffc3486536d7f27f8c5eae3a8a093d45cd8eeb3946ea2b0c35a15","scripts/run_miri.sh":"74a9f9adc43f986e81977b03846f7dd00122a0150bd8ec3fe4842a1a787e0f07","src/arbitrary.rs":"22e55cfbf60374945b30e6d0855129eff67cd8b878cef6fa997e1f4be67b9e3d","src/lib.rs":"2ee976afdac5673b05caefa2b74d16af9d3d759e27d71ff3c88ce2623483e601","src/specialization.rs":"46433586203399251cba496d67b88d34e1be3c2b591986b77463513da1c66471","src/tests.rs":"e6484be3421287eba6002ba3bed318f656a17c7c1b041293c69f2eb56f74b375","tests/debugger_visualizer.rs":"185456ad253957fc0c9e904ff8a1135397ac991c29fa3c60f75d8d81f7463022","tests/macro.rs":"22ad4f6f104a599fdcba19cad8834105b8656b212fb6c7573a427d447f5db14f"},"package":"3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"}
\ No newline at end of file
diff --git a/crates/smallvec/Android.bp b/crates/smallvec/Android.bp
index 3c94ecc..919871e 100644
--- a/crates/smallvec/Android.bp
+++ b/crates/smallvec/Android.bp
@@ -18,7 +18,7 @@
host_supported: true,
crate_name: "smallvec",
cargo_env_compat: true,
- cargo_pkg_version: "1.13.1",
+ cargo_pkg_version: "1.13.2",
crate_root: "src/lib.rs",
edition: "2018",
features: ["write"],
diff --git a/crates/smallvec/Cargo.toml b/crates/smallvec/Cargo.toml
index baba153..dbb5432 100644
--- a/crates/smallvec/Cargo.toml
+++ b/crates/smallvec/Cargo.toml
@@ -12,7 +12,7 @@
[package]
edition = "2018"
name = "smallvec"
-version = "1.13.1"
+version = "1.13.2"
authors = ["The Servo Project Developers"]
description = "'Small vector' optimization: store up to a small number of items on the stack"
documentation = "https://docs.rs/smallvec/"
diff --git a/crates/smallvec/METADATA b/crates/smallvec/METADATA
index dcb7b20..a54ecc8 100644
--- a/crates/smallvec/METADATA
+++ b/crates/smallvec/METADATA
@@ -1,17 +1,17 @@
name: "smallvec"
description: "\'Small vector\' optimization: store up to a small number of items on the stack"
third_party {
- version: "1.13.1"
+ version: "1.13.2"
license_type: NOTICE
last_upgrade_date {
year: 2024
- month: 2
- day: 5
+ month: 12
+ day: 20
}
homepage: "https://crates.io/crates/smallvec"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/smallvec/smallvec-1.13.1.crate"
- version: "1.13.1"
+ value: "https://static.crates.io/crates/smallvec/smallvec-1.13.2.crate"
+ version: "1.13.2"
}
}
diff --git a/crates/smallvec/src/lib.rs b/crates/smallvec/src/lib.rs
index cadb5d8..1ea3deb 100644
--- a/crates/smallvec/src/lib.rs
+++ b/crates/smallvec/src/lib.rs
@@ -1372,13 +1372,14 @@
}
let mut ptr = ptr.as_ptr();
let len = *len_ptr;
+ if index > len {
+ panic!("index exceeds length");
+ }
+ // SAFETY: add is UB if index > len, but we panicked first
ptr = ptr.add(index);
if index < len {
+ // Shift element to the right of `index`.
ptr::copy(ptr, ptr.add(1), len - index);
- } else if index == len {
- // No elements need shifting.
- } else {
- panic!("index exceeds length");
}
*len_ptr = len + 1;
ptr::write(ptr, element);
diff --git a/crates/smallvec/src/tests.rs b/crates/smallvec/src/tests.rs
index 3eab846..f53100c 100644
--- a/crates/smallvec/src/tests.rs
+++ b/crates/smallvec/src/tests.rs
@@ -1023,3 +1023,36 @@
assert_eq!(a, SmallVec::<[i32; 3]>::from_slice(&[1i32, 3, 5, 6, 7, 8]));
}
+
+/// This assortment of tests, in combination with miri, verifies we handle UB on fishy arguments
+/// given to SmallVec. Draining and extending the allocation are fairly well-tested earlier, but
+/// `smallvec.insert(usize::MAX, val)` once slipped by!
+///
+/// All code that indexes into SmallVecs should be tested with such "trivially wrong" args.
+#[test]
+fn max_dont_panic() {
+ let mut sv: SmallVec<[i32; 2]> = smallvec![0];
+ let _ = sv.get(usize::MAX);
+ sv.truncate(usize::MAX);
+}
+
+#[test]
+#[should_panic]
+fn max_remove() {
+ let mut sv: SmallVec<[i32; 2]> = smallvec![0];
+ sv.remove(usize::MAX);
+}
+
+#[test]
+#[should_panic]
+fn max_swap_remove() {
+ let mut sv: SmallVec<[i32; 2]> = smallvec![0];
+ sv.swap_remove(usize::MAX);
+}
+
+#[test]
+#[should_panic]
+fn test_insert_out_of_bounds() {
+ let mut v: SmallVec<[i32; 4]> = SmallVec::new();
+ v.insert(10, 6);
+}
diff --git a/crates/socket2/.android-checksum.json b/crates/socket2/.android-checksum.json
new file mode 100644
index 0000000..2730be1
--- /dev/null
+++ b/crates/socket2/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"src/sys/windows.rs":"dcc9691cff30692ecf86d91c7c06ca16f03e51ebe538fbb645333c19bdac95fc","METADATA":"f3ec37086b263214162153ccc8bb3552b7a771973b00a20bce5607c7076d645c","LICENSE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","TEST_MAPPING":"c024977f1d74e9c72b87573f1c7cfe9a7f8d1daadb084005fb7edf55d17c0d6c",".cargo-checksum.json":"fdd83f0dc3594dab5be9e51439db97193161a63739c6982aebe8211a1a40ef4c","LICENSE-APACHE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","LICENSE-MIT":"f975a1d3055c02b62c0ba925c8204c30f15563946fbf252bffa3a951fb33bcf9","src/socket.rs":"4a75151c8a0097047e82ba26682008e00c542b02ca662058ccb34cd477969b12","cargo_embargo.json":"a1547c5805385e3a1078855bffc4f9b27de8d01108f027eb0a63d8c72e4bdd76","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","src/sockref.rs":"7de7d62730208983302a543333eba046b7806fa0ac573d1aa755b1b6e96c3147","Cargo.toml":"88b908e4a90d50f985ee0eef13c161eb4b5b72d228a31e2e3f8d076756036573","src/sys/unix.rs":"6e28b418cbcb9b1d50f5cbc369ea71caf209a5cbecbc11cca94f1bf973d609e5","src/sockaddr.rs":"cbcce41d4ceeb2d2689575b7947c83d42116d0e55463ab750ade52e1d777904e","Android.bp":"25e2e7d17f9d2bc5653d98be8abd7ecf55aeae773a98884b83a31fbec3882c47","README.md":"ba7080944bf39aab5f67dee6134792773567b4d348cf854ba74934dfb51fe0b7","src/lib.rs":"c0d3a2223415bf571dbecbb32f6e405ea5302b743ba3bf1446e48cf96f243eb4"}}
\ No newline at end of file
diff --git a/crates/socket2/.cargo-checksum.json b/crates/socket2/.cargo-checksum.json
index 57d2b35..1e9a95b 100644
--- a/crates/socket2/.cargo-checksum.json
+++ b/crates/socket2/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"b90237dd0094556fa5f270e8d6612dd8d6b4d35244c397c60d6f191b5a8442d7","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"5b9d3a55525334c4abdb992a49f8dd4f9853f3c061e905334c56ab1dba1bb3ff","src/lib.rs":"b4757798ca38b3f9ec9e99aeec3918080f8b52a45d677382ad91c7049b209683","src/sockaddr.rs":"1e3a30766beb175a509ed295148de57a6ce6d39382e68c066a2bc4565fa1f033","src/socket.rs":"a4ef50a384867a2278c5f1bb15d4689394926c8b2fb3f840d25ae4f6000e54cf","src/sockref.rs":"7e16a5300cdd003e591486cb3bd384bdb92044e940e3ddf327da27935dc51e22","src/sys/unix.rs":"40c7ac6af023844b74f0824a9fe4df5b3a9b37c9288aed97c10529e4fbd1e2c8","src/sys/windows.rs":"ab92ae1e961413673c58bcad42a28eedebc0b2e7f82f38908839d13cc5bbca7f"},"package":"7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"}
\ No newline at end of file
+{"files":{"Cargo.toml":"08eec1dcd40c18dc36b4fe1e8cb30b74394666384071098eace46dfc65e91fc5","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"5b9d3a55525334c4abdb992a49f8dd4f9853f3c061e905334c56ab1dba1bb3ff","src/lib.rs":"d36eef6cd74fa580ed024dff7067cb8c5166a0df3278e261d68e34a0ec74e22e","src/sockaddr.rs":"2a5a7220313dcc0f75f54bcdf7f944a617853272037f3ccd58949f96287fea3f","src/socket.rs":"568658de8e4b1bb207298ac2dc96952aa8101dcdf8facbe15cb7253f4da19269","src/sockref.rs":"7e16a5300cdd003e591486cb3bd384bdb92044e940e3ddf327da27935dc51e22","src/sys/unix.rs":"3b48b5fdfb332897008b2bd7df3e8cf6cb985b35561f3d564550b4d60fc33e2f","src/sys/windows.rs":"649c6240fbf3c88abcf1db41541b6e6058660013d646e8f64749fc08124d8bea"},"package":"c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8"}
\ No newline at end of file
diff --git a/crates/socket2/Android.bp b/crates/socket2/Android.bp
index 2a69a5c..6e6e004 100644
--- a/crates/socket2/Android.bp
+++ b/crates/socket2/Android.bp
@@ -18,7 +18,7 @@
host_supported: true,
crate_name: "socket2",
cargo_env_compat: true,
- cargo_pkg_version: "0.5.5",
+ cargo_pkg_version: "0.5.8",
crate_root: "src/lib.rs",
edition: "2021",
features: ["all"],
diff --git a/crates/socket2/Cargo.toml b/crates/socket2/Cargo.toml
index 9250ab4..68d8eb7 100644
--- a/crates/socket2/Cargo.toml
+++ b/crates/socket2/Cargo.toml
@@ -13,11 +13,12 @@
edition = "2021"
rust-version = "1.63"
name = "socket2"
-version = "0.5.5"
+version = "0.5.8"
authors = [
"Alex Crichton <[email protected]>",
"Thomas de Zeeuw <[email protected]>",
]
+build = false
include = [
"Cargo.toml",
"LICENSE-APACHE",
@@ -25,6 +26,11 @@
"README.md",
"src/**/*.rs",
]
+autolib = false
+autobins = false
+autoexamples = false
+autotests = false
+autobenches = false
description = """
Utilities for handling networking sockets with a maximal amount of configuration
possible intended.
@@ -70,14 +76,18 @@
[package.metadata.playground]
features = ["all"]
+[lib]
+name = "socket2"
+path = "src/lib.rs"
+
[features]
all = []
[target."cfg(unix)".dependencies.libc]
-version = "0.2.149"
+version = "0.2.150"
[target."cfg(windows)".dependencies.windows-sys]
-version = "0.48"
+version = "0.52"
features = [
"Win32_Foundation",
"Win32_Networking_WinSock",
diff --git a/crates/socket2/METADATA b/crates/socket2/METADATA
index 2c550f2..785bc3c 100644
--- a/crates/socket2/METADATA
+++ b/crates/socket2/METADATA
@@ -1,17 +1,17 @@
name: "socket2"
description: "Utilities for handling networking sockets with a maximal amount of configuration possible intended."
third_party {
- version: "0.5.5"
+ version: "0.5.8"
license_type: NOTICE
last_upgrade_date {
- year: 2023
- month: 10
- day: 25
+ year: 2024
+ month: 12
+ day: 20
}
homepage: "https://crates.io/crates/socket2"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/socket2/socket2-0.5.5.crate"
- version: "0.5.5"
+ value: "https://static.crates.io/crates/socket2/socket2-0.5.8.crate"
+ version: "0.5.8"
}
}
diff --git a/crates/socket2/src/lib.rs b/crates/socket2/src/lib.rs
index 127e070..8f59316 100644
--- a/crates/socket2/src/lib.rs
+++ b/crates/socket2/src/lib.rs
@@ -425,7 +425,10 @@
/// See [`Socket::set_tcp_keepalive`].
#[derive(Debug, Clone)]
pub struct TcpKeepalive {
- #[cfg_attr(any(target_os = "openbsd", target_os = "vita"), allow(dead_code))]
+ #[cfg_attr(
+ any(target_os = "openbsd", target_os = "haiku", target_os = "vita"),
+ allow(dead_code)
+ )]
time: Option<Duration>,
#[cfg(not(any(
target_os = "openbsd",
@@ -434,6 +437,7 @@
target_os = "nto",
target_os = "espidf",
target_os = "vita",
+ target_os = "haiku",
)))]
interval: Option<Duration>,
#[cfg(not(any(
@@ -444,12 +448,14 @@
target_os = "nto",
target_os = "espidf",
target_os = "vita",
+ target_os = "haiku",
)))]
retries: Option<u32>,
}
impl TcpKeepalive {
/// Returns a new, empty set of TCP keepalive parameters.
+ #[allow(clippy::new_without_default)]
pub const fn new() -> TcpKeepalive {
TcpKeepalive {
time: None,
@@ -460,6 +466,7 @@
target_os = "nto",
target_os = "espidf",
target_os = "vita",
+ target_os = "haiku",
)))]
interval: None,
#[cfg(not(any(
@@ -470,6 +477,7 @@
target_os = "nto",
target_os = "espidf",
target_os = "vita",
+ target_os = "haiku",
)))]
retries: None,
}
@@ -507,6 +515,7 @@
target_os = "fuchsia",
target_os = "illumos",
target_os = "ios",
+ target_os = "visionos",
target_os = "linux",
target_os = "macos",
target_os = "netbsd",
@@ -523,6 +532,7 @@
target_os = "fuchsia",
target_os = "illumos",
target_os = "ios",
+ target_os = "visionos",
target_os = "linux",
target_os = "macos",
target_os = "netbsd",
@@ -551,6 +561,7 @@
target_os = "fuchsia",
target_os = "illumos",
target_os = "ios",
+ target_os = "visionos",
target_os = "linux",
target_os = "macos",
target_os = "netbsd",
@@ -569,6 +580,7 @@
target_os = "fuchsia",
target_os = "illumos",
target_os = "ios",
+ target_os = "visionos",
target_os = "linux",
target_os = "macos",
target_os = "netbsd",
@@ -712,6 +724,15 @@
pub fn flags(&self) -> RecvFlags {
sys::msghdr_flags(&self.inner)
}
+
+ /// Gets the length of the control buffer.
+ ///
+ /// Can be used to determine how much, if any, of the control buffer was filled by `recvmsg`.
+ ///
+ /// Corresponds to `msg_controllen` on Unix and `Control.len` on Windows.
+ pub fn control_len(&self) -> usize {
+ sys::msghdr_control_len(&self.inner)
+ }
}
#[cfg(not(target_os = "redox"))]
diff --git a/crates/socket2/src/sockaddr.rs b/crates/socket2/src/sockaddr.rs
index 6df22fd..c80dccf 100644
--- a/crates/socket2/src/sockaddr.rs
+++ b/crates/socket2/src/sockaddr.rs
@@ -258,7 +258,7 @@
/// Returns the initialised storage bytes.
fn as_bytes(&self) -> &[u8] {
// SAFETY: `self.storage` is a C struct which can always be treated a
- // slice of bytes. Futhermore we ensure we don't read any unitialised
+ // slice of bytes. Furthermore, we ensure we don't read any unitialised
// bytes by using `self.len`.
unsafe { std::slice::from_raw_parts(self.as_ptr().cast(), self.len as usize) }
}
@@ -291,6 +291,7 @@
target_os = "haiku",
target_os = "hermit",
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "netbsd",
target_os = "nto",
@@ -334,6 +335,7 @@
target_os = "haiku",
target_os = "hermit",
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "netbsd",
target_os = "nto",
@@ -358,6 +360,7 @@
target_os = "haiku",
target_os = "hermit",
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "netbsd",
target_os = "nto",
diff --git a/crates/socket2/src/socket.rs b/crates/socket2/src/socket.rs
index efe2b0a..4e41793 100644
--- a/crates/socket2/src/socket.rs
+++ b/crates/socket2/src/socket.rs
@@ -760,6 +760,7 @@
target_os = "dragonfly",
target_os = "freebsd",
target_os = "fuchsia",
+ target_os = "hurd",
target_os = "illumos",
target_os = "linux",
target_os = "netbsd",
@@ -786,6 +787,7 @@
target_os = "dragonfly",
target_os = "freebsd",
target_os = "fuchsia",
+ target_os = "hurd",
target_os = "illumos",
target_os = "linux",
target_os = "netbsd",
@@ -799,6 +801,7 @@
// On Apple platforms set `NOSIGPIPE`.
#[cfg(any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
@@ -963,6 +966,37 @@
}
}
+ /// Get value for the `SO_PASSCRED` option on this socket.
+ ///
+ /// For more information about this option, see [`set_passcred`].
+ ///
+ /// [`set_passcred`]: Socket::set_passcred
+ #[cfg(all(unix, target_os = "linux"))]
+ #[cfg_attr(docsrs, doc(cfg(all(unix, target_os = "linux"))))]
+ pub fn passcred(&self) -> io::Result<bool> {
+ unsafe {
+ getsockopt::<c_int>(self.as_raw(), sys::SOL_SOCKET, sys::SO_PASSCRED)
+ .map(|passcred| passcred != 0)
+ }
+ }
+
+ /// Set value for the `SO_PASSCRED` option on this socket.
+ ///
+ /// If this option is enabled, enables the receiving of the `SCM_CREDENTIALS`
+ /// control messages.
+ #[cfg(all(unix, target_os = "linux"))]
+ #[cfg_attr(docsrs, doc(cfg(all(unix, target_os = "linux"))))]
+ pub fn set_passcred(&self, passcred: bool) -> io::Result<()> {
+ unsafe {
+ setsockopt(
+ self.as_raw(),
+ sys::SOL_SOCKET,
+ sys::SO_PASSCRED,
+ passcred as c_int,
+ )
+ }
+ }
+
/// Get value for the `SO_RCVBUF` option on this socket.
///
/// For more information about this option, see [`set_recv_buffer_size`].
@@ -1020,7 +1054,7 @@
/// Set value for the `SO_REUSEADDR` option on this socket.
///
- /// This indicates that futher calls to `bind` may allow reuse of local
+ /// This indicates that further calls to `bind` may allow reuse of local
/// addresses. For IPv4 sockets this means that a socket may bind even when
/// there's a socket already listening on this port.
pub fn set_reuse_address(&self, reuse: bool) -> io::Result<()> {
@@ -1105,6 +1139,16 @@
/// * Linux: <https://man7.org/linux/man-pages/man7/ip.7.html>
/// * Windows: <https://docs.microsoft.com/en-us/windows/win32/winsock/ipproto-ip-socket-options>
impl Socket {
+ /// This method is deprecated, use [`crate::Socket::header_included_v4`].
+ #[cfg(all(feature = "all", not(any(target_os = "redox", target_os = "espidf"))))]
+ #[cfg_attr(
+ docsrs,
+ doc(cfg(all(feature = "all", not(any(target_os = "redox", target_os = "espidf")))))
+ )]
+ #[deprecated = "Use `Socket::header_included_v4` instead"]
+ pub fn header_included(&self) -> io::Result<bool> {
+ self.header_included_v4()
+ }
/// Get the value of the `IP_HDRINCL` option on this socket.
///
/// For more information about this option, see [`set_header_included`].
@@ -1115,13 +1159,28 @@
docsrs,
doc(cfg(all(feature = "all", not(any(target_os = "redox", target_os = "espidf")))))
)]
- pub fn header_included(&self) -> io::Result<bool> {
+ pub fn header_included_v4(&self) -> io::Result<bool> {
unsafe {
getsockopt::<c_int>(self.as_raw(), sys::IPPROTO_IP, sys::IP_HDRINCL)
.map(|included| included != 0)
}
}
+ /// This method is deprecated, use [`crate::Socket::set_header_included_v4`].
+ #[cfg_attr(
+ any(target_os = "fuchsia", target_os = "illumos", target_os = "solaris"),
+ allow(rustdoc::broken_intra_doc_links)
+ )]
+ #[cfg(all(feature = "all", not(any(target_os = "redox", target_os = "espidf"))))]
+ #[cfg_attr(
+ docsrs,
+ doc(cfg(all(feature = "all", not(any(target_os = "redox", target_os = "espidf")))))
+ )]
+ #[deprecated = "Use `Socket::set_header_included_v4` instead"]
+ pub fn set_header_included(&self, included: bool) -> io::Result<()> {
+ self.set_header_included_v4(included)
+ }
+
/// Set the value of the `IP_HDRINCL` option on this socket.
///
/// If enabled, the user supplies an IP header in front of the user data.
@@ -1142,7 +1201,7 @@
docsrs,
doc(cfg(all(feature = "all", not(any(target_os = "redox", target_os = "espidf")))))
)]
- pub fn set_header_included(&self, included: bool) -> io::Result<()> {
+ pub fn set_header_included_v4(&self, included: bool) -> io::Result<()> {
unsafe {
setsockopt(
self.as_raw(),
@@ -1307,6 +1366,7 @@
#[cfg(not(any(
target_os = "dragonfly",
target_os = "haiku",
+ target_os = "hurd",
target_os = "netbsd",
target_os = "openbsd",
target_os = "redox",
@@ -1344,6 +1404,7 @@
#[cfg(not(any(
target_os = "dragonfly",
target_os = "haiku",
+ target_os = "hurd",
target_os = "netbsd",
target_os = "openbsd",
target_os = "redox",
@@ -1373,6 +1434,43 @@
}
}
+ /// Get the value of the `IP_MULTICAST_ALL` option for this socket.
+ ///
+ /// For more information about this option, see [`set_multicast_all_v4`].
+ ///
+ /// [`set_multicast_all_v4`]: Socket::set_multicast_all_v4
+ #[cfg(all(feature = "all", target_os = "linux"))]
+ #[cfg_attr(docsrs, doc(cfg(all(feature = "all", target_os = "linux"))))]
+ pub fn multicast_all_v4(&self) -> io::Result<bool> {
+ unsafe {
+ getsockopt::<c_int>(self.as_raw(), sys::IPPROTO_IP, libc::IP_MULTICAST_ALL)
+ .map(|all| all != 0)
+ }
+ }
+
+ /// Set the value of the `IP_MULTICAST_ALL` option for this socket.
+ ///
+ /// This option can be used to modify the delivery policy of
+ /// multicast messages. The argument is a boolean
+ /// (defaults to true). If set to true, the socket will receive
+ /// messages from all the groups that have been joined
+ /// globally on the whole system. Otherwise, it will deliver
+ /// messages only from the groups that have been explicitly
+ /// joined (for example via the `IP_ADD_MEMBERSHIP` option) on
+ /// this particular socket.
+ #[cfg(all(feature = "all", target_os = "linux"))]
+ #[cfg_attr(docsrs, doc(cfg(all(feature = "all", target_os = "linux"))))]
+ pub fn set_multicast_all_v4(&self, all: bool) -> io::Result<()> {
+ unsafe {
+ setsockopt(
+ self.as_raw(),
+ sys::IPPROTO_IP,
+ libc::IP_MULTICAST_ALL,
+ all as c_int,
+ )
+ }
+ }
+
/// Get the value of the `IP_MULTICAST_IF` option for this socket.
///
/// For more information about this option, see [`set_multicast_if_v4`].
@@ -1487,6 +1585,7 @@
target_os = "redox",
target_os = "solaris",
target_os = "illumos",
+ target_os = "haiku",
)))]
pub fn set_tos(&self, tos: u32) -> io::Result<()> {
unsafe { setsockopt(self.as_raw(), sys::IPPROTO_IP, sys::IP_TOS, tos as c_int) }
@@ -1505,6 +1604,7 @@
target_os = "redox",
target_os = "solaris",
target_os = "illumos",
+ target_os = "haiku",
)))]
pub fn tos(&self) -> io::Result<u32> {
unsafe {
@@ -1521,6 +1621,7 @@
target_os = "aix",
target_os = "dragonfly",
target_os = "fuchsia",
+ target_os = "hurd",
target_os = "illumos",
target_os = "netbsd",
target_os = "openbsd",
@@ -1551,6 +1652,7 @@
target_os = "aix",
target_os = "dragonfly",
target_os = "fuchsia",
+ target_os = "hurd",
target_os = "illumos",
target_os = "netbsd",
target_os = "openbsd",
@@ -1575,6 +1677,71 @@
/// * Linux: <https://man7.org/linux/man-pages/man7/ipv6.7.html>
/// * Windows: <https://docs.microsoft.com/en-us/windows/win32/winsock/ipproto-ipv6-socket-options>
impl Socket {
+ /// Get the value of the `IP_HDRINCL` option on this socket.
+ ///
+ /// For more information about this option, see [`set_header_included`].
+ ///
+ /// [`set_header_included`]: Socket::set_header_included
+ #[cfg(all(
+ feature = "all",
+ not(any(
+ target_os = "redox",
+ target_os = "espidf",
+ target_os = "openbsd",
+ target_os = "freebsd",
+ target_os = "dragonfly",
+ target_os = "netbsd"
+ ))
+ ))]
+ #[cfg_attr(
+ docsrs,
+ doc(cfg(all(feature = "all", not(any(target_os = "redox", target_os = "espidf")))))
+ )]
+ pub fn header_included_v6(&self) -> io::Result<bool> {
+ unsafe {
+ getsockopt::<c_int>(self.as_raw(), sys::IPPROTO_IPV6, sys::IP_HDRINCL)
+ .map(|included| included != 0)
+ }
+ }
+
+ /// Set the value of the `IP_HDRINCL` option on this socket.
+ ///
+ /// If enabled, the user supplies an IP header in front of the user data.
+ /// Valid only for [`SOCK_RAW`] sockets; see [raw(7)] for more information.
+ /// When this flag is enabled, the values set by `IP_OPTIONS` are ignored.
+ ///
+ /// [`SOCK_RAW`]: Type::RAW
+ /// [raw(7)]: https://man7.org/linux/man-pages/man7/raw.7.html
+ #[cfg_attr(
+ any(target_os = "fuchsia", target_os = "illumos", target_os = "solaris"),
+ allow(rustdoc::broken_intra_doc_links)
+ )]
+ #[cfg(all(
+ feature = "all",
+ not(any(
+ target_os = "redox",
+ target_os = "espidf",
+ target_os = "openbsd",
+ target_os = "freebsd",
+ target_os = "dragonfly",
+ target_os = "netbsd"
+ ))
+ ))]
+ #[cfg_attr(
+ docsrs,
+ doc(cfg(all(feature = "all", not(any(target_os = "redox", target_os = "espidf")))))
+ )]
+ pub fn set_header_included_v6(&self, included: bool) -> io::Result<()> {
+ unsafe {
+ setsockopt(
+ self.as_raw(),
+ sys::IPPROTO_IPV6,
+ sys::IP_HDRINCL,
+ included as c_int,
+ )
+ }
+ }
+
/// Join a multicast group using `IPV6_ADD_MEMBERSHIP` option on this socket.
///
/// Some OSs use `IPV6_JOIN_GROUP` for this option.
@@ -1651,6 +1818,43 @@
}
}
+ /// Get the value of the `IPV6_MULTICAST_ALL` option for this socket.
+ ///
+ /// For more information about this option, see [`set_multicast_all_v6`].
+ ///
+ /// [`set_multicast_all_v6`]: Socket::set_multicast_all_v6
+ #[cfg(all(feature = "all", target_os = "linux"))]
+ #[cfg_attr(docsrs, doc(cfg(all(feature = "all", target_os = "linux"))))]
+ pub fn multicast_all_v6(&self) -> io::Result<bool> {
+ unsafe {
+ getsockopt::<c_int>(self.as_raw(), sys::IPPROTO_IPV6, libc::IPV6_MULTICAST_ALL)
+ .map(|all| all != 0)
+ }
+ }
+
+ /// Set the value of the `IPV6_MULTICAST_ALL` option for this socket.
+ ///
+ /// This option can be used to modify the delivery policy of
+ /// multicast messages. The argument is a boolean
+ /// (defaults to true). If set to true, the socket will receive
+ /// messages from all the groups that have been joined
+ /// globally on the whole system. Otherwise, it will deliver
+ /// messages only from the groups that have been explicitly
+ /// joined (for example via the `IPV6_ADD_MEMBERSHIP` option) on
+ /// this particular socket.
+ #[cfg(all(feature = "all", target_os = "linux"))]
+ #[cfg_attr(docsrs, doc(cfg(all(feature = "all", target_os = "linux"))))]
+ pub fn set_multicast_all_v6(&self, all: bool) -> io::Result<()> {
+ unsafe {
+ setsockopt(
+ self.as_raw(),
+ sys::IPPROTO_IPV6,
+ libc::IPV6_MULTICAST_ALL,
+ all as c_int,
+ )
+ }
+ }
+
/// Get the value of the `IPV6_MULTICAST_IF` option for this socket.
///
/// For more information about this option, see [`set_multicast_if_v6`].
@@ -1775,6 +1979,7 @@
target_os = "redox",
target_os = "solaris",
target_os = "haiku",
+ target_os = "hurd",
target_os = "espidf",
target_os = "vita",
)))]
@@ -1799,6 +2004,7 @@
target_os = "redox",
target_os = "solaris",
target_os = "haiku",
+ target_os = "hurd",
target_os = "espidf",
target_os = "vita",
)))]
@@ -1863,6 +2069,7 @@
target_os = "fuchsia",
target_os = "illumos",
target_os = "ios",
+ target_os = "visionos",
target_os = "linux",
target_os = "macos",
target_os = "netbsd",
@@ -1881,6 +2088,7 @@
target_os = "fuchsia",
target_os = "illumos",
target_os = "ios",
+ target_os = "visionos",
target_os = "linux",
target_os = "macos",
target_os = "netbsd",
@@ -1910,6 +2118,7 @@
target_os = "fuchsia",
target_os = "illumos",
target_os = "ios",
+ target_os = "visionos",
target_os = "linux",
target_os = "macos",
target_os = "netbsd",
@@ -1928,6 +2137,7 @@
target_os = "fuchsia",
target_os = "illumos",
target_os = "ios",
+ target_os = "visionos",
target_os = "linux",
target_os = "macos",
target_os = "netbsd",
@@ -2015,6 +2225,48 @@
)
}
}
+
+ /// Get the value for the `SO_ORIGINAL_DST` option on this socket.
+ #[cfg(all(
+ feature = "all",
+ any(
+ target_os = "android",
+ target_os = "fuchsia",
+ target_os = "linux",
+ target_os = "windows",
+ )
+ ))]
+ #[cfg_attr(
+ docsrs,
+ doc(cfg(all(
+ feature = "all",
+ any(
+ target_os = "android",
+ target_os = "fuchsia",
+ target_os = "linux",
+ target_os = "windows",
+ )
+ )))
+ )]
+ pub fn original_dst(&self) -> io::Result<SockAddr> {
+ sys::original_dst(self.as_raw())
+ }
+
+ /// Get the value for the `IP6T_SO_ORIGINAL_DST` option on this socket.
+ #[cfg(all(
+ feature = "all",
+ any(target_os = "android", target_os = "linux", target_os = "windows")
+ ))]
+ #[cfg_attr(
+ docsrs,
+ doc(cfg(all(
+ feature = "all",
+ any(target_os = "android", target_os = "linux", target_os = "windows")
+ )))
+ )]
+ pub fn original_dst_ipv6(&self) -> io::Result<SockAddr> {
+ sys::original_dst_ipv6(self.as_raw())
+ }
}
impl Read for Socket {
@@ -2028,7 +2280,7 @@
#[cfg(not(target_os = "redox"))]
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
// Safety: both `IoSliceMut` and `MaybeUninitSlice` promise to have the
- // same layout, that of `iovec`/`WSABUF`. Furthermore `recv_vectored`
+ // same layout, that of `iovec`/`WSABUF`. Furthermore, `recv_vectored`
// promises to not write unitialised bytes to the `bufs` and pass it
// directly to the `recvmsg` system call, so this is safe.
let bufs = unsafe { &mut *(bufs as *mut [IoSliceMut<'_>] as *mut [MaybeUninitSlice<'_>]) };
diff --git a/crates/socket2/src/sys/unix.rs b/crates/socket2/src/sys/unix.rs
index c562600..1451b1f 100644
--- a/crates/socket2/src/sys/unix.rs
+++ b/crates/socket2/src/sys/unix.rs
@@ -18,6 +18,7 @@
feature = "all",
any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
@@ -31,6 +32,7 @@
target_os = "android",
target_os = "freebsd",
target_os = "ios",
+ target_os = "visionos",
target_os = "linux",
target_os = "macos",
target_os = "tvos",
@@ -46,6 +48,7 @@
target_os = "android",
target_os = "freebsd",
target_os = "ios",
+ target_os = "visionos",
target_os = "linux",
target_os = "macos",
target_os = "tvos",
@@ -63,6 +66,7 @@
#[cfg(not(any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
@@ -121,6 +125,7 @@
#[cfg(not(any(
target_os = "dragonfly",
target_os = "fuchsia",
+ target_os = "hurd",
target_os = "illumos",
target_os = "netbsd",
target_os = "openbsd",
@@ -143,6 +148,7 @@
target_os = "redox",
target_os = "solaris",
target_os = "haiku",
+ target_os = "hurd",
target_os = "nto",
target_os = "espidf",
target_os = "vita",
@@ -152,11 +158,13 @@
target_os = "fuchsia",
target_os = "redox",
target_os = "solaris",
+ target_os = "haiku",
target_os = "illumos",
)))]
pub(crate) use libc::IP_TOS;
#[cfg(not(any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
@@ -164,11 +172,14 @@
pub(crate) use libc::SO_LINGER;
#[cfg(any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
))]
pub(crate) use libc::SO_LINGER_SEC as SO_LINGER;
+#[cfg(target_os = "linux")]
+pub(crate) use libc::SO_PASSCRED;
pub(crate) use libc::{
ip_mreq as IpMreq, linger, IPPROTO_IP, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, IPV6_MULTICAST_IF,
IPV6_MULTICAST_LOOP, IPV6_UNICAST_HOPS, IPV6_V6ONLY, IP_ADD_MEMBERSHIP, IP_DROP_MEMBERSHIP,
@@ -179,6 +190,7 @@
#[cfg(not(any(
target_os = "dragonfly",
target_os = "haiku",
+ target_os = "hurd",
target_os = "netbsd",
target_os = "openbsd",
target_os = "redox",
@@ -196,6 +208,7 @@
target_os = "haiku",
target_os = "illumos",
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "netbsd",
target_os = "nto",
@@ -211,6 +224,7 @@
target_os = "haiku",
target_os = "illumos",
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "netbsd",
target_os = "openbsd",
@@ -230,6 +244,7 @@
target_os = "fuchsia",
target_os = "illumos",
target_os = "ios",
+ target_os = "visionos",
target_os = "linux",
target_os = "macos",
target_os = "netbsd",
@@ -244,6 +259,7 @@
#[cfg(any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "nto",
target_os = "tvos",
@@ -253,6 +269,7 @@
#[cfg(not(any(
target_os = "haiku",
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "nto",
target_os = "openbsd",
@@ -278,6 +295,7 @@
/// Maximum size of a buffer passed to system call like `recv` and `send`.
#[cfg(not(any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
@@ -294,6 +312,7 @@
// both platforms.
#[cfg(any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
@@ -321,6 +340,7 @@
target_os = "linux",
any(
target_env = "musl",
+ target_env = "ohos",
all(target_env = "uclibc", target_pointer_width = "32")
)
),
@@ -329,8 +349,10 @@
target_os = "freebsd",
target_os = "fuchsia",
target_os = "haiku",
+ target_os = "hurd",
target_os = "illumos",
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "netbsd",
target_os = "nto",
@@ -429,6 +451,7 @@
target_os = "dragonfly",
target_os = "freebsd",
target_os = "fuchsia",
+ target_os = "hurd",
target_os = "illumos",
target_os = "linux",
target_os = "netbsd",
@@ -446,6 +469,7 @@
target_os = "dragonfly",
target_os = "freebsd",
target_os = "fuchsia",
+ target_os = "hurd",
target_os = "illumos",
target_os = "linux",
target_os = "netbsd",
@@ -464,6 +488,7 @@
target_os = "dragonfly",
target_os = "freebsd",
target_os = "fuchsia",
+ target_os = "hurd",
target_os = "illumos",
target_os = "linux",
target_os = "netbsd",
@@ -564,6 +589,37 @@
pub const fn is_out_of_band(self) -> bool {
self.0 & libc::MSG_OOB != 0
}
+
+ /// Check if the confirm flag is set.
+ ///
+ /// This is used by SocketCAN to indicate a frame was sent via the
+ /// socket it is received on. This flag can be interpreted as a
+ /// 'transmission confirmation'.
+ ///
+ /// On Unix this corresponds to the `MSG_CONFIRM` flag.
+ #[cfg(all(feature = "all", any(target_os = "android", target_os = "linux")))]
+ #[cfg_attr(
+ docsrs,
+ doc(cfg(all(feature = "all", any(target_os = "android", target_os = "linux"))))
+ )]
+ pub const fn is_confirm(self) -> bool {
+ self.0 & libc::MSG_CONFIRM != 0
+ }
+
+ /// Check if the don't route flag is set.
+ ///
+ /// This is used by SocketCAN to indicate a frame was created
+ /// on the local host.
+ ///
+ /// On Unix this corresponds to the `MSG_DONTROUTE` flag.
+ #[cfg(all(feature = "all", any(target_os = "android", target_os = "linux")))]
+ #[cfg_attr(
+ docsrs,
+ doc(cfg(all(feature = "all", any(target_os = "android", target_os = "linux"))))
+ )]
+ pub const fn is_dontroute(self) -> bool {
+ self.0 & libc::MSG_DONTROUTE != 0
+ }
}
#[cfg(not(target_os = "redox"))]
@@ -575,6 +631,10 @@
s.field("is_out_of_band", &self.is_out_of_band());
#[cfg(not(target_os = "espidf"))]
s.field("is_truncated", &self.is_truncated());
+ #[cfg(all(feature = "all", any(target_os = "android", target_os = "linux")))]
+ s.field("is_confirm", &self.is_confirm());
+ #[cfg(all(feature = "all", any(target_os = "android", target_os = "linux")))]
+ s.field("is_dontroute", &self.is_dontroute());
s.finish()
}
}
@@ -694,6 +754,11 @@
RecvFlags(msg.msg_flags)
}
+#[cfg(not(target_os = "redox"))]
+pub(crate) fn msghdr_control_len(msg: &msghdr) -> usize {
+ msg.msg_controllen as _
+}
+
/// Unix only API.
impl SockAddr {
/// Constructs a `SockAddr` with the family `AF_VSOCK` and the provided CID/port.
@@ -1180,8 +1245,10 @@
target_os = "dragonfly",
target_os = "freebsd",
target_os = "fuchsia",
+ target_os = "hurd",
target_os = "illumos",
target_os = "ios",
+ target_os = "visionos",
target_os = "linux",
target_os = "macos",
target_os = "netbsd",
@@ -1339,6 +1406,47 @@
}
}
+#[cfg(all(
+ feature = "all",
+ any(target_os = "android", target_os = "fuchsia", target_os = "linux")
+))]
+pub(crate) fn original_dst(fd: Socket) -> io::Result<SockAddr> {
+ // Safety: `getsockopt` initialises the `SockAddr` for us.
+ unsafe {
+ SockAddr::try_init(|storage, len| {
+ syscall!(getsockopt(
+ fd,
+ libc::SOL_IP,
+ libc::SO_ORIGINAL_DST,
+ storage.cast(),
+ len
+ ))
+ })
+ }
+ .map(|(_, addr)| addr)
+}
+
+/// Get the value for the `IP6T_SO_ORIGINAL_DST` option on this socket.
+///
+/// This value contains the original destination IPv6 address of the connection
+/// redirected using `ip6tables` `REDIRECT` or `TPROXY`.
+#[cfg(all(feature = "all", any(target_os = "android", target_os = "linux")))]
+pub(crate) fn original_dst_ipv6(fd: Socket) -> io::Result<SockAddr> {
+ // Safety: `getsockopt` initialises the `SockAddr` for us.
+ unsafe {
+ SockAddr::try_init(|storage, len| {
+ syscall!(getsockopt(
+ fd,
+ libc::SOL_IPV6,
+ libc::IP6T_SO_ORIGINAL_DST,
+ storage.cast(),
+ len
+ ))
+ })
+ }
+ .map(|(_, addr)| addr)
+}
+
/// Unix only API.
impl crate::Socket {
/// Accept a new incoming connection from this listener.
@@ -1410,6 +1518,7 @@
#[cfg_attr(
any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos"
@@ -1446,6 +1555,7 @@
feature = "all",
any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
@@ -1457,6 +1567,7 @@
feature = "all",
any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
@@ -1469,6 +1580,7 @@
#[cfg(any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
@@ -1905,6 +2017,7 @@
feature = "all",
any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
@@ -1916,6 +2029,7 @@
feature = "all",
any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
@@ -1941,6 +2055,7 @@
feature = "all",
any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
@@ -1952,6 +2067,7 @@
feature = "all",
any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
@@ -1977,6 +2093,7 @@
feature = "all",
any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
@@ -1988,6 +2105,7 @@
feature = "all",
any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
@@ -2008,6 +2126,7 @@
feature = "all",
any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
@@ -2019,6 +2138,7 @@
feature = "all",
any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
@@ -2036,6 +2156,7 @@
feature = "all",
any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
@@ -2047,6 +2168,7 @@
feature = "all",
any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
@@ -2067,6 +2189,7 @@
feature = "all",
any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
@@ -2078,6 +2201,7 @@
feature = "all",
any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
@@ -2319,62 +2443,6 @@
}
}
- /// Get the value for the `SO_ORIGINAL_DST` option on this socket.
- ///
- /// This value contains the original destination IPv4 address of the connection
- /// redirected using `iptables` `REDIRECT` or `TPROXY`.
- #[cfg(all(
- feature = "all",
- any(target_os = "android", target_os = "fuchsia", target_os = "linux")
- ))]
- #[cfg_attr(
- docsrs,
- doc(cfg(all(
- feature = "all",
- any(target_os = "android", target_os = "fuchsia", target_os = "linux")
- )))
- )]
- pub fn original_dst(&self) -> io::Result<SockAddr> {
- // Safety: `getsockopt` initialises the `SockAddr` for us.
- unsafe {
- SockAddr::try_init(|storage, len| {
- syscall!(getsockopt(
- self.as_raw(),
- libc::SOL_IP,
- libc::SO_ORIGINAL_DST,
- storage.cast(),
- len
- ))
- })
- }
- .map(|(_, addr)| addr)
- }
-
- /// Get the value for the `IP6T_SO_ORIGINAL_DST` option on this socket.
- ///
- /// This value contains the original destination IPv6 address of the connection
- /// redirected using `ip6tables` `REDIRECT` or `TPROXY`.
- #[cfg(all(feature = "all", any(target_os = "android", target_os = "linux")))]
- #[cfg_attr(
- docsrs,
- doc(cfg(all(feature = "all", any(target_os = "android", target_os = "linux"))))
- )]
- pub fn original_dst_ipv6(&self) -> io::Result<SockAddr> {
- // Safety: `getsockopt` initialises the `SockAddr` for us.
- unsafe {
- SockAddr::try_init(|storage, len| {
- syscall!(getsockopt(
- self.as_raw(),
- libc::SOL_IPV6,
- libc::IP6T_SO_ORIGINAL_DST,
- storage.cast(),
- len
- ))
- })
- }
- .map(|(_, addr)| addr)
- }
-
/// Copies data between a `file` and this socket using the `sendfile(2)`
/// system call. Because this copying is done within the kernel,
/// `sendfile()` is more efficient than the combination of `read(2)` and
@@ -2401,6 +2469,7 @@
target_os = "android",
target_os = "freebsd",
target_os = "ios",
+ target_os = "visionos",
target_os = "linux",
target_os = "macos",
target_os = "tvos",
@@ -2416,6 +2485,7 @@
target_os = "android",
target_os = "freebsd",
target_os = "ios",
+ target_os = "visionos",
target_os = "linux",
target_os = "macos",
target_os = "tvos",
@@ -2439,6 +2509,7 @@
feature = "all",
any(
target_os = "ios",
+ target_os = "visionos",
target_os = "macos",
target_os = "tvos",
target_os = "watchos",
diff --git a/crates/socket2/src/sys/windows.rs b/crates/socket2/src/sys/windows.rs
index 4c5d987..8cf27b5 100644
--- a/crates/socket2/src/sys/windows.rs
+++ b/crates/socket2/src/sys/windows.rs
@@ -20,14 +20,16 @@
use std::{process, ptr, slice};
use windows_sys::Win32::Foundation::{SetHandleInformation, HANDLE, HANDLE_FLAG_INHERIT};
-#[cfg(feature = "all")]
-use windows_sys::Win32::Networking::WinSock::SO_PROTOCOL_INFOW;
use windows_sys::Win32::Networking::WinSock::{
self, tcp_keepalive, FIONBIO, IN6_ADDR, IN6_ADDR_0, INVALID_SOCKET, IN_ADDR, IN_ADDR_0,
POLLERR, POLLHUP, POLLRDNORM, POLLWRNORM, SD_BOTH, SD_RECEIVE, SD_SEND, SIO_KEEPALIVE_VALS,
SOCKET_ERROR, WSABUF, WSAEMSGSIZE, WSAESHUTDOWN, WSAPOLLFD, WSAPROTOCOL_INFOW,
WSA_FLAG_NO_HANDLE_INHERIT, WSA_FLAG_OVERLAPPED,
};
+#[cfg(feature = "all")]
+use windows_sys::Win32::Networking::WinSock::{
+ IP6T_SO_ORIGINAL_DST, SOL_IP, SO_ORIGINAL_DST, SO_PROTOCOL_INFOW,
+};
use windows_sys::Win32::System::Threading::INFINITE;
use crate::{MsgHdr, RecvFlags, SockAddr, TcpKeepalive, Type};
@@ -215,6 +217,10 @@
RecvFlags(msg.dwFlags as c_int)
}
+pub(crate) fn msghdr_control_len(msg: &msghdr) -> usize {
+ msg.Control.len as _
+}
+
fn init() {
static INIT: Once = Once::new();
@@ -853,6 +859,46 @@
}
}
+#[cfg(feature = "all")]
+pub(crate) fn original_dst(socket: Socket) -> io::Result<SockAddr> {
+ unsafe {
+ SockAddr::try_init(|storage, len| {
+ syscall!(
+ getsockopt(
+ socket,
+ SOL_IP as i32,
+ SO_ORIGINAL_DST as i32,
+ storage.cast(),
+ len,
+ ),
+ PartialEq::eq,
+ SOCKET_ERROR
+ )
+ })
+ }
+ .map(|(_, addr)| addr)
+}
+
+#[cfg(feature = "all")]
+pub(crate) fn original_dst_ipv6(socket: Socket) -> io::Result<SockAddr> {
+ unsafe {
+ SockAddr::try_init(|storage, len| {
+ syscall!(
+ getsockopt(
+ socket,
+ SOL_IP as i32,
+ IP6T_SO_ORIGINAL_DST as i32,
+ storage.cast(),
+ len,
+ ),
+ PartialEq::eq,
+ SOCKET_ERROR
+ )
+ })
+ }
+ .map(|(_, addr)| addr)
+}
+
#[allow(unsafe_op_in_unsafe_fn)]
pub(crate) fn unix_sockaddr(path: &Path) -> io::Result<SockAddr> {
// SAFETY: a `sockaddr_storage` of all zeros is valid.
diff --git a/crates/strum_macros/.android-checksum.json b/crates/strum_macros/.android-checksum.json
new file mode 100644
index 0000000..36dc750
--- /dev/null
+++ b/crates/strum_macros/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"src/lib.rs":"52d5f49927e5e5c3e3d6bd668c5a24599c516121df7cbd79145943cd804586d0","src/macros/enum_discriminants.rs":"d80616c8889ace6e1f1e8eb036140a7127bb0a536414a20cc984933b72aa41c0","MODULE_LICENSE_MIT":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","src/helpers/case_style.rs":"a401e30dc1198a382681dfbc7edabe641df80e6717b6b57ad3d8f9d3457c24ca","src/macros/from_repr.rs":"83b62edd8bfe91db286bd1531a77082d30d4f9d4ee8185f7a95689fa4860365f","src/macros/strings/display.rs":"20388c5ff17fe164d99988ca3557b0e4db2e54ca90ac4fd6b3bc34443ddbf9b4","src/macros/enum_iter.rs":"761d34a9633be1f920cc04910cd70e39dd2e1830fdb3a7239eb95d79e30f7a4f","TEST_MAPPING":"130934553eb809f532f064b6d924421ef21dc989325f59a50bd6f726f2cba884","LICENSE":"1884079d8260fd6643f913346f742df6dabc32a0d1d1a973f6c70b2ae20383fe","src/helpers/variant_props.rs":"c007bed549c30a6c9a64521639608e7dd3e6f9c70553ec78a183ebda02bddd54","src/macros/enum_table.rs":"8002a82697ae43cba9cbb77baf3c6aa60f810f948c7ca97d46f0a2a96e5dbdfe","src/macros/strings/mod.rs":"5f0003e2cb561686d347d008fd890d52a691e40bdbeef8a36fadc11512abcfbe","src/helpers/type_props.rs":"9f7227dfe0f9ab4f1ee4dfdcb960c49db4706497861ae82cc9a9db904287ebab","src/macros/enum_properties.rs":"c1a386c408a09b7af7754b0e28220ebae02abd75b123d0edac8a0f00880a633b","Cargo.toml":"90f40b0d04e3d330cd5fae3c5d1d04944045e3a0ba8dce9a0bd47423d29c53e0","src/helpers/metadata.rs":"abb82cefe57fc10d87c4fe5a4846eacd97ca3306851e28b7c7699fbdec412ddf","METADATA":"8f07cd6e794503efad77467157be7fa09c030036131a37cc2da4842029a20eeb","src/helpers/mod.rs":"928c2e83113fac0183b291b2e064bd6444140698e4b4f2410e55d85ea1deab28","src/macros/enum_variant_array.rs":"4a82897758e6059aae96e8d999e7c69e226bd61fe54c0d9cf610bdfd38e407b9","src/macros/enum_variant_names.rs":"9c3bac48f80b7aab75d779377de56ba143e7f831d659bb4e1070ee4e6181d2fe","src/macros/strings/to_string.rs":"ef77f2087f20dfc2775324e99e178bc40831c1a3017de1a58104b901daced823","src/macros/enum_try_as.rs":"6299527af91a6478ca48c56871c2649cb19eaa371186b08b81fc21bea76b18c6","src/macros/enum_is.rs":"a67764b68d10774516aec79b4a121aa8526b85c1ba4eb19406ea839925ac2fbf","src/macros/enum_count.rs":"c3f068684816e891171537745c5a4a86bbb76f74578e079880a874ef0d1e7fc5","src/macros/mod.rs":"d3f44f5625d76d0f114ff394d6b95723ca9f6b2a089784c09b12dab42f54cc47","src/macros/strings/from_string.rs":"913f990421d76985c4a609fc13d58f31c7b25dfc48f37c564feaf48a61e66fe0","README.md":"01b98982954529385a99d3557d04bfd9d4ff2773a87fc5a8cf5d57680fe936a2","cargo_embargo.json":"fa702ccdadce959e0baa3621834e37c34b5b20d1d2993055e3efbb9ad62a03b8","src/helpers/inner_variant_props.rs":"fb25aac1a36405f4912d239241ed50d304946b3bdff79bd90466b41fa99785cc","Android.bp":"adc2184a419c0200731d0e6a81a8d1a449083737aa53c9014586e420b74fb751","src/macros/enum_messages.rs":"ad5fc215c0e992dc09024c3ad76b8bd18a56147170bab71ab964e58c44e82cad","src/macros/strings/as_ref_str.rs":"9f7b73f0848d346f54f0efb78de66da53c29b4d22386075554eed603e4fdb93d",".cargo-checksum.json":"5c20c1ce69ea23d2d61dcf13b032ae2aa2b29fa8a34e1abf2f57e4d355ad8bc4"}}
\ No newline at end of file
diff --git a/crates/strum_macros/.cargo-checksum.json b/crates/strum_macros/.cargo-checksum.json
index a9f9601..16f7225 100644
--- a/crates/strum_macros/.cargo-checksum.json
+++ b/crates/strum_macros/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"23072aa33960a8ac715daca71a1aef3236d09e65c8b3dc1c69b1fd0ab5f83a90","LICENSE":"8bce3b45e49ecd1461f223b46de133d8f62cd39f745cfdaf81bee554b908bd42","README.md":"78ad65413ae9989028bfef9ebf198dee8dc74af3ec7fb60d26e0d984b979c126","src/helpers/case_style.rs":"6094ea43fb51d249f0685957060bd7170e5bcea3356a93569a01ef011dc41cdb","src/helpers/metadata.rs":"87320d82b70220a75ccf411dc66a4e0b9eb959e7ad1602d82006a7cd07d6e310","src/helpers/mod.rs":"e3e8977fcf94b7cf3b769d976cc998707cc4641e5857f88859a10d2dc1bd8d5a","src/helpers/type_props.rs":"f9c5f1ae29173f5dd51025f83e723e176d47b01de0abc45105cedaa7abccbb47","src/helpers/variant_props.rs":"d528ce14015850ac1b34cbea46a8836bdaf50a290a2fe92ca560af6b192b5507","src/lib.rs":"eb2cc12a6136780ba93ab069d01fdfdaa41b3ca959ccb6f5350ec9006f778d0b","src/macros/enum_count.rs":"44084ab800ca8fca3b17f76c6025e8e59855598c0119807ce7bc80d5dc345d99","src/macros/enum_discriminants.rs":"7513c5eb515da55ff6507c8fd80fd1c626de78e68ea737d3edea48e0ee56337c","src/macros/enum_is.rs":"c56e67aa93b173b1fc0301106864ed567bc708e55bc28982ad05f5c8efa343ce","src/macros/enum_iter.rs":"81f62d61cfe50320ee4cacb09d19f817ec04c0b7c77c6a7aad24dafe093eedab","src/macros/enum_messages.rs":"d23b427e1b0f8ab9709e93837aba16bff12ccd92fb55bf013ca80a292ed7ffc5","src/macros/enum_properties.rs":"a9e1bf27504d46df689aad8910c7ad8ae7b3780ee97b6e659b2b19e481474030","src/macros/enum_try_as.rs":"b3bbc5020351251f005cfadf86a8759bb28172c9d176684b90074d32cc2ae3dd","src/macros/enum_variant_names.rs":"7d6d381ab10c603d1e87a089057138ef21c9b3de1246ba1fdcec894ef239a461","src/macros/from_repr.rs":"69b904604cdb0287f9dccafa15592627e32d3edd2310a2ddaa53a5547e903f71","src/macros/mod.rs":"13b0e3b5ddc63e4750aa29fbdb4a338307367cf148099b17813e340fe5dfdf32","src/macros/strings/as_ref_str.rs":"73ce53ae25c8a148075e858ab03eb13fe7cba350cfb649048b5b6582703fc5da","src/macros/strings/display.rs":"c53989fcb45a9d22f0990cf620e0ffff9e2d9e46a93edc780901ab43650dfb29","src/macros/strings/from_string.rs":"99d8b8c1a7aa99ab12f63e5f74e96c980e17740738e800a854d688d6fed59ecb","src/macros/strings/mod.rs":"b7937f72a46c807fd87c787f3d23029509565a0388a30106e7026363782f2b56","src/macros/strings/to_string.rs":"3d43865603be815cc52a8364bc3e969af7a1bd9532d9461fcce8252098488b0a"},"package":"23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0"}
\ No newline at end of file
+{"files":{"Cargo.toml":"092265d6ab49a30549ada59bb62e244b28649758ec3a789af589b09e07c3cc48","LICENSE":"8bce3b45e49ecd1461f223b46de133d8f62cd39f745cfdaf81bee554b908bd42","README.md":"4d1475987c8866226ac2f4136dfb5196dfd0b16a2fa3d63ddbd0f4f5011f65af","src/helpers/case_style.rs":"ac429454fad24d1a5a9829711f2024ae9477ffad7cc293b711fe588d1a5e1edf","src/helpers/inner_variant_props.rs":"09c4a2c73aadaaa934e6a20b429b99d4229ce76a4cc1edc916298100d971deb4","src/helpers/metadata.rs":"a9391071f1d4750781eda79bdf4553e77c65c28b1df87dfb3d00df6b290c18dd","src/helpers/mod.rs":"dc171dd27e723aede6c45cb981d48c710f42167afb06a5fbf013470a2962b9f2","src/helpers/type_props.rs":"cb1cdfb0e7927d3b0e364237e7048285ef5968e036d2ebacea642c66d96cc669","src/helpers/variant_props.rs":"36cc466e29b20246f87b9b87d39e4d23545596c522a201e0fb320ac2b231b045","src/lib.rs":"5198869272f00b3adc78d2ffbfb129f42062f3d5c1f3d06fe081a06c3440b51f","src/macros/enum_count.rs":"44084ab800ca8fca3b17f76c6025e8e59855598c0119807ce7bc80d5dc345d99","src/macros/enum_discriminants.rs":"98abbefad100dda4aaafa959ebb9fa77f518dd483414113e6c8bd1eea193bdff","src/macros/enum_is.rs":"cd63fb79f4f9b3479f11bce2ad45d3cb5d23f1d5c9c2a5fbb7af7e813fb70fa7","src/macros/enum_iter.rs":"a6c42eefae4e442301dfd9a622aa6a502aac7a0fc9ab7e2b8aaea221cd9d06b0","src/macros/enum_messages.rs":"ee89c3a10ebb553aa9c342f4b3b4346e97be1744fc5df72f580a331d4ea87393","src/macros/enum_properties.rs":"a9e1bf27504d46df689aad8910c7ad8ae7b3780ee97b6e659b2b19e481474030","src/macros/enum_table.rs":"434da77cbca12082d4daeba28ef0e416cea3064f1f641b31f4a330589369e04f","src/macros/enum_try_as.rs":"8bd311522786f0186290ea31a6f3483aa3fa23ccb3441b7fcf9b3743c9d3670b","src/macros/enum_variant_array.rs":"cb8de5cb5841fa9514c423c195b47a2fc13b9f5fb257093311fbb9c136c737d9","src/macros/enum_variant_names.rs":"ad4d2f87bf26e4d07327896118382a4b83c2cca5de6fdfecca6e7639eb73118b","src/macros/from_repr.rs":"561a6f10372c365674e064b31c6eb4c531ffa0b39f03476452bb0746201d579d","src/macros/mod.rs":"c94b29d4ad0f40a7803605d42647cc9fafec76545c7f3c435fe675a3102eb0ef","src/macros/strings/as_ref_str.rs":"594f29efd111ceef258ab0dd449db4cb52e638e1bd17efe589c5a90ee03686b9","src/macros/strings/display.rs":"30b2c4d4f2f29c98058dd88d004782688241a2608d2976621c6919ea0cf615cb","src/macros/strings/from_string.rs":"53d298f6859df3c13197a8bd303971d2a9ac14cb9860ea1e7c4df1bffdea58bd","src/macros/strings/mod.rs":"b7937f72a46c807fd87c787f3d23029509565a0388a30106e7026363782f2b56","src/macros/strings/to_string.rs":"983e6c1b1dec145acfa0c6a7ef8ff01d30507145753a1d85d0387c5ab61f6fa1"},"package":"c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946"}
\ No newline at end of file
diff --git a/crates/strum_macros/Android.bp b/crates/strum_macros/Android.bp
index 344b2b7..fceb38a 100644
--- a/crates/strum_macros/Android.bp
+++ b/crates/strum_macros/Android.bp
@@ -17,7 +17,7 @@
name: "libstrum_macros",
crate_name: "strum_macros",
cargo_env_compat: true,
- cargo_pkg_version: "0.25.3",
+ cargo_pkg_version: "0.26.2",
crate_root: "src/lib.rs",
edition: "2018",
rustlibs: [
@@ -34,7 +34,7 @@
host_cross_supported: false,
crate_name: "strum_macros",
cargo_env_compat: true,
- cargo_pkg_version: "0.25.3",
+ cargo_pkg_version: "0.26.2",
crate_root: "src/lib.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
diff --git a/crates/strum_macros/Cargo.toml b/crates/strum_macros/Cargo.toml
index 45078e7..9748353 100644
--- a/crates/strum_macros/Cargo.toml
+++ b/crates/strum_macros/Cargo.toml
@@ -12,7 +12,7 @@
[package]
edition = "2018"
name = "strum_macros"
-version = "0.25.3"
+version = "0.26.2"
authors = ["Peter Glotfelty <[email protected]>"]
description = "Helpful macros for working with enums and strings"
homepage = "https://github.com/Peternator7/strum"
@@ -55,4 +55,4 @@
]
[dev-dependencies.strum]
-version = "0.25"
+version = "0.26"
diff --git a/crates/strum_macros/METADATA b/crates/strum_macros/METADATA
index 9df3aeb..9e6d739 100644
--- a/crates/strum_macros/METADATA
+++ b/crates/strum_macros/METADATA
@@ -1,17 +1,17 @@
name: "strum_macros"
description: "Helpful macros for working with enums and strings"
third_party {
- version: "0.25.3"
+ version: "0.26.2"
license_type: NOTICE
last_upgrade_date {
year: 2024
- month: 1
- day: 17
+ month: 12
+ day: 20
}
homepage: "https://crates.io/crates/strum_macros"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/strum_macros/strum_macros-0.25.3.crate"
- version: "0.25.3"
+ value: "https://static.crates.io/crates/strum_macros/strum_macros-0.26.2.crate"
+ version: "0.26.2"
}
}
diff --git a/crates/strum_macros/README.md b/crates/strum_macros/README.md
index 491c24f..4099439 100644
--- a/crates/strum_macros/README.md
+++ b/crates/strum_macros/README.md
@@ -22,11 +22,11 @@
```toml
[dependencies]
-strum = "0.25"
-strum_macros = "0.25"
+strum = "0.26"
+strum_macros = "0.26"
# You can also use the "derive" feature, and import the macros directly from "strum"
-# strum = { version = "0.25", features = ["derive"] }
+# strum = { version = "0.26", features = ["derive"] }
```
# Strum Macros
@@ -40,16 +40,21 @@
| [FromRepr] | Convert from an integer to an enum. |
| [AsRefStr] | Implement `AsRef<str>` for `MyEnum` |
| [IntoStaticStr] | Implements `From<MyEnum> for &'static str` on an enum |
-| [EnumVariantNames] | Adds an associated `VARIANTS` constant which is an array of discriminant names |
| [EnumIter] | Creates a new type that iterates of the variants of an enum. |
| [EnumProperty] | Add custom properties to enum variants. |
| [EnumMessage] | Add a verbose message to an enum variant. |
| [EnumDiscriminants] | Generate a new type with only the discriminant names. |
| [EnumCount] | Add a constant `usize` equal to the number of variants. |
+| [VariantArray] | Adds an associated `VARIANTS` constant which is an array of all enum discriminants |
+| [VariantNames] | Adds an associated `VARIANTS` constant which is an array of discriminant names |
+| [EnumTable] | *Experimental*, creates a new type that stores an item of a specified type for each variant of the enum. |
# Contributing
-Thanks for your interest in contributing. The project is divided into 3 parts, the traits are in the
+Thanks for your interest in contributing. Bug fixes are always welcome. If you are interested in implementing or
+adding a macro, please open an issue first to discuss the feature. I have limited bandwidth to review new features.
+
+The project is divided into 3 parts, the traits are in the
`/strum` folder. The procedural macros are in the `/strum_macros` folder, and the integration tests are
in `/strum_tests`. If you are adding additional features to `strum` or `strum_macros`, you should make sure
to run the tests and add new integration tests to make sure the features work as expected.
@@ -67,16 +72,17 @@
Strumming is also a very whimsical motion, much like writing Rust code.
-[Macro-Renames]: https://github.com/Peternator7/strum/wiki/Macro-Renames
-[EnumString]: https://docs.rs/strum_macros/0.25/strum_macros/derive.EnumString.html
-[Display]: https://docs.rs/strum_macros/0.25/strum_macros/derive.Display.html
-[AsRefStr]: https://docs.rs/strum_macros/0.25/strum_macros/derive.AsRefStr.html
-[IntoStaticStr]: https://docs.rs/strum_macros/0.25/strum_macros/derive.IntoStaticStr.html
-[EnumVariantNames]: https://docs.rs/strum_macros/0.25/strum_macros/derive.EnumVariantNames.html
-[EnumIter]: https://docs.rs/strum_macros/0.25/strum_macros/derive.EnumIter.html
-[EnumIs]: https://docs.rs/strum_macros/0.25/strum_macros/derive.EnumIs.html
-[EnumProperty]: https://docs.rs/strum_macros/0.25/strum_macros/derive.EnumProperty.html
-[EnumMessage]: https://docs.rs/strum_macros/0.25/strum_macros/derive.EnumMessage.html
-[EnumDiscriminants]: https://docs.rs/strum_macros/0.25/strum_macros/derive.EnumDiscriminants.html
-[EnumCount]: https://docs.rs/strum_macros/0.25/strum_macros/derive.EnumCount.html
-[FromRepr]: https://docs.rs/strum_macros/0.25/strum_macros/derive.FromRepr.html
+[EnumString]: https://docs.rs/strum_macros/latest/strum_macros/derive.EnumString.html
+[Display]: https://docs.rs/strum_macros/latest/strum_macros/derive.Display.html
+[AsRefStr]: https://docs.rs/strum_macros/latest/strum_macros/derive.AsRefStr.html
+[IntoStaticStr]: https://docs.rs/strum_macros/latest/strum_macros/derive.IntoStaticStr.html
+[EnumIter]: https://docs.rs/strum_macros/latest/strum_macros/derive.EnumIter.html
+[EnumIs]: https://docs.rs/strum_macros/latest/strum_macros/derive.EnumIs.html
+[EnumProperty]: https://docs.rs/strum_macros/latest/strum_macros/derive.EnumProperty.html
+[EnumMessage]: https://docs.rs/strum_macros/latest/strum_macros/derive.EnumMessage.html
+[EnumDiscriminants]: https://docs.rs/strum_macros/latest/strum_macros/derive.EnumDiscriminants.html
+[EnumCount]: https://docs.rs/strum_macros/latest/strum_macros/derive.EnumCount.html
+[FromRepr]: https://docs.rs/strum_macros/latest/strum_macros/derive.FromRepr.html
+[VariantArray]: https://docs.rs/strum_macros/latest/strum_macros/derive.StaticVariantsArray.html
+[VariantNames]: https://docs.rs/strum_macros/latest/strum_macros/derive.EnumVariantNames.html
+[EnumTable]: https://docs.rs/strum_macros/latest/strum_macros/derive.EnumTable.html
diff --git a/crates/strum_macros/src/helpers/case_style.rs b/crates/strum_macros/src/helpers/case_style.rs
index 86a8583..bcea788 100644
--- a/crates/strum_macros/src/helpers/case_style.rs
+++ b/crates/strum_macros/src/helpers/case_style.rs
@@ -1,5 +1,6 @@
use heck::{
- ToKebabCase, ToLowerCamelCase, ToShoutySnakeCase, ToSnakeCase, ToTitleCase, ToUpperCamelCase, ToTrainCase,
+ ToKebabCase, ToLowerCamelCase, ToShoutySnakeCase, ToSnakeCase, ToTitleCase, ToTrainCase,
+ ToUpperCamelCase,
};
use std::str::FromStr;
use syn::{
diff --git a/crates/strum_macros/src/helpers/inner_variant_props.rs b/crates/strum_macros/src/helpers/inner_variant_props.rs
new file mode 100644
index 0000000..bc0fe79
--- /dev/null
+++ b/crates/strum_macros/src/helpers/inner_variant_props.rs
@@ -0,0 +1,33 @@
+use super::metadata::{InnerVariantExt, InnerVariantMeta};
+use super::occurrence_error;
+use syn::{Field, LitStr};
+
+pub trait HasInnerVariantProperties {
+ fn get_variant_inner_properties(&self) -> syn::Result<StrumInnerVariantProperties>;
+}
+
+#[derive(Clone, Eq, PartialEq, Debug, Default)]
+pub struct StrumInnerVariantProperties {
+ pub default_with: Option<LitStr>,
+}
+
+impl HasInnerVariantProperties for Field {
+ fn get_variant_inner_properties(&self) -> syn::Result<StrumInnerVariantProperties> {
+ let mut output = StrumInnerVariantProperties { default_with: None };
+
+ let mut default_with_kw = None;
+ for meta in self.get_named_metadata()? {
+ match meta {
+ InnerVariantMeta::DefaultWith { kw, value } => {
+ if let Some(fst_kw) = default_with_kw {
+ return Err(occurrence_error(fst_kw, kw, "default_with"));
+ }
+ default_with_kw = Some(kw);
+ output.default_with = Some(value);
+ }
+ }
+ }
+
+ Ok(output)
+ }
+}
diff --git a/crates/strum_macros/src/helpers/metadata.rs b/crates/strum_macros/src/helpers/metadata.rs
index d638ae3..94100a7 100644
--- a/crates/strum_macros/src/helpers/metadata.rs
+++ b/crates/strum_macros/src/helpers/metadata.rs
@@ -4,8 +4,8 @@
parse::{Parse, ParseStream},
parse2, parse_str,
punctuated::Punctuated,
- Attribute, DeriveInput, Expr, ExprLit, Ident, Lit, LitBool, LitStr, Meta, MetaNameValue, Path,
- Token, Variant, Visibility,
+ Attribute, DeriveInput, Expr, ExprLit, Field, Ident, Lit, LitBool, LitStr, Meta, MetaNameValue,
+ Path, Token, Variant, Visibility,
};
use super::case_style::CaseStyle;
@@ -17,6 +17,7 @@
// enum metadata
custom_keyword!(serialize_all);
custom_keyword!(use_phf);
+ custom_keyword!(prefix);
// enum discriminant metadata
custom_keyword!(derive);
@@ -30,6 +31,7 @@
custom_keyword!(to_string);
custom_keyword!(disabled);
custom_keyword!(default);
+ custom_keyword!(default_with);
custom_keyword!(props);
custom_keyword!(ascii_case_insensitive);
}
@@ -45,6 +47,10 @@
crate_module_path: Path,
},
UsePhf(kw::use_phf),
+ Prefix {
+ kw: kw::prefix,
+ prefix: LitStr,
+ },
}
impl Parse for EnumMeta {
@@ -69,6 +75,11 @@
Ok(EnumMeta::AsciiCaseInsensitive(input.parse()?))
} else if lookahead.peek(kw::use_phf) {
Ok(EnumMeta::UsePhf(input.parse()?))
+ } else if lookahead.peek(kw::prefix) {
+ let kw = input.parse::<kw::prefix>()?;
+ input.parse::<Token![=]>()?;
+ let prefix = input.parse()?;
+ Ok(EnumMeta::Prefix { kw, prefix })
} else {
Err(lookahead.error())
}
@@ -155,6 +166,10 @@
},
Disabled(kw::disabled),
Default(kw::default),
+ DefaultWith {
+ kw: kw::default_with,
+ value: LitStr,
+ },
AsciiCaseInsensitive {
kw: kw::ascii_case_insensitive,
value: bool,
@@ -192,6 +207,11 @@
Ok(VariantMeta::Disabled(input.parse()?))
} else if lookahead.peek(kw::default) {
Ok(VariantMeta::Default(input.parse()?))
+ } else if lookahead.peek(kw::default_with) {
+ let kw = input.parse()?;
+ let _: Token![=] = input.parse()?;
+ let value = input.parse()?;
+ Ok(VariantMeta::DefaultWith { kw, value })
} else if lookahead.peek(kw::ascii_case_insensitive) {
let kw = input.parse()?;
let value = if input.peek(Token![=]) {
@@ -243,7 +263,7 @@
let result = get_metadata_inner("strum", &self.attrs)?;
self.attrs
.iter()
- .filter(|attr| attr.path().is_ident("doc"))
+ .filter(|attr| attr.meta.path().is_ident("doc"))
.try_fold(result, |mut vec, attr| {
if let Meta::NameValue(MetaNameValue {
value:
@@ -274,3 +294,37 @@
Ok(vec)
})
}
+
+#[derive(Debug)]
+pub enum InnerVariantMeta {
+ DefaultWith { kw: kw::default_with, value: LitStr },
+}
+
+impl Parse for InnerVariantMeta {
+ fn parse(input: ParseStream) -> syn::Result<Self> {
+ let lookahead = input.lookahead1();
+ if lookahead.peek(kw::default_with) {
+ let kw = input.parse()?;
+ let _: Token![=] = input.parse()?;
+ let value = input.parse()?;
+ Ok(InnerVariantMeta::DefaultWith { kw, value })
+ } else {
+ Err(lookahead.error())
+ }
+ }
+}
+
+pub trait InnerVariantExt {
+ /// Get all the metadata associated with an enum variant inner.
+ fn get_named_metadata(&self) -> syn::Result<Vec<InnerVariantMeta>>;
+}
+
+impl InnerVariantExt for Field {
+ fn get_named_metadata(&self) -> syn::Result<Vec<InnerVariantMeta>> {
+ let result = get_metadata_inner("strum", &self.attrs)?;
+ self.attrs
+ .iter()
+ .filter(|attr| attr.meta.path().is_ident("default_with"))
+ .try_fold(result, |vec, _attr| Ok(vec))
+ }
+}
diff --git a/crates/strum_macros/src/helpers/mod.rs b/crates/strum_macros/src/helpers/mod.rs
index 142ea0b..23d60b5 100644
--- a/crates/strum_macros/src/helpers/mod.rs
+++ b/crates/strum_macros/src/helpers/mod.rs
@@ -1,8 +1,10 @@
-pub use self::case_style::{CaseStyleHelpers, snakify};
+pub use self::case_style::snakify;
+pub use self::inner_variant_props::HasInnerVariantProperties;
pub use self::type_props::HasTypeProperties;
pub use self::variant_props::HasStrumVariantProperties;
pub mod case_style;
+pub mod inner_variant_props;
mod metadata;
pub mod type_props;
pub mod variant_props;
@@ -15,6 +17,14 @@
syn::Error::new(Span::call_site(), "This macro only supports enums.")
}
+pub fn non_unit_variant_error() -> syn::Error {
+ syn::Error::new(
+ Span::call_site(),
+ "This macro only supports enums of strictly unit variants. Consider \
+ using it in conjunction with [`EnumDiscriminants`]",
+ )
+}
+
pub fn strum_discriminants_passthrough_error(span: &impl Spanned) -> syn::Error {
syn::Error::new(
span.span(),
diff --git a/crates/strum_macros/src/helpers/type_props.rs b/crates/strum_macros/src/helpers/type_props.rs
index 0d49e04..7302853 100644
--- a/crates/strum_macros/src/helpers/type_props.rs
+++ b/crates/strum_macros/src/helpers/type_props.rs
@@ -1,7 +1,7 @@
use proc_macro2::TokenStream;
use quote::quote;
use std::default::Default;
-use syn::{parse_quote, DeriveInput, Ident, Path, Visibility};
+use syn::{parse_quote, DeriveInput, Ident, LitStr, Path, Visibility};
use super::case_style::CaseStyle;
use super::metadata::{DeriveInputExt, EnumDiscriminantsMeta, EnumMeta};
@@ -21,6 +21,8 @@
pub discriminant_others: Vec<TokenStream>,
pub discriminant_vis: Option<Visibility>,
pub use_phf: bool,
+ pub prefix: Option<LitStr>,
+ pub enum_repr: Option<TokenStream>,
}
impl HasTypeProperties for DeriveInput {
@@ -34,6 +36,7 @@
let mut ascii_case_insensitive_kw = None;
let mut use_phf_kw = None;
let mut crate_module_path_kw = None;
+ let mut prefix_kw = None;
for meta in strum_meta {
match meta {
EnumMeta::SerializeAll { case_style, kw } => {
@@ -71,6 +74,14 @@
crate_module_path_kw = Some(kw);
output.crate_module_path = Some(crate_module_path);
}
+ EnumMeta::Prefix { prefix, kw } => {
+ if let Some(fst_kw) = prefix_kw {
+ return Err(occurrence_error(fst_kw, kw, "prefix"));
+ }
+
+ prefix_kw = Some(kw);
+ output.prefix = Some(prefix);
+ }
}
}
@@ -103,6 +114,17 @@
}
}
+ let attrs = &self.attrs;
+ for attr in attrs {
+ if let Ok(list) = attr.meta.require_list() {
+ if let Some(ident) = list.path.get_ident() {
+ if ident == "repr" {
+ output.enum_repr = Some(list.tokens.clone())
+ }
+ }
+ }
+ }
+
Ok(output)
}
}
diff --git a/crates/strum_macros/src/helpers/variant_props.rs b/crates/strum_macros/src/helpers/variant_props.rs
index f637253..681c7c0 100644
--- a/crates/strum_macros/src/helpers/variant_props.rs
+++ b/crates/strum_macros/src/helpers/variant_props.rs
@@ -13,6 +13,7 @@
pub struct StrumVariantProperties {
pub disabled: Option<kw::disabled>,
pub default: Option<kw::default>,
+ pub default_with: Option<LitStr>,
pub ascii_case_insensitive: Option<bool>,
pub message: Option<LitStr>,
pub detailed_message: Option<LitStr>,
@@ -29,14 +30,24 @@
LitStr::new(&ident.convert_case(case_style), ident.span())
}
- pub fn get_preferred_name(&self, case_style: Option<CaseStyle>) -> LitStr {
- self.to_string.as_ref().cloned().unwrap_or_else(|| {
+ pub fn get_preferred_name(
+ &self,
+ case_style: Option<CaseStyle>,
+ prefix: Option<&LitStr>,
+ ) -> LitStr {
+ let mut output = self.to_string.as_ref().cloned().unwrap_or_else(|| {
self.serialize
.iter()
.max_by_key(|s| s.value().len())
.cloned()
.unwrap_or_else(|| self.ident_as_str(case_style))
- })
+ });
+
+ if let Some(prefix) = prefix {
+ output = LitStr::new(&(prefix.value() + &output.value()), output.span());
+ }
+
+ output
}
pub fn get_serializations(&self, case_style: Option<CaseStyle>) -> Vec<LitStr> {
@@ -62,9 +73,10 @@
let mut message_kw = None;
let mut detailed_message_kw = None;
- let mut to_string_kw = None;
let mut disabled_kw = None;
let mut default_kw = None;
+ let mut default_with_kw = None;
+ let mut to_string_kw = None;
let mut ascii_case_insensitive_kw = None;
for meta in self.get_metadata()? {
match meta {
@@ -114,6 +126,14 @@
default_kw = Some(kw);
output.default = Some(kw);
}
+ VariantMeta::DefaultWith { kw, value } => {
+ if let Some(fst_kw) = default_with_kw {
+ return Err(occurrence_error(fst_kw, kw, "default_with"));
+ }
+
+ default_with_kw = Some(kw);
+ output.default_with = Some(value);
+ }
VariantMeta::AsciiCaseInsensitive { kw, value } => {
if let Some(fst_kw) = ascii_case_insensitive_kw {
return Err(occurrence_error(fst_kw, kw, "ascii_case_insensitive"));
diff --git a/crates/strum_macros/src/lib.rs b/crates/strum_macros/src/lib.rs
index 82db12a..b337fb3 100644
--- a/crates/strum_macros/src/lib.rs
+++ b/crates/strum_macros/src/lib.rs
@@ -44,7 +44,7 @@
/// variant. There is an option to match on different case conversions through the
/// `#[strum(serialize_all = "snake_case")]` type attribute.
///
-/// See the [Additional Attributes](https://docs.rs/strum/0.22/strum/additional_attributes/index.html)
+/// See the [Additional Attributes](https://docs.rs/strum/latest/strum/additional_attributes/index.html)
/// Section for more information on using this feature.
///
/// If you have a large enum, you may want to consider using the `use_phf` attribute here. It leverages
@@ -118,12 +118,15 @@
toks.into()
}
-/// Converts enum variants to `&'static str`.
+/// Converts enum variants to `&'a str`, where `'a` is the lifetime of the input enum reference.
///
/// Implements `AsRef<str>` on your enum using the same rules as
/// `Display` for determining what string is returned. The difference is that `as_ref()` returns
/// a `&str` instead of a `String` so you don't allocate any additional memory with each call.
///
+/// If you require a `&'static str`, you can use
+/// [`strum::IntoStaticStr`](crate::IntoStaticStr) instead.
+///
/// ```
/// // You need to bring the AsRef trait into scope to use it
/// use std::convert::AsRef;
@@ -152,6 +155,18 @@
/// Color::Blue(10).as_ref(),
/// Color::Green { range: 42 }.as_ref()
/// );
+///
+/// // With prefix on all variants
+/// #[derive(AsRefStr, Debug)]
+/// #[strum(prefix = "/")]
+/// enum ColorWithPrefix {
+/// #[strum(serialize = "redred")]
+/// Red,
+/// Green,
+/// }
+///
+/// assert_eq!("/redred", ColorWithPrefix::Red.as_ref());
+/// assert_eq!("/Green", ColorWithPrefix::Green.as_ref());
/// ```
#[proc_macro_derive(AsRefStr, attributes(strum))]
pub fn as_ref_str(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
@@ -163,18 +178,18 @@
toks.into()
}
-/// Implements `Strum::VariantNames` which adds an associated constant `VARIANTS` which is an array of discriminant names.
+/// Implements `Strum::VariantNames` which adds an associated constant `VARIANTS` which is a `'static` slice of discriminant names.
///
/// Adds an `impl` block for the `enum` that adds a static `VARIANTS` array of `&'static str` that are the discriminant names.
/// This will respect the `serialize_all` attribute on the `enum` (like `#[strum(serialize_all = "snake_case")]`.
///
/// ```
/// // import the macros needed
-/// use strum_macros::{EnumString, EnumVariantNames};
+/// use strum_macros::{EnumString};
/// // You need to import the trait, to have access to VARIANTS
/// use strum::VariantNames;
///
-/// #[derive(Debug, EnumString, EnumVariantNames)]
+/// #[derive(Debug, EnumString, strum_macros::VariantNames)]
/// #[strum(serialize_all = "kebab-case")]
/// enum Color {
/// Red,
@@ -184,7 +199,7 @@
/// }
/// assert_eq!(["red", "blue", "yellow", "rebecca-purple"], Color::VARIANTS);
/// ```
-#[proc_macro_derive(EnumVariantNames, attributes(strum))]
+#[proc_macro_derive(VariantNames, attributes(strum))]
pub fn variant_names(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let ast = syn::parse_macro_input!(input as DeriveInput);
@@ -194,7 +209,54 @@
toks.into()
}
+#[doc(hidden)]
+#[proc_macro_derive(EnumVariantNames, attributes(strum))]
+#[deprecated(
+ since = "0.26.0",
+ note = "please use `#[derive(VariantNames)]` instead"
+)]
+pub fn variant_names_deprecated(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
+ let ast = syn::parse_macro_input!(input as DeriveInput);
+
+ let toks = macros::enum_variant_names::enum_variant_names_inner(&ast)
+ .unwrap_or_else(|err| err.to_compile_error());
+ debug_print_generated(&ast, &toks);
+ toks.into()
+}
+
+/// Adds a `'static` slice with all of the Enum's variants.
+///
+/// Implements `strum::VariantArray` which adds an associated constant `VARIANTS`.
+/// This constant contains an array with all the variants of the enumerator.
+///
+/// This trait can only be autoderived if the enumerator is composed only of unit-type variants,
+/// meaning that the variants must not have any data.
+///
+/// ```
+/// use strum::VariantArray;
+///
+/// #[derive(VariantArray, Debug, PartialEq, Eq)]
+/// enum Op {
+/// Add,
+/// Sub,
+/// Mul,
+/// Div,
+/// }
+///
+/// assert_eq!(Op::VARIANTS, &[Op::Add, Op::Sub, Op::Mul, Op::Div]);
+/// ```
+#[proc_macro_derive(VariantArray, attributes(strum))]
+pub fn static_variants_array(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
+ let ast = syn::parse_macro_input!(input as DeriveInput);
+
+ let toks = macros::enum_variant_array::static_variants_array_inner(&ast)
+ .unwrap_or_else(|err| err.to_compile_error());
+ debug_print_generated(&ast, &toks);
+ toks.into()
+}
+
#[proc_macro_derive(AsStaticStr, attributes(strum))]
+#[doc(hidden)]
#[deprecated(
since = "0.22.0",
note = "please use `#[derive(IntoStaticStr)]` instead"
@@ -282,6 +344,7 @@
since = "0.22.0",
note = "please use `#[derive(Display)]` instead. See issue https://github.com/Peternator7/strum/issues/132"
)]
+#[doc(hidden)]
#[proc_macro_derive(ToString, attributes(strum))]
pub fn to_string(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let ast = syn::parse_macro_input!(input as DeriveInput);
@@ -299,9 +362,21 @@
/// choose which serialization to used based on the following criteria:
///
/// 1. If there is a `to_string` property, this value will be used. There can only be one per variant.
-/// 1. Of the various `serialize` properties, the value with the longest length is chosen. If that
+/// 2. Of the various `serialize` properties, the value with the longest length is chosen. If that
/// behavior isn't desired, you should use `to_string`.
-/// 1. The name of the variant will be used if there are no `serialize` or `to_string` attributes.
+/// 3. The name of the variant will be used if there are no `serialize` or `to_string` attributes.
+/// 4. If the enum has a `strum(prefix = "some_value_")`, every variant will have that prefix prepended
+/// to the serialization.
+/// 5. Enums with named fields support named field interpolation. The value will be interpolated into the output string.
+/// Note this means the variant will not "round trip" if you then deserialize the string.
+///
+/// ```rust
+/// #[derive(strum_macros::Display)]
+/// pub enum Color {
+/// #[strum(to_string = "saturation is {sat}")]
+/// Red { sat: usize },
+/// }
+/// ```
///
/// ```
/// // You need to bring the ToString trait into scope to use it
@@ -317,6 +392,10 @@
/// },
/// Blue(usize),
/// Yellow,
+/// #[strum(to_string = "purple with {sat} saturation")]
+/// Purple {
+/// sat: usize,
+/// },
/// }
///
/// // uses the serialize string for Display
@@ -331,6 +410,9 @@
/// Color::Blue(10),
/// Color::Green { range: 42 }
/// );
+/// // you can also use named fields in message
+/// let purple = Color::Purple { sat: 10 };
+/// assert_eq!(String::from("purple with 10 saturation"), purple.to_string());
/// ```
#[proc_macro_derive(Display, attributes(strum))]
pub fn display(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
@@ -444,6 +526,60 @@
toks.into()
}
+/// Creates a new type that maps all the variants of an enum to another generic value.
+///
+/// This macro only supports enums with unit type variants.A new type called `YourEnumTable<T>`. Essentially, it's a wrapper
+/// `[T; YourEnum::Count]` where gets/sets are infallible. Some important caveats to note:
+///
+/// * The size of `YourEnumTable<T>` increases with the number of variants, not the number of values because it's always
+/// fully populated. This means it may not be a good choice for sparsely populated maps.
+///
+/// * Lookups are basically constant time since it's functionally an array index.
+///
+/// * Your variants cannot have associated data. You can use `EnumDiscriminants` to generate an Enum with the same
+/// names to work around this.
+///
+/// # Stability
+///
+/// Several people expressed interest in a data structure like this and pushed the PR through to completion, but the api
+/// seems incomplete, and I reserve the right to deprecate it in the future if it becomes clear the design is flawed.
+///
+/// # Example
+/// ```rust
+/// use strum_macros::EnumTable;
+///
+/// #[derive(EnumTable)]
+/// enum Color {
+/// Red,
+/// Yellow,
+/// Green,
+/// Blue,
+/// }
+///
+/// assert_eq!(ColorTable::default(), ColorTable::new(0, 0, 0, 0));
+/// assert_eq!(ColorTable::filled(2), ColorTable::new(2, 2, 2, 2));
+/// assert_eq!(ColorTable::from_closure(|_| 3), ColorTable::new(3, 3, 3, 3));
+/// assert_eq!(ColorTable::default().transform(|_, val| val + 2), ColorTable::new(2, 2, 2, 2));
+///
+/// let mut complex_map = ColorTable::from_closure(|color| match color {
+/// Color::Red => 0,
+/// _ => 3
+/// });
+///
+/// complex_map[Color::Green] = complex_map[Color::Red];
+/// assert_eq!(complex_map, ColorTable::new(0, 3, 0, 3));
+/// ```
+#[doc(hidden)]
+#[proc_macro_derive(EnumTable, attributes(strum))]
+pub fn enum_table(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
+ let ast = syn::parse_macro_input!(input as DeriveInput);
+
+ let toks =
+ macros::enum_table::enum_table_inner(&ast).unwrap_or_else(|err| err.to_compile_error());
+ debug_print_generated(&ast, &toks);
+ toks.into()
+}
+
/// Add a function to enum that allows accessing variants by its discriminant
///
/// This macro adds a standalone function to obtain an enum variant by its discriminant. The macro adds
@@ -518,7 +654,6 @@
/// assert_eq!(Some(Number::Three), number_from_repr(3));
/// assert_eq!(None, number_from_repr(4));
/// ```
-
#[proc_macro_derive(FromRepr, attributes(strum))]
pub fn from_repr(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let ast = syn::parse_macro_input!(input as DeriveInput);
@@ -690,7 +825,7 @@
/// // Bring trait into scope
/// use std::str::FromStr;
/// use strum::{IntoEnumIterator, EnumMessage};
-/// use strum_macros::{EnumDiscriminants, EnumIter, EnumString, EnumMessage};
+/// use strum_macros::{EnumDiscriminants, EnumIter, EnumString};
///
/// #[derive(Debug)]
/// struct NonDefault;
diff --git a/crates/strum_macros/src/macros/enum_discriminants.rs b/crates/strum_macros/src/macros/enum_discriminants.rs
index 4e54a30..f7d6372 100644
--- a/crates/strum_macros/src/macros/enum_discriminants.rs
+++ b/crates/strum_macros/src/macros/enum_discriminants.rs
@@ -40,10 +40,16 @@
// Pass through all other attributes
let pass_though_attributes = type_properties.discriminant_others;
+ let repr = type_properties.enum_repr.map(|repr| quote!(#[repr(#repr)]));
+
// Add the variants without fields, but exclude the `strum` meta item
let mut discriminants = Vec::new();
for variant in variants {
let ident = &variant.ident;
+ let discriminant = variant
+ .discriminant
+ .as_ref()
+ .map(|(_, expr)| quote!( = #expr));
// Don't copy across the "strum" meta attribute. Only passthrough the whitelisted
// attributes and proxy `#[strum_discriminants(...)]` attributes
@@ -81,7 +87,7 @@
})
.collect::<Result<Vec<_>, _>>()?;
- discriminants.push(quote! { #(#attrs)* #ident });
+ discriminants.push(quote! { #(#attrs)* #ident #discriminant});
}
// Ideally:
@@ -153,6 +159,7 @@
Ok(quote! {
/// Auto-generated discriminant enum variants
#derives
+ #repr
#(#[ #pass_though_attributes ])*
#discriminants_vis enum #discriminants_name {
#(#discriminants),*
diff --git a/crates/strum_macros/src/macros/enum_is.rs b/crates/strum_macros/src/macros/enum_is.rs
index ecada45..c239628 100644
--- a/crates/strum_macros/src/macros/enum_is.rs
+++ b/crates/strum_macros/src/macros/enum_is.rs
@@ -1,4 +1,4 @@
-use crate::helpers::{non_enum_error, snakify, HasStrumVariantProperties};
+use crate::helpers::{case_style::snakify, non_enum_error, HasStrumVariantProperties};
use proc_macro2::TokenStream;
use quote::{format_ident, quote};
use syn::{Data, DeriveInput};
@@ -20,7 +20,10 @@
let variant_name = &variant.ident;
let fn_name = format_ident!("is_{}", snakify(&variant_name.to_string()));
- let doc_comment = format!("Returns [true] if the enum is [{}::{}] otherwise [false]", enum_name, variant_name);
+ let doc_comment = format!(
+ "Returns [true] if the enum is [{}::{}] otherwise [false]",
+ enum_name, variant_name
+ );
Some(quote! {
#[must_use]
#[inline]
diff --git a/crates/strum_macros/src/macros/enum_iter.rs b/crates/strum_macros/src/macros/enum_iter.rs
index 0e700aa..5e81001 100644
--- a/crates/strum_macros/src/macros/enum_iter.rs
+++ b/crates/strum_macros/src/macros/enum_iter.rs
@@ -74,7 +74,7 @@
#[allow(
missing_copy_implementations,
)]
- #vis struct #iter_name #ty_generics {
+ #vis struct #iter_name #impl_generics {
idx: usize,
back_idx: usize,
marker: ::core::marker::PhantomData #phantom_data,
@@ -159,6 +159,8 @@
}
}
+ impl #impl_generics ::core::iter::FusedIterator for #iter_name #ty_generics #where_clause { }
+
impl #impl_generics Clone for #iter_name #ty_generics #where_clause {
fn clone(&self) -> #iter_name #ty_generics {
#iter_name {
diff --git a/crates/strum_macros/src/macros/enum_messages.rs b/crates/strum_macros/src/macros/enum_messages.rs
index c056108..2dad411 100644
--- a/crates/strum_macros/src/macros/enum_messages.rs
+++ b/crates/strum_macros/src/macros/enum_messages.rs
@@ -74,14 +74,17 @@
if !documentation.is_empty() {
let params = params.clone();
// Strip a single leading space from each documentation line.
- let documentation: Vec<LitStr> = documentation.iter().map(|lit_str| {
- let line = lit_str.value();
- if line.starts_with(' ') {
- LitStr::new(&line.as_str()[1..], lit_str.span())
- } else {
- lit_str.clone()
- }
- }).collect();
+ let documentation: Vec<LitStr> = documentation
+ .iter()
+ .map(|lit_str| {
+ let line = lit_str.value();
+ if line.starts_with(' ') {
+ LitStr::new(&line.as_str()[1..], lit_str.span())
+ } else {
+ lit_str.clone()
+ }
+ })
+ .collect();
if documentation.len() == 1 {
let text = &documentation[0];
documentation_arms
diff --git a/crates/strum_macros/src/macros/enum_table.rs b/crates/strum_macros/src/macros/enum_table.rs
new file mode 100644
index 0000000..f9d4e81
--- /dev/null
+++ b/crates/strum_macros/src/macros/enum_table.rs
@@ -0,0 +1,204 @@
+use proc_macro2::{Span, TokenStream};
+use quote::{format_ident, quote};
+use syn::{spanned::Spanned, Data, DeriveInput, Fields};
+
+use crate::helpers::{non_enum_error, snakify, HasStrumVariantProperties};
+
+pub fn enum_table_inner(ast: &DeriveInput) -> syn::Result<TokenStream> {
+ let name = &ast.ident;
+ let gen = &ast.generics;
+ let vis = &ast.vis;
+ let mut doc_comment = format!("A map over the variants of `{}`", name);
+
+ if gen.lifetimes().count() > 0 {
+ return Err(syn::Error::new(
+ Span::call_site(),
+ "`EnumTable` doesn't support enums with lifetimes.",
+ ));
+ }
+
+ let variants = match &ast.data {
+ Data::Enum(v) => &v.variants,
+ _ => return Err(non_enum_error()),
+ };
+
+ let table_name = format_ident!("{}Table", name);
+
+ // the identifiers of each variant, in PascalCase
+ let mut pascal_idents = Vec::new();
+ // the identifiers of each struct field, in snake_case
+ let mut snake_idents = Vec::new();
+ // match arms in the form `MyEnumTable::Variant => &self.variant,`
+ let mut get_matches = Vec::new();
+ // match arms in the form `MyEnumTable::Variant => &mut self.variant,`
+ let mut get_matches_mut = Vec::new();
+ // match arms in the form `MyEnumTable::Variant => self.variant = new_value`
+ let mut set_matches = Vec::new();
+ // struct fields of the form `variant: func(MyEnum::Variant),*
+ let mut closure_fields = Vec::new();
+ // struct fields of the form `variant: func(MyEnum::Variant, self.variant),`
+ let mut transform_fields = Vec::new();
+
+ // identifiers for disabled variants
+ let mut disabled_variants = Vec::new();
+ // match arms for disabled variants
+ let mut disabled_matches = Vec::new();
+
+ for variant in variants {
+ // skip disabled variants
+ if variant.get_variant_properties()?.disabled.is_some() {
+ let disabled_ident = &variant.ident;
+ let panic_message = format!(
+ "Can't use `{}` with `{}` - variant is disabled for Strum features",
+ disabled_ident, table_name
+ );
+ disabled_variants.push(disabled_ident);
+ disabled_matches.push(quote!(#name::#disabled_ident => panic!(#panic_message),));
+ continue;
+ }
+
+ // Error on variants with data
+ if variant.fields != Fields::Unit {
+ return Err(syn::Error::new(
+ variant.fields.span(),
+ "`EnumTable` doesn't support enums with non-unit variants",
+ ));
+ };
+
+ let pascal_case = &variant.ident;
+ let snake_case = format_ident!("_{}", snakify(&pascal_case.to_string()));
+
+ get_matches.push(quote! {#name::#pascal_case => &self.#snake_case,});
+ get_matches_mut.push(quote! {#name::#pascal_case => &mut self.#snake_case,});
+ set_matches.push(quote! {#name::#pascal_case => self.#snake_case = new_value,});
+ closure_fields.push(quote! {#snake_case: func(#name::#pascal_case),});
+ transform_fields.push(quote! {#snake_case: func(#name::#pascal_case, &self.#snake_case),});
+ pascal_idents.push(pascal_case);
+ snake_idents.push(snake_case);
+ }
+
+ // Error on empty enums
+ if pascal_idents.is_empty() {
+ return Err(syn::Error::new(
+ variants.span(),
+ "`EnumTable` requires at least one non-disabled variant",
+ ));
+ }
+
+ // if the index operation can panic, add that to the documentation
+ if !disabled_variants.is_empty() {
+ doc_comment.push_str(&format!(
+ "\n# Panics\nIndexing `{}` with any of the following variants will cause a panic:",
+ table_name
+ ));
+ for variant in disabled_variants {
+ doc_comment.push_str(&format!("\n\n- `{}::{}`", name, variant));
+ }
+ }
+
+ let doc_new = format!(
+ "Create a new {} with a value for each variant of {}",
+ table_name, name
+ );
+ let doc_closure = format!(
+ "Create a new {} by running a function on each variant of `{}`",
+ table_name, name
+ );
+ let doc_transform = format!("Create a new `{}` by running a function on each variant of `{}` and the corresponding value in the current `{0}`", table_name, name);
+ let doc_filled = format!(
+ "Create a new `{}` with the same value in each field.",
+ table_name
+ );
+ let doc_option_all = format!("Converts `{}<Option<T>>` into `Option<{0}<T>>`. Returns `Some` if all fields are `Some`, otherwise returns `None`.", table_name);
+ let doc_result_all_ok = format!("Converts `{}<Result<T, E>>` into `Result<{0}<T>, E>`. Returns `Ok` if all fields are `Ok`, otherwise returns `Err`.", table_name);
+
+ Ok(quote! {
+ #[doc = #doc_comment]
+ #[allow(
+ missing_copy_implementations,
+ )]
+ #[derive(Debug, Clone, Default, PartialEq, Eq, Hash)]
+ #vis struct #table_name<T> {
+ #(#snake_idents: T,)*
+ }
+
+ impl<T: Clone> #table_name<T> {
+ #[doc = #doc_filled]
+ #vis fn filled(value: T) -> #table_name<T> {
+ #table_name {
+ #(#snake_idents: value.clone(),)*
+ }
+ }
+ }
+
+ impl<T> #table_name<T> {
+ #[doc = #doc_new]
+ #vis fn new(
+ #(#snake_idents: T,)*
+ ) -> #table_name<T> {
+ #table_name {
+ #(#snake_idents,)*
+ }
+ }
+
+ #[doc = #doc_closure]
+ #vis fn from_closure<F: Fn(#name)->T>(func: F) -> #table_name<T> {
+ #table_name {
+ #(#closure_fields)*
+ }
+ }
+
+ #[doc = #doc_transform]
+ #vis fn transform<U, F: Fn(#name, &T)->U>(&self, func: F) -> #table_name<U> {
+ #table_name {
+ #(#transform_fields)*
+ }
+ }
+
+ }
+
+ impl<T> ::core::ops::Index<#name> for #table_name<T> {
+ type Output = T;
+
+ fn index(&self, idx: #name) -> &T {
+ match idx {
+ #(#get_matches)*
+ #(#disabled_matches)*
+ }
+ }
+ }
+
+ impl<T> ::core::ops::IndexMut<#name> for #table_name<T> {
+ fn index_mut(&mut self, idx: #name) -> &mut T {
+ match idx {
+ #(#get_matches_mut)*
+ #(#disabled_matches)*
+ }
+ }
+ }
+
+ impl<T> #table_name<::core::option::Option<T>> {
+ #[doc = #doc_option_all]
+ #vis fn all(self) -> ::core::option::Option<#table_name<T>> {
+ if let #table_name {
+ #(#snake_idents: ::core::option::Option::Some(#snake_idents),)*
+ } = self {
+ ::core::option::Option::Some(#table_name {
+ #(#snake_idents,)*
+ })
+ } else {
+ ::core::option::Option::None
+ }
+ }
+ }
+
+ impl<T, E> #table_name<::core::result::Result<T, E>> {
+ #[doc = #doc_result_all_ok]
+ #vis fn all_ok(self) -> ::core::result::Result<#table_name<T>, E> {
+ ::core::result::Result::Ok(#table_name {
+ #(#snake_idents: self.#snake_idents?,)*
+ })
+ }
+ }
+ })
+}
diff --git a/crates/strum_macros/src/macros/enum_try_as.rs b/crates/strum_macros/src/macros/enum_try_as.rs
index 088a1f1..c6d0127 100644
--- a/crates/strum_macros/src/macros/enum_try_as.rs
+++ b/crates/strum_macros/src/macros/enum_try_as.rs
@@ -1,4 +1,4 @@
-use crate::helpers::{non_enum_error, snakify, HasStrumVariantProperties};
+use crate::helpers::{case_style::snakify, non_enum_error, HasStrumVariantProperties};
use proc_macro2::TokenStream;
use quote::{format_ident, quote, ToTokens};
use syn::{Data, DeriveInput};
@@ -10,6 +10,7 @@
};
let enum_name = &ast.ident;
+ let (impl_generics, ty_generics, where_clause) = ast.generics.split_for_impl();
let variants: Vec<_> = variants
.iter()
@@ -72,9 +73,8 @@
.collect();
Ok(quote! {
- impl #enum_name {
+ impl #impl_generics #enum_name #ty_generics #where_clause {
#(#variants)*
}
- }
- .into())
+ })
}
diff --git a/crates/strum_macros/src/macros/enum_variant_array.rs b/crates/strum_macros/src/macros/enum_variant_array.rs
new file mode 100644
index 0000000..a6974d6
--- /dev/null
+++ b/crates/strum_macros/src/macros/enum_variant_array.rs
@@ -0,0 +1,34 @@
+use proc_macro2::TokenStream;
+use quote::quote;
+use syn::{Data, DeriveInput, Fields};
+
+use crate::helpers::{non_enum_error, non_unit_variant_error, HasTypeProperties};
+
+pub fn static_variants_array_inner(ast: &DeriveInput) -> syn::Result<TokenStream> {
+ let name = &ast.ident;
+ let gen = &ast.generics;
+ let (impl_generics, ty_generics, where_clause) = gen.split_for_impl();
+
+ let variants = match &ast.data {
+ Data::Enum(v) => &v.variants,
+ _ => return Err(non_enum_error()),
+ };
+
+ let type_properties = ast.get_type_properties()?;
+ let strum_module_path = type_properties.crate_module_path();
+
+ let idents = variants
+ .iter()
+ .cloned()
+ .map(|v| match v.fields {
+ Fields::Unit => Ok(v.ident),
+ _ => Err(non_unit_variant_error()),
+ })
+ .collect::<syn::Result<Vec<_>>>()?;
+
+ Ok(quote! {
+ impl #impl_generics #strum_module_path::VariantArray for #name #ty_generics #where_clause {
+ const VARIANTS: &'static [Self] = &[ #(#name::#idents),* ];
+ }
+ })
+}
diff --git a/crates/strum_macros/src/macros/enum_variant_names.rs b/crates/strum_macros/src/macros/enum_variant_names.rs
index c54d45d..8c41cc4 100644
--- a/crates/strum_macros/src/macros/enum_variant_names.rs
+++ b/crates/strum_macros/src/macros/enum_variant_names.rs
@@ -1,6 +1,6 @@
use proc_macro2::TokenStream;
use quote::quote;
-use syn::{Data, DeriveInput};
+use syn::{Data, DeriveInput, LitStr};
use crate::helpers::{non_enum_error, HasStrumVariantProperties, HasTypeProperties};
@@ -22,9 +22,10 @@
.iter()
.map(|v| {
let props = v.get_variant_properties()?;
- Ok(props.get_preferred_name(type_properties.case_style))
+ Ok(props
+ .get_preferred_name(type_properties.case_style, type_properties.prefix.as_ref()))
})
- .collect::<syn::Result<Vec<_>>>()?;
+ .collect::<syn::Result<Vec<LitStr>>>()?;
Ok(quote! {
impl #impl_generics #strum_module_path::VariantNames for #name #ty_generics #where_clause {
diff --git a/crates/strum_macros/src/macros/from_repr.rs b/crates/strum_macros/src/macros/from_repr.rs
index 92fd7ad..78bbb28 100644
--- a/crates/strum_macros/src/macros/from_repr.rs
+++ b/crates/strum_macros/src/macros/from_repr.rs
@@ -1,62 +1,31 @@
-use heck::ToShoutySnakeCase;
use proc_macro2::{Span, TokenStream};
-use quote::{format_ident, quote, ToTokens};
-use syn::{Data, DeriveInput, Fields, PathArguments, Type, TypeParen};
+use quote::{format_ident, quote};
+use syn::{Data, DeriveInput, Fields, Type};
-use crate::helpers::{non_enum_error, HasStrumVariantProperties};
+use crate::helpers::{non_enum_error, HasStrumVariantProperties, HasTypeProperties};
pub fn from_repr_inner(ast: &DeriveInput) -> syn::Result<TokenStream> {
let name = &ast.ident;
let gen = &ast.generics;
let (impl_generics, ty_generics, where_clause) = gen.split_for_impl();
let vis = &ast.vis;
- let attrs = &ast.attrs;
let mut discriminant_type: Type = syn::parse("usize".parse().unwrap()).unwrap();
- for attr in attrs {
- let path = attr.path();
-
- let mut ts = if let Ok(ts) = attr
- .meta
- .require_list()
- .map(|metas| metas.to_token_stream().into_iter())
- {
- ts
- } else {
- continue;
- };
- // Discard the path
- let _ = ts.next();
- let tokens: TokenStream = ts.collect();
-
- if path.leading_colon.is_some() {
- continue;
- }
- if path.segments.len() != 1 {
- continue;
- }
- let segment = path.segments.first().unwrap();
- if segment.ident != "repr" {
- continue;
- }
- if segment.arguments != PathArguments::None {
- continue;
- }
- let typ_paren = match syn::parse2::<Type>(tokens.clone()) {
- Ok(Type::Paren(TypeParen { elem, .. })) => *elem,
- _ => continue,
- };
- let inner_path = match &typ_paren {
- Type::Path(t) => t,
- _ => continue,
- };
- if let Some(seg) = inner_path.path.segments.last() {
- for t in &[
- "u8", "u16", "u32", "u64", "usize", "i8", "i16", "i32", "i64", "isize",
- ] {
- if seg.ident == t {
- discriminant_type = typ_paren;
- break;
+ if let Some(type_path) = ast
+ .get_type_properties()
+ .ok()
+ .and_then(|tp| tp.enum_repr)
+ .and_then(|repr_ts| syn::parse2::<Type>(repr_ts).ok())
+ {
+ if let Type::Path(path) = type_path.clone() {
+ if let Some(seg) = path.path.segments.last() {
+ for t in &[
+ "u8", "u16", "u32", "u64", "usize", "i8", "i16", "i32", "i64", "isize",
+ ] {
+ if seg.ident == t {
+ discriminant_type = type_path;
+ break;
+ }
}
}
}
@@ -103,7 +72,7 @@
}
};
- let const_var_str = format!("{}_DISCRIMINANT", variant.ident).to_shouty_snake_case();
+ let const_var_str = format!("{}_DISCRIMINANT", variant.ident);
let const_var_ident = format_ident!("{}", const_var_str);
let const_val_expr = match &variant.discriminant {
@@ -114,7 +83,10 @@
},
};
- constant_defs.push(quote! {const #const_var_ident: #discriminant_type = #const_val_expr;});
+ constant_defs.push(quote! {
+ #[allow(non_upper_case_globals)]
+ const #const_var_ident: #discriminant_type = #const_val_expr;
+ });
arms.push(quote! {v if v == #const_var_ident => ::core::option::Option::Some(#name::#ident #params)});
prev_const_var_ident = Some(const_var_ident);
diff --git a/crates/strum_macros/src/macros/mod.rs b/crates/strum_macros/src/macros/mod.rs
index 8df8cd6..fafc048 100644
--- a/crates/strum_macros/src/macros/mod.rs
+++ b/crates/strum_macros/src/macros/mod.rs
@@ -4,7 +4,9 @@
pub mod enum_iter;
pub mod enum_messages;
pub mod enum_properties;
+pub mod enum_table;
pub mod enum_try_as;
+pub mod enum_variant_array;
pub mod enum_variant_names;
pub mod from_repr;
diff --git a/crates/strum_macros/src/macros/strings/as_ref_str.rs b/crates/strum_macros/src/macros/strings/as_ref_str.rs
index 617b887..8d44f81 100644
--- a/crates/strum_macros/src/macros/strings/as_ref_str.rs
+++ b/crates/strum_macros/src/macros/strings/as_ref_str.rs
@@ -25,7 +25,9 @@
// Look at all the serialize attributes.
// Use `to_string` attribute (not `as_ref_str` or something) to keep things consistent
// (i.e. always `enum.as_ref().to_string() == enum.to_string()`).
- let output = variant_properties.get_preferred_name(type_properties.case_style);
+ let output = variant_properties
+ .get_preferred_name(type_properties.case_style, type_properties.prefix.as_ref());
+
let params = match variant.fields {
Fields::Unit => quote! {},
Fields::Unnamed(..) => quote! { (..) },
diff --git a/crates/strum_macros/src/macros/strings/display.rs b/crates/strum_macros/src/macros/strings/display.rs
index fcc5936..a2f6f24 100644
--- a/crates/strum_macros/src/macros/strings/display.rs
+++ b/crates/strum_macros/src/macros/strings/display.rs
@@ -1,6 +1,6 @@
-use proc_macro2::TokenStream;
+use proc_macro2::{Ident, TokenStream};
use quote::quote;
-use syn::{Data, DeriveInput, Fields};
+use syn::{punctuated::Punctuated, Data, DeriveInput, Fields, LitStr, Token};
use crate::helpers::{non_enum_error, HasStrumVariantProperties, HasTypeProperties};
@@ -24,18 +24,31 @@
}
// Look at all the serialize attributes.
- let output = variant_properties.get_preferred_name(type_properties.case_style);
+ let output = variant_properties
+ .get_preferred_name(type_properties.case_style, type_properties.prefix.as_ref());
let params = match variant.fields {
Fields::Unit => quote! {},
Fields::Unnamed(..) => quote! { (..) },
- Fields::Named(..) => quote! { {..} },
+ Fields::Named(ref field_names) => {
+ // Transform named params '{ name: String, age: u8 }' to '{ ref name, ref age }'
+ let names: Punctuated<TokenStream, Token!(,)> = field_names
+ .named
+ .iter()
+ .map(|field| {
+ let ident = field.ident.as_ref().unwrap();
+ quote! { ref #ident }
+ })
+ .collect();
+
+ quote! { {#names} }
+ }
};
if variant_properties.to_string.is_none() && variant_properties.default.is_some() {
match &variant.fields {
Fields::Unnamed(fields) if fields.unnamed.len() == 1 => {
- arms.push(quote! { #name::#ident(ref s) => f.pad(s) });
+ arms.push(quote! { #name::#ident(ref s) => ::core::fmt::Display::fmt(s, f) });
}
_ => {
return Err(syn::Error::new_spanned(
@@ -45,7 +58,36 @@
}
}
} else {
- arms.push(quote! { #name::#ident #params => f.pad(#output) });
+ let arm = if let Fields::Named(ref field_names) = variant.fields {
+ let used_vars = capture_format_string_idents(&output)?;
+ if used_vars.is_empty() {
+ quote! { #name::#ident #params => ::core::fmt::Display::fmt(#output, f) }
+ } else {
+ // Create args like 'name = name, age = age' for format macro
+ let args: Punctuated<_, Token!(,)> = field_names
+ .named
+ .iter()
+ .filter_map(|field| {
+ let ident = field.ident.as_ref().unwrap();
+ // Only contain variables that are used in format string
+ if !used_vars.contains(ident) {
+ None
+ } else {
+ Some(quote! { #ident = #ident })
+ }
+ })
+ .collect();
+
+ quote! {
+ #[allow(unused_variables)]
+ #name::#ident #params => ::core::fmt::Display::fmt(&format!(#output, #args), f)
+ }
+ }
+ } else {
+ quote! { #name::#ident #params => ::core::fmt::Display::fmt(#output, f) }
+ };
+
+ arms.push(arm);
}
}
@@ -63,3 +105,43 @@
}
})
}
+
+fn capture_format_string_idents(string_literal: &LitStr) -> syn::Result<Vec<Ident>> {
+ // Remove escaped brackets
+ let format_str = string_literal.value().replace("{{", "").replace("}}", "");
+
+ let mut new_var_start_index: Option<usize> = None;
+ let mut var_used: Vec<Ident> = Vec::new();
+
+ for (i, chr) in format_str.bytes().enumerate() {
+ if chr == b'{' {
+ if new_var_start_index.is_some() {
+ return Err(syn::Error::new_spanned(
+ string_literal,
+ "Bracket opened without closing previous bracket",
+ ));
+ }
+ new_var_start_index = Some(i);
+ continue;
+ }
+
+ if chr == b'}' {
+ let start_index = new_var_start_index.take().ok_or(syn::Error::new_spanned(
+ string_literal,
+ "Bracket closed without previous opened bracket",
+ ))?;
+
+ let inside_brackets = &format_str[start_index + 1..i];
+ let ident_str = inside_brackets.split(":").next().unwrap();
+ let ident = syn::parse_str::<Ident>(ident_str).map_err(|_| {
+ syn::Error::new_spanned(
+ string_literal,
+ "Invalid identifier inside format string bracket",
+ )
+ })?;
+ var_used.push(ident);
+ }
+ }
+
+ Ok(var_used)
+}
diff --git a/crates/strum_macros/src/macros/strings/from_string.rs b/crates/strum_macros/src/macros/strings/from_string.rs
index 2d25591..de32cbb 100644
--- a/crates/strum_macros/src/macros/strings/from_string.rs
+++ b/crates/strum_macros/src/macros/strings/from_string.rs
@@ -3,7 +3,8 @@
use syn::{Data, DeriveInput, Fields};
use crate::helpers::{
- non_enum_error, occurrence_error, HasStrumVariantProperties, HasTypeProperties,
+ non_enum_error, occurrence_error, HasInnerVariantProperties, HasStrumVariantProperties,
+ HasTypeProperties,
};
pub fn from_string_inner(ast: &DeriveInput) -> syn::Result<TokenStream> {
@@ -45,7 +46,6 @@
))
}
}
-
default_kw = Some(kw);
default = quote! {
::core::result::Result::Ok(#name::#ident(s.into()))
@@ -56,16 +56,34 @@
let params = match &variant.fields {
Fields::Unit => quote! {},
Fields::Unnamed(fields) => {
- let defaults =
- ::core::iter::repeat(quote!(Default::default())).take(fields.unnamed.len());
- quote! { (#(#defaults),*) }
+ if let Some(ref value) = variant_properties.default_with {
+ let func = proc_macro2::Ident::new(&value.value(), value.span());
+ let defaults = vec![quote! { #func() }];
+ quote! { (#(#defaults),*) }
+ } else {
+ let defaults =
+ ::core::iter::repeat(quote!(Default::default())).take(fields.unnamed.len());
+ quote! { (#(#defaults),*) }
+ }
}
Fields::Named(fields) => {
- let fields = fields
- .named
- .iter()
- .map(|field| field.ident.as_ref().unwrap());
- quote! { {#(#fields: Default::default()),*} }
+ let mut defaults = vec![];
+ for field in &fields.named {
+ let meta = field.get_variant_inner_properties()?;
+ let field = field.ident.as_ref().unwrap();
+
+ if let Some(default_with) = meta.default_with {
+ let func =
+ proc_macro2::Ident::new(&default_with.value(), default_with.span());
+ defaults.push(quote! {
+ #field: #func()
+ });
+ } else {
+ defaults.push(quote! { #field: Default::default() });
+ }
+ }
+
+ quote! { {#(#defaults),*} }
}
};
@@ -79,7 +97,7 @@
phf_exact_match_arms.push(quote! { #serialization => #name::#ident #params, });
if is_ascii_case_insensitive {
- // Store the lowercase and UPPERCASE variants in the phf map to capture
+ // Store the lowercase and UPPERCASE variants in the phf map to capture
let ser_string = serialization.value();
let lower =
@@ -113,6 +131,7 @@
}
}
};
+
let standard_match_body = if standard_match_arms.is_empty() {
default
} else {
@@ -134,7 +153,6 @@
}
}
};
-
let try_from_str = try_from_str(
name,
&impl_generics,
diff --git a/crates/strum_macros/src/macros/strings/to_string.rs b/crates/strum_macros/src/macros/strings/to_string.rs
index 9a1e661..6d44068 100644
--- a/crates/strum_macros/src/macros/strings/to_string.rs
+++ b/crates/strum_macros/src/macros/strings/to_string.rs
@@ -39,7 +39,8 @@
}
// Look at all the serialize attributes.
- let output = variant_properties.get_preferred_name(type_properties.case_style);
+ let output = variant_properties
+ .get_preferred_name(type_properties.case_style, type_properties.prefix.as_ref());
let params = match variant.fields {
Fields::Unit => quote! {},
diff --git a/crates/synstructure/.android-checksum.json b/crates/synstructure/.android-checksum.json
new file mode 100644
index 0000000..7a1c396
--- /dev/null
+++ b/crates/synstructure/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"TEST_MAPPING":"671cc8a83f867386aafc0b38cf0052adac235fa68c990e4e3bad1912ba69c4d6","src/lib.rs":"080b9dce59720d48a94fec5e24bcd1bccfb9408a8ea729acd2c0f05dc709c8f6","Cargo.toml":"847ef797326df611b33de84b23f3d616ad6f34dbf610d054bebc64d58913bb04","src/macros.rs":"ec7ce588095009a78ec79ad4d0eb3b9ff8e23a1693fff09088e6d5513fe439fc","METADATA":"7be3d9ce2891a33bb1de3558413b8a70a95154e4ff2c0515521b62120493a174","cargo_embargo.json":"15c8d53a8d6555220ddcd5b6fd60a310b5b873f964d3a7542af67d7ab6de16bc","rules.mk":"f2eb9bbf9d8cbba8afc07ae692ff0b3b3b5c886bc9310279e7adb1b115fbb263","README.md":"31949e4de86d838c07ff7d855a7a63a2e0ab1557a82fb4296a10abc8c4eb4039","Android.bp":"2a83570d1813fa66bf840e6f177da157075da2203366da9e4c5cf53261458bd2","LICENSE":"bb78d6a5b2f4ba5d604d2fccd6e84f515837bba757398168ff4e0fd4b01bd8cd","MODULE_LICENSE_MIT":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a",".cargo-checksum.json":"f89bfa2dba1504a5959c3af8f7ef91c180789be58a2e34b68132d68950f2ef80"}}
\ No newline at end of file
diff --git a/crates/synstructure/.cargo-checksum.json b/crates/synstructure/.cargo-checksum.json
index bb02a4c..1c903e6 100644
--- a/crates/synstructure/.cargo-checksum.json
+++ b/crates/synstructure/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"b9f3ce31a9ac80dc24f4afac7108b7cff44399f8d7503dc4addea4d256431a73","LICENSE":"219920e865eee70b7dcfc948a86b099e7f4fe2de01bcca2ca9a20c0a033f2b59","README.md":"a528e7356db49ea813c3290dd4f6b15d8e6c0a870cfc07a2df0f3d1381c575bf","src/lib.rs":"b8d9885399b22a5ee92b51e4ca757427da07775e940b25e1573180d9e8faf7d0","src/macros.rs":"e7cf1808faf5dac5ca25bd40ad99e95c2aab4f9899bd9327898761ea86271f7c"},"package":"f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"}
\ No newline at end of file
+{"files":{"Cargo.toml":"55000e8899a31356e26ba655954f38c80f6d9e20b222a1b871014b6fc5bc1d4c","LICENSE":"219920e865eee70b7dcfc948a86b099e7f4fe2de01bcca2ca9a20c0a033f2b59","README.md":"fc43c02f6d03376dbf1cf00931b78248f9325e56628545369735935d423ca9df","src/lib.rs":"14521d4365083ac8c72ce7b53a2c87915d72602c5fa2f6f38c9ec3ea7fce62db","src/macros.rs":"0d4b9c7f89dc126dd58a884acb23702bb4f9be242c0d16cfefc572d09169579a"},"package":"c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"}
\ No newline at end of file
diff --git a/crates/synstructure/Android.bp b/crates/synstructure/Android.bp
index 186c87d..c5b3407 100644
--- a/crates/synstructure/Android.bp
+++ b/crates/synstructure/Android.bp
@@ -18,7 +18,7 @@
host_cross_supported: false,
crate_name: "synstructure",
cargo_env_compat: true,
- cargo_pkg_version: "0.12.6",
+ cargo_pkg_version: "0.13.1",
crate_root: "src/lib.rs",
edition: "2018",
features: ["proc-macro"],
@@ -26,7 +26,6 @@
"libproc_macro2",
"libquote",
"libsyn",
- "libunicode_xid",
],
compile_multilib: "first",
}
diff --git a/crates/synstructure/Cargo.toml b/crates/synstructure/Cargo.toml
index 0339856..50ceb91 100644
--- a/crates/synstructure/Cargo.toml
+++ b/crates/synstructure/Cargo.toml
@@ -12,17 +12,29 @@
[package]
edition = "2018"
name = "synstructure"
-version = "0.12.6"
+version = "0.13.1"
authors = ["Nika Layzell <[email protected]>"]
-include = ["src/**/*", "Cargo.toml", "README.md", "LICENSE"]
+include = [
+ "src/**/*",
+ "Cargo.toml",
+ "README.md",
+ "LICENSE",
+]
description = "Helper methods and macros for custom derives"
documentation = "https://docs.rs/synstructure"
readme = "README.md"
-keywords = ["syn", "macros", "derive", "expand_substructure", "enum"]
+keywords = [
+ "syn",
+ "macros",
+ "derive",
+ "expand_substructure",
+ "enum",
+]
license = "MIT"
repository = "https://github.com/mystor/synstructure"
+
[dependencies.proc-macro2]
-version = "1"
+version = "1.0.60"
default-features = false
[dependencies.quote]
@@ -30,15 +42,24 @@
default-features = false
[dependencies.syn]
-version = "1"
-features = ["derive", "parsing", "printing", "clone-impls", "visit", "extra-traits"]
+version = "2"
+features = [
+ "derive",
+ "parsing",
+ "printing",
+ "clone-impls",
+ "visit",
+ "extra-traits",
+]
default-features = false
-[dependencies.unicode-xid]
-version = "0.2"
[dev-dependencies.synstructure_test_traits]
version = "0.1"
[features]
default = ["proc-macro"]
-proc-macro = ["proc-macro2/proc-macro", "syn/proc-macro", "quote/proc-macro"]
+proc-macro = [
+ "proc-macro2/proc-macro",
+ "syn/proc-macro",
+ "quote/proc-macro",
+]
diff --git a/crates/synstructure/METADATA b/crates/synstructure/METADATA
index 21553d8..0a52d1e 100644
--- a/crates/synstructure/METADATA
+++ b/crates/synstructure/METADATA
@@ -1,17 +1,17 @@
name: "synstructure"
description: "Helper methods and macros for custom derives"
third_party {
- version: "0.12.6"
+ version: "0.13.1"
license_type: NOTICE
last_upgrade_date {
- year: 2022
- month: 9
- day: 6
+ year: 2024
+ month: 12
+ day: 20
}
homepage: "https://crates.io/crates/synstructure"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/synstructure/synstructure-0.12.6.crate"
- version: "0.12.6"
+ value: "https://static.crates.io/crates/synstructure/synstructure-0.13.1.crate"
+ version: "0.13.1"
}
}
diff --git a/crates/synstructure/README.md b/crates/synstructure/README.md
index b72b7bd..1eefc1e 100644
--- a/crates/synstructure/README.md
+++ b/crates/synstructure/README.md
@@ -59,8 +59,7 @@
}
}
expands to {
- #[allow(non_upper_case_globals)]
- const _DERIVE_example_traits_WalkFields_FOR_A: () = {
+ const _: () = {
extern crate example_traits;
impl<T> example_traits::WalkFields for A<T>
where T: example_traits::WalkFields
@@ -129,8 +128,7 @@
}
}
expands to {
- #[allow(non_upper_case_globals)]
- const _DERIVE_example_traits_Interest_FOR_A: () = {
+ const _: () = {
extern crate example_traits;
impl<T> example_traits::Interest for A<T>
where T: example_traits::Interest
diff --git a/crates/synstructure/rules.mk b/crates/synstructure/rules.mk
index 75bfea2..99b90d0 100644
--- a/crates/synstructure/rules.mk
+++ b/crates/synstructure/rules.mk
@@ -15,7 +15,6 @@
MODULE_LIBRARY_DEPS := \
$(call FIND_CRATE,proc-macro2) \
$(call FIND_CRATE,quote) \
- $(call FIND_CRATE,syn) \
- $(call FIND_CRATE,unicode-xid)
+ $(call FIND_CRATE,syn)
include make/library.mk
diff --git a/crates/synstructure/src/lib.rs b/crates/synstructure/src/lib.rs
index 2cd2b88..0a63a39 100644
--- a/crates/synstructure/src/lib.rs
+++ b/crates/synstructure/src/lib.rs
@@ -50,8 +50,7 @@
//! }
//! }
//! expands to {
-//! #[allow(non_upper_case_globals)]
-//! const _DERIVE_synstructure_test_traits_WalkFields_FOR_A: () = {
+//! const _: () = {
//! extern crate synstructure_test_traits;
//! impl<T> synstructure_test_traits::WalkFields for A<T>
//! where T: synstructure_test_traits::WalkFields
@@ -120,8 +119,7 @@
//! }
//! }
//! expands to {
-//! #[allow(non_upper_case_globals)]
-//! const _DERIVE_synstructure_test_traits_Interest_FOR_A: () = {
+//! const _: () = {
//! extern crate synstructure_test_traits;
//! impl<T> synstructure_test_traits::Interest for A<T>
//! where T: synstructure_test_traits::Interest
@@ -149,6 +147,14 @@
//! For more example usage, consider investigating the `abomonation_derive` crate,
//! which makes use of this crate, and is fairly simple.
+#![allow(
+ clippy::default_trait_access,
+ clippy::missing_errors_doc,
+ clippy::missing_panics_doc,
+ clippy::must_use_candidate,
+ clippy::needless_pass_by_value
+)]
+
#[cfg(all(
not(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "wasi"))),
feature = "proc-macro"
@@ -171,8 +177,6 @@
#[doc(hidden)]
pub use quote::quote;
-use unicode_xid::UnicodeXID;
-
use proc_macro2::{Span, TokenStream, TokenTree};
// NOTE: This module has documentation hidden, as it only exports macros (which
@@ -182,6 +186,7 @@
pub mod macros;
/// Changes how bounds are added
+#[allow(clippy::manual_non_exhaustive)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub enum AddBounds {
/// Add for fields and generics
@@ -238,29 +243,13 @@
for (&seen, param) in set.iter().zip(generics.params.iter()) {
if seen {
if let GenericParam::Type(tparam) = param {
- tys.push(&tparam.ident)
+ tys.push(&tparam.ident);
}
}
}
tys
}
-// Internal method for sanitizing an identifier for hygiene purposes.
-fn sanitize_ident(s: &str) -> Ident {
- let mut res = String::with_capacity(s.len());
- for mut c in s.chars() {
- if !UnicodeXID::is_xid_continue(c) {
- c = '_'
- }
- // Deduplicate consecutive _ characters.
- if res.ends_with('_') && c == '_' {
- continue;
- }
- res.push(c);
- }
- Ident::new(&res, Span::call_site())
-}
-
// Internal method to merge two Generics objects together intelligently.
fn merge_generics(into: &mut Generics, from: &Generics) -> Result<()> {
// Try to add the param into `into`, and merge parmas with identical names.
@@ -443,7 +432,7 @@
original_length: usize,
}
-/// Helper function used by the VariantInfo constructor. Walks all of the types
+/// Helper function used by the `VariantInfo` constructor. Walks all of the types
/// in `field` and returns a list of the type parameters from `ty_params` which
/// are referenced in the field.
fn get_ty_params(field: &Field, generics: &Generics) -> Vec<bool> {
@@ -473,7 +462,7 @@
for r in &mut self.result {
*r = true;
}
- visit::visit_type_macro(self, x)
+ visit::visit_type_macro(self, x);
}
}
@@ -657,7 +646,7 @@
func(field, i).to_tokens(t);
quote!(,).to_tokens(t);
}
- })
+ });
}
Fields::Named(FieldsNamed { named, .. }) => {
token::Brace::default().surround(&mut t, |t| {
@@ -667,7 +656,7 @@
func(field, i).to_tokens(t);
quote!(,).to_tokens(t);
}
- })
+ });
}
}
t
@@ -803,6 +792,71 @@
self
}
+ /// Iterates all the bindings of this `Variant` object and uses a closure to determine if a
+ /// binding should be removed. If the closure returns `true` the binding is removed from the
+ /// variant. If the closure returns `false`, the binding remains in the variant.
+ ///
+ /// All the removed bindings are moved to a new `Variant` object which is otherwise identical
+ /// to the current one. To understand the effects of removing a binding from a variant check
+ /// the [`VariantInfo::filter`] documentation.
+ ///
+ /// # Example
+ /// ```
+ /// # use synstructure::*;
+ /// let di: syn::DeriveInput = syn::parse_quote! {
+ /// enum A {
+ /// B{ a: i32, b: i32 },
+ /// C{ a: u32 },
+ /// }
+ /// };
+ /// let mut s = Structure::new(&di);
+ ///
+ /// let mut with_b = &mut s.variants_mut()[0];
+ ///
+ /// let with_a = with_b.drain_filter(|bi| {
+ /// bi.ast().ident == Some(quote::format_ident!("a"))
+ /// });
+ ///
+ /// assert_eq!(
+ /// with_a.each(|bi| quote!(println!("{:?}", #bi))).to_string(),
+ ///
+ /// quote!{
+ /// A::B{ a: ref __binding_0, .. } => {
+ /// { println!("{:?}", __binding_0) }
+ /// }
+ /// }.to_string()
+ /// );
+ ///
+ /// assert_eq!(
+ /// with_b.each(|bi| quote!(println!("{:?}", #bi))).to_string(),
+ ///
+ /// quote!{
+ /// A::B{ b: ref __binding_1, .. } => {
+ /// { println!("{:?}", __binding_1) }
+ /// }
+ /// }.to_string()
+ /// );
+ /// ```
+ #[allow(clippy::return_self_not_must_use)]
+ pub fn drain_filter<F>(&mut self, mut f: F) -> Self
+ where
+ F: FnMut(&BindingInfo<'_>) -> bool,
+ {
+ let mut other = VariantInfo {
+ prefix: self.prefix,
+ bindings: vec![],
+ ast: self.ast,
+ generics: self.generics,
+ original_length: self.original_length,
+ };
+
+ let (other_bindings, self_bindings) = self.bindings.drain(..).partition(&mut f);
+ other.bindings = other_bindings;
+ self.bindings = self_bindings;
+
+ other
+ }
+
/// Remove the binding at the given index.
///
/// # Panics
@@ -848,7 +902,7 @@
F: FnMut(&BindingInfo<'_>) -> BindStyle,
{
for binding in &mut self.bindings {
- binding.style = f(&binding);
+ binding.style = f(binding);
}
self
}
@@ -939,7 +993,6 @@
pub struct Structure<'a> {
variants: Vec<VariantInfo<'a>>,
omitted_variants: bool,
- underscore_const: bool,
ast: &'a DeriveInput,
extra_impl: Vec<GenericParam>,
extra_predicates: Vec<WherePredicate>,
@@ -981,21 +1034,12 @@
})
.collect::<Vec<_>>(),
Data::Struct(data) => {
- // SAFETY NOTE: Normally putting an `Expr` in static storage
- // wouldn't be safe, because it could contain `Term` objects
- // which use thread-local interning. However, this static always
- // contains the value `None`. Thus, it will never contain any
- // unsafe values.
- struct UnsafeMakeSync(Option<(token::Eq, Expr)>);
- unsafe impl Sync for UnsafeMakeSync {}
- static NONE_DISCRIMINANT: UnsafeMakeSync = UnsafeMakeSync(None);
-
vec![VariantInfo::new(
VariantAst {
attrs: &ast.attrs,
ident: &ast.ident,
fields: &data.fields,
- discriminant: &NONE_DISCRIMINANT.0,
+ discriminant: &None,
},
None,
&ast.generics,
@@ -1012,7 +1056,6 @@
Ok(Structure {
variants,
omitted_variants: false,
- underscore_const: false,
ast,
extra_impl: vec![],
extra_predicates: vec![],
@@ -1234,6 +1277,74 @@
self
}
+ /// Iterates all the bindings of this `Structure` object and uses a closure to determine if a
+ /// binding should be removed. If the closure returns `true` the binding is removed from the
+ /// structure. If the closure returns `false`, the binding remains in the structure.
+ ///
+ /// All the removed bindings are moved to a new `Structure` object which is otherwise identical
+ /// to the current one. To understand the effects of removing a binding from a structure check
+ /// the [`Structure::filter`] documentation.
+ ///
+ /// # Example
+ /// ```
+ /// # use synstructure::*;
+ /// let di: syn::DeriveInput = syn::parse_quote! {
+ /// enum A {
+ /// B{ a: i32, b: i32 },
+ /// C{ a: u32 },
+ /// }
+ /// };
+ /// let mut with_b = Structure::new(&di);
+ ///
+ /// let with_a = with_b.drain_filter(|bi| {
+ /// bi.ast().ident == Some(quote::format_ident!("a"))
+ /// });
+ ///
+ /// assert_eq!(
+ /// with_a.each(|bi| quote!(println!("{:?}", #bi))).to_string(),
+ ///
+ /// quote!{
+ /// A::B{ a: ref __binding_0, .. } => {
+ /// { println!("{:?}", __binding_0) }
+ /// }
+ /// A::C{ a: ref __binding_0, } => {
+ /// { println!("{:?}", __binding_0) }
+ /// }
+ /// }.to_string()
+ /// );
+ ///
+ /// assert_eq!(
+ /// with_b.each(|bi| quote!(println!("{:?}", #bi))).to_string(),
+ ///
+ /// quote!{
+ /// A::B{ b: ref __binding_1, .. } => {
+ /// { println!("{:?}", __binding_1) }
+ /// }
+ /// A::C{ .. } => {
+ ///
+ /// }
+ /// }.to_string()
+ /// );
+ /// ```
+ #[allow(clippy::return_self_not_must_use)]
+ pub fn drain_filter<F>(&mut self, mut f: F) -> Self
+ where
+ F: FnMut(&BindingInfo<'_>) -> bool,
+ {
+ Self {
+ variants: self
+ .variants
+ .iter_mut()
+ .map(|variant| variant.drain_filter(&mut f))
+ .collect(),
+ omitted_variants: self.omitted_variants,
+ ast: self.ast,
+ extra_impl: self.extra_impl.clone(),
+ extra_predicates: self.extra_predicates.clone(),
+ add_bounds: self.add_bounds,
+ }
+ }
+
/// Specify additional where predicate bounds which should be generated by
/// impl-generating functions such as `gen_impl`, `bound_impl`, and
/// `unsafe_bound_impl`.
@@ -1257,9 +1368,7 @@
/// fn a() {}
/// }).to_string(),
/// quote!{
- /// #[allow(non_upper_case_globals)]
- /// #[doc(hidden)]
- /// const _DERIVE_krate_Trait_FOR_A: () = {
+ /// const _: () = {
/// extern crate krate;
/// impl<T, U> krate::Trait for A<T, U>
/// where T: std::fmt::Display,
@@ -1303,9 +1412,7 @@
/// fn a() {}
/// }).to_string(),
/// quote!{
- /// #[allow(non_upper_case_globals)]
- /// #[doc(hidden)]
- /// const _DERIVE_krate_Trait_FOR_A: () = {
+ /// const _: () = {
/// extern crate krate;
/// impl<T, U> krate::Trait for A<T, U>
/// where T: krate::Trait,
@@ -1367,6 +1474,68 @@
}
self
}
+ /// Iterates all the variants of this `Structure` object and uses a closure to determine if a
+ /// variant should be removed. If the closure returns `true` the variant is removed from the
+ /// structure. If the closure returns `false`, the variant remains in the structure.
+ ///
+ /// All the removed variants are moved to a new `Structure` object which is otherwise identical
+ /// to the current one. To understand the effects of removing a variant from a structure check
+ /// the [`Structure::filter_variants`] documentation.
+ ///
+ /// # Example
+ /// ```
+ /// # use synstructure::*;
+ /// let di: syn::DeriveInput = syn::parse_quote! {
+ /// enum A {
+ /// B(i32, i32),
+ /// C(u32),
+ /// }
+ /// };
+ ///
+ /// let mut with_c = Structure::new(&di);
+ ///
+ /// let with_b = with_c.drain_filter_variants(|v| v.ast().ident == "B");
+ ///
+ /// assert_eq!(
+ /// with_c.each(|bi| quote!(println!("{:?}", #bi))).to_string(),
+ ///
+ /// quote!{
+ /// A::C(ref __binding_0,) => {
+ /// { println!("{:?}", __binding_0) }
+ /// }
+ /// }.to_string()
+ /// );
+ ///
+ /// assert_eq!(
+ /// with_b.each(|bi| quote!(println!("{:?}", #bi))).to_string(),
+ ///
+ /// quote!{
+ /// A::B(ref __binding_0, ref __binding_1,) => {
+ /// { println!("{:?}", __binding_0) }
+ /// { println!("{:?}", __binding_1) }
+ /// }
+ /// }.to_string()
+ /// );
+ #[allow(clippy::return_self_not_must_use)]
+ pub fn drain_filter_variants<F>(&mut self, mut f: F) -> Self
+ where
+ F: FnMut(&VariantInfo<'_>) -> bool,
+ {
+ let mut other = Self {
+ variants: vec![],
+ omitted_variants: self.omitted_variants,
+ ast: self.ast,
+ extra_impl: self.extra_impl.clone(),
+ extra_predicates: self.extra_predicates.clone(),
+ add_bounds: self.add_bounds,
+ };
+
+ let (other_variants, self_variants) = self.variants.drain(..).partition(&mut f);
+ other.variants = other_variants;
+ self.variants = self_variants;
+
+ other
+ }
/// Remove the variant at the given index.
///
@@ -1525,9 +1694,7 @@
/// }
/// ).to_string(),
/// quote!{
- /// #[allow(non_upper_case_globals)]
- /// #[doc(hidden)]
- /// const _DERIVE_krate_Trait_X_FOR_A: () = {
+ /// const _: () = {
/// extern crate krate;
/// impl<T, U, X: krate::AnotherTrait> krate::Trait<X> for A<T, U>
/// where T : krate :: Trait < X >,
@@ -1620,49 +1787,8 @@
}
}
- /// Configure whether to use `const _` instead of a generated const name in
- /// code generated by `gen_impl` and `bound_impl`.
- ///
- /// This syntax is only supported by rust 1.37, and later versions.
- ///
- /// Defaults to `false` for backwards compatibility reasons.
- ///
- /// # Example
- ///
- /// ```
- /// # use synstructure::*;
- /// let di: syn::DeriveInput = syn::parse_quote! {
- /// struct MyStruct;
- /// };
- /// let mut s = Structure::new(&di);
- ///
- /// assert_eq!(
- /// s.underscore_const(true)
- /// .gen_impl(quote! { gen impl Trait for @Self { } })
- /// .to_string(),
- /// quote! {
- /// const _: () = {
- /// impl Trait for MyStruct { }
- /// };
- /// }
- /// .to_string()
- /// );
- ///
- /// assert_eq!(
- /// s.underscore_const(false)
- /// .gen_impl(quote! { gen impl Trait for @Self { } })
- /// .to_string(),
- /// quote! {
- /// #[allow(non_upper_case_globals)]
- /// const _DERIVE_Trait_FOR_MyStruct: () = {
- /// impl Trait for MyStruct { }
- /// };
- /// }
- /// .to_string()
- /// );
- /// ```
- pub fn underscore_const(&mut self, enabled: bool) -> &mut Self {
- self.underscore_const = enabled;
+ /// This method is a no-op, underscore consts are used by default now.
+ pub fn underscore_const(&mut self, _enabled: bool) -> &mut Self {
self
}
@@ -1713,9 +1839,7 @@
/// fn a() {}
/// }).to_string(),
/// quote!{
- /// #[allow(non_upper_case_globals)]
- /// #[doc(hidden)]
- /// const _DERIVE_krate_Trait_FOR_A: () = {
+ /// const _: () = {
/// extern crate krate;
/// impl<T, U> krate::Trait for A<T, U>
/// where Option<U>: krate::Trait,
@@ -1783,9 +1907,7 @@
/// fn a() {}
/// }).to_string(),
/// quote!{
- /// #[allow(non_upper_case_globals)]
- /// #[doc(hidden)]
- /// const _DERIVE_krate_Trait_FOR_A: () = {
+ /// const _: () = {
/// extern crate krate;
/// unsafe impl<T, U> krate::Trait for A<T, U>
/// where Option<U>: krate::Trait,
@@ -1846,9 +1968,7 @@
/// fn a() {}
/// }).to_string(),
/// quote!{
- /// #[allow(non_upper_case_globals)]
- /// #[doc(hidden)]
- /// const _DERIVE_krate_Trait_FOR_A: () = {
+ /// const _: () = {
/// extern crate krate;
/// impl<T, U> krate::Trait for A<T, U> {
/// fn a() {}
@@ -1906,9 +2026,7 @@
/// fn a() {}
/// }).to_string(),
/// quote!{
- /// #[allow(non_upper_case_globals)]
- /// #[doc(hidden)]
- /// const _DERIVE_krate_Trait_FOR_A: () = {
+ /// const _: () = {
/// extern crate krate;
/// unsafe impl<T, U> krate::Trait for A<T, U> {
/// fn a() {}
@@ -1937,7 +2055,7 @@
let mode = mode.unwrap_or(self.add_bounds);
let name = &self.ast.ident;
let mut gen_clone = self.ast.generics.clone();
- gen_clone.params.extend(self.extra_impl.clone().into_iter());
+ gen_clone.params.extend(self.extra_impl.iter().cloned());
let (impl_generics, _, _) = gen_clone.split_for_impl();
let (_, ty_generics, where_clause) = self.ast.generics.split_for_impl();
@@ -1966,23 +2084,8 @@
}
};
- if self.underscore_const {
- quote! {
- const _: () = { #generated };
- }
- } else {
- let dummy_const: Ident = sanitize_ident(&format!(
- "_DERIVE_{}_FOR_{}",
- (&bound).into_token_stream(),
- name.into_token_stream(),
- ));
- quote! {
- #[allow(non_upper_case_globals)]
- #[doc(hidden)]
- const #dummy_const: () = {
- #generated
- };
- }
+ quote! {
+ const _: () = { #generated };
}
}
@@ -2028,7 +2131,7 @@
///
/// # Hygiene
///
- /// This method tries to handle hygiene intelligenly for both stable and
+ /// This method tries to handle hygiene intelligently for both stable and
/// unstable proc-macro implementations, however there are visible
/// differences.
///
@@ -2040,19 +2143,6 @@
/// following:
///
/// ```ignore
- /// const _DERIVE_krate_Trait_FOR_Struct: () = {
- /// extern crate krate;
- /// use krate::Trait as MyTrait;
- /// impl<T> MyTrait for Struct<T> where T: MyTrait {
- /// fn f(&self) { ... }
- /// }
- /// };
- /// ```
- ///
- /// The `Structure` may also be confired with the [`underscore_const`] method
- /// to generate `const _` instead.
- ///
- /// ```ignore
/// const _: () = {
/// extern crate krate;
/// use krate::Trait as MyTrait;
@@ -2123,8 +2213,7 @@
/// }
/// }).to_string(),
/// quote!{
- /// #[allow(non_upper_case_globals)]
- /// const _DERIVE_krate_Trait_FOR_A: () = {
+ /// const _: () = {
/// extern crate krate;
/// impl<T, U> krate::Trait for A<T, U>
/// where
@@ -2149,8 +2238,7 @@
/// }
/// }).to_string(),
/// quote!{
- /// #[allow(non_upper_case_globals)]
- /// const _DERIVE_krate_Trait_X_FOR_A: () = {
+ /// const _: () = {
/// extern crate krate;
/// impl<X: krate::OtherTrait, T, U> krate::Trait<X> for A<T, U>
/// where
@@ -2178,8 +2266,7 @@
/// }
/// }).to_string(),
/// quote!{
- /// #[allow(non_upper_case_globals)]
- /// const _DERIVE_krate_Trait_FOR_A: () = {
+ /// const _: () = {
/// extern crate krate;
/// impl<T, U> krate::Trait for A<T, U>
/// where
@@ -2286,23 +2373,9 @@
};
if wrap {
- if self.underscore_const {
- Ok(quote! {
- const _: () = { #generated };
- })
- } else {
- let dummy_const: Ident = sanitize_ident(&format!(
- "_DERIVE_{}_FOR_{}",
- (&bound).into_token_stream(),
- name.into_token_stream(),
- ));
- Ok(quote! {
- #[allow(non_upper_case_globals)]
- const #dummy_const: () = {
- #generated
- };
- })
- }
+ Ok(quote! {
+ const _: () = { #generated };
+ })
} else {
Ok(generated)
}
@@ -2328,8 +2401,7 @@
/// # use quote::quote;
/// assert_eq!(
/// synstructure::unpretty_print(quote! {
-/// #[allow(non_upper_case_globals)]
-/// const _DERIVE_krate_Trait_FOR_A: () = {
+/// const _: () = {
/// extern crate krate;
/// impl<T, U> krate::Trait for A<T, U>
/// where
@@ -2340,11 +2412,7 @@
/// }
/// };
/// }),
-/// "# [
-/// allow (
-/// non_upper_case_globals )
-/// ]
-/// const _DERIVE_krate_Trait_FOR_A : (
+/// "const _ : (
/// )
/// = {
/// extern crate krate ;
diff --git a/crates/synstructure/src/macros.rs b/crates/synstructure/src/macros.rs
index 5b6557b..dc17ce3 100644
--- a/crates/synstructure/src/macros.rs
+++ b/crates/synstructure/src/macros.rs
@@ -4,7 +4,8 @@
// Re-exports used by the decl_derive! and test_derive!
pub use proc_macro2::TokenStream as TokenStream2;
-pub use syn::{parse_str, DeriveInput};
+pub use syn::{parse2, parse_str, DeriveInput};
+pub use quote::quote;
#[cfg(all(
not(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "wasi"))),
@@ -95,13 +96,17 @@
i: $crate::macros::TokenStream
) -> $crate::macros::TokenStream {
match $crate::macros::parse::<$crate::macros::DeriveInput>(i) {
- Ok(p) => {
+ ::core::result::Result::Ok(p) => {
match $crate::Structure::try_new(&p) {
- Ok(s) => $crate::MacroResult::into_stream($inner(s)),
- Err(e) => e.to_compile_error().into(),
+ ::core::result::Result::Ok(s) => $crate::MacroResult::into_stream($inner(s)),
+ ::core::result::Result::Err(e) => {
+ ::core::convert::Into::into(e.to_compile_error())
+ }
}
}
- Err(e) => e.to_compile_error().into(),
+ ::core::result::Result::Err(e) => {
+ ::core::convert::Into::into(e.to_compile_error())
+ }
}
}
};
@@ -153,11 +158,19 @@
i: $crate::macros::TokenStream,
) -> $crate::macros::TokenStream {
match $crate::macros::parse::<$crate::macros::DeriveInput>(i) {
- Ok(p) => match $crate::Structure::try_new(&p) {
- Ok(s) => $crate::MacroResult::into_stream($inner(attr.into(), s)),
- Err(e) => e.to_compile_error().into(),
+ ::core::result::Result::Ok(p) => match $crate::Structure::try_new(&p) {
+ ::core::result::Result::Ok(s) => {
+ $crate::MacroResult::into_stream(
+ $inner(::core::convert::Into::into(attr), s)
+ )
+ }
+ ::core::result::Result::Err(e) => {
+ ::core::convert::Into::into(e.to_compile_error())
+ }
},
- Err(e) => e.to_compile_error().into(),
+ ::core::result::Result::Err(e) => {
+ ::core::convert::Into::into(e.to_compile_error())
+ }
}
}
};
@@ -209,27 +222,26 @@
($name:path { $($i:tt)* } expands to { $($o:tt)* } no_build) => {
{
- let i = stringify!( $($i)* );
- let parsed = $crate::macros::parse_str::<$crate::macros::DeriveInput>(i)
- .expect(concat!(
+ let i = $crate::macros::quote!( $($i)* );
+ let parsed = $crate::macros::parse2::<$crate::macros::DeriveInput>(i)
+ .expect(::core::concat!(
"Failed to parse input to `#[derive(",
- stringify!($name),
+ ::core::stringify!($name),
")]`",
));
let raw_res = $name($crate::Structure::new(&parsed));
let res = $crate::MacroResult::into_result(raw_res)
- .expect(concat!(
+ .expect(::core::concat!(
"Procedural macro failed for `#[derive(",
- stringify!($name),
+ ::core::stringify!($name),
")]`",
));
- let expected = stringify!( $($o)* )
- .parse::<$crate::macros::TokenStream2>()
- .expect("output should be a valid TokenStream");
- let mut expected_toks = $crate::macros::TokenStream2::from(expected);
- if res.to_string() != expected_toks.to_string() {
+ let expected_toks = $crate::macros::quote!( $($o)* );
+ if <$crate::macros::TokenStream2 as ::std::string::ToString>::to_string(&res)
+ != <$crate::macros::TokenStream2 as ::std::string::ToString>::to_string(&expected_toks)
+ {
panic!("\
test_derive failed:
expected:
diff --git a/crates/textwrap/.android-checksum.json b/crates/textwrap/.android-checksum.json
new file mode 100644
index 0000000..370868d
--- /dev/null
+++ b/crates/textwrap/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"src/fill.rs":"341b37ee7da0b1ea0bb3a5623a6cae597e516494392a4bbbbbc7613330a8dfec","LICENSE":"6313043340d419f839feeecb23b50e9578ea6395482c4cdeeee97b368b055ecd","src/core.rs":"c7dd9de96e8591fdc97a138436caa9e04ebb324612f50cf72d02f542beebe32b","tests/indent.rs":"b72b15af05a4fc797cda88390adac9f0e7de1696d70d8dbcd0ec7eedc6297d74","cargo_embargo.json":"90e88d48b8b66c169f4bdb414623f05a1268265397fdeb5aecb3e50c74916444","Cargo.lock":"de655148efbc57fa392c0b62016ab85e1566d3680d877694321bafe17ddf366d","src/indentation.rs":"9f8e7de5b0cdae818ad04f287a547124228e46c5761fade573ac110d87ad153e","src/columns.rs":"3a53a79c7b85bff98f8e8d5418cce71e388b484b821a21d74aae442e402ad5de","Cargo.toml":"a2421be759cfe248459b862e5eaf54fb6b291a18d7b917c1d7411fb95a25afda","tests/version-numbers.rs":"5c979a297b0a007544a3a9577b774e1d01bf04c03a23a7f554889afc1fdde159","src/lib.rs":"4c3c6cdfdbfde5885ce8e199f5e030b74f3325067c5ee508234cedb2a8e3bf89","rustfmt.toml":"922261b27cfc88b760a98e5599e8aa236a30277b4d6ff94b4f13ce1048e47724",".cargo-checksum.json":"0dac5bd7e5a1d5c7b5f9179a48a521d7b0111e88cc436e778c16da272b053483","Android.bp":"120b0f00b8985f3408b93c2f8938599ca3e461451556c462bf3c87e2e452b272","src/wrap_algorithms/optimal_fit.rs":"869c7d2980cf65eb889215cc9bad1a50e04ac17b112be8d580563e3a1b3ef176","src/line_ending.rs":"608b79214e3699a8478df22d90c36b48ebd9dc4fccbc5c92ee3ff4adfb64d205","src/wrap_algorithms.rs":"b49fac73098f6232520d5757ae5391c0bb8ea97b5f777bb1d344b7f17e0737d5","src/fuzzing.rs":"501c698180b11eff01b02ed571a8aea4a42be692c973dc4d27c8e70f5dd02d32","src/options.rs":"4718e1bccb6a9de9ddd36012884cd2151ef7ccace4f057c19c8bb9a0b19a291d","src/refill.rs":"d1a0698020464d6e3a59c23f5389d4485337c78ee93193405cc1d9a86a267265","CHANGELOG.md":"cb64070a5d1ff874383e7d5ea4518232b69710956cf4645a742244b4fc3393ab","TEST_MAPPING":"150ff00712a0e459d398e2c22b3d247530b9dd85a8afa66fb33b8b0b33c50326","src/wrap.rs":"a2103572284312021ca266861a683c418817d107695a8ded7fa372145f60db14","src/word_separators.rs":"cf203fbf4576df83549d826f8723749e3e4e8d87c4479eacf4fc734c6f3daaf2","MODULE_LICENSE_MIT":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","README.md":"f6f56de352892cb84de0a68f35c327ebfd934c39829b71d94d8afb3c6b188c79","NOTICE":"6313043340d419f839feeecb23b50e9578ea6395482c4cdeeee97b368b055ecd","METADATA":"be49e28e9338ab281356ad881da46efdae3770c40230ff750868fa9fe30e8a52","src/word_splitters.rs":"63748fba20d3c002457e37b96b18dc31922102550f478fcbee5514771d453fbf","src/termwidth.rs":"4d5fb79617e643a246594ea69ed6c317f3bce40ae96eeb54777bc77a66366f21"}}
\ No newline at end of file
diff --git a/crates/textwrap/.cargo-checksum.json b/crates/textwrap/.cargo-checksum.json
index 187bfe5..0948683 100644
--- a/crates/textwrap/.cargo-checksum.json
+++ b/crates/textwrap/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"CHANGELOG.md":"8831dd3b382369ba55d81ef7536e353940c387a677fdafe10b5e595ac5bfe79e","Cargo.lock":"b400c8a50ad0d96a551f08e2ec6d7c8b0ce5eead99d923f3aa6c870d5afc3f76","Cargo.toml":"1e528c895be9aa55b10b416f33328a36550ecfc99567cde573889f2397c03aad","LICENSE":"ce93600c49fbb3e14df32efe752264644f6a2f8e08a735ba981725799e5309ef","README.md":"18493423b205d5c65482cb9a53c3b27b1527541a40440330e35be2672ed44961","rustfmt.toml":"02637ad90caa19885b25b1ce8230657b3703402775d9db83687a3f55de567509","src/core.rs":"533b1516778553d01b6e3ec5962877b38605545a5041cbfffdd265a93e7de3af","src/fuzzing.rs":"99f44651a324afb0d09f49c11983dec9719c9ff1a986123cdd6046dc7bdb9d24","src/indentation.rs":"f41ee8be41e01620c7d88b76f81a01ce6a619939505eaf3fcfe6c8021fae022b","src/lib.rs":"44b608426f2b9149653c793f82d1ff31f34fa729869ce4a9fe117c604493fcc3","src/line_ending.rs":"bf416f683ab952d4df75d5dc3c199e7ae7740db2c5982ac1a20c3f4b186ded76","src/word_separators.rs":"0d4240dd354c10f66f3f5abb64d73b329a0a87646749244288c5871a96362009","src/word_splitters.rs":"5a3a601414433227aff009d721fa60a94a28a0c7501b54bbbecedda9a2add3ba","src/wrap_algorithms.rs":"754503a00d39965cc8dfb2d854e1b399bbe49260d33bfb2423bdefe8110aca94","src/wrap_algorithms/optimal_fit.rs":"d0b4e2115790b9a145317af60b3ff87e758df82e0a692fe7a78a2b3b445faeef","tests/indent.rs":"51f977db11632a32fafecf86af88413d51238fe6efcf18ec52fac89133714278","tests/version-numbers.rs":"9e964f58dbdf051fc6fe0d6542ab312d3e95f26c3fd14bce84449bb625e45761"},"package":"222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"}
\ No newline at end of file
+{"files":{"CHANGELOG.md":"2b49672ca15da27844abb6643660faa3a517b1b731c7c5023a55de2e570f35fb","Cargo.lock":"c60631b9ccb2798984507f9e074ce15d9b6e59f34d4dc3418ef40c222ac55725","Cargo.toml":"bccd38e75da62b89a7bb2d741926688f1822ecd5165a703ffaadf9177a34e919","LICENSE":"ce93600c49fbb3e14df32efe752264644f6a2f8e08a735ba981725799e5309ef","README.md":"5dd8128a4e9057aeb6133a073d30a819230243907e717349101b41a11ec23234","rustfmt.toml":"02637ad90caa19885b25b1ce8230657b3703402775d9db83687a3f55de567509","src/columns.rs":"73432251f95ac0b84d5e971989ebc5f867d8b8ca82d5e3fc67fe3a66216fbc38","src/core.rs":"e2cc6b1e5978df0db9b6d0425e7d0ebf65dd188aff90df800f1f2dda7b1c53f2","src/fill.rs":"1fe773dad2d0bb67a7739b3931c1ee3269d677b71a0716dcdb5b01fe2539d7c2","src/fuzzing.rs":"0a77010a555a244ac5e907754b2104912299815009922cfdc0f6b48d92135295","src/indentation.rs":"f41ee8be41e01620c7d88b76f81a01ce6a619939505eaf3fcfe6c8021fae022b","src/lib.rs":"d5d39085faa4527bf6c16a91c5a44b9b894e3f3a2606763bceac22038528c28c","src/line_ending.rs":"bf416f683ab952d4df75d5dc3c199e7ae7740db2c5982ac1a20c3f4b186ded76","src/options.rs":"0d3aec6ab238f3aa14aa57e736384ec208cd3013373941c76d66c0125ca0630f","src/refill.rs":"33ce98ef31c4791893fc2136edd8f8d95cdd38fa54daa59aaf078b359c43d913","src/termwidth.rs":"2e7854e822c435341bc4d467d13614d417df4f2f530cea3c5e49e3b44e754943","src/word_separators.rs":"d3b2b5faf224bf414bf9da48be02eaffb41aec3a91674bedab02ad5748344143","src/word_splitters.rs":"8de2b92eff6d752e321f219136b45b9812267b5be7ace57602a3bb9d3b5cf332","src/wrap.rs":"52c48e2e5155100e4067363e56b180785684bca3109c95c3425ef8051738ff0e","src/wrap_algorithms.rs":"c99498f2e58634f707545ba73c3a99025086d1afb8c12aeceff2ced2887bb8ae","src/wrap_algorithms/optimal_fit.rs":"a9ce8bad61d4fa81df9e292a557fbf5303df78391d63610ec512b9b06f9193b1","tests/indent.rs":"51f977db11632a32fafecf86af88413d51238fe6efcf18ec52fac89133714278","tests/version-numbers.rs":"9e964f58dbdf051fc6fe0d6542ab312d3e95f26c3fd14bce84449bb625e45761"},"package":"23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9"}
\ No newline at end of file
diff --git a/crates/textwrap/Android.bp b/crates/textwrap/Android.bp
index 211c924..e8b615e 100644
--- a/crates/textwrap/Android.bp
+++ b/crates/textwrap/Android.bp
@@ -18,7 +18,7 @@
host_supported: true,
crate_name: "textwrap",
cargo_env_compat: true,
- cargo_pkg_version: "0.16.0",
+ cargo_pkg_version: "0.16.1",
crate_root: "src/lib.rs",
edition: "2021",
apex_available: [
diff --git a/crates/textwrap/CHANGELOG.md b/crates/textwrap/CHANGELOG.md
index 5d0dd61..362c0c0 100644
--- a/crates/textwrap/CHANGELOG.md
+++ b/crates/textwrap/CHANGELOG.md
@@ -3,6 +3,20 @@
This file lists the most important changes made in each release of
`textwrap`.
+## Version 0.16.1 (2024-02-17)
+
+This release fixes `display_width` to ignore inline-hyperlinks. The minimum
+supported version of Rust is now documented to be 1.56.
+
+* [#526](https://github.com/mgeisler/textwrap/pull/526): Ignore ANSI hyperlinks
+ in `display_width`: calculations.
+* [#521](https://github.com/mgeisler/textwrap/pull/521): Add `Options::width`
+ setter method.
+* [#520](https://github.com/mgeisler/textwrap/pull/520): Clarify that
+ `WordSeparator` is an enum rather than a trait.
+* [#518](https://github.com/mgeisler/textwrap/pull/518): Test with latest stable
+ and nightly Rust, but check that we can build with Rust 1.56.
+
## Version 0.16.0 (2022-10-23)
This release marks `Options` as `non_exhaustive` and extends it to
@@ -26,6 +40,12 @@
* [#448](https://github.com/mgeisler/textwrap/pull/448): Migrate to
the Rust 2021 edition.
+## Version 0.15.2 (2022-10-24)
+
+This release is identical to 0.15.0 and is only there to give people a
+way to install crates which depend on the yanked 0.15.1 release. See
+[#484](https://github.com/mgeisler/textwrap/issues/484) for details.
+
## Version 0.15.1 (2022-09-15)
This release was yanked since it accidentally broke backwards
@@ -39,7 +59,7 @@
instead of `usize` for fragment widths.
This fixes problems with overflows in the internal computations of
- `wrap_optimal_fit` when fragments (words) or line lenghts had
+ `wrap_optimal_fit` when fragments (words) or line lengths had
extreme values, such as `usize::MAX`.
* [#438](https://github.com/mgeisler/textwrap/pull/438): Simplify
@@ -129,7 +149,7 @@
> = Options::new(80);
```
-This is quite a mouthful, so we suggest using type inferrence where
+This is quite a mouthful, so we suggest using type inference where
possible. You won’t see any chance if you call `wrap` directly with a
width or with an `Options` value constructed on the fly. Please open
an issue if this causes problems for you!
@@ -480,7 +500,7 @@
## Version 0.8.0 (2017-09-04)
-The `Wrapper` stuct is now generic over the type of word splitter
+The `Wrapper` struct is now generic over the type of word splitter
being used. This means less boxing and a nicer API. The
`Wrapper::word_splitter` method has been removed. This is a *breaking
API change* if you used the method to change the word splitter.
diff --git a/crates/textwrap/Cargo.lock b/crates/textwrap/Cargo.lock
index 414d793..98b6420 100644
--- a/crates/textwrap/Cargo.lock
+++ b/crates/textwrap/Cargo.lock
@@ -3,21 +3,10 @@
version = 3
[[package]]
-name = "ahash"
-version = "0.7.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
-dependencies = [
- "getrandom",
- "once_cell",
- "version_check",
-]
-
-[[package]]
name = "aho-corasick"
-version = "0.7.19"
+version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
dependencies = [
"memchr",
]
@@ -38,43 +27,32 @@
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
-name = "cc"
-version = "1.0.73"
+name = "bitflags"
+version = "2.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf"
[[package]]
-name = "cfg-if"
-version = "1.0.0"
+name = "equivalent"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
name = "errno"
-version = "0.2.8"
+version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
dependencies = [
- "errno-dragonfly",
"libc",
- "winapi",
-]
-
-[[package]]
-name = "errno-dragonfly"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
-dependencies = [
- "cc",
- "libc",
+ "windows-sys 0.52.0",
]
[[package]]
name = "form_urlencoded"
-version = "1.1.0"
+version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
dependencies = [
"percent-encoding",
]
@@ -86,24 +64,16 @@
checksum = "7ab85b9b05e3978cc9a9cf8fea7f01b494e1a09ed3037e16ba39edc7a29eb61a"
[[package]]
-name = "getrandom"
-version = "0.2.8"
+name = "hashbrown"
+version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
-dependencies = [
- "cfg-if",
- "libc",
- "wasi",
-]
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
[[package]]
-name = "hashbrown"
-version = "0.12.3"
+name = "hermit-abi"
+version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
-dependencies = [
- "ahash",
-]
+checksum = "bd5256b483761cd23699d0da46cc6fd2ee3be420bbe6d020ae4a091e70b7e9fd"
[[package]]
name = "hyphenation"
@@ -130,37 +100,63 @@
[[package]]
name = "idna"
-version = "0.3.0"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
dependencies = [
"unicode-bidi",
"unicode-normalization",
]
[[package]]
-name = "io-lifetimes"
-version = "0.7.4"
+name = "indexmap"
+version = "2.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6e481ccbe3dea62107216d0d1138bb8ad8e5e5c43009a098bd1990272c497b0"
+checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177"
+dependencies = [
+ "equivalent",
+ "hashbrown",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "windows-sys 0.48.0",
+]
[[package]]
name = "libc"
-version = "0.2.135"
+version = "0.2.153"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c"
+checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
+
+[[package]]
+name = "libredox"
+version = "0.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607"
+dependencies = [
+ "bitflags 2.4.2",
+ "libc",
+ "redox_syscall",
+]
[[package]]
name = "linux-raw-sys"
-version = "0.0.46"
+version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
[[package]]
name = "memchr"
-version = "2.5.0"
+version = "2.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
[[package]]
name = "numtoa"
@@ -169,16 +165,10 @@
checksum = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef"
[[package]]
-name = "once_cell"
-version = "1.15.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1"
-
-[[package]]
name = "percent-encoding"
-version = "2.2.0"
+version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
[[package]]
name = "pocket-resources"
@@ -188,56 +178,65 @@
[[package]]
name = "proc-macro2"
-version = "1.0.47"
+version = "1.0.78"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
+checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
dependencies = [
"unicode-ident",
]
[[package]]
name = "pulldown-cmark"
-version = "0.8.0"
+version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffade02495f22453cd593159ea2f59827aae7f53fa8323f756799b670881dcf8"
+checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b"
dependencies = [
- "bitflags",
+ "bitflags 2.4.2",
"memchr",
"unicase",
]
[[package]]
name = "quote"
-version = "1.0.21"
+version = "1.0.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
dependencies = [
"proc-macro2",
]
[[package]]
name = "redox_syscall"
-version = "0.2.16"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
]
[[package]]
name = "redox_termios"
-version = "0.1.2"
+version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8440d8acb4fd3d277125b4bd01a6f38aee8d814b3b5fc09b3f2b825d37d3fe8f"
-dependencies = [
- "redox_syscall",
-]
+checksum = "20145670ba436b55d91fc92d25e71160fbfbdd57831631c8d7d36377a476f1cb"
[[package]]
name = "regex"
-version = "1.6.0"
+version = "1.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
+checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd"
dependencies = [
"aho-corasick",
"memchr",
@@ -246,44 +245,44 @@
[[package]]
name = "regex-syntax"
-version = "0.6.27"
+version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
[[package]]
name = "rustix"
-version = "0.35.12"
+version = "0.37.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "985947f9b6423159c4726323f373be0a21bdb514c5af06a849cb3d2dce2d01e8"
+checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"errno",
"io-lifetimes",
"libc",
"linux-raw-sys",
- "windows-sys",
+ "windows-sys 0.48.0",
]
[[package]]
name = "semver"
-version = "1.0.14"
+version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4"
+checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0"
[[package]]
name = "serde"
-version = "1.0.147"
+version = "1.0.196"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965"
+checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.147"
+version = "1.0.196"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852"
+checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67"
dependencies = [
"proc-macro2",
"quote",
@@ -291,16 +290,25 @@
]
[[package]]
-name = "smawk"
-version = "0.3.1"
+name = "serde_spanned"
+version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043"
+checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "smawk"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c"
[[package]]
name = "syn"
-version = "1.0.103"
+version = "2.0.49"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d"
+checksum = "915aea9e586f80826ee59f8453c1101f9d1c4b3964cd2460185ee8e299ada496"
dependencies = [
"proc-macro2",
"quote",
@@ -309,29 +317,29 @@
[[package]]
name = "terminal_size"
-version = "0.2.1"
+version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8440c860cf79def6164e4a0a983bcc2305d82419177a0e0c71930d049e3ac5a1"
+checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237"
dependencies = [
"rustix",
- "windows-sys",
+ "windows-sys 0.48.0",
]
[[package]]
name = "termion"
-version = "2.0.1"
+version = "2.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "659c1f379f3408c7e5e84c7d0da6d93404e3800b6b9d063ba24436419302ec90"
+checksum = "c4648c7def6f2043b2568617b9f9b75eae88ca185dbc1f1fda30e95a85d49d7d"
dependencies = [
"libc",
+ "libredox",
"numtoa",
- "redox_syscall",
"redox_termios",
]
[[package]]
name = "textwrap"
-version = "0.16.0"
+version = "0.16.1"
dependencies = [
"hyphenation",
"smawk",
@@ -354,17 +362,42 @@
[[package]]
name = "tinyvec_macros"
-version = "0.1.0"
+version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "toml"
-version = "0.5.9"
+version = "0.7.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
+checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
dependencies = [
"serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
]
[[package]]
@@ -410,34 +443,30 @@
[[package]]
name = "unicase"
-version = "2.6.0"
+version = "2.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89"
dependencies = [
"version_check",
]
[[package]]
name = "unicode-bidi"
-version = "0.3.8"
+version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
+checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75"
[[package]]
name = "unicode-ident"
-version = "1.0.5"
+version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
[[package]]
name = "unicode-linebreak"
-version = "0.1.4"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c5faade31a542b8b35855fff6e8def199853b2da8da256da52f52f1316ee3137"
-dependencies = [
- "hashbrown",
- "regex",
-]
+checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
[[package]]
name = "unicode-normalization"
@@ -450,15 +479,15 @@
[[package]]
name = "unicode-width"
-version = "0.1.10"
+version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
[[package]]
name = "url"
-version = "2.3.1"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
dependencies = [
"form_urlencoded",
"idna",
@@ -467,9 +496,9 @@
[[package]]
name = "version-sync"
-version = "0.9.4"
+version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "99d0801cec07737d88cb900e6419f6f68733867f90b3faaa837e84692e101bf0"
+checksum = "835169da0173ea373ddf5987632aac1f918967fbbe58195e304342282efa6089"
dependencies = [
"proc-macro2",
"pulldown-cmark",
@@ -487,72 +516,142 @@
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]]
-name = "wasi"
-version = "0.11.0+wasi-snapshot-preview1"
+name = "windows-sys"
+version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
-
-[[package]]
-name = "winapi"
-version = "0.3.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
dependencies = [
- "winapi-i686-pc-windows-gnu",
- "winapi-x86_64-pc-windows-gnu",
+ "windows-targets 0.48.5",
]
[[package]]
-name = "winapi-i686-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-
-[[package]]
-name = "winapi-x86_64-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-
-[[package]]
name = "windows-sys"
-version = "0.36.1"
+version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
dependencies = [
- "windows_aarch64_msvc",
- "windows_i686_gnu",
- "windows_i686_msvc",
- "windows_x86_64_gnu",
- "windows_x86_64_msvc",
+ "windows-targets 0.52.0",
]
[[package]]
-name = "windows_aarch64_msvc"
-version = "0.36.1"
+name = "windows-targets"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.0",
+ "windows_aarch64_msvc 0.52.0",
+ "windows_i686_gnu 0.52.0",
+ "windows_i686_msvc 0.52.0",
+ "windows_x86_64_gnu 0.52.0",
+ "windows_x86_64_gnullvm 0.52.0",
+ "windows_x86_64_msvc 0.52.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
[[package]]
name = "windows_i686_gnu"
-version = "0.36.1"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
[[package]]
name = "windows_i686_msvc"
-version = "0.36.1"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
[[package]]
name = "windows_x86_64_gnu"
-version = "0.36.1"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
[[package]]
name = "windows_x86_64_msvc"
-version = "0.36.1"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+
+[[package]]
+name = "winnow"
+version = "0.5.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876"
+dependencies = [
+ "memchr",
+]
diff --git a/crates/textwrap/Cargo.toml b/crates/textwrap/Cargo.toml
index 20472e4..1493f0a 100644
--- a/crates/textwrap/Cargo.toml
+++ b/crates/textwrap/Cargo.toml
@@ -11,8 +11,9 @@
[package]
edition = "2021"
+rust-version = "1.56"
name = "textwrap"
-version = "0.16.0"
+version = "0.16.1"
authors = ["Martin Geisler <[email protected]>"]
exclude = [
".github/",
diff --git a/crates/textwrap/METADATA b/crates/textwrap/METADATA
index 603f080..67197f4 100644
--- a/crates/textwrap/METADATA
+++ b/crates/textwrap/METADATA
@@ -1,17 +1,17 @@
name: "textwrap"
description: "Library for word wrapping, indenting, and dedenting strings. Has optional support for Unicode and emojis as well as machine hyphenation."
third_party {
- version: "0.16.0"
+ version: "0.16.1"
license_type: NOTICE
last_upgrade_date {
- year: 2022
+ year: 2024
month: 12
- day: 19
+ day: 20
}
homepage: "https://crates.io/crates/textwrap"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/textwrap/textwrap-0.16.0.crate"
- version: "0.16.0"
+ value: "https://static.crates.io/crates/textwrap/textwrap-0.16.1.crate"
+ version: "0.16.1"
}
}
diff --git a/crates/textwrap/README.md b/crates/textwrap/README.md
index cdf4eac..bf13cd0 100644
--- a/crates/textwrap/README.md
+++ b/crates/textwrap/README.md
@@ -165,7 +165,7 @@
[`textwrap-macros` crate]: https://crates.io/crates/textwrap-macros
[`hyphenation` example]: https://github.com/mgeisler/textwrap/blob/master/examples/hyphenation.rs
[`termwidth` example]: https://github.com/mgeisler/textwrap/blob/master/examples/termwidth.rs
-[patterns]: https://github.com/tapeinosyne/hyphenation/tree/master/patterns-tex
+[patterns]: https://github.com/tapeinosyne/hyphenation/tree/master/patterns
[en-us license]: https://github.com/hyphenation/tex-hyphen/blob/master/hyph-utf8/tex/generic/hyph-utf8/patterns/tex/hyph-en-us.tex
[bincode]: https://github.com/tapeinosyne/hyphenation/tree/master/dictionaries
[`hyphenation` documentation]: http://docs.rs/hyphenation
diff --git a/crates/textwrap/src/columns.rs b/crates/textwrap/src/columns.rs
new file mode 100644
index 0000000..d14d558
--- /dev/null
+++ b/crates/textwrap/src/columns.rs
@@ -0,0 +1,193 @@
+//! Functionality for wrapping text into columns.
+
+use crate::core::display_width;
+use crate::{wrap, Options};
+
+/// Wrap text into columns with a given total width.
+///
+/// The `left_gap`, `middle_gap` and `right_gap` arguments specify the
+/// strings to insert before, between, and after the columns. The
+/// total width of all columns and all gaps is specified using the
+/// `total_width_or_options` argument. This argument can simply be an
+/// integer if you want to use default settings when wrapping, or it
+/// can be a [`Options`] value if you want to customize the wrapping.
+///
+/// If the columns are narrow, it is recommended to set
+/// [`Options::break_words`] to `true` to prevent words from
+/// protruding into the margins.
+///
+/// The per-column width is computed like this:
+///
+/// ```
+/// # let (left_gap, middle_gap, right_gap) = ("", "", "");
+/// # let columns = 2;
+/// # let options = textwrap::Options::new(80);
+/// let inner_width = options.width
+/// - textwrap::core::display_width(left_gap)
+/// - textwrap::core::display_width(right_gap)
+/// - textwrap::core::display_width(middle_gap) * (columns - 1);
+/// let column_width = inner_width / columns;
+/// ```
+///
+/// The `text` is wrapped using [`wrap()`] and the given `options`
+/// argument, but the width is overwritten to the computed
+/// `column_width`.
+///
+/// # Panics
+///
+/// Panics if `columns` is zero.
+///
+/// # Examples
+///
+/// ```
+/// use textwrap::wrap_columns;
+///
+/// let text = "\
+/// This is an example text, which is wrapped into three columns. \
+/// Notice how the final column can be shorter than the others.";
+///
+/// #[cfg(feature = "smawk")]
+/// assert_eq!(wrap_columns(text, 3, 50, "| ", " | ", " |"),
+/// vec!["| This is | into three | column can be |",
+/// "| an example | columns. | shorter than |",
+/// "| text, which | Notice how | the others. |",
+/// "| is wrapped | the final | |"]);
+///
+/// // Without the `smawk` feature, the middle column is a little more uneven:
+/// #[cfg(not(feature = "smawk"))]
+/// assert_eq!(wrap_columns(text, 3, 50, "| ", " | ", " |"),
+/// vec!["| This is an | three | column can be |",
+/// "| example text, | columns. | shorter than |",
+/// "| which is | Notice how | the others. |",
+/// "| wrapped into | the final | |"]);
+pub fn wrap_columns<'a, Opt>(
+ text: &str,
+ columns: usize,
+ total_width_or_options: Opt,
+ left_gap: &str,
+ middle_gap: &str,
+ right_gap: &str,
+) -> Vec<String>
+where
+ Opt: Into<Options<'a>>,
+{
+ assert!(columns > 0);
+
+ let mut options: Options = total_width_or_options.into();
+
+ let inner_width = options
+ .width
+ .saturating_sub(display_width(left_gap))
+ .saturating_sub(display_width(right_gap))
+ .saturating_sub(display_width(middle_gap) * (columns - 1));
+
+ let column_width = std::cmp::max(inner_width / columns, 1);
+ options.width = column_width;
+ let last_column_padding = " ".repeat(inner_width % column_width);
+ let wrapped_lines = wrap(text, options);
+ let lines_per_column =
+ wrapped_lines.len() / columns + usize::from(wrapped_lines.len() % columns > 0);
+ let mut lines = Vec::new();
+ for line_no in 0..lines_per_column {
+ let mut line = String::from(left_gap);
+ for column_no in 0..columns {
+ match wrapped_lines.get(line_no + column_no * lines_per_column) {
+ Some(column_line) => {
+ line.push_str(column_line);
+ line.push_str(&" ".repeat(column_width - display_width(column_line)));
+ }
+ None => {
+ line.push_str(&" ".repeat(column_width));
+ }
+ }
+ if column_no == columns - 1 {
+ line.push_str(&last_column_padding);
+ } else {
+ line.push_str(middle_gap);
+ }
+ }
+ line.push_str(right_gap);
+ lines.push(line);
+ }
+
+ lines
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn wrap_columns_empty_text() {
+ assert_eq!(wrap_columns("", 1, 10, "| ", "", " |"), vec!["| |"]);
+ }
+
+ #[test]
+ fn wrap_columns_single_column() {
+ assert_eq!(
+ wrap_columns("Foo", 3, 30, "| ", " | ", " |"),
+ vec!["| Foo | | |"]
+ );
+ }
+
+ #[test]
+ fn wrap_columns_uneven_columns() {
+ // The gaps take up a total of 5 columns, so the columns are
+ // (21 - 5)/4 = 4 columns wide:
+ assert_eq!(
+ wrap_columns("Foo Bar Baz Quux", 4, 21, "|", "|", "|"),
+ vec!["|Foo |Bar |Baz |Quux|"]
+ );
+ // As the total width increases, the last column absorbs the
+ // excess width:
+ assert_eq!(
+ wrap_columns("Foo Bar Baz Quux", 4, 24, "|", "|", "|"),
+ vec!["|Foo |Bar |Baz |Quux |"]
+ );
+ // Finally, when the width is 25, the columns can be resized
+ // to a width of (25 - 5)/4 = 5 columns:
+ assert_eq!(
+ wrap_columns("Foo Bar Baz Quux", 4, 25, "|", "|", "|"),
+ vec!["|Foo |Bar |Baz |Quux |"]
+ );
+ }
+
+ #[test]
+ #[cfg(feature = "unicode-width")]
+ fn wrap_columns_with_emojis() {
+ assert_eq!(
+ wrap_columns(
+ "Words and a few emojis 😍 wrapped in ⓶ columns",
+ 2,
+ 30,
+ "✨ ",
+ " ⚽ ",
+ " 👀"
+ ),
+ vec![
+ "✨ Words ⚽ wrapped in 👀",
+ "✨ and a few ⚽ ⓶ columns 👀",
+ "✨ emojis 😍 ⚽ 👀"
+ ]
+ );
+ }
+
+ #[test]
+ fn wrap_columns_big_gaps() {
+ // The column width shrinks to 1 because the gaps take up all
+ // the space.
+ assert_eq!(
+ wrap_columns("xyz", 2, 10, "----> ", " !!! ", " <----"),
+ vec![
+ "----> x !!! z <----", //
+ "----> y !!! <----"
+ ]
+ );
+ }
+
+ #[test]
+ #[should_panic]
+ fn wrap_columns_panic_with_zero_columns() {
+ wrap_columns("", 0, 10, "", "", "");
+ }
+}
diff --git a/crates/textwrap/src/core.rs b/crates/textwrap/src/core.rs
index 0ab4ef8..6b07f76 100644
--- a/crates/textwrap/src/core.rs
+++ b/crates/textwrap/src/core.rs
@@ -1,8 +1,8 @@
//! Building blocks for advanced wrapping functionality.
//!
//! The functions and structs in this module can be used to implement
-//! advanced wrapping functionality when the [`wrap`](super::wrap) and
-//! [`fill`](super::fill) function don't do what you want.
+//! advanced wrapping functionality when [`wrap()`](crate::wrap())
+//! [`fill()`](crate::fill()) don't do what you want.
//!
//! In general, you want to follow these steps when wrapping
//! something:
@@ -41,22 +41,45 @@
/// The final bytes of an ANSI escape sequence must be in this range.
const ANSI_FINAL_BYTE: std::ops::RangeInclusive<char> = '\x40'..='\x7e';
-/// Skip ANSI escape sequences. The `ch` is the current `char`, the
-/// `chars` provide the following characters. The `chars` will be
-/// modified if `ch` is the start of an ANSI escape sequence.
+/// Skip ANSI escape sequences.
+///
+/// The `ch` is the current `char`, the `chars` provide the following
+/// characters. The `chars` will be modified if `ch` is the start of
+/// an ANSI escape sequence.
+///
+/// Returns `true` if one or more chars were skipped.
#[inline]
pub(crate) fn skip_ansi_escape_sequence<I: Iterator<Item = char>>(ch: char, chars: &mut I) -> bool {
- if ch == CSI.0 && chars.next() == Some(CSI.1) {
+ if ch != CSI.0 {
+ return false; // Nothing to skip here.
+ }
+
+ let next = chars.next();
+ if next == Some(CSI.1) {
// We have found the start of an ANSI escape code, typically
// used for colored terminal text. We skip until we find a
// "final byte" in the range 0x40–0x7E.
for ch in chars {
if ANSI_FINAL_BYTE.contains(&ch) {
- return true;
+ break;
}
}
+ } else if next == Some(']') {
+ // We have found the start of an Operating System Command,
+ // which extends until the next sequence "\x1b\\" (the String
+ // Terminator sequence) or the BEL character. The BEL
+ // character is non-standard, but it is still used quite
+ // often, for example, by GNU ls.
+ let mut last = ']';
+ for new in chars {
+ if new == '\x07' || (new == '\\' && last == CSI.0) {
+ break;
+ }
+ last = new;
+ }
}
- false
+
+ true // Indicate that some chars were skipped.
}
#[cfg(feature = "unicode-width")]
@@ -90,6 +113,7 @@
///
/// assert_eq!(display_width("Café Plain"), 10);
/// assert_eq!(display_width("\u{1b}[31mCafé Rouge\u{1b}[0m"), 10);
+/// assert_eq!(display_width("\x1b]8;;http://example.com\x1b\\This is a link\x1b]8;;\x1b\\"), 14);
/// ```
///
/// **Note:** When the `unicode-width` Cargo feature is disabled, the
@@ -117,7 +141,7 @@
/// ## Emojis and CJK Characters
///
/// Characters such as emojis and [CJK characters] used in the
-/// Chinese, Japanese, and Korean langauges are seen as double-width,
+/// Chinese, Japanese, and Korean languages are seen as double-width,
/// even if the `unicode-width` feature is disabled:
///
/// ```
@@ -404,6 +428,10 @@
assert_eq!("Café Plain".len(), 11); // “é” is two bytes
assert_eq!(display_width("Café Plain"), 10);
assert_eq!(display_width("\u{1b}[31mCafé Rouge\u{1b}[0m"), 10);
+ assert_eq!(
+ display_width("\x1b]8;;http://example.com\x1b\\This is a link\x1b]8;;\x1b\\"),
+ 14
+ );
}
#[test]
diff --git a/crates/textwrap/src/fill.rs b/crates/textwrap/src/fill.rs
new file mode 100644
index 0000000..fbcaab9
--- /dev/null
+++ b/crates/textwrap/src/fill.rs
@@ -0,0 +1,298 @@
+//! Functions for filling text.
+
+use crate::{wrap, wrap_algorithms, Options, WordSeparator};
+
+/// Fill a line of text at a given width.
+///
+/// The result is a [`String`], complete with newlines between each
+/// line. Use [`wrap()`] if you need access to the individual lines.
+///
+/// The easiest way to use this function is to pass an integer for
+/// `width_or_options`:
+///
+/// ```
+/// use textwrap::fill;
+///
+/// assert_eq!(
+/// fill("Memory safety without garbage collection.", 15),
+/// "Memory safety\nwithout garbage\ncollection."
+/// );
+/// ```
+///
+/// If you need to customize the wrapping, you can pass an [`Options`]
+/// instead of an `usize`:
+///
+/// ```
+/// use textwrap::{fill, Options};
+///
+/// let options = Options::new(15)
+/// .initial_indent("- ")
+/// .subsequent_indent(" ");
+/// assert_eq!(
+/// fill("Memory safety without garbage collection.", &options),
+/// "- Memory safety\n without\n garbage\n collection."
+/// );
+/// ```
+pub fn fill<'a, Opt>(text: &str, width_or_options: Opt) -> String
+where
+ Opt: Into<Options<'a>>,
+{
+ let options = width_or_options.into();
+
+ if text.len() < options.width && !text.contains('\n') && options.initial_indent.is_empty() {
+ String::from(text.trim_end_matches(' '))
+ } else {
+ fill_slow_path(text, options)
+ }
+}
+
+/// Slow path for fill.
+///
+/// This is taken when `text` is longer than `options.width`.
+pub(crate) fn fill_slow_path(text: &str, options: Options<'_>) -> String {
+ // This will avoid reallocation in simple cases (no
+ // indentation, no hyphenation).
+ let mut result = String::with_capacity(text.len());
+
+ let line_ending_str = options.line_ending.as_str();
+ for (i, line) in wrap(text, options).iter().enumerate() {
+ if i > 0 {
+ result.push_str(line_ending_str);
+ }
+ result.push_str(line);
+ }
+
+ result
+}
+
+/// Fill `text` in-place without reallocating the input string.
+///
+/// This function works by modifying the input string: some `' '`
+/// characters will be replaced by `'\n'` characters. The rest of the
+/// text remains untouched.
+///
+/// Since we can only replace existing whitespace in the input with
+/// `'\n'` (there is no space for `"\r\n"`), we cannot do hyphenation
+/// nor can we split words longer than the line width. We also need to
+/// use `AsciiSpace` as the word separator since we need `' '`
+/// characters between words in order to replace some of them with a
+/// `'\n'`. Indentation is also ruled out. In other words,
+/// `fill_inplace(width)` behaves as if you had called [`fill()`] with
+/// these options:
+///
+/// ```
+/// # use textwrap::{core, LineEnding, Options, WordSplitter, WordSeparator, WrapAlgorithm};
+/// # let width = 80;
+/// Options::new(width)
+/// .break_words(false)
+/// .line_ending(LineEnding::LF)
+/// .word_separator(WordSeparator::AsciiSpace)
+/// .wrap_algorithm(WrapAlgorithm::FirstFit)
+/// .word_splitter(WordSplitter::NoHyphenation);
+/// ```
+///
+/// The wrap algorithm is
+/// [`WrapAlgorithm::FirstFit`](crate::WrapAlgorithm::FirstFit) since
+/// this is the fastest algorithm — and the main reason to use
+/// `fill_inplace` is to get the string broken into newlines as fast
+/// as possible.
+///
+/// A last difference is that (unlike [`fill()`]) `fill_inplace` can
+/// leave trailing whitespace on lines. This is because we wrap by
+/// inserting a `'\n'` at the final whitespace in the input string:
+///
+/// ```
+/// let mut text = String::from("Hello World!");
+/// textwrap::fill_inplace(&mut text, 10);
+/// assert_eq!(text, "Hello \nWorld!");
+/// ```
+///
+/// If we didn't do this, the word `World!` would end up being
+/// indented. You can avoid this if you make sure that your input text
+/// has no double spaces.
+///
+/// # Performance
+///
+/// In benchmarks, `fill_inplace` is about twice as fast as
+/// [`fill()`]. Please see the [`linear`
+/// benchmark](https://github.com/mgeisler/textwrap/blob/master/benchmarks/linear.rs)
+/// for details.
+pub fn fill_inplace(text: &mut String, width: usize) {
+ let mut indices = Vec::new();
+
+ let mut offset = 0;
+ for line in text.split('\n') {
+ let words = WordSeparator::AsciiSpace
+ .find_words(line)
+ .collect::<Vec<_>>();
+ let wrapped_words = wrap_algorithms::wrap_first_fit(&words, &[width as f64]);
+
+ let mut line_offset = offset;
+ for words in &wrapped_words[..wrapped_words.len() - 1] {
+ let line_len = words
+ .iter()
+ .map(|word| word.len() + word.whitespace.len())
+ .sum::<usize>();
+
+ line_offset += line_len;
+ // We've advanced past all ' ' characters -- want to move
+ // one ' ' backwards and insert our '\n' there.
+ indices.push(line_offset - 1);
+ }
+
+ // Advance past entire line, plus the '\n' which was removed
+ // by the split call above.
+ offset += line.len() + 1;
+ }
+
+ let mut bytes = std::mem::take(text).into_bytes();
+ for idx in indices {
+ bytes[idx] = b'\n';
+ }
+ *text = String::from_utf8(bytes).unwrap();
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::WrapAlgorithm;
+
+ #[test]
+ fn fill_simple() {
+ assert_eq!(fill("foo bar baz", 10), "foo bar\nbaz");
+ }
+
+ #[test]
+ fn fill_unicode_boundary() {
+ // https://github.com/mgeisler/textwrap/issues/390
+ fill("\u{1b}!Ͽ", 10);
+ }
+
+ #[test]
+ fn non_breaking_space() {
+ let options = Options::new(5).break_words(false);
+ assert_eq!(fill("foo bar baz", &options), "foo bar baz");
+ }
+
+ #[test]
+ fn non_breaking_hyphen() {
+ let options = Options::new(5).break_words(false);
+ assert_eq!(fill("foo‑bar‑baz", &options), "foo‑bar‑baz");
+ }
+
+ #[test]
+ fn fill_preserves_line_breaks_trims_whitespace() {
+ assert_eq!(fill(" ", 80), "");
+ assert_eq!(fill(" \n ", 80), "\n");
+ assert_eq!(fill(" \n \n \n ", 80), "\n\n\n");
+ }
+
+ #[test]
+ fn preserve_line_breaks() {
+ assert_eq!(fill("", 80), "");
+ assert_eq!(fill("\n", 80), "\n");
+ assert_eq!(fill("\n\n\n", 80), "\n\n\n");
+ assert_eq!(fill("test\n", 80), "test\n");
+ assert_eq!(fill("test\n\na\n\n", 80), "test\n\na\n\n");
+ assert_eq!(
+ fill(
+ "1 3 5 7\n1 3 5 7",
+ Options::new(7).wrap_algorithm(WrapAlgorithm::FirstFit)
+ ),
+ "1 3 5 7\n1 3 5 7"
+ );
+ assert_eq!(
+ fill(
+ "1 3 5 7\n1 3 5 7",
+ Options::new(5).wrap_algorithm(WrapAlgorithm::FirstFit)
+ ),
+ "1 3 5\n7\n1 3 5\n7"
+ );
+ }
+
+ #[test]
+ fn break_words_line_breaks() {
+ assert_eq!(fill("ab\ncdefghijkl", 5), "ab\ncdefg\nhijkl");
+ assert_eq!(fill("abcdefgh\nijkl", 5), "abcde\nfgh\nijkl");
+ }
+
+ #[test]
+ fn break_words_empty_lines() {
+ assert_eq!(
+ fill("foo\nbar", &Options::new(2).break_words(false)),
+ "foo\nbar"
+ );
+ }
+
+ #[test]
+ fn fill_inplace_empty() {
+ let mut text = String::from("");
+ fill_inplace(&mut text, 80);
+ assert_eq!(text, "");
+ }
+
+ #[test]
+ fn fill_inplace_simple() {
+ let mut text = String::from("foo bar baz");
+ fill_inplace(&mut text, 10);
+ assert_eq!(text, "foo bar\nbaz");
+ }
+
+ #[test]
+ fn fill_inplace_multiple_lines() {
+ let mut text = String::from("Some text to wrap over multiple lines");
+ fill_inplace(&mut text, 12);
+ assert_eq!(text, "Some text to\nwrap over\nmultiple\nlines");
+ }
+
+ #[test]
+ fn fill_inplace_long_word() {
+ let mut text = String::from("Internationalization is hard");
+ fill_inplace(&mut text, 10);
+ assert_eq!(text, "Internationalization\nis hard");
+ }
+
+ #[test]
+ fn fill_inplace_no_hyphen_splitting() {
+ let mut text = String::from("A well-chosen example");
+ fill_inplace(&mut text, 10);
+ assert_eq!(text, "A\nwell-chosen\nexample");
+ }
+
+ #[test]
+ fn fill_inplace_newlines() {
+ let mut text = String::from("foo bar\n\nbaz\n\n\n");
+ fill_inplace(&mut text, 10);
+ assert_eq!(text, "foo bar\n\nbaz\n\n\n");
+ }
+
+ #[test]
+ fn fill_inplace_newlines_reset_line_width() {
+ let mut text = String::from("1 3 5\n1 3 5 7 9\n1 3 5 7 9 1 3");
+ fill_inplace(&mut text, 10);
+ assert_eq!(text, "1 3 5\n1 3 5 7 9\n1 3 5 7 9\n1 3");
+ }
+
+ #[test]
+ fn fill_inplace_leading_whitespace() {
+ let mut text = String::from(" foo bar baz");
+ fill_inplace(&mut text, 10);
+ assert_eq!(text, " foo bar\nbaz");
+ }
+
+ #[test]
+ fn fill_inplace_trailing_whitespace() {
+ let mut text = String::from("foo bar baz ");
+ fill_inplace(&mut text, 10);
+ assert_eq!(text, "foo bar\nbaz ");
+ }
+
+ #[test]
+ fn fill_inplace_interior_whitespace() {
+ // To avoid an unwanted indentation of "baz", it is important
+ // to replace the final ' ' with '\n'.
+ let mut text = String::from("foo bar baz");
+ fill_inplace(&mut text, 10);
+ assert_eq!(text, "foo bar \nbaz");
+ }
+}
diff --git a/crates/textwrap/src/fuzzing.rs b/crates/textwrap/src/fuzzing.rs
index 24d59fd..b7ad481 100644
--- a/crates/textwrap/src/fuzzing.rs
+++ b/crates/textwrap/src/fuzzing.rs
@@ -5,12 +5,12 @@
/// Exposed for fuzzing so we can check the slow path is correct.
pub fn fill_slow_path<'a>(text: &str, options: Options<'_>) -> String {
- super::fill_slow_path(text, options)
+ crate::fill::fill_slow_path(text, options)
}
/// Exposed for fuzzing so we can check the slow path is correct.
pub fn wrap_single_line<'a>(line: &'a str, options: &Options<'_>, lines: &mut Vec<Cow<'a, str>>) {
- super::wrap_single_line(line, options, lines);
+ crate::wrap::wrap_single_line(line, options, lines);
}
/// Exposed for fuzzing so we can check the slow path is correct.
@@ -19,5 +19,5 @@
options: &Options<'_>,
lines: &mut Vec<Cow<'a, str>>,
) {
- super::wrap_single_line_slow_path(line, options, lines)
+ crate::wrap::wrap_single_line_slow_path(line, options, lines)
}
diff --git a/crates/textwrap/src/lib.rs b/crates/textwrap/src/lib.rs
index ed346a2..32611c0 100644
--- a/crates/textwrap/src/lib.rs
+++ b/crates/textwrap/src/lib.rs
@@ -17,8 +17,9 @@
//! # }
//! ```
//!
-//! The [`wrap`] function returns the individual lines, use [`fill`]
-//! is you want the lines joined with `'\n'` to form a `String`.
+//! The [`wrap()`] function returns the individual lines, use
+//! [`fill()`] is you want the lines joined with `'\n'` to form a
+//! `String`.
//!
//! If you enable the `hyphenation` Cargo feature, you can get
//! automatic hyphenation for a number of languages:
@@ -38,8 +39,8 @@
//! }
//! ```
//!
-//! See also the [`unfill`] and [`refill`] functions which allow you to
-//! manipulate already wrapped text.
+//! See also the [`unfill()`] and [`refill()`] functions which allow
+//! you to manipulate already wrapped text.
//!
//! ## Wrapping Strings at Compile Time
//!
@@ -70,8 +71,8 @@
//!
//! The textwrap library also offers functions for adding a prefix to
//! every line of a string and to remove leading whitespace. As an
-//! example, the [`indent`] function allows you to turn lines of text
-//! into a bullet list:
+//! example, [`indent()`] allows you to turn lines of text into a
+//! bullet list:
//!
//! ```
//! let before = "\
@@ -87,7 +88,7 @@
//! assert_eq!(textwrap::indent(before, "* "), after);
//! ```
//!
-//! Removing leading whitespace is done with [`dedent`]:
+//! Removing leading whitespace is done with [`dedent()`]:
//!
//! ```
//! let before = "
@@ -112,7 +113,7 @@
//! The full dependency graph, where dashed lines indicate optional
//! dependencies, is shown below:
//!
-//! <img src="https://raw.githubusercontent.com/mgeisler/textwrap/master/images/textwrap-0.16.0.svg">
+//! <img src="https://raw.githubusercontent.com/mgeisler/textwrap/master/images/textwrap-0.16.1.svg">
//!
//! ## Default Features
//!
@@ -131,8 +132,7 @@
//! * `unicode-width`: enables correct width computation of non-ASCII
//! characters via the [unicode-width] crate. Without this feature,
//! every [`char`] is 1 column wide, except for emojis which are 2
-//! columns wide. See the [`core::display_width`] function for
-//! details.
+//! columns wide. See [`core::display_width()`] for details.
//!
//! This feature can be disabled if you only need to wrap ASCII
//! text, or if the functions in [`core`] are used directly with
@@ -140,11 +140,11 @@
//! other ways.
//!
//! * `smawk`: enables linear-time wrapping of the whole paragraph via
-//! the [smawk] crate. See the [`wrap_algorithms::wrap_optimal_fit`]
-//! function for details on the optimal-fit algorithm.
+//! the [smawk] crate. See [`wrap_algorithms::wrap_optimal_fit()`]
+//! for details on the optimal-fit algorithm.
//!
//! This feature can be disabled if you only ever intend to use
-//! [`wrap_algorithms::wrap_first_fit`].
+//! [`wrap_algorithms::wrap_first_fit()`].
//!
//! <!-- begin binary-sizes -->
//!
@@ -178,8 +178,8 @@
//! These Cargo features enable new functionality:
//!
//! * `terminal_size`: enables automatic detection of the terminal
-//! width via the [terminal_size] crate. See the
-//! [`Options::with_termwidth`] constructor for details.
+//! width via the [terminal_size] crate. See
+//! [`Options::with_termwidth()`] for details.
//!
//! * `hyphenation`: enables language-sensitive hyphenation via the
//! [hyphenation] crate. See the [`word_splitters::WordSplitter`]
@@ -193,7 +193,7 @@
//! [terminal_size]: https://docs.rs/terminal_size/
//! [hyphenation]: https://docs.rs/hyphenation/
-#![doc(html_root_url = "https://docs.rs/textwrap/0.16.0")]
+#![doc(html_root_url = "https://docs.rs/textwrap/0.16.1")]
#![forbid(unsafe_code)] // See https://github.com/mgeisler/textwrap/issues/210
#![deny(missing_docs)]
#![deny(missing_debug_implementations)]
@@ -204,1855 +204,32 @@
#[doc = include_str!("../README.md")]
mod readme_doctest {}
-use std::borrow::Cow;
-
-mod indentation;
-pub use crate::indentation::{dedent, indent};
-
-mod word_separators;
-pub use word_separators::WordSeparator;
-
-pub mod word_splitters;
-pub use word_splitters::WordSplitter;
-
-pub mod wrap_algorithms;
-pub use wrap_algorithms::WrapAlgorithm;
-
-mod line_ending;
-pub use line_ending::LineEnding;
-
pub mod core;
-
-// This module is only active when running fuzz tests. It provides
-// access to private helpers.
#[cfg(fuzzing)]
pub mod fuzzing;
+pub mod word_splitters;
+pub mod wrap_algorithms;
-/// Holds configuration options for wrapping and filling text.
-#[non_exhaustive]
-#[derive(Debug, Clone)]
-pub struct Options<'a> {
- /// The width in columns at which the text will be wrapped.
- pub width: usize,
- /// Line ending used for breaking lines.
- pub line_ending: LineEnding,
- /// Indentation used for the first line of output. See the
- /// [`Options::initial_indent`] method.
- pub initial_indent: &'a str,
- /// Indentation used for subsequent lines of output. See the
- /// [`Options::subsequent_indent`] method.
- pub subsequent_indent: &'a str,
- /// Allow long words to be broken if they cannot fit on a line.
- /// When set to `false`, some lines may be longer than
- /// `self.width`. See the [`Options::break_words`] method.
- pub break_words: bool,
- /// Wrapping algorithm to use, see the implementations of the
- /// [`wrap_algorithms::WrapAlgorithm`] trait for details.
- pub wrap_algorithm: WrapAlgorithm,
- /// The line breaking algorithm to use, see
- /// [`word_separators::WordSeparator`] trait for an overview and
- /// possible implementations.
- pub word_separator: WordSeparator,
- /// The method for splitting words. This can be used to prohibit
- /// splitting words on hyphens, or it can be used to implement
- /// language-aware machine hyphenation.
- pub word_splitter: WordSplitter,
-}
-
-impl<'a> From<&'a Options<'a>> for Options<'a> {
- fn from(options: &'a Options<'a>) -> Self {
- Self {
- width: options.width,
- line_ending: options.line_ending,
- initial_indent: options.initial_indent,
- subsequent_indent: options.subsequent_indent,
- break_words: options.break_words,
- word_separator: options.word_separator,
- wrap_algorithm: options.wrap_algorithm,
- word_splitter: options.word_splitter.clone(),
- }
- }
-}
-
-impl<'a> From<usize> for Options<'a> {
- fn from(width: usize) -> Self {
- Options::new(width)
- }
-}
-
-impl<'a> Options<'a> {
- /// Creates a new [`Options`] with the specified width.
- ///
- /// The other fields are given default values as follows:
- ///
- /// ```
- /// # use textwrap::{LineEnding, Options, WordSplitter, WordSeparator, WrapAlgorithm};
- /// # let width = 80;
- /// let options = Options::new(width);
- /// assert_eq!(options.line_ending, LineEnding::LF);
- /// assert_eq!(options.initial_indent, "");
- /// assert_eq!(options.subsequent_indent, "");
- /// assert_eq!(options.break_words, true);
- ///
- /// #[cfg(feature = "unicode-linebreak")]
- /// assert_eq!(options.word_separator, WordSeparator::UnicodeBreakProperties);
- /// #[cfg(not(feature = "unicode-linebreak"))]
- /// assert_eq!(options.word_separator, WordSeparator::AsciiSpace);
- ///
- /// #[cfg(feature = "smawk")]
- /// assert_eq!(options.wrap_algorithm, WrapAlgorithm::new_optimal_fit());
- /// #[cfg(not(feature = "smawk"))]
- /// assert_eq!(options.wrap_algorithm, WrapAlgorithm::FirstFit);
- ///
- /// assert_eq!(options.word_splitter, WordSplitter::HyphenSplitter);
- /// ```
- ///
- /// Note that the default word separator and wrap algorithms
- /// changes based on the available Cargo features. The best
- /// available algorithms are used by default.
- pub const fn new(width: usize) -> Self {
- Options {
- width,
- line_ending: LineEnding::LF,
- initial_indent: "",
- subsequent_indent: "",
- break_words: true,
- word_separator: WordSeparator::new(),
- wrap_algorithm: WrapAlgorithm::new(),
- word_splitter: WordSplitter::HyphenSplitter,
- }
- }
-
- /// Creates a new [`Options`] with `width` set to the current
- /// terminal width. If the terminal width cannot be determined
- /// (typically because the standard input and output is not
- /// connected to a terminal), a width of 80 characters will be
- /// used. Other settings use the same defaults as
- /// [`Options::new`].
- ///
- /// Equivalent to:
- ///
- /// ```no_run
- /// use textwrap::{termwidth, Options};
- ///
- /// let options = Options::new(termwidth());
- /// ```
- ///
- /// **Note:** Only available when the `terminal_size` feature is
- /// enabled.
- #[cfg(feature = "terminal_size")]
- pub fn with_termwidth() -> Self {
- Self::new(termwidth())
- }
-
- /// Change [`self.line_ending`]. This specifies which of the
- /// supported line endings should be used to break the lines of the
- /// input text.
- ///
- /// # Examples
- ///
- /// ```
- /// use textwrap::{refill, LineEnding, Options};
- ///
- /// let options = Options::new(15).line_ending(LineEnding::CRLF);
- /// assert_eq!(refill("This is a little example.", options),
- /// "This is a\r\nlittle example.");
- /// ```
- ///
- /// [`self.line_ending`]: #structfield.line_ending
- pub fn line_ending(self, line_ending: LineEnding) -> Self {
- Options {
- line_ending,
- ..self
- }
- }
-
- /// Change [`self.initial_indent`]. The initial indentation is
- /// used on the very first line of output.
- ///
- /// # Examples
- ///
- /// Classic paragraph indentation can be achieved by specifying an
- /// initial indentation and wrapping each paragraph by itself:
- ///
- /// ```
- /// use textwrap::{wrap, Options};
- ///
- /// let options = Options::new(16).initial_indent(" ");
- /// assert_eq!(wrap("This is a little example.", options),
- /// vec![" This is a",
- /// "little example."]);
- /// ```
- ///
- /// [`self.initial_indent`]: #structfield.initial_indent
- pub fn initial_indent(self, indent: &'a str) -> Self {
- Options {
- initial_indent: indent,
- ..self
- }
- }
-
- /// Change [`self.subsequent_indent`]. The subsequent indentation
- /// is used on lines following the first line of output.
- ///
- /// # Examples
- ///
- /// Combining initial and subsequent indentation lets you format a
- /// single paragraph as a bullet list:
- ///
- /// ```
- /// use textwrap::{wrap, Options};
- ///
- /// let options = Options::new(12)
- /// .initial_indent("* ")
- /// .subsequent_indent(" ");
- /// #[cfg(feature = "smawk")]
- /// assert_eq!(wrap("This is a little example.", options),
- /// vec!["* This is",
- /// " a little",
- /// " example."]);
- ///
- /// // Without the `smawk` feature, the wrapping is a little different:
- /// #[cfg(not(feature = "smawk"))]
- /// assert_eq!(wrap("This is a little example.", options),
- /// vec!["* This is a",
- /// " little",
- /// " example."]);
- /// ```
- ///
- /// [`self.subsequent_indent`]: #structfield.subsequent_indent
- pub fn subsequent_indent(self, indent: &'a str) -> Self {
- Options {
- subsequent_indent: indent,
- ..self
- }
- }
-
- /// Change [`self.break_words`]. This controls if words longer
- /// than `self.width` can be broken, or if they will be left
- /// sticking out into the right margin.
- ///
- /// See [`Options::word_splitter`] instead if you want to control
- /// hyphenation.
- ///
- /// # Examples
- ///
- /// ```
- /// use textwrap::{wrap, Options};
- ///
- /// let options = Options::new(4).break_words(true);
- /// assert_eq!(wrap("This is a little example.", options),
- /// vec!["This",
- /// "is a",
- /// "litt",
- /// "le",
- /// "exam",
- /// "ple."]);
- /// ```
- ///
- /// [`self.break_words`]: #structfield.break_words
- pub fn break_words(self, setting: bool) -> Self {
- Options {
- break_words: setting,
- ..self
- }
- }
-
- /// Change [`self.word_separator`].
- ///
- /// See [`word_separators::WordSeparator`] for details on the choices.
- ///
- /// [`self.word_separator`]: #structfield.word_separator
- pub fn word_separator(self, word_separator: WordSeparator) -> Options<'a> {
- Options {
- width: self.width,
- line_ending: self.line_ending,
- initial_indent: self.initial_indent,
- subsequent_indent: self.subsequent_indent,
- break_words: self.break_words,
- word_separator: word_separator,
- wrap_algorithm: self.wrap_algorithm,
- word_splitter: self.word_splitter,
- }
- }
-
- /// Change [`self.wrap_algorithm`].
- ///
- /// See the [`wrap_algorithms::WrapAlgorithm`] trait for details on
- /// the choices.
- ///
- /// [`self.wrap_algorithm`]: #structfield.wrap_algorithm
- pub fn wrap_algorithm(self, wrap_algorithm: WrapAlgorithm) -> Options<'a> {
- Options {
- width: self.width,
- line_ending: self.line_ending,
- initial_indent: self.initial_indent,
- subsequent_indent: self.subsequent_indent,
- break_words: self.break_words,
- word_separator: self.word_separator,
- wrap_algorithm: wrap_algorithm,
- word_splitter: self.word_splitter,
- }
- }
-
- /// Change [`self.word_splitter`]. The
- /// [`word_splitters::WordSplitter`] is used to fit part of a word
- /// into the current line when wrapping text.
- ///
- /// See [`Options::break_words`] instead if you want to control the
- /// handling of words longer than the line width.
- ///
- /// # Examples
- ///
- /// ```
- /// use textwrap::{wrap, Options, WordSplitter};
- ///
- /// // The default is WordSplitter::HyphenSplitter.
- /// let options = Options::new(5);
- /// assert_eq!(wrap("foo-bar-baz", &options),
- /// vec!["foo-", "bar-", "baz"]);
- ///
- /// // The word is now so long that break_words kick in:
- /// let options = Options::new(5)
- /// .word_splitter(WordSplitter::NoHyphenation);
- /// assert_eq!(wrap("foo-bar-baz", &options),
- /// vec!["foo-b", "ar-ba", "z"]);
- ///
- /// // If you want to breaks at all, disable both:
- /// let options = Options::new(5)
- /// .break_words(false)
- /// .word_splitter(WordSplitter::NoHyphenation);
- /// assert_eq!(wrap("foo-bar-baz", &options),
- /// vec!["foo-bar-baz"]);
- /// ```
- ///
- /// [`self.word_splitter`]: #structfield.word_splitter
- pub fn word_splitter(self, word_splitter: WordSplitter) -> Options<'a> {
- Options {
- width: self.width,
- line_ending: self.line_ending,
- initial_indent: self.initial_indent,
- subsequent_indent: self.subsequent_indent,
- break_words: self.break_words,
- word_separator: self.word_separator,
- wrap_algorithm: self.wrap_algorithm,
- word_splitter,
- }
- }
-}
-
-/// Return the current terminal width.
-///
-/// If the terminal width cannot be determined (typically because the
-/// standard output is not connected to a terminal), a default width
-/// of 80 characters will be used.
-///
-/// # Examples
-///
-/// Create an [`Options`] for wrapping at the current terminal width
-/// with a two column margin to the left and the right:
-///
-/// ```no_run
-/// use textwrap::{termwidth, Options};
-///
-/// let width = termwidth() - 4; // Two columns on each side.
-/// let options = Options::new(width)
-/// .initial_indent(" ")
-/// .subsequent_indent(" ");
-/// ```
-///
-/// **Note:** Only available when the `terminal_size` Cargo feature is
-/// enabled.
+mod columns;
+mod fill;
+mod indentation;
+mod line_ending;
+mod options;
+mod refill;
#[cfg(feature = "terminal_size")]
-pub fn termwidth() -> usize {
- terminal_size::terminal_size().map_or(80, |(terminal_size::Width(w), _)| w.into())
-}
+mod termwidth;
+mod word_separators;
+mod wrap;
-/// Fill a line of text at a given width.
-///
-/// The result is a [`String`], complete with newlines between each
-/// line. Use the [`wrap`] function if you need access to the
-/// individual lines.
-///
-/// The easiest way to use this function is to pass an integer for
-/// `width_or_options`:
-///
-/// ```
-/// use textwrap::fill;
-///
-/// assert_eq!(
-/// fill("Memory safety without garbage collection.", 15),
-/// "Memory safety\nwithout garbage\ncollection."
-/// );
-/// ```
-///
-/// If you need to customize the wrapping, you can pass an [`Options`]
-/// instead of an `usize`:
-///
-/// ```
-/// use textwrap::{fill, Options};
-///
-/// let options = Options::new(15)
-/// .initial_indent("- ")
-/// .subsequent_indent(" ");
-/// assert_eq!(
-/// fill("Memory safety without garbage collection.", &options),
-/// "- Memory safety\n without\n garbage\n collection."
-/// );
-/// ```
-pub fn fill<'a, Opt>(text: &str, width_or_options: Opt) -> String
-where
- Opt: Into<Options<'a>>,
-{
- let options = width_or_options.into();
-
- if text.len() < options.width && !text.contains('\n') && options.initial_indent.is_empty() {
- String::from(text.trim_end_matches(' '))
- } else {
- fill_slow_path(text, options)
- }
-}
-
-/// Slow path for fill.
-///
-/// This is taken when `text` is longer than `options.width`.
-fn fill_slow_path(text: &str, options: Options<'_>) -> String {
- // This will avoid reallocation in simple cases (no
- // indentation, no hyphenation).
- let mut result = String::with_capacity(text.len());
-
- let line_ending_str = options.line_ending.as_str();
- for (i, line) in wrap(text, options).iter().enumerate() {
- if i > 0 {
- result.push_str(line_ending_str);
- }
- result.push_str(line);
- }
-
- result
-}
-
-/// Unpack a paragraph of already-wrapped text.
-///
-/// This function attempts to recover the original text from a single
-/// paragraph of text produced by the [`fill`] function. This means
-/// that it turns
-///
-/// ```text
-/// textwrap: a small
-/// library for
-/// wrapping text.
-/// ```
-///
-/// back into
-///
-/// ```text
-/// textwrap: a small library for wrapping text.
-/// ```
-///
-/// In addition, it will recognize a common prefix and a common line
-/// ending among the lines.
-///
-/// The prefix of the first line is returned in
-/// [`Options::initial_indent`] and the prefix (if any) of the the
-/// other lines is returned in [`Options::subsequent_indent`].
-///
-/// Line ending is returned in [`Options::line_ending`]. If line ending
-/// can not be confidently detected (mixed or no line endings in the
-/// input), [`LineEnding::LF`] will be returned.
-///
-/// In addition to `' '`, the prefixes can consist of characters used
-/// for unordered lists (`'-'`, `'+'`, and `'*'`) and block quotes
-/// (`'>'`) in Markdown as well as characters often used for inline
-/// comments (`'#'` and `'/'`).
-///
-/// The text must come from a single wrapped paragraph. This means
-/// that there can be no empty lines (`"\n\n"` or `"\r\n\r\n"`) within
-/// the text. It is unspecified what happens if `unfill` is called on
-/// more than one paragraph of text.
-///
-/// # Examples
-///
-/// ```
-/// use textwrap::{LineEnding, unfill};
-///
-/// let (text, options) = unfill("\
-/// * This is an
-/// example of
-/// a list item.
-/// ");
-///
-/// assert_eq!(text, "This is an example of a list item.\n");
-/// assert_eq!(options.initial_indent, "* ");
-/// assert_eq!(options.subsequent_indent, " ");
-/// assert_eq!(options.line_ending, LineEnding::LF);
-/// ```
-pub fn unfill(text: &str) -> (String, Options<'_>) {
- let prefix_chars: &[_] = &[' ', '-', '+', '*', '>', '#', '/'];
-
- let mut options = Options::new(0);
- for (idx, line) in text.lines().enumerate() {
- options.width = std::cmp::max(options.width, core::display_width(line));
- let without_prefix = line.trim_start_matches(prefix_chars);
- let prefix = &line[..line.len() - without_prefix.len()];
-
- if idx == 0 {
- options.initial_indent = prefix;
- } else if idx == 1 {
- options.subsequent_indent = prefix;
- } else if idx > 1 {
- for ((idx, x), y) in prefix.char_indices().zip(options.subsequent_indent.chars()) {
- if x != y {
- options.subsequent_indent = &prefix[..idx];
- break;
- }
- }
- if prefix.len() < options.subsequent_indent.len() {
- options.subsequent_indent = prefix;
- }
- }
- }
-
- let mut unfilled = String::with_capacity(text.len());
- let mut detected_line_ending = None;
-
- for (idx, (line, ending)) in line_ending::NonEmptyLines(text).enumerate() {
- if idx == 0 {
- unfilled.push_str(&line[options.initial_indent.len()..]);
- } else {
- unfilled.push(' ');
- unfilled.push_str(&line[options.subsequent_indent.len()..]);
- }
- match (detected_line_ending, ending) {
- (None, Some(_)) => detected_line_ending = ending,
- (Some(LineEnding::CRLF), Some(LineEnding::LF)) => detected_line_ending = ending,
- _ => (),
- }
- }
-
- // Add back a line ending if `text` ends with the one we detect.
- if let Some(line_ending) = detected_line_ending {
- if text.ends_with(line_ending.as_str()) {
- unfilled.push_str(line_ending.as_str());
- }
- }
-
- options.line_ending = detected_line_ending.unwrap_or(LineEnding::LF);
- (unfilled, options)
-}
-
-/// Refill a paragraph of wrapped text with a new width.
-///
-/// This function will first use the [`unfill`] function to remove
-/// newlines from the text. Afterwards the text is filled again using
-/// the [`fill`] function.
-///
-/// The `new_width_or_options` argument specify the new width and can
-/// specify other options as well — except for
-/// [`Options::initial_indent`] and [`Options::subsequent_indent`],
-/// which are deduced from `filled_text`.
-///
-/// # Examples
-///
-/// ```
-/// use textwrap::refill;
-///
-/// // Some loosely wrapped text. The "> " prefix is recognized automatically.
-/// let text = "\
-/// > Memory
-/// > safety without garbage
-/// > collection.
-/// ";
-///
-/// assert_eq!(refill(text, 20), "\
-/// > Memory safety
-/// > without garbage
-/// > collection.
-/// ");
-///
-/// assert_eq!(refill(text, 40), "\
-/// > Memory safety without garbage
-/// > collection.
-/// ");
-///
-/// assert_eq!(refill(text, 60), "\
-/// > Memory safety without garbage collection.
-/// ");
-/// ```
-///
-/// You can also reshape bullet points:
-///
-/// ```
-/// use textwrap::refill;
-///
-/// let text = "\
-/// - This is my
-/// list item.
-/// ";
-///
-/// assert_eq!(refill(text, 20), "\
-/// - This is my list
-/// item.
-/// ");
-/// ```
-pub fn refill<'a, Opt>(filled_text: &str, new_width_or_options: Opt) -> String
-where
- Opt: Into<Options<'a>>,
-{
- let mut new_options = new_width_or_options.into();
- let (text, options) = unfill(filled_text);
- // The original line ending is kept by `unfill`.
- let stripped = text.strip_suffix(options.line_ending.as_str());
- let new_line_ending = new_options.line_ending.as_str();
-
- new_options.initial_indent = options.initial_indent;
- new_options.subsequent_indent = options.subsequent_indent;
- let mut refilled = fill(stripped.unwrap_or(&text), new_options);
-
- // Add back right line ending if we stripped one off above.
- if stripped.is_some() {
- refilled.push_str(new_line_ending);
- }
- refilled
-}
-
-/// Wrap a line of text at a given width.
-///
-/// The result is a vector of lines, each line is of type [`Cow<'_,
-/// str>`](Cow), which means that the line will borrow from the input
-/// `&str` if possible. The lines do not have trailing whitespace,
-/// including a final `'\n'`. Please use the [`fill`] function if you
-/// need a [`String`] instead.
-///
-/// The easiest way to use this function is to pass an integer for
-/// `width_or_options`:
-///
-/// ```
-/// use textwrap::wrap;
-///
-/// let lines = wrap("Memory safety without garbage collection.", 15);
-/// assert_eq!(lines, &[
-/// "Memory safety",
-/// "without garbage",
-/// "collection.",
-/// ]);
-/// ```
-///
-/// If you need to customize the wrapping, you can pass an [`Options`]
-/// instead of an `usize`:
-///
-/// ```
-/// use textwrap::{wrap, Options};
-///
-/// let options = Options::new(15)
-/// .initial_indent("- ")
-/// .subsequent_indent(" ");
-/// let lines = wrap("Memory safety without garbage collection.", &options);
-/// assert_eq!(lines, &[
-/// "- Memory safety",
-/// " without",
-/// " garbage",
-/// " collection.",
-/// ]);
-/// ```
-///
-/// # Optimal-Fit Wrapping
-///
-/// By default, `wrap` will try to ensure an even right margin by
-/// finding breaks which avoid short lines. We call this an
-/// “optimal-fit algorithm” since the line breaks are computed by
-/// considering all possible line breaks. The alternative is a
-/// “first-fit algorithm” which simply accumulates words until they no
-/// longer fit on the line.
-///
-/// As an example, using the first-fit algorithm to wrap the famous
-/// Hamlet quote “To be, or not to be: that is the question” in a
-/// narrow column with room for only 10 characters looks like this:
-///
-/// ```
-/// # use textwrap::{WrapAlgorithm::FirstFit, Options, wrap};
-/// #
-/// # let lines = wrap("To be, or not to be: that is the question",
-/// # Options::new(10).wrap_algorithm(FirstFit));
-/// # assert_eq!(lines.join("\n") + "\n", "\
-/// To be, or
-/// not to be:
-/// that is
-/// the
-/// question
-/// # ");
-/// ```
-///
-/// Notice how the second to last line is quite narrow because
-/// “question” was too large to fit? The greedy first-fit algorithm
-/// doesn’t look ahead, so it has no other option than to put
-/// “question” onto its own line.
-///
-/// With the optimal-fit wrapping algorithm, the previous lines are
-/// shortened slightly in order to make the word “is” go into the
-/// second last line:
-///
-/// ```
-/// # #[cfg(feature = "smawk")] {
-/// # use textwrap::{Options, WrapAlgorithm, wrap};
-/// #
-/// # let lines = wrap(
-/// # "To be, or not to be: that is the question",
-/// # Options::new(10).wrap_algorithm(WrapAlgorithm::new_optimal_fit())
-/// # );
-/// # assert_eq!(lines.join("\n") + "\n", "\
-/// To be,
-/// or not to
-/// be: that
-/// is the
-/// question
-/// # "); }
-/// ```
-///
-/// Please see [`WrapAlgorithm`] for details on the choices.
-///
-/// # Examples
-///
-/// The returned iterator yields lines of type `Cow<'_, str>`. If
-/// possible, the wrapped lines will borrow from the input string. As
-/// an example, a hanging indentation, the first line can borrow from
-/// the input, but the subsequent lines become owned strings:
-///
-/// ```
-/// use std::borrow::Cow::{Borrowed, Owned};
-/// use textwrap::{wrap, Options};
-///
-/// let options = Options::new(15).subsequent_indent("....");
-/// let lines = wrap("Wrapping text all day long.", &options);
-/// let annotated = lines
-/// .iter()
-/// .map(|line| match line {
-/// Borrowed(text) => format!("[Borrowed] {}", text),
-/// Owned(text) => format!("[Owned] {}", text),
-/// })
-/// .collect::<Vec<_>>();
-/// assert_eq!(
-/// annotated,
-/// &[
-/// "[Borrowed] Wrapping text",
-/// "[Owned] ....all day",
-/// "[Owned] ....long.",
-/// ]
-/// );
-/// ```
-///
-/// ## Leading and Trailing Whitespace
-///
-/// As a rule, leading whitespace (indentation) is preserved and
-/// trailing whitespace is discarded.
-///
-/// In more details, when wrapping words into lines, words are found
-/// by splitting the input text on space characters. One or more
-/// spaces (shown here as “␣”) are attached to the end of each word:
-///
-/// ```text
-/// "Foo␣␣␣bar␣baz" -> ["Foo␣␣␣", "bar␣", "baz"]
-/// ```
-///
-/// These words are then put into lines. The interword whitespace is
-/// preserved, unless the lines are wrapped so that the `"Foo␣␣␣"`
-/// word falls at the end of a line:
-///
-/// ```
-/// use textwrap::wrap;
-///
-/// assert_eq!(wrap("Foo bar baz", 10), vec!["Foo bar", "baz"]);
-/// assert_eq!(wrap("Foo bar baz", 8), vec!["Foo", "bar baz"]);
-/// ```
-///
-/// Notice how the trailing whitespace is removed in both case: in the
-/// first example, `"bar␣"` becomes `"bar"` and in the second case
-/// `"Foo␣␣␣"` becomes `"Foo"`.
-///
-/// Leading whitespace is preserved when the following word fits on
-/// the first line. To understand this, consider how words are found
-/// in a text with leading spaces:
-///
-/// ```text
-/// "␣␣foo␣bar" -> ["␣␣", "foo␣", "bar"]
-/// ```
-///
-/// When put into lines, the indentation is preserved if `"foo"` fits
-/// on the first line, otherwise you end up with an empty line:
-///
-/// ```
-/// use textwrap::wrap;
-///
-/// assert_eq!(wrap(" foo bar", 8), vec![" foo", "bar"]);
-/// assert_eq!(wrap(" foo bar", 4), vec!["", "foo", "bar"]);
-/// ```
-pub fn wrap<'a, Opt>(text: &str, width_or_options: Opt) -> Vec<Cow<'_, str>>
-where
- Opt: Into<Options<'a>>,
-{
- let options: Options = width_or_options.into();
- let line_ending_str = options.line_ending.as_str();
-
- let mut lines = Vec::new();
- for line in text.split(line_ending_str) {
- wrap_single_line(line, &options, &mut lines);
- }
-
- lines
-}
-
-fn wrap_single_line<'a>(line: &'a str, options: &Options<'_>, lines: &mut Vec<Cow<'a, str>>) {
- let indent = if lines.is_empty() {
- options.initial_indent
- } else {
- options.subsequent_indent
- };
- if line.len() < options.width && indent.is_empty() {
- lines.push(Cow::from(line.trim_end_matches(' ')));
- } else {
- wrap_single_line_slow_path(line, options, lines)
- }
-}
-
-/// Wrap a single line of text.
-///
-/// This is taken when `line` is longer than `options.width`.
-fn wrap_single_line_slow_path<'a>(
- line: &'a str,
- options: &Options<'_>,
- lines: &mut Vec<Cow<'a, str>>,
-) {
- let initial_width = options
- .width
- .saturating_sub(core::display_width(options.initial_indent));
- let subsequent_width = options
- .width
- .saturating_sub(core::display_width(options.subsequent_indent));
- let line_widths = [initial_width, subsequent_width];
-
- let words = options.word_separator.find_words(line);
- let split_words = word_splitters::split_words(words, &options.word_splitter);
- let broken_words = if options.break_words {
- let mut broken_words = core::break_words(split_words, line_widths[1]);
- if !options.initial_indent.is_empty() {
- // Without this, the first word will always go into the
- // first line. However, since we break words based on the
- // _second_ line width, it can be wrong to unconditionally
- // put the first word onto the first line. An empty
- // zero-width word fixed this.
- broken_words.insert(0, core::Word::from(""));
- }
- broken_words
- } else {
- split_words.collect::<Vec<_>>()
- };
-
- let wrapped_words = options.wrap_algorithm.wrap(&broken_words, &line_widths);
-
- let mut idx = 0;
- for words in wrapped_words {
- let last_word = match words.last() {
- None => {
- lines.push(Cow::from(""));
- continue;
- }
- Some(word) => word,
- };
-
- // We assume here that all words are contiguous in `line`.
- // That is, the sum of their lengths should add up to the
- // length of `line`.
- let len = words
- .iter()
- .map(|word| word.len() + word.whitespace.len())
- .sum::<usize>()
- - last_word.whitespace.len();
-
- // The result is owned if we have indentation, otherwise we
- // can simply borrow an empty string.
- let mut result = if lines.is_empty() && !options.initial_indent.is_empty() {
- Cow::Owned(options.initial_indent.to_owned())
- } else if !lines.is_empty() && !options.subsequent_indent.is_empty() {
- Cow::Owned(options.subsequent_indent.to_owned())
- } else {
- // We can use an empty string here since string
- // concatenation for `Cow` preserves a borrowed value when
- // either side is empty.
- Cow::from("")
- };
-
- result += &line[idx..idx + len];
-
- if !last_word.penalty.is_empty() {
- result.to_mut().push_str(last_word.penalty);
- }
-
- lines.push(result);
-
- // Advance by the length of `result`, plus the length of
- // `last_word.whitespace` -- even if we had a penalty, we need
- // to skip over the whitespace.
- idx += len + last_word.whitespace.len();
- }
-}
-
-/// Wrap text into columns with a given total width.
-///
-/// The `left_gap`, `middle_gap` and `right_gap` arguments specify the
-/// strings to insert before, between, and after the columns. The
-/// total width of all columns and all gaps is specified using the
-/// `total_width_or_options` argument. This argument can simply be an
-/// integer if you want to use default settings when wrapping, or it
-/// can be a [`Options`] value if you want to customize the wrapping.
-///
-/// If the columns are narrow, it is recommended to set
-/// [`Options::break_words`] to `true` to prevent words from
-/// protruding into the margins.
-///
-/// The per-column width is computed like this:
-///
-/// ```
-/// # let (left_gap, middle_gap, right_gap) = ("", "", "");
-/// # let columns = 2;
-/// # let options = textwrap::Options::new(80);
-/// let inner_width = options.width
-/// - textwrap::core::display_width(left_gap)
-/// - textwrap::core::display_width(right_gap)
-/// - textwrap::core::display_width(middle_gap) * (columns - 1);
-/// let column_width = inner_width / columns;
-/// ```
-///
-/// The `text` is wrapped using [`wrap`] and the given `options`
-/// argument, but the width is overwritten to the computed
-/// `column_width`.
-///
-/// # Panics
-///
-/// Panics if `columns` is zero.
-///
-/// # Examples
-///
-/// ```
-/// use textwrap::wrap_columns;
-///
-/// let text = "\
-/// This is an example text, which is wrapped into three columns. \
-/// Notice how the final column can be shorter than the others.";
-///
-/// #[cfg(feature = "smawk")]
-/// assert_eq!(wrap_columns(text, 3, 50, "| ", " | ", " |"),
-/// vec!["| This is | into three | column can be |",
-/// "| an example | columns. | shorter than |",
-/// "| text, which | Notice how | the others. |",
-/// "| is wrapped | the final | |"]);
-///
-/// // Without the `smawk` feature, the middle column is a little more uneven:
-/// #[cfg(not(feature = "smawk"))]
-/// assert_eq!(wrap_columns(text, 3, 50, "| ", " | ", " |"),
-/// vec!["| This is an | three | column can be |",
-/// "| example text, | columns. | shorter than |",
-/// "| which is | Notice how | the others. |",
-/// "| wrapped into | the final | |"]);
-pub fn wrap_columns<'a, Opt>(
- text: &str,
- columns: usize,
- total_width_or_options: Opt,
- left_gap: &str,
- middle_gap: &str,
- right_gap: &str,
-) -> Vec<String>
-where
- Opt: Into<Options<'a>>,
-{
- assert!(columns > 0);
-
- let mut options: Options = total_width_or_options.into();
-
- let inner_width = options
- .width
- .saturating_sub(core::display_width(left_gap))
- .saturating_sub(core::display_width(right_gap))
- .saturating_sub(core::display_width(middle_gap) * (columns - 1));
-
- let column_width = std::cmp::max(inner_width / columns, 1);
- options.width = column_width;
- let last_column_padding = " ".repeat(inner_width % column_width);
- let wrapped_lines = wrap(text, options);
- let lines_per_column =
- wrapped_lines.len() / columns + usize::from(wrapped_lines.len() % columns > 0);
- let mut lines = Vec::new();
- for line_no in 0..lines_per_column {
- let mut line = String::from(left_gap);
- for column_no in 0..columns {
- match wrapped_lines.get(line_no + column_no * lines_per_column) {
- Some(column_line) => {
- line.push_str(column_line);
- line.push_str(&" ".repeat(column_width - core::display_width(column_line)));
- }
- None => {
- line.push_str(&" ".repeat(column_width));
- }
- }
- if column_no == columns - 1 {
- line.push_str(&last_column_padding);
- } else {
- line.push_str(middle_gap);
- }
- }
- line.push_str(right_gap);
- lines.push(line);
- }
-
- lines
-}
-
-/// Fill `text` in-place without reallocating the input string.
-///
-/// This function works by modifying the input string: some `' '`
-/// characters will be replaced by `'\n'` characters. The rest of the
-/// text remains untouched.
-///
-/// Since we can only replace existing whitespace in the input with
-/// `'\n'` (there is no space for `"\r\n"`), we cannot do hyphenation
-/// nor can we split words longer than the line width. We also need to
-/// use `AsciiSpace` as the word separator since we need `' '`
-/// characters between words in order to replace some of them with a
-/// `'\n'`. Indentation is also ruled out. In other words,
-/// `fill_inplace(width)` behaves as if you had called [`fill`] with
-/// these options:
-///
-/// ```
-/// # use textwrap::{core, LineEnding, Options, WordSplitter, WordSeparator, WrapAlgorithm};
-/// # let width = 80;
-/// Options::new(width)
-/// .break_words(false)
-/// .line_ending(LineEnding::LF)
-/// .word_separator(WordSeparator::AsciiSpace)
-/// .wrap_algorithm(WrapAlgorithm::FirstFit)
-/// .word_splitter(WordSplitter::NoHyphenation);
-/// ```
-///
-/// The wrap algorithm is [`WrapAlgorithm::FirstFit`] since this
-/// is the fastest algorithm — and the main reason to use
-/// `fill_inplace` is to get the string broken into newlines as fast
-/// as possible.
-///
-/// A last difference is that (unlike [`fill`]) `fill_inplace` can
-/// leave trailing whitespace on lines. This is because we wrap by
-/// inserting a `'\n'` at the final whitespace in the input string:
-///
-/// ```
-/// let mut text = String::from("Hello World!");
-/// textwrap::fill_inplace(&mut text, 10);
-/// assert_eq!(text, "Hello \nWorld!");
-/// ```
-///
-/// If we didn't do this, the word `World!` would end up being
-/// indented. You can avoid this if you make sure that your input text
-/// has no double spaces.
-///
-/// # Performance
-///
-/// In benchmarks, `fill_inplace` is about twice as fast as [`fill`].
-/// Please see the [`linear`
-/// benchmark](https://github.com/mgeisler/textwrap/blob/master/benchmarks/linear.rs)
-/// for details.
-pub fn fill_inplace(text: &mut String, width: usize) {
- let mut indices = Vec::new();
-
- let mut offset = 0;
- for line in text.split('\n') {
- let words = WordSeparator::AsciiSpace
- .find_words(line)
- .collect::<Vec<_>>();
- let wrapped_words = wrap_algorithms::wrap_first_fit(&words, &[width as f64]);
-
- let mut line_offset = offset;
- for words in &wrapped_words[..wrapped_words.len() - 1] {
- let line_len = words
- .iter()
- .map(|word| word.len() + word.whitespace.len())
- .sum::<usize>();
-
- line_offset += line_len;
- // We've advanced past all ' ' characters -- want to move
- // one ' ' backwards and insert our '\n' there.
- indices.push(line_offset - 1);
- }
-
- // Advance past entire line, plus the '\n' which was removed
- // by the split call above.
- offset += line.len() + 1;
- }
-
- let mut bytes = std::mem::take(text).into_bytes();
- for idx in indices {
- bytes[idx] = b'\n';
- }
- *text = String::from_utf8(bytes).unwrap();
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[cfg(feature = "hyphenation")]
- use hyphenation::{Language, Load, Standard};
-
- #[test]
- fn options_agree_with_usize() {
- let opt_usize = Options::from(42_usize);
- let opt_options = Options::new(42);
-
- assert_eq!(opt_usize.width, opt_options.width);
- assert_eq!(opt_usize.initial_indent, opt_options.initial_indent);
- assert_eq!(opt_usize.subsequent_indent, opt_options.subsequent_indent);
- assert_eq!(opt_usize.break_words, opt_options.break_words);
- assert_eq!(
- opt_usize.word_splitter.split_points("hello-world"),
- opt_options.word_splitter.split_points("hello-world")
- );
- }
-
- #[test]
- fn no_wrap() {
- assert_eq!(wrap("foo", 10), vec!["foo"]);
- }
-
- #[test]
- fn wrap_simple() {
- assert_eq!(wrap("foo bar baz", 5), vec!["foo", "bar", "baz"]);
- }
-
- #[test]
- fn to_be_or_not() {
- assert_eq!(
- wrap(
- "To be, or not to be, that is the question.",
- Options::new(10).wrap_algorithm(WrapAlgorithm::FirstFit)
- ),
- vec!["To be, or", "not to be,", "that is", "the", "question."]
- );
- }
-
- #[test]
- fn multiple_words_on_first_line() {
- assert_eq!(wrap("foo bar baz", 10), vec!["foo bar", "baz"]);
- }
-
- #[test]
- fn long_word() {
- assert_eq!(wrap("foo", 0), vec!["f", "o", "o"]);
- }
-
- #[test]
- fn long_words() {
- assert_eq!(wrap("foo bar", 0), vec!["f", "o", "o", "b", "a", "r"]);
- }
-
- #[test]
- fn max_width() {
- assert_eq!(wrap("foo bar", usize::MAX), vec!["foo bar"]);
-
- let text = "Hello there! This is some English text. \
- It should not be wrapped given the extents below.";
- assert_eq!(wrap(text, usize::MAX), vec![text]);
- }
-
- #[test]
- fn leading_whitespace() {
- assert_eq!(wrap(" foo bar", 6), vec![" foo", "bar"]);
- }
-
- #[test]
- fn leading_whitespace_empty_first_line() {
- // If there is no space for the first word, the first line
- // will be empty. This is because the string is split into
- // words like [" ", "foobar ", "baz"], which puts "foobar " on
- // the second line. We never output trailing whitespace
- assert_eq!(wrap(" foobar baz", 6), vec!["", "foobar", "baz"]);
- }
-
- #[test]
- fn trailing_whitespace() {
- // Whitespace is only significant inside a line. After a line
- // gets too long and is broken, the first word starts in
- // column zero and is not indented.
- assert_eq!(wrap("foo bar baz ", 5), vec!["foo", "bar", "baz"]);
- }
-
- #[test]
- fn issue_99() {
- // We did not reset the in_whitespace flag correctly and did
- // not handle single-character words after a line break.
- assert_eq!(
- wrap("aaabbbccc x yyyzzzwww", 9),
- vec!["aaabbbccc", "x", "yyyzzzwww"]
- );
- }
-
- #[test]
- fn issue_129() {
- // The dash is an em-dash which takes up four bytes. We used
- // to panic since we tried to index into the character.
- let options = Options::new(1).word_separator(WordSeparator::AsciiSpace);
- assert_eq!(wrap("x – x", options), vec!["x", "–", "x"]);
- }
-
- #[test]
- fn wide_character_handling() {
- assert_eq!(wrap("Hello, World!", 15), vec!["Hello, World!"]);
- assert_eq!(
- wrap(
- "Hello, World!",
- Options::new(15).word_separator(WordSeparator::AsciiSpace)
- ),
- vec!["Hello,", "World!"]
- );
-
- // Wide characters are allowed to break if the
- // unicode-linebreak feature is enabled.
- #[cfg(feature = "unicode-linebreak")]
- assert_eq!(
- wrap(
- "Hello, World!",
- Options::new(15).word_separator(WordSeparator::UnicodeBreakProperties),
- ),
- vec!["Hello, W", "orld!"]
- );
- }
-
- #[test]
- fn empty_line_is_indented() {
- // Previously, indentation was not applied to empty lines.
- // However, this is somewhat inconsistent and undesirable if
- // the indentation is something like a border ("| ") which you
- // want to apply to all lines, empty or not.
- let options = Options::new(10).initial_indent("!!!");
- assert_eq!(fill("", &options), "!!!");
- }
-
- #[test]
- fn indent_single_line() {
- let options = Options::new(10).initial_indent(">>>"); // No trailing space
- assert_eq!(fill("foo", &options), ">>>foo");
- }
-
- #[test]
- fn indent_first_emoji() {
- let options = Options::new(10).initial_indent("👉👉");
- assert_eq!(
- wrap("x x x x x x x x x x x x x", &options),
- vec!["👉👉x x x", "x x x x x", "x x x x x"]
- );
- }
-
- #[test]
- fn indent_multiple_lines() {
- let options = Options::new(6).initial_indent("* ").subsequent_indent(" ");
- assert_eq!(
- wrap("foo bar baz", &options),
- vec!["* foo", " bar", " baz"]
- );
- }
-
- #[test]
- fn only_initial_indent_multiple_lines() {
- let options = Options::new(10).initial_indent(" ");
- assert_eq!(wrap("foo\nbar\nbaz", &options), vec![" foo", "bar", "baz"]);
- }
-
- #[test]
- fn only_subsequent_indent_multiple_lines() {
- let options = Options::new(10).subsequent_indent(" ");
- assert_eq!(
- wrap("foo\nbar\nbaz", &options),
- vec!["foo", " bar", " baz"]
- );
- }
-
- #[test]
- fn indent_break_words() {
- let options = Options::new(5).initial_indent("* ").subsequent_indent(" ");
- assert_eq!(wrap("foobarbaz", &options), vec!["* foo", " bar", " baz"]);
- }
-
- #[test]
- fn initial_indent_break_words() {
- // This is a corner-case showing how the long word is broken
- // according to the width of the subsequent lines. The first
- // fragment of the word no longer fits on the first line,
- // which ends up being pure indentation.
- let options = Options::new(5).initial_indent("-->");
- assert_eq!(wrap("foobarbaz", &options), vec!["-->", "fooba", "rbaz"]);
- }
-
- #[test]
- fn hyphens() {
- assert_eq!(wrap("foo-bar", 5), vec!["foo-", "bar"]);
- }
-
- #[test]
- fn trailing_hyphen() {
- let options = Options::new(5).break_words(false);
- assert_eq!(wrap("foobar-", &options), vec!["foobar-"]);
- }
-
- #[test]
- fn multiple_hyphens() {
- assert_eq!(wrap("foo-bar-baz", 5), vec!["foo-", "bar-", "baz"]);
- }
-
- #[test]
- fn hyphens_flag() {
- let options = Options::new(5).break_words(false);
- assert_eq!(
- wrap("The --foo-bar flag.", &options),
- vec!["The", "--foo-", "bar", "flag."]
- );
- }
-
- #[test]
- fn repeated_hyphens() {
- let options = Options::new(4).break_words(false);
- assert_eq!(wrap("foo--bar", &options), vec!["foo--bar"]);
- }
-
- #[test]
- fn hyphens_alphanumeric() {
- assert_eq!(wrap("Na2-CH4", 5), vec!["Na2-", "CH4"]);
- }
-
- #[test]
- fn hyphens_non_alphanumeric() {
- let options = Options::new(5).break_words(false);
- assert_eq!(wrap("foo(-)bar", &options), vec!["foo(-)bar"]);
- }
-
- #[test]
- fn multiple_splits() {
- assert_eq!(wrap("foo-bar-baz", 9), vec!["foo-bar-", "baz"]);
- }
-
- #[test]
- fn forced_split() {
- let options = Options::new(5).break_words(false);
- assert_eq!(wrap("foobar-baz", &options), vec!["foobar-", "baz"]);
- }
-
- #[test]
- fn multiple_unbroken_words_issue_193() {
- let options = Options::new(3).break_words(false);
- assert_eq!(
- wrap("small large tiny", &options),
- vec!["small", "large", "tiny"]
- );
- assert_eq!(
- wrap("small large tiny", &options),
- vec!["small", "large", "tiny"]
- );
- }
-
- #[test]
- fn very_narrow_lines_issue_193() {
- let options = Options::new(1).break_words(false);
- assert_eq!(wrap("fooo x y", &options), vec!["fooo", "x", "y"]);
- assert_eq!(wrap("fooo x y", &options), vec!["fooo", "x", "y"]);
- }
-
- #[test]
- fn simple_hyphens() {
- let options = Options::new(8).word_splitter(WordSplitter::HyphenSplitter);
- assert_eq!(wrap("foo bar-baz", &options), vec!["foo bar-", "baz"]);
- }
-
- #[test]
- fn no_hyphenation() {
- let options = Options::new(8).word_splitter(WordSplitter::NoHyphenation);
- assert_eq!(wrap("foo bar-baz", &options), vec!["foo", "bar-baz"]);
- }
-
- #[test]
- #[cfg(feature = "hyphenation")]
- fn auto_hyphenation_double_hyphenation() {
- let dictionary = Standard::from_embedded(Language::EnglishUS).unwrap();
- let options = Options::new(10);
- assert_eq!(
- wrap("Internationalization", &options),
- vec!["Internatio", "nalization"]
- );
-
- let options = Options::new(10).word_splitter(WordSplitter::Hyphenation(dictionary));
- assert_eq!(
- wrap("Internationalization", &options),
- vec!["Interna-", "tionaliza-", "tion"]
- );
- }
-
- #[test]
- #[cfg(feature = "hyphenation")]
- fn auto_hyphenation_issue_158() {
- let dictionary = Standard::from_embedded(Language::EnglishUS).unwrap();
- let options = Options::new(10);
- assert_eq!(
- wrap("participation is the key to success", &options),
- vec!["participat", "ion is", "the key to", "success"]
- );
-
- let options = Options::new(10).word_splitter(WordSplitter::Hyphenation(dictionary));
- assert_eq!(
- wrap("participation is the key to success", &options),
- vec!["partici-", "pation is", "the key to", "success"]
- );
- }
-
- #[test]
- #[cfg(feature = "hyphenation")]
- fn split_len_hyphenation() {
- // Test that hyphenation takes the width of the whitespace
- // into account.
- let dictionary = Standard::from_embedded(Language::EnglishUS).unwrap();
- let options = Options::new(15).word_splitter(WordSplitter::Hyphenation(dictionary));
- assert_eq!(
- wrap("garbage collection", &options),
- vec!["garbage col-", "lection"]
- );
- }
-
- #[test]
- #[cfg(feature = "hyphenation")]
- fn borrowed_lines() {
- // Lines that end with an extra hyphen are owned, the final
- // line is borrowed.
- use std::borrow::Cow::{Borrowed, Owned};
- let dictionary = Standard::from_embedded(Language::EnglishUS).unwrap();
- let options = Options::new(10).word_splitter(WordSplitter::Hyphenation(dictionary));
- let lines = wrap("Internationalization", &options);
- assert_eq!(lines, vec!["Interna-", "tionaliza-", "tion"]);
- if let Borrowed(s) = lines[0] {
- assert!(false, "should not have been borrowed: {:?}", s);
- }
- if let Borrowed(s) = lines[1] {
- assert!(false, "should not have been borrowed: {:?}", s);
- }
- if let Owned(ref s) = lines[2] {
- assert!(false, "should not have been owned: {:?}", s);
- }
- }
-
- #[test]
- #[cfg(feature = "hyphenation")]
- fn auto_hyphenation_with_hyphen() {
- let dictionary = Standard::from_embedded(Language::EnglishUS).unwrap();
- let options = Options::new(8).break_words(false);
- assert_eq!(
- wrap("over-caffinated", &options),
- vec!["over-", "caffinated"]
- );
-
- let options = options.word_splitter(WordSplitter::Hyphenation(dictionary));
- assert_eq!(
- wrap("over-caffinated", &options),
- vec!["over-", "caffi-", "nated"]
- );
- }
-
- #[test]
- fn break_words() {
- assert_eq!(wrap("foobarbaz", 3), vec!["foo", "bar", "baz"]);
- }
-
- #[test]
- fn break_words_wide_characters() {
- // Even the poor man's version of `ch_width` counts these
- // characters as wide.
- let options = Options::new(5).word_separator(WordSeparator::AsciiSpace);
- assert_eq!(wrap("Hello", options), vec!["He", "ll", "o"]);
- }
-
- #[test]
- fn break_words_zero_width() {
- assert_eq!(wrap("foobar", 0), vec!["f", "o", "o", "b", "a", "r"]);
- }
-
- #[test]
- fn break_long_first_word() {
- assert_eq!(wrap("testx y", 4), vec!["test", "x y"]);
- }
-
- #[test]
- fn break_words_line_breaks() {
- assert_eq!(fill("ab\ncdefghijkl", 5), "ab\ncdefg\nhijkl");
- assert_eq!(fill("abcdefgh\nijkl", 5), "abcde\nfgh\nijkl");
- }
-
- #[test]
- fn break_words_empty_lines() {
- assert_eq!(
- fill("foo\nbar", &Options::new(2).break_words(false)),
- "foo\nbar"
- );
- }
-
- #[test]
- fn preserve_line_breaks() {
- assert_eq!(fill("", 80), "");
- assert_eq!(fill("\n", 80), "\n");
- assert_eq!(fill("\n\n\n", 80), "\n\n\n");
- assert_eq!(fill("test\n", 80), "test\n");
- assert_eq!(fill("test\n\na\n\n", 80), "test\n\na\n\n");
- assert_eq!(
- fill(
- "1 3 5 7\n1 3 5 7",
- Options::new(7).wrap_algorithm(WrapAlgorithm::FirstFit)
- ),
- "1 3 5 7\n1 3 5 7"
- );
- assert_eq!(
- fill(
- "1 3 5 7\n1 3 5 7",
- Options::new(5).wrap_algorithm(WrapAlgorithm::FirstFit)
- ),
- "1 3 5\n7\n1 3 5\n7"
- );
- }
-
- #[test]
- fn preserve_line_breaks_with_whitespace() {
- assert_eq!(fill(" ", 80), "");
- assert_eq!(fill(" \n ", 80), "\n");
- assert_eq!(fill(" \n \n \n ", 80), "\n\n\n");
- }
-
- #[test]
- fn non_breaking_space() {
- let options = Options::new(5).break_words(false);
- assert_eq!(fill("foo bar baz", &options), "foo bar baz");
- }
-
- #[test]
- fn non_breaking_hyphen() {
- let options = Options::new(5).break_words(false);
- assert_eq!(fill("foo‑bar‑baz", &options), "foo‑bar‑baz");
- }
-
- #[test]
- fn fill_simple() {
- assert_eq!(fill("foo bar baz", 10), "foo bar\nbaz");
- }
-
- #[test]
- fn fill_colored_text() {
- // The words are much longer than 6 bytes, but they remain
- // intact after filling the text.
- let green_hello = "\u{1b}[0m\u{1b}[32mHello\u{1b}[0m";
- let blue_world = "\u{1b}[0m\u{1b}[34mWorld!\u{1b}[0m";
- assert_eq!(
- fill(&(String::from(green_hello) + " " + blue_world), 6),
- String::from(green_hello) + "\n" + blue_world
- );
- }
-
- #[test]
- fn fill_unicode_boundary() {
- // https://github.com/mgeisler/textwrap/issues/390
- fill("\u{1b}!Ͽ", 10);
- }
-
- #[test]
- fn fill_inplace_empty() {
- let mut text = String::from("");
- fill_inplace(&mut text, 80);
- assert_eq!(text, "");
- }
-
- #[test]
- fn fill_inplace_simple() {
- let mut text = String::from("foo bar baz");
- fill_inplace(&mut text, 10);
- assert_eq!(text, "foo bar\nbaz");
- }
-
- #[test]
- fn fill_inplace_multiple_lines() {
- let mut text = String::from("Some text to wrap over multiple lines");
- fill_inplace(&mut text, 12);
- assert_eq!(text, "Some text to\nwrap over\nmultiple\nlines");
- }
-
- #[test]
- fn fill_inplace_long_word() {
- let mut text = String::from("Internationalization is hard");
- fill_inplace(&mut text, 10);
- assert_eq!(text, "Internationalization\nis hard");
- }
-
- #[test]
- fn fill_inplace_no_hyphen_splitting() {
- let mut text = String::from("A well-chosen example");
- fill_inplace(&mut text, 10);
- assert_eq!(text, "A\nwell-chosen\nexample");
- }
-
- #[test]
- fn fill_inplace_newlines() {
- let mut text = String::from("foo bar\n\nbaz\n\n\n");
- fill_inplace(&mut text, 10);
- assert_eq!(text, "foo bar\n\nbaz\n\n\n");
- }
-
- #[test]
- fn fill_inplace_newlines_reset_line_width() {
- let mut text = String::from("1 3 5\n1 3 5 7 9\n1 3 5 7 9 1 3");
- fill_inplace(&mut text, 10);
- assert_eq!(text, "1 3 5\n1 3 5 7 9\n1 3 5 7 9\n1 3");
- }
-
- #[test]
- fn fill_inplace_leading_whitespace() {
- let mut text = String::from(" foo bar baz");
- fill_inplace(&mut text, 10);
- assert_eq!(text, " foo bar\nbaz");
- }
-
- #[test]
- fn fill_inplace_trailing_whitespace() {
- let mut text = String::from("foo bar baz ");
- fill_inplace(&mut text, 10);
- assert_eq!(text, "foo bar\nbaz ");
- }
-
- #[test]
- fn fill_inplace_interior_whitespace() {
- // To avoid an unwanted indentation of "baz", it is important
- // to replace the final ' ' with '\n'.
- let mut text = String::from("foo bar baz");
- fill_inplace(&mut text, 10);
- assert_eq!(text, "foo bar \nbaz");
- }
-
- #[test]
- fn unfill_simple() {
- let (text, options) = unfill("foo\nbar");
- assert_eq!(text, "foo bar");
- assert_eq!(options.width, 3);
- assert_eq!(options.line_ending, LineEnding::LF);
- }
-
- #[test]
- fn unfill_no_new_line() {
- let (text, options) = unfill("foo bar");
- assert_eq!(text, "foo bar");
- assert_eq!(options.width, 7);
- assert_eq!(options.line_ending, LineEnding::LF);
- }
-
- #[test]
- fn unfill_simple_crlf() {
- let (text, options) = unfill("foo\r\nbar");
- assert_eq!(text, "foo bar");
- assert_eq!(options.width, 3);
- assert_eq!(options.line_ending, LineEnding::CRLF);
- }
-
- #[test]
- fn unfill_mixed_new_lines() {
- let (text, options) = unfill("foo\r\nbar\nbaz");
- assert_eq!(text, "foo bar baz");
- assert_eq!(options.width, 3);
- assert_eq!(options.line_ending, LineEnding::LF);
- }
-
- #[test]
- fn unfill_trailing_newlines() {
- let (text, options) = unfill("foo\nbar\n\n\n");
- assert_eq!(text, "foo bar\n");
- assert_eq!(options.width, 3);
- }
-
- #[test]
- fn unfill_mixed_trailing_newlines() {
- let (text, options) = unfill("foo\r\nbar\n\r\n\n");
- assert_eq!(text, "foo bar\n");
- assert_eq!(options.width, 3);
- assert_eq!(options.line_ending, LineEnding::LF);
- }
-
- #[test]
- fn unfill_trailing_crlf() {
- let (text, options) = unfill("foo bar\r\n");
- assert_eq!(text, "foo bar\r\n");
- assert_eq!(options.width, 7);
- assert_eq!(options.line_ending, LineEnding::CRLF);
- }
-
- #[test]
- fn unfill_initial_indent() {
- let (text, options) = unfill(" foo\nbar\nbaz");
- assert_eq!(text, "foo bar baz");
- assert_eq!(options.width, 5);
- assert_eq!(options.initial_indent, " ");
- }
-
- #[test]
- fn unfill_differing_indents() {
- let (text, options) = unfill(" foo\n bar\n baz");
- assert_eq!(text, "foo bar baz");
- assert_eq!(options.width, 7);
- assert_eq!(options.initial_indent, " ");
- assert_eq!(options.subsequent_indent, " ");
- }
-
- #[test]
- fn unfill_list_item() {
- let (text, options) = unfill("* foo\n bar\n baz");
- assert_eq!(text, "foo bar baz");
- assert_eq!(options.width, 5);
- assert_eq!(options.initial_indent, "* ");
- assert_eq!(options.subsequent_indent, " ");
- }
-
- #[test]
- fn unfill_multiple_char_prefix() {
- let (text, options) = unfill(" // foo bar\n // baz\n // quux");
- assert_eq!(text, "foo bar baz quux");
- assert_eq!(options.width, 14);
- assert_eq!(options.initial_indent, " // ");
- assert_eq!(options.subsequent_indent, " // ");
- }
-
- #[test]
- fn unfill_block_quote() {
- let (text, options) = unfill("> foo\n> bar\n> baz");
- assert_eq!(text, "foo bar baz");
- assert_eq!(options.width, 5);
- assert_eq!(options.initial_indent, "> ");
- assert_eq!(options.subsequent_indent, "> ");
- }
-
- #[test]
- fn unfill_only_prefixes_issue_466() {
- // Test that we don't crash if the first line has only prefix
- // chars *and* the second line is shorter than the first line.
- let (text, options) = unfill("######\nfoo");
- assert_eq!(text, " foo");
- assert_eq!(options.width, 6);
- assert_eq!(options.initial_indent, "######");
- assert_eq!(options.subsequent_indent, "");
- }
-
- #[test]
- fn unfill_trailing_newlines_issue_466() {
- // Test that we don't crash on a '\r' following a string of
- // '\n'. The problem was that we removed both kinds of
- // characters in one code path, but not in the other.
- let (text, options) = unfill("foo\n##\n\n\r");
- // The \n\n changes subsequent_indent to "".
- assert_eq!(text, "foo ## \r");
- assert_eq!(options.width, 3);
- assert_eq!(options.initial_indent, "");
- assert_eq!(options.subsequent_indent, "");
- }
-
- #[test]
- fn unfill_whitespace() {
- assert_eq!(unfill("foo bar").0, "foo bar");
- }
-
- #[test]
- fn refill_convert_lf_to_crlf() {
- let options = Options::new(5).line_ending(LineEnding::CRLF);
- assert_eq!(refill("foo\nbar\n", options), "foo\r\nbar\r\n",);
- }
-
- #[test]
- fn refill_convert_crlf_to_lf() {
- let options = Options::new(5).line_ending(LineEnding::LF);
- assert_eq!(refill("foo\r\nbar\r\n", options), "foo\nbar\n",);
- }
-
- #[test]
- fn refill_convert_mixed_newlines() {
- let options = Options::new(5).line_ending(LineEnding::CRLF);
- assert_eq!(refill("foo\r\nbar\n", options), "foo\r\nbar\r\n",);
- }
-
- #[test]
- fn refill_defaults_to_lf() {
- assert_eq!(refill("foo bar baz", 5), "foo\nbar\nbaz");
- }
-
- #[test]
- fn wrap_columns_empty_text() {
- assert_eq!(wrap_columns("", 1, 10, "| ", "", " |"), vec!["| |"]);
- }
-
- #[test]
- fn wrap_columns_single_column() {
- assert_eq!(
- wrap_columns("Foo", 3, 30, "| ", " | ", " |"),
- vec!["| Foo | | |"]
- );
- }
-
- #[test]
- fn wrap_columns_uneven_columns() {
- // The gaps take up a total of 5 columns, so the columns are
- // (21 - 5)/4 = 4 columns wide:
- assert_eq!(
- wrap_columns("Foo Bar Baz Quux", 4, 21, "|", "|", "|"),
- vec!["|Foo |Bar |Baz |Quux|"]
- );
- // As the total width increases, the last column absorbs the
- // excess width:
- assert_eq!(
- wrap_columns("Foo Bar Baz Quux", 4, 24, "|", "|", "|"),
- vec!["|Foo |Bar |Baz |Quux |"]
- );
- // Finally, when the width is 25, the columns can be resized
- // to a width of (25 - 5)/4 = 5 columns:
- assert_eq!(
- wrap_columns("Foo Bar Baz Quux", 4, 25, "|", "|", "|"),
- vec!["|Foo |Bar |Baz |Quux |"]
- );
- }
-
- #[test]
- #[cfg(feature = "unicode-width")]
- fn wrap_columns_with_emojis() {
- assert_eq!(
- wrap_columns(
- "Words and a few emojis 😍 wrapped in ⓶ columns",
- 2,
- 30,
- "✨ ",
- " ⚽ ",
- " 👀"
- ),
- vec![
- "✨ Words ⚽ wrapped in 👀",
- "✨ and a few ⚽ ⓶ columns 👀",
- "✨ emojis 😍 ⚽ 👀"
- ]
- );
- }
-
- #[test]
- fn wrap_columns_big_gaps() {
- // The column width shrinks to 1 because the gaps take up all
- // the space.
- assert_eq!(
- wrap_columns("xyz", 2, 10, "----> ", " !!! ", " <----"),
- vec![
- "----> x !!! z <----", //
- "----> y !!! <----"
- ]
- );
- }
-
- #[test]
- #[should_panic]
- fn wrap_columns_panic_with_zero_columns() {
- wrap_columns("", 0, 10, "", "", "");
- }
-}
+pub use columns::wrap_columns;
+pub use fill::{fill, fill_inplace};
+pub use indentation::{dedent, indent};
+pub use line_ending::LineEnding;
+pub use options::Options;
+pub use refill::{refill, unfill};
+#[cfg(feature = "terminal_size")]
+pub use termwidth::termwidth;
+pub use word_separators::WordSeparator;
+pub use word_splitters::WordSplitter;
+pub use wrap::wrap;
+pub use wrap_algorithms::WrapAlgorithm;
diff --git a/crates/textwrap/src/options.rs b/crates/textwrap/src/options.rs
new file mode 100644
index 0000000..80e420d
--- /dev/null
+++ b/crates/textwrap/src/options.rs
@@ -0,0 +1,300 @@
+//! Options for wrapping text.
+
+use crate::{LineEnding, WordSeparator, WordSplitter, WrapAlgorithm};
+
+/// Holds configuration options for wrapping and filling text.
+#[non_exhaustive]
+#[derive(Debug, Clone)]
+pub struct Options<'a> {
+ /// The width in columns at which the text will be wrapped.
+ pub width: usize,
+ /// Line ending used for breaking lines.
+ pub line_ending: LineEnding,
+ /// Indentation used for the first line of output. See the
+ /// [`Options::initial_indent`] method.
+ pub initial_indent: &'a str,
+ /// Indentation used for subsequent lines of output. See the
+ /// [`Options::subsequent_indent`] method.
+ pub subsequent_indent: &'a str,
+ /// Allow long words to be broken if they cannot fit on a line.
+ /// When set to `false`, some lines may be longer than
+ /// `self.width`. See the [`Options::break_words`] method.
+ pub break_words: bool,
+ /// Wrapping algorithm to use, see the implementations of the
+ /// [`WrapAlgorithm`] trait for details.
+ pub wrap_algorithm: WrapAlgorithm,
+ /// The line breaking algorithm to use, see the [`WordSeparator`]
+ /// trait for an overview and possible implementations.
+ pub word_separator: WordSeparator,
+ /// The method for splitting words. This can be used to prohibit
+ /// splitting words on hyphens, or it can be used to implement
+ /// language-aware machine hyphenation.
+ pub word_splitter: WordSplitter,
+}
+
+impl<'a> From<&'a Options<'a>> for Options<'a> {
+ fn from(options: &'a Options<'a>) -> Self {
+ Self {
+ width: options.width,
+ line_ending: options.line_ending,
+ initial_indent: options.initial_indent,
+ subsequent_indent: options.subsequent_indent,
+ break_words: options.break_words,
+ word_separator: options.word_separator,
+ wrap_algorithm: options.wrap_algorithm,
+ word_splitter: options.word_splitter.clone(),
+ }
+ }
+}
+
+impl<'a> From<usize> for Options<'a> {
+ fn from(width: usize) -> Self {
+ Options::new(width)
+ }
+}
+
+impl<'a> Options<'a> {
+ /// Creates a new [`Options`] with the specified width.
+ ///
+ /// The other fields are given default values as follows:
+ ///
+ /// ```
+ /// # use textwrap::{LineEnding, Options, WordSplitter, WordSeparator, WrapAlgorithm};
+ /// # let width = 80;
+ /// let options = Options::new(width);
+ /// assert_eq!(options.line_ending, LineEnding::LF);
+ /// assert_eq!(options.initial_indent, "");
+ /// assert_eq!(options.subsequent_indent, "");
+ /// assert_eq!(options.break_words, true);
+ ///
+ /// #[cfg(feature = "unicode-linebreak")]
+ /// assert_eq!(options.word_separator, WordSeparator::UnicodeBreakProperties);
+ /// #[cfg(not(feature = "unicode-linebreak"))]
+ /// assert_eq!(options.word_separator, WordSeparator::AsciiSpace);
+ ///
+ /// #[cfg(feature = "smawk")]
+ /// assert_eq!(options.wrap_algorithm, WrapAlgorithm::new_optimal_fit());
+ /// #[cfg(not(feature = "smawk"))]
+ /// assert_eq!(options.wrap_algorithm, WrapAlgorithm::FirstFit);
+ ///
+ /// assert_eq!(options.word_splitter, WordSplitter::HyphenSplitter);
+ /// ```
+ ///
+ /// Note that the default word separator and wrap algorithms
+ /// changes based on the available Cargo features. The best
+ /// available algorithms are used by default.
+ pub const fn new(width: usize) -> Self {
+ Options {
+ width,
+ line_ending: LineEnding::LF,
+ initial_indent: "",
+ subsequent_indent: "",
+ break_words: true,
+ word_separator: WordSeparator::new(),
+ wrap_algorithm: WrapAlgorithm::new(),
+ word_splitter: WordSplitter::HyphenSplitter,
+ }
+ }
+
+ /// Change [`self.line_ending`]. This specifies which of the
+ /// supported line endings should be used to break the lines of the
+ /// input text.
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// use textwrap::{refill, LineEnding, Options};
+ ///
+ /// let options = Options::new(15).line_ending(LineEnding::CRLF);
+ /// assert_eq!(refill("This is a little example.", options),
+ /// "This is a\r\nlittle example.");
+ /// ```
+ ///
+ /// [`self.line_ending`]: #structfield.line_ending
+ pub fn line_ending(self, line_ending: LineEnding) -> Self {
+ Options {
+ line_ending,
+ ..self
+ }
+ }
+
+ /// Set [`self.width`] to the given value.
+ ///
+ /// [`self.width`]: #structfield.width
+ pub fn width(self, width: usize) -> Self {
+ Options { width, ..self }
+ }
+
+ /// Change [`self.initial_indent`]. The initial indentation is
+ /// used on the very first line of output.
+ ///
+ /// # Examples
+ ///
+ /// Classic paragraph indentation can be achieved by specifying an
+ /// initial indentation and wrapping each paragraph by itself:
+ ///
+ /// ```
+ /// use textwrap::{wrap, Options};
+ ///
+ /// let options = Options::new(16).initial_indent(" ");
+ /// assert_eq!(wrap("This is a little example.", options),
+ /// vec![" This is a",
+ /// "little example."]);
+ /// ```
+ ///
+ /// [`self.initial_indent`]: #structfield.initial_indent
+ pub fn initial_indent(self, initial_indent: &'a str) -> Self {
+ Options {
+ initial_indent,
+ ..self
+ }
+ }
+
+ /// Change [`self.subsequent_indent`]. The subsequent indentation
+ /// is used on lines following the first line of output.
+ ///
+ /// # Examples
+ ///
+ /// Combining initial and subsequent indentation lets you format a
+ /// single paragraph as a bullet list:
+ ///
+ /// ```
+ /// use textwrap::{wrap, Options};
+ ///
+ /// let options = Options::new(12)
+ /// .initial_indent("* ")
+ /// .subsequent_indent(" ");
+ /// #[cfg(feature = "smawk")]
+ /// assert_eq!(wrap("This is a little example.", options),
+ /// vec!["* This is",
+ /// " a little",
+ /// " example."]);
+ ///
+ /// // Without the `smawk` feature, the wrapping is a little different:
+ /// #[cfg(not(feature = "smawk"))]
+ /// assert_eq!(wrap("This is a little example.", options),
+ /// vec!["* This is a",
+ /// " little",
+ /// " example."]);
+ /// ```
+ ///
+ /// [`self.subsequent_indent`]: #structfield.subsequent_indent
+ pub fn subsequent_indent(self, subsequent_indent: &'a str) -> Self {
+ Options {
+ subsequent_indent,
+ ..self
+ }
+ }
+
+ /// Change [`self.break_words`]. This controls if words longer
+ /// than `self.width` can be broken, or if they will be left
+ /// sticking out into the right margin.
+ ///
+ /// See [`Options::word_splitter`] instead if you want to control
+ /// hyphenation.
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// use textwrap::{wrap, Options};
+ ///
+ /// let options = Options::new(4).break_words(true);
+ /// assert_eq!(wrap("This is a little example.", options),
+ /// vec!["This",
+ /// "is a",
+ /// "litt",
+ /// "le",
+ /// "exam",
+ /// "ple."]);
+ /// ```
+ ///
+ /// [`self.break_words`]: #structfield.break_words
+ pub fn break_words(self, break_words: bool) -> Self {
+ Options {
+ break_words,
+ ..self
+ }
+ }
+
+ /// Change [`self.word_separator`].
+ ///
+ /// See the [`WordSeparator`] trait for details on the choices.
+ ///
+ /// [`self.word_separator`]: #structfield.word_separator
+ pub fn word_separator(self, word_separator: WordSeparator) -> Options<'a> {
+ Options {
+ word_separator,
+ ..self
+ }
+ }
+
+ /// Change [`self.wrap_algorithm`].
+ ///
+ /// See the [`WrapAlgorithm`] trait for details on the choices.
+ ///
+ /// [`self.wrap_algorithm`]: #structfield.wrap_algorithm
+ pub fn wrap_algorithm(self, wrap_algorithm: WrapAlgorithm) -> Options<'a> {
+ Options {
+ wrap_algorithm,
+ ..self
+ }
+ }
+
+ /// Change [`self.word_splitter`]. The [`WordSplitter`] is used to
+ /// fit part of a word into the current line when wrapping text.
+ ///
+ /// See [`Options::break_words`] instead if you want to control the
+ /// handling of words longer than the line width.
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// use textwrap::{wrap, Options, WordSplitter};
+ ///
+ /// // The default is WordSplitter::HyphenSplitter.
+ /// let options = Options::new(5);
+ /// assert_eq!(wrap("foo-bar-baz", &options),
+ /// vec!["foo-", "bar-", "baz"]);
+ ///
+ /// // The word is now so long that break_words kick in:
+ /// let options = Options::new(5)
+ /// .word_splitter(WordSplitter::NoHyphenation);
+ /// assert_eq!(wrap("foo-bar-baz", &options),
+ /// vec!["foo-b", "ar-ba", "z"]);
+ ///
+ /// // If you want to breaks at all, disable both:
+ /// let options = Options::new(5)
+ /// .break_words(false)
+ /// .word_splitter(WordSplitter::NoHyphenation);
+ /// assert_eq!(wrap("foo-bar-baz", &options),
+ /// vec!["foo-bar-baz"]);
+ /// ```
+ ///
+ /// [`self.word_splitter`]: #structfield.word_splitter
+ pub fn word_splitter(self, word_splitter: WordSplitter) -> Options<'a> {
+ Options {
+ word_splitter,
+ ..self
+ }
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn options_agree_with_usize() {
+ let opt_usize = Options::from(42_usize);
+ let opt_options = Options::new(42);
+
+ assert_eq!(opt_usize.width, opt_options.width);
+ assert_eq!(opt_usize.initial_indent, opt_options.initial_indent);
+ assert_eq!(opt_usize.subsequent_indent, opt_options.subsequent_indent);
+ assert_eq!(opt_usize.break_words, opt_options.break_words);
+ assert_eq!(
+ opt_usize.word_splitter.split_points("hello-world"),
+ opt_options.word_splitter.split_points("hello-world")
+ );
+ }
+}
diff --git a/crates/textwrap/src/refill.rs b/crates/textwrap/src/refill.rs
new file mode 100644
index 0000000..1be85f0
--- /dev/null
+++ b/crates/textwrap/src/refill.rs
@@ -0,0 +1,352 @@
+//! Functionality for unfilling and refilling text.
+
+use crate::core::display_width;
+use crate::line_ending::NonEmptyLines;
+use crate::{fill, LineEnding, Options};
+
+/// Unpack a paragraph of already-wrapped text.
+///
+/// This function attempts to recover the original text from a single
+/// paragraph of wrapped text, such as what [`fill()`] would produce.
+/// This means that it turns
+///
+/// ```text
+/// textwrap: a small
+/// library for
+/// wrapping text.
+/// ```
+///
+/// back into
+///
+/// ```text
+/// textwrap: a small library for wrapping text.
+/// ```
+///
+/// In addition, it will recognize a common prefix and a common line
+/// ending among the lines.
+///
+/// The prefix of the first line is returned in
+/// [`Options::initial_indent`] and the prefix (if any) of the the
+/// other lines is returned in [`Options::subsequent_indent`].
+///
+/// Line ending is returned in [`Options::line_ending`]. If line ending
+/// can not be confidently detected (mixed or no line endings in the
+/// input), [`LineEnding::LF`] will be returned.
+///
+/// In addition to `' '`, the prefixes can consist of characters used
+/// for unordered lists (`'-'`, `'+'`, and `'*'`) and block quotes
+/// (`'>'`) in Markdown as well as characters often used for inline
+/// comments (`'#'` and `'/'`).
+///
+/// The text must come from a single wrapped paragraph. This means
+/// that there can be no empty lines (`"\n\n"` or `"\r\n\r\n"`) within
+/// the text. It is unspecified what happens if `unfill` is called on
+/// more than one paragraph of text.
+///
+/// # Examples
+///
+/// ```
+/// use textwrap::{LineEnding, unfill};
+///
+/// let (text, options) = unfill("\
+/// * This is an
+/// example of
+/// a list item.
+/// ");
+///
+/// assert_eq!(text, "This is an example of a list item.\n");
+/// assert_eq!(options.initial_indent, "* ");
+/// assert_eq!(options.subsequent_indent, " ");
+/// assert_eq!(options.line_ending, LineEnding::LF);
+/// ```
+pub fn unfill(text: &str) -> (String, Options<'_>) {
+ let prefix_chars: &[_] = &[' ', '-', '+', '*', '>', '#', '/'];
+
+ let mut options = Options::new(0);
+ for (idx, line) in text.lines().enumerate() {
+ options.width = std::cmp::max(options.width, display_width(line));
+ let without_prefix = line.trim_start_matches(prefix_chars);
+ let prefix = &line[..line.len() - without_prefix.len()];
+
+ if idx == 0 {
+ options.initial_indent = prefix;
+ } else if idx == 1 {
+ options.subsequent_indent = prefix;
+ } else if idx > 1 {
+ for ((idx, x), y) in prefix.char_indices().zip(options.subsequent_indent.chars()) {
+ if x != y {
+ options.subsequent_indent = &prefix[..idx];
+ break;
+ }
+ }
+ if prefix.len() < options.subsequent_indent.len() {
+ options.subsequent_indent = prefix;
+ }
+ }
+ }
+
+ let mut unfilled = String::with_capacity(text.len());
+ let mut detected_line_ending = None;
+
+ for (idx, (line, ending)) in NonEmptyLines(text).enumerate() {
+ if idx == 0 {
+ unfilled.push_str(&line[options.initial_indent.len()..]);
+ } else {
+ unfilled.push(' ');
+ unfilled.push_str(&line[options.subsequent_indent.len()..]);
+ }
+ match (detected_line_ending, ending) {
+ (None, Some(_)) => detected_line_ending = ending,
+ (Some(LineEnding::CRLF), Some(LineEnding::LF)) => detected_line_ending = ending,
+ _ => (),
+ }
+ }
+
+ // Add back a line ending if `text` ends with the one we detect.
+ if let Some(line_ending) = detected_line_ending {
+ if text.ends_with(line_ending.as_str()) {
+ unfilled.push_str(line_ending.as_str());
+ }
+ }
+
+ options.line_ending = detected_line_ending.unwrap_or(LineEnding::LF);
+ (unfilled, options)
+}
+
+/// Refill a paragraph of wrapped text with a new width.
+///
+/// This function will first use [`unfill()`] to remove newlines from
+/// the text. Afterwards the text is filled again using [`fill()`].
+///
+/// The `new_width_or_options` argument specify the new width and can
+/// specify other options as well — except for
+/// [`Options::initial_indent`] and [`Options::subsequent_indent`],
+/// which are deduced from `filled_text`.
+///
+/// # Examples
+///
+/// ```
+/// use textwrap::refill;
+///
+/// // Some loosely wrapped text. The "> " prefix is recognized automatically.
+/// let text = "\
+/// > Memory
+/// > safety without garbage
+/// > collection.
+/// ";
+///
+/// assert_eq!(refill(text, 20), "\
+/// > Memory safety
+/// > without garbage
+/// > collection.
+/// ");
+///
+/// assert_eq!(refill(text, 40), "\
+/// > Memory safety without garbage
+/// > collection.
+/// ");
+///
+/// assert_eq!(refill(text, 60), "\
+/// > Memory safety without garbage collection.
+/// ");
+/// ```
+///
+/// You can also reshape bullet points:
+///
+/// ```
+/// use textwrap::refill;
+///
+/// let text = "\
+/// - This is my
+/// list item.
+/// ";
+///
+/// assert_eq!(refill(text, 20), "\
+/// - This is my list
+/// item.
+/// ");
+/// ```
+pub fn refill<'a, Opt>(filled_text: &str, new_width_or_options: Opt) -> String
+where
+ Opt: Into<Options<'a>>,
+{
+ let mut new_options = new_width_or_options.into();
+ let (text, options) = unfill(filled_text);
+ // The original line ending is kept by `unfill`.
+ let stripped = text.strip_suffix(options.line_ending.as_str());
+ let new_line_ending = new_options.line_ending.as_str();
+
+ new_options.initial_indent = options.initial_indent;
+ new_options.subsequent_indent = options.subsequent_indent;
+ let mut refilled = fill(stripped.unwrap_or(&text), new_options);
+
+ // Add back right line ending if we stripped one off above.
+ if stripped.is_some() {
+ refilled.push_str(new_line_ending);
+ }
+ refilled
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn unfill_simple() {
+ let (text, options) = unfill("foo\nbar");
+ assert_eq!(text, "foo bar");
+ assert_eq!(options.width, 3);
+ assert_eq!(options.line_ending, LineEnding::LF);
+ }
+
+ #[test]
+ fn unfill_no_new_line() {
+ let (text, options) = unfill("foo bar");
+ assert_eq!(text, "foo bar");
+ assert_eq!(options.width, 7);
+ assert_eq!(options.line_ending, LineEnding::LF);
+ }
+
+ #[test]
+ fn unfill_simple_crlf() {
+ let (text, options) = unfill("foo\r\nbar");
+ assert_eq!(text, "foo bar");
+ assert_eq!(options.width, 3);
+ assert_eq!(options.line_ending, LineEnding::CRLF);
+ }
+
+ #[test]
+ fn unfill_mixed_new_lines() {
+ let (text, options) = unfill("foo\r\nbar\nbaz");
+ assert_eq!(text, "foo bar baz");
+ assert_eq!(options.width, 3);
+ assert_eq!(options.line_ending, LineEnding::LF);
+ }
+
+ #[test]
+ fn test_unfill_consecutive_different_prefix() {
+ let (text, options) = unfill("foo\n*\n/");
+ assert_eq!(text, "foo * /");
+ assert_eq!(options.width, 3);
+ assert_eq!(options.line_ending, LineEnding::LF);
+ }
+
+ #[test]
+ fn unfill_trailing_newlines() {
+ let (text, options) = unfill("foo\nbar\n\n\n");
+ assert_eq!(text, "foo bar\n");
+ assert_eq!(options.width, 3);
+ }
+
+ #[test]
+ fn unfill_mixed_trailing_newlines() {
+ let (text, options) = unfill("foo\r\nbar\n\r\n\n");
+ assert_eq!(text, "foo bar\n");
+ assert_eq!(options.width, 3);
+ assert_eq!(options.line_ending, LineEnding::LF);
+ }
+
+ #[test]
+ fn unfill_trailing_crlf() {
+ let (text, options) = unfill("foo bar\r\n");
+ assert_eq!(text, "foo bar\r\n");
+ assert_eq!(options.width, 7);
+ assert_eq!(options.line_ending, LineEnding::CRLF);
+ }
+
+ #[test]
+ fn unfill_initial_indent() {
+ let (text, options) = unfill(" foo\nbar\nbaz");
+ assert_eq!(text, "foo bar baz");
+ assert_eq!(options.width, 5);
+ assert_eq!(options.initial_indent, " ");
+ }
+
+ #[test]
+ fn unfill_differing_indents() {
+ let (text, options) = unfill(" foo\n bar\n baz");
+ assert_eq!(text, "foo bar baz");
+ assert_eq!(options.width, 7);
+ assert_eq!(options.initial_indent, " ");
+ assert_eq!(options.subsequent_indent, " ");
+ }
+
+ #[test]
+ fn unfill_list_item() {
+ let (text, options) = unfill("* foo\n bar\n baz");
+ assert_eq!(text, "foo bar baz");
+ assert_eq!(options.width, 5);
+ assert_eq!(options.initial_indent, "* ");
+ assert_eq!(options.subsequent_indent, " ");
+ }
+
+ #[test]
+ fn unfill_multiple_char_prefix() {
+ let (text, options) = unfill(" // foo bar\n // baz\n // quux");
+ assert_eq!(text, "foo bar baz quux");
+ assert_eq!(options.width, 14);
+ assert_eq!(options.initial_indent, " // ");
+ assert_eq!(options.subsequent_indent, " // ");
+ }
+
+ #[test]
+ fn unfill_block_quote() {
+ let (text, options) = unfill("> foo\n> bar\n> baz");
+ assert_eq!(text, "foo bar baz");
+ assert_eq!(options.width, 5);
+ assert_eq!(options.initial_indent, "> ");
+ assert_eq!(options.subsequent_indent, "> ");
+ }
+
+ #[test]
+ fn unfill_only_prefixes_issue_466() {
+ // Test that we don't crash if the first line has only prefix
+ // chars *and* the second line is shorter than the first line.
+ let (text, options) = unfill("######\nfoo");
+ assert_eq!(text, " foo");
+ assert_eq!(options.width, 6);
+ assert_eq!(options.initial_indent, "######");
+ assert_eq!(options.subsequent_indent, "");
+ }
+
+ #[test]
+ fn unfill_trailing_newlines_issue_466() {
+ // Test that we don't crash on a '\r' following a string of
+ // '\n'. The problem was that we removed both kinds of
+ // characters in one code path, but not in the other.
+ let (text, options) = unfill("foo\n##\n\n\r");
+ // The \n\n changes subsequent_indent to "".
+ assert_eq!(text, "foo ## \r");
+ assert_eq!(options.width, 3);
+ assert_eq!(options.initial_indent, "");
+ assert_eq!(options.subsequent_indent, "");
+ }
+
+ #[test]
+ fn unfill_whitespace() {
+ assert_eq!(unfill("foo bar").0, "foo bar");
+ }
+
+ #[test]
+ fn refill_convert_lf_to_crlf() {
+ let options = Options::new(5).line_ending(LineEnding::CRLF);
+ assert_eq!(refill("foo\nbar\n", options), "foo\r\nbar\r\n",);
+ }
+
+ #[test]
+ fn refill_convert_crlf_to_lf() {
+ let options = Options::new(5).line_ending(LineEnding::LF);
+ assert_eq!(refill("foo\r\nbar\r\n", options), "foo\nbar\n",);
+ }
+
+ #[test]
+ fn refill_convert_mixed_newlines() {
+ let options = Options::new(5).line_ending(LineEnding::CRLF);
+ assert_eq!(refill("foo\r\nbar\n", options), "foo\r\nbar\r\n",);
+ }
+
+ #[test]
+ fn refill_defaults_to_lf() {
+ assert_eq!(refill("foo bar baz", 5), "foo\nbar\nbaz");
+ }
+}
diff --git a/crates/textwrap/src/termwidth.rs b/crates/textwrap/src/termwidth.rs
new file mode 100644
index 0000000..5c66191
--- /dev/null
+++ b/crates/textwrap/src/termwidth.rs
@@ -0,0 +1,52 @@
+//! Functions related to the terminal size.
+
+use crate::Options;
+
+/// Return the current terminal width.
+///
+/// If the terminal width cannot be determined (typically because the
+/// standard output is not connected to a terminal), a default width
+/// of 80 characters will be used.
+///
+/// # Examples
+///
+/// Create an [`Options`] for wrapping at the current terminal width
+/// with a two column margin to the left and the right:
+///
+/// ```no_run
+/// use textwrap::{termwidth, Options};
+///
+/// let width = termwidth() - 4; // Two columns on each side.
+/// let options = Options::new(width)
+/// .initial_indent(" ")
+/// .subsequent_indent(" ");
+/// ```
+///
+/// **Note:** Only available when the `terminal_size` Cargo feature is
+/// enabled.
+pub fn termwidth() -> usize {
+ terminal_size::terminal_size().map_or(80, |(terminal_size::Width(w), _)| w.into())
+}
+
+impl<'a> Options<'a> {
+ /// Creates a new [`Options`] with `width` set to the current
+ /// terminal width. If the terminal width cannot be determined
+ /// (typically because the standard input and output is not
+ /// connected to a terminal), a width of 80 characters will be
+ /// used. Other settings use the same defaults as
+ /// [`Options::new`].
+ ///
+ /// Equivalent to:
+ ///
+ /// ```no_run
+ /// use textwrap::{termwidth, Options};
+ ///
+ /// let options = Options::new(termwidth());
+ /// ```
+ ///
+ /// **Note:** Only available when the `terminal_size` feature is
+ /// enabled.
+ pub fn with_termwidth() -> Self {
+ Self::new(termwidth())
+ }
+}
diff --git a/crates/textwrap/src/word_separators.rs b/crates/textwrap/src/word_separators.rs
index dc74e5e..e06e9b8 100644
--- a/crates/textwrap/src/word_separators.rs
+++ b/crates/textwrap/src/word_separators.rs
@@ -10,9 +10,9 @@
//! sequence of emojis is another example where line breaks might be
//! wanted even if there are no whitespace to be found.
//!
-//! The [`WordSeparator`] trait is responsible for determining where
-//! there words are in a line of text. Please refer to the trait and
-//! the structs which implement it for more information.
+//! The [`WordSeparator`] enum is responsible for determining where
+//! there words are in a line of text. Please refer to the enum and
+//! its variants for more information.
#[cfg(feature = "unicode-linebreak")]
use crate::core::skip_ansi_escape_sequence;
diff --git a/crates/textwrap/src/word_splitters.rs b/crates/textwrap/src/word_splitters.rs
index 69e246f..e2dc6aa 100644
--- a/crates/textwrap/src/word_splitters.rs
+++ b/crates/textwrap/src/word_splitters.rs
@@ -69,7 +69,7 @@
/// Use a custom function as the word splitter.
///
- /// This varian lets you implement a custom word splitter using
+ /// This variant lets you implement a custom word splitter using
/// your own function.
///
/// # Examples
diff --git a/crates/textwrap/src/wrap.rs b/crates/textwrap/src/wrap.rs
new file mode 100644
index 0000000..a7f2ccf
--- /dev/null
+++ b/crates/textwrap/src/wrap.rs
@@ -0,0 +1,686 @@
+//! Functions for wrapping text.
+
+use std::borrow::Cow;
+
+use crate::core::{break_words, display_width, Word};
+use crate::word_splitters::split_words;
+use crate::Options;
+
+/// Wrap a line of text at a given width.
+///
+/// The result is a vector of lines, each line is of type [`Cow<'_,
+/// str>`](Cow), which means that the line will borrow from the input
+/// `&str` if possible. The lines do not have trailing whitespace,
+/// including a final `'\n'`. Please use [`fill()`](crate::fill()) if
+/// you need a [`String`] instead.
+///
+/// The easiest way to use this function is to pass an integer for
+/// `width_or_options`:
+///
+/// ```
+/// use textwrap::wrap;
+///
+/// let lines = wrap("Memory safety without garbage collection.", 15);
+/// assert_eq!(lines, &[
+/// "Memory safety",
+/// "without garbage",
+/// "collection.",
+/// ]);
+/// ```
+///
+/// If you need to customize the wrapping, you can pass an [`Options`]
+/// instead of an `usize`:
+///
+/// ```
+/// use textwrap::{wrap, Options};
+///
+/// let options = Options::new(15)
+/// .initial_indent("- ")
+/// .subsequent_indent(" ");
+/// let lines = wrap("Memory safety without garbage collection.", &options);
+/// assert_eq!(lines, &[
+/// "- Memory safety",
+/// " without",
+/// " garbage",
+/// " collection.",
+/// ]);
+/// ```
+///
+/// # Optimal-Fit Wrapping
+///
+/// By default, `wrap` will try to ensure an even right margin by
+/// finding breaks which avoid short lines. We call this an
+/// “optimal-fit algorithm” since the line breaks are computed by
+/// considering all possible line breaks. The alternative is a
+/// “first-fit algorithm” which simply accumulates words until they no
+/// longer fit on the line.
+///
+/// As an example, using the first-fit algorithm to wrap the famous
+/// Hamlet quote “To be, or not to be: that is the question” in a
+/// narrow column with room for only 10 characters looks like this:
+///
+/// ```
+/// # use textwrap::{WrapAlgorithm::FirstFit, Options, wrap};
+/// #
+/// # let lines = wrap("To be, or not to be: that is the question",
+/// # Options::new(10).wrap_algorithm(FirstFit));
+/// # assert_eq!(lines.join("\n") + "\n", "\
+/// To be, or
+/// not to be:
+/// that is
+/// the
+/// question
+/// # ");
+/// ```
+///
+/// Notice how the second to last line is quite narrow because
+/// “question” was too large to fit? The greedy first-fit algorithm
+/// doesn’t look ahead, so it has no other option than to put
+/// “question” onto its own line.
+///
+/// With the optimal-fit wrapping algorithm, the previous lines are
+/// shortened slightly in order to make the word “is” go into the
+/// second last line:
+///
+/// ```
+/// # #[cfg(feature = "smawk")] {
+/// # use textwrap::{Options, WrapAlgorithm, wrap};
+/// #
+/// # let lines = wrap(
+/// # "To be, or not to be: that is the question",
+/// # Options::new(10).wrap_algorithm(WrapAlgorithm::new_optimal_fit())
+/// # );
+/// # assert_eq!(lines.join("\n") + "\n", "\
+/// To be,
+/// or not to
+/// be: that
+/// is the
+/// question
+/// # "); }
+/// ```
+///
+/// Please see [`WrapAlgorithm`](crate::WrapAlgorithm) for details on
+/// the choices.
+///
+/// # Examples
+///
+/// The returned iterator yields lines of type `Cow<'_, str>`. If
+/// possible, the wrapped lines will borrow from the input string. As
+/// an example, a hanging indentation, the first line can borrow from
+/// the input, but the subsequent lines become owned strings:
+///
+/// ```
+/// use std::borrow::Cow::{Borrowed, Owned};
+/// use textwrap::{wrap, Options};
+///
+/// let options = Options::new(15).subsequent_indent("....");
+/// let lines = wrap("Wrapping text all day long.", &options);
+/// let annotated = lines
+/// .iter()
+/// .map(|line| match line {
+/// Borrowed(text) => format!("[Borrowed] {}", text),
+/// Owned(text) => format!("[Owned] {}", text),
+/// })
+/// .collect::<Vec<_>>();
+/// assert_eq!(
+/// annotated,
+/// &[
+/// "[Borrowed] Wrapping text",
+/// "[Owned] ....all day",
+/// "[Owned] ....long.",
+/// ]
+/// );
+/// ```
+///
+/// ## Leading and Trailing Whitespace
+///
+/// As a rule, leading whitespace (indentation) is preserved and
+/// trailing whitespace is discarded.
+///
+/// In more details, when wrapping words into lines, words are found
+/// by splitting the input text on space characters. One or more
+/// spaces (shown here as “␣”) are attached to the end of each word:
+///
+/// ```text
+/// "Foo␣␣␣bar␣baz" -> ["Foo␣␣␣", "bar␣", "baz"]
+/// ```
+///
+/// These words are then put into lines. The interword whitespace is
+/// preserved, unless the lines are wrapped so that the `"Foo␣␣␣"`
+/// word falls at the end of a line:
+///
+/// ```
+/// use textwrap::wrap;
+///
+/// assert_eq!(wrap("Foo bar baz", 10), vec!["Foo bar", "baz"]);
+/// assert_eq!(wrap("Foo bar baz", 8), vec!["Foo", "bar baz"]);
+/// ```
+///
+/// Notice how the trailing whitespace is removed in both case: in the
+/// first example, `"bar␣"` becomes `"bar"` and in the second case
+/// `"Foo␣␣␣"` becomes `"Foo"`.
+///
+/// Leading whitespace is preserved when the following word fits on
+/// the first line. To understand this, consider how words are found
+/// in a text with leading spaces:
+///
+/// ```text
+/// "␣␣foo␣bar" -> ["␣␣", "foo␣", "bar"]
+/// ```
+///
+/// When put into lines, the indentation is preserved if `"foo"` fits
+/// on the first line, otherwise you end up with an empty line:
+///
+/// ```
+/// use textwrap::wrap;
+///
+/// assert_eq!(wrap(" foo bar", 8), vec![" foo", "bar"]);
+/// assert_eq!(wrap(" foo bar", 4), vec!["", "foo", "bar"]);
+/// ```
+pub fn wrap<'a, Opt>(text: &str, width_or_options: Opt) -> Vec<Cow<'_, str>>
+where
+ Opt: Into<Options<'a>>,
+{
+ let options: Options = width_or_options.into();
+ let line_ending_str = options.line_ending.as_str();
+
+ let mut lines = Vec::new();
+ for line in text.split(line_ending_str) {
+ wrap_single_line(line, &options, &mut lines);
+ }
+
+ lines
+}
+
+pub(crate) fn wrap_single_line<'a>(
+ line: &'a str,
+ options: &Options<'_>,
+ lines: &mut Vec<Cow<'a, str>>,
+) {
+ let indent = if lines.is_empty() {
+ options.initial_indent
+ } else {
+ options.subsequent_indent
+ };
+ if line.len() < options.width && indent.is_empty() {
+ lines.push(Cow::from(line.trim_end_matches(' ')));
+ } else {
+ wrap_single_line_slow_path(line, options, lines)
+ }
+}
+
+/// Wrap a single line of text.
+///
+/// This is taken when `line` is longer than `options.width`.
+pub(crate) fn wrap_single_line_slow_path<'a>(
+ line: &'a str,
+ options: &Options<'_>,
+ lines: &mut Vec<Cow<'a, str>>,
+) {
+ let initial_width = options
+ .width
+ .saturating_sub(display_width(options.initial_indent));
+ let subsequent_width = options
+ .width
+ .saturating_sub(display_width(options.subsequent_indent));
+ let line_widths = [initial_width, subsequent_width];
+
+ let words = options.word_separator.find_words(line);
+ let split_words = split_words(words, &options.word_splitter);
+ let broken_words = if options.break_words {
+ let mut broken_words = break_words(split_words, line_widths[1]);
+ if !options.initial_indent.is_empty() {
+ // Without this, the first word will always go into the
+ // first line. However, since we break words based on the
+ // _second_ line width, it can be wrong to unconditionally
+ // put the first word onto the first line. An empty
+ // zero-width word fixed this.
+ broken_words.insert(0, Word::from(""));
+ }
+ broken_words
+ } else {
+ split_words.collect::<Vec<_>>()
+ };
+
+ let wrapped_words = options.wrap_algorithm.wrap(&broken_words, &line_widths);
+
+ let mut idx = 0;
+ for words in wrapped_words {
+ let last_word = match words.last() {
+ None => {
+ lines.push(Cow::from(""));
+ continue;
+ }
+ Some(word) => word,
+ };
+
+ // We assume here that all words are contiguous in `line`.
+ // That is, the sum of their lengths should add up to the
+ // length of `line`.
+ let len = words
+ .iter()
+ .map(|word| word.len() + word.whitespace.len())
+ .sum::<usize>()
+ - last_word.whitespace.len();
+
+ // The result is owned if we have indentation, otherwise we
+ // can simply borrow an empty string.
+ let mut result = if lines.is_empty() && !options.initial_indent.is_empty() {
+ Cow::Owned(options.initial_indent.to_owned())
+ } else if !lines.is_empty() && !options.subsequent_indent.is_empty() {
+ Cow::Owned(options.subsequent_indent.to_owned())
+ } else {
+ // We can use an empty string here since string
+ // concatenation for `Cow` preserves a borrowed value when
+ // either side is empty.
+ Cow::from("")
+ };
+
+ result += &line[idx..idx + len];
+
+ if !last_word.penalty.is_empty() {
+ result.to_mut().push_str(last_word.penalty);
+ }
+
+ lines.push(result);
+
+ // Advance by the length of `result`, plus the length of
+ // `last_word.whitespace` -- even if we had a penalty, we need
+ // to skip over the whitespace.
+ idx += len + last_word.whitespace.len();
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::{WordSeparator, WordSplitter, WrapAlgorithm};
+
+ #[cfg(feature = "hyphenation")]
+ use hyphenation::{Language, Load, Standard};
+
+ #[test]
+ fn no_wrap() {
+ assert_eq!(wrap("foo", 10), vec!["foo"]);
+ }
+
+ #[test]
+ fn wrap_simple() {
+ assert_eq!(wrap("foo bar baz", 5), vec!["foo", "bar", "baz"]);
+ }
+
+ #[test]
+ fn to_be_or_not() {
+ assert_eq!(
+ wrap(
+ "To be, or not to be, that is the question.",
+ Options::new(10).wrap_algorithm(WrapAlgorithm::FirstFit)
+ ),
+ vec!["To be, or", "not to be,", "that is", "the", "question."]
+ );
+ }
+
+ #[test]
+ fn multiple_words_on_first_line() {
+ assert_eq!(wrap("foo bar baz", 10), vec!["foo bar", "baz"]);
+ }
+
+ #[test]
+ fn long_word() {
+ assert_eq!(wrap("foo", 0), vec!["f", "o", "o"]);
+ }
+
+ #[test]
+ fn long_words() {
+ assert_eq!(wrap("foo bar", 0), vec!["f", "o", "o", "b", "a", "r"]);
+ }
+
+ #[test]
+ fn max_width() {
+ assert_eq!(wrap("foo bar", usize::MAX), vec!["foo bar"]);
+
+ let text = "Hello there! This is some English text. \
+ It should not be wrapped given the extents below.";
+ assert_eq!(wrap(text, usize::MAX), vec![text]);
+ }
+
+ #[test]
+ fn leading_whitespace() {
+ assert_eq!(wrap(" foo bar", 6), vec![" foo", "bar"]);
+ }
+
+ #[test]
+ fn leading_whitespace_empty_first_line() {
+ // If there is no space for the first word, the first line
+ // will be empty. This is because the string is split into
+ // words like [" ", "foobar ", "baz"], which puts "foobar " on
+ // the second line. We never output trailing whitespace
+ assert_eq!(wrap(" foobar baz", 6), vec!["", "foobar", "baz"]);
+ }
+
+ #[test]
+ fn trailing_whitespace() {
+ // Whitespace is only significant inside a line. After a line
+ // gets too long and is broken, the first word starts in
+ // column zero and is not indented.
+ assert_eq!(wrap("foo bar baz ", 5), vec!["foo", "bar", "baz"]);
+ }
+
+ #[test]
+ fn issue_99() {
+ // We did not reset the in_whitespace flag correctly and did
+ // not handle single-character words after a line break.
+ assert_eq!(
+ wrap("aaabbbccc x yyyzzzwww", 9),
+ vec!["aaabbbccc", "x", "yyyzzzwww"]
+ );
+ }
+
+ #[test]
+ fn issue_129() {
+ // The dash is an em-dash which takes up four bytes. We used
+ // to panic since we tried to index into the character.
+ let options = Options::new(1).word_separator(WordSeparator::AsciiSpace);
+ assert_eq!(wrap("x – x", options), vec!["x", "–", "x"]);
+ }
+
+ #[test]
+ fn wide_character_handling() {
+ assert_eq!(wrap("Hello, World!", 15), vec!["Hello, World!"]);
+ assert_eq!(
+ wrap(
+ "Hello, World!",
+ Options::new(15).word_separator(WordSeparator::AsciiSpace)
+ ),
+ vec!["Hello,", "World!"]
+ );
+
+ // Wide characters are allowed to break if the
+ // unicode-linebreak feature is enabled.
+ #[cfg(feature = "unicode-linebreak")]
+ assert_eq!(
+ wrap(
+ "Hello, World!",
+ Options::new(15).word_separator(WordSeparator::UnicodeBreakProperties),
+ ),
+ vec!["Hello, W", "orld!"]
+ );
+ }
+
+ #[test]
+ fn indent_empty_line() {
+ // Previously, indentation was not applied to empty lines.
+ // However, this is somewhat inconsistent and undesirable if
+ // the indentation is something like a border ("| ") which you
+ // want to apply to all lines, empty or not.
+ let options = Options::new(10).initial_indent("!!!");
+ assert_eq!(wrap("", &options), vec!["!!!"]);
+ }
+
+ #[test]
+ fn indent_single_line() {
+ let options = Options::new(10).initial_indent(">>>"); // No trailing space
+ assert_eq!(wrap("foo", &options), vec![">>>foo"]);
+ }
+
+ #[test]
+ fn indent_first_emoji() {
+ let options = Options::new(10).initial_indent("👉👉");
+ assert_eq!(
+ wrap("x x x x x x x x x x x x x", &options),
+ vec!["👉👉x x x", "x x x x x", "x x x x x"]
+ );
+ }
+
+ #[test]
+ fn indent_multiple_lines() {
+ let options = Options::new(6).initial_indent("* ").subsequent_indent(" ");
+ assert_eq!(
+ wrap("foo bar baz", &options),
+ vec!["* foo", " bar", " baz"]
+ );
+ }
+
+ #[test]
+ fn only_initial_indent_multiple_lines() {
+ let options = Options::new(10).initial_indent(" ");
+ assert_eq!(wrap("foo\nbar\nbaz", &options), vec![" foo", "bar", "baz"]);
+ }
+
+ #[test]
+ fn only_subsequent_indent_multiple_lines() {
+ let options = Options::new(10).subsequent_indent(" ");
+ assert_eq!(
+ wrap("foo\nbar\nbaz", &options),
+ vec!["foo", " bar", " baz"]
+ );
+ }
+
+ #[test]
+ fn indent_break_words() {
+ let options = Options::new(5).initial_indent("* ").subsequent_indent(" ");
+ assert_eq!(wrap("foobarbaz", &options), vec!["* foo", " bar", " baz"]);
+ }
+
+ #[test]
+ fn initial_indent_break_words() {
+ // This is a corner-case showing how the long word is broken
+ // according to the width of the subsequent lines. The first
+ // fragment of the word no longer fits on the first line,
+ // which ends up being pure indentation.
+ let options = Options::new(5).initial_indent("-->");
+ assert_eq!(wrap("foobarbaz", &options), vec!["-->", "fooba", "rbaz"]);
+ }
+
+ #[test]
+ fn hyphens() {
+ assert_eq!(wrap("foo-bar", 5), vec!["foo-", "bar"]);
+ }
+
+ #[test]
+ fn trailing_hyphen() {
+ let options = Options::new(5).break_words(false);
+ assert_eq!(wrap("foobar-", &options), vec!["foobar-"]);
+ }
+
+ #[test]
+ fn multiple_hyphens() {
+ assert_eq!(wrap("foo-bar-baz", 5), vec!["foo-", "bar-", "baz"]);
+ }
+
+ #[test]
+ fn hyphens_flag() {
+ let options = Options::new(5).break_words(false);
+ assert_eq!(
+ wrap("The --foo-bar flag.", &options),
+ vec!["The", "--foo-", "bar", "flag."]
+ );
+ }
+
+ #[test]
+ fn repeated_hyphens() {
+ let options = Options::new(4).break_words(false);
+ assert_eq!(wrap("foo--bar", &options), vec!["foo--bar"]);
+ }
+
+ #[test]
+ fn hyphens_alphanumeric() {
+ assert_eq!(wrap("Na2-CH4", 5), vec!["Na2-", "CH4"]);
+ }
+
+ #[test]
+ fn hyphens_non_alphanumeric() {
+ let options = Options::new(5).break_words(false);
+ assert_eq!(wrap("foo(-)bar", &options), vec!["foo(-)bar"]);
+ }
+
+ #[test]
+ fn multiple_splits() {
+ assert_eq!(wrap("foo-bar-baz", 9), vec!["foo-bar-", "baz"]);
+ }
+
+ #[test]
+ fn forced_split() {
+ let options = Options::new(5).break_words(false);
+ assert_eq!(wrap("foobar-baz", &options), vec!["foobar-", "baz"]);
+ }
+
+ #[test]
+ fn multiple_unbroken_words_issue_193() {
+ let options = Options::new(3).break_words(false);
+ assert_eq!(
+ wrap("small large tiny", &options),
+ vec!["small", "large", "tiny"]
+ );
+ assert_eq!(
+ wrap("small large tiny", &options),
+ vec!["small", "large", "tiny"]
+ );
+ }
+
+ #[test]
+ fn very_narrow_lines_issue_193() {
+ let options = Options::new(1).break_words(false);
+ assert_eq!(wrap("fooo x y", &options), vec!["fooo", "x", "y"]);
+ assert_eq!(wrap("fooo x y", &options), vec!["fooo", "x", "y"]);
+ }
+
+ #[test]
+ fn simple_hyphens() {
+ let options = Options::new(8).word_splitter(WordSplitter::HyphenSplitter);
+ assert_eq!(wrap("foo bar-baz", &options), vec!["foo bar-", "baz"]);
+ }
+
+ #[test]
+ fn no_hyphenation() {
+ let options = Options::new(8).word_splitter(WordSplitter::NoHyphenation);
+ assert_eq!(wrap("foo bar-baz", &options), vec!["foo", "bar-baz"]);
+ }
+
+ #[test]
+ #[cfg(feature = "hyphenation")]
+ fn auto_hyphenation_double_hyphenation() {
+ let dictionary = Standard::from_embedded(Language::EnglishUS).unwrap();
+ let options = Options::new(10);
+ assert_eq!(
+ wrap("Internationalization", &options),
+ vec!["Internatio", "nalization"]
+ );
+
+ let options = Options::new(10).word_splitter(WordSplitter::Hyphenation(dictionary));
+ assert_eq!(
+ wrap("Internationalization", &options),
+ vec!["Interna-", "tionaliza-", "tion"]
+ );
+ }
+
+ #[test]
+ #[cfg(feature = "hyphenation")]
+ fn auto_hyphenation_issue_158() {
+ let dictionary = Standard::from_embedded(Language::EnglishUS).unwrap();
+ let options = Options::new(10);
+ assert_eq!(
+ wrap("participation is the key to success", &options),
+ vec!["participat", "ion is", "the key to", "success"]
+ );
+
+ let options = Options::new(10).word_splitter(WordSplitter::Hyphenation(dictionary));
+ assert_eq!(
+ wrap("participation is the key to success", &options),
+ vec!["partici-", "pation is", "the key to", "success"]
+ );
+ }
+
+ #[test]
+ #[cfg(feature = "hyphenation")]
+ fn split_len_hyphenation() {
+ // Test that hyphenation takes the width of the whitespace
+ // into account.
+ let dictionary = Standard::from_embedded(Language::EnglishUS).unwrap();
+ let options = Options::new(15).word_splitter(WordSplitter::Hyphenation(dictionary));
+ assert_eq!(
+ wrap("garbage collection", &options),
+ vec!["garbage col-", "lection"]
+ );
+ }
+
+ #[test]
+ #[cfg(feature = "hyphenation")]
+ fn borrowed_lines() {
+ // Lines that end with an extra hyphen are owned, the final
+ // line is borrowed.
+ use std::borrow::Cow::{Borrowed, Owned};
+ let dictionary = Standard::from_embedded(Language::EnglishUS).unwrap();
+ let options = Options::new(10).word_splitter(WordSplitter::Hyphenation(dictionary));
+ let lines = wrap("Internationalization", &options);
+ assert_eq!(lines, vec!["Interna-", "tionaliza-", "tion"]);
+ if let Borrowed(s) = lines[0] {
+ assert!(false, "should not have been borrowed: {:?}", s);
+ }
+ if let Borrowed(s) = lines[1] {
+ assert!(false, "should not have been borrowed: {:?}", s);
+ }
+ if let Owned(ref s) = lines[2] {
+ assert!(false, "should not have been owned: {:?}", s);
+ }
+ }
+
+ #[test]
+ #[cfg(feature = "hyphenation")]
+ fn auto_hyphenation_with_hyphen() {
+ let dictionary = Standard::from_embedded(Language::EnglishUS).unwrap();
+ let options = Options::new(8).break_words(false);
+ assert_eq!(
+ wrap("over-caffinated", &options),
+ vec!["over-", "caffinated"]
+ );
+
+ let options = options.word_splitter(WordSplitter::Hyphenation(dictionary));
+ assert_eq!(
+ wrap("over-caffinated", &options),
+ vec!["over-", "caffi-", "nated"]
+ );
+ }
+
+ #[test]
+ fn break_words() {
+ assert_eq!(wrap("foobarbaz", 3), vec!["foo", "bar", "baz"]);
+ }
+
+ #[test]
+ fn break_words_wide_characters() {
+ // Even the poor man's version of `ch_width` counts these
+ // characters as wide.
+ let options = Options::new(5).word_separator(WordSeparator::AsciiSpace);
+ assert_eq!(wrap("Hello", options), vec!["He", "ll", "o"]);
+ }
+
+ #[test]
+ fn break_words_zero_width() {
+ assert_eq!(wrap("foobar", 0), vec!["f", "o", "o", "b", "a", "r"]);
+ }
+
+ #[test]
+ fn break_long_first_word() {
+ assert_eq!(wrap("testx y", 4), vec!["test", "x y"]);
+ }
+
+ #[test]
+ fn wrap_preserves_line_breaks_trims_whitespace() {
+ assert_eq!(wrap(" ", 80), vec![""]);
+ assert_eq!(wrap(" \n ", 80), vec!["", ""]);
+ assert_eq!(wrap(" \n \n \n ", 80), vec!["", "", "", ""]);
+ }
+
+ #[test]
+ fn wrap_colored_text() {
+ // The words are much longer than 6 bytes, but they remain
+ // intact after filling the text.
+ let green_hello = "\u{1b}[0m\u{1b}[32mHello\u{1b}[0m";
+ let blue_world = "\u{1b}[0m\u{1b}[34mWorld!\u{1b}[0m";
+ assert_eq!(
+ wrap(&format!("{} {}", green_hello, blue_world), 6),
+ vec![green_hello, blue_world],
+ );
+ }
+}
diff --git a/crates/textwrap/src/wrap_algorithms.rs b/crates/textwrap/src/wrap_algorithms.rs
index eef9b33..7737e08 100644
--- a/crates/textwrap/src/wrap_algorithms.rs
+++ b/crates/textwrap/src/wrap_algorithms.rs
@@ -2,15 +2,17 @@
//!
//! After a text has been broken into words (or [`Fragment`]s), one
//! now has to decide how to break the fragments into lines. The
-//! simplest algorithm for this is implemented by [`wrap_first_fit`]:
-//! it uses no look-ahead and simply adds fragments to the line as
-//! long as they fit. However, this can lead to poor line breaks if a
-//! large fragment almost-but-not-quite fits on a line. When that
-//! happens, the fragment is moved to the next line and it will leave
-//! behind a large gap. A more advanced algorithm, implemented by
-//! [`wrap_optimal_fit`], will take this into account. The optimal-fit
-//! algorithm considers all possible line breaks and will attempt to
-//! minimize the gaps left behind by overly short lines.
+//! simplest algorithm for this is implemented by
+//! [`wrap_first_fit()`]: it uses no look-ahead and simply adds
+//! fragments to the line as long as they fit. However, this can lead
+//! to poor line breaks if a large fragment almost-but-not-quite fits
+//! on a line. When that happens, the fragment is moved to the next
+//! line and it will leave behind a large gap.
+//!
+//! A more advanced algorithm, implemented by [`wrap_optimal_fit()`],
+//! will take this into account. The optimal-fit algorithm considers
+//! all possible line breaks and will attempt to minimize the gaps
+//! left behind by overly short lines.
//!
//! While both algorithms run in linear time, the first-fit algorithm
//! is about 4 times faster than the optimal-fit algorithm.
@@ -35,8 +37,8 @@
/// Wrap words using a fast and simple algorithm.
///
/// This algorithm uses no look-ahead when finding line breaks.
- /// Implemented by [`wrap_first_fit`], please see that function for
- /// details and examples.
+ /// Implemented by [`wrap_first_fit()`], please see that function
+ /// for details and examples.
FirstFit,
/// Wrap words using an advanced algorithm with look-ahead.
@@ -47,7 +49,7 @@
/// lines. See [`Penalties`] for details.
///
/// The underlying wrapping algorithm is implemented by
- /// [`wrap_optimal_fit`], please see that function for examples.
+ /// [`wrap_optimal_fit()`], please see that function for examples.
///
/// **Note:** Only available when the `smawk` Cargo feature is
/// enabled.
@@ -99,7 +101,7 @@
/// }
/// ```
///
- /// Note that `WrapAlgorithm::Custom1` values never compare equal:
+ /// Note that `WrapAlgorithm::Custom` values never compare equal:
///
/// ```
/// use textwrap::WrapAlgorithm;
@@ -178,7 +180,7 @@
#[cfg(feature = "smawk")]
WrapAlgorithm::OptimalFit(penalties) => {
- // The computation cannnot overflow when the line
+ // The computation cannot overflow when the line
// widths are restricted to usize.
wrap_optimal_fit(words, &f64_line_widths, penalties).unwrap()
}
@@ -248,10 +250,10 @@
/// "nicely."]);
/// ```
///
-/// The [`wrap_optimal_fit`] function was used above to get better
+/// The [`wrap_optimal_fit()`] function was used above to get better
/// line breaks. It uses an advanced algorithm which tries to avoid
/// short lines. This function is about 4 times faster than
-/// [`wrap_optimal_fit`].
+/// [`wrap_optimal_fit()`].
///
/// # Examples
///
@@ -342,9 +344,9 @@
///
/// Apologies to anyone who actually knows how to build a house and
/// knows how long each step takes :-)
-pub fn wrap_first_fit<'a, 'b, T: Fragment>(
+pub fn wrap_first_fit<'a, T: Fragment>(
fragments: &'a [T],
- line_widths: &'b [f64],
+ line_widths: &[f64],
) -> Vec<&'a [T]> {
// The final line width is used for all remaining lines.
let default_line_width = line_widths.last().copied().unwrap_or(0.0);
diff --git a/crates/textwrap/src/wrap_algorithms/optimal_fit.rs b/crates/textwrap/src/wrap_algorithms/optimal_fit.rs
index ef2f333..bdc0334 100644
--- a/crates/textwrap/src/wrap_algorithms/optimal_fit.rs
+++ b/crates/textwrap/src/wrap_algorithms/optimal_fit.rs
@@ -19,7 +19,7 @@
///
/// **Note:** Only available when the `smawk` Cargo feature is
/// enabled.
-#[derive(Clone, Copy, Debug, PartialEq)]
+#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct Penalties {
/// Per-line penalty. This is added for every line, which makes it
/// expensive to output more lines than the minimum required.
@@ -255,8 +255,8 @@
///
/// This means that the time complexity remains O(_n_) where _n_ is
/// the number of words. Compared to
-/// [`wrap_first_fit`](super::wrap_first_fit), this function is about
-/// 4 times slower.
+/// [`wrap_first_fit()`](super::wrap_first_fit), this function is
+/// about 4 times slower.
///
/// The optimization of per-line costs over the entire paragraph is
/// inspired by the line breaking algorithm used in TeX, as described
diff --git a/crates/tokio-stream/.android-checksum.json b/crates/tokio-stream/.android-checksum.json
new file mode 100644
index 0000000..708cdc1
--- /dev/null
+++ b/crates/tokio-stream/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"tests/support/mpsc.rs":"9c7847658306eec5c253d55faf680a0a18112763a8234ab373656ce99aed2fef","CHANGELOG.md":"b123c4aba484efdff1118be95c794812c9dcdef36c239fdddee27fb1a5384b35","src/empty.rs":"13efa3ca6da38af71bcc89827c7b2e9153fa1c37a4476d4d3edd0ec0b0302b0d","MODULE_LICENSE_MIT":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","src/stream_ext/map.rs":"2ea66491c65d5826df6db1331f1e3ff39b3051ff6b15e9e998ee88ba5667d5c3","src/stream_ext/throttle.rs":"7d13c25575db18b7ec0cbece71c1947fdf20f9ee179c8c6c8cc568a613fd67c6","tests/stream_close.rs":"13497c332740b6538e1c45ccba69e3ff4bf013804c69a82936eaba6bdb256952","LICENSE":"881db8208c504902c011b835aaa83db90999f55d19988d2953a63d8724cefba3","src/wrappers/signal_unix.rs":"b71d8c02f58c9cb955a58a2e4c0bbc4a8fb3be3f3ffd90653397f8e2ed1f7630","src/stream_ext/filter.rs":"56dabc202e5ba25baf9e6b99a393f380c86ee1b5275de4e00df64ec6fe30daf1","src/wrappers/tcp_listener.rs":"2db38b53efd54b80af6e747d733d0ada0f367728a2955b8838ac2207fdf1bb1b","src/stream_ext/try_next.rs":"fdba5595bb94cc4169e77abdaaefa6b095ad84eed2de633636cf870e5573e014","src/lib.rs":"773a8e6da0bf62c62899939949e60002f4b2799b50993b49825ce254078134fc","src/wrappers.rs":"1ae76333c1ad5f9f9d15bf8733e477d165b9bb783981d782a9915fed0f7f2583","src/stream_ext/timeout_repeating.rs":"5e8786c4f780b4494b683497884d410e777a943d4a478ebcf09abaafc75875df","tests/stream_fuse.rs":"77d829ca36c3ca51aafc351e5d6a8c82ded78304472d382c6f3a21452a316a4a","src/stream_ext/merge.rs":"f5b268a4dce6decfb84902cb7782ce56280b40c3cfe146a03910bd91dca3d09b","src/stream_map.rs":"2c958d5987636513c5508e73a88c05090b8fd7c702cccb073d21a5ff0a042a2b","Android.bp":"d1aefff4a8cd55661c116770f9e1af83b2771dad92f4aad7341e598857aa32a0","Cargo.toml":"e4a182c20655ed3d63f24edb1a1e9c3712ff785be0216058fb2fd9913aa16810","src/stream_ext/collect.rs":"5f5fd7a284aa34e7537a0967fba1991d38a9cda646d482b56d393a9bcf30b6a6","src/wrappers/watch.rs":"f82ad619c70afedad00a8517d9586cdbe0074e640cf70dd65618a7e4092ee6c8","src/stream_ext/fuse.rs":"77bc3dad279f42413be02ce83b0be1a446cb67ddb7e02f0c1321a3aaaf20a241","src/stream_ext/then.rs":"6dff9b12f18f0e396a78d764ae11214b6df01ae70a01628dcbd209563ef784f3","tests/stream_pending.rs":"809c8cc1115d08a47ffebce9d73a90d578177cb6e1d5c37d8b0af5b8ab406525","tests/chunks_timeout.rs":"ebe3ed8975fbd5cf7163d6258b0b3747b09722a41611a9804e6a9243d322f0fd","src/stream_close.rs":"e5a732a0893ec66d2ea9b77511f429075aca9e0b193e85beaa3a9df0f7c66ede","src/wrappers/mpsc_unbounded.rs":"86f4597bea7930699513706774f7a15d989df4a81505a567630f11aa7e7a52e4","src/stream_ext/any.rs":"1f52c881c9c1631b000c54d8ad57ff3b3b10f072c0062356574e969670a8d59e","src/stream_ext/skip.rs":"40584088e1a7767cce5e3505a6791a430d7c8039a35d7ad5e3dbfba42d89e118","src/stream_ext/chain.rs":"591724be8f781ba752fb190810b17903dcb4f0dec75b8e2685a69dd676c38ee4","tests/stream_stream_map.rs":"35d79b53dd94d21a742ee9fc7b5d2955942da51afa0a600b0a24d3283eb5f9b8","src/wrappers/split.rs":"ce94bfab70ca5f477433bdd277368ae1ca11840f197af118d5276ce7cd5e0779","src/iter.rs":"e4d62ce64e1823a600e5f859e74715d7a0b8378e9df4caa2e6c827b6d28fc7ce","tests/stream_panic.rs":"eb96f929cd0831b0249c466fb43435acef6f3466c739e51a7861859a2ebd3480","cargo_embargo.json":"011b403554c58c84ae69731093405c91329e8f6e329ef8c272ab60abd37c8fd8","src/wrappers/interval.rs":"5882c1af4b7daf4e59b31dc845afe1be680f60f21a53ef56a78f236a3d5b666a","src/wrappers/broadcast.rs":"813366ec5a683cf3a83417bb8f382803a46fb4ffe4bd50cf605f15a74f163884","README.md":"065ef99d53272fa16884ac1a47e22cda36a4b8cfe145be9b206f5da2fb825701","tests/stream_iter.rs":"d0d14d73a1cda4caafedc84bcfd6e0bb0ad399a36b8073571e3c3681f242833f","src/stream_ext/skip_while.rs":"b9b4241b9594c71deeff37e0e1240f31b359f873a2afdf47dbd8508fe2655e4f","src/stream_ext/take.rs":"2b31ec2aed8128db49947512f9bcc050a97bed4d72bcdb116043cdc7c134c9b9","src/stream_ext.rs":"ac231fb1ea1482f74eaaa2dc813cc7b98558414c4e78f07598d88a7c300ca96d","src/wrappers/unix_listener.rs":"faad91a63bc668993131f95111ac2c0b87318f8064d59e8a2208932ec5817162","src/wrappers/mpsc_bounded.rs":"0a3de6aa4949fa465b6ad9580dec84c8a213f3adb6a9b477b5ec3d78b8ac43c4","src/wrappers/lines.rs":"8afe11b13ba5874c7d41e67a49d4c59a28aef39cca9144c1c2ee5758a470d94b","src/stream_ext/timeout.rs":"18898ded8ba77bdc6b05e0e672d7122de9fe7ae295e300cb521a12fb226e640d","tests/stream_collect.rs":"cbd851b0841c93cc228a9d2513621161ac1661bc5a438a9244771f7f2a0c680d","src/wrappers/signal_windows.rs":"d0ccb813424472569856cb8bdd4eff07e39ea61e9d6d8fbe7a1e50857e499848","src/stream_ext/chunks_timeout.rs":"66ac1b35039009384be2054992759e8d4c6734c6cbd11e5d9a6aff9522afdd95","src/stream_ext/peekable.rs":"00f0a852ebbb8d77dbd0ff1a1dee9e55139518aa6233bcef65a6589f6c255970","TEST_MAPPING":"43e2cf8ae35c5ef457ca9c08ad1d0ba2d47f7b7aade538d11115f9aafd40cc80","src/wrappers/read_dir.rs":"80ab6a54ee6b2c8fadbf514b9ba833dad0fa3db21d7d0dc213ae5ec8434e4896","src/stream_ext/fold.rs":"c3dbb1671f091bbbcdb345857348473aa7971e05764a82c07012e5a206689117","src/macros.rs":"48496c340f25e8f942a285285ca66db50bdf1ebfcc7f0048d4fa31548445ec53","src/stream_ext/map_while.rs":"cde67ccb5bac9dc500b77ff1504e3bb0117969bd947b58d8ab00998554b2e871","tests/time_throttle.rs":"429fd372d49a520143222d69aee452c8931654803b6cf935009071d5c97ed32c","src/once.rs":"21fbec937320c5c231771176ff6be31c3df3954a46b20f8dd75e50c039bd7ba4","src/stream_ext/take_while.rs":"b88e2ec736bdfaea8bd87cbd7441a9808995a9e20586ef085c99e5f6ec012bbf","tests/stream_merge.rs":"48a46f2772fc83c209e3c740c4f7bf2c6af4169e3b3c2481cb8d317e9825dc4d","src/stream_ext/all.rs":"71936c84391263122ad9aabba15588e39bf625c476e7d37d5a093f5e40c2a6a8","tests/async_send_sync.rs":"3936e10ba45d33e42b1de41d07bfc916d06edf8fcab13a55b34796dc7acde73d","METADATA":"214f2a763331be2e45251e9d6f70c6be2720d8f11148084c0f8a346ec726ef0e","src/stream_ext/filter_map.rs":"72f89650b8750157010ea1ac08bbbc07202bfe645cce95a7d54726135f115b27","tests/watch.rs":"47bad2f25243370d55f870d40214dbc10261bf7d4a9ebc53f8f6cd9762adef06","src/stream_ext/next.rs":"e5a2df0b5eedcc21bc01e18683c55754ed67e7a3b746d416ebfe55a737a2c9fc","tests/stream_empty.rs":"352d6fa321e988e4c37d937d594f70509d50ab974c46bcd3c903cce5b0dcead9","tests/stream_chain.rs":"55063524a54ae90293d4ddb2a722da5d243d9814f128eb6ddbe69b73b2ab3db5","tests/stream_timeout.rs":"c306d0a0933ebf397429abf9199e012ee657433e79d9b9c7153cd580d6042a51","tests/stream_once.rs":"c1708606e0bf0f7950376e58bf258dfce26bf5b70554adc446aa60d15679d8c7","src/pending.rs":"a30f807a3d301f9f7b3547d922882e8bd8a6d3c184689628091adf011d61dc02",".cargo-checksum.json":"fd978e21a62d45d045ee1e891b702d85671609c9b7f843d7e8f97d9ee17444ea"}}
\ No newline at end of file
diff --git a/crates/tokio-stream/.cargo-checksum.json b/crates/tokio-stream/.cargo-checksum.json
index cbd2f22..7158ca8 100644
--- a/crates/tokio-stream/.cargo-checksum.json
+++ b/crates/tokio-stream/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"CHANGELOG.md":"b9eb0774f52ffcc029af37674c93d0b725ce0503e42edea796cbdbae04090d82","Cargo.toml":"ae57b270ef8af07dc63e1a7ac25ba1a7c07511b71ae131f408b8e790f5e0bdf7","LICENSE":"253cd04c6714889df2d32f3f64d669179a1c95c76ac43c40882c52eb06bc3552","README.md":"20a540f52525683f4fdb4b01a696d2a7ae8e77e2392b3e9bd1569a1ef61fdf8e","src/empty.rs":"292148fe9fe821b7a40200b87f3be63e54e881fa031fd1705ce7c2e264457f6b","src/iter.rs":"b2db4e9075cc5254aed52d7b9a93d56adb0e4a717fe5819372314b5fb1999ff4","src/lib.rs":"05c2c8a59be318e47fa16a8ddc58923e717dabb4b3365f636e8f90f4e3302a4d","src/macros.rs":"c717d387456a1ff311e0e92dc13d367eafce3c840dd15e456bae04646d4e4a9a","src/once.rs":"d4afaba551b10a32a29098a8a8d8e8ef5c83ff9e10c0fad40a966ff929f55cbc","src/pending.rs":"daeac87ee04243da5ab4996d783a116f5bc9028c6a7cadc66ebf05155fece26a","src/stream_close.rs":"7f7a01cdd8415692beaabe1466f867b02058b5ec244b5d47a0ff12922ade9bec","src/stream_ext.rs":"4edafb1cfa416f8fd3752ee8fa11e0fd130c8d1069a2d40fea1414b728199dcd","src/stream_ext/all.rs":"cedede9999101e9ce10d157088c7f038fdf9e83d631ba9552d06e035c5c0d84e","src/stream_ext/any.rs":"b65bf5a191f0d099589a00f7834961eeec72e91713e1852abe6b1f1d32a9814a","src/stream_ext/chain.rs":"645dd575340f77e16ed3e1645054d9bdceae7b3fbe36bd2e2166d5095fd4e457","src/stream_ext/chunks_timeout.rs":"47ce4f5d3de6d215635453f6ec028d66185fc1897172dcfa7e0b3293c753ee06","src/stream_ext/collect.rs":"a63a3fa5a1491e5c8f3a6c8557faf6dd2ad44234c93d20783e164e890a10d252","src/stream_ext/filter.rs":"3af3d91941549be0e525ee46f80de84c172fcdd34def78823012af32c5a46776","src/stream_ext/filter_map.rs":"7490ee5aa6aaca61a5b0da9d5b0924213134e16e34e6ebd87a0249743832f22a","src/stream_ext/fold.rs":"700dbb166c2f548bf7b921a2a0b76f32b0294a049d85fddbf16cf038c21fec12","src/stream_ext/fuse.rs":"b4a68a174b3215bbc7b446fca081794c3130e67e04e768408a8f7fd0a51092b7","src/stream_ext/map.rs":"ce3f1a17665d9524c599aa8aa94109e4077941b75d5836495def653db5f64f33","src/stream_ext/map_while.rs":"c89d19b0267c2b15c69812b1720df935585be5d49edf08600e9beb4f697d7916","src/stream_ext/merge.rs":"5e579dba8fba303f922477e6f1aa1c4ebd195b36cbbb48fb2a88f8007fc62fe7","src/stream_ext/next.rs":"0cf1be87372999f4bc710fe06fa9c0f6742e4bc2c1f781e8f5dd065fe795fcec","src/stream_ext/peekable.rs":"b967605ae4096b0f2f185870abea96b2f1bf65b7aa437dfeefadaca602cf399b","src/stream_ext/skip.rs":"2f07b2d06867949685bfdb60eafa5a0f9b629ce537ea3f33828c036ffc2b9e0e","src/stream_ext/skip_while.rs":"36ac7485304daa192ed43bb46347b47814f30a706d8d1968e9a17e7ba172f8ef","src/stream_ext/take.rs":"bc4074f7b8a72504a973536b366876bb0e4d273296178080a7de80d55a4a7150","src/stream_ext/take_while.rs":"3a3122116a8743f66199a71f733f7c3bfce77d084a752c73b4cc54a3d26365d8","src/stream_ext/then.rs":"3f2e4272ee442afd9e04ab8476785076b62f7e5652241db893669a5d4cce26bf","src/stream_ext/throttle.rs":"d4818315e0b873e26c31ce37a7bb3e23b2be988d4108a628c8734f73848ed64f","src/stream_ext/timeout.rs":"564051ae2ce09b1aebe7b26ffda45adc7e3aa239494d284575596718c256e4c1","src/stream_ext/timeout_repeating.rs":"4e84848c3bfd866142c4b085f7d047e6cfe996e214a38f831985d58fd4fe0caa","src/stream_ext/try_next.rs":"3258a10910e84452571686427db3d0a477db60466c1bc96ff012530ad469520b","src/stream_map.rs":"4911a52cab07202072c2cb1b3d8333b5e493c6b7d8649738715f1fbf329d0b12","src/wrappers.rs":"c779121d9fc729c9e9e6275de506ce41e9405cd82627589b54e6e28d911676d1","src/wrappers/broadcast.rs":"103c7ceed5e096fb8b1dc9466f18787d2848c91dc18712a98e49bce798b92972","src/wrappers/interval.rs":"31144ced794099bedf355d0136b074966bac166e76ac72fcc1134dddd3ef3475","src/wrappers/lines.rs":"b92b23d9bf0062975ea61f56eb84e6c2fa5dc0c35c2e0e9dbde2fb087faa0811","src/wrappers/mpsc_bounded.rs":"a64829a8ac015b86ac250c8a8e522149de8717343191f1a50d6bdcd7cf185f8f","src/wrappers/mpsc_unbounded.rs":"9611fd8ef01ae01b64bb5fe7950f52874f0087722842f16b08da6bb247770dba","src/wrappers/read_dir.rs":"e2556f80104b424331e045e28417abcc09b9724444c812244516d5213f367aa8","src/wrappers/signal_unix.rs":"a53d96a21f7d50373b0cafcc0bbd795bc8faa8aa15d1b8801cdba8baf77ed0ac","src/wrappers/signal_windows.rs":"9facd73b3692cfd2e7d439be8576351498dbe1789e54eb1d14f71ccdb28da198","src/wrappers/split.rs":"f9cfb91a942b8d00a6938b46840251c2a35c219f8754cd7638684b3301a6728e","src/wrappers/tcp_listener.rs":"0a420994f716d62ea5536904adb5ab5f30fd322359651fcc86ae7368e745d98a","src/wrappers/unix_listener.rs":"e206aa40af1c5df68475f045d3cfce7b3f9922db8628b0530aa71ced991e0261","src/wrappers/watch.rs":"828d96fd8d3f941cc5ebcd32dd87ed01ed84fe767e8f3cb23b06ac721ad2c1db","tests/async_send_sync.rs":"2fde5007212aba7efc1417fc8ea04e5be61545c2506983155fd3aa1cfb60c5fe","tests/chunks_timeout.rs":"455b441751aa85ccc29e908d66cdfcfddd896bbf9d40cabc43744e21859db67e","tests/stream_chain.rs":"8eaa400f0ce1535b768a96a6022f7b1304ac59ac4f80430e8b5a137941540947","tests/stream_close.rs":"23cee6d56795261d94770b12473eefebf3e5f82f5a3254e45c5f8a240525059f","tests/stream_collect.rs":"672597e3a00df5283702ab1c7b98979bb2db397472f639e677d4e83c67ef1050","tests/stream_empty.rs":"4a79c50ccf8c95d3f41fc8eb02720318f3bdd84372530a826b6edfd4b94b953b","tests/stream_fuse.rs":"8975326b01eb0eabf017be3cbd683388970a60f6d9d0d6e7fdc9ae657b2f2ac7","tests/stream_iter.rs":"664fed872dba90449acd992c9840e45cda110273836b700f1f11bf1210d6b0a4","tests/stream_merge.rs":"e7ba9ac03fecd05061aa48ca17c50472ec358693e5d8e07e478e3c5d676af0bd","tests/stream_once.rs":"4ece414df7a39dfe09336cfb2802ea85e41cf49d42f23e35bd3646907be05b0a","tests/stream_panic.rs":"6bc0c3950ca6a7b83e437277b3e2d6513476819d87bcafcf182734c9320f8076","tests/stream_pending.rs":"c43d970af93c79ddf11657ff067bcb3a221e533109a03afe1cccd1bb4b3a1ffe","tests/stream_stream_map.rs":"46b5411c7c3cbc12611c6e3b997b3d733b75583df8dce359af267b42edf74b7c","tests/stream_timeout.rs":"735eb8ff72f1aa3dde812487d1409c2525a618e67e82fe5566bf950314fd28b7","tests/support/mpsc.rs":"2ac4d35619b5f418fa4c7ae4f5120137e1c8541937204d027f63088410a44ca7","tests/time_throttle.rs":"82f500fb2dba420b1c7b3da1899a92209a4832262b9bf450c7cef79fdaa89754","tests/watch.rs":"573e42a54e73a304b49476c7c75edb5a5901a325998ad9d302825c308147ea9f"},"package":"4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1"}
\ No newline at end of file
+{"files":{"CHANGELOG.md":"0a11e15cbeac96be64c13772b068ddd19a06e5d1ced6f0de5328bd701485b9d3","Cargo.toml":"7d2066b1e2c5a59ca03fff49ce58068604ec73d718115d90140035d8e1d99410","LICENSE":"253cd04c6714889df2d32f3f64d669179a1c95c76ac43c40882c52eb06bc3552","README.md":"20a540f52525683f4fdb4b01a696d2a7ae8e77e2392b3e9bd1569a1ef61fdf8e","src/empty.rs":"292148fe9fe821b7a40200b87f3be63e54e881fa031fd1705ce7c2e264457f6b","src/iter.rs":"b2db4e9075cc5254aed52d7b9a93d56adb0e4a717fe5819372314b5fb1999ff4","src/lib.rs":"05c2c8a59be318e47fa16a8ddc58923e717dabb4b3365f636e8f90f4e3302a4d","src/macros.rs":"c717d387456a1ff311e0e92dc13d367eafce3c840dd15e456bae04646d4e4a9a","src/once.rs":"d4afaba551b10a32a29098a8a8d8e8ef5c83ff9e10c0fad40a966ff929f55cbc","src/pending.rs":"daeac87ee04243da5ab4996d783a116f5bc9028c6a7cadc66ebf05155fece26a","src/stream_close.rs":"7f7a01cdd8415692beaabe1466f867b02058b5ec244b5d47a0ff12922ade9bec","src/stream_ext.rs":"4edafb1cfa416f8fd3752ee8fa11e0fd130c8d1069a2d40fea1414b728199dcd","src/stream_ext/all.rs":"cedede9999101e9ce10d157088c7f038fdf9e83d631ba9552d06e035c5c0d84e","src/stream_ext/any.rs":"b65bf5a191f0d099589a00f7834961eeec72e91713e1852abe6b1f1d32a9814a","src/stream_ext/chain.rs":"645dd575340f77e16ed3e1645054d9bdceae7b3fbe36bd2e2166d5095fd4e457","src/stream_ext/chunks_timeout.rs":"47ce4f5d3de6d215635453f6ec028d66185fc1897172dcfa7e0b3293c753ee06","src/stream_ext/collect.rs":"a63a3fa5a1491e5c8f3a6c8557faf6dd2ad44234c93d20783e164e890a10d252","src/stream_ext/filter.rs":"3af3d91941549be0e525ee46f80de84c172fcdd34def78823012af32c5a46776","src/stream_ext/filter_map.rs":"7490ee5aa6aaca61a5b0da9d5b0924213134e16e34e6ebd87a0249743832f22a","src/stream_ext/fold.rs":"700dbb166c2f548bf7b921a2a0b76f32b0294a049d85fddbf16cf038c21fec12","src/stream_ext/fuse.rs":"b4a68a174b3215bbc7b446fca081794c3130e67e04e768408a8f7fd0a51092b7","src/stream_ext/map.rs":"ce3f1a17665d9524c599aa8aa94109e4077941b75d5836495def653db5f64f33","src/stream_ext/map_while.rs":"c89d19b0267c2b15c69812b1720df935585be5d49edf08600e9beb4f697d7916","src/stream_ext/merge.rs":"5e579dba8fba303f922477e6f1aa1c4ebd195b36cbbb48fb2a88f8007fc62fe7","src/stream_ext/next.rs":"0cf1be87372999f4bc710fe06fa9c0f6742e4bc2c1f781e8f5dd065fe795fcec","src/stream_ext/peekable.rs":"dd457da28637aafb3b4c5aac96576d1bec9f2527007b83efe3d3570b0a791858","src/stream_ext/skip.rs":"2f07b2d06867949685bfdb60eafa5a0f9b629ce537ea3f33828c036ffc2b9e0e","src/stream_ext/skip_while.rs":"36ac7485304daa192ed43bb46347b47814f30a706d8d1968e9a17e7ba172f8ef","src/stream_ext/take.rs":"bc4074f7b8a72504a973536b366876bb0e4d273296178080a7de80d55a4a7150","src/stream_ext/take_while.rs":"3a3122116a8743f66199a71f733f7c3bfce77d084a752c73b4cc54a3d26365d8","src/stream_ext/then.rs":"3f2e4272ee442afd9e04ab8476785076b62f7e5652241db893669a5d4cce26bf","src/stream_ext/throttle.rs":"d4818315e0b873e26c31ce37a7bb3e23b2be988d4108a628c8734f73848ed64f","src/stream_ext/timeout.rs":"564051ae2ce09b1aebe7b26ffda45adc7e3aa239494d284575596718c256e4c1","src/stream_ext/timeout_repeating.rs":"4e84848c3bfd866142c4b085f7d047e6cfe996e214a38f831985d58fd4fe0caa","src/stream_ext/try_next.rs":"3258a10910e84452571686427db3d0a477db60466c1bc96ff012530ad469520b","src/stream_map.rs":"4911a52cab07202072c2cb1b3d8333b5e493c6b7d8649738715f1fbf329d0b12","src/wrappers.rs":"c779121d9fc729c9e9e6275de506ce41e9405cd82627589b54e6e28d911676d1","src/wrappers/broadcast.rs":"94076834ca6c91ea7a5be8f6af43625f12001ee2edfee3c4d09d7d5ca9bd9b81","src/wrappers/interval.rs":"31144ced794099bedf355d0136b074966bac166e76ac72fcc1134dddd3ef3475","src/wrappers/lines.rs":"b92b23d9bf0062975ea61f56eb84e6c2fa5dc0c35c2e0e9dbde2fb087faa0811","src/wrappers/mpsc_bounded.rs":"a64829a8ac015b86ac250c8a8e522149de8717343191f1a50d6bdcd7cf185f8f","src/wrappers/mpsc_unbounded.rs":"9611fd8ef01ae01b64bb5fe7950f52874f0087722842f16b08da6bb247770dba","src/wrappers/read_dir.rs":"e2556f80104b424331e045e28417abcc09b9724444c812244516d5213f367aa8","src/wrappers/signal_unix.rs":"a53d96a21f7d50373b0cafcc0bbd795bc8faa8aa15d1b8801cdba8baf77ed0ac","src/wrappers/signal_windows.rs":"9facd73b3692cfd2e7d439be8576351498dbe1789e54eb1d14f71ccdb28da198","src/wrappers/split.rs":"f9cfb91a942b8d00a6938b46840251c2a35c219f8754cd7638684b3301a6728e","src/wrappers/tcp_listener.rs":"0a420994f716d62ea5536904adb5ab5f30fd322359651fcc86ae7368e745d98a","src/wrappers/unix_listener.rs":"e206aa40af1c5df68475f045d3cfce7b3f9922db8628b0530aa71ced991e0261","src/wrappers/watch.rs":"828d96fd8d3f941cc5ebcd32dd87ed01ed84fe767e8f3cb23b06ac721ad2c1db","tests/async_send_sync.rs":"2fde5007212aba7efc1417fc8ea04e5be61545c2506983155fd3aa1cfb60c5fe","tests/chunks_timeout.rs":"455b441751aa85ccc29e908d66cdfcfddd896bbf9d40cabc43744e21859db67e","tests/stream_chain.rs":"8e86e1b998118d24fbb71b8b5ca55b9cb5ed61f9d1c80358fcfab5e24f51392a","tests/stream_close.rs":"23cee6d56795261d94770b12473eefebf3e5f82f5a3254e45c5f8a240525059f","tests/stream_collect.rs":"672597e3a00df5283702ab1c7b98979bb2db397472f639e677d4e83c67ef1050","tests/stream_empty.rs":"4a79c50ccf8c95d3f41fc8eb02720318f3bdd84372530a826b6edfd4b94b953b","tests/stream_fuse.rs":"8975326b01eb0eabf017be3cbd683388970a60f6d9d0d6e7fdc9ae657b2f2ac7","tests/stream_iter.rs":"664fed872dba90449acd992c9840e45cda110273836b700f1f11bf1210d6b0a4","tests/stream_merge.rs":"e7ba9ac03fecd05061aa48ca17c50472ec358693e5d8e07e478e3c5d676af0bd","tests/stream_once.rs":"4ece414df7a39dfe09336cfb2802ea85e41cf49d42f23e35bd3646907be05b0a","tests/stream_panic.rs":"6bc0c3950ca6a7b83e437277b3e2d6513476819d87bcafcf182734c9320f8076","tests/stream_pending.rs":"c43d970af93c79ddf11657ff067bcb3a221e533109a03afe1cccd1bb4b3a1ffe","tests/stream_stream_map.rs":"46b5411c7c3cbc12611c6e3b997b3d733b75583df8dce359af267b42edf74b7c","tests/stream_timeout.rs":"735eb8ff72f1aa3dde812487d1409c2525a618e67e82fe5566bf950314fd28b7","tests/support/mpsc.rs":"2ac4d35619b5f418fa4c7ae4f5120137e1c8541937204d027f63088410a44ca7","tests/time_throttle.rs":"82f500fb2dba420b1c7b3da1899a92209a4832262b9bf450c7cef79fdaa89754","tests/watch.rs":"573e42a54e73a304b49476c7c75edb5a5901a325998ad9d302825c308147ea9f"},"package":"eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047"}
\ No newline at end of file
diff --git a/crates/tokio-stream/Android.bp b/crates/tokio-stream/Android.bp
index 93c1e60..79c4c75 100644
--- a/crates/tokio-stream/Android.bp
+++ b/crates/tokio-stream/Android.bp
@@ -18,7 +18,7 @@
host_supported: true,
crate_name: "tokio_stream",
cargo_env_compat: true,
- cargo_pkg_version: "0.1.16",
+ cargo_pkg_version: "0.1.17",
crate_root: "src/lib.rs",
edition: "2021",
features: [
diff --git a/crates/tokio-stream/CHANGELOG.md b/crates/tokio-stream/CHANGELOG.md
index 8f0d2e3..ced4ede 100644
--- a/crates/tokio-stream/CHANGELOG.md
+++ b/crates/tokio-stream/CHANGELOG.md
@@ -1,3 +1,14 @@
+# 0.1.17 (December 6th, 2024)
+
+- deps: fix dev-dependency on tokio-test ([#6931], [#7019])
+- stream: fix link on `Peekable` ([#6861])
+- sync: fix `Stream` link in broadcast docs ([#6873])
+
+[#6861]: https://github.com/tokio-rs/tokio/pull/6861
+[#6873]: https://github.com/tokio-rs/tokio/pull/6873
+[#6931]: https://github.com/tokio-rs/tokio/pull/6931
+[#7019]: https://github.com/tokio-rs/tokio/pull/7019
+
# 0.1.16 (September 5th, 2024)
This release bumps the MSRV of tokio-stream to 1.70.
diff --git a/crates/tokio-stream/Cargo.toml b/crates/tokio-stream/Cargo.toml
index f02aca9..08a849a 100644
--- a/crates/tokio-stream/Cargo.toml
+++ b/crates/tokio-stream/Cargo.toml
@@ -13,7 +13,7 @@
edition = "2021"
rust-version = "1.70"
name = "tokio-stream"
-version = "0.1.16"
+version = "0.1.17"
authors = ["Tokio Contributors <[email protected]>"]
build = false
autobins = false
@@ -139,6 +139,9 @@
"test-util",
]
+[dev-dependencies.tokio-test]
+version = "0.4"
+
[features]
default = ["time"]
fs = ["tokio/fs"]
diff --git a/crates/tokio-stream/METADATA b/crates/tokio-stream/METADATA
index 75f5578..2595c5a 100644
--- a/crates/tokio-stream/METADATA
+++ b/crates/tokio-stream/METADATA
@@ -1,17 +1,17 @@
name: "tokio-stream"
description: "Utilities to work with `Stream` and `tokio`."
third_party {
- version: "0.1.16"
+ version: "0.1.17"
license_type: NOTICE
last_upgrade_date {
year: 2024
month: 12
- day: 4
+ day: 20
}
homepage: "https://crates.io/crates/tokio-stream"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/tokio-stream/tokio-stream-0.1.16.crate"
- version: "0.1.16"
+ value: "https://static.crates.io/crates/tokio-stream/tokio-stream-0.1.17.crate"
+ version: "0.1.17"
}
}
diff --git a/crates/tokio-stream/src/stream_ext/peekable.rs b/crates/tokio-stream/src/stream_ext/peekable.rs
index 7545ee4..4adea69 100644
--- a/crates/tokio-stream/src/stream_ext/peekable.rs
+++ b/crates/tokio-stream/src/stream_ext/peekable.rs
@@ -8,7 +8,7 @@
use crate::StreamExt;
pin_project! {
- /// Stream returned by the [`chain`](super::StreamExt::peekable) method.
+ /// Stream returned by the [`peekable`](super::StreamExt::peekable) method.
pub struct Peekable<T: Stream> {
peek: Option<T::Item>,
#[pin]
diff --git a/crates/tokio-stream/src/wrappers/broadcast.rs b/crates/tokio-stream/src/wrappers/broadcast.rs
index 2167797..b3900db 100644
--- a/crates/tokio-stream/src/wrappers/broadcast.rs
+++ b/crates/tokio-stream/src/wrappers/broadcast.rs
@@ -11,7 +11,7 @@
/// A wrapper around [`tokio::sync::broadcast::Receiver`] that implements [`Stream`].
///
/// [`tokio::sync::broadcast::Receiver`]: struct@tokio::sync::broadcast::Receiver
-/// [`Stream`]: trait@crate::Stream
+/// [`Stream`]: trait@futures_core::Stream
#[cfg_attr(docsrs, doc(cfg(feature = "sync")))]
pub struct BroadcastStream<T> {
inner: ReusableBoxFuture<'static, (Result<T, RecvError>, Receiver<T>)>,
diff --git a/crates/tokio-stream/tests/stream_chain.rs b/crates/tokio-stream/tests/stream_chain.rs
index 4b47ce7..bae0efb 100644
--- a/crates/tokio-stream/tests/stream_chain.rs
+++ b/crates/tokio-stream/tests/stream_chain.rs
@@ -49,6 +49,7 @@
}
#[tokio::test]
+#[cfg_attr(miri, ignore)] // Block on https://github.com/tokio-rs/tokio/issues/6860
async fn pending_first() {
let (tx1, rx1) = mpsc::unbounded_channel_stream();
let (tx2, rx2) = mpsc::unbounded_channel_stream();
diff --git a/crates/tower-layer/.android-checksum.json b/crates/tower-layer/.android-checksum.json
new file mode 100644
index 0000000..eb98d7b
--- /dev/null
+++ b/crates/tower-layer/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"MODULE_LICENSE_MIT":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","src/layer_fn.rs":"3f70600e45ae03bb9c5e79f010da2822f4a8cc7f2ecb35fcd71d30657df8dfd3","TEST_MAPPING":"9df79dee72c0114536c69787285c44de15381e60b89718e4f071c4be7026b55e","METADATA":"363439b4a2e602b1e3831c80ef0e1636a316fc7dcef28b6f084a1309d978ed64","src/stack.rs":"9bd3949faea6b3f9056c7e5acf4eeaa2ab0da5b8c2fe313700d014b556baaf0c","src/lib.rs":"e628eb6ca696ca93b4142e5d4dd88371f49c7cf06357942054b78c2a1fbb4c40","README.md":"0106f5ac66d2ad3b647f92e42de9fbbf411ace4e8c4e53df6219eb6ea6302ffc","CHANGELOG.md":"d04f40a56d2164abd9eae04afa9977243707b65a171e3502a6cadae5196e5c9c","LICENSE":"0618852b68407499cf0c1c42b8d012be5f0871c7ae73a16e64e4624774166376","src/tuple.rs":"1c5cd89aa4b431b39d3f7606d92b8a23b0e324c1964cfa2809378f9a5ea29083","Android.bp":"dcd58bd689a8e95b836f82b78595202d3f38b0e82353ab54c42368d5df71ea74","src/identity.rs":"c14cb61758ec6de5fcbe187454200725d718aceaf8d145dafd89de0298872610","Cargo.toml":"46336f31112b02384325a6c5235424261c59863ce1faa1f1577dc4fec58deef6",".cargo-checksum.json":"ec21270e332d88824508b14b29649ae13cc90d67506a49bec3072c53de5cd5d7","cargo_embargo.json":"357b30931ac91165d7c52ddd6d493bfa3dbead1c2084a48b34e46c1a925683ea"}}
\ No newline at end of file
diff --git a/crates/tower-layer/.cargo-checksum.json b/crates/tower-layer/.cargo-checksum.json
index 5fd4317..7919023 100644
--- a/crates/tower-layer/.cargo-checksum.json
+++ b/crates/tower-layer/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"CHANGELOG.md":"6ee79947b4955229622b03cd1fe2a58345ae1a10f07f065716a067b7cfe6e26b","Cargo.toml":"0fa53842f7a4b3c03546de5e57d2f8f98ccd9c6ccbe851a7a88e81dbf74aa320","LICENSE":"4249c8e6c5ebb85f97c77e6457c6fafc1066406eb8f1ef61e796fbdc5ff18482","README.md":"224c67c67c5cbdbfd6f46a0ef4833a09798c4edb7faffaf3c549bec7f4780173","src/identity.rs":"a0420007d53421ddf4efb13ea06f1462f6e4258584bca11cf5d1df1cf76512f8","src/layer_fn.rs":"bee7fb3ad2d016fea7fd47b298677b74d30cd459f019fa2d74940a6cc2237ddb","src/lib.rs":"1ea5230dbff1b667aa4cb9afe361e0d7fe48248c193b62ceb75ebf33e866c85b","src/stack.rs":"e79e03345a1488a45200f92b610eb494e05dbd1d9bcb667335c61d7647b3556a","src/tuple.rs":"420dc53fbde5a4c213a2a70bce6ae755953b7fbddd1e895d6f4d62e2591ae466"},"package":"c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"}
\ No newline at end of file
+{"files":{"CHANGELOG.md":"8e388c285cf1f52b986862cde65a188002d1d223ffa04ce28fb669fe935f61a9","Cargo.toml":"294873d3652f2c23fd4839dffec4edfc3372345a2dd2cec898da4a9fb0b0c1c5","LICENSE":"4249c8e6c5ebb85f97c77e6457c6fafc1066406eb8f1ef61e796fbdc5ff18482","README.md":"224c67c67c5cbdbfd6f46a0ef4833a09798c4edb7faffaf3c549bec7f4780173","src/identity.rs":"f52f535dd6fbe5da1e63da9cf6bbaaf16bb882da9008676570489b3bc6410673","src/layer_fn.rs":"bee7fb3ad2d016fea7fd47b298677b74d30cd459f019fa2d74940a6cc2237ddb","src/lib.rs":"4124a66bc533f64d67b44e98d1782104aa85b85a64638ab42f94319a0ff00812","src/stack.rs":"572ccc3b4d1111db007b7a573f31ac03efbd9b07ef8fec8d16ee34e9da299124","src/tuple.rs":"420dc53fbde5a4c213a2a70bce6ae755953b7fbddd1e895d6f4d62e2591ae466"},"package":"121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"}
\ No newline at end of file
diff --git a/crates/tower-layer/Android.bp b/crates/tower-layer/Android.bp
index 18959a7..fd6a571 100644
--- a/crates/tower-layer/Android.bp
+++ b/crates/tower-layer/Android.bp
@@ -18,7 +18,7 @@
host_supported: true,
crate_name: "tower_layer",
cargo_env_compat: true,
- cargo_pkg_version: "0.3.2",
+ cargo_pkg_version: "0.3.3",
crate_root: "src/lib.rs",
edition: "2018",
apex_available: [
@@ -35,7 +35,7 @@
host_supported: true,
crate_name: "tower_layer",
cargo_env_compat: true,
- cargo_pkg_version: "0.3.2",
+ cargo_pkg_version: "0.3.3",
crate_root: "src/lib.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -43,8 +43,4 @@
unit_test: true,
},
edition: "2018",
- rustlibs: [
- "libtower",
- "libtower_service",
- ],
}
diff --git a/crates/tower-layer/CHANGELOG.md b/crates/tower-layer/CHANGELOG.md
index 761e9a4..1ca7a54 100644
--- a/crates/tower-layer/CHANGELOG.md
+++ b/crates/tower-layer/CHANGELOG.md
@@ -1,4 +1,16 @@
-# 0.3.2 (October 7, 2022)
+# 0.3.3 (August 1, 2024)
+
+### Added
+
+- **builder,util**: add convenience methods for boxing services ([#616])
+- **all**: new functions const when possible ([#760])
+
+[#616]: https://github.com/tower-rs/tower/pull/616
+[#760]: https://github.com/tower-rs/tower/pull/760
+
+# 0.3.2 (Octpber 10, 2022)
+
+## Added
- Implement `Layer` for tuples of up to 16 elements ([#694])
@@ -6,6 +18,8 @@
# 0.3.1 (January 7, 2021)
+### Added
+
- Added `layer_fn`, for constructing a `Layer` from a function taking
a `Service` and returning a different `Service` ([#491])
- Added an implementation of `Layer` for `&Layer` ([#446])
diff --git a/crates/tower-layer/Cargo.toml b/crates/tower-layer/Cargo.toml
index 0d7736e..b8b9d75 100644
--- a/crates/tower-layer/Cargo.toml
+++ b/crates/tower-layer/Cargo.toml
@@ -12,12 +12,18 @@
[package]
edition = "2018"
name = "tower-layer"
-version = "0.3.2"
+version = "0.3.3"
authors = ["Tower Maintainers <[email protected]>"]
+build = false
+autobins = false
+autoexamples = false
+autotests = false
+autobenches = false
description = """
Decorates a `Service` to allow easy composition between `Service`s.
"""
homepage = "https://github.com/tower-rs/tower"
+documentation = "https://docs.rs/tower-layer/0.3.3"
readme = "README.md"
categories = [
"asynchronous",
@@ -26,10 +32,10 @@
license = "MIT"
repository = "https://github.com/tower-rs/tower"
+[lib]
+name = "tower_layer"
+path = "src/lib.rs"
+
[dependencies]
-[dev-dependencies.tower]
-version = "0.4"
-
-[dev-dependencies.tower-service]
-version = "0.3.0"
+[dev-dependencies]
diff --git a/crates/tower-layer/METADATA b/crates/tower-layer/METADATA
index 0a141ac..0bfd10d 100644
--- a/crates/tower-layer/METADATA
+++ b/crates/tower-layer/METADATA
@@ -1,17 +1,17 @@
name: "tower-layer"
description: "()"
third_party {
- version: "0.3.2"
+ version: "0.3.3"
license_type: NOTICE
last_upgrade_date {
year: 2024
- month: 5
- day: 24
+ month: 12
+ day: 20
}
homepage: "https://crates.io/crates/tower-layer"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/tower-layer/tower-layer-0.3.2.crate"
- version: "0.3.2"
+ value: "https://static.crates.io/crates/tower-layer/tower-layer-0.3.3.crate"
+ version: "0.3.3"
}
}
diff --git a/crates/tower-layer/src/identity.rs b/crates/tower-layer/src/identity.rs
index 5ce805b..5233a1d 100644
--- a/crates/tower-layer/src/identity.rs
+++ b/crates/tower-layer/src/identity.rs
@@ -14,7 +14,7 @@
impl Identity {
/// Create a new [`Identity`] value
- pub fn new() -> Identity {
+ pub const fn new() -> Identity {
Identity { _p: () }
}
}
diff --git a/crates/tower-layer/src/lib.rs b/crates/tower-layer/src/lib.rs
index 8dfae3d..4823fcc 100644
--- a/crates/tower-layer/src/lib.rs
+++ b/crates/tower-layer/src/lib.rs
@@ -14,7 +14,7 @@
//!
//! A middleware implements the [`Layer`] and [`Service`] trait.
//!
-//! [`Service`]: https://docs.rs/tower/latest/tower/trait.Service.html
+//! [`Service`]: https://docs.rs/tower/*/tower/trait.Service.html
mod identity;
mod layer_fn;
@@ -91,7 +91,7 @@
/// is also decoupled from client or server concerns. In other words, the same
/// log middleware could be used in either a client or a server.
///
-/// [`Service`]: https://docs.rs/tower/latest/tower/trait.Service.html
+/// [`Service`]: https://docs.rs/tower/*/tower/trait.Service.html
pub trait Layer<S> {
/// The wrapped service
type Service;
diff --git a/crates/tower-layer/src/stack.rs b/crates/tower-layer/src/stack.rs
index cc0b826..cb6bac7 100644
--- a/crates/tower-layer/src/stack.rs
+++ b/crates/tower-layer/src/stack.rs
@@ -10,7 +10,7 @@
impl<Inner, Outer> Stack<Inner, Outer> {
/// Create a new `Stack`.
- pub fn new(inner: Inner, outer: Outer) -> Self {
+ pub const fn new(inner: Inner, outer: Outer) -> Self {
Stack { inner, outer }
}
}
diff --git a/crates/tracing-attributes/.android-checksum.json b/crates/tracing-attributes/.android-checksum.json
new file mode 100644
index 0000000..22fee2c
--- /dev/null
+++ b/crates/tracing-attributes/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"tests/destructuring.rs":"2e836898172f24182c0b54e0edf93e36a71127f521c0b7e31fb35a9cab7f6910","tests/parents.rs":"3653fbfed4e27f962cbd1bbefedf3b599e92c1021424ae1b800d041c5bbd5284","MODULE_LICENSE_MIT":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","README.md":"be66b185b95c0f33bf9b6f370ba045f1f79765ac9566858d704ca31c44427fba","cargo_embargo.json":"aa45a963da01d3f018be316cd5b7646a5b413ce2611c5218f2914d2e8a9efd0e","tests/targets.rs":"87d18793c2b5bc58a8d40830810e80ac0766c0fc359cd545c73a2dc1cb6007bf","LICENSE":"81b5afff24bf73e7d6660ff9e03a493ba57f494dad837134a654b3945a3199d7","METADATA":"174815b5506f9884066964c8e9bd0471176418b4a93d2227b793dc785d507dc7",".cargo-checksum.json":"cd6fbccb20c7dd5338d83ca72e777ddb2d3084e2ce6d4ef38719e0f461287ec2","src/attr.rs":"be4d482d9e634afafacf5e13cb20abff62f983512979111f507a25b7f49fc82d","tests/fields.rs":"312d5e3d2441eeb8ce9154b8a3603ec8c3fd14c6b1c5155a962a2e1a5bc25e84","tests/async_fn.rs":"6e42feaa7fbb7f997a34e2f284e692a0c068ef28e8d2c21a3fb5f20bf4bd1d56","CHANGELOG.md":"557f0fb29f5a63d9536f3ca28a4028ad93f8048823d97c61c6446055d53e2f47","tests/follows_from.rs":"81a24187fee1c9f9313f6dd6370c467463591d36909d5e0bf54a2ec9c2e2cf5b","Android.bp":"1796b4354c3d3d6fb0d0d0fd38e2736aa972601ce2a5b6dae42bc185abb27033","tests/instrument.rs":"d5d18ee7485d08b65dcfcdbead9c22bfa51ebfb89180f12f8f4e640ed907f8b1","tests/ret.rs":"e22f7fadb3b37da2e992ecb20511a10edb505726bfe71497438794fb11e43252","src/lib.rs":"505bd3bbe87a8b23e8a6a1fb265281eb77ce8bb03c4eae8edd8eb1afb3d72359","src/expand.rs":"7f24b1fa5f0beffb34edddbe2f49b709eff128df6397ef93cc9ae1ca7351c390","tests/err.rs":"f142f076c2c4863939006cc81691758b7d9ff7eb5a6eaa95008838090d78cd10","tests/ui/async_instrument.stderr":"67f2a821cf63ed39c69a47174228d1efcb928b9130c24f9f44be3725ae342874","tests/ui.rs":"d5efab7ed2ff60a29bc373dd70f9f25cc2002549a6cd0a62668b81e2e94fe450","tests/ui/const_instrument.stderr":"fa25a10ec58d70ce0b0bf8c199b252fd1be32353787332d8cfd0fdf76112acfa","tests/names.rs":"9d2946928ce2265cda11ecf5ddb2ebae06531b44094b17f116f00f38578d87cb","tests/levels.rs":"14cda34bffb5b733f1acaf6080557c6b9cf3efa6581e68e23803033c57df6c20","tests/ui/const_instrument.rs":"e860a5afc023682de98f8268de56e685dcb63ffe130a4dcc0c6911bcb050cbce","Cargo.toml":"e7e7d39e938fe3dd249380818afda0f8389dbd976a3db389cc1a1d36c1a20585","tests/ui/async_instrument.rs":"c435a93406c0b912b6783a1b18eb88f163905184fbd77e566f2ddc5e308e1c9b"}}
\ No newline at end of file
diff --git a/crates/tracing-attributes/.cargo-checksum.json b/crates/tracing-attributes/.cargo-checksum.json
index cc2b53e..ea274ea 100644
--- a/crates/tracing-attributes/.cargo-checksum.json
+++ b/crates/tracing-attributes/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"CHANGELOG.md":"e410a2cbd565bff62c52c66580bd3c7aa9bd81e4b73b5f4cdd0f7c5ab13b21de","Cargo.toml":"2cb782a6b7cb5412591a8457af156d081514ae846a81bec889a9f60f68a39dca","LICENSE":"898b1ae9821e98daf8964c8d6c7f61641f5f5aa78ad500020771c0939ee0dea1","README.md":"d878157a8f65779ef3d2e53d6772f99b5b79d7addccb6d04a2eb681ce1de99e1","src/attr.rs":"d0224a2a9be76743f039c86c1935622ca0b5b2e618b9323149855bf0e326fe48","src/expand.rs":"548b8d5fb5e92fe57a067bb656b88ceb403234521eed8bce4e0ec91b5fdacf78","src/lib.rs":"de2409d2cefba7a21739ac1021ea8e0dec892a342b1ecb46a81f66b782ea8f5b","tests/async_fn.rs":"66dab5e2a58119f588daae74efa47b5d8db0751cb99660856d792f352a3a263e","tests/destructuring.rs":"d920dca0b7db5b48697c1eb5a40ce676956760eb8bc2dcbe4c5ce1bc3631877b","tests/err.rs":"6b717be09a2447bcb0583a9b6a42b53361935b4a61093572c55f506f9d5f5cff","tests/fields.rs":"8babe90df46cfe9018caf20ef85060c90d611c5531b4d603f10f83a38744e7c2","tests/follows_from.rs":"d0478db45cb838d76f0d52f930847e8540b09456e2cd56591e56910c5e9985c6","tests/instrument.rs":"0c47bd9117858ecc585faab597115b7b49e2c79ae20172c32a6184674c8fd274","tests/levels.rs":"20483e9c7555991044b748f209def016d28da0a64eb9f85fabb489b0fb75a440","tests/names.rs":"2a67b33681cc7689c4d677de7a97b846df1817406a56a98ba91bf67b9f7d630a","tests/parents.rs":"95451328d8d7dba9020dc3eeb4ee56fc7f4591d5d38e793b815e621e73063da1","tests/ret.rs":"4628f562f8b0fb36a0dc13f488d70df8a545bd9b49422dfbf05fd2cab3870fc3","tests/targets.rs":"2065af7ff491be720c56d1b218b095a64e4573bf2586e49ce638c5ed4d639811","tests/ui.rs":"60ed69aba2cbf4b1a2f42b78703f7f21d8a69f62e39bb0509f6a2224cad9b9de","tests/ui/async_instrument.rs":"00fcde05841e8f9f6cc6f9434f8cc4baed5cf6e3ca73e8faddccbdace14e9485","tests/ui/async_instrument.stderr":"1d650a0914f0f59beeb88946a8ad6991feffe885016462ba917ea8e09792f866","tests/ui/const_instrument.rs":"253160848b023cbf73c3d1dece4969ff892ae9a3149e771159230733fa1cab1b","tests/ui/const_instrument.stderr":"86527fbc2410ceba8f051771fdb4bf71eb853e086a4e4d17353089c65b918c18"},"package":"34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"}
\ No newline at end of file
+{"files":{"CHANGELOG.md":"cc3801e548016a7b97fe17b7a6ea54d4a9ab967940e203185220302760b623c3","Cargo.toml":"949f9b6907da171590625218f642cf110b24643cca1a41990953f15105deaf87","LICENSE":"898b1ae9821e98daf8964c8d6c7f61641f5f5aa78ad500020771c0939ee0dea1","README.md":"fe2928abe4065de4b44ea1965d073f0c2afc381a40eba4d793fc52735b794f56","src/attr.rs":"5e543dbe9aa2d49bdeee6fe981fae9bdae0e29a598e4b4052449f0468f500a6f","src/expand.rs":"b50ba649e3acf627d21efe159918aac01f21514543c5d1c6c97ee1433ecc31b5","src/lib.rs":"dfed9a0bab49fb4b0444137872422bd0ce78ce319d094cff3fb868435dd23144","tests/async_fn.rs":"fce3f557f1dce24b4f61c76cb22095a415ec24261077d48837da52949dcf463b","tests/destructuring.rs":"f5273613cb7cf13f346dfbef14ed54d3ddff9541e6c12370f5ee501947607398","tests/err.rs":"efe22fd36ba3359b1e3a8b6d9ce1b7ca456f0187b26fe1d007f76e574db333a8","tests/fields.rs":"650d243b229a8089928928d618586d357a006968576877fea5f316edaf37b0ab","tests/follows_from.rs":"a59c5472192eb1e42d9122b58429092164bfda71c06b6bde41cc8a7d256e4fbc","tests/instrument.rs":"f26ccb8f082ec996543a440868b02181d4d88cfe07823ae54a5e062379707c3f","tests/levels.rs":"20483e9c7555991044b748f209def016d28da0a64eb9f85fabb489b0fb75a440","tests/names.rs":"2a67b33681cc7689c4d677de7a97b846df1817406a56a98ba91bf67b9f7d630a","tests/parents.rs":"ebddeae17c6a1d0fc56f14595d7a7e51d0d9ccdbf0c3b314ab6037cd7e7fa664","tests/ret.rs":"b628e8806137b7141029a9fc5351ddbf7812ac7df5e175be74e3f6a4ed6ec9d4","tests/targets.rs":"2065af7ff491be720c56d1b218b095a64e4573bf2586e49ce638c5ed4d639811","tests/ui.rs":"60ed69aba2cbf4b1a2f42b78703f7f21d8a69f62e39bb0509f6a2224cad9b9de","tests/ui/async_instrument.rs":"00fcde05841e8f9f6cc6f9434f8cc4baed5cf6e3ca73e8faddccbdace14e9485","tests/ui/async_instrument.stderr":"1d650a0914f0f59beeb88946a8ad6991feffe885016462ba917ea8e09792f866","tests/ui/const_instrument.rs":"253160848b023cbf73c3d1dece4969ff892ae9a3149e771159230733fa1cab1b","tests/ui/const_instrument.stderr":"86527fbc2410ceba8f051771fdb4bf71eb853e086a4e4d17353089c65b918c18"},"package":"395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"}
\ No newline at end of file
diff --git a/crates/tracing-attributes/Android.bp b/crates/tracing-attributes/Android.bp
index f10c572..ace1854 100644
--- a/crates/tracing-attributes/Android.bp
+++ b/crates/tracing-attributes/Android.bp
@@ -17,7 +17,7 @@
name: "libtracing_attributes",
crate_name: "tracing_attributes",
cargo_env_compat: true,
- cargo_pkg_version: "0.1.27",
+ cargo_pkg_version: "0.1.28",
crate_root: "src/lib.rs",
edition: "2018",
rustlibs: [
diff --git a/crates/tracing-attributes/CHANGELOG.md b/crates/tracing-attributes/CHANGELOG.md
index 3cb95f7..7d792c1 100644
--- a/crates/tracing-attributes/CHANGELOG.md
+++ b/crates/tracing-attributes/CHANGELOG.md
@@ -1,3 +1,29 @@
+# 0.1.28 (November 26, 2024)
+
+### Changed
+
+- Bump MSRV to 1.63 ([#2793])
+
+### Fixed
+
+- Added missing RecordTypes for instrument ([#2781])
+- Change order of async and unsafe modifier ([#2864])
+- Extract match scrutinee ([#2880])
+- Allow field path segments to be keywords ([#2925])
+- Support const values for `target` and `name` ([#2941])
+
+### Documented
+
+- Fix backporting error in attributes ([#2780])
+
+[#2780]: https://github.com/tokio-rs/tracing/pull/2780
+[#2781]: https://github.com/tokio-rs/tracing/pull/2781
+[#2793]: https://github.com/tokio-rs/tracing/pull/2793
+[#2864]: https://github.com/tokio-rs/tracing/pull/2864
+[#2880]: https://github.com/tokio-rs/tracing/pull/2880
+[#2925]: https://github.com/tokio-rs/tracing/pull/2925
+[#2941]: https://github.com/tokio-rs/tracing/pull/2941
+
# 0.1.27 (October 13, 2023)
### Changed
diff --git a/crates/tracing-attributes/Cargo.toml b/crates/tracing-attributes/Cargo.toml
index 8d90671..c4bed6c 100644
--- a/crates/tracing-attributes/Cargo.toml
+++ b/crates/tracing-attributes/Cargo.toml
@@ -11,14 +11,19 @@
[package]
edition = "2018"
-rust-version = "1.56.0"
+rust-version = "1.63.0"
name = "tracing-attributes"
-version = "0.1.27"
+version = "0.1.28"
authors = [
"Tokio Contributors <[email protected]>",
"Eliza Weisman <[email protected]>",
"David Barsky <[email protected]>",
]
+build = false
+autobins = false
+autoexamples = false
+autotests = false
+autobenches = false
description = """
Procedural macro attributes for automatically instrumenting functions.
"""
@@ -38,10 +43,61 @@
]
license = "MIT"
repository = "https://github.com/tokio-rs/tracing"
+resolver = "2"
[lib]
+name = "tracing_attributes"
+path = "src/lib.rs"
proc-macro = true
+[[test]]
+name = "async_fn"
+path = "tests/async_fn.rs"
+
+[[test]]
+name = "destructuring"
+path = "tests/destructuring.rs"
+
+[[test]]
+name = "err"
+path = "tests/err.rs"
+
+[[test]]
+name = "fields"
+path = "tests/fields.rs"
+
+[[test]]
+name = "follows_from"
+path = "tests/follows_from.rs"
+
+[[test]]
+name = "instrument"
+path = "tests/instrument.rs"
+
+[[test]]
+name = "levels"
+path = "tests/levels.rs"
+
+[[test]]
+name = "names"
+path = "tests/names.rs"
+
+[[test]]
+name = "parents"
+path = "tests/parents.rs"
+
+[[test]]
+name = "ret"
+path = "tests/ret.rs"
+
+[[test]]
+name = "targets"
+path = "tests/targets.rs"
+
+[[test]]
+name = "ui"
+path = "tests/ui.rs"
+
[dependencies.proc-macro2]
version = "1.0.60"
@@ -85,3 +141,11 @@
[badges.maintenance]
status = "experimental"
+
+[lints.rust.unexpected_cfgs]
+level = "warn"
+priority = 0
+check-cfg = [
+ "cfg(flaky_tests)",
+ "cfg(tracing_unstable)",
+]
diff --git a/crates/tracing-attributes/METADATA b/crates/tracing-attributes/METADATA
index ca2c532..c03fc89 100644
--- a/crates/tracing-attributes/METADATA
+++ b/crates/tracing-attributes/METADATA
@@ -1,17 +1,17 @@
name: "tracing-attributes"
description: "Macro attributes for application-level tracing."
third_party {
- version: "0.1.27"
+ version: "0.1.28"
license_type: NOTICE
last_upgrade_date {
- year: 2023
- month: 11
- day: 17
+ year: 2024
+ month: 12
+ day: 20
}
homepage: "https://crates.io/crates/tracing-attributes"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/tracing-attributes/tracing-attributes-0.1.27.crate"
- version: "0.1.27"
+ value: "https://static.crates.io/crates/tracing-attributes/tracing-attributes-0.1.28.crate"
+ version: "0.1.28"
}
}
diff --git a/crates/tracing-attributes/README.md b/crates/tracing-attributes/README.md
index f14dbb6..dd0c7ed 100644
--- a/crates/tracing-attributes/README.md
+++ b/crates/tracing-attributes/README.md
@@ -18,7 +18,7 @@
[crates-badge]: https://img.shields.io/crates/v/tracing-attributes.svg
[crates-url]: https://crates.io/crates/tracing-attributes
[docs-badge]: https://docs.rs/tracing-attributes/badge.svg
-[docs-url]: https://docs.rs/tracing-attributes/0.1.26
+[docs-url]: https://docs.rs/tracing-attributes/0.1.28
[docs-master-badge]: https://img.shields.io/badge/docs-master-blue
[docs-master-url]: https://tracing-rs.netlify.com/tracing_attributes
[mit-badge]: https://img.shields.io/badge/license-MIT-blue.svg
@@ -37,7 +37,7 @@
Note that this macro is also re-exported by the main `tracing` crate.
-*Compiler support: [requires `rustc` 1.56+][msrv]*
+*Compiler support: [requires `rustc` 1.63+][msrv]*
[msrv]: #supported-rust-versions
@@ -47,7 +47,7 @@
```toml
[dependencies]
-tracing-attributes = "0.1.26"
+tracing-attributes = "0.1.28"
```
@@ -69,7 +69,7 @@
## Supported Rust Versions
Tracing is built against the latest stable release. The minimum supported
-version is 1.56. The current Tracing version is not guaranteed to build on Rust
+version is 1.63. The current Tracing version is not guaranteed to build on Rust
versions earlier than the minimum supported version.
Tracing follows the same compiler support policies as the rest of the Tokio
diff --git a/crates/tracing-attributes/src/attr.rs b/crates/tracing-attributes/src/attr.rs
index f5ad409..12525ec 100644
--- a/crates/tracing-attributes/src/attr.rs
+++ b/crates/tracing-attributes/src/attr.rs
@@ -17,8 +17,8 @@
#[derive(Clone, Default, Debug)]
pub(crate) struct InstrumentArgs {
level: Option<Level>,
- pub(crate) name: Option<LitStr>,
- target: Option<LitStr>,
+ pub(crate) name: Option<LitStrOrIdent>,
+ target: Option<LitStrOrIdent>,
pub(crate) parent: Option<Expr>,
pub(crate) follows_from: Option<Expr>,
pub(crate) skips: HashSet<Ident>,
@@ -87,6 +87,8 @@
// XXX: apparently we support names as either named args with an
// sign, _or_ as unnamed string literals. That's weird, but
// changing it is apparently breaking.
+ // This also means that when using idents for name, it must be via
+ // a named arg, i.e. `#[instrument(name = SOME_IDENT)]`.
if args.name.is_some() {
return Err(input.error("expected only a single `name` argument"));
}
@@ -211,8 +213,32 @@
}
}
+#[derive(Debug, Clone)]
+pub(super) enum LitStrOrIdent {
+ LitStr(LitStr),
+ Ident(Ident),
+}
+
+impl ToTokens for LitStrOrIdent {
+ fn to_tokens(&self, tokens: &mut TokenStream) {
+ match self {
+ LitStrOrIdent::LitStr(target) => target.to_tokens(tokens),
+ LitStrOrIdent::Ident(ident) => ident.to_tokens(tokens),
+ }
+ }
+}
+
+impl Parse for LitStrOrIdent {
+ fn parse(input: ParseStream<'_>) -> syn::Result<Self> {
+ input
+ .parse::<LitStr>()
+ .map(LitStrOrIdent::LitStr)
+ .or_else(|_| input.parse::<Ident>().map(LitStrOrIdent::Ident))
+ }
+}
+
struct StrArg<T> {
- value: LitStr,
+ value: LitStrOrIdent,
_p: std::marker::PhantomData<T>,
}
@@ -268,19 +294,14 @@
}
}
-#[derive(Clone, Debug, Hash, PartialEq, Eq)]
+#[derive(Clone, Debug, Hash, PartialEq, Eq, Default)]
pub(crate) enum FormatMode {
+ #[default]
Default,
Display,
Debug,
}
-impl Default for FormatMode {
- fn default() -> Self {
- FormatMode::Default
- }
-}
-
#[derive(Clone, Debug)]
pub(crate) struct Fields(pub(crate) Punctuated<Field, Token![,]>);
diff --git a/crates/tracing-attributes/src/expand.rs b/crates/tracing-attributes/src/expand.rs
index a7123e5..864bace 100644
--- a/crates/tracing-attributes/src/expand.rs
+++ b/crates/tracing-attributes/src/expand.rs
@@ -92,7 +92,7 @@
quote!(
#(#outer_attrs) *
- #vis #constness #unsafety #asyncness #abi fn #ident<#gen_params>(#params) #output
+ #vis #constness #asyncness #unsafety #abi fn #ident<#gen_params>(#params) #output
#where_clause
{
#(#inner_attrs) *
@@ -277,7 +277,8 @@
let mk_fut = match (err_event, ret_event) {
(Some(err_event), Some(ret_event)) => quote_spanned!(block.span()=>
async move {
- match async move #block.await {
+ let __match_scrutinee = async move #block.await;
+ match __match_scrutinee {
#[allow(clippy::unit_arg)]
Ok(x) => {
#ret_event;
@@ -422,10 +423,13 @@
"i32",
"u64",
"i64",
+ "u128",
+ "i128",
"f32",
"f64",
"usize",
"isize",
+ "String",
"NonZeroU8",
"NonZeroI8",
"NonZeroU16",
@@ -434,6 +438,8 @@
"NonZeroI32",
"NonZeroU64",
"NonZeroI64",
+ "NonZeroU128",
+ "NonZeroI128",
"NonZeroUsize",
"NonZeroIsize",
"Wrapping",
diff --git a/crates/tracing-attributes/src/lib.rs b/crates/tracing-attributes/src/lib.rs
index 6a0fd54..adfabac 100644
--- a/crates/tracing-attributes/src/lib.rs
+++ b/crates/tracing-attributes/src/lib.rs
@@ -6,7 +6,7 @@
//!
//! Note that this macro is also re-exported by the main `tracing` crate.
//!
-//! *Compiler support: [requires `rustc` 1.56+][msrv]*
+//! *Compiler support: [requires `rustc` 1.63+][msrv]*
//!
//! [msrv]: #supported-rust-versions
//!
@@ -41,7 +41,7 @@
//! ## Supported Rust Versions
//!
//! Tracing is built against the latest stable release. The minimum supported
-//! version is 1.56. The current Tracing version is not guaranteed to build on
+//! version is 1.63. The current Tracing version is not guaranteed to build on
//! Rust versions earlier than the minimum supported version.
//!
//! Tracing follows the same compiler support policies as the rest of the Tokio
@@ -70,7 +70,8 @@
overflowing_literals,
path_statements,
patterns_in_fns_without_body,
- private_in_public,
+ private_interfaces,
+ private_bounds,
unconditional_recursion,
unused_allocation,
unused_comparisons,
@@ -96,10 +97,10 @@
/// By default, all arguments to the function are included as fields on the
/// span. Arguments that are `tracing` [primitive types] implementing the
/// [`Value` trait] will be recorded as fields of that type. Types which do
-/// not implement `Value` will be recorded using [`std::fmt::Debug`].
+/// not implement `Value` will be recorded using [`fmt::Debug`].
///
/// [primitive types]: https://docs.rs/tracing/latest/tracing/field/trait.Value.html#foreign-impls
-/// [`Value` trait]: https://docs.rs/tracing/latest/tracing/field/trait.Value.html.
+/// [`Value` trait]: https://docs.rs/tracing/latest/tracing/field/trait.Value.html
///
/// # Overriding Span Attributes
///
diff --git a/crates/tracing-attributes/tests/async_fn.rs b/crates/tracing-attributes/tests/async_fn.rs
index 1d92734..365a72c 100644
--- a/crates/tracing-attributes/tests/async_fn.rs
+++ b/crates/tracing-attributes/tests/async_fn.rs
@@ -1,9 +1,10 @@
-use tracing_mock::*;
-
use std::convert::Infallible;
use std::{future::Future, pin::Pin, sync::Arc};
+
use tracing::subscriber::with_default;
use tracing_attributes::instrument;
+use tracing_mock::{expect, subscriber};
+use tracing_test::{block_on_future, PollN};
#[instrument]
async fn test_async_fn(polls: usize) -> Result<(), ()> {
@@ -31,6 +32,9 @@
#[instrument]
async fn test_async_fn_empty() {}
+#[instrument]
+async unsafe fn test_async_unsafe_fn_empty() {}
+
// Reproduces a compile error when an instrumented function body contains inner
// attributes (https://github.com/tokio-rs/tracing/issues/2294).
#[deny(unused_variables)]
@@ -196,8 +200,8 @@
let (subscriber, handle) = subscriber::mock()
.new_span(
span.clone()
- .with_field(expect::field("self"))
- .with_field(expect::field("v")),
+ .with_fields(expect::field("self"))
+ .with_fields(expect::field("v")),
)
.enter(span.clone())
.new_span(span3.clone())
@@ -207,7 +211,7 @@
.enter(span3.clone())
.exit(span3.clone())
.drop_span(span3)
- .new_span(span2.clone().with_field(expect::field("self")))
+ .new_span(span2.clone().with_fields(expect::field("self")))
.enter(span2.clone())
.event(expect::event().with_fields(expect::field("val").with_value(&5u64)))
.exit(span2.clone())
@@ -257,7 +261,7 @@
let span = expect::span().named("call");
let (subscriber, handle) = subscriber::mock()
.new_span(
- span.clone().with_field(
+ span.clone().with_fields(
expect::field("_v")
.with_value(&5usize)
.and(expect::field("test").with_value(&tracing::field::debug(10)))
@@ -327,7 +331,7 @@
let span4 = expect::span().named("sync_fun");
let (subscriber, handle) = subscriber::mock()
/*.new_span(span.clone()
- .with_field(
+ .with_fields(
expect::field("Self").with_value(&"TestImpler")))
.enter(span.clone())
.exit(span.clone())
@@ -335,13 +339,13 @@
.new_span(
span2
.clone()
- .with_field(expect::field("Self").with_value(&std::any::type_name::<TestImpl>())),
+ .with_fields(expect::field("Self").with_value(&std::any::type_name::<TestImpl>())),
)
.enter(span2.clone())
.new_span(
span4
.clone()
- .with_field(expect::field("Self").with_value(&std::any::type_name::<TestImpl>())),
+ .with_fields(expect::field("Self").with_value(&std::any::type_name::<TestImpl>())),
)
.enter(span4.clone())
.exit(span4.clone())
@@ -354,7 +358,7 @@
.new_span(
span3
.clone()
- .with_field(expect::field("Self").with_value(&std::any::type_name::<TestImpl>())),
+ .with_fields(expect::field("Self").with_value(&std::any::type_name::<TestImpl>())),
)
.enter(span3.clone())
.exit(span3.clone())
diff --git a/crates/tracing-attributes/tests/destructuring.rs b/crates/tracing-attributes/tests/destructuring.rs
index cc4fecf..b0e8737 100644
--- a/crates/tracing-attributes/tests/destructuring.rs
+++ b/crates/tracing-attributes/tests/destructuring.rs
@@ -11,7 +11,7 @@
let (subscriber, handle) = subscriber::mock()
.new_span(
- span.clone().with_field(
+ span.clone().with_fields(
expect::field("arg1")
.with_value(&format_args!("1"))
.and(expect::field("arg2").with_value(&format_args!("2")))
@@ -40,7 +40,7 @@
let (subscriber, handle) = subscriber::mock()
.new_span(
- span.clone().with_field(
+ span.clone().with_fields(
expect::field("arg1")
.with_value(&format_args!("1"))
.and(expect::field("arg2").with_value(&format_args!("2")))
@@ -72,7 +72,7 @@
let (subscriber, handle) = subscriber::mock()
.new_span(
span.clone()
- .with_field(expect::field("arg1").with_value(&1usize).only()),
+ .with_fields(expect::field("arg1").with_value(&1usize).only()),
)
.enter(span.clone())
.exit(span.clone())
@@ -98,7 +98,7 @@
let (subscriber, handle) = subscriber::mock()
.new_span(
- span.clone().with_field(
+ span.clone().with_fields(
expect::field("arg1")
.with_value(&format_args!("1"))
.and(expect::field("arg2").with_value(&format_args!("2")))
@@ -139,7 +139,7 @@
let (subscriber, handle) = subscriber::mock()
.new_span(
- span.clone().with_field(
+ span.clone().with_fields(
expect::field("arg1")
.with_value(&format_args!("1"))
.and(expect::field("arg2").with_value(&format_args!("2")))
@@ -184,7 +184,7 @@
let (subscriber, handle) = subscriber::mock()
.new_span(
- span.clone().with_field(
+ span.clone().with_fields(
expect::field("arg1")
.with_value(&format_args!("1"))
.and(expect::field("arg2").with_value(&format_args!("2")))
diff --git a/crates/tracing-attributes/tests/err.rs b/crates/tracing-attributes/tests/err.rs
index bee7aa5..b2c5339 100644
--- a/crates/tracing-attributes/tests/err.rs
+++ b/crates/tracing-attributes/tests/err.rs
@@ -4,6 +4,7 @@
use tracing_mock::*;
use tracing_subscriber::filter::EnvFilter;
use tracing_subscriber::layer::SubscriberExt;
+use tracing_test::{block_on_future, PollN};
use std::convert::TryFrom;
use std::num::TryFromIntError;
@@ -159,7 +160,7 @@
let (subscriber, handle) = subscriber::mock()
.new_span(
span.clone()
- .with_field(expect::field("x").with_value(&10usize).only()),
+ .with_fields(expect::field("x").with_value(&10usize).only()),
)
.enter(span.clone())
.exit(span.clone())
diff --git a/crates/tracing-attributes/tests/fields.rs b/crates/tracing-attributes/tests/fields.rs
index a3b23d7..3f9dce6 100644
--- a/crates/tracing-attributes/tests/fields.rs
+++ b/crates/tracing-attributes/tests/fields.rs
@@ -34,6 +34,9 @@
let _ = s;
}
+#[instrument(fields(keywords.impl.type.fn = _arg), skip(_arg))]
+fn fn_keyword_ident_in_field(_arg: &str) {}
+
#[derive(Debug)]
struct HasField {
my_field: &'static str,
@@ -46,7 +49,7 @@
#[test]
fn fields() {
- let span = expect::span().with_field(
+ let span = expect::span().with_fields(
expect::field("foo")
.with_value(&"bar")
.and(expect::field("dsa").with_value(&true))
@@ -60,7 +63,7 @@
#[test]
fn expr_field() {
- let span = expect::span().with_field(
+ let span = expect::span().with_fields(
expect::field("s")
.with_value(&"hello world")
.and(expect::field("len").with_value(&"hello world".len()))
@@ -73,7 +76,7 @@
#[test]
fn two_expr_fields() {
- let span = expect::span().with_field(
+ let span = expect::span().with_fields(
expect::field("s")
.with_value(&"hello world")
.and(expect::field("s.len").with_value(&"hello world".len()))
@@ -87,7 +90,7 @@
#[test]
fn clashy_expr_field() {
- let span = expect::span().with_field(
+ let span = expect::span().with_fields(
// Overriding the `s` field should record `s` as a `Display` value,
// rather than as a `Debug` value.
expect::field("s")
@@ -99,7 +102,7 @@
fn_clashy_expr_field("hello world");
});
- let span = expect::span().with_field(expect::field("s").with_value(&"s").only());
+ let span = expect::span().with_fields(expect::field("s").with_value(&"s").only());
run_test(span, || {
fn_clashy_expr_field2("hello world");
});
@@ -108,7 +111,7 @@
#[test]
fn self_expr_field() {
let span =
- expect::span().with_field(expect::field("my_field").with_value(&"hello world").only());
+ expect::span().with_fields(expect::field("my_field").with_value(&"hello world").only());
run_test(span, || {
let has_field = HasField {
my_field: "hello world",
@@ -119,7 +122,7 @@
#[test]
fn parameters_with_fields() {
- let span = expect::span().with_field(
+ let span = expect::span().with_fields(
expect::field("foo")
.with_value(&"bar")
.and(expect::field("param").with_value(&1u32))
@@ -132,7 +135,7 @@
#[test]
fn empty_field() {
- let span = expect::span().with_field(expect::field("foo").with_value(&"bar").only());
+ let span = expect::span().with_fields(expect::field("foo").with_value(&"bar").only());
run_test(span, || {
fn_empty_field();
});
@@ -140,12 +143,22 @@
#[test]
fn string_field() {
- let span = expect::span().with_field(expect::field("s").with_value(&"hello world").only());
+ let span = expect::span().with_fields(expect::field("s").with_value(&"hello world").only());
run_test(span, || {
fn_string(String::from("hello world"));
});
}
+#[test]
+fn keyword_ident_in_field_name() {
+ let span = expect::span().with_fields(
+ expect::field("keywords.impl.type.fn")
+ .with_value(&"test")
+ .only(),
+ );
+ run_test(span, || fn_keyword_ident_in_field("test"));
+}
+
fn run_test<F: FnOnce() -> T, T>(span: NewSpan, fun: F) {
let (subscriber, handle) = subscriber::mock()
.new_span(span)
diff --git a/crates/tracing-attributes/tests/follows_from.rs b/crates/tracing-attributes/tests/follows_from.rs
index 6b5526b..a81c6c7 100644
--- a/crates/tracing-attributes/tests/follows_from.rs
+++ b/crates/tracing-attributes/tests/follows_from.rs
@@ -1,6 +1,7 @@
use tracing::{subscriber::with_default, Id, Level, Span};
use tracing_attributes::instrument;
-use tracing_mock::*;
+use tracing_mock::{expect, subscriber};
+use tracing_test::block_on_future;
#[instrument(follows_from = causes, skip(causes))]
fn with_follows_from_sync(causes: impl IntoIterator<Item = impl Into<Option<Id>>>) {}
diff --git a/crates/tracing-attributes/tests/instrument.rs b/crates/tracing-attributes/tests/instrument.rs
index f751eeb..402be85 100644
--- a/crates/tracing-attributes/tests/instrument.rs
+++ b/crates/tracing-attributes/tests/instrument.rs
@@ -51,7 +51,7 @@
#[test]
fn fields() {
#[instrument(target = "my_target", level = "debug")]
- fn my_fn(arg1: usize, arg2: bool) {}
+ fn my_fn(arg1: usize, arg2: bool, arg3: String) {}
let span = expect::span()
.named("my_fn")
@@ -64,10 +64,11 @@
.with_target("my_target");
let (subscriber, handle) = subscriber::mock()
.new_span(
- span.clone().with_field(
+ span.clone().with_fields(
expect::field("arg1")
.with_value(&2usize)
.and(expect::field("arg2").with_value(&false))
+ .and(expect::field("arg3").with_value(&"Cool".to_string()))
.only(),
),
)
@@ -75,10 +76,11 @@
.exit(span.clone())
.drop_span(span)
.new_span(
- span2.clone().with_field(
+ span2.clone().with_fields(
expect::field("arg1")
.with_value(&3usize)
.and(expect::field("arg2").with_value(&true))
+ .and(expect::field("arg3").with_value(&"Still Cool".to_string()))
.only(),
),
)
@@ -89,8 +91,8 @@
.run_with_handle();
with_default(subscriber, || {
- my_fn(2, false);
- my_fn(3, true);
+ my_fn(2, false, "Cool".to_string());
+ my_fn(3, true, "Still Cool".to_string());
});
handle.assert_finished();
@@ -98,7 +100,7 @@
#[test]
fn skip() {
- struct UnDebug(pub u32);
+ struct UnDebug();
#[instrument(target = "my_target", level = "debug", skip(_arg2, _arg3))]
fn my_fn(arg1: usize, _arg2: UnDebug, _arg3: UnDebug) {}
@@ -124,7 +126,7 @@
let (subscriber, handle) = subscriber::mock()
.new_span(
span.clone()
- .with_field(expect::field("arg1").with_value(&2usize).only()),
+ .with_fields(expect::field("arg1").with_value(&2usize).only()),
)
.enter(span.clone())
.exit(span.clone())
@@ -132,7 +134,7 @@
.new_span(
span2
.clone()
- .with_field(expect::field("arg1").with_value(&3usize).only()),
+ .with_fields(expect::field("arg1").with_value(&3usize).only()),
)
.enter(span2.clone())
.exit(span2.clone())
@@ -145,9 +147,9 @@
.run_with_handle();
with_default(subscriber, || {
- my_fn(2, UnDebug(0), UnDebug(1));
- my_fn(3, UnDebug(0), UnDebug(1));
- my_fn2(2, UnDebug(0), UnDebug(1));
+ my_fn(2, UnDebug(), UnDebug());
+ my_fn(3, UnDebug(), UnDebug());
+ my_fn2(2, UnDebug(), UnDebug());
});
handle.assert_finished();
@@ -169,7 +171,7 @@
let (subscriber, handle) = subscriber::mock()
.new_span(
- span.clone().with_field(
+ span.clone().with_fields(
expect::field("arg1")
.with_value(&format_args!("Foo"))
.and(expect::field("arg2").with_value(&format_args!("false"))),
@@ -202,7 +204,7 @@
let (subscriber, handle) = subscriber::mock()
.new_span(
- span.clone().with_field(
+ span.clone().with_fields(
expect::field("self")
.with_value(&format_args!("Foo"))
.and(expect::field("arg1").with_value(&42usize)),
@@ -234,7 +236,7 @@
let (subscriber, handle) = subscriber::mock()
.new_span(
span.clone()
- .with_field(expect::field("x").with_value(&10usize).only()),
+ .with_fields(expect::field("x").with_value(&10usize).only()),
)
.enter(span.clone())
.exit(span.clone())
@@ -250,3 +252,75 @@
handle.assert_finished();
}
+
+#[test]
+fn name_ident() {
+ const MY_NAME: &str = "my_name";
+ #[instrument(name = MY_NAME)]
+ fn name() {}
+
+ let span_name = expect::span().named(MY_NAME);
+
+ let (subscriber, handle) = subscriber::mock()
+ .new_span(span_name.clone())
+ .enter(span_name.clone())
+ .exit(span_name.clone())
+ .drop_span(span_name)
+ .only()
+ .run_with_handle();
+
+ with_default(subscriber, || {
+ name();
+ });
+
+ handle.assert_finished();
+}
+
+#[test]
+fn target_ident() {
+ const MY_TARGET: &str = "my_target";
+
+ #[instrument(target = MY_TARGET)]
+ fn target() {}
+
+ let span_target = expect::span().named("target").with_target(MY_TARGET);
+
+ let (subscriber, handle) = subscriber::mock()
+ .new_span(span_target.clone())
+ .enter(span_target.clone())
+ .exit(span_target.clone())
+ .drop_span(span_target)
+ .only()
+ .run_with_handle();
+
+ with_default(subscriber, || {
+ target();
+ });
+
+ handle.assert_finished();
+}
+
+#[test]
+fn target_name_ident() {
+ const MY_NAME: &str = "my_name";
+ const MY_TARGET: &str = "my_target";
+
+ #[instrument(target = MY_TARGET, name = MY_NAME)]
+ fn name_target() {}
+
+ let span_name_target = expect::span().named(MY_NAME).with_target(MY_TARGET);
+
+ let (subscriber, handle) = subscriber::mock()
+ .new_span(span_name_target.clone())
+ .enter(span_name_target.clone())
+ .exit(span_name_target.clone())
+ .drop_span(span_name_target)
+ .only()
+ .run_with_handle();
+
+ with_default(subscriber, || {
+ name_target();
+ });
+
+ handle.assert_finished();
+}
diff --git a/crates/tracing-attributes/tests/parents.rs b/crates/tracing-attributes/tests/parents.rs
index d455941..e6db581 100644
--- a/crates/tracing-attributes/tests/parents.rs
+++ b/crates/tracing-attributes/tests/parents.rs
@@ -21,23 +21,16 @@
.new_span(
contextual_parent
.clone()
- .with_contextual_parent(None)
- .with_explicit_parent(None),
+ .with_ancestry(expect::is_contextual_root()),
)
- .new_span(
- child
- .clone()
- .with_contextual_parent(Some("contextual_parent"))
- .with_explicit_parent(None),
- )
+ .new_span(child.clone().with_ancestry(expect::is_contextual_root()))
.enter(child.clone())
.exit(child.clone())
.enter(contextual_parent.clone())
.new_span(
child
.clone()
- .with_contextual_parent(Some("contextual_parent"))
- .with_explicit_parent(None),
+ .with_ancestry(expect::has_contextual_parent("contextual_parent")),
)
.enter(child.clone())
.exit(child)
@@ -68,20 +61,14 @@
.new_span(
contextual_parent
.clone()
- .with_contextual_parent(None)
- .with_explicit_parent(None),
+ .with_ancestry(expect::is_contextual_root()),
)
- .new_span(
- explicit_parent
- .with_contextual_parent(None)
- .with_explicit_parent(None),
- )
+ .new_span(explicit_parent.with_ancestry(expect::is_contextual_root()))
.enter(contextual_parent.clone())
.new_span(
child
.clone()
- .with_contextual_parent(Some("contextual_parent"))
- .with_explicit_parent(Some("explicit_parent")),
+ .with_ancestry(expect::has_explicit_parent("explicit_parent")),
)
.enter(child.clone())
.exit(child)
diff --git a/crates/tracing-attributes/tests/ret.rs b/crates/tracing-attributes/tests/ret.rs
index 90bd9e1..0ba2e10 100644
--- a/crates/tracing-attributes/tests/ret.rs
+++ b/crates/tracing-attributes/tests/ret.rs
@@ -1,11 +1,12 @@
use std::convert::TryFrom;
use std::num::TryFromIntError;
-use tracing_mock::*;
use tracing::{subscriber::with_default, Level};
use tracing_attributes::instrument;
+use tracing_mock::{expect, subscriber};
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::EnvFilter;
+use tracing_test::block_on_future;
#[instrument(ret)]
fn ret() -> i32 {
diff --git a/crates/tungstenite/.android-checksum.json b/crates/tungstenite/.android-checksum.json
new file mode 100644
index 0000000..a2c824f
--- /dev/null
+++ b/crates/tungstenite/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"src/protocol/frame/frame.rs":"785735f1358b10241ca631fbb488ad880ef9a1c0cd0db8eb41be42511cce955e","src/error.rs":"ba560f403dace05a43f361f76cd7d8401e9f7e5102defa2e0f6ac3686a4f9442","examples/srv_accept_unmasked_frames.rs":"95b45392010c89bb0de154bad23ec84cd45dac9197bf0255080086fcca5a5888","src/server.rs":"cef598fc1bfab158284a5518da8468067f901363fa3540a761be0058be97900f","src/protocol/frame/mod.rs":"16ee9055023cf8918b35238c1d3c10d82149e48c7b796ebba2ada2c64be91fce","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","cargo_embargo.json":"ab8fe9ae28c2e1ae4815aa7c0dcf4e3043ddfb6eb647d025e0d1a3c7ec3a7ab4","src/protocol/message.rs":"b03d221b0fd36702ccab2eacec54537502e6848347a9a025776f0d69b16aa3d1","src/protocol/frame/mask.rs":"7c3ba13e21924a0bcaeac08858d685b4d3f77fb6240424b4f78614e928075b94","src/handshake/headers.rs":"4cd4ffd698b53f03f1ecb5389a9034d861c1ec4e0344b191730630a4a066ea0b","src/client.rs":"8c25bab275a8773af9b8ba078509ca2d33362010adb5197bed443cc237ef28fc","src/handshake/machine.rs":"bbca958a2c2e2ce66d5d4396f7db75a7ec2e26e03551ee228c404221c6b3ed9d","LICENSE-MIT":"b95585e7b5f8ae870f766d229e944b03a0b16ac46b6e0d2328c3ec6e6854a855","examples/autobahn-client.rs":"312d5fa595f9cfebe068e48f365f91097a5b7a32b96eb93b3885d8090ddd352a","src/handshake/server.rs":"101ff8268099b6caa154e83ff32ef72d28cec3035664ddf793ff83ec9e7cfbb1","src/handshake/mod.rs":"371474e1e0dbf2fdd411f370763ffbefb7f98638a76498c6a9cbbba7eab60f0e","LICENSE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","README.md":"fd300344cd2672f34d1313ae163e787f621affb0e778a025e88a10b3eb464946","METADATA":"d1c589e52840b64acfd0550a3e0cc8a390f3dcaafae4b71a211512b3ecf4926b","src/stream.rs":"138ac055f480029d2272621d31326d1f32133f63bfda8e68d0e887e36e5a2640",".cargo-checksum.json":"1752b7d44ef10b3693a4ebe37517084ca7fba77b51cf55c76c6dc89236d8af38","LICENSE-APACHE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","benches/write.rs":"a4a30aa69221ee7d4f34310a2ac0608935cedaa2ea8a747b8bff30cf6325e24b","src/util.rs":"edb9d908ca0ef207a8a9ecab79cdf1fc9f91cf3cb62787154823f77dd0d08469","examples/callback-error.rs":"c4cea677237534a0b92c08ba4373b385c1761bd8d41d40275ec70342cb3a9d88","src/lib.rs":"9a4e0a99d141eee29b250e3484cb930a78d454edf1b18aafad8a103fbd75d2d8","Cargo.toml":"15e568ff82eeefa39118e34166a22fc4ffce72f31bfed161030b7a061d5ce31b","src/buffer.rs":"29815269d88d4893708b8d0badf6699ed76c2270e4adbff0f87f05d0ff7b91a5","examples/server.rs":"5ec9ad244d281deb0bf29080d6343a6206c5ae6bb9e275d20da99a1e183369ba","examples/client.rs":"7d15ef2b3e112e1131863899af01384522fc37c83d889428105046bc5838747f","Android.bp":"60fd38495349b1ab40738af89d4889d0d385221699ad2978e021da756c600526","src/handshake/client.rs":"879425517c96efe9628e48454be1470e08922be2c9a1eb241cffbe402bb27367","src/protocol/mod.rs":"7f284681aa2095f02c6457d376f03a2951421166fa1b5e47da047a57932a8bdb","src/protocol/frame/coding.rs":"22e18e946fe8ea7dabee2f04a074513076be111197a24def06b056adb9ba7907","examples/autobahn-server.rs":"0680afb9eb37f268dd3adc58504900ec82c56e694e7e6e222af5b335f5f223d0","CHANGELOG.md":"f93ca5ef40a4d8fa295cb01b432c61ccae83f366b303ff6fb9b6f6c8cdbb88eb","benches/buffer.rs":"39cae616e4f10bb91e512d7040fd76733376cfe1cdd9bb47c08a35c92c0fb5fa","src/tls.rs":"25b0e9427f75b22384b641274aea94a14f15cd4570f5618dc2972c18561004c7","Cargo.lock":"8e1ad40f9fcccd27882f8f26c7ca5769172ec97e8a4bf32403cbf9d06e1d0dde"}}
\ No newline at end of file
diff --git a/crates/tungstenite/.cargo-checksum.json b/crates/tungstenite/.cargo-checksum.json
index 9c9ac07..1493c9a 100644
--- a/crates/tungstenite/.cargo-checksum.json
+++ b/crates/tungstenite/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"CHANGELOG.md":"983d5f14ef39ef3662e843dc9b6411c176a8d085c15c35740d043c7bb47dee0f","Cargo.lock":"4a39b4dc027e931a05182eb15728e3c1ccb12a7790325ece5470da88b38428b8","Cargo.toml":"58aa0d3b733e4bf0232c5bddf3d79988037359c4b2eae4875d16657a2492fd29","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"7fea0ee51a4ca5d5cea7464135fd55e8b09caf3a61da3d451ac8a22af95c033f","README.md":"0a8b44c900be104faf8bb8d24e419ca1569e32d7bfae4f1528bc27f9f01d4b33","benches/buffer.rs":"615d66b4e5d5f11758aa111f2c3274e82dba5afeca3863bf39138d906c67344c","benches/write.rs":"921c72b4f1b219873fd2c69baa15fcb064373d55d0a5a47f29fc7f03eebde767","examples/autobahn-client.rs":"9d525f68cab5cc1791aa8ba376bea77f27534f3e953f3a486bb4a515b9b3fbf4","examples/autobahn-server.rs":"4b50ff21113ca920a2d91a37f8f3452ecc64ee3dcf0d557905d3bcd1746a92e3","examples/callback-error.rs":"fe732374176dfe4e5d1f36a3fa09d6d6e3cc95885e920480ef5bcd94206835e0","examples/client.rs":"348a78efba691d502c5d2cb2c02f1704c513b2a752a2fa36e2e18d01f234a2bb","examples/server.rs":"676d6cc3b3042b106def38a5a5f65f2be9f43d6156f9164046b0a666ed06f048","examples/srv_accept_unmasked_frames.rs":"9a898510c622d2b2d3a28505d45b9187272186ae487fd74b827fe280c8f6a5f9","src/buffer.rs":"c346e4282b294b856d29a17ea078ebd2580b3142f531e1e10d545e4af0baba2b","src/client.rs":"4691e64343a38879367cafe45a999789fc143938e5e71a4d34e96d924df5ece3","src/error.rs":"4fa76e7d681a464da9e144b6fcc7022b00591607cac04107474b35e46ba50307","src/handshake/client.rs":"ee777c8e23f3503213d0fc5d0e35cee1c4f2112bfb2902543dda64e963b8257f","src/handshake/headers.rs":"0e6d3e15faa8b82bd2a239f5094335368e578acef2f17ee74825de606f529b75","src/handshake/machine.rs":"d8d07e8797ab93516154abc904cbc44dc72b49f6ce9601b4e559c7fc1ae065f5","src/handshake/mod.rs":"783b05cb7a45fcc4ff3d06eec5f17d87f7d1cc32db9dd836d1b8fcd2d9018436","src/handshake/server.rs":"000d888d2d5ba140a57db1e1520f844441b403fda61f7e674c4730e1fe15a202","src/lib.rs":"f5e1e6ae7e1af292f5d56011333f8dc28de18cd5a81d0da580a0c73b98ab7d5e","src/protocol/frame/coding.rs":"dfa740428a7ae63a308b0d22258354f5234690a105e10963075d4af02d8d5450","src/protocol/frame/frame.rs":"efebb2b48d17d7cecf090805ccb8c1930471210b74276c5c62ce941d8188a402","src/protocol/frame/mask.rs":"ab2d387f9e2dbfda29b26d3147facacaeb7b91de1ae5d07d742fb9b9d297f8b1","src/protocol/frame/mod.rs":"7ae23d5c389fb1ff789b7f2597ff390d7846dfd5d654bccf4ec3682ad1741055","src/protocol/message.rs":"446cfc9c28ac8cc91214699b62044d0a1ab1d8c62bee1f101758ae8560db5223","src/protocol/mod.rs":"e24aaa577263eeb890b5b0a3cf0ad023c1c8ccc01080abf441a3d8fd1cb88a47","src/server.rs":"f01a418588a7d924dcfc0cdc632aec7f483a4ab5409c1b5563b2205d97cf8a49","src/stream.rs":"af00ffb61ce504a83fbe88b2ceb5780824008cff4a876007e969ec1455a7b723","src/tls.rs":"8260cf1ac17f404d5c985f3defb3ca799324449c3a98ff438c6d2a7805335049","src/util.rs":"ada1383900811e7c367f20d02ebf87145b423c3b8fcee1d64329578d80064f8d"},"package":"9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1"}
\ No newline at end of file
+{"files":{"CHANGELOG.md":"ae6128d53192e8eec364869fc02c987044a4211b21298247ad989cbb981a568f","Cargo.lock":"6ac6e83fedb4c5b323970104e305218d630d595f867d57386ab59331462389c2","Cargo.toml":"0a41d92c418e779828de62e0171305eeedeee7405bdebb3d6750eeedd312b774","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"7fea0ee51a4ca5d5cea7464135fd55e8b09caf3a61da3d451ac8a22af95c033f","README.md":"0a8b44c900be104faf8bb8d24e419ca1569e32d7bfae4f1528bc27f9f01d4b33","benches/buffer.rs":"615d66b4e5d5f11758aa111f2c3274e82dba5afeca3863bf39138d906c67344c","benches/write.rs":"921c72b4f1b219873fd2c69baa15fcb064373d55d0a5a47f29fc7f03eebde767","examples/autobahn-client.rs":"7382d937bd54c2c33dfeed627f5bdbbffd6df5c742cf45508399ff51ff5f56e6","examples/autobahn-server.rs":"4b50ff21113ca920a2d91a37f8f3452ecc64ee3dcf0d557905d3bcd1746a92e3","examples/callback-error.rs":"fe732374176dfe4e5d1f36a3fa09d6d6e3cc95885e920480ef5bcd94206835e0","examples/client.rs":"5c6826b77827351bd5821962a8cf44dccebf127a253ce21fca0b5aaf4114683f","examples/server.rs":"4f00ab0ee18c67d60242800143f5a380078bffbb59440b9038813a0987478d66","examples/srv_accept_unmasked_frames.rs":"044332980954b9f7c4c81f7d6c6003b9feb1b90d147ce1899e75e8d16c82bb7e","src/buffer.rs":"c346e4282b294b856d29a17ea078ebd2580b3142f531e1e10d545e4af0baba2b","src/client.rs":"7d9344d4985d31fd6c5816c66d01d4084b4aa45ce40e622556f9797fe161c144","src/error.rs":"0c26d00dc0cf0da1a73b04604a0230388b2de2b5a9da53eff8ac15e1143dcbfd","src/handshake/client.rs":"e2a1693a111fd41d09e2bbcb16645c87dc72fdbc3f232ccbd54e9a7daf578c6b","src/handshake/headers.rs":"0e6d3e15faa8b82bd2a239f5094335368e578acef2f17ee74825de606f529b75","src/handshake/machine.rs":"54a82a2643682e2ae17a98e69dcfa8ad10761919ea42f696551970057a428420","src/handshake/mod.rs":"b60daed1cff1a6f1692c2a7104df2b924d86a378a9375580ad8ddaf65a9fb5e5","src/handshake/server.rs":"9602d3330583d2a226ff5d084cd7a154bde50a26fd13b1b83335c3e5465f51a0","src/lib.rs":"8de3905c5f1699b2f52f86d11f3275f1b30f009a9bfbac7b9b784dc628537fb0","src/protocol/frame/coding.rs":"88b62c0bbce91edc9aea625889cfcb15b7e7c9b3fae00a31cbdae5b6aae1dde6","src/protocol/frame/frame.rs":"d60af70e22755abbec31acaeaa0dc99d65e83f038dc8509da68f78077801675c","src/protocol/frame/mask.rs":"ab2d387f9e2dbfda29b26d3147facacaeb7b91de1ae5d07d742fb9b9d297f8b1","src/protocol/frame/mod.rs":"7ae23d5c389fb1ff789b7f2597ff390d7846dfd5d654bccf4ec3682ad1741055","src/protocol/message.rs":"ce85c659ea1c384ed954d543e9d97b9d2a6e86cf1a472eac0a2c0a2a3a2b9997","src/protocol/mod.rs":"e24aaa577263eeb890b5b0a3cf0ad023c1c8ccc01080abf441a3d8fd1cb88a47","src/server.rs":"f01a418588a7d924dcfc0cdc632aec7f483a4ab5409c1b5563b2205d97cf8a49","src/stream.rs":"af00ffb61ce504a83fbe88b2ceb5780824008cff4a876007e969ec1455a7b723","src/tls.rs":"8260cf1ac17f404d5c985f3defb3ca799324449c3a98ff438c6d2a7805335049","src/util.rs":"ada1383900811e7c367f20d02ebf87145b423c3b8fcee1d64329578d80064f8d"},"package":"18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a"}
\ No newline at end of file
diff --git a/crates/tungstenite/Android.bp b/crates/tungstenite/Android.bp
index 2e273b6..6597038 100644
--- a/crates/tungstenite/Android.bp
+++ b/crates/tungstenite/Android.bp
@@ -18,7 +18,7 @@
host_supported: true,
crate_name: "tungstenite",
cargo_env_compat: true,
- cargo_pkg_version: "0.21.0",
+ cargo_pkg_version: "0.24.0",
crate_root: "src/lib.rs",
edition: "2018",
rustlibs: [
diff --git a/crates/tungstenite/CHANGELOG.md b/crates/tungstenite/CHANGELOG.md
index 5c0348e..83cb076 100644
--- a/crates/tungstenite/CHANGELOG.md
+++ b/crates/tungstenite/CHANGELOG.md
@@ -1,8 +1,25 @@
-# Unreleased
+# 0.24.0
+
+- Raised MSRV to 1.63 to match `tokio-tungstenite`.
+- Connecting to WSS URL without TLS features specified results in a better error.
+- Handshake will now flush after completion to be safe (works better with buffered streams).
+
+# 0.23.0
+
+- Disable default features for `rustls` giving the user more flexibility.
+
+# 0.22.0
+- Make `url` optional.
+- Add a builder for convenient headers and subprotocols construction.
+- Update `rustls` dependency.
+
+# 0.21.0
- Fix read-predominant auto pong responses not flushing when hitting WouldBlock errors.
- Improve `FrameHeader::format` write correctness.
-- Up minimum _rustls_ to `0.21.6`.
-- Update _webpki-roots_ to `0.26`.
+- Update `rustls` to `0.22`.
+- Update `webpki-roots` to `0.26`.
+- Update `rustls-native-certs` to `0.7`.
+- Update `http` to `1.0.0`.
# 0.20.1
- Fixes [CVE-2023-43669](https://github.com/snapview/tungstenite-rs/pull/379).
diff --git a/crates/tungstenite/Cargo.lock b/crates/tungstenite/Cargo.lock
index 7ec88dc..ce1cc85 100644
--- a/crates/tungstenite/Cargo.lock
+++ b/crates/tungstenite/Cargo.lock
@@ -4,9 +4,9 @@
[[package]]
name = "aho-corasick"
-version = "1.1.2"
+version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41"
dependencies = [
"memchr",
]
@@ -19,9 +19,9 @@
[[package]]
name = "anstyle"
-version = "1.0.4"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
+checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd"
[[package]]
name = "autocfg"
@@ -31,9 +31,9 @@
[[package]]
name = "base64"
-version = "0.21.5"
+version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
+checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]]
name = "bitflags"
@@ -43,9 +43,9 @@
[[package]]
name = "bitflags"
-version = "2.4.1"
+version = "2.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42"
[[package]]
name = "block-buffer"
@@ -58,21 +58,21 @@
[[package]]
name = "bumpalo"
-version = "3.14.0"
+version = "3.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
[[package]]
name = "byteorder"
-version = "1.5.0"
+version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
[[package]]
name = "bytes"
-version = "1.5.0"
+version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
[[package]]
name = "cast"
@@ -82,12 +82,9 @@
[[package]]
name = "cc"
-version = "1.0.83"
+version = "1.0.98"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
-dependencies = [
- "libc",
-]
+checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f"
[[package]]
name = "cfg-if"
@@ -124,18 +121,18 @@
[[package]]
name = "clap"
-version = "4.4.11"
+version = "4.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2"
+checksum = "5fd304a20bff958a57f04c4e96a2e7594cc4490a0e809cbd48bb6437edaa452d"
dependencies = [
"clap_builder",
]
[[package]]
name = "clap_builder"
-version = "4.4.11"
+version = "4.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb"
+checksum = "01c6a3f08f1fe5662a35cfe393aec09c4df95f60ee93b7556505260f75eee9e1"
dependencies = [
"anstyle",
"clap_lex",
@@ -143,15 +140,15 @@
[[package]]
name = "clap_lex"
-version = "0.6.0"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
+checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
[[package]]
name = "core-foundation"
-version = "0.9.4"
+version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
dependencies = [
"core-foundation-sys",
"libc",
@@ -159,15 +156,15 @@
[[package]]
name = "core-foundation-sys"
-version = "0.8.6"
+version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
[[package]]
name = "cpufeatures"
-version = "0.2.11"
+version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
+checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
dependencies = [
"libc",
]
@@ -209,6 +206,16 @@
]
[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
name = "crossbeam-deque"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -253,9 +260,9 @@
[[package]]
name = "data-encoding"
-version = "2.5.0"
+version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5"
+checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
[[package]]
name = "digest"
@@ -275,9 +282,9 @@
[[package]]
name = "env_logger"
-version = "0.10.1"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbece"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
dependencies = [
"humantime",
"is-terminal",
@@ -288,19 +295,30 @@
[[package]]
name = "errno"
-version = "0.3.8"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
dependencies = [
+ "errno-dragonfly",
"libc",
- "windows-sys 0.52.0",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
]
[[package]]
name = "fastrand"
-version = "2.0.1"
+version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
[[package]]
name = "fnv"
@@ -325,9 +343,9 @@
[[package]]
name = "form_urlencoded"
-version = "1.2.1"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
dependencies = [
"percent-encoding",
]
@@ -344,9 +362,9 @@
[[package]]
name = "getrandom"
-version = "0.2.11"
+version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
dependencies = [
"cfg-if",
"libc",
@@ -361,15 +379,15 @@
[[package]]
name = "hermit-abi"
-version = "0.3.3"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
[[package]]
name = "http"
-version = "1.0.0"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b32afd38673a8016f7c9ae69e5af41a58f81b1d31689040f2f1959594ce194ea"
+checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258"
dependencies = [
"bytes",
"fnv",
@@ -390,9 +408,9 @@
[[package]]
name = "idna"
-version = "0.5.0"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
dependencies = [
"unicode-bidi",
"unicode-normalization",
@@ -435,9 +453,9 @@
[[package]]
name = "js-sys"
-version = "0.3.66"
+version = "0.3.64"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
dependencies = [
"wasm-bindgen",
]
@@ -450,27 +468,27 @@
[[package]]
name = "libc"
-version = "0.2.150"
+version = "0.2.155"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
+checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
[[package]]
name = "linux-raw-sys"
-version = "0.4.12"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456"
+checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0"
[[package]]
name = "log"
-version = "0.4.20"
+version = "0.4.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
[[package]]
name = "memchr"
-version = "2.6.4"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
[[package]]
name = "memoffset"
@@ -501,14 +519,24 @@
[[package]]
name = "num-traits"
-version = "0.2.17"
+version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
dependencies = [
"autocfg",
]
[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
name = "once_cell"
version = "1.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -522,11 +550,11 @@
[[package]]
name = "openssl"
-version = "0.10.61"
+version = "0.10.55"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6b8419dc8cc6d866deb801274bba2e6f8f6108c1bb7fcc10ee5ab864931dbb45"
+checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d"
dependencies = [
- "bitflags 2.4.1",
+ "bitflags 1.3.2",
"cfg-if",
"foreign-types",
"libc",
@@ -554,18 +582,18 @@
[[package]]
name = "openssl-src"
-version = "300.1.6+3.1.4"
+version = "111.26.0+1.1.1u"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "439fac53e092cd7442a3660c85dde4643ab3b5bd39040912388dcdabf6b88085"
+checksum = "efc62c9f12b22b8f5208c23a7200a442b2e5999f8bdf80233852122b5a4f6f37"
dependencies = [
"cc",
]
[[package]]
name = "openssl-sys"
-version = "0.9.97"
+version = "0.9.90"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3eaad34cdd97d81de97964fc7f29e2d104f483840d906ef56daa1912338460b"
+checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6"
dependencies = [
"cc",
"libc",
@@ -576,9 +604,9 @@
[[package]]
name = "percent-encoding"
-version = "2.3.1"
+version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
[[package]]
name = "pkg-config"
@@ -622,18 +650,18 @@
[[package]]
name = "proc-macro2"
-version = "1.0.70"
+version = "1.0.66"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
-version = "1.0.33"
+version = "1.0.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0"
dependencies = [
"proc-macro2",
]
@@ -670,9 +698,9 @@
[[package]]
name = "rayon"
-version = "1.8.0"
+version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
dependencies = [
"either",
"rayon-core",
@@ -680,28 +708,30 @@
[[package]]
name = "rayon-core"
-version = "1.12.0"
+version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
dependencies = [
+ "crossbeam-channel",
"crossbeam-deque",
"crossbeam-utils",
+ "num_cpus",
]
[[package]]
name = "redox_syscall"
-version = "0.4.1"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
dependencies = [
"bitflags 1.3.2",
]
[[package]]
name = "regex"
-version = "1.10.2"
+version = "1.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575"
dependencies = [
"aho-corasick",
"memchr",
@@ -711,9 +741,9 @@
[[package]]
name = "regex-automata"
-version = "0.4.3"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310"
dependencies = [
"aho-corasick",
"memchr",
@@ -722,45 +752,45 @@
[[package]]
name = "regex-syntax"
-version = "0.8.2"
+version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2"
[[package]]
name = "ring"
-version = "0.17.7"
+version = "0.17.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74"
+checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d"
dependencies = [
"cc",
+ "cfg-if",
"getrandom",
"libc",
"spin",
"untrusted",
- "windows-sys 0.48.0",
-]
-
-[[package]]
-name = "rustix"
-version = "0.38.26"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9470c4bf8246c8daf25f9598dca807fb6510347b1e1cfa55749113850c79d88a"
-dependencies = [
- "bitflags 2.4.1",
- "errno",
- "libc",
- "linux-raw-sys",
"windows-sys 0.52.0",
]
[[package]]
-name = "rustls"
-version = "0.22.0"
+name = "rustix"
+version = "0.38.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5bc238b76c51bbc449c55ffbc39d03772a057cc8cf783c49d4af4c2537b74a8b"
+checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5"
dependencies = [
- "log",
- "ring",
+ "bitflags 2.3.3",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.23.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79adb16721f56eb2d843e67676896a61ce7a0fa622dc18d3e372477a029d2740"
+dependencies = [
+ "once_cell",
"rustls-pki-types",
"rustls-webpki",
"subtle",
@@ -782,9 +812,9 @@
[[package]]
name = "rustls-pemfile"
-version = "2.0.0"
+version = "2.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35e4980fa29e4c4b212ffb3db068a564cbf560e51d3944b7c88bd8bf5bec64f4"
+checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d"
dependencies = [
"base64",
"rustls-pki-types",
@@ -792,15 +822,15 @@
[[package]]
name = "rustls-pki-types"
-version = "1.0.1"
+version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7673e0aa20ee4937c6aacfc12bb8341cfbf054cdd21df6bec5fd0629fe9339b"
+checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d"
[[package]]
name = "rustls-webpki"
-version = "0.102.0"
+version = "0.102.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de2635c8bc2b88d367767c5de8ea1d8db9af3f6219eba28442242d9ab81d1b89"
+checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e"
dependencies = [
"ring",
"rustls-pki-types",
@@ -862,18 +892,18 @@
[[package]]
name = "serde"
-version = "1.0.193"
+version = "1.0.174"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
+checksum = "3b88756493a5bd5e5395d53baa70b194b05764ab85b59e43e4b8f4e1192fa9b1"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.193"
+version = "1.0.174"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
+checksum = "6e5c3a298c7f978e53536f95a63bdc4c4a64550582f31a0359a9afda6aede62e"
dependencies = [
"proc-macro2",
"quote",
@@ -882,9 +912,9 @@
[[package]]
name = "serde_json"
-version = "1.0.108"
+version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b"
dependencies = [
"itoa",
"ryu",
@@ -893,9 +923,9 @@
[[package]]
name = "sha1"
-version = "0.10.6"
+version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
dependencies = [
"cfg-if",
"cpufeatures",
@@ -904,12 +934,12 @@
[[package]]
name = "socket2"
-version = "0.5.5"
+version = "0.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
+checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c"
dependencies = [
"libc",
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -926,9 +956,9 @@
[[package]]
name = "syn"
-version = "2.0.39"
+version = "2.0.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
+checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0"
dependencies = [
"proc-macro2",
"quote",
@@ -937,9 +967,9 @@
[[package]]
name = "tempfile"
-version = "3.8.1"
+version = "3.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
+checksum = "5486094ee78b2e5038a6382ed7645bc084dc2ec433426ca4c3cb61e2007b8998"
dependencies = [
"cfg-if",
"fastrand",
@@ -950,27 +980,27 @@
[[package]]
name = "termcolor"
-version = "1.4.0"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
dependencies = [
"winapi-util",
]
[[package]]
name = "thiserror"
-version = "1.0.50"
+version = "1.0.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.50"
+version = "1.0.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96"
dependencies = [
"proc-macro2",
"quote",
@@ -1004,7 +1034,7 @@
[[package]]
name = "tungstenite"
-version = "0.21.0"
+version = "0.24.0"
dependencies = [
"byteorder",
"bytes",
@@ -1030,21 +1060,21 @@
[[package]]
name = "typenum"
-version = "1.17.0"
+version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
[[package]]
name = "unicode-bidi"
-version = "0.3.14"
+version = "0.3.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
[[package]]
name = "unicode-ident"
-version = "1.0.12"
+version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
[[package]]
name = "unicode-normalization"
@@ -1063,9 +1093,9 @@
[[package]]
name = "url"
-version = "2.5.0"
+version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
+checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
dependencies = [
"form_urlencoded",
"idna",
@@ -1092,9 +1122,9 @@
[[package]]
name = "walkdir"
-version = "2.4.0"
+version = "2.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
dependencies = [
"same-file",
"winapi-util",
@@ -1108,9 +1138,9 @@
[[package]]
name = "wasm-bindgen"
-version = "0.2.89"
+version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
dependencies = [
"cfg-if",
"wasm-bindgen-macro",
@@ -1118,9 +1148,9 @@
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.89"
+version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
dependencies = [
"bumpalo",
"log",
@@ -1133,9 +1163,9 @@
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.89"
+version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -1143,9 +1173,9 @@
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.89"
+version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
dependencies = [
"proc-macro2",
"quote",
@@ -1156,15 +1186,15 @@
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.89"
+version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
[[package]]
name = "web-sys"
-version = "0.3.66"
+version = "0.3.64"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f"
+checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -1172,9 +1202,9 @@
[[package]]
name = "webpki-roots"
-version = "0.26.0"
+version = "0.26.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0de2cfda980f21be5a7ed2eadb3e6fe074d56022bea2cdeb1a62eb220fc04188"
+checksum = "b3de34ae270483955a94f4b21bdaaeb83d508bb84a01435f393818edb0012009"
dependencies = [
"rustls-pki-types",
]
@@ -1197,9 +1227,9 @@
[[package]]
name = "winapi-util"
-version = "0.1.6"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
dependencies = [
"winapi",
]
@@ -1216,7 +1246,7 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
dependencies = [
- "windows-targets 0.48.5",
+ "windows-targets 0.48.1",
]
[[package]]
@@ -1225,125 +1255,132 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
dependencies = [
- "windows-targets 0.52.0",
+ "windows-targets 0.52.5",
]
[[package]]
name = "windows-targets"
-version = "0.48.5"
+version = "0.48.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
dependencies = [
- "windows_aarch64_gnullvm 0.48.5",
- "windows_aarch64_msvc 0.48.5",
- "windows_i686_gnu 0.48.5",
- "windows_i686_msvc 0.48.5",
- "windows_x86_64_gnu 0.48.5",
- "windows_x86_64_gnullvm 0.48.5",
- "windows_x86_64_msvc 0.48.5",
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
]
[[package]]
name = "windows-targets"
-version = "0.52.0"
+version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
dependencies = [
- "windows_aarch64_gnullvm 0.52.0",
- "windows_aarch64_msvc 0.52.0",
- "windows_i686_gnu 0.52.0",
- "windows_i686_msvc 0.52.0",
- "windows_x86_64_gnu 0.52.0",
- "windows_x86_64_gnullvm 0.52.0",
- "windows_x86_64_msvc 0.52.0",
+ "windows_aarch64_gnullvm 0.52.5",
+ "windows_aarch64_msvc 0.52.5",
+ "windows_i686_gnu 0.52.5",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc 0.52.5",
+ "windows_x86_64_gnu 0.52.5",
+ "windows_x86_64_gnullvm 0.52.5",
+ "windows_x86_64_msvc 0.52.5",
]
[[package]]
name = "windows_aarch64_gnullvm"
-version = "0.48.5"
+version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
[[package]]
name = "windows_aarch64_gnullvm"
-version = "0.52.0"
+version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
[[package]]
name = "windows_aarch64_msvc"
-version = "0.48.5"
+version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
[[package]]
name = "windows_aarch64_msvc"
-version = "0.52.0"
+version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
[[package]]
name = "windows_i686_gnu"
-version = "0.48.5"
+version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
[[package]]
name = "windows_i686_gnu"
-version = "0.52.0"
+version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
[[package]]
name = "windows_i686_msvc"
-version = "0.48.5"
+version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
[[package]]
name = "windows_i686_msvc"
-version = "0.52.0"
+version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
[[package]]
name = "windows_x86_64_gnu"
-version = "0.48.5"
+version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
[[package]]
name = "windows_x86_64_gnu"
-version = "0.52.0"
+version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
[[package]]
name = "windows_x86_64_gnullvm"
-version = "0.48.5"
+version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
[[package]]
name = "windows_x86_64_gnullvm"
-version = "0.52.0"
+version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
[[package]]
name = "windows_x86_64_msvc"
-version = "0.48.5"
+version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
[[package]]
name = "windows_x86_64_msvc"
-version = "0.52.0"
+version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
[[package]]
name = "zeroize"
-version = "1.7.0"
+version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d"
+checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
diff --git a/crates/tungstenite/Cargo.toml b/crates/tungstenite/Cargo.toml
index 3d8cca5..beee740 100644
--- a/crates/tungstenite/Cargo.toml
+++ b/crates/tungstenite/Cargo.toml
@@ -11,13 +11,14 @@
[package]
edition = "2018"
-rust-version = "1.51"
+rust-version = "1.63"
name = "tungstenite"
-version = "0.21.0"
+version = "0.24.0"
authors = [
"Alexey Galakhov",
"Daniel Abramov",
]
+build = false
include = [
"benches/**/*",
"src/**/*",
@@ -26,9 +27,13 @@
"README.md",
"CHANGELOG.md",
]
+autobins = false
+autoexamples = false
+autotests = false
+autobenches = false
description = "Lightweight stream-based WebSocket implementation"
homepage = "https://github.com/snapview/tungstenite-rs"
-documentation = "https://docs.rs/tungstenite/0.21.0"
+documentation = "https://docs.rs/tungstenite/0.24.0"
readme = "README.md"
keywords = [
"websocket",
@@ -45,36 +50,48 @@
[package.metadata.docs.rs]
all-features = true
-[[example]]
-name = "client"
-required-features = ["handshake"]
-
-[[example]]
-name = "server"
-required-features = ["handshake"]
+[lib]
+name = "tungstenite"
+path = "src/lib.rs"
[[example]]
name = "autobahn-client"
+path = "examples/autobahn-client.rs"
required-features = ["handshake"]
[[example]]
name = "autobahn-server"
+path = "examples/autobahn-server.rs"
required-features = ["handshake"]
[[example]]
name = "callback-error"
+path = "examples/callback-error.rs"
+required-features = ["handshake"]
+
+[[example]]
+name = "client"
+path = "examples/client.rs"
+required-features = ["handshake"]
+
+[[example]]
+name = "server"
+path = "examples/server.rs"
required-features = ["handshake"]
[[example]]
name = "srv_accept_unmasked_frames"
+path = "examples/srv_accept_unmasked_frames.rs"
required-features = ["handshake"]
[[bench]]
name = "buffer"
+path = "benches/buffer.rs"
harness = false
[[bench]]
name = "write"
+path = "benches/write.rs"
harness = false
[dependencies.byteorder]
@@ -107,8 +124,10 @@
version = "0.8.0"
[dependencies.rustls]
-version = "0.22.0"
+version = "0.23.0"
+features = ["std"]
optional = true
+default-features = false
[dependencies.rustls-native-certs]
version = "0.7.0"
@@ -162,7 +181,6 @@
"http",
"httparse",
"sha1",
- "url",
]
native-tls = ["native-tls-crate"]
native-tls-vendored = [
@@ -177,3 +195,4 @@
"__rustls-tls",
"webpki-roots",
]
+url = ["dep:url"]
diff --git a/crates/tungstenite/METADATA b/crates/tungstenite/METADATA
index 288a9f7..d92dd4d 100644
--- a/crates/tungstenite/METADATA
+++ b/crates/tungstenite/METADATA
@@ -1,17 +1,17 @@
name: "tungstenite"
description: "Lightweight stream-based WebSocket implementation"
third_party {
- version: "0.21.0"
+ version: "0.24.0"
license_type: NOTICE
last_upgrade_date {
year: 2024
- month: 2
- day: 8
+ month: 12
+ day: 20
}
homepage: "https://crates.io/crates/tungstenite"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/tungstenite/tungstenite-0.21.0.crate"
- version: "0.21.0"
+ value: "https://static.crates.io/crates/tungstenite/tungstenite-0.24.0.crate"
+ version: "0.24.0"
}
}
diff --git a/crates/tungstenite/examples/autobahn-client.rs b/crates/tungstenite/examples/autobahn-client.rs
index ac7a7d1..577d5e7 100644
--- a/crates/tungstenite/examples/autobahn-client.rs
+++ b/crates/tungstenite/examples/autobahn-client.rs
@@ -1,29 +1,25 @@
use log::*;
-use url::Url;
use tungstenite::{connect, Error, Message, Result};
const AGENT: &str = "Tungstenite";
fn get_case_count() -> Result<u32> {
- let (mut socket, _) = connect(Url::parse("ws://localhost:9001/getCaseCount").unwrap())?;
+ let (mut socket, _) = connect("ws://localhost:9001/getCaseCount")?;
let msg = socket.read()?;
socket.close(None)?;
Ok(msg.into_text()?.parse::<u32>().unwrap())
}
fn update_reports() -> Result<()> {
- let (mut socket, _) = connect(
- Url::parse(&format!("ws://localhost:9001/updateReports?agent={}", AGENT)).unwrap(),
- )?;
+ let (mut socket, _) = connect(&format!("ws://localhost:9001/updateReports?agent={AGENT}"))?;
socket.close(None)?;
Ok(())
}
fn run_test(case: u32) -> Result<()> {
info!("Running test case {}", case);
- let case_url =
- Url::parse(&format!("ws://localhost:9001/runCase?case={}&agent={}", case, AGENT)).unwrap();
+ let case_url = &format!("ws://localhost:9001/runCase?case={case}&agent={AGENT}");
let (mut socket, _) = connect(case_url)?;
loop {
match socket.read()? {
diff --git a/crates/tungstenite/examples/client.rs b/crates/tungstenite/examples/client.rs
index a24f316..5eeba76 100644
--- a/crates/tungstenite/examples/client.rs
+++ b/crates/tungstenite/examples/client.rs
@@ -1,23 +1,21 @@
use tungstenite::{connect, Message};
-use url::Url;
fn main() {
env_logger::init();
- let (mut socket, response) =
- connect(Url::parse("ws://localhost:3012/socket").unwrap()).expect("Can't connect");
+ let (mut socket, response) = connect("ws://localhost:3012/socket").expect("Can't connect");
println!("Connected to the server");
println!("Response HTTP code: {}", response.status());
println!("Response contains the following headers:");
for (ref header, _value) in response.headers() {
- println!("* {}", header);
+ println!("* {header}");
}
socket.send(Message::Text("Hello WebSocket".into())).unwrap();
loop {
let msg = socket.read().expect("Error reading message");
- println!("Received: {}", msg);
+ println!("Received: {msg}");
}
// socket.close(None);
}
diff --git a/crates/tungstenite/examples/server.rs b/crates/tungstenite/examples/server.rs
index 2183b96..14100a6 100644
--- a/crates/tungstenite/examples/server.rs
+++ b/crates/tungstenite/examples/server.rs
@@ -15,7 +15,7 @@
println!("The request's path is: {}", req.uri().path());
println!("The request's headers are:");
for (ref header, _value) in req.headers() {
- println!("* {}", header);
+ println!("* {header}");
}
// Let's add an additional header to our response to the client.
diff --git a/crates/tungstenite/examples/srv_accept_unmasked_frames.rs b/crates/tungstenite/examples/srv_accept_unmasked_frames.rs
index b65e4f7..7c75721 100644
--- a/crates/tungstenite/examples/srv_accept_unmasked_frames.rs
+++ b/crates/tungstenite/examples/srv_accept_unmasked_frames.rs
@@ -15,7 +15,7 @@
println!("The request's path is: {}", req.uri().path());
println!("The request's headers are:");
for (ref header, _value) in req.headers() {
- println!("* {}", header);
+ println!("* {header}");
}
// Let's add an additional header to our response to the client.
@@ -40,7 +40,7 @@
loop {
let msg = websocket.read().unwrap();
if msg.is_binary() || msg.is_text() {
- println!("received message {}", msg);
+ println!("received message {msg}");
}
}
});
diff --git a/crates/tungstenite/src/client.rs b/crates/tungstenite/src/client.rs
index 9b30037..5b4dd0f 100644
--- a/crates/tungstenite/src/client.rs
+++ b/crates/tungstenite/src/client.rs
@@ -1,16 +1,15 @@
//! Methods to connect to a WebSocket as a client.
use std::{
+ convert::TryFrom,
io::{Read, Write},
net::{SocketAddr, TcpStream, ToSocketAddrs},
result::Result as StdResult,
};
-use http::{request::Parts, Uri};
+use http::{request::Parts, HeaderName, Uri};
use log::*;
-use url::Url;
-
use crate::{
handshake::client::{generate_key, Request, Response},
protocol::WebSocketConfig,
@@ -53,6 +52,12 @@
) -> Result<(WebSocket<MaybeTlsStream<TcpStream>>, Response)> {
let uri = request.uri();
let mode = uri_mode(uri)?;
+
+ #[cfg(not(any(feature = "native-tls", feature = "__rustls-tls")))]
+ if let Mode::Tls = mode {
+ return Err(Error::Url(UrlError::TlsFeatureNotEnabled));
+ }
+
let host = request.uri().host().ok_or(Error::Url(UrlError::NoHostName))?;
let host = if host.starts_with('[') { &host[1..host.len() - 1] } else { host };
let port = uri.port_u16().unwrap_or(match mode {
@@ -181,7 +186,7 @@
/// Trait for converting various types into HTTP requests used for a client connection.
///
-/// This trait is implemented by default for string slices, strings, `url::Url`, `http::Uri` and
+/// This trait is implemented by default for string slices, strings, `http::Uri` and
/// `http::Request<()>`. Note that the implementation for `http::Request<()>` is trivial and will
/// simply take your request and pass it as is further without altering any headers or URLs, so
/// be aware of this. If you just want to connect to the endpoint with a certain URL, better pass
@@ -241,13 +246,15 @@
}
}
-impl<'a> IntoClientRequest for &'a Url {
+#[cfg(feature = "url")]
+impl<'a> IntoClientRequest for &'a url::Url {
fn into_client_request(self) -> Result<Request> {
self.as_str().into_client_request()
}
}
-impl IntoClientRequest for Url {
+#[cfg(feature = "url")]
+impl IntoClientRequest for url::Url {
fn into_client_request(self) -> Result<Request> {
self.as_str().into_client_request()
}
@@ -265,3 +272,73 @@
Request::from_httparse(self)
}
}
+
+/// Builder for a custom [`IntoClientRequest`] with options to add
+/// custom additional headers and sub protocols.
+///
+/// # Example
+///
+/// ```rust no_run
+/// # use crate::*;
+/// use http::Uri;
+/// use tungstenite::{connect, ClientRequestBuilder};
+///
+/// let uri: Uri = "ws://localhost:3012/socket".parse().unwrap();
+/// let token = "my_jwt_token";
+/// let builder = ClientRequestBuilder::new(uri)
+/// .with_header("Authorization", format!("Bearer {token}"))
+/// .with_sub_protocol("my_sub_protocol");
+/// let socket = connect(builder).unwrap();
+/// ```
+#[derive(Debug, Clone)]
+pub struct ClientRequestBuilder {
+ uri: Uri,
+ /// Additional [`Request`] handshake headers
+ additional_headers: Vec<(String, String)>,
+ /// Handsake subprotocols
+ subprotocols: Vec<String>,
+}
+
+impl ClientRequestBuilder {
+ /// Initializes an empty request builder
+ #[must_use]
+ pub const fn new(uri: Uri) -> Self {
+ Self { uri, additional_headers: Vec::new(), subprotocols: Vec::new() }
+ }
+
+ /// Adds (`key`, `value`) as an additional header to the handshake request
+ pub fn with_header<K, V>(mut self, key: K, value: V) -> Self
+ where
+ K: Into<String>,
+ V: Into<String>,
+ {
+ self.additional_headers.push((key.into(), value.into()));
+ self
+ }
+
+ /// Adds `protocol` to the handshake request subprotocols (`Sec-WebSocket-Protocol`)
+ pub fn with_sub_protocol<P>(mut self, protocol: P) -> Self
+ where
+ P: Into<String>,
+ {
+ self.subprotocols.push(protocol.into());
+ self
+ }
+}
+
+impl IntoClientRequest for ClientRequestBuilder {
+ fn into_client_request(self) -> Result<Request> {
+ let mut request = self.uri.into_client_request()?;
+ let headers = request.headers_mut();
+ for (k, v) in self.additional_headers {
+ let key = HeaderName::try_from(k)?;
+ let value = v.parse()?;
+ headers.append(key, value);
+ }
+ if !self.subprotocols.is_empty() {
+ let protocols = self.subprotocols.join(", ").parse()?;
+ headers.append("Sec-WebSocket-Protocol", protocols);
+ }
+ Ok(request)
+ }
+}
diff --git a/crates/tungstenite/src/error.rs b/crates/tungstenite/src/error.rs
index faea80b..eaf7d24 100644
--- a/crates/tungstenite/src/error.rs
+++ b/crates/tungstenite/src/error.rs
@@ -149,6 +149,23 @@
},
}
+/// Indicates the specific type/cause of a subprotocol header error.
+#[derive(Error, Clone, PartialEq, Eq, Debug, Copy)]
+pub enum SubProtocolError {
+ /// The server sent a subprotocol to a client handshake request but none was requested
+ #[error("Server sent a subprotocol but none was requested")]
+ ServerSentSubProtocolNoneRequested,
+
+ /// The server sent an invalid subprotocol to a client handhshake request
+ #[error("Server sent an invalid subprotocol")]
+ InvalidSubProtocol,
+
+ /// The server sent no subprotocol to a client handshake request that requested one or more
+ /// subprotocols
+ #[error("Server sent no subprotocol")]
+ NoSubProtocol,
+}
+
/// Indicates the specific type/cause of a protocol error.
#[allow(missing_copy_implementations)]
#[derive(Error, Debug, PartialEq, Eq, Clone)]
@@ -174,6 +191,9 @@
/// The `Sec-WebSocket-Accept` header is either not present or does not specify the correct key value.
#[error("Key mismatch in \"Sec-WebSocket-Accept\" header")]
SecWebSocketAcceptKeyMismatch,
+ /// The `Sec-WebSocket-Protocol` header was invalid
+ #[error("SubProtocol error: {0}")]
+ SecWebSocketSubProtocolError(SubProtocolError),
/// Garbage data encountered after client request.
#[error("Junk after client request")]
JunkAfterRequest,
diff --git a/crates/tungstenite/src/handshake/client.rs b/crates/tungstenite/src/handshake/client.rs
index 08cc7b2..ecc727c 100644
--- a/crates/tungstenite/src/handshake/client.rs
+++ b/crates/tungstenite/src/handshake/client.rs
@@ -18,7 +18,7 @@
HandshakeRole, MidHandshake, ProcessingResult,
};
use crate::{
- error::{Error, ProtocolError, Result, UrlError},
+ error::{Error, ProtocolError, Result, SubProtocolError, UrlError},
protocol::{Role, WebSocket, WebSocketConfig},
};
@@ -54,6 +54,8 @@
// Check the URI scheme: only ws or wss are supported
let _ = crate::client::uri_mode(request.uri())?;
+ let subprotocols = extract_subprotocols_from_request(&request)?;
+
// Convert and verify the `http::Request` and turn it into the request as per RFC.
// Also extract the key from it (it must be present in a correct request).
let (request, key) = generate_request(request)?;
@@ -62,7 +64,11 @@
let client = {
let accept_key = derive_accept_key(key.as_ref());
- ClientHandshake { verify_data: VerifyData { accept_key }, config, _marker: PhantomData }
+ ClientHandshake {
+ verify_data: VerifyData { accept_key, subprotocols },
+ config,
+ _marker: PhantomData,
+ }
};
trace!("Client handshake initiated.");
@@ -178,11 +184,22 @@
Ok((req, key))
}
+fn extract_subprotocols_from_request(request: &Request) -> Result<Option<Vec<String>>> {
+ if let Some(subprotocols) = request.headers().get("Sec-WebSocket-Protocol") {
+ Ok(Some(subprotocols.to_str()?.split(",").map(|s| s.to_string()).collect()))
+ } else {
+ Ok(None)
+ }
+}
+
/// Information for handshake verification.
#[derive(Debug)]
struct VerifyData {
/// Accepted server key.
accept_key: String,
+
+ /// Accepted subprotocols
+ subprotocols: Option<Vec<String>>,
}
impl VerifyData {
@@ -238,7 +255,27 @@
// not present in the client's handshake (the server has indicated a
// subprotocol not requested by the client), the client MUST _Fail
// the WebSocket Connection_. (RFC 6455)
- // TODO
+ if headers.get("Sec-WebSocket-Protocol").is_none() && self.subprotocols.is_some() {
+ return Err(Error::Protocol(ProtocolError::SecWebSocketSubProtocolError(
+ SubProtocolError::NoSubProtocol,
+ )));
+ }
+
+ if headers.get("Sec-WebSocket-Protocol").is_some() && self.subprotocols.is_none() {
+ return Err(Error::Protocol(ProtocolError::SecWebSocketSubProtocolError(
+ SubProtocolError::ServerSentSubProtocolNoneRequested,
+ )));
+ }
+
+ if let Some(returned_subprotocol) = headers.get("Sec-WebSocket-Protocol") {
+ if let Some(accepted_subprotocols) = &self.subprotocols {
+ if !accepted_subprotocols.contains(&returned_subprotocol.to_str()?.to_string()) {
+ return Err(Error::Protocol(ProtocolError::SecWebSocketSubProtocolError(
+ SubProtocolError::InvalidSubProtocol,
+ )));
+ }
+ }
+ }
Ok(response)
}
@@ -290,9 +327,9 @@
#[test]
fn random_keys() {
let k1 = generate_key();
- println!("Generated random key 1: {}", k1);
+ println!("Generated random key 1: {k1}");
let k2 = generate_key();
- println!("Generated random key 2: {}", k2);
+ println!("Generated random key 2: {k2}");
assert_ne!(k1, k2);
assert_eq!(k1.len(), k2.len());
assert_eq!(k1.len(), 24);
@@ -312,9 +349,7 @@
Upgrade: websocket\r\n\
Sec-WebSocket-Version: 13\r\n\
Sec-WebSocket-Key: {key}\r\n\
- \r\n",
- host = host,
- key = key
+ \r\n"
)
.into_bytes()
}
diff --git a/crates/tungstenite/src/handshake/machine.rs b/crates/tungstenite/src/handshake/machine.rs
index 2e3f2cb..fc3cb55 100644
--- a/crates/tungstenite/src/handshake/machine.rs
+++ b/crates/tungstenite/src/handshake/machine.rs
@@ -81,7 +81,10 @@
..self
})
} else {
- RoundResult::StageFinished(StageResult::DoneWriting(self.stream))
+ RoundResult::Incomplete(HandshakeMachine {
+ state: HandshakeState::Flushing,
+ ..self
+ })
})
} else {
Ok(RoundResult::WouldBlock(HandshakeMachine {
@@ -90,6 +93,13 @@
}))
}
}
+ HandshakeState::Flushing => Ok(match self.stream.flush().no_block()? {
+ Some(()) => RoundResult::StageFinished(StageResult::DoneWriting(self.stream)),
+ None => RoundResult::WouldBlock(HandshakeMachine {
+ state: HandshakeState::Flushing,
+ ..self
+ }),
+ }),
}
}
}
@@ -128,6 +138,8 @@
Reading(ReadBuffer, AttackCheck),
/// Sending data to the peer.
Writing(Cursor<Vec<u8>>),
+ /// Flushing data to ensure that all intermediately buffered contents reach their destination.
+ Flushing,
}
/// Attack mitigation. Contains counters needed to prevent DoS attacks
diff --git a/crates/tungstenite/src/handshake/mod.rs b/crates/tungstenite/src/handshake/mod.rs
index a8db9a9..765b137 100644
--- a/crates/tungstenite/src/handshake/mod.rs
+++ b/crates/tungstenite/src/handshake/mod.rs
@@ -64,7 +64,7 @@
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
HandshakeError::Interrupted(_) => write!(f, "HandshakeError::Interrupted(...)"),
- HandshakeError::Failure(ref e) => write!(f, "HandshakeError::Failure({:?})", e),
+ HandshakeError::Failure(ref e) => write!(f, "HandshakeError::Failure({e:?})"),
}
}
}
@@ -73,7 +73,7 @@
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
HandshakeError::Interrupted(_) => write!(f, "Interrupted handshake (WouldBlock)"),
- HandshakeError::Failure(ref e) => write!(f, "{}", e),
+ HandshakeError::Failure(ref e) => write!(f, "{e}"),
}
}
}
diff --git a/crates/tungstenite/src/handshake/server.rs b/crates/tungstenite/src/handshake/server.rs
index bc072ce..f0c82bb 100644
--- a/crates/tungstenite/src/handshake/server.rs
+++ b/crates/tungstenite/src/handshake/server.rs
@@ -86,10 +86,10 @@
}
/// Create a response for the request with a custom body.
-pub fn create_response_with_body<T>(
- request: &HttpRequest<T>,
- generate_body: impl FnOnce() -> T,
-) -> Result<HttpResponse<T>> {
+pub fn create_response_with_body<T1, T2>(
+ request: &HttpRequest<T1>,
+ generate_body: impl FnOnce() -> T2,
+) -> Result<HttpResponse<T2>> {
Ok(create_parts(request)?.body(generate_body())?)
}
diff --git a/crates/tungstenite/src/lib.rs b/crates/tungstenite/src/lib.rs
index 4fdf0a6..8c593cd 100644
--- a/crates/tungstenite/src/lib.rs
+++ b/crates/tungstenite/src/lib.rs
@@ -39,7 +39,7 @@
#[cfg(feature = "handshake")]
pub use crate::{
- client::{client, connect},
+ client::{client, connect, ClientRequestBuilder},
handshake::{client::ClientHandshake, server::ServerHandshake, HandshakeError},
server::{accept, accept_hdr, accept_hdr_with_config, accept_with_config},
};
diff --git a/crates/tungstenite/src/protocol/frame/coding.rs b/crates/tungstenite/src/protocol/frame/coding.rs
index 827b7ca..a1d56bb 100644
--- a/crates/tungstenite/src/protocol/frame/coding.rs
+++ b/crates/tungstenite/src/protocol/frame/coding.rs
@@ -46,7 +46,7 @@
Data::Continue => write!(f, "CONTINUE"),
Data::Text => write!(f, "TEXT"),
Data::Binary => write!(f, "BINARY"),
- Data::Reserved(x) => write!(f, "RESERVED_DATA_{}", x),
+ Data::Reserved(x) => write!(f, "RESERVED_DATA_{x}"),
}
}
}
@@ -57,7 +57,7 @@
Control::Close => write!(f, "CLOSE"),
Control::Ping => write!(f, "PING"),
Control::Pong => write!(f, "PONG"),
- Control::Reserved(x) => write!(f, "RESERVED_CONTROL_{}", x),
+ Control::Reserved(x) => write!(f, "RESERVED_CONTROL_{x}"),
}
}
}
@@ -197,7 +197,7 @@
impl fmt::Display for CloseCode {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let code: u16 = self.into();
- write!(f, "{}", code)
+ write!(f, "{code}")
}
}
diff --git a/crates/tungstenite/src/protocol/frame/frame.rs b/crates/tungstenite/src/protocol/frame/frame.rs
index 6b797a9..e53df95 100644
--- a/crates/tungstenite/src/protocol/frame/frame.rs
+++ b/crates/tungstenite/src/protocol/frame/frame.rs
@@ -480,7 +480,7 @@
#[test]
fn display() {
let f = Frame::message("hi there".into(), OpCode::Data(Data::Text), true);
- let view = format!("{}", f);
+ let view = format!("{f}");
assert!(view.contains("payload:"));
}
}
diff --git a/crates/tungstenite/src/protocol/message.rs b/crates/tungstenite/src/protocol/message.rs
index 2b2ed0b..9d408ba 100644
--- a/crates/tungstenite/src/protocol/message.rs
+++ b/crates/tungstenite/src/protocol/message.rs
@@ -316,7 +316,7 @@
impl fmt::Display for Message {
fn fmt(&self, f: &mut fmt::Formatter) -> StdResult<(), fmt::Error> {
if let Ok(string) = self.to_text() {
- write!(f, "{}", string)
+ write!(f, "{string}")
} else {
write!(f, "Binary Data<length={}>", self.len())
}
diff --git a/crates/ucd-trie/.android-checksum.json b/crates/ucd-trie/.android-checksum.json
new file mode 100644
index 0000000..06d8137
--- /dev/null
+++ b/crates/ucd-trie/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"LICENSE-MIT":"e477ec620ffb08af8bae12ebe7771ec557bdf198ffd6015add93d41b75b64850","benches/bench.rs":"7e3d91717ca67b740fa5c4127e9278410bda3e74e8a7a4706f8ee40f6bb160c1","Android.bp":"ce38247603a7348823dcb5e8835f268a7ff251ca95e3b426d7155f51a546ffe9","README.md":"a03b211f35702a4f45bc06935506626e71fae856f8ed5d48e44ac24ba8965ed2","src/owned.rs":"c64307c18c8bd3791b19b18d35d6b60d14d5508ebe5cff674cc5dabb1117c9e9","src/general_category.rs":"c772f77d7a5d694aa9ce1dda96a2e9d78ccd586eee70e3434c1cb2ff644ec298","src/lib.rs":"797f2840e1d8d5ae9f9f1490ce457e6ca9a70701097638bcb4c6bb01b9516351","Cargo.toml":"02f691aeb1e1a835452c200c8dde3bf03baa500d74d6e0d99c439d7a7b53cb44",".cargo-checksum.json":"11075ec80d03968d63911e16cf8a115517f796651d274765b4885e89e2d59059","LICENSE-APACHE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","LICENSE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","METADATA":"683a448207250bd7f0889d4fc559753f4b13c4eb6f433243652f3e18338f96db","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","cargo_embargo.json":"ad0819b9d6f6999319dec49128e2d7faa980bf09168c1b229fd010605ca5b8a9"}}
\ No newline at end of file
diff --git a/crates/ucd-trie/.cargo-checksum.json b/crates/ucd-trie/.cargo-checksum.json
index 697b264..1cd5334 100644
--- a/crates/ucd-trie/.cargo-checksum.json
+++ b/crates/ucd-trie/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"d9da2663b8cbd9a49456a610e15a50d3e6e52768edbf72862c9daeb3c6330306","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"0f96a83840e146e43c0ec96a22ec1f392e0680e6c1226e6f3ba87e0740af850f","README.md":"6687ddcfa8075f52ea4326b3caa756165236ff6f75e3379e55ea9f6841821324","benches/bench.rs":"9b74139d17cfcccb502f2abe80b8a4c15a17037a681f27ec914d51e83ea7e55f","src/general_category.rs":"a28d7d49cffda077e505cabe03ea6d5c6fb328a25912a07da08497bfaa992a86","src/lib.rs":"99bedb2b655b39ac3a2cc7b4b79a381f7d1e086a20558eec52968f556a638ec4","src/owned.rs":"b897f815685f597f3a98613d5f8196153a207a741e61bbb19f48f90c2bf594ae"},"package":"ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"}
\ No newline at end of file
+{"files":{"Cargo.toml":"0d8c74a0a809e12a6ee3e3f89bb0016b978a5951e3605f8a6eb81d60ce3b1bca","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"0f96a83840e146e43c0ec96a22ec1f392e0680e6c1226e6f3ba87e0740af850f","README.md":"6687ddcfa8075f52ea4326b3caa756165236ff6f75e3379e55ea9f6841821324","benches/bench.rs":"9b74139d17cfcccb502f2abe80b8a4c15a17037a681f27ec914d51e83ea7e55f","src/general_category.rs":"42cbf05dc036e46256621f008f557821f8d3597607c3b8ab62532cdf51b97f6d","src/lib.rs":"99bedb2b655b39ac3a2cc7b4b79a381f7d1e086a20558eec52968f556a638ec4","src/owned.rs":"b897f815685f597f3a98613d5f8196153a207a741e61bbb19f48f90c2bf594ae"},"package":"2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971"}
\ No newline at end of file
diff --git a/crates/ucd-trie/Android.bp b/crates/ucd-trie/Android.bp
index 10e2cf9..d71ff3f 100644
--- a/crates/ucd-trie/Android.bp
+++ b/crates/ucd-trie/Android.bp
@@ -17,7 +17,7 @@
name: "libucd_trie",
crate_name: "ucd_trie",
cargo_env_compat: true,
- cargo_pkg_version: "0.1.6",
+ cargo_pkg_version: "0.1.7",
crate_root: "src/lib.rs",
edition: "2021",
features: [
diff --git a/crates/ucd-trie/Cargo.toml b/crates/ucd-trie/Cargo.toml
index 7ac0b52..d8f941e 100644
--- a/crates/ucd-trie/Cargo.toml
+++ b/crates/ucd-trie/Cargo.toml
@@ -12,8 +12,13 @@
[package]
edition = "2021"
name = "ucd-trie"
-version = "0.1.6"
+version = "0.1.7"
authors = ["Andrew Gallant <[email protected]>"]
+build = false
+autobins = false
+autoexamples = false
+autotests = false
+autobenches = false
description = """
A trie for storing Unicode codepoint sets and maps.
"""
@@ -30,6 +35,14 @@
license = "MIT OR Apache-2.0"
repository = "https://github.com/BurntSushi/ucd-generate"
+[lib]
+name = "ucd_trie"
+path = "src/lib.rs"
+
+[[bench]]
+name = "bench"
+path = "benches/bench.rs"
+
[dev-dependencies.once_cell]
version = "1"
diff --git a/crates/ucd-trie/METADATA b/crates/ucd-trie/METADATA
index ddcac03..5b22566 100644
--- a/crates/ucd-trie/METADATA
+++ b/crates/ucd-trie/METADATA
@@ -1,17 +1,17 @@
name: "ucd-trie"
description: "A trie for storing Unicode codepoint sets and maps."
third_party {
- version: "0.1.6"
+ version: "0.1.7"
license_type: NOTICE
last_upgrade_date {
year: 2024
- month: 2
- day: 8
+ month: 12
+ day: 20
}
homepage: "https://crates.io/crates/ucd-trie"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/ucd-trie/ucd-trie-0.1.6.crate"
- version: "0.1.6"
+ value: "https://static.crates.io/crates/ucd-trie/ucd-trie-0.1.7.crate"
+ version: "0.1.7"
}
}
diff --git a/crates/ucd-trie/src/general_category.rs b/crates/ucd-trie/src/general_category.rs
index dbaff3a..c9b4788 100644
--- a/crates/ucd-trie/src/general_category.rs
+++ b/crates/ucd-trie/src/general_category.rs
@@ -1,8 +1,8 @@
// DO NOT EDIT THIS FILE. IT WAS AUTOMATICALLY GENERATED BY:
//
-// ucd-generate general-category ucd-15.0.0
+// ucd-generate general-category ucd-16.0.0
//
-// Unicode version: 15.0.0.
+// Unicode version: 16.0.0.
//
// ucd-generate 0.2.15 is available on crates.io.
@@ -77,7 +77,7 @@
(4349, 4351),
(5024, 5109),
(5112, 5117),
- (7296, 7304),
+ (7296, 7306),
(7312, 7354),
(7357, 7359),
(7424, 7467),
@@ -129,10 +129,10 @@
(42786, 42863),
(42865, 42887),
(42891, 42894),
- (42896, 42954),
+ (42896, 42957),
(42960, 42961),
(42963, 42963),
- (42965, 42969),
+ (42965, 42972),
(42997, 42998),
(43002, 43002),
(43824, 43866),
@@ -155,6 +155,8 @@
(67003, 67004),
(68736, 68786),
(68800, 68850),
+ (68944, 68965),
+ (68976, 68997),
(71840, 71903),
(93760, 93823),
(119808, 119892),
@@ -326,6 +328,7 @@
(65112, 65112),
(65123, 65123),
(65293, 65293),
+ (68974, 68974),
(69293, 69293),
];
@@ -369,6 +372,7 @@
(65296, 65305),
(66720, 66729),
(68912, 68921),
+ (68928, 68937),
(69734, 69743),
(69872, 69881),
(69942, 69951),
@@ -378,20 +382,26 @@
(70864, 70873),
(71248, 71257),
(71360, 71369),
+ (71376, 71395),
(71472, 71481),
(71904, 71913),
(72016, 72025),
+ (72688, 72697),
(72784, 72793),
(73040, 73049),
(73120, 73129),
(73552, 73561),
+ (90416, 90425),
(92768, 92777),
(92864, 92873),
(93008, 93017),
+ (93552, 93561),
+ (118000, 118009),
(120782, 120831),
(123200, 123209),
(123632, 123641),
(124144, 124153),
+ (124401, 124410),
(125264, 125273),
(130032, 130041),
];
@@ -676,7 +686,7 @@
(7168, 7203),
(7245, 7247),
(7258, 7293),
- (7296, 7304),
+ (7296, 7306),
(7312, 7354),
(7357, 7359),
(7401, 7404),
@@ -760,10 +770,10 @@
(42656, 42725),
(42775, 42783),
(42786, 42888),
- (42891, 42954),
+ (42891, 42957),
(42960, 42961),
(42963, 42963),
- (42965, 42969),
+ (42965, 42972),
(42994, 43009),
(43011, 43013),
(43015, 43018),
@@ -860,6 +870,7 @@
(66979, 66993),
(66995, 67001),
(67003, 67004),
+ (67008, 67059),
(67072, 67382),
(67392, 67413),
(67424, 67431),
@@ -896,8 +907,11 @@
(68736, 68786),
(68800, 68850),
(68864, 68899),
+ (68938, 68965),
+ (68975, 68997),
(69248, 69289),
(69296, 69297),
+ (69314, 69316),
(69376, 69404),
(69415, 69415),
(69424, 69445),
@@ -936,6 +950,13 @@
(70461, 70461),
(70480, 70480),
(70493, 70497),
+ (70528, 70537),
+ (70539, 70539),
+ (70542, 70542),
+ (70544, 70581),
+ (70583, 70583),
+ (70609, 70609),
+ (70611, 70611),
(70656, 70708),
(70727, 70730),
(70751, 70753),
@@ -970,6 +991,7 @@
(72284, 72329),
(72349, 72349),
(72368, 72440),
+ (72640, 72672),
(72704, 72712),
(72714, 72750),
(72768, 72768),
@@ -992,7 +1014,9 @@
(77712, 77808),
(77824, 78895),
(78913, 78918),
+ (78944, 82938),
(82944, 83526),
+ (90368, 90397),
(92160, 92728),
(92736, 92766),
(92784, 92862),
@@ -1001,6 +1025,7 @@
(92992, 92995),
(93027, 93047),
(93053, 93071),
+ (93504, 93548),
(93760, 93823),
(93952, 94026),
(94032, 94032),
@@ -1009,7 +1034,7 @@
(94179, 94179),
(94208, 100343),
(100352, 101589),
- (101632, 101640),
+ (101631, 101640),
(110576, 110579),
(110581, 110587),
(110589, 110590),
@@ -1062,6 +1087,8 @@
(123536, 123565),
(123584, 123627),
(124112, 124139),
+ (124368, 124397),
+ (124400, 124400),
(124896, 124902),
(124904, 124907),
(124909, 124910),
@@ -1107,6 +1134,7 @@
(177984, 178205),
(178208, 183969),
(183984, 191456),
+ (191472, 192093),
(194560, 195101),
(196608, 201546),
(201552, 205743),
@@ -1404,6 +1432,7 @@
(4349, 4351),
(5112, 5117),
(7296, 7304),
+ (7306, 7306),
(7424, 7467),
(7531, 7543),
(7545, 7578),
@@ -1734,11 +1763,13 @@
(42947, 42947),
(42952, 42952),
(42954, 42954),
+ (42957, 42957),
(42961, 42961),
(42963, 42963),
(42965, 42965),
(42967, 42967),
(42969, 42969),
+ (42971, 42971),
(42998, 42998),
(43002, 43002),
(43824, 43866),
@@ -1754,6 +1785,7 @@
(66995, 67001),
(67003, 67004),
(68800, 68850),
+ (68976, 68997),
(71872, 71903),
(93792, 93823),
(119834, 119859),
@@ -1815,7 +1847,7 @@
(2085, 2087),
(2089, 2093),
(2137, 2139),
- (2200, 2207),
+ (2199, 2207),
(2250, 2273),
(2275, 2307),
(2362, 2364),
@@ -1991,8 +2023,9 @@
(68159, 68159),
(68325, 68326),
(68900, 68903),
+ (68969, 68973),
(69291, 69292),
- (69373, 69375),
+ (69372, 69375),
(69446, 69456),
(69506, 69509),
(69632, 69634),
@@ -2023,6 +2056,13 @@
(70498, 70499),
(70502, 70508),
(70512, 70516),
+ (70584, 70592),
+ (70594, 70594),
+ (70597, 70597),
+ (70599, 70602),
+ (70604, 70608),
+ (70610, 70610),
+ (70625, 70626),
(70709, 70726),
(70750, 70750),
(70832, 70851),
@@ -2064,8 +2104,10 @@
(73475, 73475),
(73524, 73530),
(73534, 73538),
+ (73562, 73562),
(78912, 78912),
(78919, 78933),
+ (90398, 90415),
(92912, 92916),
(92976, 92982),
(94031, 94031),
@@ -2098,6 +2140,7 @@
(123566, 123566),
(123628, 123631),
(124140, 124143),
+ (124398, 124399),
(125136, 125142),
(125252, 125258),
(917760, 917999),
@@ -2157,6 +2200,7 @@
(65374, 65374),
(65506, 65506),
(65513, 65516),
+ (69006, 69007),
(120513, 120513),
(120539, 120539),
(120571, 120571),
@@ -2231,7 +2275,11 @@
(67456, 67461),
(67463, 67504),
(67506, 67514),
+ (68942, 68942),
+ (68975, 68975),
(92992, 92995),
+ (93504, 93506),
+ (93547, 93548),
(94099, 94111),
(94176, 94177),
(94179, 94179),
@@ -2303,7 +2351,7 @@
(2085, 2087),
(2089, 2093),
(2137, 2139),
- (2200, 2207),
+ (2199, 2207),
(2250, 2273),
(2275, 2306),
(2362, 2362),
@@ -2501,8 +2549,9 @@
(68159, 68159),
(68325, 68326),
(68900, 68903),
+ (68969, 68973),
(69291, 69292),
- (69373, 69375),
+ (69372, 69375),
(69446, 69456),
(69506, 69509),
(69633, 69633),
@@ -2533,6 +2582,11 @@
(70464, 70464),
(70502, 70508),
(70512, 70516),
+ (70587, 70592),
+ (70606, 70606),
+ (70608, 70608),
+ (70610, 70610),
+ (70625, 70626),
(70712, 70719),
(70722, 70724),
(70726, 70726),
@@ -2552,7 +2606,8 @@
(71341, 71341),
(71344, 71349),
(71351, 71351),
- (71453, 71455),
+ (71453, 71453),
+ (71455, 71455),
(71458, 71461),
(71463, 71467),
(71727, 71735),
@@ -2591,8 +2646,11 @@
(73526, 73530),
(73536, 73536),
(73538, 73538),
+ (73562, 73562),
(78912, 78912),
(78919, 78933),
+ (90398, 90409),
+ (90413, 90415),
(92912, 92916),
(92976, 92982),
(94031, 94031),
@@ -2622,6 +2680,7 @@
(123566, 123566),
(123628, 123631),
(124140, 124143),
+ (124398, 124399),
(125136, 125142),
(125252, 125258),
(917760, 917999),
@@ -2721,6 +2780,7 @@
(68521, 68527),
(68858, 68863),
(68912, 68921),
+ (68928, 68937),
(69216, 69246),
(69405, 69414),
(69457, 69460),
@@ -2735,20 +2795,25 @@
(70864, 70873),
(71248, 71257),
(71360, 71369),
+ (71376, 71395),
(71472, 71483),
(71904, 71922),
(72016, 72025),
+ (72688, 72697),
(72784, 72812),
(73040, 73049),
(73120, 73129),
(73552, 73561),
(73664, 73684),
(74752, 74862),
+ (90416, 90425),
(92768, 92777),
(92864, 92873),
(93008, 93017),
(93019, 93025),
+ (93552, 93561),
(93824, 93846),
+ (118000, 118009),
(119488, 119507),
(119520, 119539),
(119648, 119672),
@@ -2756,6 +2821,7 @@
(123200, 123209),
(123632, 123641),
(124144, 124153),
+ (124401, 124410),
(125127, 125135),
(125264, 125273),
(126065, 126123),
@@ -2876,7 +2942,7 @@
(2140, 2141),
(2143, 2143),
(2155, 2159),
- (2191, 2199),
+ (2191, 2198),
(2274, 2274),
(2436, 2436),
(2445, 2446),
@@ -3070,12 +3136,11 @@
(6810, 6815),
(6830, 6831),
(6863, 6911),
- (6989, 6991),
- (7039, 7039),
+ (6989, 6989),
(7156, 7163),
(7224, 7226),
(7242, 7244),
- (7305, 7311),
+ (7307, 7311),
(7355, 7356),
(7368, 7375),
(7419, 7423),
@@ -3104,7 +3169,7 @@
(8385, 8399),
(8433, 8447),
(8588, 8591),
- (9255, 9279),
+ (9258, 9279),
(9291, 9311),
(11124, 11125),
(11158, 11158),
@@ -3127,22 +3192,21 @@
(11930, 11930),
(12020, 12031),
(12246, 12271),
- (12284, 12287),
(12352, 12352),
(12439, 12440),
(12544, 12548),
(12592, 12592),
(12687, 12687),
- (12772, 12783),
+ (12774, 12782),
(12831, 12831),
(42125, 42127),
(42183, 42191),
(42540, 42559),
(42744, 42751),
- (42955, 42959),
+ (42958, 42959),
(42962, 42962),
(42964, 42964),
- (42970, 42993),
+ (42973, 42993),
(43053, 43055),
(43066, 43071),
(43128, 43135),
@@ -3231,7 +3295,8 @@
(66978, 66978),
(66994, 66994),
(67002, 67002),
- (67005, 67071),
+ (67005, 67007),
+ (67060, 67071),
(67383, 67391),
(67414, 67423),
(67432, 67455),
@@ -3274,11 +3339,15 @@
(68787, 68799),
(68851, 68857),
(68904, 68911),
- (68922, 69215),
+ (68922, 68927),
+ (68966, 68968),
+ (68998, 69005),
+ (69008, 69215),
(69247, 69247),
(69290, 69290),
(69294, 69295),
- (69298, 69372),
+ (69298, 69313),
+ (69317, 69371),
(69416, 69423),
(69466, 69487),
(69514, 69551),
@@ -3318,7 +3387,18 @@
(70488, 70492),
(70500, 70501),
(70509, 70511),
- (70517, 70655),
+ (70517, 70527),
+ (70538, 70538),
+ (70540, 70541),
+ (70543, 70543),
+ (70582, 70582),
+ (70593, 70593),
+ (70595, 70596),
+ (70598, 70598),
+ (70603, 70603),
+ (70614, 70614),
+ (70617, 70624),
+ (70627, 70655),
(70748, 70748),
(70754, 70783),
(70856, 70863),
@@ -3329,7 +3409,8 @@
(71258, 71263),
(71277, 71295),
(71354, 71359),
- (71370, 71423),
+ (71370, 71375),
+ (71396, 71423),
(71451, 71452),
(71468, 71471),
(71495, 71679),
@@ -3349,7 +3430,9 @@
(72264, 72271),
(72355, 72367),
(72441, 72447),
- (72458, 72703),
+ (72458, 72639),
+ (72674, 72687),
+ (72698, 72703),
(72713, 72713),
(72759, 72759),
(72774, 72783),
@@ -3373,7 +3456,7 @@
(73465, 73471),
(73489, 73489),
(73531, 73533),
- (73562, 73647),
+ (73563, 73647),
(73649, 73663),
(73714, 73726),
(74650, 74751),
@@ -3382,8 +3465,10 @@
(75076, 77711),
(77811, 77823),
(78896, 78911),
- (78934, 82943),
- (83527, 92159),
+ (78934, 78943),
+ (82939, 82943),
+ (83527, 90367),
+ (90426, 92159),
(92729, 92735),
(92767, 92767),
(92778, 92781),
@@ -3395,7 +3480,8 @@
(93018, 93018),
(93026, 93026),
(93048, 93052),
- (93072, 93759),
+ (93072, 93503),
+ (93562, 93759),
(93851, 93951),
(94027, 94030),
(94088, 94094),
@@ -3403,7 +3489,7 @@
(94181, 94191),
(94194, 94207),
(100344, 100351),
- (101590, 101631),
+ (101590, 101630),
(101641, 110575),
(110580, 110580),
(110588, 110588),
@@ -3418,7 +3504,9 @@
(113789, 113791),
(113801, 113807),
(113818, 113819),
- (113824, 118527),
+ (113824, 117759),
+ (118010, 118015),
+ (118452, 118527),
(118574, 118575),
(118599, 118607),
(118724, 118783),
@@ -3470,7 +3558,9 @@
(123567, 123583),
(123642, 123646),
(123648, 124111),
- (124154, 124895),
+ (124154, 124367),
+ (124411, 124414),
+ (124416, 124895),
(124903, 124903),
(124908, 124908),
(124911, 124911),
@@ -3540,24 +3630,24 @@
(129114, 129119),
(129160, 129167),
(129198, 129199),
- (129202, 129279),
+ (129212, 129215),
+ (129218, 129279),
(129620, 129631),
(129646, 129647),
(129661, 129663),
- (129673, 129679),
- (129726, 129726),
- (129734, 129741),
- (129756, 129759),
- (129769, 129775),
+ (129674, 129678),
+ (129735, 129741),
+ (129757, 129758),
+ (129770, 129775),
(129785, 129791),
(129939, 129939),
- (129995, 130031),
(130042, 131071),
(173792, 173823),
(177978, 177983),
(178206, 178207),
(183970, 183983),
- (191457, 194559),
+ (191457, 191471),
+ (192094, 194559),
(195102, 196607),
(201547, 201551),
(205744, 917759),
@@ -3874,6 +3964,7 @@
(66640, 66717),
(66816, 66855),
(66864, 66915),
+ (67008, 67059),
(67072, 67382),
(67392, 67413),
(67424, 67431),
@@ -3905,8 +3996,11 @@
(68480, 68497),
(68608, 68680),
(68864, 68899),
+ (68938, 68941),
+ (68943, 68943),
(69248, 69289),
(69296, 69297),
+ (69314, 69316),
(69376, 69404),
(69415, 69415),
(69424, 69445),
@@ -3945,6 +4039,13 @@
(70461, 70461),
(70480, 70480),
(70493, 70497),
+ (70528, 70537),
+ (70539, 70539),
+ (70542, 70542),
+ (70544, 70581),
+ (70583, 70583),
+ (70609, 70609),
+ (70611, 70611),
(70656, 70708),
(70727, 70730),
(70751, 70753),
@@ -3978,6 +4079,7 @@
(72284, 72329),
(72349, 72349),
(72368, 72440),
+ (72640, 72672),
(72704, 72712),
(72714, 72750),
(72768, 72768),
@@ -4000,7 +4102,9 @@
(77712, 77808),
(77824, 78895),
(78913, 78918),
+ (78944, 82938),
(82944, 83526),
+ (90368, 90397),
(92160, 92728),
(92736, 92766),
(92784, 92862),
@@ -4008,11 +4112,12 @@
(92928, 92975),
(93027, 93047),
(93053, 93071),
+ (93507, 93546),
(93952, 94026),
(94032, 94032),
(94208, 100343),
(100352, 101589),
- (101632, 101640),
+ (101631, 101640),
(110592, 110882),
(110898, 110898),
(110928, 110930),
@@ -4029,6 +4134,8 @@
(123536, 123565),
(123584, 123627),
(124112, 124138),
+ (124368, 124397),
+ (124400, 124400),
(124896, 124902),
(124904, 124907),
(124909, 124910),
@@ -4072,6 +4179,7 @@
(177984, 178205),
(178208, 183969),
(183984, 191456),
+ (191472, 192093),
(194560, 195101),
(196608, 201546),
(201552, 205743),
@@ -4212,8 +4320,9 @@
(6686, 6687),
(6816, 6822),
(6824, 6829),
+ (6990, 6991),
(7002, 7008),
- (7037, 7038),
+ (7037, 7039),
(7164, 7167),
(7227, 7231),
(7294, 7295),
@@ -4308,6 +4417,8 @@
(70109, 70111),
(70200, 70205),
(70313, 70313),
+ (70612, 70613),
+ (70615, 70616),
(70731, 70735),
(70746, 70747),
(70749, 70749),
@@ -4324,6 +4435,7 @@
(72346, 72348),
(72350, 72354),
(72448, 72457),
+ (72673, 72673),
(72769, 72773),
(72816, 72817),
(73463, 73464),
@@ -4335,10 +4447,12 @@
(92917, 92917),
(92983, 92987),
(92996, 92996),
+ (93549, 93551),
(93847, 93850),
(94178, 94178),
(113823, 113823),
(121479, 121483),
+ (124415, 124415),
(125278, 125279),
];
@@ -4409,7 +4523,7 @@
(9003, 9083),
(9085, 9114),
(9140, 9179),
- (9186, 9254),
+ (9186, 9257),
(9280, 9290),
(9372, 9449),
(9472, 9654),
@@ -4429,7 +4543,7 @@
(11904, 11929),
(11931, 12019),
(12032, 12245),
- (12272, 12283),
+ (12272, 12287),
(12292, 12292),
(12306, 12307),
(12320, 12320),
@@ -4437,7 +4551,8 @@
(12350, 12351),
(12688, 12689),
(12694, 12703),
- (12736, 12771),
+ (12736, 12773),
+ (12783, 12783),
(12800, 12830),
(12842, 12871),
(12880, 12880),
@@ -4471,6 +4586,8 @@
(92988, 92991),
(92997, 92997),
(113820, 113820),
+ (117760, 117999),
+ (118016, 118451),
(118608, 118723),
(118784, 119029),
(119040, 119078),
@@ -4515,18 +4632,18 @@
(129104, 129113),
(129120, 129159),
(129168, 129197),
- (129200, 129201),
+ (129200, 129211),
+ (129216, 129217),
(129280, 129619),
(129632, 129645),
(129648, 129660),
- (129664, 129672),
- (129680, 129725),
- (129727, 129733),
- (129742, 129755),
- (129760, 129768),
+ (129664, 129673),
+ (129679, 129734),
+ (129742, 129756),
+ (129759, 129769),
(129776, 129784),
(129792, 129938),
- (129940, 129994),
+ (129940, 130031),
];
pub const PARAGRAPH_SEPARATOR: &'static [(u32, u32)] = &[(8233, 8233)];
@@ -4600,8 +4717,9 @@
(6686, 6687),
(6816, 6822),
(6824, 6829),
+ (6990, 6991),
(7002, 7008),
- (7037, 7038),
+ (7037, 7039),
(7164, 7167),
(7227, 7231),
(7294, 7295),
@@ -4680,6 +4798,7 @@
(68336, 68342),
(68409, 68415),
(68505, 68508),
+ (68974, 68974),
(69293, 69293),
(69461, 69465),
(69510, 69513),
@@ -4694,6 +4813,8 @@
(70109, 70111),
(70200, 70205),
(70313, 70313),
+ (70612, 70613),
+ (70615, 70616),
(70731, 70735),
(70746, 70747),
(70749, 70749),
@@ -4710,6 +4831,7 @@
(72346, 72348),
(72350, 72354),
(72448, 72457),
+ (72673, 72673),
(72769, 72773),
(72816, 72817),
(73463, 73464),
@@ -4721,10 +4843,12 @@
(92917, 92917),
(92983, 92987),
(92996, 92996),
+ (93549, 93551),
(93847, 93850),
(94178, 94178),
(113823, 113823),
(121479, 121483),
+ (124415, 124415),
(125278, 125279),
];
@@ -4884,6 +5008,12 @@
(70475, 70477),
(70487, 70487),
(70498, 70499),
+ (70584, 70586),
+ (70594, 70594),
+ (70597, 70597),
+ (70599, 70602),
+ (70604, 70605),
+ (70607, 70607),
(70709, 70711),
(70720, 70721),
(70725, 70725),
@@ -4900,6 +5030,7 @@
(71340, 71340),
(71342, 71343),
(71350, 71350),
+ (71454, 71454),
(71456, 71457),
(71462, 71462),
(71724, 71726),
@@ -4928,6 +5059,7 @@
(73524, 73525),
(73534, 73535),
(73537, 73537),
+ (90410, 90412),
(94033, 94087),
(94192, 94193),
(119141, 119142),
@@ -5027,7 +5159,7 @@
(8586, 8587),
(8592, 8967),
(8972, 9000),
- (9003, 9254),
+ (9003, 9257),
(9280, 9290),
(9372, 9449),
(9472, 10087),
@@ -5044,7 +5176,7 @@
(11904, 11929),
(11931, 12019),
(12032, 12245),
- (12272, 12283),
+ (12272, 12287),
(12292, 12292),
(12306, 12307),
(12320, 12320),
@@ -5053,7 +5185,8 @@
(12443, 12444),
(12688, 12689),
(12694, 12703),
- (12736, 12771),
+ (12736, 12773),
+ (12783, 12783),
(12800, 12830),
(12842, 12871),
(12880, 12880),
@@ -5096,11 +5229,14 @@
(66000, 66044),
(67703, 67704),
(68296, 68296),
+ (69006, 69007),
(71487, 71487),
(73685, 73713),
(92988, 92991),
(92997, 92997),
(113820, 113820),
+ (117760, 117999),
+ (118016, 118451),
(118608, 118723),
(118784, 119029),
(119040, 119078),
@@ -5157,18 +5293,18 @@
(129104, 129113),
(129120, 129159),
(129168, 129197),
- (129200, 129201),
+ (129200, 129211),
+ (129216, 129217),
(129280, 129619),
(129632, 129645),
(129648, 129660),
- (129664, 129672),
- (129680, 129725),
- (129727, 129733),
- (129742, 129755),
- (129760, 129768),
+ (129664, 129673),
+ (129679, 129734),
+ (129742, 129756),
+ (129759, 129769),
(129776, 129784),
(129792, 129938),
- (129940, 129994),
+ (129940, 130031),
];
pub const TITLECASE_LETTER: &'static [(u32, u32)] = &[
@@ -5207,7 +5343,7 @@
(2143, 2143),
(2155, 2159),
(2191, 2191),
- (2194, 2199),
+ (2194, 2198),
(2436, 2436),
(2445, 2446),
(2449, 2450),
@@ -5399,12 +5535,11 @@
(6810, 6815),
(6830, 6831),
(6863, 6911),
- (6989, 6991),
- (7039, 7039),
+ (6989, 6989),
(7156, 7163),
(7224, 7226),
(7242, 7244),
- (7305, 7311),
+ (7307, 7311),
(7355, 7356),
(7368, 7375),
(7419, 7423),
@@ -5431,7 +5566,7 @@
(8385, 8399),
(8433, 8447),
(8588, 8591),
- (9255, 9279),
+ (9258, 9279),
(9291, 9311),
(11124, 11125),
(11158, 11158),
@@ -5454,22 +5589,21 @@
(11930, 11930),
(12020, 12031),
(12246, 12271),
- (12284, 12287),
(12352, 12352),
(12439, 12440),
(12544, 12548),
(12592, 12592),
(12687, 12687),
- (12772, 12783),
+ (12774, 12782),
(12831, 12831),
(42125, 42127),
(42183, 42191),
(42540, 42559),
(42744, 42751),
- (42955, 42959),
+ (42958, 42959),
(42962, 42962),
(42964, 42964),
- (42970, 42993),
+ (42973, 42993),
(43053, 43055),
(43066, 43071),
(43128, 43135),
@@ -5559,7 +5693,8 @@
(66978, 66978),
(66994, 66994),
(67002, 67002),
- (67005, 67071),
+ (67005, 67007),
+ (67060, 67071),
(67383, 67391),
(67414, 67423),
(67432, 67455),
@@ -5602,11 +5737,15 @@
(68787, 68799),
(68851, 68857),
(68904, 68911),
- (68922, 69215),
+ (68922, 68927),
+ (68966, 68968),
+ (68998, 69005),
+ (69008, 69215),
(69247, 69247),
(69290, 69290),
(69294, 69295),
- (69298, 69372),
+ (69298, 69313),
+ (69317, 69371),
(69416, 69423),
(69466, 69487),
(69514, 69551),
@@ -5646,7 +5785,18 @@
(70488, 70492),
(70500, 70501),
(70509, 70511),
- (70517, 70655),
+ (70517, 70527),
+ (70538, 70538),
+ (70540, 70541),
+ (70543, 70543),
+ (70582, 70582),
+ (70593, 70593),
+ (70595, 70596),
+ (70598, 70598),
+ (70603, 70603),
+ (70614, 70614),
+ (70617, 70624),
+ (70627, 70655),
(70748, 70748),
(70754, 70783),
(70856, 70863),
@@ -5657,7 +5807,8 @@
(71258, 71263),
(71277, 71295),
(71354, 71359),
- (71370, 71423),
+ (71370, 71375),
+ (71396, 71423),
(71451, 71452),
(71468, 71471),
(71495, 71679),
@@ -5677,7 +5828,9 @@
(72264, 72271),
(72355, 72367),
(72441, 72447),
- (72458, 72703),
+ (72458, 72639),
+ (72674, 72687),
+ (72698, 72703),
(72713, 72713),
(72759, 72759),
(72774, 72783),
@@ -5701,7 +5854,7 @@
(73465, 73471),
(73489, 73489),
(73531, 73533),
- (73562, 73647),
+ (73563, 73647),
(73649, 73663),
(73714, 73726),
(74650, 74751),
@@ -5709,8 +5862,10 @@
(74869, 74879),
(75076, 77711),
(77811, 77823),
- (78934, 82943),
- (83527, 92159),
+ (78934, 78943),
+ (82939, 82943),
+ (83527, 90367),
+ (90426, 92159),
(92729, 92735),
(92767, 92767),
(92778, 92781),
@@ -5722,7 +5877,8 @@
(93018, 93018),
(93026, 93026),
(93048, 93052),
- (93072, 93759),
+ (93072, 93503),
+ (93562, 93759),
(93851, 93951),
(94027, 94030),
(94088, 94094),
@@ -5730,7 +5886,7 @@
(94181, 94191),
(94194, 94207),
(100344, 100351),
- (101590, 101631),
+ (101590, 101630),
(101641, 110575),
(110580, 110580),
(110588, 110588),
@@ -5745,7 +5901,9 @@
(113789, 113791),
(113801, 113807),
(113818, 113819),
- (113828, 118527),
+ (113828, 117759),
+ (118010, 118015),
+ (118452, 118527),
(118574, 118575),
(118599, 118607),
(118724, 118783),
@@ -5796,7 +5954,9 @@
(123567, 123583),
(123642, 123646),
(123648, 124111),
- (124154, 124895),
+ (124154, 124367),
+ (124411, 124414),
+ (124416, 124895),
(124903, 124903),
(124908, 124908),
(124911, 124911),
@@ -5866,24 +6026,24 @@
(129114, 129119),
(129160, 129167),
(129198, 129199),
- (129202, 129279),
+ (129212, 129215),
+ (129218, 129279),
(129620, 129631),
(129646, 129647),
(129661, 129663),
- (129673, 129679),
- (129726, 129726),
- (129734, 129741),
- (129756, 129759),
- (129769, 129775),
+ (129674, 129678),
+ (129735, 129741),
+ (129757, 129758),
+ (129770, 129775),
(129785, 129791),
(129939, 129939),
- (129995, 130031),
(130042, 131071),
(173792, 173823),
(177978, 177983),
(178206, 178207),
(183970, 183983),
- (191457, 194559),
+ (191457, 191471),
+ (192094, 194559),
(195102, 196607),
(201547, 201551),
(205744, 917504),
@@ -6171,6 +6331,7 @@
(4295, 4295),
(4301, 4301),
(5024, 5109),
+ (7305, 7305),
(7312, 7354),
(7357, 7359),
(7680, 7680),
@@ -6495,9 +6656,12 @@
(42946, 42946),
(42948, 42951),
(42953, 42953),
+ (42955, 42956),
(42960, 42960),
(42966, 42966),
(42968, 42968),
+ (42970, 42970),
+ (42972, 42972),
(42997, 42997),
(65313, 65338),
(66560, 66599),
@@ -6507,6 +6671,7 @@
(66956, 66962),
(66964, 66965),
(68736, 68786),
+ (68944, 68965),
(71840, 71871),
(93760, 93791),
(119808, 119833),
diff --git a/crates/unicode-normalization/.android-checksum.json b/crates/unicode-normalization/.android-checksum.json
new file mode 100644
index 0000000..b1bfd64
--- /dev/null
+++ b/crates/unicode-normalization/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"src/lib.rs":"73273d25ac2b57cf947c17a952fd8786e4b12d4dc7bb4d464578042d574d60ff","Cargo.toml":"610f3cbda0ff777b979a805aa2e2b65bf1c09695064d862823dc46614d9819e7","src/__test_api.rs":"c6e717d7eb024c8323c2d105211188b268b463ed9360d0408997b830420965ec",".cargo-checksum.json":"0f65a804ad8737f8393581a33f2f43302401314dedb69669e8666002df121ea8","METADATA":"510df4232b531b8f1092eb0f639384230c43e73b4b5467151e63be3d3d6c3802","src/recompose.rs":"d6d490090e308a26ae29fc39e8a98637a36f0a3eeedea4584da67b2845225066","src/normalize.rs":"3cf0c3cdec01e780e37e25ac92ec25b5533c4e3d2b5560fe6aafa64411b42cbe","src/tables.rs":"86292aeb018db2245a63188eb124830f636666308268d57d496e8963ab731489","LICENSE-APACHE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","benches/bench.rs":"1919a62b901192cfc7895480e5db179a3a280832cdfcf952c3b499860dfd0443","LICENSE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","scripts/unicode.py":"70c79abba9b65b269f8e21f34db2a5938c2b803e9e6e75bce3a876ddadf641ae","cargo_embargo.json":"9dc193953246dbbfe9d62639be0a770b1a9044278a546ae5a4eb8d5ffaf4b329","src/quick_check.rs":"8b62e3e479d47b2f586ee8041c50839ab7702cad0f326a30528ed4224a3db46c","src/lookups.rs":"b8c232c1fb0f3710eecb8bc7a025afa75d91273bcd5928636e263d00f41fbce9","src/replace.rs":"26a4d1df3e5eaff0781f6b5ef3c8cd9c2804b5cd57fd14176fd532101967363c","LICENSE-MIT":"8ff981830ebf3fe518679fabc276f8aade7e253f47946d0d8df0dd30f83d96f5","src/test.rs":"c474094c1001b62ac939b679be279b44bbd0f92196d0bc672125d8ce195f6a04","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","TEST_MAPPING":"96e455d17a600d57e7626ce52595de54ffc570cf3c5d9b6f95604b57ba713dc2","src/decompose.rs":"5df561bbe92cae8ceb9065fcfc17d7c21dda04a0378f696a80b4310cd72d77bb","src/stream_safe.rs":"0d2b18ebd301b7319cb57f9f9ec3646af5c19dfc832505bb0e9d871c7c04c097","Android.bp":"bd9e6a8d1905d2db119e83922936a2c795e6f1a9699d7d6e97b752f44cf788f0","README.md":"ae7fecf5d15ff56ef6cac4163f8feaa4a3bd40094dac437f17be39bdd1e511d2","COPYRIGHT":"ab4c8a47ea97e53eb239f5454701fbf35c618d980af54cfe659793662b2a1ebd","src/perfect_hash.rs":"f608e2f7eb1ba3e80867772e75dde3af3e4320f4e5b3158082c21f4dba358a28"}}
\ No newline at end of file
diff --git a/crates/unicode-normalization/.cargo-checksum.json b/crates/unicode-normalization/.cargo-checksum.json
index 7d29693..868d6f0 100644
--- a/crates/unicode-normalization/.cargo-checksum.json
+++ b/crates/unicode-normalization/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"COPYRIGHT":"23860c2a7b5d96b21569afedf033469bab9fe14a1b24a35068b8641c578ce24d","Cargo.toml":"d43bfc158330a3a780af52ff0e82d88c8b54707ddf0469e6e27749c8ded4d1b7","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"7b63ecd5f1902af1b63729947373683c32745c16a10e8e6292e2e2dcd7e90ae0","README.md":"60162364e07490163f7a8e199c7a0a8ace165ae5aa7e4b6f16ff1617ddef5867","benches/bench.rs":"827e5343b059a732904be29717c2797203bfd0a633edf08042afea65372a3e2c","scripts/unicode.py":"6b1d9025fa9970c23b9721c6704aa085263408d645cf9c469295978010fd7504","src/__test_api.rs":"78e21bfa0b98894f545c8ed3e31cec20d7a48951a7f3ed69a6130c4b3d463aee","src/decompose.rs":"c0eb774843a545356e63bbcd7fb926f80d3c97ef4601ca3701fc34154f2e9905","src/lib.rs":"1983769ea083caa36b0736c87cf2a98e91c2b900f1d5dec64e327360fa862386","src/lookups.rs":"962f9909b32e02b8a2a05836135d9cd39bb1ce01f7c659de99cbd8a3a3c78574","src/no_std_prelude.rs":"602e81e67b8952b6571826f431e3b6787be3073bc10f38a0d3374278f81a6a1f","src/normalize.rs":"de2670b4437d335d42884af844a750f70e541467ecd34077dfe032103cb9b041","src/perfect_hash.rs":"400c84e2f467f61bd55d55d08672da6a9ad7a57c938ce5d0c701a6994b1b273b","src/quick_check.rs":"9756312d75fc31b67fca954e44a4812945a7e436b03ba18b9a2441f6de570f6f","src/recompose.rs":"a6228ad7561a5c7a1ef1d510159bdde1eea8a161007c80e470432e9b844d5536","src/replace.rs":"b24c904f3e00851a78820e30ddfa4ff10c795f8925fd0ee7f5870f31fdfa770b","src/stream_safe.rs":"383d71f0da401af8e735877e43855c7e16cb06deb2263539cdec2a407dbe257d","src/tables.rs":"3d9983a4e24c5b1e5dc272a025cdc729b7107f9a52a1fc89eca598e69af36c3a","src/test.rs":"3af8ad8c6bd2cc1ca44660bd265ad813c88d3074b448df4d9ff376b25fb77d26"},"package":"5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"}
\ No newline at end of file
+{"files":{"COPYRIGHT":"23860c2a7b5d96b21569afedf033469bab9fe14a1b24a35068b8641c578ce24d","Cargo.toml":"c9b3a7c693bc221578c150ca0f889cb42a301b09258a33d42d5a2541104534e3","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"7b63ecd5f1902af1b63729947373683c32745c16a10e8e6292e2e2dcd7e90ae0","README.md":"5e6af58a3100ef18063422cb2fdf70afac62b5d60d828c6cde6344236d795be9","benches/bench.rs":"2c756c3a084c2ffc740988373fbc01a0333f7e85692ef547cac5ac592bed3024","scripts/unicode.py":"199ae07668c2f9c14b978cda56ab2d5deb0e4b819a3b7abba19bbfe10b1e49df","src/__test_api.rs":"4ca9e8f342dee364d0ca82f80504051b9d7c88fb6726bbe2683898ed0b919dfa","src/decompose.rs":"87bbc8e5814d79613804f1684f0f1fc572878ee31620f1857184509a6619f802","src/lib.rs":"ac4346617ee1f046a7d107ad50ecd928f96f5b1a25c45a1bc912a2d7b760c19f","src/lookups.rs":"962f9909b32e02b8a2a05836135d9cd39bb1ce01f7c659de99cbd8a3a3c78574","src/normalize.rs":"e6bb470ed410399f967b8eed63b161a93930520cf75f04a1d34b3d0aa458fbb6","src/perfect_hash.rs":"400c84e2f467f61bd55d55d08672da6a9ad7a57c938ce5d0c701a6994b1b273b","src/quick_check.rs":"eea209153e6d6b6ff242bc0df10678be2513a6440214bfdf1889321f9657d6d7","src/recompose.rs":"30746c36c1f2929a7b89f2771d63fc857b5d57a87934c661d82c5649ff0cf391","src/replace.rs":"33edf2301d3ec56fc12f48c9e60d6b23ada82c6ffa7e4230ceb744db3fa62ba1","src/stream_safe.rs":"5be52c38cf18f8dae33b84602c6e8c5785f531d598185bbdfac9b05696e60a2d","src/tables.rs":"69a0faad67afe03146d80ff5b2d889d1898cbfe8f7677a24f012148f6fd27348","src/test.rs":"8af1c74989355970cc150075f0c8517bb061caeb46a456458483fe5ef661dc89"},"package":"5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956"}
\ No newline at end of file
diff --git a/crates/unicode-normalization/Android.bp b/crates/unicode-normalization/Android.bp
index b2a1ee8..0d6885e 100644
--- a/crates/unicode-normalization/Android.bp
+++ b/crates/unicode-normalization/Android.bp
@@ -18,7 +18,7 @@
host_supported: true,
crate_name: "unicode_normalization",
cargo_env_compat: true,
- cargo_pkg_version: "0.1.22",
+ cargo_pkg_version: "0.1.24",
crate_root: "src/lib.rs",
edition: "2018",
features: [
@@ -40,7 +40,7 @@
host_supported: true,
crate_name: "unicode_normalization",
cargo_env_compat: true,
- cargo_pkg_version: "0.1.22",
+ cargo_pkg_version: "0.1.24",
crate_root: "src/lib.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
diff --git a/crates/unicode-normalization/Cargo.toml b/crates/unicode-normalization/Cargo.toml
index 1c4d1f5..049b814 100644
--- a/crates/unicode-normalization/Cargo.toml
+++ b/crates/unicode-normalization/Cargo.toml
@@ -11,12 +11,14 @@
[package]
edition = "2018"
+rust-version = "1.36"
name = "unicode-normalization"
-version = "0.1.22"
+version = "0.1.24"
authors = [
"kwantam <[email protected]>",
"Manish Goregaokar <[email protected]>",
]
+build = false
exclude = [
"target/*",
"Cargo.lock",
@@ -24,6 +26,10 @@
"*.txt",
"tests/*",
]
+autobins = false
+autoexamples = false
+autotests = false
+autobenches = false
description = """
This crate provides functions for normalization of
Unicode strings, including Canonical and Compatible
@@ -43,6 +49,14 @@
license = "MIT/Apache-2.0"
repository = "https://github.com/unicode-rs/unicode-normalization"
+[lib]
+name = "unicode_normalization"
+path = "src/lib.rs"
+
+[[bench]]
+name = "bench"
+path = "benches/bench.rs"
+
[dependencies.tinyvec]
version = "1"
features = ["alloc"]
diff --git a/crates/unicode-normalization/METADATA b/crates/unicode-normalization/METADATA
index e9a2e73..abef457 100644
--- a/crates/unicode-normalization/METADATA
+++ b/crates/unicode-normalization/METADATA
@@ -1,17 +1,17 @@
name: "unicode-normalization"
description: "This crate provides functions for normalization of Unicode strings, including Canonical and Compatible Decomposition and Recomposition, as described in Unicode Standard Annex #15."
third_party {
- version: "0.1.22"
+ version: "0.1.24"
license_type: NOTICE
last_upgrade_date {
- year: 2022
+ year: 2024
month: 12
- day: 19
+ day: 20
}
homepage: "https://crates.io/crates/unicode-normalization"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/unicode-normalization/unicode-normalization-0.1.22.crate"
- version: "0.1.22"
+ value: "https://static.crates.io/crates/unicode-normalization/unicode-normalization-0.1.24.crate"
+ version: "0.1.24"
}
}
diff --git a/crates/unicode-normalization/README.md b/crates/unicode-normalization/README.md
index 35030e3..7d10e4d 100644
--- a/crates/unicode-normalization/README.md
+++ b/crates/unicode-normalization/README.md
@@ -31,7 +31,7 @@
```toml
[dependencies]
-unicode-normalization = "0.1.22"
+unicode-normalization = "0.1.23"
```
## `no_std` + `alloc` support
diff --git a/crates/unicode-normalization/benches/bench.rs b/crates/unicode-normalization/benches/bench.rs
index a977156..94c989e 100644
--- a/crates/unicode-normalization/benches/bench.rs
+++ b/crates/unicode-normalization/benches/bench.rs
@@ -7,9 +7,9 @@
use test::Bencher;
use unicode_normalization::UnicodeNormalization;
-const ASCII: &'static str = "all types of normalized";
-const NFC: &'static str = "Introducci\u{00f3}n a Unicode.pdf";
-const NFD: &'static str = "Introduccio\u{0301}n a Unicode.pdf";
+const ASCII: &str = "all types of normalized";
+const NFC: &str = "Introducci\u{00f3}n a Unicode.pdf";
+const NFD: &str = "Introduccio\u{0301}n a Unicode.pdf";
#[bench]
fn bench_is_nfc_ascii(b: &mut Bencher) {
diff --git a/crates/unicode-normalization/scripts/unicode.py b/crates/unicode-normalization/scripts/unicode.py
old mode 100644
new mode 100755
index d32d912..d9bb69c
--- a/crates/unicode-normalization/scripts/unicode.py
+++ b/crates/unicode-normalization/scripts/unicode.py
@@ -20,8 +20,9 @@
# out-of-line and check the tables.rs and normalization_tests.rs files into git.
import collections
import urllib.request
+from itertools import batched
-UNICODE_VERSION = "15.0.0"
+UNICODE_VERSION = "16.0.0"
UCD_URL = "https://www.unicode.org/Public/%s/ucd/" % UNICODE_VERSION
PREAMBLE = """// Copyright 2012-2018 The Rust Project Developers. See the COPYRIGHT
@@ -354,20 +355,26 @@
return False
return first[1:-8] == last[1:-7]
-def gen_mph_data(name, d, kv_type, kv_callback):
+def gen_mph_data(name, d, kv_type, kv_callback, kv_row_width):
(salt, keys) = minimal_perfect_hash(d)
- out.write("pub(crate) const %s_SALT: &[u16] = &[\n" % name.upper())
- for s in salt:
- out.write(" 0x{:x},\n".format(s))
+ out.write(f"\npub(crate) const {name.upper()}_SALT: &[u16] = &[\n")
+ for s_row in batched(salt, 13):
+ out.write(" ")
+ for s in s_row:
+ out.write(f" 0x{s:03X},")
+ out.write("\n")
out.write("];\n")
- out.write("pub(crate) const {}_KV: &[{}] = &[\n".format(name.upper(), kv_type))
- for k in keys:
- out.write(" {},\n".format(kv_callback(k)))
- out.write("];\n\n")
+ out.write(f"pub(crate) const {name.upper()}_KV: &[{kv_type}] = &[\n")
+ for k_row in batched(keys, kv_row_width):
+ out.write(" ")
+ for k in k_row:
+ out.write(f" {kv_callback(k)},")
+ out.write("\n")
+ out.write("];\n")
def gen_combining_class(combining_classes, out):
gen_mph_data('canonical_combining_class', combining_classes, 'u32',
- lambda k: "0x{:X}".format(int(combining_classes[k]) | (k << 8)))
+ lambda k: f"0x{int(combining_classes[k]) | (k << 8):07X}", 8)
def gen_composition_table(canon_comp, out):
table = {}
@@ -376,12 +383,12 @@
table[(c1 << 16) | c2] = c3
(salt, keys) = minimal_perfect_hash(table)
gen_mph_data('COMPOSITION_TABLE', table, '(u32, char)',
- lambda k: "(0x%s, '\\u{%s}')" % (hexify(k), hexify(table[k])))
+ lambda k: f"(0x{k:08X}, '\\u{{{table[k]:06X}}}')", 1)
out.write("pub(crate) fn composition_table_astral(c1: char, c2: char) -> Option<char> {\n")
out.write(" match (c1, c2) {\n")
for (c1, c2), c3 in sorted(canon_comp.items()):
- if c1 >= 0x10000 and c2 >= 0x10000:
+ if c1 >= 0x10000 or c2 >= 0x10000:
out.write(" ('\\u{%s}', '\\u{%s}') => Some('\\u{%s}'),\n" % (hexify(c1), hexify(c2), hexify(c3)))
out.write(" _ => None,\n")
@@ -403,7 +410,7 @@
assert offset < 65536
out.write("];\n")
gen_mph_data(name + '_decomposed', table, "(u32, (u16, u16))",
- lambda k: "(0x{:x}, ({}, {}))".format(k, offsets[k], len(table[k])))
+ lambda k: f"(0x{k:05X}, (0x{offsets[k]:03X}, 0x{len(table[k]):X}))", 1)
def gen_qc_match(prop_table, out):
out.write(" match c {\n")
@@ -412,7 +419,7 @@
assert data in ('N', 'M')
result = "No" if data == 'N' else "Maybe"
if high:
- out.write(r" '\u{%s}'...'\u{%s}' => %s," % (low, high, result))
+ out.write(r" '\u{%s}'..='\u{%s}' => %s," % (low, high, result))
else:
out.write(r" '\u{%s}' => %s," % (low, result))
out.write("\n")
@@ -421,7 +428,7 @@
out.write(" }\n")
def gen_nfc_qc(prop_tables, out):
- out.write("#[inline]\n")
+ out.write("\n#[inline]\n")
out.write("#[allow(ellipsis_inclusive_range_patterns)]\n")
out.write("pub fn qc_nfc(c: char) -> IsNormalized {\n")
gen_qc_match(prop_tables['NFC_QC'], out)
@@ -450,7 +457,7 @@
def gen_combining_mark(general_category_mark, out):
gen_mph_data('combining_mark', general_category_mark, 'u32',
- lambda k: '0x{:04x}'.format(k))
+ lambda k: '0x{:05X}'.format(k), 10)
def gen_public_assigned(general_category_public_assigned, out):
# This could be done as a hash but the table is somewhat small.
@@ -464,17 +471,16 @@
out.write(" ")
start = False
else:
- out.write(" | ")
+ out.write("\n | ")
if first == last:
- out.write("'\\u{%s}'\n" % hexify(first))
+ out.write("'\\u{%s}'" % hexify(first))
else:
- out.write("'\\u{%s}'..='\\u{%s}'\n" % (hexify(first), hexify(last)))
- out.write(" => true,\n")
+ out.write("'\\u{%s}'..='\\u{%s}'" % (hexify(first), hexify(last)))
+ out.write(" => true,\n")
out.write(" _ => false,\n")
out.write(" }\n")
out.write("}\n")
- out.write("\n")
def gen_stream_safe(leading, trailing, out):
# This could be done as a hash but the table is very small.
@@ -488,10 +494,9 @@
out.write(" _ => 0,\n")
out.write(" }\n")
out.write("}\n")
- out.write("\n")
gen_mph_data('trailing_nonstarters', trailing, 'u32',
- lambda k: "0x{:X}".format(int(trailing[k]) | (k << 8)))
+ lambda k: f"0x{int(trailing[k]) | (k << 8):07X}", 8)
def gen_tests(tests, out):
out.write("""#[derive(Debug)]
@@ -585,36 +590,27 @@
version = "(%s, %s, %s)" % tuple(UNICODE_VERSION.split("."))
out.write("#[allow(unused)]\n")
- out.write("pub const UNICODE_VERSION: (u8, u8, u8) = %s;\n\n" % version)
+ out.write("pub const UNICODE_VERSION: (u8, u8, u8) = %s;\n" % version)
gen_combining_class(data.combining_classes, out)
- out.write("\n")
gen_composition_table(data.canon_comp, out)
- out.write("\n")
gen_decomposition_tables(data.canon_fully_decomp, data.compat_fully_decomp, data.cjk_compat_variants_fully_decomp, out)
gen_combining_mark(data.general_category_mark, out)
- out.write("\n")
gen_public_assigned(data.general_category_public_assigned, out)
- out.write("\n")
gen_nfc_qc(data.norm_props, out)
- out.write("\n")
gen_nfkc_qc(data.norm_props, out)
- out.write("\n")
gen_nfd_qc(data.norm_props, out)
- out.write("\n")
gen_nfkd_qc(data.norm_props, out)
- out.write("\n")
gen_stream_safe(data.ss_leading, data.ss_trailing, out)
- out.write("\n")
with open("normalization_tests.rs", "w", newline = "\n") as out:
out.write(PREAMBLE)
diff --git a/crates/unicode-normalization/src/__test_api.rs b/crates/unicode-normalization/src/__test_api.rs
index f1a3f92..6f6f35e 100644
--- a/crates/unicode-normalization/src/__test_api.rs
+++ b/crates/unicode-normalization/src/__test_api.rs
@@ -5,7 +5,7 @@
// If you're caught using this outside this crates tests/, you get to clean up the mess.
#[cfg(not(feature = "std"))]
-use crate::no_std_prelude::*;
+use alloc::string::String;
use crate::stream_safe::StreamSafe;
diff --git a/crates/unicode-normalization/src/decompose.rs b/crates/unicode-normalization/src/decompose.rs
index 23cdb1a..2c73383 100644
--- a/crates/unicode-normalization/src/decompose.rs
+++ b/crates/unicode-normalization/src/decompose.rs
@@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
use core::fmt::{self, Write};
-use core::iter::Fuse;
+use core::iter::{Fuse, FusedIterator};
use core::ops::Range;
use tinyvec::TinyVec;
@@ -36,23 +36,33 @@
ready: Range<usize>,
}
-#[inline]
-pub fn new_canonical<I: Iterator<Item = char>>(iter: I) -> Decompositions<I> {
- Decompositions {
- kind: self::DecompositionType::Canonical,
- iter: iter.fuse(),
- buffer: TinyVec::new(),
- ready: 0..0,
+impl<I: Iterator<Item = char>> Decompositions<I> {
+ /// Create a new decomposition iterator for canonical decompositions (NFD)
+ ///
+ /// Note that this iterator can also be obtained by directly calling [`.nfd()`](crate::UnicodeNormalization::nfd)
+ /// on the iterator.
+ #[inline]
+ pub fn new_canonical(iter: I) -> Decompositions<I> {
+ Decompositions {
+ kind: self::DecompositionType::Canonical,
+ iter: iter.fuse(),
+ buffer: TinyVec::new(),
+ ready: 0..0,
+ }
}
-}
-#[inline]
-pub fn new_compatible<I: Iterator<Item = char>>(iter: I) -> Decompositions<I> {
- Decompositions {
- kind: self::DecompositionType::Compatible,
- iter: iter.fuse(),
- buffer: TinyVec::new(),
- ready: 0..0,
+ /// Create a new decomposition iterator for compatability decompositions (NFkD)
+ ///
+ /// Note that this iterator can also be obtained by directly calling [`.nfd()`](crate::UnicodeNormalization::nfd)
+ /// on the iterator.
+ #[inline]
+ pub fn new_compatible(iter: I) -> Decompositions<I> {
+ Decompositions {
+ kind: self::DecompositionType::Compatible,
+ iter: iter.fuse(),
+ buffer: TinyVec::new(),
+ ready: 0..0,
+ }
}
}
@@ -151,6 +161,8 @@
}
}
+impl<I: Iterator<Item = char> + FusedIterator> FusedIterator for Decompositions<I> {}
+
impl<I: Iterator<Item = char> + Clone> fmt::Display for Decompositions<I> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
for c in self.clone() {
diff --git a/crates/unicode-normalization/src/lib.rs b/crates/unicode-normalization/src/lib.rs
index 21c3bf1..6c5e029 100644
--- a/crates/unicode-normalization/src/lib.rs
+++ b/crates/unicode-normalization/src/lib.rs
@@ -62,12 +62,7 @@
pub use crate::replace::Replacements;
pub use crate::stream_safe::StreamSafe;
pub use crate::tables::UNICODE_VERSION;
-use core::{
- str::Chars,
- option,
-};
-
-mod no_std_prelude;
+use core::{option, str::Chars};
mod decompose;
mod lookups;
@@ -77,8 +72,6 @@
mod recompose;
mod replace;
mod stream_safe;
-
-#[rustfmt::skip]
mod tables;
#[doc(hidden)]
@@ -140,22 +133,22 @@
impl<'a> UnicodeNormalization<Chars<'a>> for &'a str {
#[inline]
fn nfd(self) -> Decompositions<Chars<'a>> {
- decompose::new_canonical(self.chars())
+ Decompositions::new_canonical(self.chars())
}
#[inline]
fn nfkd(self) -> Decompositions<Chars<'a>> {
- decompose::new_compatible(self.chars())
+ Decompositions::new_compatible(self.chars())
}
#[inline]
fn nfc(self) -> Recompositions<Chars<'a>> {
- recompose::new_canonical(self.chars())
+ Recompositions::new_canonical(self.chars())
}
#[inline]
fn nfkc(self) -> Recompositions<Chars<'a>> {
- recompose::new_compatible(self.chars())
+ Recompositions::new_compatible(self.chars())
}
#[inline]
@@ -169,26 +162,25 @@
}
}
-
impl UnicodeNormalization<option::IntoIter<char>> for char {
#[inline]
fn nfd(self) -> Decompositions<option::IntoIter<char>> {
- decompose::new_canonical(Some(self).into_iter())
+ Decompositions::new_canonical(Some(self).into_iter())
}
#[inline]
fn nfkd(self) -> Decompositions<option::IntoIter<char>> {
- decompose::new_compatible(Some(self).into_iter())
+ Decompositions::new_compatible(Some(self).into_iter())
}
#[inline]
fn nfc(self) -> Recompositions<option::IntoIter<char>> {
- recompose::new_canonical(Some(self).into_iter())
+ Recompositions::new_canonical(Some(self).into_iter())
}
#[inline]
fn nfkc(self) -> Recompositions<option::IntoIter<char>> {
- recompose::new_compatible(Some(self).into_iter())
+ Recompositions::new_compatible(Some(self).into_iter())
}
#[inline]
@@ -205,22 +197,22 @@
impl<I: Iterator<Item = char>> UnicodeNormalization<I> for I {
#[inline]
fn nfd(self) -> Decompositions<I> {
- decompose::new_canonical(self)
+ Decompositions::new_canonical(self)
}
#[inline]
fn nfkd(self) -> Decompositions<I> {
- decompose::new_compatible(self)
+ Decompositions::new_compatible(self)
}
#[inline]
fn nfc(self) -> Recompositions<I> {
- recompose::new_canonical(self)
+ Recompositions::new_canonical(self)
}
#[inline]
fn nfkc(self) -> Recompositions<I> {
- recompose::new_compatible(self)
+ Recompositions::new_compatible(self)
}
#[inline]
diff --git a/crates/unicode-normalization/src/no_std_prelude.rs b/crates/unicode-normalization/src/no_std_prelude.rs
deleted file mode 100755
index 838d122..0000000
--- a/crates/unicode-normalization/src/no_std_prelude.rs
+++ /dev/null
@@ -1,6 +0,0 @@
-#[cfg(not(feature = "std"))]
-pub use alloc::{
- str::Chars,
- string::{String, ToString},
- vec::Vec,
-};
diff --git a/crates/unicode-normalization/src/normalize.rs b/crates/unicode-normalization/src/normalize.rs
index b144bd7..e59b667 100644
--- a/crates/unicode-normalization/src/normalize.rs
+++ b/crates/unicode-normalization/src/normalize.rs
@@ -14,7 +14,7 @@
compatibility_fully_decomposed, composition_table,
};
-use core::{char, ops::FnMut};
+use core::char;
/// Compute canonical Unicode decomposition for character.
/// See [Unicode Standard Annex #15](http://www.unicode.org/reports/tr15/)
@@ -71,6 +71,7 @@
}
#[inline]
+#[allow(unsafe_code)]
fn decompose<D, F>(c: char, decompose_char: D, mut emit_char: F)
where
D: Fn(char) -> Option<&'static [char]>,
@@ -84,7 +85,10 @@
// Perform decomposition for Hangul
if is_hangul_syllable(c) {
- decompose_hangul(c, emit_char);
+ // Safety: Hangul Syllables invariant checked by is_hangul_syllable above
+ unsafe {
+ decompose_hangul(c, emit_char);
+ }
return;
}
@@ -123,31 +127,41 @@
const V_LAST: u32 = V_BASE + V_COUNT - 1;
const T_LAST: u32 = T_BASE + T_COUNT - 1;
-// Composition only occurs for `TPart`s in `U+11A8 ... U+11C2`,
-// i.e. `T_BASE + 1 ... T_LAST`.
+// Composition only occurs for `TPart`s in `U+11A8 ..= U+11C2`,
+// i.e. `T_BASE + 1 ..= T_LAST`.
const T_FIRST: u32 = T_BASE + 1;
+// Safety-usable invariant: This ensures that c is a valid Hangul Syllable character (U+AC00..U+D7AF)
pub(crate) fn is_hangul_syllable(c: char) -> bool {
+ // Safety: This checks the range 0xAC00 (S_BASE) to 0xD7A4 (S_BASE + S_COUNT), upholding the safety-usable invariant
(c as u32) >= S_BASE && (c as u32) < (S_BASE + S_COUNT)
}
// Decompose a precomposed Hangul syllable
-#[allow(unsafe_code)]
+// Safety: `s` MUST be a valid Hangul Syllable character, between U+AC00..U+D7AF
+#[allow(unsafe_code, unused_unsafe)]
#[inline(always)]
-fn decompose_hangul<F>(s: char, mut emit_char: F)
+unsafe fn decompose_hangul<F>(s: char, mut emit_char: F)
where
F: FnMut(char),
{
+ // This will be at most 0x2baf, the size of the Hangul Syllables block
let s_index = s as u32 - S_BASE;
+ // This will be at most 0x2baf / (21 * 28), 19
let l_index = s_index / N_COUNT;
unsafe {
+ // Safety: L_BASE (0x1100) plus at most 19 is still going to be in range for a valid Unicode code point in the BMP (< 0xD800)
emit_char(char::from_u32_unchecked(L_BASE + l_index));
+ // Safety: This will be at most (N_COUNT - 1) / T_COUNT = (V*T - 1) / T, which gives us an upper bound of V_COUNT = 21
let v_index = (s_index % N_COUNT) / T_COUNT;
+ // Safety: V_BASE (0x1161) plus at most 21 is still going to be in range for a valid Unicode code point in the BMP (< 0xD800)
emit_char(char::from_u32_unchecked(V_BASE + v_index));
+ // Safety: This will be at most T_COUNT - 1 (27)
let t_index = s_index % T_COUNT;
if t_index > 0 {
+ // Safety: T_BASE (0x11A7) plus at most 27 is still going to be in range for a valid Unicode code point in the BMP (< 0xD800)
emit_char(char::from_u32_unchecked(T_BASE + t_index));
}
}
@@ -172,15 +186,24 @@
let (a, b) = (a as u32, b as u32);
match (a, b) {
// Compose a leading consonant and a vowel together into an LV_Syllable
- (L_BASE...L_LAST, V_BASE...V_LAST) => {
+ (L_BASE..=L_LAST, V_BASE..=V_LAST) => {
+ // Safety: based on the above bounds, l_index will be less than or equal to L_COUNT (19)
+ // and v_index will be <= V_COUNT (21)
let l_index = a - L_BASE;
let v_index = b - V_BASE;
+ // Safety: This will be <= 19 * (20 * 21) + (21 * 20), which is 8400.
let lv_index = l_index * N_COUNT + v_index * T_COUNT;
+ // Safety: This is between 0xAC00 and 0xCCD0, which are in range for Hangul Syllables (U+AC00..U+D7AF) and also in range
+ // for BMP unicode
let s = S_BASE + lv_index;
+ // Safety: We've verified this is in-range
Some(unsafe { char::from_u32_unchecked(s) })
}
// Compose an LV_Syllable and a trailing consonant into an LVT_Syllable
- (S_BASE...S_LAST, T_FIRST...T_LAST) if (a - S_BASE) % T_COUNT == 0 => {
+ (S_BASE..=S_LAST, T_FIRST..=T_LAST) if (a - S_BASE) % T_COUNT == 0 => {
+ // Safety: a is between 0xAC00 and (0xAC00 + 19 * 21 * 28). b - T_BASE is between 0 and 19.
+ // Adding a number 0 to 19 to a number that is at largest 0xD7A4 will not go out of bounds to 0xD800 (where the
+ // surrogates start), so this is safe.
Some(unsafe { char::from_u32_unchecked(a + (b - T_BASE)) })
}
_ => None,
@@ -193,7 +216,7 @@
// Regression test from a bugfix where we were composing an LV_Syllable with
// T_BASE directly. (We should only compose an LV_Syllable with a character
- // in the range `T_BASE + 1 ... T_LAST`.)
+ // in the range `T_BASE + 1 ..= T_LAST`.)
#[test]
fn test_hangul_composition() {
assert_eq!(compose_hangul('\u{c8e0}', '\u{11a7}'), None);
diff --git a/crates/unicode-normalization/src/quick_check.rs b/crates/unicode-normalization/src/quick_check.rs
index 4507b2a..728e341 100644
--- a/crates/unicode-normalization/src/quick_check.rs
+++ b/crates/unicode-normalization/src/quick_check.rs
@@ -3,6 +3,9 @@
use crate::tables;
use crate::UnicodeNormalization;
+/// QuickCheck quickly determines if a string is normalized, it can return
+/// `Maybe`
+///
/// The QuickCheck algorithm can quickly determine if a text is or isn't
/// normalized without any allocations in many cases, but it has to be able to
/// return `Maybe` when a full decomposition and recomposition is necessary.
diff --git a/crates/unicode-normalization/src/recompose.rs b/crates/unicode-normalization/src/recompose.rs
index 2a1960a..4effa86 100644
--- a/crates/unicode-normalization/src/recompose.rs
+++ b/crates/unicode-normalization/src/recompose.rs
@@ -9,7 +9,10 @@
// except according to those terms.
use crate::decompose::Decompositions;
-use core::fmt::{self, Write};
+use core::{
+ fmt::{self, Write},
+ iter::FusedIterator,
+};
use tinyvec::TinyVec;
#[derive(Clone)]
@@ -29,25 +32,35 @@
last_ccc: Option<u8>,
}
-#[inline]
-pub fn new_canonical<I: Iterator<Item = char>>(iter: I) -> Recompositions<I> {
- Recompositions {
- iter: super::decompose::new_canonical(iter),
- state: self::RecompositionState::Composing,
- buffer: TinyVec::new(),
- composee: None,
- last_ccc: None,
+impl<I: Iterator<Item = char>> Recompositions<I> {
+ /// Create a new recomposition iterator for canonical compositions (NFC)
+ ///
+ /// Note that this iterator can also be obtained by directly calling [`.nfc()`](crate::UnicodeNormalization::nfc)
+ /// on the iterator.
+ #[inline]
+ pub fn new_canonical(iter: I) -> Self {
+ Recompositions {
+ iter: Decompositions::new_canonical(iter),
+ state: self::RecompositionState::Composing,
+ buffer: TinyVec::new(),
+ composee: None,
+ last_ccc: None,
+ }
}
-}
-#[inline]
-pub fn new_compatible<I: Iterator<Item = char>>(iter: I) -> Recompositions<I> {
- Recompositions {
- iter: super::decompose::new_compatible(iter),
- state: self::RecompositionState::Composing,
- buffer: TinyVec::new(),
- composee: None,
- last_ccc: None,
+ /// Create a new recomposition iterator for compatability compositions (NFkC)
+ ///
+ /// Note that this iterator can also be obtained by directly calling [`.nfkc()`](crate::UnicodeNormalization::nfkc)
+ /// on the iterator.
+ #[inline]
+ pub fn new_compatible(iter: I) -> Self {
+ Recompositions {
+ iter: Decompositions::new_compatible(iter),
+ state: self::RecompositionState::Composing,
+ buffer: TinyVec::new(),
+ composee: None,
+ last_ccc: None,
+ }
}
}
@@ -144,6 +157,8 @@
}
}
+impl<I: Iterator<Item = char> + FusedIterator> FusedIterator for Recompositions<I> {}
+
impl<I: Iterator<Item = char> + Clone> fmt::Display for Recompositions<I> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
for c in self.clone() {
diff --git a/crates/unicode-normalization/src/replace.rs b/crates/unicode-normalization/src/replace.rs
index 8d8cb42..3ab2a57 100644
--- a/crates/unicode-normalization/src/replace.rs
+++ b/crates/unicode-normalization/src/replace.rs
@@ -7,7 +7,10 @@
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
-use core::fmt::{self, Write};
+use core::{
+ fmt::{self, Write},
+ iter::FusedIterator,
+};
use tinyvec::ArrayVec;
/// External iterator for replacements for a string's characters.
@@ -51,6 +54,8 @@
}
}
+impl<I: Iterator<Item = char> + FusedIterator> FusedIterator for Replacements<I> {}
+
impl<I: Iterator<Item = char> + Clone> fmt::Display for Replacements<I> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
for c in self.clone() {
diff --git a/crates/unicode-normalization/src/stream_safe.rs b/crates/unicode-normalization/src/stream_safe.rs
index 30fe810..86498d6 100644
--- a/crates/unicode-normalization/src/stream_safe.rs
+++ b/crates/unicode-normalization/src/stream_safe.rs
@@ -1,3 +1,5 @@
+use core::iter::FusedIterator;
+
use crate::lookups::{
canonical_combining_class, canonical_fully_decomposed, compatibility_fully_decomposed,
stream_safe_trailing_nonstarters,
@@ -59,6 +61,8 @@
}
}
+impl<I: Iterator<Item = char> + FusedIterator> FusedIterator for StreamSafe<I> {}
+
#[derive(Debug)]
pub(crate) struct Decomposition {
pub(crate) leading_nonstarters: usize,
@@ -110,7 +114,7 @@
use crate::normalize::decompose_compatible;
#[cfg(not(feature = "std"))]
- use crate::no_std_prelude::*;
+ use alloc::{string::String, vec::Vec};
use core::char;
diff --git a/crates/unicode-normalization/src/tables.rs b/crates/unicode-normalization/src/tables.rs
index 4c68855..09c161d 100644
--- a/crates/unicode-normalization/src/tables.rs
+++ b/crates/unicode-normalization/src/tables.rs
@@ -15,3721 +15,1210 @@
use crate::quick_check::IsNormalized::*;
#[allow(unused)]
-pub const UNICODE_VERSION: (u8, u8, u8) = (15, 0, 0);
+pub const UNICODE_VERSION: (u8, u8, u8) = (16, 0, 0);
pub(crate) const CANONICAL_COMBINING_CLASS_SALT: &[u16] = &[
- 0x0,
- 0x1,
- 0x224,
- 0x197,
- 0x4,
- 0x0,
- 0x6f,
- 0x4,
- 0xaf,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x88,
- 0xa,
- 0x8,
- 0x0,
- 0x0,
- 0x0,
- 0x1c,
- 0x46,
- 0x1,
- 0xd,
- 0x1b,
- 0x0,
- 0x15,
- 0x12,
- 0x45,
- 0xec,
- 0x36,
- 0x10,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x94,
- 0x0,
- 0x57,
- 0x0,
- 0x8,
- 0x3,
- 0x7,
- 0x0,
- 0x16,
- 0x3a,
- 0x2,
- 0x23,
- 0x3,
- 0x4,
- 0x1c,
- 0x1,
- 0x0,
- 0x47,
- 0x11,
- 0x17,
- 0x4,
- 0x1b,
- 0x0,
- 0x13,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x7,
- 0x7,
- 0x4,
- 0x2e,
- 0x0,
- 0x0,
- 0x2c,
- 0x0,
- 0x0,
- 0x3,
- 0xf,
- 0x0,
- 0x0,
- 0x13,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x9,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x2,
- 0x3,
- 0x2,
- 0x1e,
- 0x0,
- 0x8,
- 0x11,
- 0x1,
- 0x0,
- 0x5,
- 0x0,
- 0x79,
- 0x0,
- 0x4,
- 0x13,
- 0x0,
- 0x0,
- 0x5,
- 0x2,
- 0x0,
- 0x5,
- 0x1,
- 0x15,
- 0x1,
- 0x0,
- 0x3,
- 0xc,
- 0x0,
- 0x35,
- 0x3,
- 0x2,
- 0x5,
- 0x6,
- 0x0,
- 0x5,
- 0x4,
- 0x2,
- 0x1c,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x9,
- 0x2,
- 0x9,
- 0x7,
- 0x0,
- 0x5,
- 0x0,
- 0x8,
- 0x7,
- 0x0,
- 0x12,
- 0x9,
- 0x0,
- 0x39,
- 0x2,
- 0x9,
- 0x0,
- 0x4,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x22,
- 0x2,
- 0x0,
- 0x1b,
- 0x13,
- 0xc,
- 0x14,
- 0x6,
- 0x4,
- 0x5,
- 0x13,
- 0x2,
- 0x0,
- 0x3,
- 0x4,
- 0x2,
- 0x0,
- 0x18,
- 0x0,
- 0x6,
- 0x4,
- 0x0,
- 0x0,
- 0xa,
- 0xa,
- 0x0,
- 0x1,
- 0x0,
- 0xf,
- 0x10,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0xf,
- 0x1,
- 0x4,
- 0x2,
- 0xa,
- 0xb,
- 0x9,
- 0x4,
- 0x1,
- 0x0,
- 0xb,
- 0x0,
- 0x3,
- 0x0,
- 0x6,
- 0x0,
- 0x6,
- 0x0,
- 0x3,
- 0x4,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x15,
- 0x0,
- 0x0,
- 0x0,
- 0x14,
- 0x1b,
- 0x0,
- 0xc,
- 0x0,
- 0x0,
- 0x8,
- 0x3,
- 0xc,
- 0x0,
- 0xe,
- 0x2,
- 0x0,
- 0x3,
- 0x0,
- 0xa,
- 0x2,
- 0x6,
- 0x1,
- 0x0,
- 0x4,
- 0x0,
- 0x1,
- 0x6,
- 0x2,
- 0x3,
- 0x2,
- 0x10,
- 0x0,
- 0xf,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x3,
- 0x4,
- 0xd,
- 0x6,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x18,
- 0xa,
- 0x6,
- 0x1,
- 0x1,
- 0x8,
- 0x0,
- 0x1,
- 0x1,
- 0x7,
- 0x0,
- 0x3,
- 0x9,
- 0x11,
- 0x5,
- 0x1,
- 0x5,
- 0x3,
- 0x16,
- 0x7,
- 0x5,
- 0x4,
- 0x0,
- 0xa,
- 0x6,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x7,
- 0x0,
- 0x6,
- 0x0,
- 0x5,
- 0x41,
- 0x9,
- 0x1,
- 0xa,
- 0x0,
- 0x5,
- 0x2,
- 0x11,
- 0xb,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x6,
- 0x18,
- 0x3,
- 0x0,
- 0x3,
- 0x0,
- 0x2,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x5,
- 0x1,
- 0x0,
- 0x0,
- 0x9,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x3,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x3,
- 0xc,
- 0x1,
- 0x3,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x5,
- 0x1,
- 0x5,
- 0x0,
- 0x1,
- 0xb,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0xf,
- 0x0,
- 0x0,
- 0x2,
- 0x7,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x9,
- 0x8,
- 0x0,
- 0x0,
- 0x3,
- 0x3,
- 0x1,
- 0x4,
- 0x3,
- 0x4,
- 0x5,
- 0x2,
- 0x0,
- 0x0,
- 0x2,
- 0x6,
- 0x1,
- 0x5,
- 0x1,
- 0x0,
- 0x3,
- 0x6,
- 0x8,
- 0x2,
- 0x2,
- 0x6,
- 0x3,
- 0x0,
- 0x10,
- 0x6,
- 0x6,
- 0x5,
- 0x1,
- 0x7,
- 0x0,
- 0x2,
- 0x3,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x8,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0xc,
- 0x4,
- 0x1,
- 0x2,
- 0x1,
- 0x4,
- 0x2,
- 0x5,
- 0x4,
- 0x0,
- 0x3,
- 0x4,
- 0x2,
- 0x0,
- 0x1,
- 0x3,
- 0x7,
- 0x6,
- 0x8,
- 0x0,
- 0x2,
- 0x3,
- 0x0,
- 0x2,
- 0x2,
- 0x2,
- 0x4,
- 0x0,
- 0x0,
- 0x6,
- 0x6,
- 0x6,
- 0xc,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x3,
- 0x0,
- 0x9,
- 0x3,
- 0x2,
- 0x1,
- 0x1,
- 0x9,
- 0x1,
- 0x0,
- 0x8,
- 0x1,
- 0x6,
- 0x0,
- 0x3,
- 0x0,
- 0x5,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x4,
- 0x0,
- 0x2,
- 0x0,
- 0x2,
- 0x6,
- 0x6,
- 0x2,
- 0x8,
- 0x5,
- 0x6,
- 0x5,
- 0x1,
- 0x6,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x9,
- 0x5,
- 0x5,
- 0xe,
- 0x0,
- 0x3,
- 0x5,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x4,
- 0x0,
- 0x2,
- 0x4,
- 0x6,
- 0x5,
- 0x6,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x5,
- 0x2,
- 0x8,
- 0x8,
- 0x1,
- 0x6,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x8,
- 0x0,
- 0x4,
- 0x7,
- 0xa,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x2,
- 0x1,
- 0x4,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x6,
- 0x0,
- 0x3,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x1,
- 0x2,
- 0x2,
- 0x0,
- 0x4,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x2,
- 0x2,
- 0x2,
- 0x0,
- 0x1,
- 0x5,
- 0x4,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x4,
- 0x1,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x4,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0xd,
- 0x4,
- 0x0,
- 0x1,
- 0x4,
- 0x0,
- 0x5,
- 0x3,
- 0x7,
- 0x3,
- 0x3,
- 0x3,
- 0x2,
- 0x0,
- 0x2,
- 0x2,
- 0x2,
- 0x1,
- 0x0,
- 0x1,
- 0x3,
- 0x4,
- 0x1,
- 0x0,
- 0x1,
- 0x4,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x4,
- 0x1,
- 0x8,
- 0x2,
- 0x4,
- 0x1,
- 0x1,
- 0x1,
- 0x5,
- 0x1,
- 0x4,
- 0x1,
- 0x1,
- 0x2,
- 0x6,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x2,
- 0x0,
- 0x6,
- 0x3,
- 0x1,
- 0x3,
- 0x2,
- 0x3,
- 0x5,
- 0x4,
- 0x1,
- 0x0,
- 0x5,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x5,
- 0x5,
- 0x8,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x2,
- 0x5,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x2,
- 0x7,
- 0x1,
- 0x1,
- 0x2,
- 0x0,
- 0x2,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x2,
- 0x2,
- 0x4,
- 0x1,
- 0x4,
- 0x0,
- 0x2,
- 0x2,
- 0x4,
- 0x4,
- 0x0,
- 0x8,
- 0x4,
- 0x6,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x6,
- 0x1,
- 0x0,
- 0x3,
- 0x2,
- 0x1,
- 0x0,
- 0x5,
- 0x4,
- 0x0,
- 0x0,
- 0x5,
- 0x2,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x4,
- 0x3,
- 0x0,
- 0x9,
- 0x5,
- 0x2,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x7,
- 0x0,
- 0x3,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x3,
- 0x0,
- 0x2,
- 0x3,
- 0x1,
- 0x2,
- 0x1,
- 0x2,
- 0x0,
- 0x4,
- 0x2,
- 0x1,
- 0x1,
- 0x1,
- 0x2,
- 0x2,
- 0x0,
- 0x4,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x2,
- 0x3,
- 0x5,
- 0x3,
- 0x1,
- 0x0,
- 0x1,
- 0x3,
- 0x7,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x2,
- 0x3,
- 0x1,
+ 0x000, 0x001, 0x2E5, 0x085, 0x014, 0x000, 0x023, 0x092, 0x01C, 0x07A, 0x000, 0x001, 0x000,
+ 0x000, 0x06C, 0x02B, 0x006, 0x000, 0x000, 0x000, 0x00F, 0x000, 0x001, 0x007, 0x03A, 0x009,
+ 0x10D, 0x002, 0x01A, 0x000, 0x004, 0x008, 0x069, 0x000, 0x000, 0x002, 0x011, 0x000, 0x01E,
+ 0x000, 0x07E, 0x01B, 0x005, 0x002, 0x008, 0x000, 0x007, 0x004, 0x006, 0x00E, 0x000, 0x00A,
+ 0x002, 0x057, 0x022, 0x000, 0x013, 0x001, 0x005, 0x000, 0x000, 0x02D, 0x000, 0x000, 0x000,
+ 0x000, 0x001, 0x049, 0x003, 0x001, 0x057, 0x000, 0x012, 0x000, 0x000, 0x000, 0x005, 0x041,
+ 0x000, 0x000, 0x003, 0x000, 0x003, 0x002, 0x002, 0x01D, 0x000, 0x000, 0x000, 0x011, 0x001,
+ 0x000, 0x002, 0x001, 0x000, 0x00E, 0x000, 0x00B, 0x001, 0x006, 0x005, 0x000, 0x001, 0x000,
+ 0x017, 0x000, 0x000, 0x001, 0x000, 0x000, 0x00A, 0x002, 0x000, 0x004, 0x00B, 0x018, 0x021,
+ 0x00C, 0x001, 0x038, 0x000, 0x000, 0x002, 0x003, 0x001, 0x005, 0x000, 0x000, 0x00A, 0x01B,
+ 0x001, 0x000, 0x000, 0x000, 0x019, 0x01A, 0x000, 0x000, 0x000, 0x004, 0x024, 0x003, 0x019,
+ 0x004, 0x000, 0x00D, 0x001, 0x013, 0x000, 0x012, 0x004, 0x000, 0x006, 0x003, 0x006, 0x000,
+ 0x002, 0x00F, 0x000, 0x000, 0x000, 0x000, 0x000, 0x011, 0x001, 0x011, 0x011, 0x005, 0x000,
+ 0x00B, 0x013, 0x01E, 0x00A, 0x004, 0x001, 0x00C, 0x00A, 0x000, 0x000, 0x005, 0x003, 0x006,
+ 0x000, 0x005, 0x009, 0x002, 0x000, 0x000, 0x009, 0x000, 0x001, 0x000, 0x029, 0x000, 0x012,
+ 0x019, 0x004, 0x000, 0x000, 0x002, 0x00E, 0x003, 0x001, 0x00F, 0x005, 0x002, 0x001, 0x004,
+ 0x007, 0x005, 0x000, 0x005, 0x002, 0x000, 0x000, 0x009, 0x000, 0x005, 0x003, 0x009, 0x001,
+ 0x000, 0x000, 0x001, 0x000, 0x000, 0x009, 0x007, 0x007, 0x000, 0x000, 0x000, 0x006, 0x003,
+ 0x000, 0x00A, 0x000, 0x000, 0x003, 0x007, 0x001, 0x000, 0x000, 0x001, 0x01A, 0x006, 0x000,
+ 0x001, 0x009, 0x002, 0x008, 0x000, 0x001, 0x000, 0x008, 0x001, 0x009, 0x006, 0x015, 0x001,
+ 0x000, 0x004, 0x000, 0x000, 0x000, 0x00C, 0x000, 0x005, 0x003, 0x000, 0x006, 0x000, 0x000,
+ 0x008, 0x000, 0x000, 0x003, 0x007, 0x001, 0x000, 0x005, 0x001, 0x010, 0x007, 0x001, 0x005,
+ 0x000, 0x000, 0x004, 0x004, 0x009, 0x00B, 0x001, 0x005, 0x004, 0x00A, 0x008, 0x003, 0x018,
+ 0x000, 0x001, 0x002, 0x003, 0x000, 0x002, 0x000, 0x007, 0x000, 0x003, 0x000, 0x005, 0x007,
+ 0x009, 0x00F, 0x006, 0x000, 0x005, 0x003, 0x009, 0x00B, 0x013, 0x002, 0x001, 0x000, 0x001,
+ 0x001, 0x000, 0x001, 0x000, 0x001, 0x003, 0x00F, 0x000, 0x004, 0x000, 0x000, 0x007, 0x007,
+ 0x002, 0x000, 0x000, 0x000, 0x002, 0x004, 0x00B, 0x000, 0x00C, 0x001, 0x000, 0x000, 0x002,
+ 0x004, 0x008, 0x002, 0x002, 0x000, 0x006, 0x000, 0x00B, 0x001, 0x001, 0x00C, 0x006, 0x000,
+ 0x004, 0x002, 0x00B, 0x001, 0x000, 0x001, 0x000, 0x000, 0x005, 0x001, 0x001, 0x00E, 0x003,
+ 0x005, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003, 0x000, 0x000, 0x00A, 0x003,
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x013, 0x000, 0x002, 0x00A, 0x000, 0x000, 0x003,
+ 0x003, 0x001, 0x003, 0x007, 0x004, 0x002, 0x000, 0x002, 0x000, 0x004, 0x000, 0x001, 0x001,
+ 0x00E, 0x001, 0x005, 0x001, 0x002, 0x006, 0x002, 0x003, 0x004, 0x006, 0x002, 0x003, 0x001,
+ 0x001, 0x005, 0x001, 0x000, 0x00E, 0x003, 0x002, 0x007, 0x000, 0x000, 0x00A, 0x004, 0x000,
+ 0x000, 0x000, 0x006, 0x000, 0x000, 0x000, 0x000, 0x005, 0x000, 0x006, 0x001, 0x000, 0x003,
+ 0x005, 0x003, 0x001, 0x007, 0x001, 0x002, 0x008, 0x008, 0x002, 0x001, 0x004, 0x000, 0x005,
+ 0x009, 0x002, 0x000, 0x001, 0x003, 0x010, 0x001, 0x004, 0x004, 0x004, 0x003, 0x000, 0x000,
+ 0x001, 0x000, 0x002, 0x000, 0x000, 0x001, 0x001, 0x010, 0x002, 0x003, 0x000, 0x000, 0x000,
+ 0x003, 0x001, 0x001, 0x003, 0x000, 0x000, 0x002, 0x000, 0x001, 0x001, 0x000, 0x005, 0x002,
+ 0x000, 0x002, 0x003, 0x000, 0x006, 0x000, 0x000, 0x001, 0x001, 0x000, 0x000, 0x001, 0x000,
+ 0x00A, 0x000, 0x007, 0x000, 0x001, 0x001, 0x000, 0x001, 0x001, 0x004, 0x003, 0x003, 0x002,
+ 0x007, 0x003, 0x000, 0x007, 0x000, 0x000, 0x003, 0x000, 0x001, 0x00B, 0x001, 0x002, 0x005,
+ 0x000, 0x003, 0x001, 0x000, 0x000, 0x003, 0x000, 0x002, 0x000, 0x000, 0x000, 0x002, 0x001,
+ 0x000, 0x001, 0x002, 0x001, 0x004, 0x005, 0x004, 0x000, 0x003, 0x002, 0x000, 0x000, 0x001,
+ 0x005, 0x002, 0x007, 0x001, 0x001, 0x000, 0x001, 0x000, 0x001, 0x003, 0x003, 0x002, 0x004,
+ 0x000, 0x001, 0x001, 0x001, 0x000, 0x000, 0x003, 0x002, 0x005, 0x000, 0x005, 0x00F, 0x002,
+ 0x000, 0x001, 0x001, 0x000, 0x002, 0x000, 0x000, 0x000, 0x001, 0x000, 0x003, 0x000, 0x000,
+ 0x000, 0x000, 0x000, 0x000, 0x001, 0x002, 0x001, 0x001, 0x003, 0x000, 0x001, 0x003, 0x001,
+ 0x000, 0x000, 0x002, 0x000, 0x005, 0x003, 0x000, 0x006, 0x001, 0x002, 0x002, 0x003, 0x001,
+ 0x003, 0x005, 0x006, 0x000, 0x002, 0x003, 0x00A, 0x000, 0x001, 0x001, 0x002, 0x002, 0x002,
+ 0x004, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x005, 0x004, 0x001, 0x000, 0x000, 0x003,
+ 0x001, 0x000, 0x000, 0x002, 0x000, 0x002, 0x001, 0x001, 0x002, 0x003, 0x000, 0x002, 0x000,
+ 0x001, 0x000, 0x002, 0x003, 0x000, 0x002, 0x002, 0x001, 0x000, 0x001, 0x000, 0x001, 0x004,
+ 0x001, 0x000, 0x004, 0x004, 0x001, 0x000, 0x000, 0x001, 0x001, 0x003, 0x001, 0x000, 0x000,
+ 0x001, 0x002, 0x002, 0x009, 0x001, 0x005, 0x002, 0x002, 0x001, 0x000, 0x002, 0x006, 0x00D,
+ 0x001, 0x002, 0x006, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x007, 0x000, 0x004,
+ 0x002, 0x000, 0x002, 0x003, 0x001, 0x000, 0x002, 0x000, 0x001, 0x003, 0x000, 0x001, 0x000,
+ 0x001, 0x000, 0x003, 0x002, 0x001, 0x006, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000,
+ 0x003, 0x003, 0x000, 0x000, 0x000, 0x000, 0x000, 0x009, 0x000, 0x000, 0x000, 0x002, 0x001,
+ 0x001, 0x003, 0x001, 0x001, 0x000, 0x005, 0x000, 0x003, 0x002, 0x003, 0x001, 0x001, 0x002,
+ 0x000, 0x003, 0x001, 0x001, 0x000, 0x000, 0x001, 0x000, 0x001, 0x001, 0x002, 0x003, 0x001,
+ 0x001, 0x000, 0x001, 0x005, 0x004, 0x000, 0x003, 0x003, 0x000, 0x002, 0x003, 0x001, 0x001,
+ 0x005, 0x003, 0x001, 0x000, 0x000, 0x001, 0x002, 0x001, 0x003, 0x00A, 0x004, 0x000, 0x001,
+ 0x003, 0x001, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000, 0x005, 0x002, 0x000, 0x001, 0x001,
+ 0x000, 0x000, 0x006, 0x005, 0x003, 0x000, 0x000, 0x002, 0x000, 0x001, 0x000, 0x001, 0x001,
+ 0x001, 0x001, 0x001, 0x000, 0x000, 0x00B, 0x004, 0x000, 0x002, 0x001, 0x002, 0x002, 0x001,
+ 0x001, 0x000, 0x001, 0x002, 0x001, 0x001, 0x001, 0x002, 0x002, 0x000, 0x004, 0x001, 0x002,
+ 0x000, 0x000, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000,
+ 0x000, 0x000, 0x008, 0x001, 0x001, 0x000, 0x002, 0x002, 0x003, 0x002, 0x001, 0x001, 0x002,
+ 0x000, 0x001, 0x000, 0x000, 0x009, 0x001, 0x001, 0x000, 0x001, 0x000, 0x003, 0x000, 0x001,
+ 0x006, 0x001, 0x001, 0x000, 0x003, 0x001, 0x001, 0x001, 0x001, 0x004, 0x002, 0x002, 0x001,
+ 0x000, 0x001, 0x003, 0x004, 0x000, 0x003, 0x000, 0x000, 0x001, 0x001, 0x001,
];
pub(crate) const CANONICAL_COMBINING_CLASS_KV: &[u32] = &[
- 0x34AE6,
- 0x2DFAE6,
- 0x1DFADA,
- 0x339DC,
- 0x1DFCE9,
- 0xA4D09,
- 0x20D0E6,
- 0x593E6,
- 0x102E0DC,
- 0x1CF4E6,
- 0x5A2DC,
- 0xFE26E6,
- 0x11D4509,
- 0x5C219,
- 0x6EADC,
- 0xA675E6,
- 0x10F4EDC,
- 0xA8EBE6,
- 0x332DC,
- 0xC4D09,
- 0x741E6,
- 0x1D171D8,
- 0xFE2DDC,
- 0x1DF2E6,
- 0x1DDEE6,
- 0xA8E1E6,
- 0x5BB14,
- 0x1DD5E6,
- 0x8CEE6,
- 0x1A7BE6,
- 0xF7484,
- 0xA8E6E6,
- 0x6191F,
- 0x114C307,
- 0x1A79E6,
- 0x65DE6,
- 0x8F11C,
- 0x1E020E6,
- 0xA8F1E6,
- 0x1DFDDC,
- 0xFE25E6,
- 0x1E947E6,
- 0x1A75E6,
- 0xEBA09,
- 0x1E02AE6,
- 0x64B1B,
- 0x6D9E6,
- 0x116B609,
- 0x1DECE6,
- 0xE3A09,
- 0x954E6,
- 0x2DE9E6,
- 0x1AB3E6,
- 0x8F3E6,
- 0x8F7E6,
- 0xA8E2E6,
- 0x1E00BE6,
- 0xFE28DC,
- 0x20D801,
- 0xAAB0E6,
- 0x10F4DDC,
- 0x825E6,
- 0x611E6,
- 0xAABEE6,
- 0x820E6,
- 0x8E8E6,
- 0x306E6,
- 0x2DE4E6,
- 0x11F4109,
- 0x111CA07,
- 0x2CF0E6,
- 0x1CD7DC,
- 0x10A3ADC,
- 0x1E131E6,
- 0x103A09,
- 0x73BDC,
- 0x358E8,
- 0x487E6,
- 0x1AB1E6,
- 0x11370E6,
- 0x1CD0E6,
- 0xA8EEE6,
- 0x33CDC,
- 0x20D5E6,
- 0x819E6,
- 0x16B30E6,
- 0x16AF301,
- 0x9BC07,
- 0x1DE9E6,
- 0x1DDAE6,
- 0x1136BE6,
- 0x82BE6,
- 0x173409,
- 0x1DDBE6,
- 0x5B40E,
- 0x1D16DE2,
- 0x1D16901,
- 0x34CE6,
- 0x2DF0E6,
- 0x33701,
- 0x11373E6,
- 0x112E907,
- 0x1AC0DC,
- 0x20EA01,
- 0x33EE6,
- 0xF7181,
- 0x1D16801,
- 0x346E6,
- 0x1E8D6DC,
- 0x1E8D0DC,
- 0xFE2CDC,
- 0x1CE0E6,
- 0x8EAE6,
- 0x20DBE6,
- 0x16B31E6,
- 0x735E6,
- 0x10EFDDC,
- 0x1D17EDC,
- 0x11A3409,
- 0x81FE6,
- 0x1E01CE6,
- 0x1DDFE6,
- 0x20E8DC,
- 0xABED09,
- 0x1DE1E6,
- 0x316DC,
- 0x1D182DC,
- 0x20D7E6,
- 0x64F1F,
- 0x8F5E6,
- 0xD4D09,
- 0x1AC9E6,
- 0x110B909,
- 0x1ABCE6,
- 0xA67AE6,
- 0x1D1AAE6,
- 0x1E4EEDC,
- 0x1E130E6,
- 0x59FE6,
- 0x1939DE,
- 0x357E6,
- 0x119E009,
- 0x16FF006,
- 0x733E6,
- 0xFE29DC,
- 0x1CF8E6,
- 0xF8409,
- 0x364E6,
- 0x317DC,
- 0x483E6,
- 0x36CE6,
- 0x5B10B,
- 0x1CD2E6,
- 0x307E6,
- 0x65121,
- 0x330DC,
- 0x319DC,
- 0x656DC,
- 0x1DE4E6,
- 0x952DC,
- 0x345F0,
- 0x2DF1E6,
- 0x193BDC,
- 0x659E6,
- 0x5ABE6,
- 0x1B73E6,
- 0x2CF1E6,
- 0xABC07,
- 0xF7C82,
- 0x1136AE6,
- 0xA8E4E6,
- 0x8FBE6,
- 0x5B20C,
- 0xFE21E6,
- 0x2DFBE6,
- 0x31AE8,
- 0x738DC,
- 0x20D301,
- 0xFE2ADC,
- 0x11369E6,
- 0xF7282,
- 0x1AC2E6,
- 0x1D17BDC,
- 0xF86E6,
- 0x327CA,
- 0x1DC0E6,
- 0x10F48E6,
- 0x1104609,
- 0x1B6BE6,
- 0x8E6DC,
- 0x1E134E6,
- 0x341E6,
- 0x1DF6E8,
- 0xA8ECE6,
- 0x1D1ABE6,
- 0x6ECE6,
- 0x1E2AEE6,
- 0x5B50F,
- 0x1AC7E6,
- 0x1E002E6,
- 0xFC6DC,
- 0x1E136E6,
- 0x8DFE6,
- 0x64C1C,
- 0x658E6,
- 0x6E1E6,
- 0x2DE7E6,
- 0x8CFDC,
- 0x302E6,
- 0x1AC4DC,
- 0xAABFE6,
- 0x5B913,
- 0x1D18BDC,
- 0x1172B09,
- 0x2DF3E6,
- 0x739DC,
- 0x2DE0E6,
- 0x1CDCDC,
- 0x1107009,
- 0xA92CDC,
- 0x823E6,
- 0x1DF3E6,
- 0xA67DE6,
- 0x10F46DC,
- 0x1DCCE6,
- 0x6DCE6,
- 0x11A4709,
- 0xEB976,
- 0x36BE6,
- 0x65EE6,
- 0x1CF9E6,
- 0x8D6E6,
- 0x8E0E6,
- 0x1B6EE6,
- 0x8D8E6,
- 0x1E026E6,
- 0x343E6,
- 0x20D901,
- 0x1E948E6,
- 0x5B610,
- 0x1E011E6,
- 0x1DE8E6,
- 0x1DF7E4,
- 0x2DFCE6,
- 0x11D9709,
- 0x486E6,
- 0x1DC1E6,
- 0x591DC,
- 0x11D4409,
- 0xA8C409,
- 0x1BAA09,
- 0x10EFFDC,
- 0x6EDDC,
- 0x356DC,
- 0x1DEEE6,
- 0x2DEDE6,
- 0x64D1D,
- 0x17D209,
- 0xD3C09,
- 0x1E945E6,
- 0x114C209,
- 0x303E6,
- 0xA6F0E6,
- 0x302FE0,
- 0x1E01BE6,
- 0x11368E6,
- 0x1163F09,
- 0x1CE301,
- 0x5A3DC,
- 0x8EFDC,
- 0x596DC,
- 0x1E028E6,
- 0x10F4FDC,
- 0xA82C09,
- 0x1D172D8,
- 0x2CEFE6,
- 0x10F49E6,
- 0xA8EAE6,
- 0x32CDC,
- 0xD3B09,
- 0x1E00FE6,
- 0x8EDDC,
- 0x171409,
- 0x1ABBE6,
- 0x1E8D3DC,
- 0xB3C07,
- 0x59DE6,
- 0x10AE6DC,
- 0x1DFBE6,
- 0x16FF106,
- 0x82AE6,
- 0x20EEDC,
- 0x1CDFDC,
- 0x1CDDDC,
- 0x8D2DC,
- 0x135FE6,
- 0xF7A82,
- 0x610E6,
- 0x1144209,
- 0x2DEEE6,
- 0x1145EE6,
- 0x73DE6,
- 0x35DEA,
- 0xFE2FE6,
- 0xCBC07,
- 0x1DC7E6,
- 0x6E7E6,
- 0x321CA,
- 0x5A6DC,
- 0xA8F0E6,
- 0x5BA13,
- 0x2DECE6,
- 0x8EEDC,
- 0x16AF201,
- 0x5C712,
- 0x612E6,
- 0x59CE6,
- 0x11D4207,
- 0x1ABADC,
- 0x1AB4E6,
- 0x1E8D2DC,
- 0x85BDC,
- 0x1B72E6,
- 0x1E000E6,
- 0x5B00A,
- 0x5C5DC,
- 0x10F47DC,
- 0x1A78E6,
- 0x1113409,
- 0x1144607,
- 0x10D26E6,
- 0x20DCE6,
- 0x350E6,
- 0xF7D82,
- 0x31FDC,
- 0x103909,
- 0x8D3DC,
- 0x1BE607,
- 0x731DC,
- 0x312E6,
- 0x829E6,
- 0x8FADC,
- 0x7EBE6,
- 0x1DDDE6,
- 0x1D165D8,
- 0x20E9E6,
- 0x1E01EE6,
- 0x1E135E6,
- 0x1DEDE6,
- 0xC565B,
- 0x1E012E6,
- 0x2DE3E6,
- 0xF7B82,
- 0x1CDEDC,
- 0x36DE6,
- 0x8F4E6,
- 0x1E8D4DC,
- 0x73CDC,
- 0x11374E6,
- 0x5ACE6,
- 0x1AC8E6,
- 0x2DEBE6,
- 0xA92BDC,
- 0x1117307,
- 0x111C009,
- 0x33601,
- 0xF8082,
- 0x20D4E6,
- 0x59BDC,
- 0x1E001E6,
- 0x827E6,
- 0x33401,
- 0x31BD8,
- 0x20D201,
- 0x1E003E6,
- 0x1DF0E6,
- 0x31DDC,
- 0x2DF4E6,
- 0x11372E6,
- 0x314E6,
- 0x18A9E4,
- 0x1136CE6,
- 0x2DE5E6,
- 0x1113309,
- 0x135DE6,
- 0x1A77E6,
- 0xE3967,
- 0x10D27E6,
- 0xCCD09,
- 0x32DDC,
- 0x592E6,
- 0x2DEFE6,
- 0x8CAE6,
- 0x2DE1E6,
- 0x657E6,
- 0x32BDC,
- 0x10EACE6,
- 0x309E6,
- 0x730E6,
- 0x65FDC,
- 0x1E014E6,
- 0x8DEE6,
- 0x2DFEE6,
- 0x16B33E6,
- 0x8CDE6,
- 0x329DC,
- 0x8F21D,
- 0x93C07,
- 0x747E6,
- 0x859DC,
- 0x736E6,
- 0x10A38E6,
- 0x81DE6,
- 0x1CD5DC,
- 0x743E6,
- 0x746DC,
- 0x899DC,
- 0x61A20,
- 0x1CE201,
- 0x301E6,
- 0x1E944E6,
- 0x1D186E6,
- 0x6E0E6,
- 0x1194307,
- 0x355DC,
- 0x6181E,
- 0xA66FE6,
- 0x8FFE6,
- 0x11100E6,
- 0x33DE6,
- 0x1DC2DC,
- 0x615E6,
- 0x342E6,
- 0x1A17E6,
- 0x11367E6,
- 0x10EABE6,
- 0x6EBE6,
- 0x1E01FE6,
- 0xE4A6B,
- 0x325DC,
- 0x349DC,
- 0xFE23E6,
- 0x10376E6,
- 0x2DFFE6,
- 0x1D16FD8,
- 0x30FE6,
- 0x1BAB09,
- 0x2DE2E6,
- 0x740E6,
- 0x1193E09,
- 0xF39D8,
- 0x20EFDC,
- 0x2DE6E6,
- 0x1D187E6,
- 0x1DD2E6,
- 0x10F4AE6,
- 0x6D8E6,
- 0x1B3407,
- 0x2DEAE6,
- 0xA679E6,
- 0x10F84E6,
- 0xF87E6,
- 0x35FE9,
- 0x300E6,
- 0x7EEE6,
- 0x2DF2E6,
- 0x11F4209,
- 0x73AE6,
- 0x31EDC,
- 0x1E00DE6,
- 0x1DCED6,
- 0x1AB7DC,
- 0x1D16ED8,
- 0x352E6,
- 0x8F6DC,
- 0xA677E6,
- 0x1A7CE6,
- 0x8E7E6,
- 0x16B32E6,
- 0x1DD9E6,
- 0x1DF9DC,
- 0x8E9DC,
- 0x11366E6,
- 0x1AC6E6,
- 0x1CE701,
- 0x1CD1E6,
- 0x35EEA,
- 0x16AF401,
- 0x1AB0E6,
- 0x34BE6,
- 0x33BDC,
- 0x67023,
- 0x366E6,
- 0x10D25E6,
- 0x9FEE6,
- 0xAAB4DC,
- 0xBCD09,
- 0x1DC9E6,
- 0x5BD16,
- 0x8D0DC,
- 0x816E6,
- 0x101FDDC,
- 0xA3C07,
- 0x1D17CDC,
- 0x732E6,
- 0x826E6,
- 0x1133B07,
- 0x1CD9DC,
- 0x81EE6,
- 0x10F83DC,
- 0x313E6,
- 0x1DFFDC,
- 0x1D17FDC,
- 0x1D16701,
- 0x1A6009,
- 0x1E949E6,
- 0x10A0DDC,
- 0x1183909,
- 0xF19DC,
- 0x1DE7E6,
- 0xB4D09,
- 0x89CE6,
- 0x2DFDE6,
- 0x367E6,
- 0xA9C009,
- 0xA67BE6,
- 0x333DC,
- 0x5A1E6,
- 0x8EBE6,
- 0x1E009E6,
- 0x1DEFE6,
- 0x324DC,
- 0xFE2BDC,
- 0xFE27DC,
- 0x10D24E6,
- 0x81BE6,
- 0x1E008E6,
- 0x1E01DE6,
- 0xA95309,
- 0x6DBE6,
- 0xC5554,
- 0x2D7F09,
- 0x1CDAE6,
- 0x5BC15,
- 0x59ADE,
- 0xA676E6,
- 0x2DF8E6,
- 0x20D6E6,
- 0x5B30D,
- 0x1D181DC,
- 0x1ACADC,
- 0x953E6,
- 0x328CA,
- 0x5A0E6,
- 0x595E6,
- 0x8D5E6,
- 0x308E6,
- 0xA674E6,
- 0x30CE6,
- 0x1A76E6,
- 0x1DC6E6,
- 0x6E2E6,
- 0x10F4CE6,
- 0x20F0E6,
- 0x8CBE6,
- 0x10A0FE6,
- 0x135EE6,
- 0x1B6FE6,
- 0x1AB2E6,
- 0x1DF8E4,
- 0x5AADC,
- 0x10AE5E6,
- 0x89FE6,
- 0x1E00CE6,
- 0x20E501,
- 0x8FCE6,
- 0x65020,
- 0x8ECE6,
- 0x898E6,
- 0x1E2EDE6,
- 0x1DD7E6,
- 0xE3867,
- 0x89DE6,
- 0x1B71E6,
- 0x85ADC,
- 0x1DC5E6,
- 0x1D189E6,
- 0xA69FE6,
- 0x348DC,
- 0x8DBE6,
- 0x1DC4E6,
- 0x320DC,
- 0xA8E3E6,
- 0x1E946E6,
- 0x1D170D8,
- 0xAAF609,
- 0x1ACCE6,
- 0x360EA,
- 0x1ABFDC,
- 0x1AC1E6,
- 0x302CE8,
- 0x2DF7E6,
- 0xEB876,
- 0x1E132E6,
- 0x1DFEE6,
- 0x33FE6,
- 0x20EB01,
- 0x82DE6,
- 0x347DC,
- 0x1123607,
- 0xA6F1E6,
- 0x749E6,
- 0x17DDE6,
- 0x7F1E6,
- 0x617E6,
- 0x1ACDE6,
- 0x1DE6E6,
- 0x8E4E6,
- 0x351E6,
- 0x89EE6,
- 0x613E6,
- 0x1DCDEA,
- 0x655DC,
- 0x20E1E6,
- 0x65CDC,
- 0x1ABDDC,
- 0x1AB9DC,
- 0xA678E6,
- 0x10A3F09,
- 0x32ADC,
- 0xA8EDE6,
- 0x302ADA,
- 0x20DA01,
- 0x30DE6,
- 0x302BE4,
- 0x8D7E6,
- 0x8F01B,
- 0x8DCE6,
- 0x5B711,
- 0xA80609,
- 0x1D1ADE6,
- 0x6E4E6,
- 0x1DE0E6,
- 0x5ADDE,
- 0x1DF1E6,
- 0x11102E6,
- 0x1E8D5DC,
- 0x30EE6,
- 0x7EFE6,
- 0x7F0E6,
- 0x597E6,
- 0x1E027E6,
- 0x1E2ECE6,
- 0x31CDC,
- 0x315E8,
- 0xAAB7E6,
- 0x616E6,
- 0x2DF6E6,
- 0x5BF17,
- 0x10A3901,
- 0x653E6,
- 0x1D166D8,
- 0x1AC5E6,
- 0x361EA,
- 0x8F8E6,
- 0x1AC3DC,
- 0x103707,
- 0x1123509,
- 0x36EE6,
- 0x1E004E6,
- 0x1E023E6,
- 0x368E6,
- 0x1DD6E6,
- 0x344E6,
- 0x742DC,
- 0x485E6,
- 0x110BA07,
- 0x1CD8DC,
- 0x1CD401,
- 0x8FEE6,
- 0x2DF5E6,
- 0x1E00EE6,
- 0xECB7A,
- 0x94D09,
- 0x1DEBE6,
- 0x1133C07,
- 0x1E4EFE6,
- 0x359DC,
- 0x1E010E6,
- 0x304E6,
- 0x5A8E6,
- 0x1CD6DC,
- 0xAAB3E6,
- 0x1B70E6,
- 0x6E8E6,
- 0xA92DDC,
- 0x8D9E6,
- 0x16B34E6,
- 0xF18DC,
- 0x30AE6,
- 0x20EDDC,
- 0x1E4ECE8,
- 0x1E2EFE6,
- 0x1D242E6,
- 0x354DC,
- 0x16AF101,
- 0x35BE6,
- 0x1DE3E6,
- 0x73EDC,
- 0x1E005E6,
- 0x115BF09,
- 0x1DC8E6,
- 0x484E6,
- 0x81CE6,
- 0x1E133E6,
- 0x5B812,
- 0x340E6,
- 0x598E6,
- 0x1BC9E01,
- 0x1DDCE6,
- 0x115C007,
- 0x8E3DC,
- 0x11C3F09,
- 0x10F85DC,
- 0x35CE9,
- 0x1CDBE6,
- 0x1D1ACE6,
- 0x1E8D1DC,
- 0x1AB5DC,
- 0xDCA09,
- 0x322CA,
- 0x10F4BDC,
- 0x1DC3E6,
- 0x35ADC,
- 0x7ECE6,
- 0x112EA09,
- 0xE4B6B,
- 0x7FDDC,
- 0x32EDC,
- 0x65BE6,
- 0xFE22E6,
- 0x1DD3E6,
- 0x89ADC,
- 0xA8E8E6,
- 0x8F9DC,
- 0x36FE6,
- 0x1B6DE6,
- 0x8CCE6,
- 0x1134D09,
- 0x193AE6,
- 0x309A08,
- 0xFE20E6,
- 0x1DE2E6,
- 0x1CEDDC,
- 0x10EFEDC,
- 0x1E013E6,
- 0x8D4E6,
- 0x34EDC,
- 0x16B35E6,
- 0x1037AE6,
- 0x1107F09,
- 0x8DDE6,
- 0x1DD1E6,
- 0x33801,
- 0xA67CE6,
- 0x1ACEE6,
- 0x1E08FE6,
- 0x1183A07,
- 0x1D244E6,
- 0x1E018E6,
- 0xACD09,
- 0x5A5DC,
- 0x64E1E,
- 0x1CE401,
- 0xF37DC,
- 0x745E6,
- 0xC3C07,
- 0x65222,
- 0x305E6,
- 0x33ADC,
- 0x1DF5E6,
- 0x1E017E6,
- 0x1CE801,
- 0x1193D09,
- 0x20D1E6,
- 0x318DC,
- 0x822E6,
- 0x116B707,
- 0x310E6,
- 0x821E6,
- 0x10378E6,
- 0x5A4DC,
- 0xF83E6,
- 0xAAC1E6,
- 0x1DD0CA,
- 0x1D185E6,
- 0x8D1DC,
- 0x5AFE6,
- 0x1DE5E6,
- 0x309908,
- 0x365E6,
- 0x951E6,
- 0x369E6,
- 0x748DC,
- 0xEC97A,
- 0x817E6,
- 0x6DAE6,
- 0x1E4EDE8,
- 0x1CE501,
- 0x737DC,
- 0x311E6,
- 0x6E3DC,
- 0x1BF309,
- 0x89BDC,
- 0x11101E6,
- 0x5C118,
- 0x2DE8E6,
- 0x614E6,
- 0xFE2EE6,
- 0x10379E6,
- 0x1DCFDC,
- 0x82CE6,
- 0x32FDC,
- 0x1B4409,
- 0x171509,
- 0x1ACBE6,
- 0x1B6CDC,
- 0xECA7A,
- 0x1E015E6,
- 0x20E601,
- 0xFE24E6,
- 0x1D243E6,
- 0x1E021E6,
- 0xE496B,
- 0x71124,
- 0x6DFE6,
- 0xA9B307,
- 0x65AE6,
- 0x1A7FDC,
- 0x8DAE6,
- 0x8E1E6,
- 0x11A9909,
- 0x1D180DC,
- 0xA8EFE6,
- 0x1DF4E6,
- 0x10377E6,
- 0x362E9,
- 0x594E6,
- 0x33501,
- 0x7F2DC,
- 0x1D18ADC,
- 0x1DCBE6,
- 0x5A9E6,
- 0x1CE601,
- 0x34DDC,
- 0xEC87A,
- 0x6D7E6,
- 0x108DDC,
- 0x5C4E6,
- 0x36AE6,
- 0x326DC,
- 0x1E00AE6,
- 0xA8E0E6,
- 0x5A7DC,
- 0x1DEAE6,
- 0x6D6E6,
- 0xA8E7E6,
- 0x30BE6,
- 0x16AF001,
- 0x1C3707,
- 0x302EE0,
- 0xE486B,
- 0x1DD8E6,
- 0x1AB8DC,
- 0x1A18DC,
- 0x2DF9E6,
- 0xFB1E1A,
- 0x363E6,
- 0x74AE6,
- 0x1E024E6,
- 0x599E6,
- 0x59EE6,
- 0x7F3E6,
- 0x1BF209,
- 0x818E6,
- 0xA8E9E6,
- 0x16B36E6,
- 0x10F50DC,
- 0x1DD4E6,
- 0xAAB2E6,
- 0xA8E5E6,
- 0x744DC,
- 0x10F82E6,
- 0x302DDE,
- 0x331DC,
- 0x1D188E6,
- 0x7EDE6,
- 0x1E006E6,
- 0xAAB8E6,
- 0x353DC,
- 0x1E016E6,
- 0x1DCADC,
- 0x73FE6,
- 0xF35DC,
- 0xA69EE6,
- 0x323DC,
- 0x8E5E6,
- 0x20ECDC,
- 0x1E2EEE6,
- 0x5AEE4,
- 0x11371E6,
- 0x1E029E6,
- 0x734DC,
- 0x1AB6DC,
- 0x20E7E6,
- 0x1D17DDC,
- 0x8FDE6,
- 0x9CD09,
- 0xF82E6,
- 0x1A7AE6,
- 0x654E6,
- 0x1E94A07,
+ 0x0034AE6, 0x00E3A09, 0x01DFADA, 0x00818E6, 0x0FE20E6, 0x0A67CE6, 0x020D201, 0x02DFEE6,
+ 0x008CCE6, 0x00737DC, 0x01DEBE6, 0x0FE26E6, 0x0089DE6, 0x01A7AE6, 0x006EADC, 0x0A675E6,
+ 0x02DF7E6, 0x0A8EBE6, 0x1193D09, 0x0064F1F, 0x00741E6, 0x10D6AE6, 0x0FE2DDC, 0x1E024E6,
+ 0x00322CA, 0x1E023E6, 0x01ACBE6, 0x005BB14, 0x00359DC, 0x008CEE6, 0x00F7484, 0x01B6DE6,
+ 0x0A8E6E6, 0x0030DE6, 0x00F7A82, 0x1117307, 0x00356DC, 0x00592E6, 0x0FE2BDC, 0x01DEEE6,
+ 0x00360EA, 0x1E947E6, 0x1133B07, 0x02CF1E6, 0x1E02AE6, 0x1D182DC, 0x01DE6E6, 0x10EFDDC,
+ 0x00736E6, 0x01DECE6, 0x008D6E6, 0x10D25E6, 0x008FDE6, 0x00744DC, 0x00ECA7A, 0x1136CE6,
+ 0x009BC07, 0x01AB9DC, 0x1D1ADE6, 0x008E4E6, 0x01A79E6, 0x10F4DDC, 0x00825E6, 0x0AABFE6,
+ 0x0AABEE6, 0x00953E6, 0x0A8E9E6, 0x008E3DC, 0x0064E1E, 0x006D6E6, 0x111CA07, 0x10D69E6,
+ 0x00364E6, 0x10A3ADC, 0x01DC4E6, 0x0103A09, 0x00349DC, 0x00358E8, 0x00487E6, 0x01AB1E6,
+ 0x0065020, 0x01CD0E6, 0x0FE28DC, 0x005B711, 0x020D5E6, 0x00819E6, 0x01C3707, 0x16AF301,
+ 0x01DCADC, 0x01BF309, 0x01DDAE6, 0x0035FE9, 0x01DDDE6, 0x10F82E6, 0x00361EA, 0x11D4509,
+ 0x00352E6, 0x01DF0E6, 0x0034CE6, 0x01CD7DC, 0x0033701, 0x1E2EDE6, 0x11373E6, 0x01B6EE6,
+ 0x020EA01, 0x10EABE6, 0x007EFE6, 0x0081DE6, 0x1D16801, 0x1E8D6DC, 0x01CD401, 0x00367E6,
+ 0x1D188E6, 0x01CE0E6, 0x008EAE6, 0x01CDAE6, 0x00735E6, 0x005C712, 0x00C4D09, 0x00323DC,
+ 0x00598E6, 0x10F4AE6, 0x01DDFE6, 0x020E8DC, 0x11D9709, 0x01DE1E6, 0x00316DC, 0x01A7CE6,
+ 0x1E945E6, 0x01DD9E6, 0x0085BDC, 0x00EC97A, 0x00D4D09, 0x02DF0E6, 0x0309908, 0x017D209,
+ 0x0A67AE6, 0x1D1AAE6, 0x005B40E, 0x01DE3E6, 0x111C009, 0x1D1ACE6, 0x00357E6, 0x119E009,
+ 0x0030BE6, 0x0033EE6, 0x01CE301, 0x01CF8E6, 0x00F8409, 0x01DCBE6, 0x00317DC, 0x00483E6,
+ 0x10F4BDC, 0x00326DC, 0x01CD2E6, 0x020D0E6, 0x005C4E6, 0x01AB0E6, 0x0089ADC, 0x0081CE6,
+ 0x01DE4E6, 0x1144607, 0x115C007, 0x1183A07, 0x10F49E6, 0x00659E6, 0x01B6FE6, 0x0032DDC,
+ 0x00EB876, 0x1BC9E01, 0x00734DC, 0x1136AE6, 0x0032EDC, 0x020E501, 0x008FBE6, 0x02D7F09,
+ 0x1E944E6, 0x1E018E6, 0x01DEFE6, 0x1E949E6, 0x02DEEE6, 0x0135FE6, 0x00309E6, 0x01AC2E6,
+ 0x00485E6, 0x01DF8E4, 0x00F86E6, 0x00613E6, 0x008D9E6, 0x01CDDDC, 0x1104609, 0x00304E6,
+ 0x008E6DC, 0x0081EE6, 0x01DF6E8, 0x0093C07, 0x0A8ECE6, 0x1D1ABE6, 0x006ECE6, 0x0064C1C,
+ 0x008F5E6, 0x1D244E6, 0x1E014E6, 0x00FC6DC, 0x0A8E1E6, 0x005AADC, 0x00658E6, 0x1E020E6,
+ 0x008D4E6, 0x1133C07, 0x00302E6, 0x01AC4DC, 0x01DC6E6, 0x01AB4E6, 0x1D170D8, 0x0135EE6,
+ 0x0059EE6, 0x008FFE6, 0x00739DC, 0x10AE5E6, 0x1E8D2DC, 0x1107009, 0x00308E6, 0x02CF0E6,
+ 0x01DF3E6, 0x0A67DE6, 0x01DCED6, 0x0033ADC, 0x1D166D8, 0x00733E6, 0x11F4109, 0x0036BE6,
+ 0x01CDEDC, 0x1E012E6, 0x0108DDC, 0x00611E6, 0x00ABC07, 0x01CEDDC, 0x1E026E6, 0x00343E6,
+ 0x020D901, 0x1E948E6, 0x116B707, 0x00746DC, 0x01DE8E6, 0x020D7E6, 0x02DEFE6, 0x00355DC,
+ 0x01A77E6, 0x00E3867, 0x0FE24E6, 0x1113309, 0x11369E6, 0x02DF4E6, 0x10EFFDC, 0x006EDDC,
+ 0x0FE29DC, 0x0031EDC, 0x01DFCE9, 0x00F35DC, 0x1E4EEDC, 0x10D6DE6, 0x1D171D8, 0x11A9909,
+ 0x00303E6, 0x10377E6, 0x1E015E6, 0x00313E6, 0x00332DC, 0x11368E6, 0x10D6CE6, 0x0A92DDC,
+ 0x006E1E6, 0x00362E9, 0x00596DC, 0x0067023, 0x10F4FDC, 0x1123509, 0x01DC3E6, 0x10A0FE6,
+ 0x02DF8E6, 0x0A8E4E6, 0x0032CDC, 0x00D3B09, 0x1D165D8, 0x0171409, 0x01CE601, 0x01ABBE6,
+ 0x008DAE6, 0x00B3C07, 0x008F11C, 0x10AE6DC, 0x1E8D5DC, 0x00745E6, 0x01AC0DC, 0x020EEDC,
+ 0x01CDFDC, 0x02DF9E6, 0x01AC5E6, 0x00597E6, 0x0302BE4, 0x00897E6, 0x1144209, 0x006DBE6,
+ 0x0A80609, 0x113CE09, 0x0035DEA, 0x0FE2FE6, 0x00CBC07, 0x01DC7E6, 0x006E7E6, 0x00321CA,
+ 0x00369E6, 0x00F7C82, 0x0031AE8, 0x02DF1E6, 0x008E8E6, 0x16AF201, 0x00740E6, 0x01DFDDC,
+ 0x1E5EEE6, 0x11D4207, 0x01ABADC, 0x0A8E2E6, 0x112E907, 0x1D16901, 0x1E010E6, 0x1E000E6,
+ 0x005B00A, 0x005C5DC, 0x0302FE0, 0x01A78E6, 0x1113409, 0x1E006E6, 0x01DE9E6, 0x008CFDC,
+ 0x01DCCE6, 0x00F7D82, 0x006DCE6, 0x0173409, 0x0103909, 0x01BE607, 0x00731DC, 0x00312E6,
+ 0x1E8D4DC, 0x00829E6, 0x008FADC, 0x1E029E6, 0x00823E6, 0x0030CE6, 0x01AB6DC, 0x1E135E6,
+ 0x01DC8E6, 0x01DEDE6, 0x0035ADC, 0x00732E6, 0x0A8EDE6, 0x0AAB3E6, 0x1E028E6, 0x008F6DC,
+ 0x008E7E6, 0x1E4ECE8, 0x0073CDC, 0x01DF7E4, 0x005ACE6, 0x020EFDC, 0x01CF4E6, 0x00368E6,
+ 0x1E01CE6, 0x1D18ADC, 0x0FE21E6, 0x01DDCE6, 0x020D4E6, 0x0059BDC, 0x16B32E6, 0x0035BE6,
+ 0x008D2DC, 0x0031BD8, 0x0A677E6, 0x1E003E6, 0x00DCA09, 0x0031DDC, 0x10F4CE6, 0x00F19DC,
+ 0x01DFFDC, 0x0135DE6, 0x0030FE6, 0x02DE5E6, 0x0033801, 0x01ACEE6, 0x00743E6, 0x0193AE6,
+ 0x10A3F09, 0x00CCD09, 0x01B71E6, 0x00954E6, 0x0089CE6, 0x020E601, 0x008F01B, 0x00657E6,
+ 0x0FE23E6, 0x00311E6, 0x10EACE6, 0x020D301, 0x0064B1B, 0x020DBE6, 0x008DEE6, 0x0065DE6,
+ 0x1E009E6, 0x0A674E6, 0x008CDE6, 0x01CE701, 0x008F21D, 0x0089EE6, 0x01DD1E6, 0x00324DC,
+ 0x10A38E6, 0x01CD1E6, 0x01CD5DC, 0x1E132E6, 0x00EC87A, 0x01DCDEA, 0x0FE25E6, 0x0061A20,
+ 0x00301E6, 0x005A1E6, 0x008F8E6, 0x1D186E6, 0x00305E6, 0x16B30E6, 0x01DF4E6, 0x00730E6,
+ 0x00821E6, 0x007F1E6, 0x114C307, 0x0033DE6, 0x01DC2DC, 0x00615E6, 0x006E3DC, 0x01A17E6,
+ 0x0089FE6, 0x0AAB0E6, 0x01DD5E6, 0x1E01FE6, 0x0082AE6, 0x00325DC, 0x11374E6, 0x10376E6,
+ 0x0081BE6, 0x02DFFE6, 0x1D16FD8, 0x00484E6, 0x00318DC, 0x1E8D0DC, 0x005A6DC, 0x1193E09,
+ 0x00F39D8, 0x1E00CE6, 0x00591DC, 0x1D187E6, 0x01B6CDC, 0x01DD0CA, 0x006D8E6, 0x01B3407,
+ 0x02DEAE6, 0x1163F09, 0x008DDE6, 0x00F87E6, 0x02DE3E6, 0x00300E6, 0x0A6F1E6, 0x02DF2E6,
+ 0x005A7DC, 0x01DF2E6, 0x00820E6, 0x00365E6, 0x1D17BDC, 0x01AB7DC, 0x1D16ED8, 0x0034DDC,
+ 0x1E2EEE6, 0x0ABED09, 0x0AAB7E6, 0x0A8EFE6, 0x00614E6, 0x11C3F09, 0x102E0DC, 0x00ACD09,
+ 0x0171509, 0x01AC6E6, 0x005B610, 0x11A3409, 0x0035EEA, 0x00310E6, 0x16AF401, 0x1E01EE6,
+ 0x0032ADC, 0x0AAB2E6, 0x0A9C009, 0x00366E6, 0x005B50F, 0x009FEE6, 0x006DFE6, 0x0FE22E6,
+ 0x1E8D3DC, 0x00340E6, 0x01DD8E6, 0x10F48E6, 0x02DFAE6, 0x1D17CDC, 0x0A678E6, 0x00826E6,
+ 0x0A82C09, 0x01DE0E6, 0x0A8E0E6, 0x10F83DC, 0x0302DDE, 0x01DF5E6, 0x01B73E6, 0x1E00FE6,
+ 0x1D16701, 0x01A6009, 0x02DE1E6, 0x0036CE6, 0x006EBE6, 0x00C565B, 0x01DE7E6, 0x00B4D09,
+ 0x1E00DE6, 0x02DFDE6, 0x008F7E6, 0x00655DC, 0x0A67BE6, 0x00333DC, 0x005C118, 0x11366E6,
+ 0x1D16DE2, 0x006181E, 0x0033FE6, 0x1E946E6, 0x0FE27DC, 0x007F0E6, 0x1E002E6, 0x114C209,
+ 0x1E01DE6, 0x0A95309, 0x16B33E6, 0x1E01BE6, 0x01CE201, 0x01ACDE6, 0x00610E6, 0x0FE2CDC,
+ 0x0A676E6, 0x16AF001, 0x020D6E6, 0x1D17FDC, 0x1D181DC, 0x005B913, 0x00827E6, 0x008D3DC,
+ 0x115BF09, 0x005A0E6, 0x0065222, 0x008DFE6, 0x00653E6, 0x01CE401, 0x113CF09, 0x01A76E6,
+ 0x006E2E6, 0x110B909, 0x10F46DC, 0x11A4709, 0x11370E6, 0x01CF9E6, 0x0065EE6, 0x00616E6,
+ 0x02DFBE6, 0x1136BE6, 0x00656DC, 0x00348DC, 0x10D26E6, 0x01DD6E6, 0x008FCE6, 0x1145EE6,
+ 0x00654E6, 0x008ECE6, 0x008CAE6, 0x020F0E6, 0x01DD7E6, 0x0030AE6, 0x00328CA, 0x00314E6,
+ 0x0085ADC, 0x0034BE6, 0x1D189E6, 0x1E00AE6, 0x008DBE6, 0x10F4EDC, 0x005B812, 0x00320DC,
+ 0x01DDEE6, 0x01B6BE6, 0x01AC3DC, 0x0033BDC, 0x01ACCE6, 0x005B30D, 0x0073FE6, 0x01AC1E6,
+ 0x0302CE8, 0x01CD6DC, 0x00F37DC, 0x01DC1E6, 0x01DFEE6, 0x018A9E4, 0x020EB01, 0x008EFDC,
+ 0x00347DC, 0x1123607, 0x00486E6, 0x00749E6, 0x017DDE6, 0x11102E6, 0x00617E6, 0x00D3C09,
+ 0x0A8EAE6, 0x008EDDC, 0x00351E6, 0x00A3C07, 0x1E2ECE6, 0x116B609, 0x1E011E6, 0x020E1E6,
+ 0x10D6BE6, 0x005C219, 0x01A7BE6, 0x007EEE6, 0x0036EE6, 0x008F9DC, 0x01DEAE6, 0x00BCD09,
+ 0x005B10B, 0x01AB3E6, 0x11372E6, 0x008D7E6, 0x1D17EDC, 0x0A8EEE6, 0x008DCE6, 0x16B31E6,
+ 0x02DE7E6, 0x0065121, 0x006E4E6, 0x0059CE6, 0x00342E6, 0x0AAB4DC, 0x00595E6, 0x16B36E6,
+ 0x0030EE6, 0x0033501, 0x0036FE6, 0x00816E6, 0x0302EE0, 0x00353DC, 0x0031CDC, 0x00315E8,
+ 0x01B72E6, 0x005A2DC, 0x02DF6E6, 0x008EEDC, 0x0082DE6, 0x01CD8DC, 0x005BA13, 0x01AC7E6,
+ 0x01AB2E6, 0x0033CDC, 0x01939DE, 0x0103707, 0x0A8F1E6, 0x00612E6, 0x10F84E6, 0x0073BDC,
+ 0x1E008E6, 0x007EDE6, 0x020EDDC, 0x00E4A6B, 0x16FF106, 0x110BA07, 0x00346E6, 0x008FEE6,
+ 0x00331DC, 0x00C3C07, 0x1E00EE6, 0x00ECB7A, 0x005ABE6, 0x16AF101, 0x01ABCE6, 0x0081FE6,
+ 0x01BAA09, 0x10D24E6, 0x0A92CDC, 0x005A8E6, 0x1037AE6, 0x0059DE6, 0x01B70E6, 0x006E8E6,
+ 0x00F7181, 0x02DE4E6, 0x16B34E6, 0x02DEDE6, 0x00A4D09, 0x0A92BDC, 0x0082CE6, 0x1E2EFE6,
+ 0x1D242E6, 0x00354DC, 0x0032BDC, 0x0193BDC, 0x008D1DC, 0x0073EDC, 0x1E005E6, 0x00319DC,
+ 0x02DEBE6, 0x0073AE6, 0x01AC8E6, 0x00F82E6, 0x1E133E6, 0x1D180DC, 0x0033601, 0x00EBA09,
+ 0x0AAF609, 0x02DF5E6, 0x00307E6, 0x01DC0E6, 0x10F85DC, 0x0032FDC, 0x0035CE9, 0x01CDBE6,
+ 0x00330DC, 0x01AB5DC, 0x01DDBE6, 0x02DE9E6, 0x00F7282, 0x1E131E6, 0x00363E6, 0x16FF006,
+ 0x007ECE6, 0x112EA09, 0x10378E6, 0x007FDDC, 0x0302ADA, 0x0065BE6, 0x006191F, 0x00F18DC,
+ 0x1172B09, 0x00952DC, 0x00F83E6, 0x00898E6, 0x00899DC, 0x10A3901, 0x1134D09, 0x01DF1E6,
+ 0x0309A08, 0x00747E6, 0x01DE2E6, 0x1E8D1DC, 0x10EFEDC, 0x1E013E6, 0x0034EDC, 0x005B20C,
+ 0x16B35E6, 0x00859DC, 0x1107F09, 0x00738DC, 0x005A3DC, 0x11367E6, 0x01ACADC, 0x01A7FDC,
+ 0x1E08FE6, 0x11100E6, 0x0065AE6, 0x11D4409, 0x01DCFDC, 0x0065CDC, 0x01DD3E6, 0x005AEE4,
+ 0x1E016E6, 0x008EBE6, 0x0031FDC, 0x00EB976, 0x1E004E6, 0x0033401, 0x0074AE6, 0x01DF9DC,
+ 0x01CE801, 0x0064D1D, 0x020D1E6, 0x0A8E5E6, 0x1D243E6, 0x0094D09, 0x00E4B6B, 0x007F3E6,
+ 0x005ADDE, 0x005A4DC, 0x008F4E6, 0x11F4209, 0x0AAC1E6, 0x1D185E6, 0x02DECE6, 0x0A8F0E6,
+ 0x01DE5E6, 0x00306E6, 0x0A8E3E6, 0x00951E6, 0x11101E6, 0x02DE8E6, 0x00748DC, 0x0A8E8E6,
+ 0x1E4EDE8, 0x006DAE6, 0x01CE501, 0x0AAB8E6, 0x10A0DDC, 0x00822E6, 0x00327CA, 0x1612F09,
+ 0x1E017E6, 0x00339DC, 0x02DE6E6, 0x020E7E6, 0x00345F0, 0x0FE2EE6, 0x10379E6, 0x0071124,
+ 0x101FDDC, 0x0082BE6, 0x01B4409, 0x00329DC, 0x00350E6, 0x005AFE6, 0x02DFCE6, 0x008D8E6,
+ 0x00C5554, 0x00817E6, 0x1E021E6, 0x01AC9E6, 0x00593E6, 0x01DD2E6, 0x0A9B307, 0x01DC9E6,
+ 0x00341E6, 0x008D0DC, 0x0A6F0E6, 0x008E0E6, 0x01A75E6, 0x01DC5E6, 0x0059FE6, 0x01ABDDC,
+ 0x01ABFDC, 0x1E5EFDC, 0x00594E6, 0x005A5DC, 0x007F2DC, 0x01BAB09, 0x01BF209, 0x1E4EFE6,
+ 0x005A9E6, 0x008F3E6, 0x1E00BE6, 0x1D172D8, 0x006D7E6, 0x006D9E6, 0x0036AE6, 0x01CD9DC,
+ 0x10F47DC, 0x0A69FE6, 0x005BC15, 0x008E1E6, 0x1E134E6, 0x0065FDC, 0x0A8E7E6, 0x1E001E6,
+ 0x1E027E6, 0x1E2AEE6, 0x01DFBE6, 0x00E486B, 0x01AB8DC, 0x01A18DC, 0x020D801, 0x0FB1E1A,
+ 0x0A66FE6, 0x02DE2E6, 0x02DF3E6, 0x00599E6, 0x1183909, 0x113D009, 0x00E3967, 0x0059ADE,
+ 0x10D27E6, 0x0073DE6, 0x10F50DC, 0x008CBE6, 0x01DD4E6, 0x02CEFE6, 0x00742DC, 0x1D18BDC,
+ 0x008D5E6, 0x01CDCDC, 0x02DE0E6, 0x0089BDC, 0x0A679E6, 0x020E9E6, 0x008E9DC, 0x1E130E6,
+ 0x020DA01, 0x020DCE6, 0x1194307, 0x006E0E6, 0x0A69EE6, 0x008E5E6, 0x1E136E6, 0x020ECDC,
+ 0x00E496B, 0x0036DE6, 0x11371E6, 0x005BF17, 0x0A8C409, 0x007EBE6, 0x0FE2ADC, 0x1D17DDC,
+ 0x009CD09, 0x005BD16, 0x00F8082, 0x00344E6, 0x00F7B82, 0x1E94A07,
];
-
pub(crate) const COMPOSITION_TABLE_SALT: &[u16] = &[
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x25d,
- 0x3,
- 0x5d,
- 0x0,
- 0x2,
- 0x9,
- 0x4,
- 0x87,
- 0x6,
- 0x135,
- 0x1,
- 0x0,
- 0x0,
- 0x4,
- 0x3,
- 0xe1,
- 0x78,
- 0x0,
- 0x2,
- 0x29,
- 0x8,
- 0x8f,
- 0x24,
- 0x0,
- 0x0,
- 0x0,
- 0x31,
- 0x0,
- 0x0,
- 0x6d,
- 0x0,
- 0x33,
- 0x1,
- 0x4c,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x8,
- 0x7c,
- 0x6,
- 0x4c,
- 0x45,
- 0x2a,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0xa,
- 0x0,
- 0x0,
- 0x59,
- 0x0,
- 0x10,
- 0x3,
- 0x9,
- 0xe,
- 0x6,
- 0x1,
- 0xc,
- 0x10,
- 0x0,
- 0x0,
- 0x0,
- 0x3d,
- 0x0,
- 0x0,
- 0x2a,
- 0x0,
- 0x0,
- 0x1,
- 0x20,
- 0xa,
- 0x0,
- 0x1,
- 0xe,
- 0x2,
- 0x10,
- 0x22,
- 0x0,
- 0x61,
- 0x0,
- 0x4,
- 0x15,
- 0x0,
- 0x4,
- 0x3,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0xd,
- 0x1,
- 0x1,
- 0x24,
- 0x3,
- 0x4,
- 0x0,
- 0x0,
- 0x18,
- 0x58,
- 0x0,
- 0x0,
- 0xa,
- 0x19,
- 0x10,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x12,
- 0x15,
- 0x0,
- 0xc,
- 0x7,
- 0x3,
- 0x0,
- 0x1a,
- 0x7,
- 0xc,
- 0x1,
- 0x5,
- 0x4,
- 0x21,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0xa,
- 0x0,
- 0xa,
- 0x0,
- 0x4,
- 0x9,
- 0x5,
- 0xd,
- 0x5,
- 0x0,
- 0x3,
- 0x6,
- 0x26,
- 0xb,
- 0x0,
- 0x4,
- 0x6,
- 0x0,
- 0x13,
- 0x0,
- 0x0,
- 0x4,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x24,
- 0x1,
- 0x1d,
- 0x1,
- 0x0,
- 0x0,
- 0x10,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0xa,
- 0x0,
- 0xd,
- 0x0,
- 0x10,
- 0x0,
- 0x6,
- 0x5,
- 0x0,
- 0x0,
- 0x9,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x16,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x6,
- 0x1,
- 0x25,
- 0x5,
- 0x0,
- 0xa,
- 0xd,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x12,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x4,
- 0x9,
- 0x0,
- 0x1,
- 0x4,
- 0x0,
- 0x4,
- 0x1,
- 0x6,
- 0xb,
- 0x3,
- 0x6,
- 0x7,
- 0x0,
- 0x0,
- 0x0,
- 0xd,
- 0xf,
- 0xe,
- 0x0,
- 0x1,
- 0x1,
- 0x4,
- 0xf,
- 0x10,
- 0x0,
- 0x5,
- 0x0,
- 0x19,
- 0x1,
- 0xe,
- 0x0,
- 0x8,
- 0x1,
- 0x3,
- 0x0,
- 0x0,
- 0x5,
- 0x1,
- 0x0,
- 0x0,
- 0x11,
- 0x0,
- 0x4,
- 0x5,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x1,
- 0x5,
- 0x8,
- 0x0,
- 0x0,
- 0xc,
- 0xa,
- 0x0,
- 0x6,
- 0x9,
- 0x3,
- 0x1,
- 0x6,
- 0x1,
- 0x0,
- 0x1b,
- 0x1,
- 0xe,
- 0x0,
- 0x8,
- 0x5,
- 0x3,
- 0x15,
- 0x0,
- 0x2,
- 0x7,
- 0xb,
- 0x3,
- 0x0,
- 0xa,
- 0x3,
- 0x0,
- 0x6,
- 0x0,
- 0xa,
- 0x0,
- 0x1,
- 0x3,
- 0x8,
- 0x0,
- 0x9,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x5,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x17,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x5,
- 0x16,
- 0x0,
- 0x10,
- 0x3,
- 0x4,
- 0x11,
- 0x1,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x1,
- 0x0,
- 0x5,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x2,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x12,
- 0x1,
- 0x4,
- 0xa,
- 0xb,
- 0x4,
- 0x0,
- 0x2,
- 0x0,
- 0x3,
- 0x0,
- 0x4,
- 0x5,
- 0x0,
- 0x0,
- 0x11,
- 0x1,
- 0x6,
- 0x6,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x7,
- 0x0,
- 0x3,
- 0xa,
- 0x0,
- 0x1,
- 0xa,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0xd,
- 0x5,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x5,
- 0x6,
- 0x8,
- 0x4,
- 0x5,
- 0x0,
- 0xb,
- 0x0,
- 0x4,
- 0xb,
- 0x0,
- 0x0,
- 0x1,
- 0x5,
- 0x0,
- 0xb,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x4,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0x7,
- 0x13,
- 0x4,
- 0x19,
- 0x3,
- 0x1,
- 0x0,
- 0x1,
- 0x6,
- 0x6,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0xc,
- 0x2,
- 0x3,
- 0x0,
- 0x4,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x5,
- 0x1,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x9,
- 0x0,
- 0x0,
- 0x7,
- 0x1,
- 0x9,
- 0x6,
- 0x4,
- 0x1,
- 0x5,
- 0x0,
- 0x1,
- 0x2,
- 0x8,
- 0x0,
- 0x9,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0xb,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x2,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x1,
- 0x0,
- 0x6,
- 0x2,
- 0x5,
- 0x8,
- 0x12,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x3,
- 0x3,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x4,
- 0xd,
- 0x0,
- 0x0,
- 0xb,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0xc,
- 0x0,
- 0x0,
- 0x0,
- 0x5,
- 0x8,
- 0x2,
- 0x0,
- 0x2,
- 0x1,
- 0x6,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x5,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0xe,
- 0x10,
- 0x0,
- 0x5,
- 0x4,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x4,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x1,
- 0x3,
- 0x1,
- 0x5,
- 0x2,
- 0x3,
- 0x4,
- 0x0,
- 0x3,
- 0x3,
- 0x6,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0xe,
- 0x1,
- 0x2,
- 0x1,
- 0x4,
- 0x2,
- 0x5,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x5,
- 0x5,
- 0x6,
- 0x6,
- 0x5,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x2,
- 0x4,
- 0x1,
- 0x0,
- 0x5,
- 0x0,
- 0x6,
- 0x2,
- 0x8,
- 0x0,
- 0x0,
- 0x7,
- 0x1,
- 0x2,
- 0x2,
- 0x5,
- 0x4,
- 0x11,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x4,
- 0x0,
- 0x3,
- 0x2,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0xb,
- 0x6,
- 0x0,
- 0x6,
- 0x0,
- 0x4,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x2,
- 0x0,
- 0x5,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x2,
- 0x6,
- 0x0,
- 0x0,
- 0x2,
- 0x4,
- 0x6,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0xc,
- 0xc,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x4,
- 0x0,
- 0x8,
- 0x3,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x5,
- 0x0,
- 0x5,
- 0x1,
- 0x0,
- 0x3,
- 0x4,
- 0x1,
- 0x2,
- 0x3,
- 0x0,
- 0x1,
- 0x7,
- 0x0,
- 0x0,
- 0x7,
- 0x0,
- 0x2,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x1,
- 0xb,
- 0x0,
- 0x4,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x1,
- 0x5,
- 0x0,
- 0x0,
- 0x3,
- 0x6,
- 0x0,
- 0x0,
- 0x4,
- 0x2,
- 0x1,
- 0x3,
- 0x3,
- 0xa,
- 0x7,
- 0x0,
- 0x4,
- 0x1,
- 0x6,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x1,
- 0x1,
- 0x4,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x4,
- 0x0,
- 0x1,
- 0x0,
- 0x6,
- 0x0,
- 0x1,
- 0x0,
- 0x4,
- 0x0,
- 0x1,
- 0x2,
- 0x6,
- 0x0,
- 0x2,
- 0x0,
- 0x3,
- 0x7,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x5,
- 0x2,
- 0x0,
- 0x1,
- 0x1,
- 0x2,
- 0x2,
- 0x4,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x3,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x4,
- 0x2,
- 0x0,
- 0x1,
- 0x5,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x5,
- 0x2,
- 0x0,
- 0x8,
- 0x3,
- 0x1,
- 0x1,
- 0x1,
- 0x3,
- 0x4,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x2,
- 0x2,
- 0x0,
- 0x1,
- 0x3,
- 0x1,
- 0x3,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x3,
- 0x1,
- 0x2,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x2,
- 0x4,
- 0x0,
- 0x5,
- 0x5,
- 0x0,
- 0x5,
- 0x2,
- 0x0,
- 0x1,
- 0x3,
- 0x1,
- 0x0,
- 0x2,
- 0x6,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
+ 0x000, 0x000, 0x000, 0x000, 0x25D, 0x003, 0x05D, 0x000, 0x002, 0x009, 0x004, 0x087, 0x006,
+ 0x135, 0x001, 0x000, 0x000, 0x004, 0x003, 0x0E1, 0x078, 0x000, 0x002, 0x029, 0x008, 0x08F,
+ 0x024, 0x000, 0x000, 0x000, 0x031, 0x000, 0x000, 0x06D, 0x000, 0x033, 0x001, 0x04C, 0x000,
+ 0x001, 0x000, 0x000, 0x008, 0x07C, 0x006, 0x04C, 0x045, 0x02A, 0x002, 0x000, 0x000, 0x000,
+ 0x00A, 0x000, 0x000, 0x059, 0x000, 0x010, 0x003, 0x009, 0x00E, 0x006, 0x001, 0x00C, 0x010,
+ 0x000, 0x000, 0x000, 0x03D, 0x000, 0x000, 0x02A, 0x000, 0x000, 0x001, 0x020, 0x00A, 0x000,
+ 0x001, 0x00E, 0x002, 0x010, 0x022, 0x000, 0x061, 0x000, 0x004, 0x015, 0x000, 0x004, 0x003,
+ 0x000, 0x000, 0x003, 0x000, 0x00D, 0x001, 0x001, 0x024, 0x003, 0x004, 0x000, 0x000, 0x018,
+ 0x058, 0x000, 0x000, 0x00A, 0x019, 0x010, 0x000, 0x002, 0x000, 0x000, 0x012, 0x015, 0x000,
+ 0x00C, 0x007, 0x003, 0x000, 0x01A, 0x007, 0x00C, 0x001, 0x005, 0x004, 0x021, 0x001, 0x002,
+ 0x000, 0x000, 0x001, 0x00A, 0x000, 0x00A, 0x000, 0x004, 0x009, 0x005, 0x00D, 0x005, 0x000,
+ 0x003, 0x006, 0x026, 0x00B, 0x000, 0x004, 0x006, 0x000, 0x013, 0x000, 0x000, 0x004, 0x001,
+ 0x000, 0x000, 0x000, 0x024, 0x001, 0x01D, 0x001, 0x000, 0x000, 0x010, 0x000, 0x001, 0x001,
+ 0x001, 0x000, 0x000, 0x00A, 0x000, 0x00D, 0x000, 0x010, 0x000, 0x006, 0x005, 0x000, 0x000,
+ 0x009, 0x003, 0x001, 0x000, 0x000, 0x000, 0x000, 0x002, 0x001, 0x002, 0x000, 0x000, 0x016,
+ 0x001, 0x002, 0x000, 0x001, 0x000, 0x006, 0x001, 0x025, 0x005, 0x000, 0x00A, 0x00D, 0x002,
+ 0x000, 0x001, 0x000, 0x000, 0x012, 0x000, 0x000, 0x001, 0x000, 0x001, 0x000, 0x001, 0x000,
+ 0x004, 0x009, 0x000, 0x001, 0x004, 0x000, 0x004, 0x001, 0x006, 0x00B, 0x003, 0x006, 0x007,
+ 0x000, 0x000, 0x000, 0x00D, 0x00F, 0x00E, 0x000, 0x001, 0x001, 0x004, 0x00F, 0x010, 0x000,
+ 0x005, 0x000, 0x019, 0x001, 0x00E, 0x000, 0x008, 0x001, 0x003, 0x000, 0x000, 0x005, 0x001,
+ 0x000, 0x000, 0x011, 0x000, 0x004, 0x005, 0x000, 0x001, 0x000, 0x000, 0x000, 0x000, 0x002,
+ 0x001, 0x000, 0x000, 0x002, 0x001, 0x001, 0x005, 0x008, 0x000, 0x000, 0x00C, 0x00A, 0x000,
+ 0x006, 0x009, 0x003, 0x001, 0x006, 0x001, 0x000, 0x01B, 0x001, 0x00E, 0x000, 0x008, 0x005,
+ 0x003, 0x015, 0x000, 0x002, 0x007, 0x00B, 0x003, 0x000, 0x00A, 0x003, 0x000, 0x006, 0x000,
+ 0x00A, 0x000, 0x001, 0x003, 0x008, 0x000, 0x009, 0x000, 0x001, 0x002, 0x000, 0x005, 0x000,
+ 0x001, 0x000, 0x000, 0x000, 0x017, 0x000, 0x000, 0x002, 0x000, 0x005, 0x016, 0x000, 0x010,
+ 0x003, 0x004, 0x011, 0x001, 0x003, 0x000, 0x000, 0x000, 0x004, 0x001, 0x000, 0x005, 0x000,
+ 0x002, 0x001, 0x000, 0x002, 0x000, 0x002, 0x002, 0x000, 0x000, 0x000, 0x000, 0x002, 0x000,
+ 0x012, 0x001, 0x004, 0x00A, 0x00B, 0x004, 0x000, 0x002, 0x000, 0x003, 0x000, 0x004, 0x005,
+ 0x000, 0x000, 0x011, 0x001, 0x006, 0x006, 0x000, 0x002, 0x000, 0x001, 0x000, 0x004, 0x000,
+ 0x000, 0x001, 0x001, 0x007, 0x000, 0x003, 0x00A, 0x000, 0x001, 0x00A, 0x002, 0x000, 0x001,
+ 0x000, 0x000, 0x00D, 0x005, 0x001, 0x001, 0x000, 0x000, 0x005, 0x006, 0x008, 0x004, 0x005,
+ 0x000, 0x00B, 0x000, 0x004, 0x00B, 0x000, 0x000, 0x001, 0x005, 0x000, 0x00B, 0x000, 0x006,
+ 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x004, 0x000, 0x006, 0x000, 0x000, 0x007, 0x013,
+ 0x004, 0x019, 0x003, 0x001, 0x000, 0x001, 0x006, 0x006, 0x000, 0x000, 0x000, 0x000, 0x00C,
+ 0x002, 0x003, 0x000, 0x004, 0x000, 0x001, 0x000, 0x001, 0x005, 0x001, 0x001, 0x002, 0x001,
+ 0x000, 0x000, 0x000, 0x000, 0x009, 0x000, 0x000, 0x007, 0x001, 0x009, 0x006, 0x004, 0x001,
+ 0x005, 0x000, 0x001, 0x002, 0x008, 0x000, 0x009, 0x000, 0x000, 0x001, 0x003, 0x00B, 0x000,
+ 0x001, 0x000, 0x000, 0x005, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003, 0x000, 0x002, 0x001,
+ 0x002, 0x000, 0x000, 0x000, 0x004, 0x001, 0x000, 0x006, 0x002, 0x005, 0x008, 0x012, 0x000,
+ 0x000, 0x000, 0x003, 0x001, 0x000, 0x000, 0x000, 0x002, 0x003, 0x003, 0x000, 0x000, 0x001,
+ 0x000, 0x001, 0x000, 0x003, 0x000, 0x000, 0x002, 0x001, 0x004, 0x00D, 0x000, 0x000, 0x00B,
+ 0x000, 0x001, 0x000, 0x000, 0x00C, 0x000, 0x000, 0x000, 0x005, 0x008, 0x002, 0x000, 0x002,
+ 0x001, 0x006, 0x001, 0x001, 0x001, 0x000, 0x002, 0x000, 0x005, 0x001, 0x001, 0x000, 0x002,
+ 0x000, 0x000, 0x000, 0x000, 0x00E, 0x010, 0x000, 0x005, 0x004, 0x002, 0x001, 0x000, 0x000,
+ 0x003, 0x001, 0x000, 0x002, 0x001, 0x004, 0x000, 0x000, 0x003, 0x000, 0x001, 0x001, 0x003,
+ 0x001, 0x005, 0x002, 0x003, 0x004, 0x000, 0x003, 0x003, 0x006, 0x000, 0x000, 0x001, 0x000,
+ 0x002, 0x00E, 0x001, 0x002, 0x001, 0x004, 0x002, 0x005, 0x002, 0x001, 0x001, 0x000, 0x001,
+ 0x000, 0x005, 0x005, 0x006, 0x006, 0x005, 0x000, 0x002, 0x001, 0x000, 0x002, 0x004, 0x001,
+ 0x000, 0x005, 0x000, 0x006, 0x002, 0x008, 0x000, 0x000, 0x007, 0x001, 0x002, 0x002, 0x005,
+ 0x004, 0x011, 0x000, 0x003, 0x000, 0x001, 0x000, 0x001, 0x004, 0x000, 0x003, 0x002, 0x000,
+ 0x001, 0x003, 0x000, 0x00B, 0x006, 0x000, 0x006, 0x000, 0x004, 0x001, 0x002, 0x000, 0x001,
+ 0x000, 0x002, 0x001, 0x002, 0x000, 0x005, 0x001, 0x000, 0x000, 0x000, 0x001, 0x003, 0x002,
+ 0x006, 0x000, 0x000, 0x002, 0x004, 0x006, 0x000, 0x000, 0x000, 0x000, 0x00C, 0x00C, 0x000,
+ 0x000, 0x000, 0x004, 0x004, 0x000, 0x008, 0x003, 0x001, 0x000, 0x001, 0x000, 0x003, 0x000,
+ 0x000, 0x005, 0x000, 0x005, 0x001, 0x000, 0x003, 0x004, 0x001, 0x002, 0x003, 0x000, 0x001,
+ 0x007, 0x000, 0x000, 0x007, 0x000, 0x002, 0x002, 0x000, 0x000, 0x001, 0x001, 0x001, 0x001,
+ 0x00B, 0x000, 0x004, 0x000, 0x001, 0x001, 0x000, 0x002, 0x001, 0x001, 0x005, 0x000, 0x000,
+ 0x003, 0x006, 0x000, 0x000, 0x004, 0x002, 0x001, 0x003, 0x003, 0x00A, 0x007, 0x000, 0x004,
+ 0x001, 0x006, 0x000, 0x001, 0x000, 0x000, 0x002, 0x001, 0x001, 0x000, 0x000, 0x000, 0x000,
+ 0x000, 0x002, 0x001, 0x001, 0x001, 0x004, 0x000, 0x003, 0x000, 0x001, 0x000, 0x000, 0x001,
+ 0x000, 0x001, 0x000, 0x004, 0x000, 0x001, 0x000, 0x006, 0x000, 0x001, 0x000, 0x004, 0x000,
+ 0x001, 0x002, 0x006, 0x000, 0x002, 0x000, 0x003, 0x007, 0x000, 0x003, 0x000, 0x001, 0x001,
+ 0x000, 0x000, 0x003, 0x005, 0x002, 0x000, 0x001, 0x001, 0x002, 0x002, 0x004, 0x001, 0x000,
+ 0x000, 0x001, 0x000, 0x003, 0x002, 0x000, 0x001, 0x000, 0x002, 0x004, 0x002, 0x000, 0x001,
+ 0x005, 0x000, 0x000, 0x002, 0x001, 0x001, 0x000, 0x000, 0x001, 0x000, 0x005, 0x002, 0x000,
+ 0x008, 0x003, 0x001, 0x001, 0x001, 0x003, 0x004, 0x000, 0x002, 0x000, 0x001, 0x002, 0x000,
+ 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x006, 0x000, 0x000, 0x000, 0x003, 0x000, 0x000,
+ 0x002, 0x002, 0x000, 0x001, 0x003, 0x001, 0x003, 0x001, 0x002, 0x000, 0x001, 0x002, 0x000,
+ 0x000, 0x001, 0x000, 0x003, 0x001, 0x002, 0x000, 0x002, 0x001, 0x000, 0x002, 0x004, 0x000,
+ 0x005, 0x005, 0x000, 0x005, 0x002, 0x000, 0x001, 0x003, 0x001, 0x000, 0x002, 0x006, 0x002,
+ 0x001, 0x000, 0x000, 0x000, 0x003,
];
pub(crate) const COMPOSITION_TABLE_KV: &[(u32, char)] = &[
- (0x64A0654, '\u{0626}'),
- (0x690309, '\u{1EC9}'),
- (0x650306, '\u{0115}'),
- (0x423030B, '\u{04F2}'),
- (0x47030C, '\u{01E6}'),
- (0x570301, '\u{1E82}'),
- (0xC50301, '\u{01FA}'),
- (0x21D20338, '\u{21CF}'),
- (0x430307, '\u{010A}'),
- (0x7A0307, '\u{017C}'),
- (0x49030C, '\u{01CF}'),
- (0x720307, '\u{1E59}'),
- (0x304B3099, '\u{304C}'),
- (0x1F610345, '\u{1FA1}'),
- (0x410307, '\u{0226}'),
- (0x6B0323, '\u{1E33}'),
- (0x3990304, '\u{1FD9}'),
- (0x1F490301, '\u{1F4D}'),
- (0x3CA0342, '\u{1FD7}'),
- (0x550304, '\u{016A}'),
- (0x30DB309A, '\u{30DD}'),
- (0x1F6E0345, '\u{1FAE}'),
- (0x420331, '\u{1E06}'),
- (0x41E0308, '\u{04E6}'),
- (0x410325, '\u{1E00}'),
- (0x520331, '\u{1E5E}'),
- (0x1FF60345, '\u{1FF7}'),
- (0x22720338, '\u{2274}'),
- (0x22480338, '\u{2249}'),
- (0x1FBF0301, '\u{1FCE}'),
- (0x30C63099, '\u{30C7}'),
- (0x760323, '\u{1E7F}'),
- (0x700307, '\u{1E57}'),
- (0x1F510301, '\u{1F55}'),
- (0x750328, '\u{0173}'),
- (0x305B3099, '\u{305C}'),
- (0x41030A, '\u{00C5}'),
- (0x1A10323, '\u{1EE3}'),
- (0x550311, '\u{0216}'),
- (0x530307, '\u{1E60}'),
- (0xDC030C, '\u{01D9}'),
- (0x4F0300, '\u{00D2}'),
- (0x6F0307, '\u{022F}'),
- (0x470301, '\u{01F4}'),
- (0x610309, '\u{1EA3}'),
- (0x1F080301, '\u{1F0C}'),
- (0x3B90301, '\u{03AF}'),
- (0x4330301, '\u{0453}'),
- (0x1F200345, '\u{1F90}'),
- (0x620307, '\u{1E03}'),
- (0x1F030345, '\u{1F83}'),
- (0x570308, '\u{1E84}'),
- (0x5A0307, '\u{017B}'),
- (0x30C13099, '\u{30C2}'),
- (0x1A10309, '\u{1EDF}'),
- (0x6270655, '\u{0625}'),
- (0x3BF0314, '\u{1F41}'),
- (0x670301, '\u{01F5}'),
- (0x39F0301, '\u{038C}'),
- (0xEA0301, '\u{1EBF}'),
- (0x63030C, '\u{010D}'),
- (0x1F000345, '\u{1F80}'),
- (0x4130301, '\u{0403}'),
- (0x4B0323, '\u{1E32}'),
- (0x790301, '\u{00FD}'),
- (0x770301, '\u{1E83}'),
- (0x1F0E0345, '\u{1F8E}'),
- (0x480308, '\u{1E26}'),
- (0x30A63099, '\u{30F4}'),
- (0x1020300, '\u{1EB0}'),
- (0x6C0301, '\u{013A}'),
- (0x450309, '\u{1EBA}'),
- (0x1F390301, '\u{1F3D}'),
- (0x690311, '\u{020B}'),
- (0x4230304, '\u{04EE}'),
- (0x61030C, '\u{01CE}'),
- (0x1F100300, '\u{1F12}'),
- (0x4380300, '\u{045D}'),
- (0x480323, '\u{1E24}'),
- (0x1B111B35, '\u{1B12}'),
- (0x430301, '\u{0106}'),
- (0x540323, '\u{1E6C}'),
- (0x490303, '\u{0128}'),
- (0x1EA10302, '\u{1EAD}'),
- (0x4350308, '\u{0451}'),
- (0x610307, '\u{0227}'),
- (0x1F000300, '\u{1F02}'),
- (0x6D0307, '\u{1E41}'),
- (0x760303, '\u{1E7D}'),
- (0x730327, '\u{015F}'),
- (0x470304, '\u{1E20}'),
- (0x470306, '\u{011E}'),
- (0x1F6D0345, '\u{1FAD}'),
- (0x6F0303, '\u{00F5}'),
- (0x6B0331, '\u{1E35}'),
- (0x720331, '\u{1E5F}'),
- (0x1B00300, '\u{1EEB}'),
- (0x1B0B1B35, '\u{1B0C}'),
- (0x55032D, '\u{1E76}'),
- (0x61030A, '\u{00E5}'),
- (0x30463099, '\u{3094}'),
- (0x1B3A1B35, '\u{1B3B}'),
- (0x55030A, '\u{016E}'),
- (0x928093C, '\u{0929}'),
- (0x3C90313, '\u{1F60}'),
- (0x650330, '\u{1E1B}'),
- (0x590303, '\u{1EF8}'),
- (0x450330, '\u{1E1A}'),
- (0x640331, '\u{1E0F}'),
- (0x3B90308, '\u{03CA}'),
- (0x309D3099, '\u{309E}'),
- (0x443030B, '\u{04F3}'),
- (0xB470B3E, '\u{0B4B}'),
- (0x6F030F, '\u{020D}'),
- (0x6E0323, '\u{1E47}'),
- (0x690308, '\u{00EF}'),
- (0x65032D, '\u{1E19}'),
- (0x15A0307, '\u{1E64}'),
- (0x1F180301, '\u{1F1C}'),
- (0x1F090301, '\u{1F0D}'),
- (0x1F270345, '\u{1F97}'),
- (0x7A0302, '\u{1E91}'),
- (0x590301, '\u{00DD}'),
- (0x4C0331, '\u{1E3A}'),
- (0x1F640345, '\u{1FA4}'),
- (0x1EB90302, '\u{1EC7}'),
- (0x1F240345, '\u{1F94}'),
- (0x1130300, '\u{1E15}'),
- (0x69030F, '\u{0209}'),
- (0x740331, '\u{1E6F}'),
- (0x1F480301, '\u{1F4C}'),
- (0x7A0331, '\u{1E95}'),
- (0x1F290345, '\u{1F99}'),
- (0xD40301, '\u{1ED0}'),
- (0xC40304, '\u{01DE}'),
- (0x3970301, '\u{0389}'),
- (0x72030C, '\u{0159}'),
- (0x1F110301, '\u{1F15}'),
- (0xF40309, '\u{1ED5}'),
- (0x450327, '\u{0228}'),
- (0x6F031B, '\u{01A1}'),
- (0xC60304, '\u{01E2}'),
- (0x3990308, '\u{03AA}'),
- (0x3CE0345, '\u{1FF4}'),
- (0x6D0301, '\u{1E3F}'),
- (0x1030309, '\u{1EB3}'),
- (0x6F0302, '\u{00F4}'),
- (0x73030C, '\u{0161}'),
- (0x750301, '\u{00FA}'),
- (0x1F690301, '\u{1F6D}'),
- (0x3A90301, '\u{038F}'),
- (0x3D0338, '\u{2260}'),
- (0x1FC60345, '\u{1FC7}'),
- (0x770300, '\u{1E81}'),
- (0x2280306, '\u{1E1C}'),
- (0x6C0331, '\u{1E3B}'),
- (0x30AD3099, '\u{30AE}'),
- (0x1EB80302, '\u{1EC6}'),
- (0x550302, '\u{00DB}'),
- (0xDD90DCF, '\u{0DDC}'),
- (0x3A50304, '\u{1FE9}'),
- (0x3A90314, '\u{1F69}'),
- (0x740327, '\u{0163}'),
- (0x530326, '\u{0218}'),
- (0x55030B, '\u{0170}'),
- (0x306F309A, '\u{3071}'),
- (0x6B0327, '\u{0137}'),
- (0x750330, '\u{1E75}'),
- (0x730301, '\u{015B}'),
- (0x1F300342, '\u{1F36}'),
- (0x470307, '\u{0120}'),
- (0xCC60CD5, '\u{0CC7}'),
- (0x1F690300, '\u{1F6B}'),
- (0x1030301, '\u{1EAF}'),
- (0x750311, '\u{0217}'),
- (0x930093C, '\u{0931}'),
- (0x30613099, '\u{3062}'),
- (0x770323, '\u{1E89}'),
- (0xF50301, '\u{1E4D}'),
- (0xFC0300, '\u{01DC}'),
- (0x49030F, '\u{0208}'),
- (0x690302, '\u{00EE}'),
- (0x1F230345, '\u{1F93}'),
- (0xF40300, '\u{1ED3}'),
- (0x44B0308, '\u{04F9}'),
- (0x1F2E0345, '\u{1F9E}'),
- (0x650300, '\u{00E8}'),
- (0x490308, '\u{00CF}'),
- (0x1F280301, '\u{1F2C}'),
- (0x1F180300, '\u{1F1A}'),
- (0x6270653, '\u{0622}'),
- (0x1F200301, '\u{1F24}'),
- (0x22030338, '\u{2204}'),
- (0x790304, '\u{0233}'),
- (0x1F390300, '\u{1F3B}'),
- (0x610325, '\u{1E01}'),
- (0x790309, '\u{1EF7}'),
- (0x1AF0303, '\u{1EEE}'),
- (0x6F0301, '\u{00F3}'),
- (0x640323, '\u{1E0D}'),
- (0x304F3099, '\u{3050}'),
- (0x1F010345, '\u{1F81}'),
- (0xCA0309, '\u{1EC2}'),
- (0x3D20308, '\u{03D4}'),
- (0x1F500301, '\u{1F54}'),
- (0x1F010300, '\u{1F03}'),
- (0x3A90345, '\u{1FFC}'),
- (0x4270308, '\u{04F4}'),
- (0x530302, '\u{015C}'),
- (0x520301, '\u{0154}'),
- (0x450306, '\u{0114}'),
- (0x530323, '\u{1E62}'),
- (0x670306, '\u{011F}'),
- (0x22760338, '\u{2278}'),
- (0x4350300, '\u{0450}'),
- (0x30B53099, '\u{30B6}'),
- (0x6F030B, '\u{0151}'),
- (0x4180304, '\u{04E2}'),
- (0x630307, '\u{010B}'),
- (0x3D20301, '\u{03D3}'),
- (0x227C0338, '\u{22E0}'),
- (0x610304, '\u{0101}'),
- (0xA80300, '\u{1FED}'),
- (0x440331, '\u{1E0E}'),
- (0x650311, '\u{0207}'),
- (0xF80301, '\u{01FF}'),
- (0x75030C, '\u{01D4}'),
- (0x530327, '\u{015E}'),
- (0x30573099, '\u{3058}'),
- (0x3B70345, '\u{1FC3}'),
- (0x69030C, '\u{01D0}'),
- (0x6E0327, '\u{0146}'),
- (0x780307, '\u{1E8B}'),
- (0x1F000342, '\u{1F06}'),
- (0x1B00303, '\u{1EEF}'),
- (0x470327, '\u{0122}'),
- (0xC20309, '\u{1EA8}'),
- (0x6C032D, '\u{1E3D}'),
- (0x304D3099, '\u{304E}'),
- (0x690303, '\u{0129}'),
- (0x1AF0323, '\u{1EF0}'),
- (0x4F0302, '\u{00D4}'),
- (0x1020301, '\u{1EAE}'),
- (0x4470308, '\u{04F5}'),
- (0x22A80338, '\u{22AD}'),
- (0x3C50300, '\u{1F7A}'),
- (0x3910313, '\u{1F08}'),
- (0x64032D, '\u{1E13}'),
- (0xCF0301, '\u{1E2E}'),
- (0x61030F, '\u{0201}'),
- (0x1EA10306, '\u{1EB7}'),
- (0x790323, '\u{1EF5}'),
- (0x21900338, '\u{219A}'),
- (0x1F250345, '\u{1F95}'),
- (0x4F0304, '\u{014C}'),
- (0x4F0306, '\u{014E}'),
- (0x30B33099, '\u{30B4}'),
- (0x440327, '\u{1E10}'),
- (0xB920BD7, '\u{0B94}'),
- (0x550308, '\u{00DC}'),
- (0x650323, '\u{1EB9}'),
- (0x307B3099, '\u{307C}'),
- (0x4F030C, '\u{01D1}'),
- (0x670304, '\u{1E21}'),
- (0x6A030C, '\u{01F0}'),
- (0x550323, '\u{1EE4}'),
- (0x1A10301, '\u{1EDB}'),
- (0x590323, '\u{1EF4}'),
- (0x410300, '\u{00C0}'),
- (0x30B93099, '\u{30BA}'),
- (0x4230308, '\u{04F0}'),
- (0x530301, '\u{015A}'),
- (0x30D8309A, '\u{30DA}'),
- (0x750309, '\u{1EE7}'),
- (0x550330, '\u{1E74}'),
- (0x520327, '\u{0156}'),
- (0x4370308, '\u{04DF}'),
- (0xCA0300, '\u{1EC0}'),
- (0x21940338, '\u{21AE}'),
- (0x3B10306, '\u{1FB0}'),
- (0x1F610342, '\u{1F67}'),
- (0x223C0338, '\u{2241}'),
- (0x30D23099, '\u{30D3}'),
- (0x1F6B0345, '\u{1FAB}'),
- (0x490307, '\u{0130}'),
- (0x410323, '\u{1EA0}'),
- (0x550309, '\u{1EE6}'),
- (0x75030B, '\u{0171}'),
- (0x30533099, '\u{3054}'),
- (0x305D3099, '\u{305E}'),
- (0x4C0323, '\u{1E36}'),
- (0x2260304, '\u{01E0}'),
- (0x475030F, '\u{0477}'),
- (0x490328, '\u{012E}'),
- (0x1F210300, '\u{1F23}'),
- (0x1F610301, '\u{1F65}'),
- (0x1F210342, '\u{1F27}'),
- (0x670302, '\u{011D}'),
- (0x4E0301, '\u{0143}'),
- (0x4E0303, '\u{00D1}'),
- (0x3990300, '\u{1FDA}'),
- (0x3BF0301, '\u{03CC}'),
- (0x4150300, '\u{0400}'),
- (0x3C90314, '\u{1F61}'),
- (0x22A20338, '\u{22AC}'),
- (0x30DB3099, '\u{30DC}'),
- (0x3A50314, '\u{1F59}'),
- (0x52030F, '\u{0210}'),
- (0x4E0323, '\u{1E46}'),
- (0x1F0D0345, '\u{1F8D}'),
- (0x1ECD0302, '\u{1ED9}'),
- (0xFC030C, '\u{01DA}'),
- (0xD60304, '\u{022A}'),
- (0x1F000301, '\u{1F04}'),
- (0x30CF3099, '\u{30D0}'),
- (0x4350306, '\u{04D7}'),
- (0x220B0338, '\u{220C}'),
- (0x590300, '\u{1EF2}'),
- (0x4170308, '\u{04DE}'),
- (0x6E030C, '\u{0148}'),
- (0x4C030C, '\u{013D}'),
- (0x1690301, '\u{1E79}'),
- (0x4100308, '\u{04D2}'),
- (0x1A00301, '\u{1EDA}'),
- (0x41030F, '\u{0200}'),
- (0x720301, '\u{0155}'),
- (0x450303, '\u{1EBC}'),
- (0x1B0D1B35, '\u{1B0E}'),
- (0x1120301, '\u{1E16}'),
- (0x4A0302, '\u{0134}'),
- (0x3BF0300, '\u{1F78}'),
- (0x30593099, '\u{305A}'),
- (0x4F030B, '\u{0150}'),
- (0x610328, '\u{0105}'),
- (0x30D83099, '\u{30D9}'),
- (0x1F2B0345, '\u{1F9B}'),
- (0x1F400301, '\u{1F44}'),
- (0x65030F, '\u{0205}'),
- (0x3AE0345, '\u{1FC4}'),
- (0x1680301, '\u{1E78}'),
- (0x740326, '\u{021B}'),
- (0x3B90342, '\u{1FD6}'),
- (0x1F6F0345, '\u{1FAF}'),
- (0x3A50301, '\u{038E}'),
- (0x1F090345, '\u{1F89}'),
- (0x550300, '\u{00D9}'),
- (0x41030C, '\u{01CD}'),
- (0x430327, '\u{00C7}'),
- (0x460307, '\u{1E1E}'),
- (0x3B50301, '\u{03AD}'),
- (0xD470D3E, '\u{0D4B}'),
- (0x610311, '\u{0203}'),
- (0xD50308, '\u{1E4E}'),
- (0x3C90300, '\u{1F7C}'),
- (0x4430306, '\u{045E}'),
- (0x1FFE0301, '\u{1FDE}'),
- (0x3990301, '\u{038A}'),
- (0x790307, '\u{1E8F}'),
- (0x1E5A0304, '\u{1E5C}'),
- (0x75030F, '\u{0215}'),
- (0x9C709BE, '\u{09CB}'),
- (0x1B071B35, '\u{1B08}'),
- (0x690330, '\u{1E2D}'),
- (0x307B309A, '\u{307D}'),
- (0x30C83099, '\u{30C9}'),
- (0x22B30338, '\u{22EB}'),
- (0x1B00301, '\u{1EE9}'),
- (0x790300, '\u{1EF3}'),
- (0x570307, '\u{1E86}'),
- (0x690328, '\u{012F}'),
- (0x5A0323, '\u{1E92}'),
- (0x3C50342, '\u{1FE6}'),
- (0x4F0309, '\u{1ECE}'),
- (0x1F290342, '\u{1F2F}'),
- (0x1A00300, '\u{1EDC}'),
- (0x1F2A0345, '\u{1F9A}'),
- (0x14D0301, '\u{1E53}'),
- (0x21D00338, '\u{21CD}'),
- (0x550328, '\u{0172}'),
- (0x680331, '\u{1E96}'),
- (0x68030C, '\u{021F}'),
- (0x4C0301, '\u{0139}'),
- (0x22860338, '\u{2288}'),
- (0x39F0314, '\u{1F49}'),
- (0x3A50306, '\u{1FE8}'),
- (0xB470B56, '\u{0B48}'),
- (0x30753099, '\u{3076}'),
- (0x1E5B0304, '\u{1E5D}'),
- (0x1F6A0345, '\u{1FAA}'),
- (0x540327, '\u{0162}'),
- (0x1020303, '\u{1EB4}'),
- (0x39F0313, '\u{1F48}'),
- (0x1F090342, '\u{1F0F}'),
- (0x4100306, '\u{04D0}'),
- (0x14D0300, '\u{1E51}'),
- (0x4430304, '\u{04EF}'),
- (0x21920338, '\u{219B}'),
- (0x22610338, '\u{2262}'),
- (0xF50304, '\u{022D}'),
- (0x3B90313, '\u{1F30}'),
- (0x6F0308, '\u{00F6}'),
- (0x730307, '\u{1E61}'),
- (0x75031B, '\u{01B0}'),
- (0x30B73099, '\u{30B8}'),
- (0x1E620307, '\u{1E68}'),
- (0x410306, '\u{0102}'),
- (0x3970314, '\u{1F29}'),
- (0x630302, '\u{0109}'),
- (0x6A0302, '\u{0135}'),
- (0xE50301, '\u{01FB}'),
- (0x730326, '\u{0219}'),
- (0x1F740345, '\u{1FC2}'),
- (0x650309, '\u{1EBB}'),
- (0x5A030C, '\u{017D}'),
- (0x22250338, '\u{2226}'),
- (0x3A90313, '\u{1F68}'),
- (0x720327, '\u{0157}'),
- (0x1F090300, '\u{1F0B}'),
- (0x4360308, '\u{04DD}'),
- (0x1F080345, '\u{1F88}'),
- (0x620331, '\u{1E07}'),
- (0x22730338, '\u{2275}'),
- (0x560323, '\u{1E7E}'),
- (0x4F0323, '\u{1ECC}'),
- (0x22E0304, '\u{0230}'),
- (0x6D50654, '\u{06C0}'),
- (0x3B10313, '\u{1F00}'),
- (0x4F0303, '\u{00D5}'),
- (0x1F010301, '\u{1F05}'),
- (0x650304, '\u{0113}'),
- (0x450323, '\u{1EB8}'),
- (0xBC60BBE, '\u{0BCA}'),
- (0x22650338, '\u{2271}'),
- (0x3910314, '\u{1F09}'),
- (0x1120300, '\u{1E14}'),
- (0x4E0307, '\u{1E44}'),
- (0x680308, '\u{1E27}'),
- (0x4F0311, '\u{020E}'),
- (0x550303, '\u{0168}'),
- (0x3A10314, '\u{1FEC}'),
- (0x3B10301, '\u{03AC}'),
- (0x55030F, '\u{0214}'),
- (0x3E0338, '\u{226F}'),
- (0x1610307, '\u{1E67}'),
- (0x1F040345, '\u{1F84}'),
- (0x450300, '\u{00C8}'),
- (0x1B091B35, '\u{1B0A}'),
- (0x30FD3099, '\u{30FE}'),
- (0x1F680301, '\u{1F6C}'),
- (0x650303, '\u{1EBD}'),
- (0x3B90304, '\u{1FD1}'),
- (0x9C709D7, '\u{09CC}'),
- (0x42B0308, '\u{04F8}'),
- (0x4E0327, '\u{0145}'),
- (0x1F630345, '\u{1FA3}'),
- (0x4380306, '\u{0439}'),
- (0x3B10314, '\u{1F01}'),
- (0x540326, '\u{021A}'),
- (0x740307, '\u{1E6B}'),
- (0x3C90301, '\u{03CE}'),
- (0x3990314, '\u{1F39}'),
- (0x30B13099, '\u{30B2}'),
- (0x750302, '\u{00FB}'),
- (0xCC60CD6, '\u{0CC8}'),
- (0x30BD3099, '\u{30BE}'),
- (0x6E0300, '\u{01F9}'),
- (0x1F390342, '\u{1F3F}'),
- (0x2270304, '\u{01E1}'),
- (0x22080338, '\u{2209}'),
- (0x4180306, '\u{0419}'),
- (0x44030C, '\u{010E}'),
- (0x75030A, '\u{016F}'),
- (0x6270654, '\u{0623}'),
- (0x750306, '\u{016D}'),
- (0x3B70300, '\u{1F74}'),
- (0x1F660345, '\u{1FA6}'),
- (0x1F690345, '\u{1FA9}'),
- (0x15B0307, '\u{1E65}'),
- (0x1F280342, '\u{1F2E}'),
- (0x1F700345, '\u{1FB2}'),
- (0x1F0F0345, '\u{1F8F}'),
- (0x540331, '\u{1E6E}'),
- (0x227B0338, '\u{2281}'),
- (0x22870338, '\u{2289}'),
- (0x1F010342, '\u{1F07}'),
- (0x3A50308, '\u{03AB}'),
- (0x1F650345, '\u{1FA5}'),
- (0xD40300, '\u{1ED2}'),
- (0xF60304, '\u{022B}'),
- (0xCBF0CD5, '\u{0CC0}'),
- (0x1F380342, '\u{1F3E}'),
- (0x22B20338, '\u{22EA}'),
- (0x72030F, '\u{0211}'),
- (0x30BF3099, '\u{30C0}'),
- (0x4E90308, '\u{04EB}'),
- (0x22830338, '\u{2285}'),
- (0x3CB0300, '\u{1FE2}'),
- (0xCA0301, '\u{1EBE}'),
- (0x590304, '\u{0232}'),
- (0x690301, '\u{00ED}'),
- (0x305F3099, '\u{3060}'),
- (0x440307, '\u{1E0A}'),
- (0x1ECC0302, '\u{1ED8}'),
- (0x1F210345, '\u{1F91}'),
- (0x410311, '\u{0202}'),
- (0x720311, '\u{0213}'),
- (0x3A50300, '\u{1FEA}'),
- (0x1F590300, '\u{1F5B}'),
- (0xE40304, '\u{01DF}'),
- (0x1F500300, '\u{1F52}'),
- (0x224D0338, '\u{226D}'),
- (0x6E0301, '\u{0144}'),
- (0x75032D, '\u{1E77}'),
- (0xF40301, '\u{1ED1}'),
- (0x3C90342, '\u{1FF6}'),
- (0x3B70301, '\u{03AE}'),
- (0x6E0307, '\u{1E45}'),
- (0x410304, '\u{0100}'),
- (0x1F190301, '\u{1F1D}'),
- (0x3B10304, '\u{1FB1}'),
- (0x3078309A, '\u{307A}'),
- (0x570323, '\u{1E88}'),
- (0x4430308, '\u{04F1}'),
- (0x45032D, '\u{1E18}'),
- (0x4150308, '\u{0401}'),
- (0x4F0328, '\u{01EA}'),
- (0x4D90308, '\u{04DB}'),
- (0x4060308, '\u{0407}'),
- (0xF40303, '\u{1ED7}'),
- (0x3B90306, '\u{1FD0}'),
- (0x650307, '\u{0117}'),
- (0x1F680342, '\u{1F6E}'),
- (0x4380304, '\u{04E3}'),
- (0x1F410300, '\u{1F43}'),
- (0x1FFE0300, '\u{1FDD}'),
- (0x4F0301, '\u{00D3}'),
- (0x640327, '\u{1E11}'),
- (0x2290306, '\u{1E1D}'),
- (0x7A0301, '\u{017A}'),
- (0x620323, '\u{1E05}'),
- (0x1F7C0345, '\u{1FF2}'),
- (0x1B00323, '\u{1EF1}'),
- (0x1F600301, '\u{1F64}'),
- (0x30663099, '\u{3067}'),
- (0x22640338, '\u{2270}'),
- (0x1F310300, '\u{1F33}'),
- (0x610323, '\u{1EA1}'),
- (0x1F480300, '\u{1F4A}'),
- (0x550301, '\u{00DA}'),
- (0xC460C56, '\u{0C48}'),
- (0x3CA0300, '\u{1FD2}'),
- (0x1B7030C, '\u{01EE}'),
- (0x720323, '\u{1E5B}'),
- (0x1F200342, '\u{1F26}'),
- (0x4300308, '\u{04D3}'),
- (0x22820338, '\u{2284}'),
- (0x1F590301, '\u{1F5D}'),
- (0x1F080342, '\u{1F0E}'),
- (0x440323, '\u{1E0C}'),
- (0x1025102E, '\u{1026}'),
- (0x3910304, '\u{1FB9}'),
- (0x4B0331, '\u{1E34}'),
- (0x690300, '\u{00EC}'),
- (0x48032E, '\u{1E2A}'),
- (0x630301, '\u{0107}'),
- (0x1F690342, '\u{1F6F}'),
- (0x3B50313, '\u{1F10}'),
- (0x30CF309A, '\u{30D1}'),
- (0x4E030C, '\u{0147}'),
- (0xB470B57, '\u{0B4C}'),
- (0x3910301, '\u{0386}'),
- (0x650328, '\u{0119}'),
- (0x1FBF0300, '\u{1FCD}'),
- (0x3B70342, '\u{1FC6}'),
- (0x450307, '\u{0116}'),
- (0x1F380301, '\u{1F3C}'),
- (0x3075309A, '\u{3077}'),
- (0x4B0301, '\u{1E30}'),
- (0x1030300, '\u{1EB1}'),
- (0xE20303, '\u{1EAB}'),
- (0x410302, '\u{00C2}'),
- (0x650308, '\u{00EB}'),
- (0x580307, '\u{1E8A}'),
- (0x54030C, '\u{0164}'),
- (0x3C50313, '\u{1F50}'),
- (0x3B50314, '\u{1F11}'),
- (0x1B3E1B35, '\u{1B40}'),
- (0x1F100301, '\u{1F14}'),
- (0x3072309A, '\u{3074}'),
- (0x1F280345, '\u{1F98}'),
- (0x22770338, '\u{2279}'),
- (0x227A0338, '\u{2280}'),
- (0x470302, '\u{011C}'),
- (0x450308, '\u{00CB}'),
- (0x550324, '\u{1E72}'),
- (0x1F2C0345, '\u{1F9C}'),
- (0x4B0327, '\u{0136}'),
- (0x490302, '\u{00CE}'),
- (0x680302, '\u{0125}'),
- (0x520307, '\u{1E58}'),
- (0x610301, '\u{00E1}'),
- (0x4B030C, '\u{01E8}'),
- (0x490309, '\u{1EC8}'),
- (0x6C030C, '\u{013E}'),
- (0x4D0307, '\u{1E40}'),
- (0x1E360304, '\u{1E38}'),
- (0x3C50304, '\u{1FE1}'),
- (0x79030A, '\u{1E99}'),
- (0x3970313, '\u{1F28}'),
- (0x54032D, '\u{1E70}'),
- (0x1F490300, '\u{1F4B}'),
- (0x1B421B35, '\u{1B43}'),
- (0x3B70313, '\u{1F20}'),
- (0xEF0301, '\u{1E2F}'),
- (0xE70301, '\u{1E09}'),
- (0x16A0308, '\u{1E7A}'),
- (0xCA0303, '\u{1EC4}'),
- (0x3B10300, '\u{1F70}'),
- (0x6D20654, '\u{06D3}'),
- (0x30D53099, '\u{30D6}'),
- (0x1F2F0345, '\u{1F9F}'),
- (0x3B50300, '\u{1F72}'),
- (0x750324, '\u{1E73}'),
- (0x4150306, '\u{04D6}'),
- (0x65030C, '\u{011B}'),
- (0x570302, '\u{0174}'),
- (0x1EA00306, '\u{1EB6}'),
- (0x1F070345, '\u{1F87}'),
- (0xA80301, '\u{0385}'),
- (0x790302, '\u{0177}'),
- (0x6E032D, '\u{1E4B}'),
- (0x6F030C, '\u{01D2}'),
- (0x3C90345, '\u{1FF3}'),
- (0x430302, '\u{0108}'),
- (0x790303, '\u{1EF9}'),
- (0x740323, '\u{1E6D}'),
- (0xE20309, '\u{1EA9}'),
- (0x1F300300, '\u{1F32}'),
- (0x6B0301, '\u{1E31}'),
- (0x22920338, '\u{22E3}'),
- (0x3950314, '\u{1F19}'),
- (0x1F290301, '\u{1F2D}'),
- (0x450328, '\u{0118}'),
- (0x1FB60345, '\u{1FB7}'),
- (0xD50304, '\u{022C}'),
- (0x4300306, '\u{04D1}'),
- (0xF50308, '\u{1E4F}'),
- (0x1EA00302, '\u{1EAC}'),
- (0x1F680300, '\u{1F6A}'),
- (0x3970300, '\u{1FCA}'),
- (0x450301, '\u{00C9}'),
- (0x690304, '\u{012B}'),
- (0xBC60BD7, '\u{0BCC}'),
- (0x6F0304, '\u{014D}'),
- (0x4F0308, '\u{00D6}'),
- (0xBC70BBE, '\u{0BCB}'),
- (0x55030C, '\u{01D3}'),
- (0x3AC0345, '\u{1FB4}'),
- (0x1FBF0342, '\u{1FCF}'),
- (0x30D2309A, '\u{30D4}'),
- (0x660307, '\u{1E1F}'),
- (0x4E0300, '\u{01F8}'),
- (0x790308, '\u{00FF}'),
- (0x68032E, '\u{1E2B}'),
- (0x64030C, '\u{010F}'),
- (0x4F0307, '\u{022E}'),
- (0x1F590342, '\u{1F5F}'),
- (0x30AF3099, '\u{30B0}'),
- (0xE60304, '\u{01E3}'),
- (0x3C50301, '\u{03CD}'),
- (0x770308, '\u{1E85}'),
- (0x3B90314, '\u{1F31}'),
- (0x750323, '\u{1EE5}'),
- (0x590309, '\u{1EF6}'),
- (0x292030C, '\u{01EF}'),
- (0x550306, '\u{016C}'),
- (0xE60301, '\u{01FD}'),
- (0x16B0308, '\u{1E7B}'),
- (0x4F030F, '\u{020C}'),
- (0x3BF0313, '\u{1F40}'),
- (0xD80301, '\u{01FE}'),
- (0xC20303, '\u{1EAA}'),
- (0x1F510300, '\u{1F53}'),
- (0x1B00309, '\u{1EED}'),
- (0x4E032D, '\u{1E4A}'),
- (0x6F0309, '\u{1ECF}'),
- (0x4180300, '\u{040D}'),
- (0x22A90338, '\u{22AE}'),
- (0x1F680345, '\u{1FA8}'),
- (0x1B3C1B35, '\u{1B3D}'),
- (0x1F400300, '\u{1F42}'),
- (0x1F0B0345, '\u{1F8B}'),
- (0x3C50306, '\u{1FE0}'),
- (0x44032D, '\u{1E12}'),
- (0xCCA0CD5, '\u{0CCB}'),
- (0xEA0303, '\u{1EC5}'),
- (0x4230306, '\u{040E}'),
- (0xC70301, '\u{1E08}'),
- (0x7A030C, '\u{017E}'),
- (0x670307, '\u{0121}'),
- (0x450311, '\u{0206}'),
- (0x6F0300, '\u{00F2}'),
- (0x30BB3099, '\u{30BC}'),
- (0x4180308, '\u{04E4}'),
- (0x30513099, '\u{3052}'),
- (0x6C0323, '\u{1E37}'),
- (0x3B70314, '\u{1F21}'),
- (0x77030A, '\u{1E98}'),
- (0x690323, '\u{1ECB}'),
- (0x610303, '\u{00E3}'),
- (0x30F13099, '\u{30F9}'),
- (0x3B10345, '\u{1FB3}'),
- (0xD460D3E, '\u{0D4A}'),
- (0x3B90300, '\u{1F76}'),
- (0x21D40338, '\u{21CE}'),
- (0x1F620345, '\u{1FA2}'),
- (0x770302, '\u{0175}'),
- (0xFC0304, '\u{01D6}'),
- (0x1130301, '\u{1E17}'),
- (0x30683099, '\u{3069}'),
- (0x1F600342, '\u{1F66}'),
- (0x680323, '\u{1E25}'),
- (0x3950313, '\u{1F18}'),
- (0xEA0300, '\u{1EC1}'),
- (0x3CB0342, '\u{1FE7}'),
- (0x22430338, '\u{2244}'),
- (0x30783099, '\u{3079}'),
- (0x3990313, '\u{1F38}'),
- (0x490330, '\u{1E2C}'),
- (0x770307, '\u{1E87}'),
- (0x650301, '\u{00E9}'),
- (0x680327, '\u{1E29}'),
- (0x22B50338, '\u{22ED}'),
- (0x3B10342, '\u{1FB6}'),
- (0x3910306, '\u{1FB8}'),
- (0x4D0301, '\u{1E3E}'),
- (0x410309, '\u{1EA2}'),
- (0x1B051B35, '\u{1B06}'),
- (0x3C0338, '\u{226E}'),
- (0x590308, '\u{0178}'),
- (0x1030303, '\u{1EB5}'),
- (0x480327, '\u{1E28}'),
- (0x6D0323, '\u{1E43}'),
- (0x30643099, '\u{3065}'),
- (0x4560308, '\u{0457}'),
- (0x590302, '\u{0176}'),
- (0x6C10654, '\u{06C2}'),
- (0x43A0301, '\u{045C}'),
- (0xE20300, '\u{1EA7}'),
- (0x3950301, '\u{0388}'),
- (0x630327, '\u{00E7}'),
- (0x17F0307, '\u{1E9B}'),
- (0x6480654, '\u{0624}'),
- (0x30AB3099, '\u{30AC}'),
- (0x1A00323, '\u{1EE2}'),
- (0x4D80308, '\u{04DA}'),
- (0x5A0331, '\u{1E94}'),
- (0x67030C, '\u{01E7}'),
- (0x39F0300, '\u{1FF8}'),
- (0x650327, '\u{0229}'),
- (0x490323, '\u{1ECA}'),
- (0x1F110300, '\u{1F13}'),
- (0x1F510342, '\u{1F57}'),
- (0x4D0323, '\u{1E42}'),
- (0x1F300301, '\u{1F34}'),
- (0x6C0327, '\u{013C}'),
- (0x1F050345, '\u{1F85}'),
- (0x1A10300, '\u{1EDD}'),
- (0x4160308, '\u{04DC}'),
- (0x640307, '\u{1E0B}'),
- (0x4C032D, '\u{1E3C}'),
- (0x3C10314, '\u{1FE5}'),
- (0x1EA0304, '\u{01EC}'),
- (0x1F080300, '\u{1F0A}'),
- (0x650302, '\u{00EA}'),
- (0x3910300, '\u{1FBA}'),
- (0x700301, '\u{1E55}'),
- (0x1F020345, '\u{1F82}'),
- (0x1020309, '\u{1EB2}'),
- (0x750303, '\u{0169}'),
- (0x1F0C0345, '\u{1F8C}'),
- (0x3CB0301, '\u{03B0}'),
- (0x740308, '\u{1E97}'),
- (0x3950300, '\u{1FC8}'),
- (0x227D0338, '\u{22E1}'),
- (0x7A0323, '\u{1E93}'),
- (0x6F0311, '\u{020F}'),
- (0x6F0328, '\u{01EB}'),
- (0x1F200300, '\u{1F22}'),
- (0x1F190300, '\u{1F1B}'),
- (0x560303, '\u{1E7C}'),
- (0x6B030C, '\u{01E9}'),
- (0x4E80308, '\u{04EA}'),
- (0x3A90300, '\u{1FFA}'),
- (0xA80342, '\u{1FC1}'),
- (0x4360306, '\u{04C2}'),
- (0xDC0301, '\u{01D7}'),
- (0x750304, '\u{016B}'),
- (0x22450338, '\u{2247}'),
- (0x490304, '\u{012A}'),
- (0x4380308, '\u{04E5}'),
- (0xD460D57, '\u{0D4C}'),
- (0x750300, '\u{00F9}'),
- (0x22B40338, '\u{22EC}'),
- (0x750308, '\u{00FC}'),
- (0x3C50314, '\u{1F51}'),
- (0x1600307, '\u{1E66}'),
- (0x4160306, '\u{04C1}'),
- (0x55031B, '\u{01AF}'),
- (0x22AB0338, '\u{22AF}'),
- (0x14C0300, '\u{1E50}'),
- (0x1F310342, '\u{1F37}'),
- (0x1F260345, '\u{1F96}'),
- (0x22910338, '\u{22E2}'),
- (0x500301, '\u{1E54}'),
- (0x4C0327, '\u{013B}'),
- (0x5A0301, '\u{0179}'),
- (0x420307, '\u{1E02}'),
- (0x3C10313, '\u{1FE4}'),
- (0x1F410301, '\u{1F45}'),
- (0x500307, '\u{1E56}'),
- (0x43030C, '\u{010C}'),
- (0x730323, '\u{1E63}'),
- (0x30553099, '\u{3056}'),
- (0x306F3099, '\u{3070}'),
- (0x44D0308, '\u{04ED}'),
- (0x1F670345, '\u{1FA7}'),
- (0x1AF0301, '\u{1EE8}'),
- (0x1F290300, '\u{1F2B}'),
- (0x1B3F1B35, '\u{1B41}'),
- (0x450302, '\u{00CA}'),
- (0x6F0306, '\u{014F}'),
- (0xFC0301, '\u{01D8}'),
- (0x30F23099, '\u{30FA}'),
- (0x1F2D0345, '\u{1F9D}'),
- (0x14C0301, '\u{1E52}'),
- (0x610308, '\u{00E4}'),
- (0x1F600345, '\u{1FA0}'),
- (0x1F0A0345, '\u{1F8A}'),
- (0x610306, '\u{0103}'),
- (0x1F600300, '\u{1F62}'),
- (0x1AF0300, '\u{1EEA}'),
- (0x43E0308, '\u{04E7}'),
- (0x22230338, '\u{2224}'),
- (0x3CA0301, '\u{0390}'),
- (0x30D5309A, '\u{30D7}'),
- (0x1F220345, '\u{1F92}'),
- (0xD50301, '\u{1E4C}'),
- (0x1F6C0345, '\u{1FAC}'),
- (0x540307, '\u{1E6A}'),
- (0x1E370304, '\u{1E39}'),
- (0xDD90DCA, '\u{0DDA}'),
- (0x1A10303, '\u{1EE1}'),
- (0x48030C, '\u{021E}'),
- (0xEA0309, '\u{1EC3}'),
- (0x52030C, '\u{0158}'),
- (0xD40303, '\u{1ED6}'),
- (0x45030C, '\u{011A}'),
- (0x30EF3099, '\u{30F7}'),
- (0x480302, '\u{0124}'),
- (0x520323, '\u{1E5A}'),
- (0xC20300, '\u{1EA6}'),
- (0x74032D, '\u{1E71}'),
- (0x42D0308, '\u{04EC}'),
- (0xDD90DDF, '\u{0DDE}'),
- (0x410308, '\u{00C4}'),
- (0x474030F, '\u{0476}'),
- (0xC60301, '\u{01FC}'),
- (0x1F310301, '\u{1F35}'),
- (0x1F610300, '\u{1F63}'),
- (0xCC60CC2, '\u{0CCA}'),
- (0xC20301, '\u{1EA4}'),
- (0x3C50308, '\u{03CB}'),
- (0xE20301, '\u{1EA5}'),
- (0x1F500342, '\u{1F56}'),
- (0x610300, '\u{00E0}'),
- (0x490311, '\u{020A}'),
- (0x670327, '\u{0123}'),
- (0x590307, '\u{1E8E}'),
- (0x3970345, '\u{1FCC}'),
- (0xD40309, '\u{1ED4}'),
- (0x1A00303, '\u{1EE0}'),
- (0x1FFE0342, '\u{1FDF}'),
- (0x41A0301, '\u{040C}'),
- (0x74030C, '\u{0165}'),
- (0xDC0300, '\u{01DB}'),
- (0x780308, '\u{1E8D}'),
- (0xDC0304, '\u{01D5}'),
- (0x610302, '\u{00E2}'),
- (0x5A0302, '\u{1E90}'),
- (0x933093C, '\u{0934}'),
- (0x4F031B, '\u{01A0}'),
- (0x520311, '\u{0212}'),
- (0x6E0303, '\u{00F1}'),
- (0x45030F, '\u{0204}'),
- (0x1AF0309, '\u{1EEC}'),
- (0x450304, '\u{0112}'),
- (0x1F210301, '\u{1F25}'),
- (0x22F0304, '\u{0231}'),
- (0x3990306, '\u{1FD8}'),
- (0x4E0331, '\u{1E48}'),
- (0x1F380300, '\u{1F3A}'),
- (0x490306, '\u{012C}'),
- (0x690306, '\u{012D}'),
- (0x1F060345, '\u{1F86}'),
- (0x490301, '\u{00CD}'),
- (0x570300, '\u{1E80}'),
- (0x30F03099, '\u{30F8}'),
- (0x53030C, '\u{0160}'),
- (0x490300, '\u{00CC}'),
- (0x30723099, '\u{3073}'),
- (0x1F280300, '\u{1F2A}'),
- (0x480307, '\u{1E22}'),
- (0x1A00309, '\u{1EDE}'),
- (0x1EB0304, '\u{01ED}'),
- (0x1E630307, '\u{1E69}'),
- (0x6F0323, '\u{1ECD}'),
- (0x410303, '\u{00C3}'),
- (0x3910345, '\u{1FBC}'),
- (0x410328, '\u{0104}'),
- (0x680307, '\u{1E23}'),
- (0x6E0331, '\u{1E49}'),
- (0xDDC0DCA, '\u{0DDD}'),
- (0x580308, '\u{1E8C}'),
- (0x410301, '\u{00C1}'),
- (0x30C43099, '\u{30C5}'),
- (0x420323, '\u{1E04}'),
- (0x730302, '\u{015D}'),
+ (0x064A0654, '\u{000626}'),
+ (0x00690309, '\u{001EC9}'),
+ (0x00650306, '\u{000115}'),
+ (0x0423030B, '\u{0004F2}'),
+ (0x0047030C, '\u{0001E6}'),
+ (0x00570301, '\u{001E82}'),
+ (0x00C50301, '\u{0001FA}'),
+ (0x21D20338, '\u{0021CF}'),
+ (0x00430307, '\u{00010A}'),
+ (0x007A0307, '\u{00017C}'),
+ (0x0049030C, '\u{0001CF}'),
+ (0x00720307, '\u{001E59}'),
+ (0x304B3099, '\u{00304C}'),
+ (0x1F610345, '\u{001FA1}'),
+ (0x00410307, '\u{000226}'),
+ (0x006B0323, '\u{001E33}'),
+ (0x03990304, '\u{001FD9}'),
+ (0x1F490301, '\u{001F4D}'),
+ (0x03CA0342, '\u{001FD7}'),
+ (0x00550304, '\u{00016A}'),
+ (0x30DB309A, '\u{0030DD}'),
+ (0x1F6E0345, '\u{001FAE}'),
+ (0x00420331, '\u{001E06}'),
+ (0x041E0308, '\u{0004E6}'),
+ (0x00410325, '\u{001E00}'),
+ (0x00520331, '\u{001E5E}'),
+ (0x1FF60345, '\u{001FF7}'),
+ (0x22720338, '\u{002274}'),
+ (0x22480338, '\u{002249}'),
+ (0x1FBF0301, '\u{001FCE}'),
+ (0x30C63099, '\u{0030C7}'),
+ (0x00760323, '\u{001E7F}'),
+ (0x00700307, '\u{001E57}'),
+ (0x1F510301, '\u{001F55}'),
+ (0x00750328, '\u{000173}'),
+ (0x305B3099, '\u{00305C}'),
+ (0x0041030A, '\u{0000C5}'),
+ (0x01A10323, '\u{001EE3}'),
+ (0x00550311, '\u{000216}'),
+ (0x00530307, '\u{001E60}'),
+ (0x00DC030C, '\u{0001D9}'),
+ (0x004F0300, '\u{0000D2}'),
+ (0x006F0307, '\u{00022F}'),
+ (0x00470301, '\u{0001F4}'),
+ (0x00610309, '\u{001EA3}'),
+ (0x1F080301, '\u{001F0C}'),
+ (0x03B90301, '\u{0003AF}'),
+ (0x04330301, '\u{000453}'),
+ (0x1F200345, '\u{001F90}'),
+ (0x00620307, '\u{001E03}'),
+ (0x1F030345, '\u{001F83}'),
+ (0x00570308, '\u{001E84}'),
+ (0x005A0307, '\u{00017B}'),
+ (0x30C13099, '\u{0030C2}'),
+ (0x01A10309, '\u{001EDF}'),
+ (0x06270655, '\u{000625}'),
+ (0x03BF0314, '\u{001F41}'),
+ (0x00670301, '\u{0001F5}'),
+ (0x039F0301, '\u{00038C}'),
+ (0x00EA0301, '\u{001EBF}'),
+ (0x0063030C, '\u{00010D}'),
+ (0x1F000345, '\u{001F80}'),
+ (0x04130301, '\u{000403}'),
+ (0x004B0323, '\u{001E32}'),
+ (0x00790301, '\u{0000FD}'),
+ (0x00770301, '\u{001E83}'),
+ (0x1F0E0345, '\u{001F8E}'),
+ (0x00480308, '\u{001E26}'),
+ (0x30A63099, '\u{0030F4}'),
+ (0x01020300, '\u{001EB0}'),
+ (0x006C0301, '\u{00013A}'),
+ (0x00450309, '\u{001EBA}'),
+ (0x1F390301, '\u{001F3D}'),
+ (0x00690311, '\u{00020B}'),
+ (0x04230304, '\u{0004EE}'),
+ (0x0061030C, '\u{0001CE}'),
+ (0x1F100300, '\u{001F12}'),
+ (0x04380300, '\u{00045D}'),
+ (0x00480323, '\u{001E24}'),
+ (0x1B111B35, '\u{001B12}'),
+ (0x00430301, '\u{000106}'),
+ (0x00540323, '\u{001E6C}'),
+ (0x00490303, '\u{000128}'),
+ (0x1EA10302, '\u{001EAD}'),
+ (0x04350308, '\u{000451}'),
+ (0x00610307, '\u{000227}'),
+ (0x1F000300, '\u{001F02}'),
+ (0x006D0307, '\u{001E41}'),
+ (0x00760303, '\u{001E7D}'),
+ (0x00730327, '\u{00015F}'),
+ (0x00470304, '\u{001E20}'),
+ (0x00470306, '\u{00011E}'),
+ (0x1F6D0345, '\u{001FAD}'),
+ (0x006F0303, '\u{0000F5}'),
+ (0x006B0331, '\u{001E35}'),
+ (0x00720331, '\u{001E5F}'),
+ (0x01B00300, '\u{001EEB}'),
+ (0x1B0B1B35, '\u{001B0C}'),
+ (0x0055032D, '\u{001E76}'),
+ (0x0061030A, '\u{0000E5}'),
+ (0x30463099, '\u{003094}'),
+ (0x1B3A1B35, '\u{001B3B}'),
+ (0x0055030A, '\u{00016E}'),
+ (0x0928093C, '\u{000929}'),
+ (0x03C90313, '\u{001F60}'),
+ (0x00650330, '\u{001E1B}'),
+ (0x00590303, '\u{001EF8}'),
+ (0x00450330, '\u{001E1A}'),
+ (0x00640331, '\u{001E0F}'),
+ (0x03B90308, '\u{0003CA}'),
+ (0x309D3099, '\u{00309E}'),
+ (0x0443030B, '\u{0004F3}'),
+ (0x0B470B3E, '\u{000B4B}'),
+ (0x006F030F, '\u{00020D}'),
+ (0x006E0323, '\u{001E47}'),
+ (0x00690308, '\u{0000EF}'),
+ (0x0065032D, '\u{001E19}'),
+ (0x015A0307, '\u{001E64}'),
+ (0x1F180301, '\u{001F1C}'),
+ (0x1F090301, '\u{001F0D}'),
+ (0x1F270345, '\u{001F97}'),
+ (0x007A0302, '\u{001E91}'),
+ (0x00590301, '\u{0000DD}'),
+ (0x004C0331, '\u{001E3A}'),
+ (0x1F640345, '\u{001FA4}'),
+ (0x1EB90302, '\u{001EC7}'),
+ (0x1F240345, '\u{001F94}'),
+ (0x01130300, '\u{001E15}'),
+ (0x0069030F, '\u{000209}'),
+ (0x00740331, '\u{001E6F}'),
+ (0x1F480301, '\u{001F4C}'),
+ (0x007A0331, '\u{001E95}'),
+ (0x1F290345, '\u{001F99}'),
+ (0x00D40301, '\u{001ED0}'),
+ (0x00C40304, '\u{0001DE}'),
+ (0x03970301, '\u{000389}'),
+ (0x0072030C, '\u{000159}'),
+ (0x1F110301, '\u{001F15}'),
+ (0x00F40309, '\u{001ED5}'),
+ (0x00450327, '\u{000228}'),
+ (0x006F031B, '\u{0001A1}'),
+ (0x00C60304, '\u{0001E2}'),
+ (0x03990308, '\u{0003AA}'),
+ (0x03CE0345, '\u{001FF4}'),
+ (0x006D0301, '\u{001E3F}'),
+ (0x01030309, '\u{001EB3}'),
+ (0x006F0302, '\u{0000F4}'),
+ (0x0073030C, '\u{000161}'),
+ (0x00750301, '\u{0000FA}'),
+ (0x1F690301, '\u{001F6D}'),
+ (0x03A90301, '\u{00038F}'),
+ (0x003D0338, '\u{002260}'),
+ (0x1FC60345, '\u{001FC7}'),
+ (0x00770300, '\u{001E81}'),
+ (0x02280306, '\u{001E1C}'),
+ (0x006C0331, '\u{001E3B}'),
+ (0x30AD3099, '\u{0030AE}'),
+ (0x1EB80302, '\u{001EC6}'),
+ (0x00550302, '\u{0000DB}'),
+ (0x0DD90DCF, '\u{000DDC}'),
+ (0x03A50304, '\u{001FE9}'),
+ (0x03A90314, '\u{001F69}'),
+ (0x00740327, '\u{000163}'),
+ (0x00530326, '\u{000218}'),
+ (0x0055030B, '\u{000170}'),
+ (0x306F309A, '\u{003071}'),
+ (0x006B0327, '\u{000137}'),
+ (0x00750330, '\u{001E75}'),
+ (0x00730301, '\u{00015B}'),
+ (0x1F300342, '\u{001F36}'),
+ (0x00470307, '\u{000120}'),
+ (0x0CC60CD5, '\u{000CC7}'),
+ (0x1F690300, '\u{001F6B}'),
+ (0x01030301, '\u{001EAF}'),
+ (0x00750311, '\u{000217}'),
+ (0x0930093C, '\u{000931}'),
+ (0x30613099, '\u{003062}'),
+ (0x00770323, '\u{001E89}'),
+ (0x00F50301, '\u{001E4D}'),
+ (0x00FC0300, '\u{0001DC}'),
+ (0x0049030F, '\u{000208}'),
+ (0x00690302, '\u{0000EE}'),
+ (0x1F230345, '\u{001F93}'),
+ (0x00F40300, '\u{001ED3}'),
+ (0x044B0308, '\u{0004F9}'),
+ (0x1F2E0345, '\u{001F9E}'),
+ (0x00650300, '\u{0000E8}'),
+ (0x00490308, '\u{0000CF}'),
+ (0x1F280301, '\u{001F2C}'),
+ (0x1F180300, '\u{001F1A}'),
+ (0x06270653, '\u{000622}'),
+ (0x1F200301, '\u{001F24}'),
+ (0x22030338, '\u{002204}'),
+ (0x00790304, '\u{000233}'),
+ (0x1F390300, '\u{001F3B}'),
+ (0x00610325, '\u{001E01}'),
+ (0x00790309, '\u{001EF7}'),
+ (0x01AF0303, '\u{001EEE}'),
+ (0x006F0301, '\u{0000F3}'),
+ (0x00640323, '\u{001E0D}'),
+ (0x304F3099, '\u{003050}'),
+ (0x1F010345, '\u{001F81}'),
+ (0x00CA0309, '\u{001EC2}'),
+ (0x03D20308, '\u{0003D4}'),
+ (0x1F500301, '\u{001F54}'),
+ (0x1F010300, '\u{001F03}'),
+ (0x03A90345, '\u{001FFC}'),
+ (0x04270308, '\u{0004F4}'),
+ (0x00530302, '\u{00015C}'),
+ (0x00520301, '\u{000154}'),
+ (0x00450306, '\u{000114}'),
+ (0x00530323, '\u{001E62}'),
+ (0x00670306, '\u{00011F}'),
+ (0x22760338, '\u{002278}'),
+ (0x04350300, '\u{000450}'),
+ (0x30B53099, '\u{0030B6}'),
+ (0x006F030B, '\u{000151}'),
+ (0x04180304, '\u{0004E2}'),
+ (0x00630307, '\u{00010B}'),
+ (0x03D20301, '\u{0003D3}'),
+ (0x227C0338, '\u{0022E0}'),
+ (0x00610304, '\u{000101}'),
+ (0x00A80300, '\u{001FED}'),
+ (0x00440331, '\u{001E0E}'),
+ (0x00650311, '\u{000207}'),
+ (0x00F80301, '\u{0001FF}'),
+ (0x0075030C, '\u{0001D4}'),
+ (0x00530327, '\u{00015E}'),
+ (0x30573099, '\u{003058}'),
+ (0x03B70345, '\u{001FC3}'),
+ (0x0069030C, '\u{0001D0}'),
+ (0x006E0327, '\u{000146}'),
+ (0x00780307, '\u{001E8B}'),
+ (0x1F000342, '\u{001F06}'),
+ (0x01B00303, '\u{001EEF}'),
+ (0x00470327, '\u{000122}'),
+ (0x00C20309, '\u{001EA8}'),
+ (0x006C032D, '\u{001E3D}'),
+ (0x304D3099, '\u{00304E}'),
+ (0x00690303, '\u{000129}'),
+ (0x01AF0323, '\u{001EF0}'),
+ (0x004F0302, '\u{0000D4}'),
+ (0x01020301, '\u{001EAE}'),
+ (0x04470308, '\u{0004F5}'),
+ (0x22A80338, '\u{0022AD}'),
+ (0x03C50300, '\u{001F7A}'),
+ (0x03910313, '\u{001F08}'),
+ (0x0064032D, '\u{001E13}'),
+ (0x00CF0301, '\u{001E2E}'),
+ (0x0061030F, '\u{000201}'),
+ (0x1EA10306, '\u{001EB7}'),
+ (0x00790323, '\u{001EF5}'),
+ (0x21900338, '\u{00219A}'),
+ (0x1F250345, '\u{001F95}'),
+ (0x004F0304, '\u{00014C}'),
+ (0x004F0306, '\u{00014E}'),
+ (0x30B33099, '\u{0030B4}'),
+ (0x00440327, '\u{001E10}'),
+ (0x0B920BD7, '\u{000B94}'),
+ (0x00550308, '\u{0000DC}'),
+ (0x00650323, '\u{001EB9}'),
+ (0x307B3099, '\u{00307C}'),
+ (0x004F030C, '\u{0001D1}'),
+ (0x00670304, '\u{001E21}'),
+ (0x006A030C, '\u{0001F0}'),
+ (0x00550323, '\u{001EE4}'),
+ (0x01A10301, '\u{001EDB}'),
+ (0x00590323, '\u{001EF4}'),
+ (0x00410300, '\u{0000C0}'),
+ (0x30B93099, '\u{0030BA}'),
+ (0x04230308, '\u{0004F0}'),
+ (0x00530301, '\u{00015A}'),
+ (0x30D8309A, '\u{0030DA}'),
+ (0x00750309, '\u{001EE7}'),
+ (0x00550330, '\u{001E74}'),
+ (0x00520327, '\u{000156}'),
+ (0x04370308, '\u{0004DF}'),
+ (0x00CA0300, '\u{001EC0}'),
+ (0x21940338, '\u{0021AE}'),
+ (0x03B10306, '\u{001FB0}'),
+ (0x1F610342, '\u{001F67}'),
+ (0x223C0338, '\u{002241}'),
+ (0x30D23099, '\u{0030D3}'),
+ (0x1F6B0345, '\u{001FAB}'),
+ (0x00490307, '\u{000130}'),
+ (0x00410323, '\u{001EA0}'),
+ (0x00550309, '\u{001EE6}'),
+ (0x0075030B, '\u{000171}'),
+ (0x30533099, '\u{003054}'),
+ (0x305D3099, '\u{00305E}'),
+ (0x004C0323, '\u{001E36}'),
+ (0x02260304, '\u{0001E0}'),
+ (0x0475030F, '\u{000477}'),
+ (0x00490328, '\u{00012E}'),
+ (0x1F210300, '\u{001F23}'),
+ (0x1F610301, '\u{001F65}'),
+ (0x1F210342, '\u{001F27}'),
+ (0x00670302, '\u{00011D}'),
+ (0x004E0301, '\u{000143}'),
+ (0x004E0303, '\u{0000D1}'),
+ (0x03990300, '\u{001FDA}'),
+ (0x03BF0301, '\u{0003CC}'),
+ (0x04150300, '\u{000400}'),
+ (0x03C90314, '\u{001F61}'),
+ (0x22A20338, '\u{0022AC}'),
+ (0x30DB3099, '\u{0030DC}'),
+ (0x03A50314, '\u{001F59}'),
+ (0x0052030F, '\u{000210}'),
+ (0x004E0323, '\u{001E46}'),
+ (0x1F0D0345, '\u{001F8D}'),
+ (0x1ECD0302, '\u{001ED9}'),
+ (0x00FC030C, '\u{0001DA}'),
+ (0x00D60304, '\u{00022A}'),
+ (0x1F000301, '\u{001F04}'),
+ (0x30CF3099, '\u{0030D0}'),
+ (0x04350306, '\u{0004D7}'),
+ (0x220B0338, '\u{00220C}'),
+ (0x00590300, '\u{001EF2}'),
+ (0x04170308, '\u{0004DE}'),
+ (0x006E030C, '\u{000148}'),
+ (0x004C030C, '\u{00013D}'),
+ (0x01690301, '\u{001E79}'),
+ (0x04100308, '\u{0004D2}'),
+ (0x01A00301, '\u{001EDA}'),
+ (0x0041030F, '\u{000200}'),
+ (0x00720301, '\u{000155}'),
+ (0x00450303, '\u{001EBC}'),
+ (0x1B0D1B35, '\u{001B0E}'),
+ (0x01120301, '\u{001E16}'),
+ (0x004A0302, '\u{000134}'),
+ (0x03BF0300, '\u{001F78}'),
+ (0x30593099, '\u{00305A}'),
+ (0x004F030B, '\u{000150}'),
+ (0x00610328, '\u{000105}'),
+ (0x30D83099, '\u{0030D9}'),
+ (0x1F2B0345, '\u{001F9B}'),
+ (0x1F400301, '\u{001F44}'),
+ (0x0065030F, '\u{000205}'),
+ (0x03AE0345, '\u{001FC4}'),
+ (0x01680301, '\u{001E78}'),
+ (0x00740326, '\u{00021B}'),
+ (0x03B90342, '\u{001FD6}'),
+ (0x1F6F0345, '\u{001FAF}'),
+ (0x03A50301, '\u{00038E}'),
+ (0x1F090345, '\u{001F89}'),
+ (0x00550300, '\u{0000D9}'),
+ (0x0041030C, '\u{0001CD}'),
+ (0x00430327, '\u{0000C7}'),
+ (0x00460307, '\u{001E1E}'),
+ (0x03B50301, '\u{0003AD}'),
+ (0x0D470D3E, '\u{000D4B}'),
+ (0x00610311, '\u{000203}'),
+ (0x00D50308, '\u{001E4E}'),
+ (0x03C90300, '\u{001F7C}'),
+ (0x04430306, '\u{00045E}'),
+ (0x1FFE0301, '\u{001FDE}'),
+ (0x03990301, '\u{00038A}'),
+ (0x00790307, '\u{001E8F}'),
+ (0x1E5A0304, '\u{001E5C}'),
+ (0x0075030F, '\u{000215}'),
+ (0x09C709BE, '\u{0009CB}'),
+ (0x1B071B35, '\u{001B08}'),
+ (0x00690330, '\u{001E2D}'),
+ (0x307B309A, '\u{00307D}'),
+ (0x30C83099, '\u{0030C9}'),
+ (0x22B30338, '\u{0022EB}'),
+ (0x01B00301, '\u{001EE9}'),
+ (0x00790300, '\u{001EF3}'),
+ (0x00570307, '\u{001E86}'),
+ (0x00690328, '\u{00012F}'),
+ (0x005A0323, '\u{001E92}'),
+ (0x03C50342, '\u{001FE6}'),
+ (0x004F0309, '\u{001ECE}'),
+ (0x1F290342, '\u{001F2F}'),
+ (0x01A00300, '\u{001EDC}'),
+ (0x1F2A0345, '\u{001F9A}'),
+ (0x014D0301, '\u{001E53}'),
+ (0x21D00338, '\u{0021CD}'),
+ (0x00550328, '\u{000172}'),
+ (0x00680331, '\u{001E96}'),
+ (0x0068030C, '\u{00021F}'),
+ (0x004C0301, '\u{000139}'),
+ (0x22860338, '\u{002288}'),
+ (0x039F0314, '\u{001F49}'),
+ (0x03A50306, '\u{001FE8}'),
+ (0x0B470B56, '\u{000B48}'),
+ (0x30753099, '\u{003076}'),
+ (0x1E5B0304, '\u{001E5D}'),
+ (0x1F6A0345, '\u{001FAA}'),
+ (0x00540327, '\u{000162}'),
+ (0x01020303, '\u{001EB4}'),
+ (0x039F0313, '\u{001F48}'),
+ (0x1F090342, '\u{001F0F}'),
+ (0x04100306, '\u{0004D0}'),
+ (0x014D0300, '\u{001E51}'),
+ (0x04430304, '\u{0004EF}'),
+ (0x21920338, '\u{00219B}'),
+ (0x22610338, '\u{002262}'),
+ (0x00F50304, '\u{00022D}'),
+ (0x03B90313, '\u{001F30}'),
+ (0x006F0308, '\u{0000F6}'),
+ (0x00730307, '\u{001E61}'),
+ (0x0075031B, '\u{0001B0}'),
+ (0x30B73099, '\u{0030B8}'),
+ (0x1E620307, '\u{001E68}'),
+ (0x00410306, '\u{000102}'),
+ (0x03970314, '\u{001F29}'),
+ (0x00630302, '\u{000109}'),
+ (0x006A0302, '\u{000135}'),
+ (0x00E50301, '\u{0001FB}'),
+ (0x00730326, '\u{000219}'),
+ (0x1F740345, '\u{001FC2}'),
+ (0x00650309, '\u{001EBB}'),
+ (0x005A030C, '\u{00017D}'),
+ (0x22250338, '\u{002226}'),
+ (0x03A90313, '\u{001F68}'),
+ (0x00720327, '\u{000157}'),
+ (0x1F090300, '\u{001F0B}'),
+ (0x04360308, '\u{0004DD}'),
+ (0x1F080345, '\u{001F88}'),
+ (0x00620331, '\u{001E07}'),
+ (0x22730338, '\u{002275}'),
+ (0x00560323, '\u{001E7E}'),
+ (0x004F0323, '\u{001ECC}'),
+ (0x022E0304, '\u{000230}'),
+ (0x06D50654, '\u{0006C0}'),
+ (0x03B10313, '\u{001F00}'),
+ (0x004F0303, '\u{0000D5}'),
+ (0x1F010301, '\u{001F05}'),
+ (0x00650304, '\u{000113}'),
+ (0x00450323, '\u{001EB8}'),
+ (0x0BC60BBE, '\u{000BCA}'),
+ (0x22650338, '\u{002271}'),
+ (0x03910314, '\u{001F09}'),
+ (0x01120300, '\u{001E14}'),
+ (0x004E0307, '\u{001E44}'),
+ (0x00680308, '\u{001E27}'),
+ (0x004F0311, '\u{00020E}'),
+ (0x00550303, '\u{000168}'),
+ (0x03A10314, '\u{001FEC}'),
+ (0x03B10301, '\u{0003AC}'),
+ (0x0055030F, '\u{000214}'),
+ (0x003E0338, '\u{00226F}'),
+ (0x01610307, '\u{001E67}'),
+ (0x1F040345, '\u{001F84}'),
+ (0x00450300, '\u{0000C8}'),
+ (0x1B091B35, '\u{001B0A}'),
+ (0x30FD3099, '\u{0030FE}'),
+ (0x1F680301, '\u{001F6C}'),
+ (0x00650303, '\u{001EBD}'),
+ (0x03B90304, '\u{001FD1}'),
+ (0x09C709D7, '\u{0009CC}'),
+ (0x042B0308, '\u{0004F8}'),
+ (0x004E0327, '\u{000145}'),
+ (0x1F630345, '\u{001FA3}'),
+ (0x04380306, '\u{000439}'),
+ (0x03B10314, '\u{001F01}'),
+ (0x00540326, '\u{00021A}'),
+ (0x00740307, '\u{001E6B}'),
+ (0x03C90301, '\u{0003CE}'),
+ (0x03990314, '\u{001F39}'),
+ (0x30B13099, '\u{0030B2}'),
+ (0x00750302, '\u{0000FB}'),
+ (0x0CC60CD6, '\u{000CC8}'),
+ (0x30BD3099, '\u{0030BE}'),
+ (0x006E0300, '\u{0001F9}'),
+ (0x1F390342, '\u{001F3F}'),
+ (0x02270304, '\u{0001E1}'),
+ (0x22080338, '\u{002209}'),
+ (0x04180306, '\u{000419}'),
+ (0x0044030C, '\u{00010E}'),
+ (0x0075030A, '\u{00016F}'),
+ (0x06270654, '\u{000623}'),
+ (0x00750306, '\u{00016D}'),
+ (0x03B70300, '\u{001F74}'),
+ (0x1F660345, '\u{001FA6}'),
+ (0x1F690345, '\u{001FA9}'),
+ (0x015B0307, '\u{001E65}'),
+ (0x1F280342, '\u{001F2E}'),
+ (0x1F700345, '\u{001FB2}'),
+ (0x1F0F0345, '\u{001F8F}'),
+ (0x00540331, '\u{001E6E}'),
+ (0x227B0338, '\u{002281}'),
+ (0x22870338, '\u{002289}'),
+ (0x1F010342, '\u{001F07}'),
+ (0x03A50308, '\u{0003AB}'),
+ (0x1F650345, '\u{001FA5}'),
+ (0x00D40300, '\u{001ED2}'),
+ (0x00F60304, '\u{00022B}'),
+ (0x0CBF0CD5, '\u{000CC0}'),
+ (0x1F380342, '\u{001F3E}'),
+ (0x22B20338, '\u{0022EA}'),
+ (0x0072030F, '\u{000211}'),
+ (0x30BF3099, '\u{0030C0}'),
+ (0x04E90308, '\u{0004EB}'),
+ (0x22830338, '\u{002285}'),
+ (0x03CB0300, '\u{001FE2}'),
+ (0x00CA0301, '\u{001EBE}'),
+ (0x00590304, '\u{000232}'),
+ (0x00690301, '\u{0000ED}'),
+ (0x305F3099, '\u{003060}'),
+ (0x00440307, '\u{001E0A}'),
+ (0x1ECC0302, '\u{001ED8}'),
+ (0x1F210345, '\u{001F91}'),
+ (0x00410311, '\u{000202}'),
+ (0x00720311, '\u{000213}'),
+ (0x03A50300, '\u{001FEA}'),
+ (0x1F590300, '\u{001F5B}'),
+ (0x00E40304, '\u{0001DF}'),
+ (0x1F500300, '\u{001F52}'),
+ (0x224D0338, '\u{00226D}'),
+ (0x006E0301, '\u{000144}'),
+ (0x0075032D, '\u{001E77}'),
+ (0x00F40301, '\u{001ED1}'),
+ (0x03C90342, '\u{001FF6}'),
+ (0x03B70301, '\u{0003AE}'),
+ (0x006E0307, '\u{001E45}'),
+ (0x00410304, '\u{000100}'),
+ (0x1F190301, '\u{001F1D}'),
+ (0x03B10304, '\u{001FB1}'),
+ (0x3078309A, '\u{00307A}'),
+ (0x00570323, '\u{001E88}'),
+ (0x04430308, '\u{0004F1}'),
+ (0x0045032D, '\u{001E18}'),
+ (0x04150308, '\u{000401}'),
+ (0x004F0328, '\u{0001EA}'),
+ (0x04D90308, '\u{0004DB}'),
+ (0x04060308, '\u{000407}'),
+ (0x00F40303, '\u{001ED7}'),
+ (0x03B90306, '\u{001FD0}'),
+ (0x00650307, '\u{000117}'),
+ (0x1F680342, '\u{001F6E}'),
+ (0x04380304, '\u{0004E3}'),
+ (0x1F410300, '\u{001F43}'),
+ (0x1FFE0300, '\u{001FDD}'),
+ (0x004F0301, '\u{0000D3}'),
+ (0x00640327, '\u{001E11}'),
+ (0x02290306, '\u{001E1D}'),
+ (0x007A0301, '\u{00017A}'),
+ (0x00620323, '\u{001E05}'),
+ (0x1F7C0345, '\u{001FF2}'),
+ (0x01B00323, '\u{001EF1}'),
+ (0x1F600301, '\u{001F64}'),
+ (0x30663099, '\u{003067}'),
+ (0x22640338, '\u{002270}'),
+ (0x1F310300, '\u{001F33}'),
+ (0x00610323, '\u{001EA1}'),
+ (0x1F480300, '\u{001F4A}'),
+ (0x00550301, '\u{0000DA}'),
+ (0x0C460C56, '\u{000C48}'),
+ (0x03CA0300, '\u{001FD2}'),
+ (0x01B7030C, '\u{0001EE}'),
+ (0x00720323, '\u{001E5B}'),
+ (0x1F200342, '\u{001F26}'),
+ (0x04300308, '\u{0004D3}'),
+ (0x22820338, '\u{002284}'),
+ (0x1F590301, '\u{001F5D}'),
+ (0x1F080342, '\u{001F0E}'),
+ (0x00440323, '\u{001E0C}'),
+ (0x1025102E, '\u{001026}'),
+ (0x03910304, '\u{001FB9}'),
+ (0x004B0331, '\u{001E34}'),
+ (0x00690300, '\u{0000EC}'),
+ (0x0048032E, '\u{001E2A}'),
+ (0x00630301, '\u{000107}'),
+ (0x1F690342, '\u{001F6F}'),
+ (0x03B50313, '\u{001F10}'),
+ (0x30CF309A, '\u{0030D1}'),
+ (0x004E030C, '\u{000147}'),
+ (0x0B470B57, '\u{000B4C}'),
+ (0x03910301, '\u{000386}'),
+ (0x00650328, '\u{000119}'),
+ (0x1FBF0300, '\u{001FCD}'),
+ (0x03B70342, '\u{001FC6}'),
+ (0x00450307, '\u{000116}'),
+ (0x1F380301, '\u{001F3C}'),
+ (0x3075309A, '\u{003077}'),
+ (0x004B0301, '\u{001E30}'),
+ (0x01030300, '\u{001EB1}'),
+ (0x00E20303, '\u{001EAB}'),
+ (0x00410302, '\u{0000C2}'),
+ (0x00650308, '\u{0000EB}'),
+ (0x00580307, '\u{001E8A}'),
+ (0x0054030C, '\u{000164}'),
+ (0x03C50313, '\u{001F50}'),
+ (0x03B50314, '\u{001F11}'),
+ (0x1B3E1B35, '\u{001B40}'),
+ (0x1F100301, '\u{001F14}'),
+ (0x3072309A, '\u{003074}'),
+ (0x1F280345, '\u{001F98}'),
+ (0x22770338, '\u{002279}'),
+ (0x227A0338, '\u{002280}'),
+ (0x00470302, '\u{00011C}'),
+ (0x00450308, '\u{0000CB}'),
+ (0x00550324, '\u{001E72}'),
+ (0x1F2C0345, '\u{001F9C}'),
+ (0x004B0327, '\u{000136}'),
+ (0x00490302, '\u{0000CE}'),
+ (0x00680302, '\u{000125}'),
+ (0x00520307, '\u{001E58}'),
+ (0x00610301, '\u{0000E1}'),
+ (0x004B030C, '\u{0001E8}'),
+ (0x00490309, '\u{001EC8}'),
+ (0x006C030C, '\u{00013E}'),
+ (0x004D0307, '\u{001E40}'),
+ (0x1E360304, '\u{001E38}'),
+ (0x03C50304, '\u{001FE1}'),
+ (0x0079030A, '\u{001E99}'),
+ (0x03970313, '\u{001F28}'),
+ (0x0054032D, '\u{001E70}'),
+ (0x1F490300, '\u{001F4B}'),
+ (0x1B421B35, '\u{001B43}'),
+ (0x03B70313, '\u{001F20}'),
+ (0x00EF0301, '\u{001E2F}'),
+ (0x00E70301, '\u{001E09}'),
+ (0x016A0308, '\u{001E7A}'),
+ (0x00CA0303, '\u{001EC4}'),
+ (0x03B10300, '\u{001F70}'),
+ (0x06D20654, '\u{0006D3}'),
+ (0x30D53099, '\u{0030D6}'),
+ (0x1F2F0345, '\u{001F9F}'),
+ (0x03B50300, '\u{001F72}'),
+ (0x00750324, '\u{001E73}'),
+ (0x04150306, '\u{0004D6}'),
+ (0x0065030C, '\u{00011B}'),
+ (0x00570302, '\u{000174}'),
+ (0x1EA00306, '\u{001EB6}'),
+ (0x1F070345, '\u{001F87}'),
+ (0x00A80301, '\u{000385}'),
+ (0x00790302, '\u{000177}'),
+ (0x006E032D, '\u{001E4B}'),
+ (0x006F030C, '\u{0001D2}'),
+ (0x03C90345, '\u{001FF3}'),
+ (0x00430302, '\u{000108}'),
+ (0x00790303, '\u{001EF9}'),
+ (0x00740323, '\u{001E6D}'),
+ (0x00E20309, '\u{001EA9}'),
+ (0x1F300300, '\u{001F32}'),
+ (0x006B0301, '\u{001E31}'),
+ (0x22920338, '\u{0022E3}'),
+ (0x03950314, '\u{001F19}'),
+ (0x1F290301, '\u{001F2D}'),
+ (0x00450328, '\u{000118}'),
+ (0x1FB60345, '\u{001FB7}'),
+ (0x00D50304, '\u{00022C}'),
+ (0x04300306, '\u{0004D1}'),
+ (0x00F50308, '\u{001E4F}'),
+ (0x1EA00302, '\u{001EAC}'),
+ (0x1F680300, '\u{001F6A}'),
+ (0x03970300, '\u{001FCA}'),
+ (0x00450301, '\u{0000C9}'),
+ (0x00690304, '\u{00012B}'),
+ (0x0BC60BD7, '\u{000BCC}'),
+ (0x006F0304, '\u{00014D}'),
+ (0x004F0308, '\u{0000D6}'),
+ (0x0BC70BBE, '\u{000BCB}'),
+ (0x0055030C, '\u{0001D3}'),
+ (0x03AC0345, '\u{001FB4}'),
+ (0x1FBF0342, '\u{001FCF}'),
+ (0x30D2309A, '\u{0030D4}'),
+ (0x00660307, '\u{001E1F}'),
+ (0x004E0300, '\u{0001F8}'),
+ (0x00790308, '\u{0000FF}'),
+ (0x0068032E, '\u{001E2B}'),
+ (0x0064030C, '\u{00010F}'),
+ (0x004F0307, '\u{00022E}'),
+ (0x1F590342, '\u{001F5F}'),
+ (0x30AF3099, '\u{0030B0}'),
+ (0x00E60304, '\u{0001E3}'),
+ (0x03C50301, '\u{0003CD}'),
+ (0x00770308, '\u{001E85}'),
+ (0x03B90314, '\u{001F31}'),
+ (0x00750323, '\u{001EE5}'),
+ (0x00590309, '\u{001EF6}'),
+ (0x0292030C, '\u{0001EF}'),
+ (0x00550306, '\u{00016C}'),
+ (0x00E60301, '\u{0001FD}'),
+ (0x016B0308, '\u{001E7B}'),
+ (0x004F030F, '\u{00020C}'),
+ (0x03BF0313, '\u{001F40}'),
+ (0x00D80301, '\u{0001FE}'),
+ (0x00C20303, '\u{001EAA}'),
+ (0x1F510300, '\u{001F53}'),
+ (0x01B00309, '\u{001EED}'),
+ (0x004E032D, '\u{001E4A}'),
+ (0x006F0309, '\u{001ECF}'),
+ (0x04180300, '\u{00040D}'),
+ (0x22A90338, '\u{0022AE}'),
+ (0x1F680345, '\u{001FA8}'),
+ (0x1B3C1B35, '\u{001B3D}'),
+ (0x1F400300, '\u{001F42}'),
+ (0x1F0B0345, '\u{001F8B}'),
+ (0x03C50306, '\u{001FE0}'),
+ (0x0044032D, '\u{001E12}'),
+ (0x0CCA0CD5, '\u{000CCB}'),
+ (0x00EA0303, '\u{001EC5}'),
+ (0x04230306, '\u{00040E}'),
+ (0x00C70301, '\u{001E08}'),
+ (0x007A030C, '\u{00017E}'),
+ (0x00670307, '\u{000121}'),
+ (0x00450311, '\u{000206}'),
+ (0x006F0300, '\u{0000F2}'),
+ (0x30BB3099, '\u{0030BC}'),
+ (0x04180308, '\u{0004E4}'),
+ (0x30513099, '\u{003052}'),
+ (0x006C0323, '\u{001E37}'),
+ (0x03B70314, '\u{001F21}'),
+ (0x0077030A, '\u{001E98}'),
+ (0x00690323, '\u{001ECB}'),
+ (0x00610303, '\u{0000E3}'),
+ (0x30F13099, '\u{0030F9}'),
+ (0x03B10345, '\u{001FB3}'),
+ (0x0D460D3E, '\u{000D4A}'),
+ (0x03B90300, '\u{001F76}'),
+ (0x21D40338, '\u{0021CE}'),
+ (0x1F620345, '\u{001FA2}'),
+ (0x00770302, '\u{000175}'),
+ (0x00FC0304, '\u{0001D6}'),
+ (0x01130301, '\u{001E17}'),
+ (0x30683099, '\u{003069}'),
+ (0x1F600342, '\u{001F66}'),
+ (0x00680323, '\u{001E25}'),
+ (0x03950313, '\u{001F18}'),
+ (0x00EA0300, '\u{001EC1}'),
+ (0x03CB0342, '\u{001FE7}'),
+ (0x22430338, '\u{002244}'),
+ (0x30783099, '\u{003079}'),
+ (0x03990313, '\u{001F38}'),
+ (0x00490330, '\u{001E2C}'),
+ (0x00770307, '\u{001E87}'),
+ (0x00650301, '\u{0000E9}'),
+ (0x00680327, '\u{001E29}'),
+ (0x22B50338, '\u{0022ED}'),
+ (0x03B10342, '\u{001FB6}'),
+ (0x03910306, '\u{001FB8}'),
+ (0x004D0301, '\u{001E3E}'),
+ (0x00410309, '\u{001EA2}'),
+ (0x1B051B35, '\u{001B06}'),
+ (0x003C0338, '\u{00226E}'),
+ (0x00590308, '\u{000178}'),
+ (0x01030303, '\u{001EB5}'),
+ (0x00480327, '\u{001E28}'),
+ (0x006D0323, '\u{001E43}'),
+ (0x30643099, '\u{003065}'),
+ (0x04560308, '\u{000457}'),
+ (0x00590302, '\u{000176}'),
+ (0x06C10654, '\u{0006C2}'),
+ (0x043A0301, '\u{00045C}'),
+ (0x00E20300, '\u{001EA7}'),
+ (0x03950301, '\u{000388}'),
+ (0x00630327, '\u{0000E7}'),
+ (0x017F0307, '\u{001E9B}'),
+ (0x06480654, '\u{000624}'),
+ (0x30AB3099, '\u{0030AC}'),
+ (0x01A00323, '\u{001EE2}'),
+ (0x04D80308, '\u{0004DA}'),
+ (0x005A0331, '\u{001E94}'),
+ (0x0067030C, '\u{0001E7}'),
+ (0x039F0300, '\u{001FF8}'),
+ (0x00650327, '\u{000229}'),
+ (0x00490323, '\u{001ECA}'),
+ (0x1F110300, '\u{001F13}'),
+ (0x1F510342, '\u{001F57}'),
+ (0x004D0323, '\u{001E42}'),
+ (0x1F300301, '\u{001F34}'),
+ (0x006C0327, '\u{00013C}'),
+ (0x1F050345, '\u{001F85}'),
+ (0x01A10300, '\u{001EDD}'),
+ (0x04160308, '\u{0004DC}'),
+ (0x00640307, '\u{001E0B}'),
+ (0x004C032D, '\u{001E3C}'),
+ (0x03C10314, '\u{001FE5}'),
+ (0x01EA0304, '\u{0001EC}'),
+ (0x1F080300, '\u{001F0A}'),
+ (0x00650302, '\u{0000EA}'),
+ (0x03910300, '\u{001FBA}'),
+ (0x00700301, '\u{001E55}'),
+ (0x1F020345, '\u{001F82}'),
+ (0x01020309, '\u{001EB2}'),
+ (0x00750303, '\u{000169}'),
+ (0x1F0C0345, '\u{001F8C}'),
+ (0x03CB0301, '\u{0003B0}'),
+ (0x00740308, '\u{001E97}'),
+ (0x03950300, '\u{001FC8}'),
+ (0x227D0338, '\u{0022E1}'),
+ (0x007A0323, '\u{001E93}'),
+ (0x006F0311, '\u{00020F}'),
+ (0x006F0328, '\u{0001EB}'),
+ (0x1F200300, '\u{001F22}'),
+ (0x1F190300, '\u{001F1B}'),
+ (0x00560303, '\u{001E7C}'),
+ (0x006B030C, '\u{0001E9}'),
+ (0x04E80308, '\u{0004EA}'),
+ (0x03A90300, '\u{001FFA}'),
+ (0x00A80342, '\u{001FC1}'),
+ (0x04360306, '\u{0004C2}'),
+ (0x00DC0301, '\u{0001D7}'),
+ (0x00750304, '\u{00016B}'),
+ (0x22450338, '\u{002247}'),
+ (0x00490304, '\u{00012A}'),
+ (0x04380308, '\u{0004E5}'),
+ (0x0D460D57, '\u{000D4C}'),
+ (0x00750300, '\u{0000F9}'),
+ (0x22B40338, '\u{0022EC}'),
+ (0x00750308, '\u{0000FC}'),
+ (0x03C50314, '\u{001F51}'),
+ (0x01600307, '\u{001E66}'),
+ (0x04160306, '\u{0004C1}'),
+ (0x0055031B, '\u{0001AF}'),
+ (0x22AB0338, '\u{0022AF}'),
+ (0x014C0300, '\u{001E50}'),
+ (0x1F310342, '\u{001F37}'),
+ (0x1F260345, '\u{001F96}'),
+ (0x22910338, '\u{0022E2}'),
+ (0x00500301, '\u{001E54}'),
+ (0x004C0327, '\u{00013B}'),
+ (0x005A0301, '\u{000179}'),
+ (0x00420307, '\u{001E02}'),
+ (0x03C10313, '\u{001FE4}'),
+ (0x1F410301, '\u{001F45}'),
+ (0x00500307, '\u{001E56}'),
+ (0x0043030C, '\u{00010C}'),
+ (0x00730323, '\u{001E63}'),
+ (0x30553099, '\u{003056}'),
+ (0x306F3099, '\u{003070}'),
+ (0x044D0308, '\u{0004ED}'),
+ (0x1F670345, '\u{001FA7}'),
+ (0x01AF0301, '\u{001EE8}'),
+ (0x1F290300, '\u{001F2B}'),
+ (0x1B3F1B35, '\u{001B41}'),
+ (0x00450302, '\u{0000CA}'),
+ (0x006F0306, '\u{00014F}'),
+ (0x00FC0301, '\u{0001D8}'),
+ (0x30F23099, '\u{0030FA}'),
+ (0x1F2D0345, '\u{001F9D}'),
+ (0x014C0301, '\u{001E52}'),
+ (0x00610308, '\u{0000E4}'),
+ (0x1F600345, '\u{001FA0}'),
+ (0x1F0A0345, '\u{001F8A}'),
+ (0x00610306, '\u{000103}'),
+ (0x1F600300, '\u{001F62}'),
+ (0x01AF0300, '\u{001EEA}'),
+ (0x043E0308, '\u{0004E7}'),
+ (0x22230338, '\u{002224}'),
+ (0x03CA0301, '\u{000390}'),
+ (0x30D5309A, '\u{0030D7}'),
+ (0x1F220345, '\u{001F92}'),
+ (0x00D50301, '\u{001E4C}'),
+ (0x1F6C0345, '\u{001FAC}'),
+ (0x00540307, '\u{001E6A}'),
+ (0x1E370304, '\u{001E39}'),
+ (0x0DD90DCA, '\u{000DDA}'),
+ (0x01A10303, '\u{001EE1}'),
+ (0x0048030C, '\u{00021E}'),
+ (0x00EA0309, '\u{001EC3}'),
+ (0x0052030C, '\u{000158}'),
+ (0x00D40303, '\u{001ED6}'),
+ (0x0045030C, '\u{00011A}'),
+ (0x30EF3099, '\u{0030F7}'),
+ (0x00480302, '\u{000124}'),
+ (0x00520323, '\u{001E5A}'),
+ (0x00C20300, '\u{001EA6}'),
+ (0x0074032D, '\u{001E71}'),
+ (0x042D0308, '\u{0004EC}'),
+ (0x0DD90DDF, '\u{000DDE}'),
+ (0x00410308, '\u{0000C4}'),
+ (0x0474030F, '\u{000476}'),
+ (0x00C60301, '\u{0001FC}'),
+ (0x1F310301, '\u{001F35}'),
+ (0x1F610300, '\u{001F63}'),
+ (0x0CC60CC2, '\u{000CCA}'),
+ (0x00C20301, '\u{001EA4}'),
+ (0x03C50308, '\u{0003CB}'),
+ (0x00E20301, '\u{001EA5}'),
+ (0x1F500342, '\u{001F56}'),
+ (0x00610300, '\u{0000E0}'),
+ (0x00490311, '\u{00020A}'),
+ (0x00670327, '\u{000123}'),
+ (0x00590307, '\u{001E8E}'),
+ (0x03970345, '\u{001FCC}'),
+ (0x00D40309, '\u{001ED4}'),
+ (0x01A00303, '\u{001EE0}'),
+ (0x1FFE0342, '\u{001FDF}'),
+ (0x041A0301, '\u{00040C}'),
+ (0x0074030C, '\u{000165}'),
+ (0x00DC0300, '\u{0001DB}'),
+ (0x00780308, '\u{001E8D}'),
+ (0x00DC0304, '\u{0001D5}'),
+ (0x00610302, '\u{0000E2}'),
+ (0x005A0302, '\u{001E90}'),
+ (0x0933093C, '\u{000934}'),
+ (0x004F031B, '\u{0001A0}'),
+ (0x00520311, '\u{000212}'),
+ (0x006E0303, '\u{0000F1}'),
+ (0x0045030F, '\u{000204}'),
+ (0x01AF0309, '\u{001EEC}'),
+ (0x00450304, '\u{000112}'),
+ (0x1F210301, '\u{001F25}'),
+ (0x022F0304, '\u{000231}'),
+ (0x03990306, '\u{001FD8}'),
+ (0x004E0331, '\u{001E48}'),
+ (0x1F380300, '\u{001F3A}'),
+ (0x00490306, '\u{00012C}'),
+ (0x00690306, '\u{00012D}'),
+ (0x1F060345, '\u{001F86}'),
+ (0x00490301, '\u{0000CD}'),
+ (0x00570300, '\u{001E80}'),
+ (0x30F03099, '\u{0030F8}'),
+ (0x0053030C, '\u{000160}'),
+ (0x00490300, '\u{0000CC}'),
+ (0x30723099, '\u{003073}'),
+ (0x1F280300, '\u{001F2A}'),
+ (0x00480307, '\u{001E22}'),
+ (0x01A00309, '\u{001EDE}'),
+ (0x01EB0304, '\u{0001ED}'),
+ (0x1E630307, '\u{001E69}'),
+ (0x006F0323, '\u{001ECD}'),
+ (0x00410303, '\u{0000C3}'),
+ (0x03910345, '\u{001FBC}'),
+ (0x00410328, '\u{000104}'),
+ (0x00680307, '\u{001E23}'),
+ (0x006E0331, '\u{001E49}'),
+ (0x0DDC0DCA, '\u{000DDD}'),
+ (0x00580308, '\u{001E8C}'),
+ (0x00410301, '\u{0000C1}'),
+ (0x30C43099, '\u{0030C5}'),
+ (0x00420323, '\u{001E04}'),
+ (0x00730302, '\u{00015D}'),
];
-
pub(crate) fn composition_table_astral(c1: char, c2: char) -> Option<char> {
match (c1, c2) {
+ ('\u{105D2}', '\u{0307}') => Some('\u{105C9}'),
+ ('\u{105DA}', '\u{0307}') => Some('\u{105E4}'),
('\u{11099}', '\u{110BA}') => Some('\u{1109A}'),
('\u{1109B}', '\u{110BA}') => Some('\u{1109C}'),
('\u{110A5}', '\u{110BA}') => Some('\u{110AB}'),
@@ -3737,16 +1226,33 @@
('\u{11132}', '\u{11127}') => Some('\u{1112F}'),
('\u{11347}', '\u{1133E}') => Some('\u{1134B}'),
('\u{11347}', '\u{11357}') => Some('\u{1134C}'),
+ ('\u{11382}', '\u{113C9}') => Some('\u{11383}'),
+ ('\u{11384}', '\u{113BB}') => Some('\u{11385}'),
+ ('\u{1138B}', '\u{113C2}') => Some('\u{1138E}'),
+ ('\u{11390}', '\u{113C9}') => Some('\u{11391}'),
+ ('\u{113C2}', '\u{113B8}') => Some('\u{113C7}'),
+ ('\u{113C2}', '\u{113C2}') => Some('\u{113C5}'),
+ ('\u{113C2}', '\u{113C9}') => Some('\u{113C8}'),
('\u{114B9}', '\u{114B0}') => Some('\u{114BC}'),
('\u{114B9}', '\u{114BA}') => Some('\u{114BB}'),
('\u{114B9}', '\u{114BD}') => Some('\u{114BE}'),
('\u{115B8}', '\u{115AF}') => Some('\u{115BA}'),
('\u{115B9}', '\u{115AF}') => Some('\u{115BB}'),
('\u{11935}', '\u{11930}') => Some('\u{11938}'),
+ ('\u{1611E}', '\u{1611E}') => Some('\u{16121}'),
+ ('\u{1611E}', '\u{1611F}') => Some('\u{16123}'),
+ ('\u{1611E}', '\u{16120}') => Some('\u{16125}'),
+ ('\u{1611E}', '\u{16129}') => Some('\u{16122}'),
+ ('\u{16121}', '\u{1611F}') => Some('\u{16126}'),
+ ('\u{16121}', '\u{16120}') => Some('\u{16128}'),
+ ('\u{16122}', '\u{1611F}') => Some('\u{16127}'),
+ ('\u{16129}', '\u{1611F}') => Some('\u{16124}'),
+ ('\u{16D63}', '\u{16D67}') => Some('\u{16D69}'),
+ ('\u{16D67}', '\u{16D67}') => Some('\u{16D68}'),
+ ('\u{16D69}', '\u{16D67}') => Some('\u{16D6A}'),
_ => None,
}
}
-
pub(crate) const CANONICAL_DECOMPOSED_CHARS: &[char] = &[
'\u{0041}',
'\u{0300}',
@@ -6551,6 +4057,10 @@
'\u{05BF}',
'\u{05E4}',
'\u{05BF}',
+ '\u{105D2}',
+ '\u{0307}',
+ '\u{105DA}',
+ '\u{0307}',
'\u{11099}',
'\u{110BA}',
'\u{1109B}',
@@ -6565,6 +4075,20 @@
'\u{1133E}',
'\u{11347}',
'\u{11357}',
+ '\u{11382}',
+ '\u{113C9}',
+ '\u{11384}',
+ '\u{113BB}',
+ '\u{1138B}',
+ '\u{113C2}',
+ '\u{11390}',
+ '\u{113C9}',
+ '\u{113C2}',
+ '\u{113C2}',
+ '\u{113C2}',
+ '\u{113B8}',
+ '\u{113C2}',
+ '\u{113C9}',
'\u{114B9}',
'\u{114BA}',
'\u{114B9}',
@@ -6577,6 +4101,32 @@
'\u{115AF}',
'\u{11935}',
'\u{11930}',
+ '\u{1611E}',
+ '\u{1611E}',
+ '\u{1611E}',
+ '\u{16129}',
+ '\u{1611E}',
+ '\u{1611F}',
+ '\u{16129}',
+ '\u{1611F}',
+ '\u{1611E}',
+ '\u{16120}',
+ '\u{1611E}',
+ '\u{1611E}',
+ '\u{1611F}',
+ '\u{1611E}',
+ '\u{16129}',
+ '\u{1611F}',
+ '\u{1611E}',
+ '\u{1611E}',
+ '\u{16120}',
+ '\u{16D67}',
+ '\u{16D67}',
+ '\u{16D63}',
+ '\u{16D67}',
+ '\u{16D63}',
+ '\u{16D67}',
+ '\u{16D67}',
'\u{1D157}',
'\u{1D165}',
'\u{1D158}',
@@ -7155,4133 +4705,2253 @@
'\u{9F3B}',
'\u{2A600}',
];
+
pub(crate) const CANONICAL_DECOMPOSED_SALT: &[u16] = &[
- 0xcae,
- 0xe,
- 0x0,
- 0x0,
- 0x45a,
- 0x23f,
- 0x0,
- 0x1e8,
- 0x28,
- 0x280,
- 0x0,
- 0x6,
- 0x14c,
- 0x201,
- 0x6,
- 0x20,
- 0x3,
- 0x0,
- 0x71,
- 0x18b,
- 0xd,
- 0x14d,
- 0xd3,
- 0x0,
- 0x2,
- 0x85,
- 0x45,
- 0xa,
- 0x4,
- 0xe9,
- 0x21,
- 0x0,
- 0x0,
- 0xaa,
- 0x2,
- 0x105,
- 0x0,
- 0x1b5,
- 0xd,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x6,
- 0x67,
- 0x8,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x47,
- 0x32,
- 0x0,
- 0x0,
- 0x3c,
- 0x45,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x10,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0xce,
- 0x2c,
- 0x0,
- 0x1d,
- 0x0,
- 0x12,
- 0x0,
- 0x0,
- 0x11,
- 0x3,
- 0x1c,
- 0x7,
- 0x0,
- 0x1,
- 0x6a,
- 0x1,
- 0x16,
- 0x0,
- 0x6f,
- 0x0,
- 0x1,
- 0x25,
- 0x0,
- 0x27,
- 0x10,
- 0x0,
- 0x22,
- 0x0,
- 0xbc,
- 0x0,
- 0x9,
- 0x0,
- 0x0,
- 0x15,
- 0x0,
- 0x0,
- 0x13,
- 0x0,
- 0x87,
- 0x0,
- 0x3a,
- 0x27,
- 0x0,
- 0x5,
- 0x16,
- 0x5,
- 0x14,
- 0x12,
- 0x21,
- 0x5,
- 0x2,
- 0x1,
- 0x0,
- 0x15,
- 0x26,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x1,
- 0x17,
- 0x19,
- 0x0,
- 0x4,
- 0x0,
- 0x3,
- 0x0,
- 0x10,
- 0x1,
- 0x1,
- 0x0,
- 0x5,
- 0x1,
- 0x0,
- 0x0,
- 0x22,
- 0x0,
- 0x2,
- 0x4,
- 0x13,
- 0x0,
- 0x11,
- 0x5a,
- 0x5,
- 0x13,
- 0xd,
- 0x4e,
- 0x8,
- 0x4,
- 0x18,
- 0x9,
- 0x64,
- 0x26,
- 0x0,
- 0x11,
- 0x0,
- 0x5,
- 0x30,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x3e,
- 0x46,
- 0x5,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x37,
- 0x0,
- 0x0,
- 0x5,
- 0x3,
- 0x0,
- 0x13,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x6,
- 0x0,
- 0xb,
- 0x1c,
- 0x1,
- 0x0,
- 0x5,
- 0x2f,
- 0x1,
- 0x0,
- 0x8,
- 0x1d,
- 0x30,
- 0x0,
- 0x25,
- 0x2,
- 0x12,
- 0x0,
- 0x0,
- 0x23,
- 0x2,
- 0x0,
- 0x0,
- 0xb,
- 0x18,
- 0xe,
- 0x0,
- 0x11,
- 0xc,
- 0x15,
- 0x2,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x8,
- 0x8,
- 0x8,
- 0x0,
- 0x0,
- 0x9,
- 0xe,
- 0x0,
- 0x1,
- 0x9,
- 0x2c,
- 0x3,
- 0x1,
- 0x16,
- 0x11,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x18,
- 0x1,
- 0x30,
- 0x4,
- 0xc,
- 0xe,
- 0x9,
- 0x0,
- 0x3,
- 0xb,
- 0x0,
- 0x2,
- 0x5,
- 0x0,
- 0x10,
- 0x3,
- 0x2,
- 0x6,
- 0xb,
- 0x8,
- 0xa,
- 0x0,
- 0x8,
- 0x3,
- 0x1,
- 0x25,
- 0x3,
- 0x1b,
- 0x2,
- 0x12,
- 0x5,
- 0x7,
- 0x12,
- 0x0,
- 0x10,
- 0x0,
- 0x11,
- 0x0,
- 0x9,
- 0x0,
- 0x9,
- 0x0,
- 0xc,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x8,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x17,
- 0x0,
- 0x0,
- 0x3,
- 0xc,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x43,
- 0x0,
- 0x0,
- 0xb,
- 0x5,
- 0x9,
- 0x0,
- 0x0,
- 0x22,
- 0x2,
- 0x4,
- 0x2,
- 0x2,
- 0x1,
- 0x1,
- 0x14,
- 0x1,
- 0x31,
- 0x0,
- 0x4,
- 0x20,
- 0x9,
- 0x7,
- 0x1,
- 0x21,
- 0x16,
- 0x1,
- 0x2,
- 0x0,
- 0x6,
- 0x0,
- 0xe,
- 0x0,
- 0x5,
- 0x12,
- 0xe,
- 0x4,
- 0x0,
- 0x0,
- 0x1d,
- 0x0,
- 0x0,
- 0x6,
- 0x0,
- 0xa,
- 0x0,
- 0x0,
- 0x0,
- 0x16,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x8,
- 0x0,
- 0x1,
- 0x0,
- 0xb,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x16,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x1d,
- 0x7,
- 0x0,
- 0x1,
- 0x6,
- 0x4,
- 0x1,
- 0x3,
- 0xe,
- 0x9,
- 0x10,
- 0x8,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x2,
- 0x2,
- 0x22,
- 0x0,
- 0x0,
- 0x4,
- 0x13,
- 0x11,
- 0x0,
- 0x2,
- 0xd,
- 0x0,
- 0x1,
- 0x4,
- 0xc,
- 0x1,
- 0x16,
- 0xe,
- 0x2,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x15,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0xc,
- 0x0,
- 0x5,
- 0x4,
- 0x0,
- 0x0,
- 0x11,
- 0xd,
- 0x11,
- 0x0,
- 0x4,
- 0x0,
- 0x3,
- 0x2,
- 0x1,
- 0x3,
- 0x1,
- 0x2,
- 0x2,
- 0x2,
- 0x1,
- 0x1,
- 0x3,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x2,
- 0x2,
- 0x1,
- 0xd,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x6,
- 0xd,
- 0x1,
- 0x1,
- 0x4,
- 0xc,
- 0x2,
- 0x6,
- 0x0,
- 0x4,
- 0x27,
- 0x1c,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0xa,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0xf,
- 0x7,
- 0x8,
- 0x0,
- 0x3,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0xf,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x3,
- 0x0,
- 0x16,
- 0xb,
- 0x5,
- 0x0,
- 0x0,
- 0x2,
- 0x8,
- 0x4,
- 0x0,
- 0x8,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x4,
- 0x0,
- 0x1,
- 0xb,
- 0x1,
- 0x0,
- 0x0,
- 0x18,
- 0x9,
- 0x4,
- 0x7,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x1e,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x9,
- 0x0,
- 0x0,
- 0x3,
- 0xa,
- 0x2,
- 0x3,
- 0x1,
- 0x0,
- 0x4,
- 0x0,
- 0x4,
- 0x1f,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x24,
- 0x7,
- 0x5,
- 0x2,
- 0x2,
- 0xa,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0xc,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0xb,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x6,
- 0x2,
- 0xc,
- 0xe,
- 0x1e,
- 0x0,
- 0x0,
- 0x10,
- 0x0,
- 0x1,
- 0x2,
- 0xd,
- 0x3,
- 0x0,
- 0x6,
- 0x0,
- 0x2,
- 0xa,
- 0x4,
- 0x0,
- 0xf,
- 0x10,
- 0x2,
- 0x1,
- 0x2,
- 0x6,
- 0x0,
- 0x0,
- 0xb,
- 0x0,
- 0x5,
- 0xd,
- 0x2,
- 0x0,
- 0x3,
- 0x7,
- 0x0,
- 0x5,
- 0x4,
- 0x0,
- 0x0,
- 0x6,
- 0x1,
- 0x0,
- 0x0,
- 0xf,
- 0x3,
- 0x0,
- 0x0,
- 0xc,
- 0x0,
- 0x17,
- 0x2,
- 0x9,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x7,
- 0x1,
- 0x3,
- 0xd,
- 0x0,
- 0x5,
- 0x7,
- 0x4,
- 0x8,
- 0x0,
- 0xb,
- 0x8,
- 0x9,
- 0x1,
- 0x0,
- 0x0,
- 0x9,
- 0x5,
- 0x0,
- 0x8,
- 0x1,
- 0x0,
- 0x6,
- 0x0,
- 0x8,
- 0x0,
- 0x7,
- 0x0,
- 0x2,
- 0x2,
- 0x5,
- 0x4,
- 0x5,
- 0x0,
- 0x0,
- 0x1,
- 0x13,
- 0x8,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0xa,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0xc,
- 0x2,
- 0x4,
- 0x2,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x4,
- 0x0,
- 0x3,
- 0x2,
- 0x7,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x2,
- 0x7,
- 0x0,
- 0x4,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x9,
- 0x2,
- 0x2,
- 0x6,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x6,
- 0x5,
- 0x2,
- 0x0,
- 0x0,
- 0x4,
- 0x1,
- 0x2,
- 0x11,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x5,
- 0x0,
- 0x1,
- 0x0,
- 0x7,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0xe,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x10,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x2,
- 0x2,
- 0x6,
- 0x0,
- 0x9,
- 0x0,
- 0x6,
- 0x0,
- 0x1,
- 0x6,
- 0x5,
- 0x1,
- 0x1,
- 0x2,
- 0x8,
- 0x2,
- 0x3,
- 0x1,
- 0x4,
- 0x1,
- 0x0,
- 0x0,
- 0xd,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x2f,
- 0x1,
- 0x2,
- 0x1,
- 0x6,
- 0x15,
- 0x0,
- 0x0,
- 0x0,
- 0xc,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1a,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x7,
- 0x0,
- 0x9,
- 0x2,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x2,
- 0x0,
- 0xa,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0xe,
- 0x2,
- 0x2,
- 0x9,
- 0x2,
- 0xb,
- 0x2,
- 0x1,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0xa,
- 0x3,
- 0x1,
- 0x1,
- 0x2,
- 0x2,
- 0x2,
- 0x0,
- 0x2,
- 0x9,
- 0x0,
- 0x0,
- 0x1,
- 0x6,
- 0x1,
- 0x0,
- 0x7,
- 0x18,
- 0x1,
- 0x0,
- 0x7,
- 0x1,
- 0x1,
- 0x0,
- 0x19,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0xb,
- 0x1,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x2,
- 0x6,
- 0x2,
- 0x1,
- 0x5,
- 0x1,
- 0x6,
- 0x3,
- 0x1,
- 0x2,
- 0x1,
- 0x1,
- 0x1c,
- 0x6,
- 0x2,
- 0x2,
- 0x3,
- 0x1,
- 0x8,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x3,
- 0x1,
- 0x16,
- 0x6,
- 0xb,
- 0x0,
- 0x4,
- 0x4,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x16,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x4,
- 0x9,
- 0xf,
- 0x5,
- 0x0,
- 0x1,
- 0x1,
- 0x8,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x8,
- 0x1,
- 0x2,
- 0x1,
- 0x3,
- 0x2,
- 0x0,
- 0x2,
- 0x4,
- 0x1,
- 0x1,
- 0x4,
- 0x0,
- 0xf,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x9,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x2,
- 0x4,
- 0x1,
- 0x0,
- 0x7,
- 0x5,
- 0x3,
- 0x2,
- 0xa,
- 0x2,
- 0x3,
- 0x0,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x6,
- 0x2,
- 0xa,
- 0x0,
- 0x1,
- 0x6,
- 0x5,
- 0x0,
- 0x2,
- 0x3,
- 0x1,
- 0x8,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x14,
- 0x0,
- 0x1,
- 0x2,
- 0x5,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x9,
- 0x0,
- 0x3,
- 0x1,
- 0x0,
- 0xd,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0xe,
- 0x0,
- 0x2,
- 0x17,
- 0x5,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x8,
- 0x0,
- 0x1,
- 0x9,
- 0x3,
- 0x0,
- 0x1,
- 0x7,
- 0x0,
- 0x4,
- 0x1,
- 0x8,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x2,
- 0x5,
- 0x0,
- 0x5,
- 0x4,
- 0x1,
- 0x0,
- 0x3,
- 0x0,
- 0x2,
- 0x2,
- 0x3,
- 0x1,
- 0xf,
- 0x1,
- 0x3,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x5,
- 0x0,
- 0x2,
- 0x7,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x8,
- 0x6,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0xa,
- 0x4,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x9,
- 0x1,
- 0x1,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0x10,
- 0x1,
- 0x2,
- 0x5,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x2,
- 0x2,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x3,
- 0x1,
- 0x3,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x6,
- 0x4,
- 0x1,
- 0x1,
- 0x2,
- 0x8,
- 0x3,
- 0x3,
- 0x0,
- 0x0,
- 0x4,
- 0x2,
- 0x1,
- 0xe,
- 0x20,
- 0x0,
- 0x1,
- 0x1,
- 0xc,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0xa,
- 0x2,
- 0x1,
- 0x4,
- 0x6,
- 0x0,
- 0x0,
- 0x0,
- 0x6,
- 0x6,
- 0x0,
- 0x3,
- 0x0,
- 0x4,
- 0x1,
- 0x7,
- 0x1,
- 0x6,
- 0x8,
- 0x1,
- 0x7,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x2,
- 0x3,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0x1,
- 0x8,
- 0x0,
- 0x3,
- 0x1,
- 0x1,
- 0x6,
- 0x2,
- 0x0,
- 0x2,
- 0x4,
- 0x6,
- 0x1,
- 0x4,
- 0x3,
- 0x6,
- 0x1,
- 0x3,
- 0x2,
- 0x4,
- 0x2,
- 0x0,
- 0x6,
- 0x2,
- 0x0,
- 0x5,
- 0x1,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x1,
- 0x2,
- 0x2,
- 0x7,
- 0x3,
- 0x3,
- 0x0,
- 0x1,
- 0x7,
- 0x1,
- 0xe,
- 0x0,
- 0x1,
- 0x0,
- 0xb,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x1,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x3,
- 0x6,
- 0x3,
- 0x2,
- 0x6,
- 0x0,
- 0x1,
- 0x3,
- 0x1,
- 0x2,
- 0x1,
- 0x2,
- 0x3,
- 0x0,
- 0x3,
- 0x1,
- 0x2,
- 0x4,
- 0x3,
- 0x0,
- 0x0,
- 0x10,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x3,
- 0x1,
- 0x2,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x5,
- 0x5,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x4,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x7,
- 0xb,
- 0x3,
- 0x1,
- 0x2,
- 0x1,
- 0x2,
- 0x1,
- 0x7,
- 0x1,
- 0x4,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x3,
- 0x1,
- 0x2,
- 0x2,
- 0x5,
- 0x1,
- 0x1,
- 0x9,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0x8,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x5,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x4,
- 0x9,
- 0x6,
- 0x0,
- 0x9,
- 0x6,
- 0x2,
- 0x1,
- 0x3,
- 0x1,
- 0x1,
- 0x2,
- 0x4,
- 0x2,
- 0x3,
- 0x2,
- 0x0,
- 0x6,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x5,
- 0xa,
- 0x1,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0xd,
- 0x0,
- 0x0,
- 0x3,
- 0x3,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x4,
- 0x2,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0x2,
- 0x3,
- 0x5,
- 0x5,
- 0x0,
- 0x0,
- 0x5,
- 0x1,
- 0x1,
- 0x10,
- 0x1,
- 0x3,
- 0x2,
- 0x0,
- 0x1,
- 0x1,
- 0x3,
- 0x1,
- 0x6,
- 0x5,
- 0x1,
- 0x2,
- 0x1,
- 0x2,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x7,
- 0x1,
- 0x2,
- 0x3,
- 0x0,
- 0x6,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x3,
- 0x1,
- 0x1,
- 0x3,
- 0x0,
- 0x2,
- 0x1,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x2,
- 0x3,
- 0x0,
- 0x2,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x5,
- 0x2,
- 0x2,
- 0x2,
- 0x0,
- 0x2,
- 0x7,
- 0x5,
- 0x3,
- 0x1,
- 0x0,
- 0xa,
- 0x1,
- 0x1,
- 0x4,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x2,
- 0x0,
- 0x3,
- 0x1,
- 0x1,
- 0x1,
- 0x3,
- 0x3,
- 0x1,
- 0x4,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x3,
- 0x1,
- 0x5,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x4,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x2,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0xa,
- 0x1,
- 0x2,
- 0x2,
- 0x1,
- 0x3,
- 0x0,
- 0x6,
- 0x1,
- 0x3,
- 0x6,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x4,
- 0x5,
- 0x4,
- 0x1,
- 0x2,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x2,
- 0x4,
- 0x1,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x1,
- 0x1,
- 0x3,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x4,
- 0xa,
- 0x0,
- 0x3,
- 0x4,
- 0x5,
- 0x5,
- 0x7,
- 0x3,
- 0x3,
- 0x2,
- 0x0,
- 0x1,
- 0x2,
- 0x2,
- 0x4,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x9,
- 0x3,
- 0x10,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x4,
- 0x0,
- 0x5,
- 0x2,
- 0x0,
- 0x5,
- 0x0,
- 0x1,
- 0x1,
- 0x4,
- 0x0,
- 0x7,
- 0x6,
- 0x4,
- 0x0,
- 0x0,
- 0x1,
- 0x7,
- 0x0,
- 0x2,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x5,
- 0x2,
- 0x6,
- 0x1,
- 0x2,
- 0x5,
- 0x6,
- 0x2,
- 0x4,
- 0x0,
- 0x3,
- 0x1,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x3,
- 0x6,
- 0x1,
- 0x1,
- 0x1,
- 0x3,
- 0x7,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x4,
- 0x0,
- 0x1,
- 0x1,
- 0x3,
- 0x1,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x5,
- 0x2,
- 0x5,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x5,
- 0x0,
- 0x7,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x2,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x4,
- 0x2,
- 0xb,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x4,
- 0x2,
- 0x0,
- 0x1,
- 0x4,
- 0x1,
- 0x2,
- 0x2,
- 0x1,
- 0x2,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x5,
- 0x2,
- 0x2,
- 0x0,
- 0x0,
- 0x4,
- 0x4,
- 0x5,
- 0x2,
- 0x0,
- 0x0,
- 0xd,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x6,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x1,
- 0x2,
- 0x9,
- 0x3,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x2,
- 0x0,
- 0x2,
- 0x3,
- 0x1,
- 0x4,
- 0x0,
- 0x2,
- 0x7,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x1,
- 0x1,
- 0x2,
- 0x0,
- 0x5,
- 0x3,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x5,
- 0x0,
- 0x1,
- 0x0,
- 0x7,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x4,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x6,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x2,
- 0x2,
- 0x6,
- 0x1,
- 0x1,
- 0x7,
- 0x0,
- 0x1,
- 0x2,
- 0x5,
- 0x1,
- 0x2,
- 0x1,
- 0x1,
- 0x1,
- 0x3,
- 0x2,
- 0x2,
- 0x1,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0x1,
- 0x2,
+ 0x571, 0x003, 0x000, 0x000, 0x03D, 0x160, 0x000, 0x27F, 0x0F7, 0x1B1, 0x000, 0x002, 0x004,
+ 0x033, 0x136, 0x017, 0x001, 0x000, 0x193, 0x1EE, 0x000, 0x006, 0x000, 0x054, 0x034, 0x002,
+ 0x054, 0x248, 0x008, 0x006, 0x003, 0x000, 0x000, 0x000, 0x064, 0x001, 0x000, 0x000, 0x002,
+ 0x005, 0x000, 0x000, 0x01E, 0x035, 0x009, 0x07D, 0x004, 0x012, 0x058, 0x000, 0x000, 0x000,
+ 0x002, 0x04C, 0x000, 0x000, 0x006, 0x068, 0x000, 0x006, 0x000, 0x00A, 0x006, 0x001, 0x0F6,
+ 0x000, 0x000, 0x002, 0x046, 0x000, 0x001, 0x000, 0x003, 0x000, 0x140, 0x000, 0x00A, 0x0DF,
+ 0x001, 0x000, 0x003, 0x004, 0x008, 0x005, 0x004, 0x014, 0x030, 0x05B, 0x000, 0x018, 0x0A8,
+ 0x000, 0x048, 0x004, 0x000, 0x005, 0x000, 0x042, 0x000, 0x068, 0x000, 0x000, 0x02D, 0x000,
+ 0x000, 0x000, 0x032, 0x006, 0x000, 0x01F, 0x061, 0x000, 0x00D, 0x000, 0x013, 0x005, 0x027,
+ 0x002, 0x002, 0x002, 0x002, 0x013, 0x037, 0x010, 0x000, 0x019, 0x006, 0x000, 0x02C, 0x05F,
+ 0x05F, 0x000, 0x001, 0x000, 0x005, 0x000, 0x000, 0x005, 0x006, 0x022, 0x03C, 0x010, 0x000,
+ 0x000, 0x000, 0x012, 0x002, 0x004, 0x051, 0x000, 0x000, 0x002, 0x032, 0x006, 0x001, 0x000,
+ 0x011, 0x005, 0x004, 0x075, 0x032, 0x00A, 0x000, 0x016, 0x00E, 0x001, 0x00F, 0x027, 0x000,
+ 0x005, 0x001, 0x00A, 0x007, 0x010, 0x004, 0x001, 0x000, 0x007, 0x00F, 0x002, 0x005, 0x05E,
+ 0x000, 0x048, 0x017, 0x000, 0x000, 0x004, 0x000, 0x002, 0x03C, 0x01C, 0x00B, 0x000, 0x004,
+ 0x023, 0x001, 0x00C, 0x00E, 0x005, 0x01C, 0x000, 0x020, 0x001, 0x003, 0x000, 0x007, 0x008,
+ 0x004, 0x000, 0x000, 0x02D, 0x008, 0x000, 0x000, 0x033, 0x013, 0x002, 0x000, 0x003, 0x000,
+ 0x006, 0x03C, 0x020, 0x000, 0x009, 0x000, 0x025, 0x012, 0x009, 0x000, 0x000, 0x03A, 0x022,
+ 0x000, 0x002, 0x001, 0x01E, 0x009, 0x002, 0x002, 0x003, 0x000, 0x000, 0x000, 0x000, 0x000,
+ 0x000, 0x00B, 0x001, 0x001, 0x01B, 0x004, 0x007, 0x00E, 0x003, 0x000, 0x003, 0x007, 0x000,
+ 0x002, 0x002, 0x026, 0x000, 0x008, 0x003, 0x004, 0x002, 0x002, 0x008, 0x009, 0x000, 0x001,
+ 0x006, 0x001, 0x003, 0x002, 0x001, 0x008, 0x000, 0x004, 0x009, 0x00C, 0x013, 0x000, 0x000,
+ 0x005, 0x000, 0x00A, 0x000, 0x014, 0x000, 0x014, 0x000, 0x001, 0x000, 0x000, 0x000, 0x01C,
+ 0x016, 0x000, 0x000, 0x002, 0x004, 0x000, 0x000, 0x000, 0x00A, 0x000, 0x000, 0x007, 0x002,
+ 0x000, 0x000, 0x004, 0x001, 0x00A, 0x000, 0x000, 0x009, 0x005, 0x029, 0x000, 0x000, 0x001,
+ 0x020, 0x003, 0x006, 0x002, 0x001, 0x00E, 0x013, 0x001, 0x024, 0x000, 0x001, 0x001, 0x003,
+ 0x004, 0x002, 0x002, 0x00A, 0x006, 0x008, 0x000, 0x00A, 0x000, 0x004, 0x000, 0x00D, 0x00B,
+ 0x000, 0x013, 0x009, 0x000, 0x000, 0x012, 0x000, 0x006, 0x000, 0x000, 0x002, 0x000, 0x000,
+ 0x00C, 0x000, 0x000, 0x000, 0x000, 0x000, 0x002, 0x000, 0x013, 0x002, 0x000, 0x002, 0x000,
+ 0x000, 0x000, 0x000, 0x008, 0x000, 0x000, 0x001, 0x001, 0x004, 0x010, 0x000, 0x00B, 0x00B,
+ 0x002, 0x001, 0x000, 0x001, 0x001, 0x002, 0x002, 0x001, 0x001, 0x002, 0x004, 0x008, 0x000,
+ 0x000, 0x001, 0x029, 0x001, 0x00E, 0x000, 0x000, 0x00E, 0x000, 0x00B, 0x000, 0x017, 0x005,
+ 0x000, 0x015, 0x008, 0x006, 0x008, 0x000, 0x002, 0x00C, 0x000, 0x000, 0x000, 0x008, 0x000,
+ 0x000, 0x000, 0x000, 0x00C, 0x000, 0x000, 0x004, 0x000, 0x000, 0x000, 0x00F, 0x000, 0x000,
+ 0x001, 0x007, 0x000, 0x011, 0x000, 0x00D, 0x008, 0x00E, 0x00B, 0x000, 0x002, 0x001, 0x000,
+ 0x004, 0x005, 0x003, 0x003, 0x001, 0x003, 0x008, 0x001, 0x01A, 0x001, 0x005, 0x001, 0x005,
+ 0x006, 0x000, 0x001, 0x000, 0x000, 0x000, 0x010, 0x00F, 0x002, 0x004, 0x006, 0x002, 0x002,
+ 0x00C, 0x017, 0x003, 0x000, 0x003, 0x000, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
+ 0x000, 0x000, 0x022, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, 0x014, 0x001, 0x000,
+ 0x002, 0x004, 0x00F, 0x000, 0x007, 0x001, 0x000, 0x002, 0x001, 0x000, 0x000, 0x000, 0x006,
+ 0x009, 0x003, 0x02C, 0x009, 0x005, 0x000, 0x000, 0x00B, 0x008, 0x01D, 0x000, 0x001, 0x000,
+ 0x000, 0x000, 0x001, 0x008, 0x003, 0x005, 0x000, 0x004, 0x000, 0x000, 0x003, 0x00A, 0x003,
+ 0x000, 0x005, 0x002, 0x004, 0x00A, 0x000, 0x000, 0x003, 0x002, 0x000, 0x002, 0x000, 0x00E,
+ 0x000, 0x000, 0x005, 0x000, 0x009, 0x017, 0x003, 0x004, 0x000, 0x001, 0x004, 0x000, 0x000,
+ 0x007, 0x015, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x009, 0x003, 0x001, 0x001,
+ 0x001, 0x006, 0x00A, 0x000, 0x000, 0x006, 0x000, 0x001, 0x000, 0x000, 0x002, 0x000, 0x000,
+ 0x001, 0x001, 0x002, 0x000, 0x000, 0x000, 0x003, 0x003, 0x012, 0x001, 0x006, 0x004, 0x007,
+ 0x000, 0x001, 0x000, 0x02E, 0x002, 0x001, 0x00B, 0x008, 0x000, 0x005, 0x000, 0x002, 0x004,
+ 0x009, 0x000, 0x000, 0x008, 0x005, 0x003, 0x001, 0x006, 0x000, 0x000, 0x003, 0x000, 0x003,
+ 0x006, 0x006, 0x000, 0x003, 0x007, 0x000, 0x006, 0x001, 0x000, 0x000, 0x006, 0x004, 0x000,
+ 0x000, 0x001, 0x000, 0x002, 0x000, 0x005, 0x000, 0x022, 0x014, 0x006, 0x002, 0x000, 0x000,
+ 0x000, 0x000, 0x00C, 0x000, 0x00A, 0x001, 0x002, 0x007, 0x000, 0x002, 0x001, 0x001, 0x004,
+ 0x000, 0x000, 0x012, 0x002, 0x001, 0x000, 0x000, 0x000, 0x003, 0x003, 0x000, 0x005, 0x000,
+ 0x000, 0x003, 0x000, 0x003, 0x000, 0x006, 0x000, 0x005, 0x001, 0x000, 0x008, 0x004, 0x000,
+ 0x009, 0x001, 0x00A, 0x00E, 0x000, 0x005, 0x00E, 0x007, 0x000, 0x000, 0x008, 0x000, 0x000,
+ 0x000, 0x000, 0x004, 0x000, 0x001, 0x001, 0x000, 0x000, 0x002, 0x000, 0x001, 0x000, 0x010,
+ 0x016, 0x001, 0x001, 0x000, 0x000, 0x000, 0x011, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000,
+ 0x000, 0x002, 0x000, 0x001, 0x006, 0x002, 0x01A, 0x000, 0x00B, 0x004, 0x000, 0x000, 0x003,
+ 0x006, 0x001, 0x009, 0x00F, 0x002, 0x005, 0x001, 0x01A, 0x000, 0x000, 0x000, 0x001, 0x002,
+ 0x002, 0x00F, 0x000, 0x000, 0x00A, 0x002, 0x003, 0x002, 0x007, 0x006, 0x000, 0x007, 0x004,
+ 0x00C, 0x000, 0x000, 0x001, 0x007, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x000, 0x000,
+ 0x000, 0x002, 0x000, 0x000, 0x000, 0x00A, 0x006, 0x000, 0x002, 0x000, 0x000, 0x000, 0x00D,
+ 0x000, 0x003, 0x001, 0x00A, 0x000, 0x00C, 0x000, 0x001, 0x000, 0x007, 0x003, 0x002, 0x001,
+ 0x002, 0x001, 0x007, 0x003, 0x002, 0x001, 0x004, 0x001, 0x000, 0x000, 0x008, 0x006, 0x000,
+ 0x000, 0x001, 0x00D, 0x004, 0x001, 0x002, 0x001, 0x004, 0x000, 0x000, 0x000, 0x007, 0x002,
+ 0x000, 0x000, 0x000, 0x000, 0x013, 0x000, 0x000, 0x000, 0x000, 0x003, 0x011, 0x001, 0x001,
+ 0x003, 0x006, 0x000, 0x006, 0x003, 0x001, 0x000, 0x000, 0x000, 0x00B, 0x000, 0x004, 0x006,
+ 0x000, 0x000, 0x005, 0x000, 0x002, 0x000, 0x001, 0x001, 0x005, 0x001, 0x007, 0x005, 0x000,
+ 0x001, 0x001, 0x000, 0x001, 0x001, 0x007, 0x009, 0x001, 0x00C, 0x004, 0x002, 0x001, 0x000,
+ 0x005, 0x000, 0x000, 0x001, 0x002, 0x001, 0x008, 0x005, 0x00B, 0x002, 0x000, 0x007, 0x001,
+ 0x004, 0x016, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x016, 0x000,
+ 0x000, 0x00E, 0x000, 0x000, 0x002, 0x004, 0x000, 0x000, 0x002, 0x000, 0x004, 0x006, 0x001,
+ 0x000, 0x000, 0x000, 0x00C, 0x007, 0x009, 0x004, 0x003, 0x001, 0x001, 0x009, 0x00D, 0x001,
+ 0x002, 0x003, 0x000, 0x004, 0x004, 0x004, 0x002, 0x000, 0x001, 0x00B, 0x000, 0x012, 0x000,
+ 0x003, 0x003, 0x001, 0x001, 0x001, 0x00E, 0x000, 0x001, 0x001, 0x004, 0x001, 0x002, 0x000,
+ 0x000, 0x000, 0x001, 0x000, 0x001, 0x000, 0x000, 0x000, 0x000, 0x013, 0x000, 0x000, 0x000,
+ 0x000, 0x003, 0x000, 0x000, 0x000, 0x009, 0x000, 0x001, 0x007, 0x000, 0x002, 0x000, 0x00C,
+ 0x001, 0x003, 0x000, 0x001, 0x000, 0x005, 0x001, 0x000, 0x001, 0x003, 0x002, 0x009, 0x001,
+ 0x000, 0x008, 0x001, 0x005, 0x002, 0x000, 0x004, 0x000, 0x001, 0x005, 0x000, 0x008, 0x003,
+ 0x000, 0x004, 0x000, 0x000, 0x006, 0x003, 0x003, 0x002, 0x000, 0x002, 0x000, 0x002, 0x002,
+ 0x008, 0x000, 0x00A, 0x004, 0x012, 0x006, 0x002, 0x003, 0x002, 0x000, 0x001, 0x000, 0x000,
+ 0x000, 0x007, 0x001, 0x006, 0x000, 0x001, 0x005, 0x00B, 0x000, 0x00D, 0x012, 0x005, 0x002,
+ 0x004, 0x000, 0x005, 0x00B, 0x000, 0x007, 0x004, 0x001, 0x003, 0x008, 0x003, 0x002, 0x005,
+ 0x001, 0x000, 0x002, 0x002, 0x000, 0x000, 0x001, 0x002, 0x000, 0x001, 0x000, 0x000, 0x001,
+ 0x008, 0x003, 0x000, 0x000, 0x000, 0x000, 0x002, 0x008, 0x000, 0x002, 0x000, 0x001, 0x00E,
+ 0x000, 0x000, 0x003, 0x002, 0x006, 0x000, 0x001, 0x008, 0x002, 0x005, 0x000, 0x001, 0x001,
+ 0x007, 0x006, 0x001, 0x000, 0x000, 0x000, 0x002, 0x000, 0x000, 0x002, 0x001, 0x001, 0x005,
+ 0x000, 0x003, 0x009, 0x002, 0x000, 0x001, 0x000, 0x009, 0x001, 0x001, 0x002, 0x001, 0x002,
+ 0x003, 0x002, 0x000, 0x000, 0x000, 0x006, 0x001, 0x000, 0x001, 0x006, 0x000, 0x000, 0x000,
+ 0x000, 0x001, 0x000, 0x000, 0x001, 0x001, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000, 0x001,
+ 0x014, 0x000, 0x000, 0x000, 0x001, 0x000, 0x006, 0x001, 0x000, 0x000, 0x012, 0x000, 0x004,
+ 0x012, 0x003, 0x004, 0x002, 0x000, 0x000, 0x000, 0x005, 0x006, 0x000, 0x001, 0x001, 0x000,
+ 0x000, 0x006, 0x002, 0x004, 0x004, 0x002, 0x000, 0x000, 0x002, 0x001, 0x001, 0x000, 0x001,
+ 0x00B, 0x000, 0x006, 0x000, 0x000, 0x000, 0x002, 0x001, 0x009, 0x001, 0x002, 0x010, 0x001,
+ 0x002, 0x002, 0x001, 0x000, 0x001, 0x00F, 0x009, 0x001, 0x001, 0x000, 0x000, 0x001, 0x001,
+ 0x001, 0x000, 0x000, 0x000, 0x002, 0x000, 0x002, 0x000, 0x000, 0x000, 0x003, 0x001, 0x007,
+ 0x00F, 0x005, 0x005, 0x000, 0x000, 0x000, 0x001, 0x004, 0x000, 0x002, 0x004, 0x003, 0x001,
+ 0x001, 0x002, 0x004, 0x001, 0x002, 0x001, 0x002, 0x002, 0x009, 0x000, 0x001, 0x000, 0x005,
+ 0x00B, 0x001, 0x000, 0x002, 0x00B, 0x000, 0x004, 0x000, 0x001, 0x001, 0x001, 0x000, 0x009,
+ 0x002, 0x005, 0x000, 0x004, 0x003, 0x002, 0x001, 0x001, 0x002, 0x000, 0x006, 0x00A, 0x000,
+ 0x002, 0x001, 0x009, 0x001, 0x001, 0x001, 0x008, 0x001, 0x002, 0x001, 0x001, 0x000, 0x001,
+ 0x003, 0x001, 0x001, 0x001, 0x003, 0x001, 0x005, 0x001, 0x003, 0x001, 0x000, 0x000, 0x006,
+ 0x000, 0x004, 0x001, 0x003, 0x001, 0x003, 0x000, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000,
+ 0x000, 0x000, 0x000, 0x00B, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003, 0x006, 0x000, 0x000,
+ 0x002, 0x003, 0x003, 0x002, 0x002, 0x000, 0x004, 0x002, 0x000, 0x001, 0x001, 0x00A, 0x003,
+ 0x000, 0x003, 0x004, 0x001, 0x001, 0x003, 0x000, 0x000, 0x004, 0x004, 0x001, 0x002, 0x005,
+ 0x00C, 0x001, 0x000, 0x007, 0x002, 0x001, 0x002, 0x005, 0x001, 0x000, 0x004, 0x001, 0x000,
+ 0x000, 0x001, 0x000, 0x000, 0x00B, 0x00D, 0x002, 0x003, 0x000, 0x000, 0x000, 0x000, 0x005,
+ 0x005, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x006, 0x002, 0x002,
+ 0x002, 0x001, 0x001, 0x001, 0x000, 0x000, 0x000, 0x001, 0x000, 0x001, 0x00B, 0x001, 0x001,
+ 0x001, 0x002, 0x005, 0x001, 0x001, 0x003, 0x004, 0x001, 0x002, 0x002, 0x008, 0x000, 0x001,
+ 0x004, 0x003, 0x003, 0x001, 0x008, 0x001, 0x008, 0x001, 0x000, 0x004, 0x008, 0x000, 0x002,
+ 0x003, 0x003, 0x000, 0x000, 0x002, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
+ 0x004, 0x000, 0x000, 0x000, 0x00A, 0x000, 0x001, 0x000, 0x000, 0x000, 0x001, 0x003, 0x009,
+ 0x000, 0x002, 0x001, 0x00A, 0x000, 0x001, 0x000, 0x000, 0x003, 0x000, 0x001, 0x001, 0x000,
+ 0x009, 0x007, 0x001, 0x002, 0x008, 0x001, 0x005, 0x003, 0x002, 0x001, 0x001, 0x002, 0x002,
+ 0x001, 0x001, 0x001, 0x005, 0x000, 0x000, 0x001, 0x000, 0x00A, 0x003, 0x000, 0x000, 0x001,
+ 0x000, 0x00C, 0x000, 0x007, 0x003, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x002, 0x000,
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000, 0x003,
+ 0x001, 0x000, 0x001, 0x004, 0x00F, 0x000, 0x001, 0x000, 0x001, 0x000, 0x000, 0x000, 0x008,
+ 0x000, 0x002, 0x006, 0x001, 0x000, 0x004, 0x002, 0x000, 0x001, 0x004, 0x000, 0x002, 0x002,
+ 0x002, 0x001, 0x000, 0x000, 0x002, 0x001, 0x000, 0x003, 0x001, 0x000, 0x001, 0x000, 0x001,
+ 0x001, 0x002, 0x002, 0x002, 0x00A, 0x001, 0x001, 0x001, 0x001, 0x002, 0x002, 0x000, 0x001,
+ 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x002, 0x008, 0x001, 0x002, 0x006, 0x001, 0x000,
+ 0x002, 0x001, 0x000, 0x000, 0x000, 0x001, 0x002, 0x001, 0x004, 0x004, 0x001, 0x000, 0x005,
+ 0x001, 0x001, 0x001, 0x000, 0x002, 0x001, 0x000, 0x000, 0x000, 0x002, 0x000, 0x001, 0x000,
+ 0x000, 0x001, 0x004, 0x000, 0x009, 0x002, 0x00C, 0x008, 0x000, 0x001, 0x000, 0x004, 0x000,
+ 0x000, 0x001, 0x003, 0x004, 0x002, 0x000, 0x001, 0x003, 0x004, 0x000, 0x001, 0x000, 0x007,
+ 0x002, 0x001, 0x004, 0x000, 0x004, 0x000, 0x000, 0x000, 0x000, 0x000, 0x009, 0x001, 0x001,
+ 0x002, 0x000, 0x004, 0x001, 0x001, 0x001, 0x000, 0x001, 0x001, 0x001, 0x001, 0x000, 0x000,
+ 0x001, 0x001, 0x003, 0x001, 0x001, 0x001, 0x002, 0x000, 0x003, 0x001, 0x000, 0x002, 0x000,
+ 0x004, 0x001, 0x000, 0x000, 0x000, 0x001, 0x007, 0x000, 0x000, 0x000, 0x000, 0x004, 0x000,
+ 0x001, 0x007, 0x000, 0x000, 0x000, 0x001, 0x004, 0x001, 0x000, 0x004, 0x002, 0x002, 0x001,
+ 0x000, 0x001, 0x001, 0x001, 0x002, 0x001, 0x000, 0x007, 0x000, 0x000, 0x006, 0x000, 0x003,
+ 0x002, 0x002, 0x001, 0x000, 0x000, 0x002, 0x000, 0x001, 0x003, 0x005, 0x001, 0x001, 0x000,
+ 0x000, 0x000, 0x000, 0x000, 0x001, 0x006, 0x001, 0x001, 0x003, 0x009, 0x000, 0x001, 0x001,
+ 0x000, 0x006, 0x000, 0x003, 0x001, 0x002, 0x000, 0x001, 0x002, 0x005, 0x005, 0x002, 0x000,
+ 0x001, 0x004, 0x000, 0x001, 0x001, 0x001, 0x001, 0x000, 0x001, 0x000, 0x000, 0x000, 0x000,
+ 0x002, 0x000, 0x000, 0x001, 0x002, 0x001, 0x000, 0x000, 0x002, 0x000, 0x001, 0x006, 0x006,
+ 0x002, 0x002, 0x000, 0x003, 0x002, 0x003, 0x001, 0x001, 0x002, 0x001, 0x002, 0x00B, 0x000,
+ 0x001, 0x000, 0x001, 0x002, 0x002, 0x004, 0x000, 0x000, 0x000, 0x000, 0x000, 0x002, 0x000,
+ 0x000, 0x000, 0x003, 0x000, 0x000, 0x001, 0x006, 0x000, 0x002, 0x001, 0x000, 0x003, 0x004,
+ 0x000, 0x003, 0x000, 0x001, 0x004, 0x001, 0x003, 0x002, 0x000, 0x000, 0x002, 0x001, 0x000,
+ 0x001, 0x001, 0x001, 0x005, 0x006, 0x004, 0x000, 0x000, 0x000, 0x002, 0x001, 0x000, 0x001,
+ 0x001, 0x004, 0x001, 0x001, 0x009, 0x000, 0x002, 0x000, 0x002, 0x003, 0x005, 0x002, 0x000,
+ 0x000, 0x000, 0x000, 0x000, 0x002, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x001, 0x003,
+ 0x000, 0x000, 0x000, 0x000, 0x001, 0x002, 0x007, 0x001, 0x000, 0x000, 0x000, 0x001, 0x000,
+ 0x000, 0x00A, 0x001, 0x000, 0x001, 0x010, 0x002, 0x008, 0x001, 0x001, 0x002, 0x001, 0x002,
+ 0x001, 0x000, 0x003, 0x002, 0x004, 0x000, 0x002, 0x002, 0x000, 0x001, 0x002, 0x001, 0x001,
+ 0x001, 0x001, 0x000, 0x000, 0x000, 0x006, 0x002, 0x005, 0x000, 0x000, 0x004, 0x004, 0x001,
+ 0x005, 0x000, 0x005, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x001, 0x000,
+ 0x005, 0x000, 0x000, 0x000, 0x005, 0x002, 0x001, 0x003, 0x009, 0x001, 0x003, 0x000, 0x000,
+ 0x002, 0x000, 0x001, 0x001, 0x004, 0x002, 0x000, 0x008, 0x002, 0x001, 0x006, 0x000, 0x002,
+ 0x002, 0x003, 0x000, 0x003, 0x001, 0x001, 0x002, 0x002, 0x000, 0x003, 0x001, 0x000, 0x000,
+ 0x000, 0x002, 0x002, 0x000, 0x002, 0x005, 0x001, 0x000, 0x000, 0x000, 0x002, 0x002, 0x001,
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000,
+ 0x000, 0x001, 0x000, 0x007, 0x001, 0x000, 0x002, 0x002, 0x000, 0x001, 0x000, 0x002, 0x000,
+ 0x006, 0x002, 0x001, 0x008, 0x000, 0x002, 0x002, 0x001, 0x004, 0x001, 0x000, 0x001, 0x001,
+ 0x002, 0x009, 0x001, 0x001, 0x001, 0x004, 0x001, 0x005, 0x002, 0x001, 0x001, 0x004, 0x003,
+ 0x000, 0x000, 0x001, 0x000, 0x001, 0x001, 0x000, 0x001, 0x000, 0x001, 0x001, 0x000, 0x004,
+ 0x004,
];
pub(crate) const CANONICAL_DECOMPOSED_KV: &[(u32, (u16, u16))] = &[
- (0x4ee, (666, 2)),
- (0x2f869, (2969, 1)),
- (0x30b2, (2217, 2)),
- (0x1f2e, (1546, 3)),
- (0x120, (166, 2)),
- (0xf905, (2278, 1)),
- (0xf9e8, (2505, 1)),
- (0x1e3a, (978, 2)),
- (0xf965, (2374, 1)),
- (0x1ebd, (1270, 2)),
- (0x2f83a, (2922, 1)),
- (0x101, (108, 2)),
- (0xf986, (2407, 1)),
- (0xfa57, (2604, 1)),
- (0x1f91, (1796, 3)),
- (0x4df, (644, 2)),
- (0x1e2, (382, 2)),
- (0x229, (498, 2)),
- (0x1af, (326, 2)),
- (0xfa66, (2619, 1)),
- (0x1f39, (1576, 2)),
- (0x1e7a, (1124, 3)),
- (0x1f6c, (1693, 3)),
- (0xfaa8, (2683, 1)),
- (0x2f8ce, (3070, 1)),
- (0x128, (178, 2)),
- (0xfa4b, (2592, 1)),
- (0x2f818, (2888, 1)),
- (0x2f988, (3256, 1)),
- (0xf974, (2389, 1)),
- (0x1ea9, (1215, 3)),
- (0x1f51, (1630, 2)),
- (0x2f833, (2915, 1)),
- (0x2f8fc, (3116, 1)),
- (0x38f, (548, 2)),
- (0xfa3e, (2579, 1)),
- (0xfa5e, (2611, 1)),
- (0xfa1e, (2554, 1)),
- (0x2f9f7, (3367, 1)),
- (0x15f, (262, 2)),
- (0x1e35, (966, 2)),
- (0xfb47, (2787, 2)),
- (0x2f962, (3218, 1)),
- (0xfa86, (2649, 1)),
- (0xf92f, (2320, 1)),
- (0x2f8dd, (3085, 1)),
- (0xf73, (804, 2)),
- (0x1e15, (895, 3)),
- (0x1ed0, (1318, 3)),
- (0xf9ca, (2475, 1)),
- (0x4e6, (654, 2)),
- (0x1fa2, (1859, 4)),
- (0x2f999, (3273, 1)),
- (0x1fc2, (1943, 3)),
- (0x2f8c7, (3063, 1)),
- (0xfabc, (2703, 1)),
- (0x30b4, (2219, 2)),
- (0x2f9b9, (3305, 1)),
- (0x1e73, (1108, 2)),
- (0xf95b, (2364, 1)),
- (0x2f952, (3202, 1)),
- (0xfa5f, (2612, 1)),
- (0x1b08, (830, 2)),
- (0x2204, (2077, 2)),
- (0x1ea2, (1196, 2)),
- (0x1ea, (394, 2)),
- (0x129, (180, 2)),
- (0xf920, (2305, 1)),
- (0x1f85, (1751, 4)),
- (0x1e93, (1176, 2)),
- (0x2f9b2, (3298, 1)),
- (0x2f821, (2897, 1)),
- (0x2f9d6, (3334, 1)),
- (0xfa65, (2618, 1)),
- (0xf971, (2386, 1)),
- (0x230, (516, 3)),
- (0x16d, (286, 2)),
- (0x21b, (486, 2)),
- (0x2f9d4, (3332, 1)),
- (0x1d161, (2836, 3)),
- (0xfa94, (2663, 1)),
- (0x403, (586, 2)),
- (0x16a, (280, 2)),
- (0x958, (708, 2)),
- (0x2f922, (3154, 1)),
- (0xf93d, (2334, 1)),
- (0x1e39, (975, 3)),
- (0x2f870, (2976, 1)),
- (0x1eae, (1230, 3)),
- (0x1f35, (1565, 3)),
- (0xfa2f, (2564, 1)),
- (0x15e, (260, 2)),
- (0x1e43, (996, 2)),
- (0x2f842, (2930, 1)),
- (0xf9b1, (2450, 1)),
- (0xfa5d, (2610, 1)),
- (0xf9d2, (2483, 1)),
- (0x1ed8, (1342, 3)),
- (0xfaca, (2717, 1)),
- (0x1edc, (1354, 3)),
- (0x2f9fd, (3373, 1)),
- (0x2f90b, (3131, 1)),
- (0x1ec9, (1304, 2)),
- (0x2329, (2153, 1)),
- (0x1e96, (1182, 2)),
- (0x2f9a0, (3280, 1)),
- (0xf9d0, (2481, 1)),
- (0x4ed, (664, 2)),
- (0xc2, (4, 2)),
- (0x1e79, (1121, 3)),
- (0x4f1, (672, 2)),
- (0x1fd0, (1972, 2)),
- (0x1ef5, (1422, 2)),
- (0x125, (176, 2)),
- (0xfb2c, (2741, 3)),
- (0x387, (537, 1)),
- (0xf9ef, (2512, 1)),
- (0x2f9f5, (3365, 1)),
- (0x170, (292, 2)),
- (0x2270, (2105, 2)),
- (0x2f9cc, (3324, 1)),
- (0xfa6d, (2626, 1)),
- (0xf980, (2401, 1)),
- (0xf907, (2280, 1)),
- (0x2f857, (2951, 1)),
- (0x1eb9, (1262, 2)),
- (0x2f8d5, (3077, 1)),
- (0xf9f9, (2522, 1)),
- (0x2f8a2, (3026, 1)),
- (0xf94b, (2348, 1)),
- (0x2f87e, (2990, 1)),
- (0xf91f, (2304, 1)),
- (0xf9ec, (2509, 1)),
- (0x4f4, (678, 2)),
- (0x451, (602, 2)),
- (0x22ad, (2131, 2)),
- (0x2f917, (3143, 1)),
- (0x2f861, (2961, 1)),
- (0xf91d, (2302, 1)),
- (0xfa96, (2665, 1)),
- (0xf6, (92, 2)),
- (0x1e27, (936, 2)),
- (0x1f48, (1612, 2)),
- (0x1feb, (2026, 2)),
- (0x1ee5, (1380, 2)),
- (0x2f99f, (3279, 1)),
- (0x2f8e8, (3096, 1)),
- (0xf9df, (2496, 1)),
- (0x1eaf, (1233, 3)),
- (0xf92a, (2315, 1)),
- (0xfa78, (2635, 1)),
- (0xfa6c, (2625, 1)),
- (0x1e22, (926, 2)),
- (0x1eea, (1392, 3)),
- (0x2f850, (2944, 1)),
- (0x2f9c9, (3321, 1)),
- (0xf91c, (2301, 1)),
- (0xa33, (734, 2)),
- (0xe7, (64, 2)),
- (0x2f80b, (2875, 1)),
- (0xfa91, (2660, 1)),
- (0x9dd, (730, 2)),
- (0x2f848, (2936, 1)),
- (0xf966, (2375, 1)),
- (0xfb36, (2763, 2)),
- (0xf957, (2360, 1)),
- (0x2f88a, (3002, 1)),
- (0x305c, (2173, 2)),
- (0x2f982, (3250, 1)),
- (0x122, (170, 2)),
- (0xf95d, (2366, 1)),
- (0x2f8cc, (3068, 1)),
- (0x2f86a, (2970, 1)),
- (0x1f81, (1736, 3)),
- (0x212a, (2062, 1)),
- (0x17e, (320, 2)),
- (0xf9a9, (2442, 1)),
- (0xfabd, (2704, 1)),
- (0x2f91e, (3150, 1)),
- (0xf9eb, (2508, 1)),
- (0x2f937, (3175, 1)),
- (0x2f8a6, (3030, 1)),
- (0x1e42, (994, 2)),
- (0x1112f, (2811, 2)),
- (0x1fa8, (1883, 3)),
- (0xc0, (0, 2)),
- (0x2f8da, (3082, 1)),
- (0x2f9b5, (3301, 1)),
- (0x2f8c1, (3057, 1)),
- (0xf9b4, (2453, 1)),
- (0x171, (294, 2)),
- (0xf952, (2355, 1)),
- (0xfa08, (2537, 1)),
- (0x1fac, (1897, 4)),
- (0x1fb, (421, 3)),
- (0xf912, (2291, 1)),
- (0x1f11, (1478, 2)),
- (0x201, (434, 2)),
- (0x2f8b9, (3049, 1)),
- (0x2fa1c, (3404, 1)),
- (0x2f8b5, (3045, 1)),
- (0x1e88, (1154, 2)),
- (0xfab8, (2699, 1)),
- (0xfa43, (2584, 1)),
- (0x144, (218, 2)),
- (0x1e8b, (1160, 2)),
- (0x2f9e1, (3345, 1)),
- (0xf97c, (2397, 1)),
- (0xf985, (2406, 1)),
- (0x1f06, (1448, 3)),
- (0x1fb2, (1917, 3)),
- (0x2f9db, (3339, 1)),
- (0x1fe4, (2011, 2)),
- (0xfac3, (2710, 1)),
- (0x177, (306, 2)),
- (0x2f948, (3192, 1)),
- (0xcb, (20, 2)),
- (0x1f9f, (1849, 4)),
- (0xfa99, (2668, 1)),
- (0x2f942, (3186, 1)),
- (0x2f976, (3238, 1)),
- (0xf988, (2409, 1)),
- (0x1fe6, (2015, 2)),
- (0x156, (244, 2)),
- (0x1e8e, (1166, 2)),
- (0x2f8fe, (3118, 1)),
- (0x1e46, (1002, 2)),
- (0x2f81e, (2894, 1)),
- (0x45d, (610, 2)),
- (0x1fcf, (1970, 2)),
- (0x1ecf, (1316, 2)),
- (0x1e48, (1006, 2)),
- (0xf9cb, (2476, 1)),
- (0x2f946, (3190, 1)),
- (0xfacf, (2722, 1)),
- (0x109, (124, 2)),
- (0x22e3, (2143, 2)),
- (0xf52, (796, 2)),
- (0x304c, (2157, 2)),
- (0xf9b2, (2451, 1)),
- (0x12c, (186, 2)),
- (0x2f969, (3225, 1)),
- (0x2f9a5, (3285, 1)),
- (0x307a, (2201, 2)),
- (0x2f9be, (3310, 1)),
- (0x1f1b, (1499, 3)),
- (0x1f5d, (1655, 3)),
- (0x2f9ab, (3291, 1)),
- (0x2f8f1, (3105, 1)),
- (0xf9be, (2463, 1)),
- (0xf9b8, (2457, 1)),
- (0x1fb4, (1922, 3)),
- (0x1edf, (1363, 3)),
- (0x22f, (514, 2)),
- (0x934, (706, 2)),
- (0x2f98a, (3258, 1)),
- (0x1fe8, (2020, 2)),
- (0xfaab, (2686, 1)),
- (0xfa5b, (2608, 1)),
- (0x4d3, (628, 2)),
- (0x2226, (2085, 2)),
- (0x2fa03, (3379, 1)),
- (0xfa12, (2544, 1)),
- (0x1ee4, (1378, 2)),
- (0x1fd6, (1982, 2)),
- (0xf931, (2322, 1)),
- (0xfaa1, (2676, 1)),
- (0x2f936, (3174, 1)),
- (0x1fe9, (2022, 2)),
- (0x1ff4, (2040, 3)),
- (0x2f86c, (2972, 1)),
- (0x2f911, (3137, 1)),
- (0x95f, (722, 2)),
- (0xcd, (24, 2)),
- (0x2f95e, (3214, 1)),
- (0xf98f, (2416, 1)),
- (0x1e08, (866, 3)),
- (0x30fa, (2269, 2)),
- (0x4da, (634, 2)),
- (0xf9c5, (2470, 1)),
- (0x1d8, (355, 3)),
- (0x1ec, (398, 3)),
- (0xf95e, (2367, 1)),
- (0xfb4e, (2801, 2)),
- (0xc5, (10, 2)),
- (0x2f87d, (2989, 1)),
- (0x1b0c, (834, 2)),
- (0x2f9c6, (3318, 1)),
- (0x2f879, (2985, 1)),
- (0x2f9f2, (3362, 1)),
- (0x1ece, (1314, 2)),
- (0xdda, (783, 2)),
- (0x1f80, (1733, 3)),
- (0x3074, (2193, 2)),
- (0x2289, (2127, 2)),
- (0x1d0, (336, 2)),
- (0x1eac, (1224, 3)),
- (0x2f851, (2945, 1)),
- (0x22c, (506, 3)),
- (0x1f9e, (1845, 4)),
- (0x2f9d2, (3330, 1)),
- (0xfa05, (2534, 1)),
- (0x2f88c, (3004, 1)),
- (0x1ffd, (2058, 1)),
- (0x1f0b, (1461, 3)),
- (0xfaba, (2701, 1)),
- (0x1e82, (1142, 2)),
- (0x2f8c2, (3058, 1)),
- (0x1f30, (1552, 2)),
- (0x1f87, (1759, 4)),
- (0xfa61, (2614, 1)),
- (0x1b06, (828, 2)),
- (0x2f9e8, (3352, 1)),
- (0x2f80e, (2878, 1)),
- (0x1f00, (1432, 2)),
- (0xfa03, (2532, 1)),
- (0x202, (436, 2)),
- (0x1ce, (332, 2)),
- (0x2fa12, (3394, 1)),
- (0x2f84f, (2943, 1)),
- (0x4c1, (618, 2)),
- (0xfa81, (2644, 1)),
- (0xfac7, (2714, 1)),
- (0xf9bb, (2460, 1)),
- (0x16f, (290, 2)),
- (0x114, (142, 2)),
- (0xcc7, (768, 2)),
- (0x1b0e, (836, 2)),
- (0x2f9d1, (3329, 1)),
- (0x139, (204, 2)),
- (0x2f836, (2918, 1)),
- (0xb48, (746, 2)),
- (0x30f9, (2267, 2)),
- (0xfa79, (2636, 1)),
- (0x3058, (2169, 2)),
- (0x2f971, (3233, 1)),
- (0x2f928, (3160, 1)),
- (0x1fc, (424, 2)),
- (0x2224, (2083, 2)),
- (0xfab3, (2694, 1)),
- (0x2f8e7, (3095, 1)),
- (0x1fde, (1997, 2)),
- (0x1e7, (388, 2)),
- (0x1e13, (890, 2)),
- (0xfa5a, (2607, 1)),
- (0x1fce, (1968, 2)),
- (0x1e58, (1046, 2)),
- (0x2f964, (3220, 1)),
- (0xfabe, (2705, 1)),
- (0x1e0f, (882, 2)),
- (0x2f938, (3176, 1)),
- (0x11d, (160, 2)),
- (0xf994, (2421, 1)),
- (0xf947, (2344, 1)),
- (0x3aa, (553, 2)),
- (0xf981, (2402, 1)),
- (0x1e30, (956, 2)),
- (0x1f14, (1486, 3)),
- (0xf9f1, (2514, 1)),
- (0x1fa9, (1886, 3)),
- (0x1e62, (1068, 2)),
- (0x2f85d, (2957, 1)),
- (0xfa4e, (2595, 1)),
- (0x1f22, (1512, 3)),
- (0x2f838, (2920, 1)),
- (0x2f9a6, (3286, 1)),
- (0xf93f, (2336, 1)),
- (0x2f9f3, (3363, 1)),
- (0xfaad, (2688, 1)),
- (0x2f87a, (2986, 1)),
- (0x2f830, (2912, 1)),
- (0x2f8c8, (3064, 1)),
- (0x10a, (126, 2)),
- (0x20b, (454, 2)),
- (0x1f77, (1719, 2)),
- (0xfab4, (2695, 1)),
- (0x2f985, (3253, 1)),
- (0xf9f7, (2520, 1)),
- (0x2f94f, (3199, 1)),
- (0xfa40, (2581, 1)),
- (0x2f968, (3224, 1)),
- (0xfa8c, (2655, 1)),
- (0xce, (26, 2)),
- (0xfac0, (2707, 1)),
- (0x3062, (2179, 2)),
- (0xf9, (94, 2)),
- (0x1fb0, (1913, 2)),
- (0xb94, (756, 2)),
- (0x2f926, (3158, 1)),
- (0x1f84, (1747, 4)),
- (0x4ef, (668, 2)),
- (0xf9d, (816, 2)),
- (0x226d, (2099, 2)),
- (0x1f28, (1530, 2)),
- (0x2f955, (3205, 1)),
- (0x2279, (2115, 2)),
- (0xfab6, (2697, 1)),
- (0xf935, (2326, 1)),
- (0x439, (598, 2)),
- (0x11938, (2827, 2)),
- (0xee, (78, 2)),
- (0x17b, (314, 2)),
- (0x1e0c, (876, 2)),
- (0x1e6a, (1090, 2)),
- (0x214, (472, 2)),
- (0xf57, (798, 2)),
- (0x2f825, (2901, 1)),
- (0x114bb, (2817, 2)),
- (0x100, (106, 2)),
- (0x1e6, (386, 2)),
- (0x2f951, (3201, 1)),
- (0x2f9ce, (3326, 1)),
- (0x2f984, (3252, 1)),
- (0x22eb, (2147, 2)),
- (0x1f6b, (1690, 3)),
- (0x13b, (208, 2)),
- (0x2f9e9, (3353, 1)),
- (0x2f8be, (3054, 1)),
- (0x2f823, (2899, 1)),
- (0x2f9d3, (3331, 1)),
- (0x2f97c, (3244, 1)),
- (0xfa49, (2590, 1)),
- (0x1eb1, (1239, 3)),
- (0x2f998, (3272, 1)),
- (0x304e, (2159, 2)),
- (0x1f0d, (1467, 3)),
- (0xd4a, (777, 2)),
- (0xfb39, (2767, 2)),
- (0x305a, (2171, 2)),
- (0xf9b0, (2449, 1)),
- (0x2f8ff, (3119, 1)),
- (0x30ae, (2213, 2)),
- (0x2f977, (3239, 1)),
- (0x1fa, (418, 3)),
- (0x1e20, (922, 2)),
- (0xf917, (2296, 1)),
- (0xf989, (2410, 1)),
- (0xf90e, (2287, 1)),
- (0xfb34, (2759, 2)),
- (0x2f889, (3001, 1)),
- (0x2f866, (2966, 1)),
- (0x2f865, (2965, 1)),
- (0x12f, (192, 2)),
- (0x2fa0e, (3390, 1)),
- (0x1e61, (1066, 2)),
- (0x1fd, (426, 2)),
- (0x2f803, (2867, 1)),
- (0x1fe3, (2008, 3)),
- (0xfa44, (2585, 1)),
- (0x1fa6, (1875, 4)),
- (0x20f, (462, 2)),
- (0x1fa4, (1867, 4)),
- (0xccb, (774, 3)),
- (0xfa4f, (2596, 1)),
- (0x2f997, (3271, 1)),
- (0x1e4b, (1012, 2)),
- (0xfaa2, (2677, 1)),
- (0x2f839, (2921, 1)),
- (0x1f55, (1641, 3)),
- (0x1e32, (960, 2)),
- (0xf9f0, (2513, 1)),
- (0xea, (70, 2)),
- (0x2f8d4, (3076, 1)),
- (0xf969, (2378, 1)),
- (0xfa, (96, 2)),
- (0x1e33, (962, 2)),
- (0x1e6f, (1100, 2)),
- (0xf9aa, (2443, 1)),
- (0xf938, (2329, 1)),
- (0x2f826, (2902, 1)),
- (0xf93c, (2333, 1)),
- (0x4e2, (646, 2)),
- (0x1e5f, (1062, 2)),
- (0x4c2, (620, 2)),
- (0x4dd, (640, 2)),
- (0x390, (550, 3)),
- (0x2f923, (3155, 1)),
- (0x419, (596, 2)),
- (0x2f8e9, (3097, 1)),
- (0x1b3b, (840, 2)),
- (0x2f860, (2960, 1)),
- (0x1ec0, (1278, 3)),
- (0x124, (174, 2)),
- (0x2f935, (3173, 1)),
- (0x21cd, (2071, 2)),
- (0x2f81f, (2895, 1)),
- (0x1f95, (1811, 4)),
- (0xfa59, (2606, 1)),
- (0xfb4a, (2793, 2)),
- (0x137, (202, 2)),
- (0x2fa19, (3401, 1)),
- (0x1e8c, (1162, 2)),
- (0x2fa11, (3393, 1)),
- (0xf992, (2419, 1)),
- (0xf99b, (2428, 1)),
- (0x226f, (2103, 2)),
- (0x2f908, (3128, 1)),
- (0x1ea1, (1194, 2)),
- (0x30c7, (2237, 2)),
- (0xf5c, (800, 2)),
- (0x114bc, (2819, 2)),
- (0xf91a, (2299, 1)),
- (0xfb49, (2791, 2)),
- (0x2f892, (3010, 1)),
- (0x1d1bb, (2848, 2)),
- (0x40e, (594, 2)),
- (0x1e7e, (1134, 2)),
- (0x1fd3, (1979, 3)),
- (0x1fb6, (1925, 2)),
- (0x164, (272, 2)),
- (0x2f92b, (3163, 1)),
- (0x1f3d, (1587, 3)),
- (0x386, (535, 2)),
- (0x1f24, (1518, 3)),
- (0xfacd, (2720, 1)),
- (0xfa17, (2547, 1)),
- (0x1e17, (901, 3)),
- (0xfa0b, (2540, 1)),
- (0x2f980, (3248, 1)),
- (0xfa2d, (2562, 1)),
- (0x2f88e, (3006, 1)),
- (0xfb2e, (2747, 2)),
- (0xfa31, (2566, 1)),
- (0x1f09, (1456, 2)),
- (0x2f815, (2885, 1)),
- (0x2f9ca, (3322, 1)),
- (0xfa55, (2602, 1)),
- (0x2f9f9, (3369, 1)),
- (0x1f62, (1665, 3)),
- (0x106, (118, 2)),
- (0x1ebf, (1275, 3)),
- (0x1f38, (1574, 2)),
- (0x1f20, (1508, 2)),
- (0x2f965, (3221, 1)),
- (0x2f829, (2905, 1)),
- (0x1ffb, (2054, 2)),
- (0xc9, (16, 2)),
- (0x147, (224, 2)),
- (0x2f9c3, (3315, 1)),
- (0x213, (470, 2)),
- (0x1f9d, (1841, 4)),
- (0x1f25, (1521, 3)),
- (0x2f9af, (3295, 1)),
- (0xfa77, (2634, 1)),
- (0x2209, (2079, 2)),
- (0xf76, (808, 2)),
- (0xf956, (2359, 1)),
- (0x1fcc, (1964, 2)),
- (0x1fa0, (1853, 3)),
- (0x13c, (210, 2)),
- (0x1eb3, (1245, 3)),
- (0x1e5a, (1050, 2)),
- (0xfb35, (2761, 2)),
- (0xf9b5, (2454, 1)),
- (0xfa0a, (2539, 1)),
- (0x1fa5, (1871, 4)),
- (0x22e, (512, 2)),
- (0x1eee, (1404, 3)),
- (0x1d5, (346, 3)),
- (0x15c, (256, 2)),
- (0xe3, (58, 2)),
- (0xfa8b, (2654, 1)),
- (0x3079, (2199, 2)),
- (0xfb38, (2765, 2)),
- (0x2f855, (2949, 1)),
- (0xfa9e, (2673, 1)),
- (0x14e, (232, 2)),
- (0x1e75, (1112, 2)),
- (0xfa46, (2587, 1)),
- (0x2fa0a, (3386, 1)),
- (0x211, (466, 2)),
- (0x2f8a9, (3033, 1)),
- (0x115, (144, 2)),
- (0x30d1, (2243, 2)),
- (0x1e47, (1004, 2)),
- (0x2f8e0, (3088, 1)),
- (0xfa7e, (2641, 1)),
- (0x1fd8, (1987, 2)),
- (0x1e92, (1174, 2)),
- (0x2f867, (2967, 1)),
- (0xfb1d, (2733, 2)),
- (0xf97d, (2398, 1)),
- (0xfab9, (2700, 1)),
- (0x2f846, (2934, 1)),
- (0x1e7d, (1132, 2)),
- (0xfac8, (2715, 1)),
- (0x104, (114, 2)),
- (0x4f5, (680, 2)),
- (0x2fa10, (3392, 1)),
- (0xf975, (2390, 1)),
- (0xf96a, (2379, 1)),
- (0xfa2b, (2560, 1)),
- (0x1f73, (1711, 2)),
- (0x2f957, (3207, 1)),
- (0x1edd, (1357, 3)),
- (0x3ad, (559, 2)),
- (0x2f924, (3156, 1)),
- (0xfad4, (2727, 1)),
- (0x2f97b, (3243, 1)),
- (0x2f853, (2947, 1)),
- (0xfa3f, (2580, 1)),
- (0xfa8a, (2653, 1)),
- (0xfb4c, (2797, 2)),
- (0x1f3b, (1581, 3)),
- (0xc4, (8, 2)),
- (0x1109a, (2803, 2)),
- (0x341, (527, 1)),
- (0x1e0d, (878, 2)),
- (0x4dc, (638, 2)),
- (0xfa10, (2543, 1)),
- (0x1ef1, (1413, 3)),
- (0x2f903, (3123, 1)),
- (0x1fed, (2030, 2)),
- (0x1fef, (2034, 1)),
- (0x1ea4, (1200, 3)),
- (0x21f, (490, 2)),
- (0xfa92, (2661, 1)),
- (0x2f8a4, (3028, 1)),
- (0xf9c8, (2473, 1)),
- (0xf9a0, (2433, 1)),
- (0x1e31, (958, 2)),
- (0xf903, (2276, 1)),
- (0x3d4, (580, 2)),
- (0x2f809, (2873, 1)),
- (0x1e07, (864, 2)),
- (0x1fb1, (1915, 2)),
- (0x2f8d1, (3073, 1)),
- (0x1e11, (886, 2)),
- (0x1fd2, (1976, 3)),
- (0x1d15e, (2829, 2)),
- (0x2f941, (3185, 1)),
- (0xf962, (2371, 1)),
- (0x1ef0, (1410, 3)),
- (0x1ee0, (1366, 3)),
- (0x3052, (2163, 2)),
- (0x148, (226, 2)),
- (0x1f44, (1606, 3)),
- (0x2f930, (3168, 1)),
- (0x1e0b, (874, 2)),
- (0x2f83e, (2926, 1)),
- (0x3094, (2207, 2)),
- (0x1e5b, (1052, 2)),
- (0xfa54, (2601, 1)),
- (0xf9fc, (2525, 1)),
- (0x1de, (370, 3)),
- (0x1e02, (854, 2)),
- (0x2f9e4, (3348, 1)),
- (0xf97f, (2400, 1)),
- (0x1fe1, (2003, 2)),
- (0x1ecb, (1308, 2)),
- (0x2f947, (3191, 1)),
- (0x2f82d, (2909, 1)),
- (0x1f6d, (1696, 3)),
- (0x1e4c, (1014, 3)),
- (0x1e00, (850, 2)),
- (0x2f93c, (3180, 1)),
- (0x2f9c4, (3316, 1)),
- (0x1f2d, (1543, 3)),
- (0x38c, (544, 2)),
- (0x115bb, (2825, 2)),
- (0xfa0c, (2541, 1)),
- (0x2f986, (3254, 1)),
- (0x1f0a, (1458, 3)),
- (0x1f83, (1743, 4)),
- (0x1ee3, (1375, 3)),
- (0x2f93e, (3182, 1)),
- (0x2f8ed, (3101, 1)),
- (0x2f981, (3249, 1)),
- (0x1f54, (1638, 3)),
- (0x1e16, (898, 3)),
- (0xfa6a, (2623, 1)),
- (0x179, (310, 2)),
- (0xfb2d, (2744, 3)),
- (0xf90b, (2284, 1)),
- (0xfb3e, (2775, 2)),
- (0x2f9b0, (3296, 1)),
- (0xf932, (2323, 1)),
- (0x1ee6, (1382, 2)),
- (0x2f85e, (2958, 1)),
- (0x2f8d7, (3079, 1)),
- (0x1e40, (990, 2)),
- (0x22ed, (2151, 2)),
- (0x1f43, (1603, 3)),
- (0x4e5, (652, 2)),
- (0xfaa5, (2680, 1)),
- (0x1fa3, (1863, 4)),
- (0x2f967, (3223, 1)),
- (0xf993, (2420, 1)),
- (0x2f88d, (3005, 1)),
- (0xed, (76, 2)),
- (0x2f906, (3126, 1)),
- (0xfa98, (2667, 1)),
- (0x2f901, (3121, 1)),
- (0x1ff7, (2045, 3)),
- (0x95c, (716, 2)),
- (0xfa60, (2613, 1)),
- (0x3ca, (568, 2)),
- (0xfa62, (2615, 1)),
- (0x2f8c3, (3059, 1)),
- (0x1eca, (1306, 2)),
- (0xf950, (2353, 1)),
- (0x173, (298, 2)),
- (0x2f99a, (3274, 1)),
- (0x2f970, (3232, 1)),
- (0x2f85a, (2954, 1)),
- (0x2fa13, (3395, 1)),
- (0xf98b, (2412, 1)),
- (0x2f913, (3139, 1)),
- (0xfb9, (824, 2)),
- (0xf919, (2298, 1)),
- (0x1eba, (1264, 2)),
- (0x2f890, (3008, 1)),
- (0xf953, (2356, 1)),
- (0x1eb2, (1242, 3)),
- (0xf904, (2277, 1)),
- (0x1dc, (367, 3)),
- (0x3ab, (555, 2)),
- (0xf94e, (2351, 1)),
- (0x2f8df, (3087, 1)),
- (0x1f19, (1494, 2)),
- (0x30bc, (2227, 2)),
- (0x305e, (2175, 2)),
- (0x1e87, (1152, 2)),
- (0xf9fa, (2523, 1)),
- (0x2f82b, (2907, 1)),
- (0x2f81d, (2893, 1)),
- (0x2f8a3, (3027, 1)),
- (0x2fa04, (3380, 1)),
- (0xfa3a, (2575, 1)),
- (0x4e4, (650, 2)),
- (0x2f9d5, (3333, 1)),
- (0x2f90d, (3133, 1)),
- (0xf967, (2376, 1)),
- (0xfad3, (2726, 1)),
- (0x1ff2, (2035, 3)),
- (0x1e86, (1150, 2)),
- (0xf92d, (2318, 1)),
- (0x1ef7, (1426, 2)),
- (0xfa89, (2652, 1)),
- (0x2f874, (2980, 1)),
- (0x2f852, (2946, 1)),
- (0xf9cd, (2478, 1)),
- (0x2f854, (2948, 1)),
- (0x1e25, (932, 2)),
- (0x1ec1, (1281, 3)),
- (0x1edb, (1351, 3)),
- (0x205, (442, 2)),
- (0x2f843, (2931, 1)),
- (0x2f8b1, (3041, 1)),
- (0x1fb8, (1930, 2)),
- (0xbcb, (760, 2)),
- (0x2f84c, (2940, 1)),
- (0xfa30, (2565, 1)),
- (0x9cb, (724, 2)),
- (0x2f858, (2952, 1)),
- (0x1f5b, (1652, 3)),
- (0x6c2, (698, 2)),
- (0x2f950, (3200, 1)),
- (0xb5c, (752, 2)),
- (0xfa4d, (2594, 1)),
- (0x1f93, (1803, 4)),
- (0xfa74, (2631, 1)),
- (0x1f59, (1650, 2)),
- (0x2fa1d, (3405, 1)),
- (0xfa70, (2627, 1)),
- (0xfa18, (2548, 1)),
- (0x2f888, (3000, 1)),
- (0x2f8b7, (3047, 1)),
- (0xf99d, (2430, 1)),
- (0xf9db, (2492, 1)),
- (0xf940, (2337, 1)),
- (0x1f8d, (1781, 4)),
- (0x1f97, (1819, 4)),
- (0x1e10, (884, 2)),
- (0xf997, (2424, 1)),
- (0x2f956, (3206, 1)),
- (0x2f9aa, (3290, 1)),
- (0x1e41, (992, 2)),
- (0x2f90c, (3132, 1)),
- (0x2f862, (2962, 1)),
- (0x1e66, (1078, 3)),
- (0x1ef8, (1428, 2)),
- (0x2f849, (2937, 1)),
- (0x2f894, (3012, 1)),
- (0x1e7f, (1136, 2)),
- (0x1f29, (1532, 2)),
- (0xfa1c, (2552, 1)),
- (0x1eb0, (1236, 3)),
- (0x1f74, (1713, 2)),
- (0x1ee9, (1389, 3)),
- (0x1fbb, (1936, 2)),
- (0x162, (268, 2)),
- (0xd2, (32, 2)),
- (0xfa97, (2666, 1)),
- (0x2f824, (2900, 1)),
- (0x233, (524, 2)),
- (0x22af, (2135, 2)),
- (0x1fec, (2028, 2)),
- (0xfa7f, (2642, 1)),
- (0x2f94a, (3194, 1)),
- (0x2f887, (2999, 1)),
- (0x2fa17, (3399, 1)),
- (0x931, (704, 2)),
- (0x130, (194, 2)),
- (0x135, (198, 2)),
- (0x3076, (2195, 2)),
- (0xfa2, (818, 2)),
- (0x4f8, (682, 2)),
- (0x1f27, (1527, 3)),
- (0xf963, (2372, 1)),
- (0xf94d, (2350, 1)),
- (0x340, (526, 1)),
- (0x2f9cd, (3325, 1)),
- (0x1e01, (852, 2)),
- (0x1ed3, (1327, 3)),
- (0x103, (112, 2)),
- (0x200, (432, 2)),
- (0x17c, (316, 2)),
- (0xf92c, (2317, 1)),
- (0x1e12, (888, 2)),
- (0xfb33, (2757, 2)),
- (0xfa93, (2662, 1)),
- (0xf5, (90, 2)),
- (0x30f8, (2265, 2)),
- (0x210, (464, 2)),
- (0xf3, (86, 2)),
- (0x2f804, (2868, 1)),
- (0x2f8c0, (3056, 1)),
- (0x21a, (484, 2)),
- (0x1e1c, (912, 3)),
- (0x11e, (162, 2)),
- (0x1f8f, (1789, 4)),
- (0xfa4c, (2593, 1)),
- (0x95b, (714, 2)),
- (0xfa45, (2586, 1)),
- (0xfad5, (2728, 1)),
- (0x2f82e, (2910, 1)),
- (0xfa5c, (2609, 1)),
- (0xf9b7, (2456, 1)),
- (0x206, (444, 2)),
- (0x1fc7, (1953, 3)),
- (0x3cb, (570, 2)),
- (0xf9dc, (2493, 1)),
- (0x22b, (503, 3)),
- (0xf92e, (2319, 1)),
- (0x1ee2, (1372, 3)),
- (0x2f88f, (3007, 1)),
- (0x2f94c, (3196, 1)),
- (0xfa84, (2647, 1)),
- (0x2f9e3, (3347, 1)),
- (0xf9d6, (2487, 1)),
- (0x15d, (258, 2)),
- (0x1e24, (930, 2)),
- (0x2f95c, (3212, 1)),
- (0x1ea6, (1206, 3)),
- (0x1ea8, (1212, 3)),
- (0x30f7, (2263, 2)),
- (0xf977, (2392, 1)),
- (0xfac4, (2711, 1)),
- (0xfa3b, (2576, 1)),
- (0x2f904, (3124, 1)),
- (0xf9ab, (2444, 1)),
- (0x4eb, (660, 2)),
- (0xfa20, (2555, 1)),
- (0x2f907, (3127, 1)),
- (0x1ec6, (1296, 3)),
- (0x2fa05, (3381, 1)),
- (0x110ab, (2807, 2)),
- (0x1e3f, (988, 2)),
- (0x2285, (2123, 2)),
- (0x343, (528, 1)),
- (0xf9da, (2491, 1)),
- (0x2fa07, (3383, 1)),
- (0x2fa15, (3397, 1)),
- (0x4f3, (676, 2)),
- (0x113, (140, 2)),
- (0x1f7b, (1727, 2)),
- (0x21cf, (2075, 2)),
- (0x1f7a, (1725, 2)),
- (0xe5, (62, 2)),
- (0x307d, (2205, 2)),
- (0x2fa14, (3396, 1)),
- (0x2f891, (3009, 1)),
- (0x2f9e5, (3349, 1)),
- (0x2f983, (3251, 1)),
- (0x1f90, (1793, 3)),
- (0x1e85, (1148, 2)),
- (0xd4, (36, 2)),
- (0x22e0, (2137, 2)),
- (0x3ae, (561, 2)),
- (0x2f8ae, (3038, 1)),
- (0xf9fb, (2524, 1)),
- (0xf99c, (2429, 1)),
- (0x217, (478, 2)),
- (0x1eb7, (1257, 3)),
- (0x2f8aa, (3034, 1)),
- (0x385, (533, 2)),
- (0xfa16, (2546, 1)),
- (0x2f9e2, (3346, 1)),
- (0x1e1, (379, 3)),
- (0x2fa00, (3376, 1)),
- (0x154, (240, 2)),
- (0x1fb7, (1927, 3)),
- (0x1eef, (1407, 3)),
- (0xfa02, (2531, 1)),
- (0x2f990, (3264, 1)),
- (0x1e52, (1032, 3)),
- (0x624, (690, 2)),
- (0x2f99d, (3277, 1)),
- (0x2f883, (2995, 1)),
- (0x1fd7, (1984, 3)),
- (0xf9cc, (2477, 1)),
- (0xf926, (2311, 1)),
- (0x1e56, (1042, 2)),
- (0xfa06, (2535, 1)),
- (0xfa51, (2598, 1)),
- (0x1ef4, (1420, 2)),
- (0x2f9da, (3338, 1)),
- (0x1e36, (968, 2)),
- (0x6d3, (700, 2)),
- (0x2f9ff, (3375, 1)),
- (0x2f8e2, (3090, 1)),
- (0x1eaa, (1218, 3)),
- (0x2f8ad, (3037, 1)),
- (0xfa07, (2536, 1)),
- (0x2f97a, (3242, 1)),
- (0x2f966, (3222, 1)),
- (0x1e80, (1138, 2)),
- (0x1d2, (340, 2)),
- (0x1f63, (1668, 3)),
- (0x1fad, (1901, 4)),
- (0xf91e, (2303, 1)),
- (0xfaa0, (2675, 1)),
- (0x2f863, (2963, 1)),
- (0x30dd, (2259, 2)),
- (0x45e, (612, 2)),
- (0x2f91a, (3146, 1)),
- (0x1e05, (860, 2)),
- (0x11a, (154, 2)),
- (0x1f61, (1663, 2)),
- (0x2fa1b, (3403, 1)),
- (0x2f9e0, (3344, 1)),
- (0x13d, (212, 2)),
- (0xfb32, (2755, 2)),
- (0x1ea5, (1203, 3)),
- (0xddd, (787, 3)),
- (0x118, (150, 2)),
- (0x207, (446, 2)),
- (0x1ffa, (2052, 2)),
- (0x2f93f, (3183, 1)),
- (0x2f886, (2998, 1)),
- (0xf9e0, (2497, 1)),
- (0xf970, (2385, 1)),
- (0x2f97e, (3246, 1)),
- (0xf972, (2387, 1)),
- (0x136, (200, 2)),
- (0x1b0a, (832, 2)),
- (0x3073, (2191, 2)),
- (0xf916, (2295, 1)),
- (0x22e2, (2141, 2)),
- (0x2f921, (3153, 1)),
- (0x2260, (2095, 2)),
- (0x1f66, (1677, 3)),
- (0x2f80f, (2879, 1)),
- (0x2001, (2060, 1)),
- (0x1f88, (1763, 3)),
- (0xfaa6, (2681, 1)),
- (0x1fae, (1905, 4)),
- (0xfaa4, (2679, 1)),
- (0x1f3a, (1578, 3)),
- (0xfac1, (2708, 1)),
- (0xfa8f, (2658, 1)),
- (0x95d, (718, 2)),
- (0xf9d1, (2482, 1)),
- (0x1b41, (846, 2)),
- (0xf948, (2345, 1)),
- (0x1e3c, (982, 2)),
- (0xfad9, (2732, 1)),
- (0x400, (582, 2)),
- (0xf96d, (2382, 1)),
- (0x1e7c, (1130, 2)),
- (0x3d3, (578, 2)),
- (0x172, (296, 2)),
- (0x1e1f, (920, 2)),
- (0xfa9f, (2674, 1)),
- (0x226e, (2101, 2)),
- (0x2f822, (2898, 1)),
- (0xf75, (806, 2)),
- (0x2f871, (2977, 1)),
- (0x2f812, (2882, 1)),
- (0x2275, (2111, 2)),
- (0x1f3f, (1593, 3)),
- (0x30d7, (2251, 2)),
- (0xd9, (42, 2)),
- (0x2f8ab, (3035, 1)),
- (0xfa7a, (2637, 1)),
- (0xf915, (2294, 1)),
- (0x1e1d, (915, 3)),
- (0x1eb, (396, 2)),
- (0x2f808, (2872, 1)),
- (0x2f98e, (3262, 1)),
- (0xfa53, (2600, 1)),
- (0xf9a6, (2439, 1)),
- (0x2f80c, (2876, 1)),
- (0x2f8f5, (3109, 1)),
- (0x2fa02, (3378, 1)),
- (0x1e81, (1140, 2)),
- (0xf930, (2321, 1)),
- (0x3060, (2177, 2)),
- (0x1fea, (2024, 2)),
- (0x38a, (542, 2)),
- (0x2f85c, (2956, 1)),
- (0x1fc9, (1958, 2)),
- (0x2f86f, (2975, 1)),
- (0x2f90a, (3130, 1)),
- (0x2f902, (3122, 1)),
- (0x2f835, (2917, 1)),
- (0x14d, (230, 2)),
- (0x1d162, (2839, 3)),
- (0xf923, (2308, 1)),
- (0x2f896, (3014, 1)),
- (0x22d, (509, 3)),
- (0xf9f2, (2515, 1)),
- (0x30c2, (2233, 2)),
- (0x30d4, (2247, 2)),
- (0xf97e, (2399, 1)),
- (0x1fe2, (2005, 3)),
- (0xec, (74, 2)),
- (0x1f49, (1614, 2)),
- (0xfa8d, (2656, 1)),
- (0x2f898, (3016, 1)),
- (0x1eb5, (1251, 3)),
- (0x2f994, (3268, 1)),
- (0x12b, (184, 2)),
- (0x20e, (460, 2)),
- (0x168, (276, 2)),
- (0x1f56, (1644, 3)),
- (0x2f8a0, (3024, 1)),
- (0xfa52, (2599, 1)),
- (0x2f93d, (3181, 1)),
- (0xda, (44, 2)),
- (0x1ec4, (1290, 3)),
- (0x1e95, (1180, 2)),
- (0x1f67, (1680, 3)),
- (0x2f9c1, (3313, 1)),
- (0xf9de, (2495, 1)),
- (0x2f83d, (2925, 1)),
- (0xf9ed, (2510, 1)),
- (0xfabf, (2706, 1)),
- (0x457, (606, 2)),
- (0xfa0d, (2542, 1)),
- (0xfab1, (2692, 1)),
- (0x2f8fa, (3114, 1)),
- (0x1e49, (1008, 2)),
- (0xf91b, (2300, 1)),
- (0x1e50, (1026, 3)),
- (0xf94a, (2347, 1)),
- (0xfa90, (2659, 1)),
- (0x2284, (2121, 2)),
- (0x1ea0, (1192, 2)),
- (0x169, (278, 2)),
- (0xf900, (2273, 1)),
- (0x1eeb, (1395, 3)),
- (0xf9e5, (2502, 1)),
- (0x2f9ea, (3354, 1)),
- (0x2f8ac, (3036, 1)),
- (0x2f8f8, (3112, 1)),
- (0xcc8, (770, 2)),
- (0x2f8f6, (3110, 1)),
- (0xf968, (2377, 1)),
- (0x1e6c, (1094, 2)),
- (0x2f8d8, (3080, 1)),
- (0x1eb6, (1254, 3)),
- (0x2f899, (3017, 1)),
- (0xc3, (6, 2)),
- (0x1b0, (328, 2)),
- (0x1f13, (1483, 3)),
- (0x1e63, (1070, 2)),
- (0x112, (138, 2)),
- (0x2f920, (3152, 1)),
- (0xfa04, (2533, 1)),
- (0x2f8d9, (3081, 1)),
- (0x1e38, (972, 3)),
- (0x1f94, (1807, 4)),
- (0x2f940, (3184, 1)),
- (0x2f97d, (3245, 1)),
- (0x2f84e, (2942, 1)),
- (0xf9a5, (2438, 1)),
- (0x9dc, (728, 2)),
- (0xfc, (100, 2)),
- (0x1eec, (1398, 3)),
- (0x1a0, (322, 2)),
- (0x2f9b4, (3300, 1)),
- (0xbca, (758, 2)),
- (0x2f834, (2916, 1)),
- (0x2fa0b, (3387, 1)),
- (0xfad8, (2731, 1)),
- (0x30c5, (2235, 2)),
- (0xf9f5, (2518, 1)),
- (0x2f84b, (2939, 1)),
- (0x1e5e, (1060, 2)),
- (0x2f8c6, (3062, 1)),
- (0x2f93b, (3179, 1)),
- (0x151, (238, 2)),
- (0x1ffc, (2056, 2)),
- (0xfa39, (2574, 1)),
- (0x1e09, (869, 3)),
- (0xf999, (2426, 1)),
- (0x2f8e6, (3094, 1)),
- (0x2f8ba, (3050, 1)),
- (0x2f876, (2982, 1)),
- (0x123, (172, 2)),
- (0xfb3c, (2773, 2)),
- (0xf996, (2423, 1)),
- (0x1e8d, (1164, 2)),
- (0x10c, (130, 2)),
- (0x2f8ee, (3102, 1)),
- (0xf909, (2282, 1)),
- (0xfa4a, (2591, 1)),
- (0x2f9a9, (3289, 1)),
- (0x2f806, (2870, 1)),
- (0x30d0, (2241, 2)),
- (0x2f9bb, (3307, 1)),
- (0x2f975, (3237, 1)),
- (0x2fa18, (3400, 1)),
- (0x2f989, (3257, 1)),
- (0xf987, (2408, 1)),
- (0x2f80a, (2874, 1)),
- (0xf998, (2425, 1)),
- (0xf979, (2394, 1)),
- (0xf90d, (2286, 1)),
- (0xf922, (2307, 1)),
- (0x1f8c, (1777, 4)),
- (0x1f37, (1571, 3)),
- (0xfb48, (2789, 2)),
- (0x3067, (2183, 2)),
- (0x2f932, (3170, 1)),
- (0x1ed2, (1324, 3)),
- (0xd1, (30, 2)),
- (0x1e28, (938, 2)),
- (0x178, (308, 2)),
- (0x2f9ac, (3292, 1)),
- (0x161, (266, 2)),
- (0xfad0, (2723, 1)),
- (0x401, (584, 2)),
- (0x2241, (2087, 2)),
- (0xf9bd, (2462, 1)),
- (0x2f8f0, (3104, 1)),
- (0x1e45, (1000, 2)),
- (0xf9d9, (2490, 1)),
- (0xfaa9, (2684, 1)),
- (0xfa35, (2570, 1)),
- (0x4d2, (626, 2)),
- (0x1e34, (964, 2)),
- (0xf927, (2312, 1)),
- (0x1ec3, (1287, 3)),
- (0x2f8de, (3086, 1)),
- (0x2f9a2, (3282, 1)),
- (0xf943, (2340, 1)),
- (0x1e8f, (1168, 2)),
- (0xf9d5, (2486, 1)),
- (0xf982, (2403, 1)),
- (0x1f50, (1628, 2)),
- (0x1f92, (1799, 4)),
- (0xf81, (812, 2)),
- (0xfa87, (2650, 1)),
- (0x2f94e, (3198, 1)),
- (0x1fab, (1893, 4)),
- (0xfa3d, (2578, 1)),
- (0x1d9, (358, 3)),
- (0x2f996, (3270, 1)),
- (0x1e8a, (1158, 2)),
- (0xfa58, (2605, 1)),
- (0x1fc1, (1941, 2)),
- (0x2f961, (3217, 1)),
- (0x344, (529, 2)),
- (0x1f34, (1562, 3)),
- (0xf9a8, (2441, 1)),
- (0x163, (270, 2)),
- (0xfb4b, (2795, 2)),
- (0x9cc, (726, 2)),
- (0x1e71, (1104, 2)),
- (0xe2, (56, 2)),
- (0xf9f3, (2516, 1)),
- (0x2f89e, (3022, 1)),
- (0x2f8b3, (3043, 1)),
- (0x1f4d, (1625, 3)),
- (0x1ef9, (1430, 2)),
- (0x2f82f, (2911, 1)),
- (0xfa2e, (2563, 1)),
- (0x2f814, (2884, 1)),
- (0xfad1, (2724, 1)),
- (0x1ec5, (1293, 3)),
- (0x9df, (732, 2)),
- (0x2f8a1, (3025, 1)),
- (0xf939, (2330, 1)),
- (0x228, (496, 2)),
- (0x2f8d2, (3074, 1)),
- (0x1d1bd, (2852, 3)),
- (0x1f86, (1755, 4)),
- (0x2f868, (2968, 1)),
- (0x22a, (500, 3)),
- (0x2f8e3, (3091, 1)),
- (0xa5a, (740, 2)),
- (0x1fc8, (1956, 2)),
- (0xfa22, (2556, 1)),
- (0x1ed, (401, 3)),
- (0xf99f, (2432, 1)),
- (0x2f9b8, (3304, 1)),
- (0x2f9e7, (3351, 1)),
- (0xfabb, (2702, 1)),
- (0x1d6, (349, 3)),
- (0xfb31, (2753, 2)),
- (0x146, (222, 2)),
- (0x1ef2, (1416, 2)),
- (0x1fa1, (1856, 3)),
- (0x1e18, (904, 2)),
- (0xfa9b, (2670, 1)),
- (0xfa80, (2643, 1)),
- (0xfacc, (2719, 1)),
- (0x17a, (312, 2)),
- (0x1e3b, (980, 2)),
- (0x1e74, (1110, 2)),
- (0x2f86b, (2971, 1)),
- (0x1e23, (928, 2)),
- (0x175, (302, 2)),
- (0x1e3e, (986, 2)),
- (0x4db, (636, 2)),
- (0x219b, (2067, 2)),
- (0x1e84, (1146, 2)),
- (0xf9cf, (2480, 1)),
- (0x1e44, (998, 2)),
- (0x1e1a, (908, 2)),
- (0x1f65, (1674, 3)),
- (0xf929, (2314, 1)),
- (0x2247, (2091, 2)),
- (0x4f2, (674, 2)),
- (0x2f87c, (2988, 1)),
- (0x1e2f, (953, 3)),
- (0x2f84a, (2938, 1)),
- (0x2f98c, (3260, 1)),
- (0x2f9a1, (3281, 1)),
- (0x1ec8, (1302, 2)),
- (0x157, (246, 2)),
- (0x2f8bf, (3055, 1)),
- (0xfb41, (2779, 2)),
- (0x4f9, (684, 2)),
- (0x2f995, (3269, 1)),
- (0x12e, (190, 2)),
- (0xf9b6, (2455, 1)),
- (0x1ebc, (1268, 2)),
- (0x1e21, (924, 2)),
- (0x2f841, (2929, 1)),
- (0x116, (146, 2)),
- (0x453, (604, 2)),
- (0x2f992, (3266, 1)),
- (0x1d164, (2845, 3)),
- (0x2f8e1, (3089, 1)),
- (0xfa75, (2632, 1)),
- (0xf902, (2275, 1)),
- (0xf908, (2281, 1)),
- (0x2f817, (2887, 1)),
- (0xf95f, (2368, 1)),
- (0x2f83b, (2923, 1)),
- (0x10f, (136, 2)),
- (0xd3, (34, 2)),
- (0x3069, (2185, 2)),
- (0x1e65, (1075, 3)),
- (0xfb43, (2781, 2)),
- (0x30ba, (2225, 2)),
- (0x1f9b, (1833, 4)),
- (0x16c, (284, 2)),
- (0xc7, (12, 2)),
- (0x2f96b, (3227, 1)),
- (0xf9f8, (2521, 1)),
- (0x158, (248, 2)),
- (0x1d163, (2842, 3)),
- (0x1ea7, (1209, 3)),
- (0x2288, (2125, 2)),
- (0xfacb, (2718, 1)),
- (0xf901, (2274, 1)),
- (0x1f8e, (1785, 4)),
- (0x2fa09, (3385, 1)),
- (0x2f9c8, (3320, 1)),
- (0x1e0e, (880, 2)),
- (0xf949, (2346, 1)),
- (0xe8, (66, 2)),
- (0xfa3c, (2577, 1)),
- (0x2f8ec, (3100, 1)),
- (0x2f8db, (3083, 1)),
- (0x218, (480, 2)),
- (0x3065, (2181, 2)),
- (0xfa7c, (2639, 1)),
- (0x1f82, (1739, 4)),
- (0x1e9b, (1190, 2)),
- (0x209, (450, 2)),
- (0x1fd1, (1974, 2)),
- (0x2f9fa, (3370, 1)),
- (0x30f4, (2261, 2)),
- (0x1f1a, (1496, 3)),
- (0x1e5c, (1054, 3)),
- (0xfa6b, (2624, 1)),
- (0x2f9de, (3342, 1)),
- (0xf9c6, (2471, 1)),
- (0x1da, (361, 3)),
- (0x1f0e, (1470, 3)),
- (0xf97b, (2396, 1)),
- (0xf9c3, (2468, 1)),
- (0x117, (148, 2)),
- (0xf945, (2342, 1)),
- (0x2f9fe, (3374, 1)),
- (0x1ed6, (1336, 3)),
- (0x625, (692, 2)),
- (0x2f9bc, (3308, 1)),
- (0x2249, (2093, 2)),
- (0x1d4, (344, 2)),
- (0x2f9f0, (3360, 1)),
- (0x2f931, (3169, 1)),
- (0x2f92a, (3162, 1)),
- (0x1fdb, (1993, 2)),
- (0xfa7b, (2638, 1)),
- (0x2f882, (2994, 1)),
- (0x2f8ef, (3103, 1)),
- (0xf94f, (2352, 1)),
- (0xf93, (814, 2)),
- (0x2f945, (3189, 1)),
- (0x3056, (2167, 2)),
- (0x959, (710, 2)),
- (0x22ac, (2129, 2)),
- (0x1ff6, (2043, 2)),
- (0x2f801, (2865, 1)),
- (0xf921, (2306, 1)),
- (0xfa41, (2582, 1)),
- (0xf9fe, (2527, 1)),
- (0xfaa3, (2678, 1)),
- (0x2f8b4, (3044, 1)),
- (0x20c, (456, 2)),
- (0xf9c1, (2466, 1)),
- (0x2000, (2059, 1)),
- (0x2f905, (3125, 1)),
- (0x40d, (592, 2)),
- (0x1f79, (1723, 2)),
- (0x2f95b, (3211, 1)),
- (0x1e72, (1106, 2)),
- (0x2f91b, (3147, 1)),
- (0xf9e1, (2498, 1)),
- (0x2f9cb, (3323, 1)),
- (0x2f84d, (2941, 1)),
- (0x2f8a7, (3031, 1)),
- (0x1f05, (1445, 3)),
- (0xfb30, (2751, 2)),
- (0xfa01, (2530, 1)),
- (0xef, (80, 2)),
- (0x1d1c0, (2861, 3)),
- (0x2f819, (2889, 1)),
- (0xca, (18, 2)),
- (0x21ae, (2069, 2)),
- (0x1e2e, (950, 3)),
- (0x30da, (2255, 2)),
- (0x2f880, (2992, 1)),
- (0x2f832, (2914, 1)),
- (0x1db, (364, 3)),
- (0x4e7, (656, 2)),
- (0x2f85b, (2955, 1)),
- (0x1f0, (408, 2)),
- (0x2f9c7, (3319, 1)),
- (0x1e68, (1084, 3)),
- (0xf90c, (2285, 1)),
- (0xfb4d, (2799, 2)),
- (0x2f8f4, (3108, 1)),
- (0x3b0, (565, 3)),
- (0xf90f, (2288, 1)),
- (0x2f89f, (3023, 1)),
- (0x1f9a, (1829, 4)),
- (0xfa88, (2651, 1)),
- (0x1d1bf, (2858, 3)),
- (0x3071, (2189, 2)),
- (0xfa69, (2622, 1)),
- (0x1026, (826, 2)),
- (0xfa1a, (2550, 1)),
- (0x1e03, (856, 2)),
- (0xf928, (2313, 1)),
- (0x2f974, (3236, 1)),
- (0xb4b, (748, 2)),
- (0x1f1d, (1505, 3)),
- (0x165, (274, 2)),
- (0xfad2, (2725, 1)),
- (0xfac9, (2716, 1)),
- (0x2f897, (3015, 1)),
- (0x2fa0f, (3391, 1)),
- (0x2f9ae, (3294, 1)),
- (0xc8, (14, 2)),
- (0x2f8bc, (3052, 1)),
- (0x2f96a, (3226, 1)),
- (0x2f9fb, (3371, 1)),
- (0x2f8cd, (3069, 1)),
- (0xfb1f, (2735, 2)),
- (0x2f94b, (3195, 1)),
- (0x2f811, (2881, 1)),
- (0x95a, (712, 2)),
- (0x30dc, (2257, 2)),
- (0xf78, (810, 2)),
- (0x2f909, (3129, 1)),
- (0x22ae, (2133, 2)),
- (0xf9d8, (2489, 1)),
- (0xfa8e, (2657, 1)),
- (0x1e2a, (942, 2)),
- (0x108, (122, 2)),
- (0x2f9cf, (3327, 1)),
- (0x1e7b, (1127, 3)),
- (0x2f8cb, (3067, 1)),
- (0xfac2, (2709, 1)),
- (0x1d15f, (2831, 2)),
- (0xf924, (2309, 1)),
- (0xf96f, (2384, 1)),
- (0x1ede, (1360, 3)),
- (0x2f987, (3255, 1)),
- (0x1f72, (1709, 2)),
- (0x1ed4, (1330, 3)),
- (0x2f8b2, (3042, 1)),
- (0xfa42, (2583, 1)),
- (0x626, (694, 2)),
- (0xfa9d, (2672, 1)),
- (0x2f9b3, (3299, 1)),
- (0x2f919, (3145, 1)),
- (0xf9d3, (2484, 1)),
- (0xfa71, (2628, 1)),
- (0x1f2f, (1549, 3)),
- (0x1ed9, (1345, 3)),
- (0xfb2f, (2749, 2)),
- (0x2f8dc, (3084, 1)),
- (0x1eb4, (1248, 3)),
- (0xfa25, (2557, 1)),
- (0x2f86d, (2973, 1)),
- (0x4ea, (658, 2)),
- (0x1ecd, (1312, 2)),
- (0x1f01, (1434, 2)),
- (0x2f8d0, (3072, 1)),
- (0x2f93a, (3178, 1)),
- (0x40c, (590, 2)),
- (0xf93a, (2331, 1)),
- (0xf9ff, (2528, 1)),
- (0x1e26, (934, 2)),
- (0x1f08, (1454, 2)),
- (0x1f03, (1439, 3)),
- (0xfad7, (2730, 1)),
- (0x2f884, (2996, 1)),
- (0x2f845, (2933, 1)),
- (0x38e, (546, 2)),
- (0x4d0, (622, 2)),
- (0x30be, (2229, 2)),
- (0x1f32, (1556, 3)),
- (0x2fa08, (3384, 1)),
- (0x17d, (318, 2)),
- (0x1e3d, (984, 2)),
- (0xfa2c, (2561, 1)),
- (0x2f95f, (3215, 1)),
- (0x2f99c, (3276, 1)),
- (0x1f6f, (1702, 3)),
- (0xf937, (2328, 1)),
- (0xfa34, (2569, 1)),
- (0x1f2a, (1534, 3)),
- (0xf69, (802, 2)),
- (0xe0, (52, 2)),
- (0x2f978, (3240, 1)),
- (0x2f97f, (3247, 1)),
- (0x1ef, (406, 2)),
- (0x1b43, (848, 2)),
- (0x155, (242, 2)),
- (0x1fc6, (1951, 2)),
- (0x20a, (452, 2)),
- (0x3077, (2197, 2)),
- (0x1e1b, (910, 2)),
- (0x2f885, (2997, 1)),
- (0x20d, (458, 2)),
- (0xf9c4, (2469, 1)),
- (0xf9a7, (2440, 1)),
- (0xf98e, (2415, 1)),
- (0xf4d, (794, 2)),
- (0x2f805, (2869, 1)),
- (0x159, (250, 2)),
- (0xf4, (88, 2)),
- (0x1f40, (1596, 2)),
- (0xfa00, (2529, 1)),
- (0x2f9f6, (3366, 1)),
- (0xfaae, (2689, 1)),
- (0xfa15, (2545, 1)),
- (0x212b, (2063, 2)),
- (0x2fa06, (3382, 1)),
- (0xd5, (38, 2)),
- (0x1e2d, (948, 2)),
- (0x1f0f, (1473, 3)),
- (0x2271, (2107, 2)),
- (0x1f71, (1707, 2)),
- (0xfa47, (2588, 1)),
- (0xd4b, (779, 2)),
- (0x2f81c, (2892, 1)),
- (0x1fb9, (1932, 2)),
- (0xfa26, (2558, 1)),
- (0x1ff9, (2050, 2)),
- (0x134, (196, 2)),
- (0xf991, (2418, 1)),
- (0x1d160, (2833, 3)),
- (0xf9ac, (2445, 1)),
- (0x2f828, (2904, 1)),
- (0x1fd9, (1989, 2)),
- (0x2f8eb, (3099, 1)),
- (0x2f88b, (3003, 1)),
- (0x2f9b1, (3297, 1)),
- (0xf9bc, (2461, 1)),
- (0xfa2a, (2559, 1)),
- (0x307c, (2203, 2)),
- (0x1f5, (412, 2)),
- (0x1f78, (1721, 2)),
- (0xfa72, (2629, 1)),
- (0x2280, (2117, 2)),
- (0x2f918, (3144, 1)),
- (0xe4, (60, 2)),
- (0x2f802, (2866, 1)),
- (0x2f8d6, (3078, 1)),
- (0x388, (538, 2)),
- (0xfac5, (2712, 1)),
- (0x10d, (132, 2)),
- (0xf958, (2361, 1)),
- (0x1ebe, (1272, 3)),
- (0xf90a, (2283, 1)),
- (0x1f9, (416, 2)),
- (0xb4c, (750, 2)),
- (0x1f57, (1647, 3)),
- (0x1e06, (862, 2)),
- (0x1ed1, (1321, 3)),
- (0x1ff3, (2038, 2)),
- (0x1e2b, (944, 2)),
- (0x1eb8, (1260, 2)),
- (0x2f875, (2981, 1)),
- (0xf942, (2339, 1)),
- (0x1f6a, (1687, 3)),
- (0x1e0, (376, 3)),
- (0x2f94d, (3197, 1)),
- (0xc48, (764, 2)),
- (0x2f810, (2880, 1)),
- (0x1f36, (1568, 3)),
- (0x2f8f3, (3107, 1)),
- (0xfd, (102, 2)),
- (0xf961, (2370, 1)),
- (0x2f873, (2979, 1)),
- (0x37e, (532, 1)),
- (0xf911, (2290, 1)),
- (0xfac6, (2713, 1)),
- (0x2f89d, (3021, 1)),
- (0x2f960, (3216, 1)),
- (0xfa82, (2645, 1)),
- (0x2f96f, (3231, 1)),
- (0x1f33, (1559, 3)),
- (0x1f5f, (1658, 3)),
- (0x1e67, (1081, 3)),
- (0x30d9, (2253, 2)),
- (0xf99a, (2427, 1)),
- (0x22ec, (2149, 2)),
- (0x204, (440, 2)),
- (0xdc, (48, 2)),
- (0x2f925, (3157, 1)),
- (0xfa68, (2621, 1)),
- (0x2f840, (2928, 1)),
- (0x3cd, (574, 2)),
- (0x1e90, (1170, 2)),
- (0x1f75, (1715, 2)),
- (0xddc, (785, 2)),
- (0x2f83f, (2927, 1)),
- (0xf976, (2391, 1)),
- (0x2f86e, (2974, 1)),
- (0x150, (236, 2)),
- (0x1e99, (1188, 2)),
- (0x1d1, (338, 2)),
- (0x2f916, (3142, 1)),
- (0x2f929, (3161, 1)),
- (0x1f04, (1442, 3)),
- (0x1fa7, (1879, 4)),
- (0x1df, (373, 3)),
- (0xfb44, (2783, 2)),
- (0x11c, (158, 2)),
- (0x13a, (206, 2)),
- (0x1f10, (1476, 2)),
- (0x2f8c4, (3060, 1)),
- (0x1e97, (1184, 2)),
- (0xf954, (2357, 1)),
- (0x2f900, (3120, 1)),
- (0x30fe, (2271, 2)),
- (0x30b6, (2221, 2)),
- (0x1f69, (1685, 2)),
- (0xf9ad, (2446, 1)),
- (0x1e77, (1116, 2)),
- (0xfa37, (2572, 1)),
- (0xf934, (2325, 1)),
- (0xfab0, (2691, 1)),
- (0x22ea, (2145, 2)),
- (0x2f89c, (3020, 1)),
- (0x227, (494, 2)),
- (0x1f2b, (1537, 3)),
- (0x2f979, (3241, 1)),
- (0x2f954, (3204, 1)),
- (0x1e1e, (918, 2)),
- (0xf9ae, (2447, 1)),
- (0x2f8e5, (3093, 1)),
- (0x3af, (563, 2)),
- (0x1f4c, (1622, 3)),
- (0xf941, (2338, 1)),
- (0x2f934, (3172, 1)),
- (0xf9a3, (2436, 1)),
- (0x929, (702, 2)),
- (0x2f89b, (3019, 1)),
- (0x2f8b0, (3040, 1)),
- (0x1e83, (1144, 2)),
- (0x2f9ec, (3356, 1)),
- (0x1f60, (1661, 2)),
- (0x623, (688, 2)),
- (0x1e6e, (1098, 2)),
- (0x1112e, (2809, 2)),
- (0xb5d, (754, 2)),
- (0x215, (474, 2)),
- (0x2f9bd, (3309, 1)),
- (0x176, (304, 2)),
- (0x1eab, (1221, 3)),
- (0x2f9e6, (3350, 1)),
- (0x2f864, (2964, 1)),
- (0x1f31, (1554, 2)),
- (0x2f92f, (3167, 1)),
- (0x2f820, (2896, 1)),
- (0x1fda, (1991, 2)),
- (0x2f82c, (2908, 1)),
- (0x1f45, (1609, 3)),
- (0x1f7c, (1729, 2)),
- (0x1e53, (1035, 3)),
- (0x2f972, (3234, 1)),
- (0x2fa1a, (3402, 1)),
- (0xf960, (2369, 1)),
- (0x1d7, (352, 3)),
- (0x1ee8, (1386, 3)),
- (0xcca, (772, 2)),
- (0x1f42, (1600, 3)),
- (0x2f95d, (3213, 1)),
- (0x1ee, (404, 2)),
- (0x2f8d3, (3075, 1)),
- (0x1e4d, (1017, 3)),
- (0xd6, (40, 2)),
- (0x1f96, (1815, 4)),
- (0xf918, (2297, 1)),
- (0xf9af, (2448, 1)),
- (0x2f8fb, (3115, 1)),
- (0x1e60, (1064, 2)),
- (0x1b12, (838, 2)),
- (0xf9fd, (2526, 1)),
- (0x2f9eb, (3355, 1)),
- (0x1e64, (1072, 3)),
- (0xfb2b, (2739, 2)),
- (0x1fe0, (2001, 2)),
- (0x2f915, (3141, 1)),
- (0x2f81b, (2891, 1)),
- (0x1fdd, (1995, 2)),
- (0x2f8b6, (3046, 1)),
- (0x1e89, (1156, 2)),
- (0xf9b9, (2458, 1)),
- (0x1fb3, (1920, 2)),
- (0x1e3, (384, 2)),
- (0x4e3, (648, 2)),
- (0xcf, (28, 2)),
- (0xf1, (82, 2)),
- (0x2f9bf, (3311, 1)),
- (0x2f8c9, (3065, 1)),
- (0x2f8a8, (3032, 1)),
- (0x2f95a, (3210, 1)),
- (0x2f9a8, (3288, 1)),
- (0x1a1, (324, 2)),
- (0xf99e, (2431, 1)),
- (0xfb46, (2785, 2)),
- (0xf9c7, (2472, 1)),
- (0x476, (614, 2)),
- (0x1cd, (330, 2)),
- (0xf9bf, (2464, 1)),
- (0x1ead, (1227, 3)),
- (0x105, (116, 2)),
- (0x2f9a4, (3284, 1)),
- (0x15b, (254, 2)),
- (0xf9c9, (2474, 1)),
- (0x119, (152, 2)),
- (0xf946, (2343, 1)),
- (0x3054, (2165, 2)),
- (0x2fa0c, (3388, 1)),
- (0x1cf, (334, 2)),
- (0xfa7d, (2640, 1)),
- (0xf944, (2341, 1)),
- (0xfa1d, (2553, 1)),
- (0x2f9c2, (3314, 1)),
- (0xf964, (2373, 1)),
- (0x219, (482, 2)),
- (0xf9dd, (2494, 1)),
- (0x1f8b, (1773, 4)),
- (0x2262, (2097, 2)),
- (0xf9b3, (2452, 1)),
- (0xf9a2, (2435, 1)),
- (0x3050, (2161, 2)),
- (0x1e8, (390, 2)),
- (0x30d3, (2245, 2)),
- (0x30c9, (2239, 2)),
- (0xf95a, (2363, 1)),
- (0xf98a, (2411, 1)),
- (0xfa76, (2633, 1)),
- (0x2f816, (2886, 1)),
- (0x1b40, (844, 2)),
- (0x212, (468, 2)),
- (0x1e91, (1172, 2)),
- (0xf9e4, (2501, 1)),
- (0x1f98, (1823, 3)),
- (0xf910, (2289, 1)),
- (0x2f9d8, (3336, 1)),
- (0x2f91d, (3149, 1)),
- (0x1f9c, (1837, 4)),
- (0xdb, (46, 2)),
- (0x232, (522, 2)),
- (0xf995, (2422, 1)),
- (0xf9e2, (2499, 1)),
- (0x1f23, (1515, 3)),
- (0xdde, (790, 2)),
- (0xf9ce, (2479, 1)),
- (0x1eed, (1401, 3)),
- (0x1f0c, (1464, 3)),
- (0x2f91c, (3148, 1)),
- (0x30b0, (2215, 2)),
- (0xf990, (2417, 1)),
- (0x1f68, (1683, 2)),
- (0x1fbc, (1938, 2)),
- (0x2f9b7, (3303, 1)),
- (0xf96b, (2380, 1)),
- (0xfa09, (2538, 1)),
- (0x1ff, (430, 2)),
- (0x2f910, (3136, 1)),
- (0x2f9f4, (3364, 1)),
- (0x2f87f, (2991, 1)),
- (0x1e59, (1048, 2)),
- (0x114be, (2821, 2)),
- (0xf96c, (2381, 1)),
- (0xfac, (822, 2)),
- (0xf913, (2292, 1)),
- (0x2f80d, (2877, 1)),
- (0x2f927, (3159, 1)),
- (0x2f837, (2919, 1)),
- (0x30ac, (2211, 2)),
- (0x1fee, (2032, 2)),
- (0xf9a1, (2434, 1)),
- (0x1e54, (1038, 2)),
- (0x1f6e, (1699, 3)),
- (0xfab7, (2698, 1)),
- (0xfb3b, (2771, 2)),
- (0x2f9f1, (3361, 1)),
- (0xa36, (736, 2)),
- (0x1f89, (1766, 3)),
- (0x1ecc, (1310, 2)),
- (0x2f958, (3208, 1)),
- (0x16b, (282, 2)),
- (0x2f944, (3188, 1)),
- (0x2f8f9, (3113, 1)),
- (0x407, (588, 2)),
- (0x1ef6, (1424, 2)),
- (0x2f9a3, (3283, 1)),
- (0x2f881, (2993, 1)),
- (0x1134c, (2815, 2)),
- (0x2f81a, (2890, 1)),
- (0x2f9dd, (3341, 1)),
- (0xfa64, (2617, 1)),
- (0x2f8af, (3039, 1)),
- (0x2f9ed, (3357, 1)),
- (0xf9ea, (2507, 1)),
- (0x1109c, (2805, 2)),
- (0x14f, (234, 2)),
- (0xf97a, (2395, 1)),
- (0x2f949, (3193, 1)),
- (0xa5b, (742, 2)),
- (0xf936, (2327, 1)),
- (0xa5e, (744, 2)),
- (0x2f89a, (3018, 1)),
- (0x1f4b, (1619, 3)),
- (0xf984, (2405, 1)),
- (0x1e6d, (1096, 2)),
- (0x2f90e, (3134, 1)),
- (0x232a, (2154, 1)),
- (0x2fa0d, (3389, 1)),
- (0xfab2, (2693, 1)),
- (0x450, (600, 2)),
- (0x1f02, (1436, 3)),
- (0xfa32, (2567, 1)),
- (0x1f76, (1717, 2)),
- (0x2f96d, (3229, 1)),
- (0x2f9a7, (3287, 1)),
- (0x1ea3, (1198, 2)),
- (0xf9ba, (2459, 1)),
- (0x1f15, (1489, 3)),
- (0x1faf, (1909, 4)),
- (0x160, (264, 2)),
- (0x2f963, (3219, 1)),
- (0xf925, (2310, 1)),
- (0xf9f6, (2519, 1)),
- (0x30c0, (2231, 2)),
- (0x21e, (488, 2)),
- (0xfa9c, (2671, 1)),
- (0xfb3a, (2769, 2)),
- (0x1fba, (1934, 2)),
- (0x374, (531, 1)),
- (0x2adc, (2155, 2)),
- (0x2f91f, (3151, 1)),
- (0xcc0, (766, 2)),
- (0x1ef3, (1418, 2)),
- (0x1fc3, (1946, 2)),
- (0x2f8bd, (3053, 1)),
- (0x11f, (164, 2)),
- (0xfa7, (820, 2)),
- (0xf9f4, (2517, 1)),
- (0xbcc, (762, 2)),
- (0x2f847, (2935, 1)),
- (0x1f4a, (1616, 3)),
- (0x2f98f, (3263, 1)),
- (0xf96e, (2383, 1)),
- (0xf9e6, (2503, 1)),
- (0xf9e3, (2500, 1)),
- (0x2f844, (2932, 1)),
- (0x2f813, (2883, 1)),
- (0xfab5, (2696, 1)),
- (0x1faa, (1889, 4)),
- (0xc1, (2, 2)),
- (0x1e6b, (1092, 2)),
- (0x1fe5, (2013, 2)),
- (0x2f807, (2871, 1)),
- (0x2f85f, (2959, 1)),
- (0xf93b, (2332, 1)),
- (0x1f8, (414, 2)),
- (0x1e69, (1087, 3)),
- (0x1fe7, (2017, 3)),
- (0x1e57, (1044, 2)),
- (0xcc, (22, 2)),
- (0x2f99b, (3275, 1)),
- (0x4f0, (670, 2)),
- (0x2f8fd, (3117, 1)),
- (0x121, (168, 2)),
- (0xf2, (84, 2)),
- (0xfa9a, (2669, 1)),
- (0x2f9ef, (3359, 1)),
- (0x2f878, (2984, 1)),
- (0xf959, (2362, 1)),
- (0x1134b, (2813, 2)),
- (0x1fbe, (1940, 1)),
- (0xfa56, (2603, 1)),
- (0x1d1be, (2855, 3)),
- (0x2f8bb, (3051, 1)),
- (0x2f8e4, (3092, 1)),
- (0x1e19, (906, 2)),
- (0x2f92d, (3165, 1)),
- (0x1f2c, (1540, 3)),
- (0xe1, (54, 2)),
- (0x2f9b6, (3302, 1)),
- (0xf98d, (2414, 1)),
- (0xf914, (2293, 1)),
- (0xfa19, (2549, 1)),
- (0xface, (2721, 1)),
- (0x15a, (252, 2)),
- (0x2274, (2109, 2)),
- (0xf94c, (2349, 1)),
- (0x1fc4, (1948, 3)),
- (0x115ba, (2823, 2)),
- (0x2f8b8, (3048, 1)),
- (0x2fa01, (3377, 1)),
- (0x2f8ea, (3098, 1)),
- (0x1e98, (1186, 2)),
- (0x2f98b, (3259, 1)),
- (0x2f9dc, (3340, 1)),
- (0x1f99, (1826, 3)),
- (0x1f8a, (1769, 4)),
- (0x1f1c, (1502, 3)),
- (0xfa38, (2573, 1)),
- (0x2f953, (3203, 1)),
- (0x2f8f7, (3111, 1)),
- (0x1f41, (1598, 2)),
- (0x1ec7, (1299, 3)),
- (0x2fa16, (3398, 1)),
- (0x2f859, (2953, 1)),
- (0x2f959, (3209, 1)),
- (0x2f8cf, (3071, 1)),
- (0x14c, (228, 2)),
- (0x2f993, (3267, 1)),
- (0x13e, (214, 2)),
- (0x12a, (182, 2)),
- (0x2f991, (3265, 1)),
- (0x1fca, (1960, 2)),
- (0x389, (540, 2)),
- (0xfa73, (2630, 1)),
- (0x2f9d9, (3337, 1)),
- (0x143, (216, 2)),
- (0x2f893, (3011, 1)),
- (0x2f827, (2903, 1)),
- (0xfa63, (2616, 1)),
- (0x3ac, (557, 2)),
- (0x1f07, (1451, 3)),
- (0x1ebb, (1266, 2)),
- (0x2f943, (3187, 1)),
- (0xfa67, (2620, 1)),
- (0x4d6, (630, 2)),
- (0x1f12, (1480, 3)),
- (0x1f4, (410, 2)),
- (0x1e37, (970, 2)),
- (0x2f90f, (3135, 1)),
- (0x1f18, (1492, 2)),
- (0x477, (616, 2)),
- (0x102, (110, 2)),
- (0x2f800, (2864, 1)),
- (0xfaaf, (2690, 1)),
- (0x6c0, (696, 2)),
- (0xeb, (72, 2)),
- (0x1eda, (1348, 3)),
- (0x1f7d, (1731, 2)),
- (0xa59, (738, 2)),
- (0x2f8f2, (3106, 1)),
- (0x309e, (2209, 2)),
- (0x30d6, (2249, 2)),
- (0x2f92e, (3166, 1)),
- (0xf933, (2324, 1)),
- (0x2f96e, (3230, 1)),
- (0x1e55, (1040, 2)),
- (0x2281, (2119, 2)),
- (0x1e4e, (1020, 3)),
- (0x2f872, (2978, 1)),
- (0x2f9fc, (3372, 1)),
- (0x1d1bc, (2850, 2)),
- (0xfa50, (2597, 1)),
- (0x2f92c, (3164, 1)),
- (0x3070, (2187, 2)),
- (0xf9e9, (2506, 1)),
- (0x2f83c, (2924, 1)),
- (0x2f9f8, (3368, 1)),
- (0x1f52, (1632, 3)),
- (0xfaac, (2687, 1)),
- (0x1e94, (1178, 2)),
- (0xfad6, (2729, 1)),
- (0x1fcb, (1962, 2)),
- (0xfa33, (2568, 1)),
- (0xfa1b, (2551, 1)),
- (0xf9ee, (2511, 1)),
- (0x1e2c, (946, 2)),
- (0x203, (438, 2)),
- (0x2f877, (2983, 1)),
- (0x1ff8, (2048, 2)),
- (0x1e9, (392, 2)),
- (0x1fe, (428, 2)),
- (0x2f96c, (3228, 1)),
- (0x1e51, (1029, 3)),
- (0x4de, (642, 2)),
- (0xf9a4, (2437, 1)),
- (0xfb40, (2777, 2)),
- (0x622, (686, 2)),
- (0x3cc, (572, 2)),
- (0x2f99e, (3278, 1)),
- (0xf92b, (2316, 1)),
- (0x22e1, (2139, 2)),
- (0x174, (300, 2)),
- (0x1e4a, (1010, 2)),
- (0x2f939, (3177, 1)),
- (0x3ce, (576, 2)),
- (0xfaa7, (2682, 1)),
- (0xfa85, (2648, 1)),
- (0xf9e7, (2504, 1)),
- (0x107, (120, 2)),
- (0xfa95, (2664, 1)),
- (0xf973, (2388, 1)),
- (0x2f933, (3171, 1)),
- (0xf9c2, (2467, 1)),
- (0x1ee1, (1369, 3)),
- (0x1d3, (342, 2)),
- (0x2f9d0, (3328, 1)),
- (0xfb2a, (2737, 2)),
- (0xfb, (98, 2)),
- (0x1e4f, (1023, 3)),
- (0x1f26, (1524, 3)),
- (0xdd, (50, 2)),
- (0x226, (492, 2)),
- (0x2f831, (2913, 1)),
- (0x2f9ee, (3358, 1)),
- (0xf955, (2358, 1)),
- (0x16e, (288, 2)),
- (0x2f8a5, (3029, 1)),
- (0x11b, (156, 2)),
- (0x1e76, (1114, 2)),
- (0xd4c, (781, 2)),
- (0x1f3c, (1584, 3)),
- (0x1e0a, (872, 2)),
- (0x1e78, (1118, 3)),
- (0x2f82a, (2906, 1)),
- (0x12d, (188, 2)),
- (0x2f8c5, (3061, 1)),
- (0x1f3e, (1590, 3)),
- (0xf95c, (2365, 1)),
- (0x1f21, (1510, 2)),
- (0x2f9d7, (3335, 1)),
- (0x1f70, (1705, 2)),
- (0x2f914, (3140, 1)),
- (0xfa83, (2646, 1)),
- (0x1ed5, (1333, 3)),
- (0x1ee7, (1384, 2)),
- (0x2278, (2113, 2)),
- (0xf9c0, (2465, 1)),
- (0x1ed7, (1339, 3)),
- (0x2f8ca, (3066, 1)),
- (0x1b3d, (842, 2)),
- (0x2f9ad, (3293, 1)),
- (0x95e, (720, 2)),
- (0x220c, (2081, 2)),
- (0x1fdf, (1999, 2)),
- (0xfa48, (2589, 1)),
- (0x1e04, (858, 2)),
- (0x4d7, (632, 2)),
- (0x216, (476, 2)),
- (0x1e70, (1102, 2)),
- (0x2f856, (2950, 1)),
- (0xe9, (68, 2)),
- (0xf951, (2354, 1)),
- (0x231, (519, 3)),
- (0x1f53, (1635, 3)),
- (0x1e14, (892, 3)),
- (0xf983, (2404, 1)),
- (0xf9d4, (2485, 1)),
- (0x2f973, (3235, 1)),
- (0x2f9df, (3343, 1)),
- (0xf98c, (2413, 1)),
- (0x208, (448, 2)),
- (0x2f895, (3013, 1)),
- (0xfaaa, (2685, 1)),
- (0x45c, (608, 2)),
- (0x30b8, (2223, 2)),
- (0x2244, (2089, 2)),
- (0xff, (104, 2)),
- (0x4d1, (624, 2)),
- (0x2126, (2061, 1)),
- (0x10b, (128, 2)),
- (0x145, (220, 2)),
- (0xf978, (2393, 1)),
- (0x1fcd, (1966, 2)),
- (0x2f912, (3138, 1)),
- (0xfa36, (2571, 1)),
- (0x2f9c0, (3312, 1)),
- (0x4ec, (662, 2)),
- (0x10e, (134, 2)),
- (0x2f98d, (3261, 1)),
- (0x1e5d, (1057, 3)),
- (0xf43, (792, 2)),
- (0x1e29, (940, 2)),
- (0xf93e, (2335, 1)),
- (0x2f9c5, (3317, 1)),
- (0x21ce, (2073, 2)),
- (0x2f87b, (2987, 1)),
- (0x2f9ba, (3306, 1)),
- (0x1ec2, (1284, 3)),
- (0x219a, (2065, 2)),
- (0x1f64, (1671, 3)),
- (0xf906, (2279, 1)),
- (0xf9d7, (2488, 1)),
+ (0x2F93B, (0xC97, 0x1)),
+ (0x2F869, (0xBC5, 0x1)),
+ (0x0F93E, (0x91F, 0x1)),
+ (0x01F2E, (0x60A, 0x3)),
+ (0x2F90A, (0xC66, 0x1)),
+ (0x0FACB, (0xA9E, 0x1)),
+ (0x0FA87, (0xA5A, 0x1)),
+ (0x2F95B, (0xCB7, 0x1)),
+ (0x0F965, (0x946, 0x1)),
+ (0x2F8FB, (0xC57, 0x1)),
+ (0x2F83A, (0xB96, 0x1)),
+ (0x0095B, (0x2CA, 0x2)),
+ (0x01FAF, (0x775, 0x4)),
+ (0x2F92C, (0xC88, 0x1)),
+ (0x01E88, (0x482, 0x2)),
+ (0x009CB, (0x2D4, 0x2)),
+ (0x01F0A, (0x5B2, 0x3)),
+ (0x00229, (0x1F2, 0x2)),
+ (0x0FA8B, (0xA5E, 0x1)),
+ (0x2F8FD, (0xC59, 0x1)),
+ (0x2F9AD, (0xD09, 0x1)),
+ (0x01E7A, (0x464, 0x3)),
+ (0x0F994, (0x975, 0x1)),
+ (0x2F9EF, (0xD4B, 0x1)),
+ (0x2F8CE, (0xC2A, 0x1)),
+ (0x003AF, (0x233, 0x2)),
+ (0x00211, (0x1D2, 0x2)),
+ (0x0F9C8, (0x9A9, 0x1)),
+ (0x0FA95, (0xA68, 0x1)),
+ (0x2F9C0, (0xD1C, 0x1)),
+ (0x01EA9, (0x4BF, 0x3)),
+ (0x000F5, (0x05A, 0x2)),
+ (0x2F833, (0xB8F, 0x1)),
+ (0x0F94A, (0x92B, 0x1)),
+ (0x0F96C, (0x94D, 0x1)),
+ (0x0FA3E, (0xA13, 0x1)),
+ (0x0FA5E, (0xA33, 0x1)),
+ (0x01E72, (0x452, 0x2)),
+ (0x0FA1E, (0x9FA, 0x1)),
+ (0x0015F, (0x106, 0x2)),
+ (0x01F64, (0x687, 0x3)),
+ (0x01F07, (0x5AB, 0x3)),
+ (0x01E87, (0x480, 0x2)),
+ (0x0FA86, (0xA59, 0x1)),
+ (0x0F92F, (0x910, 0x1)),
+ (0x2F8DD, (0xC39, 0x1)),
+ (0x2FA17, (0xD73, 0x1)),
+ (0x00F73, (0x324, 0x2)),
+ (0x01ED0, (0x526, 0x3)),
+ (0x0F9CA, (0x9AB, 0x1)),
+ (0x113C8, (0xB11, 0x2)),
+ (0x2F83F, (0xB9B, 0x1)),
+ (0x2F999, (0xCF5, 0x1)),
+ (0x2F9F6, (0xD52, 0x1)),
+ (0x01FC2, (0x797, 0x3)),
+ (0x0FABC, (0xA8F, 0x1)),
+ (0x01FDA, (0x7C7, 0x2)),
+ (0x2F9B9, (0xD15, 0x1)),
+ (0x0F9F5, (0x9D6, 0x1)),
+ (0x01E73, (0x454, 0x2)),
+ (0x0FA9D, (0xA70, 0x1)),
+ (0x01E29, (0x3AC, 0x2)),
+ (0x0FA5F, (0xA34, 0x1)),
+ (0x2F849, (0xBA5, 0x1)),
+ (0x00F43, (0x318, 0x2)),
+ (0x01EA2, (0x4AC, 0x2)),
+ (0x0F99C, (0x97D, 0x1)),
+ (0x00129, (0x0B4, 0x2)),
+ (0x01F85, (0x6D7, 0x4)),
+ (0x2F8C0, (0xC1C, 0x1)),
+ (0x01E93, (0x498, 0x2)),
+ (0x02280, (0x845, 0x2)),
+ (0x2F821, (0xB7D, 0x1)),
+ (0x0FA50, (0xA25, 0x1)),
+ (0x03077, (0x895, 0x2)),
+ (0x001FD, (0x1AA, 0x2)),
+ (0x00230, (0x204, 0x3)),
+ (0x0016D, (0x11E, 0x2)),
+ (0x0F9A2, (0x983, 0x1)),
+ (0x01EA8, (0x4BC, 0x3)),
+ (0x1D161, (0xB40, 0x3)),
+ (0x0FA94, (0xA67, 0x1)),
+ (0x01F1A, (0x5D8, 0x3)),
+ (0x001A1, (0x144, 0x2)),
+ (0x2F922, (0xC7E, 0x1)),
+ (0x01FF9, (0x802, 0x2)),
+ (0x0F93D, (0x91E, 0x1)),
+ (0x030AC, (0x8A3, 0x2)),
+ (0x0F9E9, (0x9CA, 0x1)),
+ (0x01E89, (0x484, 0x2)),
+ (0x01F35, (0x61D, 0x3)),
+ (0x0FA2F, (0xA04, 0x1)),
+ (0x0F90A, (0x8EB, 0x1)),
+ (0x0F9FC, (0x9DD, 0x1)),
+ (0x2F891, (0xBED, 0x1)),
+ (0x0307D, (0x89D, 0x2)),
+ (0x01FA5, (0x74F, 0x4)),
+ (0x00173, (0x12A, 0x2)),
+ (0x0FB49, (0xAE7, 0x2)),
+ (0x0FACA, (0xA9D, 0x1)),
+ (0x0F97B, (0x95C, 0x1)),
+ (0x2F9FD, (0xD59, 0x1)),
+ (0x2F90B, (0xC67, 0x1)),
+ (0x0F9A3, (0x984, 0x1)),
+ (0x01E2A, (0x3AE, 0x2)),
+ (0x01FBB, (0x790, 0x2)),
+ (0x2F9A0, (0xCFC, 0x1)),
+ (0x0F924, (0x905, 0x1)),
+ (0x01E7B, (0x467, 0x3)),
+ (0x2F8CB, (0xC27, 0x1)),
+ (0x2F8F6, (0xC52, 0x1)),
+ (0x004F1, (0x2A0, 0x2)),
+ (0x01FD0, (0x7B4, 0x2)),
+ (0x01EF5, (0x58E, 0x2)),
+ (0x00146, (0x0DE, 0x2)),
+ (0x01E2E, (0x3B6, 0x3)),
+ (0x0F95E, (0x93F, 0x1)),
+ (0x0F916, (0x8F7, 0x1)),
+ (0x0FA44, (0xA19, 0x1)),
+ (0x0FA16, (0x9F2, 0x1)),
+ (0x01F1C, (0x5DE, 0x3)),
+ (0x105E4, (0xAF5, 0x2)),
+ (0x2F94D, (0xCA9, 0x1)),
+ (0x0FAB9, (0xA8C, 0x1)),
+ (0x0F907, (0x8E8, 0x1)),
+ (0x0305E, (0x87F, 0x2)),
+ (0x01E0D, (0x36E, 0x2)),
+ (0x01F4A, (0x650, 0x3)),
+ (0x0F9F9, (0x9DA, 0x1)),
+ (0x2F9C7, (0xD23, 0x1)),
+ (0x0F94B, (0x92C, 0x1)),
+ (0x2F87E, (0xBDA, 0x1)),
+ (0x00D4C, (0x30D, 0x2)),
+ (0x0F9EC, (0x9CD, 0x1)),
+ (0x001AF, (0x146, 0x2)),
+ (0x2F91D, (0xC79, 0x1)),
+ (0x01EE8, (0x56A, 0x3)),
+ (0x022AD, (0x853, 0x2)),
+ (0x2F834, (0xB90, 0x1)),
+ (0x01EC8, (0x516, 0x2)),
+ (0x01F52, (0x660, 0x3)),
+ (0x2F84F, (0xBAB, 0x1)),
+ (0x01E27, (0x3A8, 0x2)),
+ (0x01F48, (0x64C, 0x2)),
+ (0x01FEB, (0x7EA, 0x2)),
+ (0x0F9C4, (0x9A5, 0x1)),
+ (0x01EE5, (0x564, 0x2)),
+ (0x01EBB, (0x4F2, 0x2)),
+ (0x0F9B5, (0x996, 0x1)),
+ (0x01F8D, (0x6F5, 0x4)),
+ (0x01EAF, (0x4D1, 0x3)),
+ (0x0FA78, (0xA4B, 0x1)),
+ (0x2F975, (0xCD1, 0x1)),
+ (0x2F9BA, (0xD16, 0x1)),
+ (0x01E22, (0x39E, 0x2)),
+ (0x01EEA, (0x570, 0x3)),
+ (0x0FB2A, (0xAB1, 0x2)),
+ (0x2F951, (0xCAD, 0x1)),
+ (0x00A33, (0x2DE, 0x2)),
+ (0x2F8DC, (0xC38, 0x1)),
+ (0x000E7, (0x040, 0x2)),
+ (0x2F8F7, (0xC53, 0x1)),
+ (0x2F9EB, (0xD47, 0x1)),
+ (0x00174, (0x12C, 0x2)),
+ (0x0011D, (0x0A0, 0x2)),
+ (0x0F966, (0x947, 0x1)),
+ (0x0FB36, (0xACB, 0x2)),
+ (0x2F88A, (0xBE6, 0x1)),
+ (0x00450, (0x258, 0x2)),
+ (0x0305C, (0x87D, 0x2)),
+ (0x0F9F6, (0x9D7, 0x1)),
+ (0x0F9A7, (0x988, 0x1)),
+ (0x0FA82, (0xA55, 0x1)),
+ (0x0FAD7, (0xAAA, 0x1)),
+ (0x01B41, (0x34E, 0x2)),
+ (0x01E5D, (0x421, 0x3)),
+ (0x01F12, (0x5C8, 0x3)),
+ (0x00108, (0x07A, 0x2)),
+ (0x01EAC, (0x4C8, 0x3)),
+ (0x2F9F0, (0xD4C, 0x1)),
+ (0x00100, (0x06A, 0x2)),
+ (0x0FAA2, (0xA75, 0x1)),
+ (0x003D3, (0x242, 0x2)),
+ (0x0F973, (0x954, 0x1)),
+ (0x00407, (0x24C, 0x2)),
+ (0x03070, (0x88B, 0x2)),
+ (0x01E79, (0x461, 0x3)),
+ (0x0F964, (0x945, 0x1)),
+ (0x00F52, (0x31C, 0x2)),
+ (0x0F9EF, (0x9D0, 0x1)),
+ (0x01E58, (0x416, 0x2)),
+ (0x2F949, (0xCA5, 0x1)),
+ (0x00171, (0x126, 0x2)),
+ (0x01F2A, (0x5FE, 0x3)),
+ (0x00388, (0x21A, 0x2)),
+ (0x00157, (0x0F6, 0x2)),
+ (0x01F3D, (0x633, 0x3)),
+ (0x0F98B, (0x96C, 0x1)),
+ (0x030BE, (0x8B5, 0x2)),
+ (0x2F816, (0xB72, 0x1)),
+ (0x01E95, (0x49C, 0x2)),
+ (0x0F991, (0x972, 0x1)),
+ (0x2F8B5, (0xC11, 0x1)),
+ (0x2F810, (0xB6C, 0x1)),
+ (0x0FAB8, (0xA8B, 0x1)),
+ (0x001EC, (0x18E, 0x3)),
+ (0x01E09, (0x365, 0x3)),
+ (0x2F8BB, (0xC17, 0x1)),
+ (0x2F9E1, (0xD3D, 0x1)),
+ (0x2F94E, (0xCAA, 0x1)),
+ (0x01FAE, (0x771, 0x4)),
+ (0x01FFD, (0x80A, 0x1)),
+ (0x0FA00, (0x9E1, 0x1)),
+ (0x00BCC, (0x2FA, 0x2)),
+ (0x0FA4B, (0xA20, 0x1)),
+ (0x0FAC3, (0xA96, 0x1)),
+ (0x021CE, (0x819, 0x2)),
+ (0x02271, (0x83B, 0x2)),
+ (0x000CB, (0x014, 0x2)),
+ (0x01F51, (0x65E, 0x2)),
+ (0x0FA99, (0xA6C, 0x1)),
+ (0x030B8, (0x8AF, 0x2)),
+ (0x01E7E, (0x46E, 0x2)),
+ (0x0FA75, (0xA48, 0x1)),
+ (0x16128, (0xB2F, 0x3)),
+ (0x0F978, (0x959, 0x1)),
+ (0x001E6, (0x182, 0x2)),
+ (0x01E8E, (0x48E, 0x2)),
+ (0x2F9E6, (0xD42, 0x1)),
+ (0x2F8E3, (0xC3F, 0x1)),
+ (0x0045D, (0x262, 0x2)),
+ (0x001DE, (0x172, 0x3)),
+ (0x01F63, (0x684, 0x3)),
+ (0x01E48, (0x3EE, 0x2)),
+ (0x2F8D0, (0xC2C, 0x1)),
+ (0x0FA22, (0x9FC, 0x1)),
+ (0x0FACF, (0xAA2, 0x1)),
+ (0x01EA3, (0x4AE, 0x2)),
+ (0x022E3, (0x85F, 0x2)),
+ (0x0FAD4, (0xAA7, 0x1)),
+ (0x0304C, (0x86D, 0x2)),
+ (0x0FA8D, (0xA60, 0x1)),
+ (0x004D6, (0x276, 0x2)),
+ (0x01F00, (0x598, 0x2)),
+ (0x0FA36, (0xA0B, 0x1)),
+ (0x0FA72, (0xA45, 0x1)),
+ (0x2F9A3, (0xCFF, 0x1)),
+ (0x01F1B, (0x5DB, 0x3)),
+ (0x01F5D, (0x677, 0x3)),
+ (0x2F9AB, (0xD07, 0x1)),
+ (0x0FA15, (0x9F1, 0x1)),
+ (0x0F9BE, (0x99F, 0x1)),
+ (0x1D1BF, (0xB56, 0x3)),
+ (0x0010D, (0x084, 0x2)),
+ (0x01FB4, (0x782, 0x3)),
+ (0x0F942, (0x923, 0x1)),
+ (0x00934, (0x2C2, 0x2)),
+ (0x0FAAE, (0xA81, 0x1)),
+ (0x2F98A, (0xCE6, 0x1)),
+ (0x01F3C, (0x630, 0x3)),
+ (0x2F9D1, (0xD2D, 0x1)),
+ (0x01FD9, (0x7C5, 0x2)),
+ (0x01F38, (0x626, 0x2)),
+ (0x030BC, (0x8B3, 0x2)),
+ (0x000FC, (0x064, 0x2)),
+ (0x01F05, (0x5A5, 0x3)),
+ (0x01EE4, (0x562, 0x2)),
+ (0x0F90C, (0x8ED, 0x1)),
+ (0x01EB3, (0x4DD, 0x3)),
+ (0x2F8E0, (0xC3C, 0x1)),
+ (0x0016B, (0x11A, 0x2)),
+ (0x01E12, (0x378, 0x2)),
+ (0x0F99F, (0x980, 0x1)),
+ (0x01FB3, (0x780, 0x2)),
+ (0x1D160, (0xB3D, 0x3)),
+ (0x000CF, (0x01C, 0x2)),
+ (0x000CD, (0x018, 0x2)),
+ (0x2F835, (0xB91, 0x1)),
+ (0x0F902, (0x8E3, 0x1)),
+ (0x00B4C, (0x2EE, 0x2)),
+ (0x2F99C, (0xCF8, 0x1)),
+ (0x0FA41, (0xA16, 0x1)),
+ (0x0F9C5, (0x9A6, 0x1)),
+ (0x0F9C7, (0x9A8, 0x1)),
+ (0x030FE, (0x8DF, 0x2)),
+ (0x01EE0, (0x556, 0x3)),
+ (0x2F882, (0xBDE, 0x1)),
+ (0x2F973, (0xCCF, 0x1)),
+ (0x0FA0D, (0x9EE, 0x1)),
+ (0x0FA5C, (0xA31, 0x1)),
+ (0x2F900, (0xC5C, 0x1)),
+ (0x0F9FD, (0x9DE, 0x1)),
+ (0x01F62, (0x681, 0x3)),
+ (0x2F8B9, (0xC15, 0x1)),
+ (0x001F5, (0x19C, 0x2)),
+ (0x01EF3, (0x58A, 0x2)),
+ (0x2F84C, (0xBA8, 0x1)),
+ (0x001D5, (0x15A, 0x3)),
+ (0x0F9BC, (0x99D, 0x1)),
+ (0x01FE5, (0x7DD, 0x2)),
+ (0x01F5B, (0x674, 0x3)),
+ (0x03071, (0x88D, 0x2)),
+ (0x2F9BB, (0xD17, 0x1)),
+ (0x01FAA, (0x761, 0x4)),
+ (0x01F94, (0x70F, 0x4)),
+ (0x01E4E, (0x3FC, 0x3)),
+ (0x001EE, (0x194, 0x2)),
+ (0x0F9ED, (0x9CE, 0x1)),
+ (0x2F9B4, (0xD10, 0x1)),
+ (0x2FA0F, (0xD6B, 0x1)),
+ (0x00DDE, (0x316, 0x2)),
+ (0x0F915, (0x8F6, 0x1)),
+ (0x01F87, (0x6DF, 0x4)),
+ (0x0F9B2, (0x993, 0x1)),
+ (0x01B06, (0x33C, 0x2)),
+ (0x2F84B, (0xBA7, 0x1)),
+ (0x2F93D, (0xC99, 0x1)),
+ (0x00113, (0x08C, 0x2)),
+ (0x01F69, (0x695, 0x2)),
+ (0x2F8C6, (0xC22, 0x1)),
+ (0x000FF, (0x068, 0x2)),
+ (0x01E77, (0x45C, 0x2)),
+ (0x2FA12, (0xD6E, 0x1)),
+ (0x00341, (0x20F, 0x1)),
+ (0x2F827, (0xB83, 0x1)),
+ (0x01B43, (0x350, 0x2)),
+ (0x2F8BA, (0xC16, 0x1)),
+ (0x0F987, (0x968, 0x1)),
+ (0x01B12, (0x346, 0x2)),
+ (0x022EA, (0x861, 0x2)),
+ (0x2F97D, (0xCD9, 0x1)),
+ (0x16D68, (0xB32, 0x2)),
+ (0x0FB4C, (0xAED, 0x2)),
+ (0x01E4A, (0x3F2, 0x2)),
+ (0x01E1E, (0x396, 0x2)),
+ (0x00B48, (0x2EA, 0x2)),
+ (0x009DC, (0x2D8, 0x2)),
+ (0x000DD, (0x032, 0x2)),
+ (0x2F971, (0xCCD, 0x1)),
+ (0x0FA9F, (0xA72, 0x1)),
+ (0x0045E, (0x264, 0x2)),
+ (0x01FA3, (0x747, 0x4)),
+ (0x004DF, (0x284, 0x2)),
+ (0x004DC, (0x27E, 0x2)),
+ (0x00150, (0x0EC, 0x2)),
+ (0x000DA, (0x02C, 0x2)),
+ (0x001E7, (0x184, 0x2)),
+ (0x2F92E, (0xC8A, 0x1)),
+ (0x0F918, (0x8F9, 0x1)),
+ (0x01FCE, (0x7B0, 0x2)),
+ (0x0232A, (0x86A, 0x1)),
+ (0x02281, (0x847, 0x2)),
+ (0x01E0F, (0x372, 0x2)),
+ (0x000E3, (0x03A, 0x2)),
+ (0x0FB48, (0xAE5, 0x2)),
+ (0x2FA0B, (0xD67, 0x1)),
+ (0x0FB1D, (0xAAD, 0x2)),
+ (0x01E90, (0x492, 0x2)),
+ (0x003AA, (0x229, 0x2)),
+ (0x0F981, (0x962, 0x1)),
+ (0x01E30, (0x3BC, 0x2)),
+ (0x01EBD, (0x4F6, 0x2)),
+ (0x01E0B, (0x36A, 0x2)),
+ (0x01E62, (0x42C, 0x2)),
+ (0x2F85D, (0xBB9, 0x1)),
+ (0x00401, (0x248, 0x2)),
+ (0x2F87F, (0xBDB, 0x1)),
+ (0x01F22, (0x5E8, 0x3)),
+ (0x2F9A4, (0xD00, 0x1)),
+ (0x2F855, (0xBB1, 0x1)),
+ (0x2F98F, (0xCEB, 0x1)),
+ (0x0F9D0, (0x9B1, 0x1)),
+ (0x021CD, (0x817, 0x2)),
+ (0x2F87A, (0xBD6, 0x1)),
+ (0x01FB9, (0x78C, 0x2)),
+ (0x2F8C8, (0xC24, 0x1)),
+ (0x0FA65, (0xA3A, 0x1)),
+ (0x01EA4, (0x4B0, 0x3)),
+ (0x0014C, (0x0E4, 0x2)),
+ (0x004F0, (0x29E, 0x2)),
+ (0x01FB0, (0x779, 0x2)),
+ (0x01FAD, (0x76D, 0x4)),
+ (0x2F94F, (0xCAB, 0x1)),
+ (0x01F75, (0x6B3, 0x2)),
+ (0x0F905, (0x8E6, 0x1)),
+ (0x0FA71, (0xA44, 0x1)),
+ (0x000CE, (0x01A, 0x2)),
+ (0x2F89E, (0xBFA, 0x1)),
+ (0x2F903, (0xC5F, 0x1)),
+ (0x0F939, (0x91A, 0x1)),
+ (0x00B94, (0x2F4, 0x2)),
+ (0x2F926, (0xC82, 0x1)),
+ (0x0FA20, (0x9FB, 0x1)),
+ (0x01EAB, (0x4C5, 0x3)),
+ (0x004EF, (0x29C, 0x2)),
+ (0x01F4D, (0x659, 0x3)),
+ (0x1134B, (0xB01, 0x2)),
+ (0x01F28, (0x5FA, 0x2)),
+ (0x2F955, (0xCB1, 0x1)),
+ (0x01FBC, (0x792, 0x2)),
+ (0x01E42, (0x3E2, 0x2)),
+ (0x0F935, (0x916, 0x1)),
+ (0x114BB, (0xB13, 0x2)),
+ (0x2F9E0, (0xD3C, 0x1)),
+ (0x0015E, (0x104, 0x2)),
+ (0x0017B, (0x13A, 0x2)),
+ (0x01E3B, (0x3D4, 0x2)),
+ (0x01E6A, (0x442, 0x2)),
+ (0x00214, (0x1D8, 0x2)),
+ (0x01B0A, (0x340, 0x2)),
+ (0x2F825, (0xB81, 0x1)),
+ (0x01E78, (0x45E, 0x3)),
+ (0x001E8, (0x186, 0x2)),
+ (0x022ED, (0x867, 0x2)),
+ (0x00387, (0x219, 0x1)),
+ (0x2F9CE, (0xD2A, 0x1)),
+ (0x2F984, (0xCE0, 0x1)),
+ (0x022EB, (0x863, 0x2)),
+ (0x01FCB, (0x7AA, 0x2)),
+ (0x0FAC5, (0xA98, 0x1)),
+ (0x2F806, (0xB62, 0x1)),
+ (0x0F960, (0x941, 0x1)),
+ (0x0F9B3, (0x994, 0x1)),
+ (0x0FA02, (0x9E3, 0x1)),
+ (0x01EB9, (0x4EE, 0x2)),
+ (0x01F3E, (0x636, 0x3)),
+ (0x01EB1, (0x4D7, 0x3)),
+ (0x2FA15, (0xD71, 0x1)),
+ (0x0FB31, (0xAC1, 0x2)),
+ (0x01F0D, (0x5BB, 0x3)),
+ (0x0F9AB, (0x98C, 0x1)),
+ (0x0FB39, (0xACF, 0x2)),
+ (0x0305A, (0x87B, 0x2)),
+ (0x0F9B0, (0x991, 0x1)),
+ (0x0F91A, (0x8FB, 0x1)),
+ (0x2F9F8, (0xD54, 0x1)),
+ (0x2F977, (0xCD3, 0x1)),
+ (0x001CF, (0x14E, 0x2)),
+ (0x01E20, (0x39A, 0x2)),
+ (0x0F9A4, (0x985, 0x1)),
+ (0x00176, (0x130, 0x2)),
+ (0x2FA1D, (0xD79, 0x1)),
+ (0x004F4, (0x2A6, 0x2)),
+ (0x2FA10, (0xD6C, 0x1)),
+ (0x0F96E, (0x94F, 0x1)),
+ (0x0F9BF, (0x9A0, 0x1)),
+ (0x01F9E, (0x735, 0x4)),
+ (0x2F84D, (0xBA9, 0x1)),
+ (0x2FA0E, (0xD6A, 0x1)),
+ (0x0FA07, (0x9E8, 0x1)),
+ (0x004E7, (0x290, 0x2)),
+ (0x01FE3, (0x7D8, 0x3)),
+ (0x003CC, (0x23C, 0x2)),
+ (0x01FA6, (0x753, 0x4)),
+ (0x0020F, (0x1CE, 0x2)),
+ (0x0FA5D, (0xA32, 0x1)),
+ (0x00107, (0x078, 0x2)),
+ (0x0FA4F, (0xA24, 0x1)),
+ (0x0FA64, (0xA39, 0x1)),
+ (0x1D1BC, (0xB4E, 0x2)),
+ (0x0F99A, (0x97B, 0x1)),
+ (0x2F9D5, (0xD31, 0x1)),
+ (0x01EA7, (0x4B9, 0x3)),
+ (0x2F8F9, (0xC55, 0x1)),
+ (0x0F9F0, (0x9D1, 0x1)),
+ (0x00476, (0x266, 0x2)),
+ (0x000EA, (0x046, 0x2)),
+ (0x2F86F, (0xBCB, 0x1)),
+ (0x2F992, (0xCEE, 0x1)),
+ (0x01E0E, (0x370, 0x2)),
+ (0x0F95D, (0x93E, 0x1)),
+ (0x0FA89, (0xA5C, 0x1)),
+ (0x0022F, (0x202, 0x2)),
+ (0x00CCB, (0x306, 0x3)),
+ (0x2F841, (0xB9D, 0x1)),
+ (0x004E6, (0x28E, 0x2)),
+ (0x01E5F, (0x426, 0x2)),
+ (0x004C2, (0x26C, 0x2)),
+ (0x004EC, (0x296, 0x2)),
+ (0x01B0E, (0x344, 0x2)),
+ (0x00390, (0x226, 0x3)),
+ (0x00105, (0x074, 0x2)),
+ (0x00419, (0x254, 0x2)),
+ (0x0F959, (0x93A, 0x1)),
+ (0x030F8, (0x8D9, 0x2)),
+ (0x01F25, (0x5F1, 0x3)),
+ (0x01EC0, (0x4FE, 0x3)),
+ (0x00124, (0x0AE, 0x2)),
+ (0x00101, (0x06C, 0x2)),
+ (0x000C7, (0x00C, 0x2)),
+ (0x2F9FC, (0xD58, 0x1)),
+ (0x0F92E, (0x90F, 0x1)),
+ (0x2F910, (0xC6C, 0x1)),
+ (0x02284, (0x849, 0x2)),
+ (0x01EE3, (0x55F, 0x3)),
+ (0x01E34, (0x3C4, 0x2)),
+ (0x003AD, (0x22F, 0x2)),
+ (0x0FA2C, (0xA01, 0x1)),
+ (0x2F877, (0xBD3, 0x1)),
+ (0x0F99B, (0x97C, 0x1)),
+ (0x000E8, (0x042, 0x2)),
+ (0x01E28, (0x3AA, 0x2)),
+ (0x01EA1, (0x4AA, 0x2)),
+ (0x2F94A, (0xCA6, 0x1)),
+ (0x1D15E, (0xB39, 0x2)),
+ (0x2F83B, (0xB97, 0x1)),
+ (0x1D164, (0xB49, 0x3)),
+ (0x2F854, (0xBB0, 0x1)),
+ (0x2F892, (0xBEE, 0x1)),
+ (0x1D1BB, (0xB4C, 0x2)),
+ (0x0010F, (0x088, 0x2)),
+ (0x01E63, (0x42E, 0x2)),
+ (0x01FD3, (0x7BB, 0x3)),
+ (0x01FB6, (0x785, 0x2)),
+ (0x0F944, (0x925, 0x1)),
+ (0x2F92B, (0xC87, 0x1)),
+ (0x001FF, (0x1AE, 0x2)),
+ (0x00386, (0x217, 0x2)),
+ (0x2F95F, (0xCBB, 0x1)),
+ (0x0FA32, (0xA07, 0x1)),
+ (0x0FA17, (0x9F3, 0x1)),
+ (0x01E17, (0x385, 0x3)),
+ (0x01F31, (0x612, 0x2)),
+ (0x2F980, (0xCDC, 0x1)),
+ (0x0FA2D, (0xA02, 0x1)),
+ (0x2F88E, (0xBEA, 0x1)),
+ (0x01FAC, (0x769, 0x4)),
+ (0x0FA3C, (0xA11, 0x1)),
+ (0x01F09, (0x5B0, 0x2)),
+ (0x01FDB, (0x7C9, 0x2)),
+ (0x2F9CA, (0xD26, 0x1)),
+ (0x01F2F, (0x60D, 0x3)),
+ (0x00623, (0x2B0, 0x2)),
+ (0x2F9F9, (0xD55, 0x1)),
+ (0x0FAB4, (0xA87, 0x1)),
+ (0x01EBF, (0x4FB, 0x3)),
+ (0x0F985, (0x966, 0x1)),
+ (0x01F6E, (0x6A3, 0x3)),
+ (0x2F965, (0xCC1, 0x1)),
+ (0x2F829, (0xB85, 0x1)),
+ (0x01E24, (0x3A2, 0x2)),
+ (0x2F8A2, (0xBFE, 0x1)),
+ (0x2F8CC, (0xC28, 0x1)),
+ (0x02ADC, (0x86B, 0x2)),
+ (0x004F3, (0x2A4, 0x2)),
+ (0x01F9D, (0x731, 0x4)),
+ (0x01F24, (0x5EE, 0x3)),
+ (0x2F9AF, (0xD0B, 0x1)),
+ (0x0FA77, (0xA4A, 0x1)),
+ (0x0FA93, (0xA66, 0x1)),
+ (0x01E61, (0x42A, 0x2)),
+ (0x00121, (0x0A8, 0x2)),
+ (0x01FCC, (0x7AC, 0x2)),
+ (0x2F9B6, (0xD12, 0x1)),
+ (0x2F963, (0xCBF, 0x1)),
+ (0x01EDB, (0x547, 0x3)),
+ (0x01FAB, (0x765, 0x4)),
+ (0x01E5A, (0x41A, 0x2)),
+ (0x2F80E, (0xB6A, 0x1)),
+ (0x0FA0A, (0x9EB, 0x1)),
+ (0x2F994, (0xCF0, 0x1)),
+ (0x2F91B, (0xC77, 0x1)),
+ (0x01EEE, (0x57C, 0x3)),
+ (0x01F67, (0x690, 0x3)),
+ (0x0F9B9, (0x99A, 0x1)),
+ (0x0FA63, (0xA38, 0x1)),
+ (0x2F972, (0xCCE, 0x1)),
+ (0x03079, (0x897, 0x2)),
+ (0x0F9EA, (0x9CB, 0x1)),
+ (0x0FB38, (0xACD, 0x2)),
+ (0x0FA9E, (0xA71, 0x1)),
+ (0x01E02, (0x356, 0x2)),
+ (0x01ECE, (0x522, 0x2)),
+ (0x01E75, (0x458, 0x2)),
+ (0x0FA46, (0xA1B, 0x1)),
+ (0x0FB43, (0xADD, 0x2)),
+ (0x2F80A, (0xB66, 0x1)),
+ (0x00115, (0x090, 0x2)),
+ (0x2F959, (0xCB5, 0x1)),
+ (0x030D1, (0x8C3, 0x2)),
+ (0x2F9B2, (0xD0E, 0x1)),
+ (0x2F98D, (0xCE9, 0x1)),
+ (0x0FA7E, (0xA51, 0x1)),
+ (0x00177, (0x132, 0x2)),
+ (0x2F867, (0xBC3, 0x1)),
+ (0x0FAA8, (0xA7B, 0x1)),
+ (0x0F97D, (0x95E, 0x1)),
+ (0x0F9B8, (0x999, 0x1)),
+ (0x0F968, (0x949, 0x1)),
+ (0x00D4B, (0x30B, 0x2)),
+ (0x0FA5A, (0xA2F, 0x1)),
+ (0x00104, (0x072, 0x2)),
+ (0x01F4C, (0x656, 0x3)),
+ (0x01F8E, (0x6F9, 0x4)),
+ (0x105C9, (0xAF3, 0x2)),
+ (0x01F2D, (0x607, 0x3)),
+ (0x0FA2B, (0xA00, 0x1)),
+ (0x2F8C5, (0xC21, 0x1)),
+ (0x01F73, (0x6AF, 0x2)),
+ (0x0FA73, (0xA46, 0x1)),
+ (0x0014E, (0x0E8, 0x2)),
+ (0x0F998, (0x979, 0x1)),
+ (0x0F94D, (0x92E, 0x1)),
+ (0x2F966, (0xCC2, 0x1)),
+ (0x2F91E, (0xC7A, 0x1)),
+ (0x00439, (0x256, 0x2)),
+ (0x01E98, (0x4A2, 0x2)),
+ (0x0FA8A, (0xA5D, 0x1)),
+ (0x000E9, (0x044, 0x2)),
+ (0x01FE9, (0x7E6, 0x2)),
+ (0x00170, (0x124, 0x2)),
+ (0x1109A, (0xAF7, 0x2)),
+ (0x11383, (0xB05, 0x2)),
+ (0x02270, (0x839, 0x2)),
+ (0x2F982, (0xCDE, 0x1)),
+ (0x0F9AF, (0x990, 0x1)),
+ (0x0FAB3, (0xA86, 0x1)),
+ (0x0F9E2, (0x9C3, 0x1)),
+ (0x2F9CB, (0xD27, 0x1)),
+ (0x0F947, (0x928, 0x1)),
+ (0x00F78, (0x32A, 0x2)),
+ (0x0021F, (0x1EA, 0x2)),
+ (0x2F928, (0xC84, 0x1)),
+ (0x004D2, (0x272, 0x2)),
+ (0x2F845, (0xBA1, 0x1)),
+ (0x01F23, (0x5EB, 0x3)),
+ (0x02285, (0x84B, 0x2)),
+ (0x0F903, (0x8E4, 0x1)),
+ (0x2F84A, (0xBA6, 0x1)),
+ (0x01F3F, (0x639, 0x3)),
+ (0x01E07, (0x360, 0x2)),
+ (0x2F823, (0xB7F, 0x1)),
+ (0x2F8D1, (0xC2D, 0x1)),
+ (0x01E11, (0x376, 0x2)),
+ (0x01FD2, (0x7B8, 0x3)),
+ (0x0017C, (0x13C, 0x2)),
+ (0x000E4, (0x03C, 0x2)),
+ (0x0F962, (0x943, 0x1)),
+ (0x001F4, (0x19A, 0x2)),
+ (0x0017A, (0x138, 0x2)),
+ (0x0F948, (0x929, 0x1)),
+ (0x001FE, (0x1AC, 0x2)),
+ (0x2F90F, (0xC6B, 0x1)),
+ (0x2F838, (0xB94, 0x1)),
+ (0x2F800, (0xB5C, 0x1)),
+ (0x0212B, (0x80F, 0x2)),
+ (0x2F83E, (0xB9A, 0x1)),
+ (0x0FA90, (0xA63, 0x1)),
+ (0x0095D, (0x2CE, 0x2)),
+ (0x2F96C, (0xCC8, 0x1)),
+ (0x0FA4D, (0xA22, 0x1)),
+ (0x0F906, (0x8E7, 0x1)),
+ (0x01F37, (0x623, 0x3)),
+ (0x0F9AC, (0x98D, 0x1)),
+ (0x01FE1, (0x7D3, 0x2)),
+ (0x01EC5, (0x50D, 0x3)),
+ (0x01ECB, (0x51C, 0x2)),
+ (0x2F947, (0xCA3, 0x1)),
+ (0x01F6D, (0x6A0, 0x3)),
+ (0x01E4C, (0x3F6, 0x3)),
+ (0x01FE6, (0x7DF, 0x2)),
+ (0x2F93C, (0xC98, 0x1)),
+ (0x2F9C4, (0xD20, 0x1)),
+ (0x001ED, (0x191, 0x3)),
+ (0x030F9, (0x8DB, 0x2)),
+ (0x2F898, (0xBF4, 0x1)),
+ (0x0FA0C, (0x9ED, 0x1)),
+ (0x000E0, (0x034, 0x2)),
+ (0x2F986, (0xCE2, 0x1)),
+ (0x01F61, (0x67F, 0x2)),
+ (0x01F7C, (0x6C1, 0x2)),
+ (0x01FA1, (0x740, 0x3)),
+ (0x0307C, (0x89B, 0x2)),
+ (0x01FEE, (0x7F0, 0x2)),
+ (0x2F8E6, (0xC42, 0x1)),
+ (0x00451, (0x25A, 0x2)),
+ (0x01E16, (0x382, 0x3)),
+ (0x00179, (0x136, 0x2)),
+ (0x00114, (0x08E, 0x2)),
+ (0x01F32, (0x614, 0x3)),
+ (0x0FB3E, (0xAD7, 0x2)),
+ (0x0F949, (0x92A, 0x1)),
+ (0x2F937, (0xC93, 0x1)),
+ (0x0F932, (0x913, 0x1)),
+ (0x0219B, (0x813, 0x2)),
+ (0x01E4F, (0x3FF, 0x3)),
+ (0x01E51, (0x405, 0x3)),
+ (0x01E8F, (0x490, 0x2)),
+ (0x030D4, (0x8C7, 0x2)),
+ (0x2FA0D, (0xD69, 0x1)),
+ (0x01EE1, (0x559, 0x3)),
+ (0x01026, (0x33A, 0x2)),
+ (0x0F9C2, (0x9A3, 0x1)),
+ (0x0012D, (0x0BC, 0x2)),
+ (0x2F864, (0xBC0, 0x1)),
+ (0x2F88D, (0xBE9, 0x1)),
+ (0x2F9CC, (0xD28, 0x1)),
+ (0x16124, (0xB25, 0x2)),
+ (0x0FA98, (0xA6B, 0x1)),
+ (0x2F901, (0xC5D, 0x1)),
+ (0x2F9D3, (0xD2F, 0x1)),
+ (0x01E96, (0x49E, 0x2)),
+ (0x0FA60, (0xA35, 0x1)),
+ (0x0FA62, (0xA37, 0x1)),
+ (0x000FD, (0x066, 0x2)),
+ (0x2FA00, (0xD5C, 0x1)),
+ (0x01F06, (0x5A8, 0x3)),
+ (0x00128, (0x0B2, 0x2)),
+ (0x01F0B, (0x5B5, 0x3)),
+ (0x2F99A, (0xCF6, 0x1)),
+ (0x2F970, (0xCCC, 0x1)),
+ (0x2FA13, (0xD6F, 0x1)),
+ (0x01F0F, (0x5C1, 0x3)),
+ (0x000F1, (0x052, 0x2)),
+ (0x2F8D3, (0xC2F, 0x1)),
+ (0x0F919, (0x8FA, 0x1)),
+ (0x02329, (0x869, 0x1)),
+ (0x0FB32, (0xAC3, 0x2)),
+ (0x0FA48, (0xA1D, 0x1)),
+ (0x0F953, (0x934, 0x1)),
+ (0x2F873, (0xBCF, 0x1)),
+ (0x0012E, (0x0BE, 0x2)),
+ (0x0F963, (0x944, 0x1)),
+ (0x01F53, (0x663, 0x3)),
+ (0x0F94E, (0x92F, 0x1)),
+ (0x0095A, (0x2C8, 0x2)),
+ (0x2F929, (0xC85, 0x1)),
+ (0x0012C, (0x0BA, 0x2)),
+ (0x00119, (0x098, 0x2)),
+ (0x2F997, (0xCF3, 0x1)),
+ (0x0FACD, (0xAA0, 0x1)),
+ (0x01E1B, (0x38E, 0x2)),
+ (0x01ED6, (0x538, 0x3)),
+ (0x0F945, (0x926, 0x1)),
+ (0x01FA8, (0x75B, 0x3)),
+ (0x0FA3A, (0xA0F, 0x1)),
+ (0x2F94C, (0xCA8, 0x1)),
+ (0x0F9C6, (0x9A7, 0x1)),
+ (0x0FB4E, (0xAF1, 0x2)),
+ (0x01F20, (0x5E4, 0x2)),
+ (0x0FAD3, (0xAA6, 0x1)),
+ (0x02278, (0x841, 0x2)),
+ (0x01E86, (0x47E, 0x2)),
+ (0x0F92D, (0x90E, 0x1)),
+ (0x0FA5B, (0xA30, 0x1)),
+ (0x0FA49, (0xA1E, 0x1)),
+ (0x0FAC7, (0xA9A, 0x1)),
+ (0x0F91D, (0x8FE, 0x1)),
+ (0x2F852, (0xBAE, 0x1)),
+ (0x01E3C, (0x3D6, 0x2)),
+ (0x01E25, (0x3A4, 0x2)),
+ (0x0F938, (0x919, 0x1)),
+ (0x2F919, (0xC75, 0x1)),
+ (0x00205, (0x1BA, 0x2)),
+ (0x2F843, (0xB9F, 0x1)),
+ (0x0FB33, (0xAC5, 0x2)),
+ (0x01FB8, (0x78A, 0x2)),
+ (0x0F9D7, (0x9B8, 0x1)),
+ (0x0FB4A, (0xAE9, 0x2)),
+ (0x00147, (0x0E0, 0x2)),
+ (0x0FAAA, (0xA7D, 0x1)),
+ (0x2F858, (0xBB4, 0x1)),
+ (0x01E8A, (0x486, 0x2)),
+ (0x001E1, (0x17B, 0x3)),
+ (0x2F950, (0xCAC, 0x1)),
+ (0x2FA19, (0xD75, 0x1)),
+ (0x0FA6C, (0xA41, 0x1)),
+ (0x01F93, (0x70B, 0x4)),
+ (0x0FA74, (0xA47, 0x1)),
+ (0x00109, (0x07C, 0x2)),
+ (0x01F59, (0x672, 0x2)),
+ (0x0F9D5, (0x9B6, 0x1)),
+ (0x0FA70, (0xA43, 0x1)),
+ (0x0FAA9, (0xA7C, 0x1)),
+ (0x2F9F4, (0xD50, 0x1)),
+ (0x2F948, (0xCA4, 0x1)),
+ (0x0F9DB, (0x9BC, 0x1)),
+ (0x01E2B, (0x3B0, 0x2)),
+ (0x2F9F3, (0xD4F, 0x1)),
+ (0x0016F, (0x122, 0x2)),
+ (0x01F97, (0x71B, 0x4)),
+ (0x01FA2, (0x743, 0x4)),
+ (0x2F956, (0xCB2, 0x1)),
+ (0x00F81, (0x32C, 0x2)),
+ (0x01EDF, (0x553, 0x3)),
+ (0x01E41, (0x3E0, 0x2)),
+ (0x1D15F, (0xB3B, 0x2)),
+ (0x01E66, (0x436, 0x3)),
+ (0x2F8E7, (0xC43, 0x1)),
+ (0x0FABD, (0xA90, 0x1)),
+ (0x0F92A, (0x90B, 0x1)),
+ (0x0FABA, (0xA8D, 0x1)),
+ (0x01ED5, (0x535, 0x3)),
+ (0x01F29, (0x5FC, 0x2)),
+ (0x01EB0, (0x4D4, 0x3)),
+ (0x01FF6, (0x7FB, 0x2)),
+ (0x0FA69, (0xA3E, 0x1)),
+ (0x00231, (0x207, 0x3)),
+ (0x0011A, (0x09A, 0x2)),
+ (0x2F916, (0xC72, 0x1)),
+ (0x000D2, (0x020, 0x2)),
+ (0x01E26, (0x3A6, 0x2)),
+ (0x2F9E8, (0xD44, 0x1)),
+ (0x00233, (0x20C, 0x2)),
+ (0x0F936, (0x917, 0x1)),
+ (0x01FEC, (0x7EC, 0x2)),
+ (0x00202, (0x1B4, 0x2)),
+ (0x0F9AD, (0x98E, 0x1)),
+ (0x2F927, (0xC83, 0x1)),
+ (0x2F856, (0xBB2, 0x1)),
+ (0x00931, (0x2C0, 0x2)),
+ (0x01E70, (0x44E, 0x2)),
+ (0x00135, (0x0C6, 0x2)),
+ (0x01E33, (0x3C2, 0x2)),
+ (0x01F82, (0x6CB, 0x4)),
+ (0x01F27, (0x5F7, 0x3)),
+ (0x2F809, (0xB65, 0x1)),
+ (0x0F920, (0x901, 0x1)),
+ (0x2F936, (0xC92, 0x1)),
+ (0x00340, (0x20E, 0x1)),
+ (0x003AB, (0x22B, 0x2)),
+ (0x2F86C, (0xBC8, 0x1)),
+ (0x01ED3, (0x52F, 0x3)),
+ (0x00103, (0x070, 0x2)),
+ (0x0F9A8, (0x989, 0x1)),
+ (0x0011C, (0x09E, 0x2)),
+ (0x0F92C, (0x90D, 0x1)),
+ (0x000C9, (0x010, 0x2)),
+ (0x0F9B4, (0x995, 0x1)),
+ (0x2F939, (0xC95, 0x1)),
+ (0x0F913, (0x8F4, 0x1)),
+ (0x0FA52, (0xA27, 0x1)),
+ (0x00210, (0x1D0, 0x2)),
+ (0x000F3, (0x056, 0x2)),
+ (0x2F804, (0xB60, 0x1)),
+ (0x2F87D, (0xBD9, 0x1)),
+ (0x0FAC9, (0xA9C, 0x1)),
+ (0x01E1C, (0x390, 0x3)),
+ (0x0011E, (0x0A2, 0x2)),
+ (0x0016C, (0x11C, 0x2)),
+ (0x00A59, (0x2E2, 0x2)),
+ (0x0FA26, (0x9FE, 0x1)),
+ (0x0FA45, (0xA1A, 0x1)),
+ (0x00112, (0x08A, 0x2)),
+ (0x2F82E, (0xB8A, 0x1)),
+ (0x0FA33, (0xA08, 0x1)),
+ (0x1112F, (0xAFF, 0x2)),
+ (0x00206, (0x1BC, 0x2)),
+ (0x030DC, (0x8D1, 0x2)),
+ (0x003CB, (0x23A, 0x2)),
+ (0x0F986, (0x967, 0x1)),
+ (0x0FB2D, (0xAB8, 0x3)),
+ (0x01FA9, (0x75E, 0x3)),
+ (0x0304E, (0x86F, 0x2)),
+ (0x0F9E6, (0x9C7, 0x1)),
+ (0x115BB, (0xB1B, 0x2)),
+ (0x11391, (0xB0B, 0x2)),
+ (0x01B3D, (0x34A, 0x2)),
+ (0x00DDA, (0x30F, 0x2)),
+ (0x0F992, (0x973, 0x1)),
+ (0x0015D, (0x102, 0x2)),
+ (0x00477, (0x268, 0x2)),
+ (0x0F9B1, (0x992, 0x1)),
+ (0x0040D, (0x250, 0x2)),
+ (0x030F7, (0x8D7, 0x2)),
+ (0x0F977, (0x958, 0x1)),
+ (0x0FAC4, (0xA97, 0x1)),
+ (0x0FA3B, (0xA10, 0x1)),
+ (0x2F88B, (0xBE7, 0x1)),
+ (0x02279, (0x843, 0x2)),
+ (0x0FA01, (0x9E2, 0x1)),
+ (0x01F79, (0x6BB, 0x2)),
+ (0x03062, (0x883, 0x2)),
+ (0x2F9D6, (0xD32, 0x1)),
+ (0x004ED, (0x298, 0x2)),
+ (0x2FA05, (0xD61, 0x1)),
+ (0x110AB, (0xAFB, 0x2)),
+ (0x0F9F1, (0x9D2, 0x1)),
+ (0x01E54, (0x40E, 0x2)),
+ (0x2F8B6, (0xC12, 0x1)),
+ (0x0FA25, (0x9FD, 0x1)),
+ (0x001D3, (0x156, 0x2)),
+ (0x01E2D, (0x3B4, 0x2)),
+ (0x00622, (0x2AE, 0x2)),
+ (0x0F9A9, (0x98A, 0x1)),
+ (0x00CC7, (0x300, 0x2)),
+ (0x01F7A, (0x6BD, 0x2)),
+ (0x0FA57, (0xA2C, 0x1)),
+ (0x2F9A8, (0xD04, 0x1)),
+ (0x001E0, (0x178, 0x3)),
+ (0x2F904, (0xC60, 0x1)),
+ (0x01FA7, (0x757, 0x4)),
+ (0x01EC3, (0x507, 0x3)),
+ (0x2F983, (0xCDF, 0x1)),
+ (0x009CC, (0x2D6, 0x2)),
+ (0x000D4, (0x024, 0x2)),
+ (0x0FAD9, (0xAAC, 0x1)),
+ (0x01F04, (0x5A2, 0x3)),
+ (0x2F8B0, (0xC0C, 0x1)),
+ (0x2F8D7, (0xC33, 0x1)),
+ (0x0F9FB, (0x9DC, 0x1)),
+ (0x2F9FB, (0xD57, 0x1)),
+ (0x00217, (0x1DE, 0x2)),
+ (0x2F9C1, (0xD1D, 0x1)),
+ (0x2F98B, (0xCE7, 0x1)),
+ (0x01F56, (0x66C, 0x3)),
+ (0x2F9E2, (0xD3E, 0x1)),
+ (0x00625, (0x2B4, 0x2)),
+ (0x0307A, (0x899, 0x2)),
+ (0x2F818, (0xB74, 0x1)),
+ (0x01E83, (0x478, 0x2)),
+ (0x01FB7, (0x787, 0x3)),
+ (0x01ECA, (0x51A, 0x2)),
+ (0x2F8F2, (0xC4E, 0x1)),
+ (0x2F990, (0xCEC, 0x1)),
+ (0x2F9DF, (0xD3B, 0x1)),
+ (0x2F859, (0xBB5, 0x1)),
+ (0x2FA09, (0xD65, 0x1)),
+ (0x2F883, (0xBDF, 0x1)),
+ (0x01FD7, (0x7C0, 0x3)),
+ (0x2F872, (0xBCE, 0x1)),
+ (0x2F85E, (0xBBA, 0x1)),
+ (0x2F9B5, (0xD11, 0x1)),
+ (0x0F9F4, (0x9D5, 0x1)),
+ (0x00213, (0x1D6, 0x2)),
+ (0x01EF4, (0x58C, 0x2)),
+ (0x2F9DA, (0xD36, 0x1)),
+ (0x01E36, (0x3C8, 0x2)),
+ (0x006D3, (0x2BC, 0x2)),
+ (0x2F9FF, (0xD5B, 0x1)),
+ (0x2F97C, (0xCD8, 0x1)),
+ (0x01FFC, (0x808, 0x2)),
+ (0x2F8AD, (0xC09, 0x1)),
+ (0x2F8FC, (0xC58, 0x1)),
+ (0x01E31, (0x3BE, 0x2)),
+ (0x003AC, (0x22D, 0x2)),
+ (0x01E80, (0x472, 0x2)),
+ (0x001D2, (0x154, 0x2)),
+ (0x0F901, (0x8E2, 0x1)),
+ (0x0F9DF, (0x9C0, 0x1)),
+ (0x0FA83, (0xA56, 0x1)),
+ (0x2F946, (0xCA2, 0x1)),
+ (0x2F863, (0xBBF, 0x1)),
+ (0x01F8B, (0x6ED, 0x4)),
+ (0x0FA7C, (0xA4F, 0x1)),
+ (0x00151, (0x0EE, 0x2)),
+ (0x01FC1, (0x795, 0x2)),
+ (0x2F8F8, (0xC54, 0x1)),
+ (0x2F9B3, (0xD0F, 0x1)),
+ (0x2F8A6, (0xC02, 0x1)),
+ (0x003AE, (0x231, 0x2)),
+ (0x2F9C9, (0xD25, 0x1)),
+ (0x2F9D8, (0xD34, 0x1)),
+ (0x2F81C, (0xB78, 0x1)),
+ (0x01EBA, (0x4F0, 0x2)),
+ (0x2F853, (0xBAF, 0x1)),
+ (0x00118, (0x096, 0x2)),
+ (0x2F8B7, (0xC13, 0x1)),
+ (0x2F9B8, (0xD14, 0x1)),
+ (0x2F93F, (0xC9B, 0x1)),
+ (0x0F9E0, (0x9C1, 0x1)),
+ (0x00385, (0x215, 0x2)),
+ (0x2F888, (0xBE4, 0x1)),
+ (0x0F99D, (0x97E, 0x1)),
+ (0x01E5B, (0x41C, 0x2)),
+ (0x000C4, (0x008, 0x2)),
+ (0x16122, (0xB21, 0x2)),
+ (0x03058, (0x879, 0x2)),
+ (0x01E68, (0x43C, 0x3)),
+ (0x0212A, (0x80E, 0x1)),
+ (0x2F921, (0xC7D, 0x1)),
+ (0x02260, (0x82F, 0x2)),
+ (0x0FB1F, (0xAAF, 0x2)),
+ (0x02001, (0x80C, 0x1)),
+ (0x01F88, (0x6E3, 0x3)),
+ (0x01F9C, (0x72D, 0x4)),
+ (0x00137, (0x0CA, 0x2)),
+ (0x0FA30, (0xA05, 0x1)),
+ (0x01E49, (0x3F0, 0x2)),
+ (0x0F9E1, (0x9C2, 0x1)),
+ (0x0FA8F, (0xA62, 0x1)),
+ (0x11938, (0xB1D, 0x2)),
+ (0x0F9D1, (0x9B2, 0x1)),
+ (0x0020B, (0x1C6, 0x2)),
+ (0x0FA9C, (0xA6F, 0x1)),
+ (0x0F982, (0x963, 0x1)),
+ (0x2F97B, (0xCD7, 0x1)),
+ (0x00400, (0x246, 0x2)),
+ (0x0FA40, (0xA15, 0x1)),
+ (0x0F96D, (0x94E, 0x1)),
+ (0x02241, (0x827, 0x2)),
+ (0x2F924, (0xC80, 0x1)),
+ (0x00172, (0x128, 0x2)),
+ (0x01E1F, (0x398, 0x2)),
+ (0x2F993, (0xCEF, 0x1)),
+ (0x001FB, (0x1A5, 0x3)),
+ (0x00F75, (0x326, 0x2)),
+ (0x00162, (0x10C, 0x2)),
+ (0x001E2, (0x17E, 0x2)),
+ (0x00374, (0x213, 0x1)),
+ (0x0F997, (0x978, 0x1)),
+ (0x004DE, (0x282, 0x2)),
+ (0x000D9, (0x02A, 0x2)),
+ (0x2F9EA, (0xD46, 0x1)),
+ (0x2F8AB, (0xC07, 0x1)),
+ (0x0FA7A, (0xA4D, 0x1)),
+ (0x2F8FA, (0xC56, 0x1)),
+ (0x0F90E, (0x8EF, 0x1)),
+ (0x0F983, (0x964, 0x1)),
+ (0x0016A, (0x118, 0x2)),
+ (0x0FA68, (0xA3D, 0x1)),
+ (0x000FB, (0x062, 0x2)),
+ (0x2FA16, (0xD72, 0x1)),
+ (0x01FFA, (0x804, 0x2)),
+ (0x01F02, (0x59C, 0x3)),
+ (0x2FA02, (0xD5E, 0x1)),
+ (0x01E3A, (0x3D2, 0x2)),
+ (0x01E69, (0x43F, 0x3)),
+ (0x0FAAD, (0xA80, 0x1)),
+ (0x004F8, (0x2AA, 0x2)),
+ (0x004D3, (0x274, 0x2)),
+ (0x01EF1, (0x585, 0x3)),
+ (0x1138E, (0xB09, 0x2)),
+ (0x2F8A5, (0xC01, 0x1)),
+ (0x2F837, (0xB93, 0x1)),
+ (0x01E0A, (0x368, 0x2)),
+ (0x0FA96, (0xA69, 0x1)),
+ (0x0014D, (0x0E6, 0x2)),
+ (0x1D162, (0xB43, 0x3)),
+ (0x0F923, (0x904, 0x1)),
+ (0x0FAB7, (0xA8A, 0x1)),
+ (0x01F11, (0x5C6, 0x2)),
+ (0x000EE, (0x04E, 0x2)),
+ (0x030C2, (0x8B9, 0x2)),
+ (0x0FA31, (0xA06, 0x1)),
+ (0x001D6, (0x15D, 0x3)),
+ (0x0FB4D, (0xAEF, 0x2)),
+ (0x000EC, (0x04A, 0x2)),
+ (0x2F969, (0xCC5, 0x1)),
+ (0x0F921, (0x902, 0x1)),
+ (0x00F76, (0x328, 0x2)),
+ (0x01EB5, (0x4E3, 0x3)),
+ (0x00155, (0x0F2, 0x2)),
+ (0x0FA61, (0xA36, 0x1)),
+ (0x0020E, (0x1CC, 0x2)),
+ (0x01F54, (0x666, 0x3)),
+ (0x2F8D9, (0xC35, 0x1)),
+ (0x0FAA1, (0xA74, 0x1)),
+ (0x2F985, (0xCE1, 0x1)),
+ (0x0F96F, (0x950, 0x1)),
+ (0x2F974, (0xCD0, 0x1)),
+ (0x01EC4, (0x50A, 0x3)),
+ (0x01E44, (0x3E6, 0x2)),
+ (0x2F8F0, (0xC4C, 0x1)),
+ (0x0FA81, (0xA54, 0x1)),
+ (0x0F9DE, (0x9BF, 0x1)),
+ (0x2F9A5, (0xD01, 0x1)),
+ (0x01FEA, (0x7E8, 0x2)),
+ (0x0FABF, (0xA92, 0x1)),
+ (0x00457, (0x25E, 0x2)),
+ (0x01E21, (0x39C, 0x2)),
+ (0x0FAB0, (0xA83, 0x1)),
+ (0x01E55, (0x410, 0x2)),
+ (0x01EF8, (0x594, 0x2)),
+ (0x0F91B, (0x8FC, 0x1)),
+ (0x01E50, (0x402, 0x3)),
+ (0x000EB, (0x048, 0x2)),
+ (0x2FA0A, (0xD66, 0x1)),
+ (0x0F94F, (0x930, 0x1)),
+ (0x004E4, (0x28A, 0x2)),
+ (0x0013B, (0x0D0, 0x2)),
+ (0x00169, (0x116, 0x2)),
+ (0x2FA01, (0xD5D, 0x1)),
+ (0x0F9E5, (0x9C6, 0x1)),
+ (0x0FA1A, (0x9F6, 0x1)),
+ (0x2F8AC, (0xC08, 0x1)),
+ (0x01F6A, (0x697, 0x3)),
+ (0x00CC8, (0x302, 0x2)),
+ (0x0F911, (0x8F2, 0x1)),
+ (0x0F928, (0x909, 0x1)),
+ (0x01E6C, (0x446, 0x2)),
+ (0x02226, (0x825, 0x2)),
+ (0x2F8E9, (0xC45, 0x1)),
+ (0x0F9FA, (0x9DB, 0x1)),
+ (0x01EE9, (0x56D, 0x3)),
+ (0x01F80, (0x6C5, 0x3)),
+ (0x01F13, (0x5CB, 0x3)),
+ (0x2F98C, (0xCE8, 0x1)),
+ (0x2F96B, (0xCC7, 0x1)),
+ (0x01FFB, (0x806, 0x2)),
+ (0x2F920, (0xC7C, 0x1)),
+ (0x0F951, (0x932, 0x1)),
+ (0x1112E, (0xAFD, 0x2)),
+ (0x000DC, (0x030, 0x2)),
+ (0x2FA1C, (0xD78, 0x1)),
+ (0x2F940, (0xC9C, 0x1)),
+ (0x2F84E, (0xBAA, 0x1)),
+ (0x0FA03, (0x9E4, 0x1)),
+ (0x0F914, (0x8F5, 0x1)),
+ (0x0F931, (0x912, 0x1)),
+ (0x0F98A, (0x96B, 0x1)),
+ (0x00F69, (0x322, 0x2)),
+ (0x0F9BD, (0x99E, 0x1)),
+ (0x030B2, (0x8A9, 0x2)),
+ (0x01FBE, (0x794, 0x1)),
+ (0x2F8C2, (0xC1E, 0x1)),
+ (0x0FAD8, (0xAAB, 0x1)),
+ (0x01FDE, (0x7CD, 0x2)),
+ (0x01F8F, (0x6FD, 0x4)),
+ (0x2FA11, (0xD6D, 0x1)),
+ (0x01E5E, (0x424, 0x2)),
+ (0x2F9C6, (0xD22, 0x1)),
+ (0x0014F, (0x0EA, 0x2)),
+ (0x030D6, (0x8C9, 0x2)),
+ (0x2F968, (0xCC4, 0x1)),
+ (0x0F952, (0x933, 0x1)),
+ (0x2F8E8, (0xC44, 0x1)),
+ (0x01F50, (0x65C, 0x2)),
+ (0x01E56, (0x412, 0x2)),
+ (0x0F9CC, (0x9AD, 0x1)),
+ (0x001D4, (0x158, 0x2)),
+ (0x0FABE, (0xA91, 0x1)),
+ (0x00123, (0x0AC, 0x2)),
+ (0x0FB3C, (0xAD5, 0x2)),
+ (0x0F996, (0x977, 0x1)),
+ (0x01E8D, (0x48C, 0x2)),
+ (0x2F8DB, (0xC37, 0x1)),
+ (0x00215, (0x1DA, 0x2)),
+ (0x0F909, (0x8EA, 0x1)),
+ (0x16123, (0xB23, 0x2)),
+ (0x0FA6B, (0xA40, 0x1)),
+ (0x02247, (0x82B, 0x2)),
+ (0x030D0, (0x8C1, 0x2)),
+ (0x1D1BE, (0xB53, 0x3)),
+ (0x004D1, (0x270, 0x2)),
+ (0x0FA79, (0xA4C, 0x1)),
+ (0x01E7F, (0x470, 0x2)),
+ (0x0FA12, (0x9F0, 0x1)),
+ (0x022AC, (0x851, 0x2)),
+ (0x0F9D4, (0x9B5, 0x1)),
+ (0x01EDA, (0x544, 0x3)),
+ (0x0F90D, (0x8EE, 0x1)),
+ (0x0F922, (0x903, 0x1)),
+ (0x01F8C, (0x6F1, 0x4)),
+ (0x01E13, (0x37A, 0x2)),
+ (0x030F4, (0x8D5, 0x2)),
+ (0x0FA88, (0xA5B, 0x1)),
+ (0x000CA, (0x012, 0x2)),
+ (0x01E0C, (0x36C, 0x2)),
+ (0x114BE, (0xB17, 0x2)),
+ (0x2F964, (0xCC0, 0x1)),
+ (0x030D9, (0x8CD, 0x2)),
+ (0x2F907, (0xC63, 0x1)),
+ (0x00161, (0x10A, 0x2)),
+ (0x0FAD0, (0xAA3, 0x1)),
+ (0x2FA03, (0xD5F, 0x1)),
+ (0x01FD6, (0x7BE, 0x2)),
+ (0x2F8B4, (0xC10, 0x1)),
+ (0x2F893, (0xBEF, 0x1)),
+ (0x01E45, (0x3E8, 0x2)),
+ (0x16127, (0xB2C, 0x3)),
+ (0x000ED, (0x04C, 0x2)),
+ (0x0FA35, (0xA0A, 0x1)),
+ (0x001FC, (0x1A8, 0x2)),
+ (0x01E60, (0x428, 0x2)),
+ (0x01E7D, (0x46C, 0x2)),
+ (0x0FA4C, (0xA21, 0x1)),
+ (0x00200, (0x1B0, 0x2)),
+ (0x0F93F, (0x920, 0x1)),
+ (0x2F911, (0xC6D, 0x1)),
+ (0x00168, (0x114, 0x2)),
+ (0x0F993, (0x974, 0x1)),
+ (0x00136, (0x0C8, 0x2)),
+ (0x01EAA, (0x4C2, 0x3)),
+ (0x0F969, (0x94A, 0x1)),
+ (0x2F8D5, (0xC31, 0x1)),
+ (0x01E99, (0x4A4, 0x2)),
+ (0x01E6F, (0x44C, 0x2)),
+ (0x0FA1B, (0x9F7, 0x1)),
+ (0x01E9B, (0x4A6, 0x2)),
+ (0x2F808, (0xB64, 0x1)),
+ (0x01F43, (0x643, 0x3)),
+ (0x0F980, (0x961, 0x1)),
+ (0x0FA58, (0xA2D, 0x1)),
+ (0x2F8A8, (0xC04, 0x1)),
+ (0x03052, (0x873, 0x2)),
+ (0x2F9E9, (0xD45, 0x1)),
+ (0x00344, (0x211, 0x2)),
+ (0x0FA38, (0xA0D, 0x1)),
+ (0x2F935, (0xC91, 0x1)),
+ (0x01F14, (0x5CE, 0x3)),
+ (0x01F39, (0x628, 0x2)),
+ (0x01E71, (0x450, 0x2)),
+ (0x0F96B, (0x94C, 0x1)),
+ (0x0F9F3, (0x9D4, 0x1)),
+ (0x0FAB6, (0xA89, 0x1)),
+ (0x01FD8, (0x7C3, 0x2)),
+ (0x0F995, (0x976, 0x1)),
+ (0x01EF9, (0x596, 0x2)),
+ (0x2F82F, (0xB8B, 0x1)),
+ (0x2F9BF, (0xD1B, 0x1)),
+ (0x0FA2E, (0xA03, 0x1)),
+ (0x2F814, (0xB70, 0x1)),
+ (0x0FAD1, (0xAA4, 0x1)),
+ (0x01E1D, (0x393, 0x3)),
+ (0x0038F, (0x224, 0x2)),
+ (0x2F8A1, (0xBFD, 0x1)),
+ (0x00228, (0x1F0, 0x2)),
+ (0x2F81E, (0xB7A, 0x1)),
+ (0x2F811, (0xB6D, 0x1)),
+ (0x001CD, (0x14A, 0x2)),
+ (0x01FC7, (0x7A1, 0x3)),
+ (0x0022A, (0x1F4, 0x3)),
+ (0x01F6B, (0x69A, 0x3)),
+ (0x00624, (0x2B2, 0x2)),
+ (0x01FC8, (0x7A4, 0x2)),
+ (0x0FAC2, (0xA95, 0x1)),
+ (0x0F9E7, (0x9C8, 0x1)),
+ (0x2F8FE, (0xC5A, 0x1)),
+ (0x030C9, (0x8BF, 0x2)),
+ (0x2F908, (0xC64, 0x1)),
+ (0x2F9E7, (0xD43, 0x1)),
+ (0x0FABB, (0xA8E, 0x1)),
+ (0x2FA1B, (0xD77, 0x1)),
+ (0x00139, (0x0CC, 0x2)),
+ (0x0FA1D, (0x9F9, 0x1)),
+ (0x01EF2, (0x588, 0x2)),
+ (0x2F998, (0xCF4, 0x1)),
+ (0x2F91F, (0xC7B, 0x1)),
+ (0x0FA9B, (0xA6E, 0x1)),
+ (0x0FA80, (0xA53, 0x1)),
+ (0x2F95C, (0xCB8, 0x1)),
+ (0x2F9F5, (0xD51, 0x1)),
+ (0x2F91A, (0xC76, 0x1)),
+ (0x01F70, (0x6A9, 0x2)),
+ (0x2F86B, (0xBC7, 0x1)),
+ (0x2F85A, (0xBB6, 0x1)),
+ (0x0013E, (0x0D6, 0x2)),
+ (0x2F850, (0xBAC, 0x1)),
+ (0x004DB, (0x27C, 0x2)),
+ (0x2F871, (0xBCD, 0x1)),
+ (0x0F970, (0x951, 0x1)),
+ (0x004DD, (0x280, 0x2)),
+ (0x01E1A, (0x38C, 0x2)),
+ (0x2F90E, (0xC6A, 0x1)),
+ (0x01F65, (0x68A, 0x3)),
+ (0x0F929, (0x90A, 0x1)),
+ (0x01EDD, (0x54D, 0x3)),
+ (0x01F89, (0x6E6, 0x3)),
+ (0x004D7, (0x278, 0x2)),
+ (0x01E2F, (0x3B9, 0x3)),
+ (0x2F860, (0xBBC, 0x1)),
+ (0x01F55, (0x669, 0x3)),
+ (0x0FAA4, (0xA77, 0x1)),
+ (0x0FA59, (0xA2E, 0x1)),
+ (0x0FB4B, (0xAEB, 0x2)),
+ (0x2F8BF, (0xC1B, 0x1)),
+ (0x01EE7, (0x568, 0x2)),
+ (0x004F9, (0x2AC, 0x2)),
+ (0x2F995, (0xCF1, 0x1)),
+ (0x022AF, (0x857, 0x2)),
+ (0x0F9B6, (0x997, 0x1)),
+ (0x01EBC, (0x4F4, 0x2)),
+ (0x004F5, (0x2A8, 0x2)),
+ (0x2F826, (0xB82, 0x1)),
+ (0x00116, (0x092, 0x2)),
+ (0x00453, (0x25C, 0x2)),
+ (0x0FB47, (0xAE3, 0x2)),
+ (0x01E08, (0x362, 0x3)),
+ (0x2F8E1, (0xC3D, 0x1)),
+ (0x001DC, (0x16F, 0x3)),
+ (0x0FA05, (0x9E6, 0x1)),
+ (0x0F908, (0x8E9, 0x1)),
+ (0x2F839, (0xB95, 0x1)),
+ (0x0F95F, (0x940, 0x1)),
+ (0x0012A, (0x0B6, 0x2)),
+ (0x0040E, (0x252, 0x2)),
+ (0x000D3, (0x022, 0x2)),
+ (0x03069, (0x889, 0x2)),
+ (0x2F944, (0xCA0, 0x1)),
+ (0x0F90F, (0x8F0, 0x1)),
+ (0x0F9A1, (0x982, 0x1)),
+ (0x001D0, (0x150, 0x2)),
+ (0x01F9B, (0x729, 0x4)),
+ (0x2FA04, (0xD60, 0x1)),
+ (0x01F74, (0x6B1, 0x2)),
+ (0x01F1D, (0x5E1, 0x3)),
+ (0x0F9F8, (0x9D9, 0x1)),
+ (0x2F9E3, (0xD3F, 0x1)),
+ (0x01FE2, (0x7D5, 0x3)),
+ (0x02288, (0x84D, 0x2)),
+ (0x2F9C2, (0xD1E, 0x1)),
+ (0x030D3, (0x8C5, 0x2)),
+ (0x030C0, (0x8B7, 0x2)),
+ (0x0226F, (0x837, 0x2)),
+ (0x2F9C8, (0xD24, 0x1)),
+ (0x2F8ED, (0xC49, 0x1)),
+ (0x2F85C, (0xBB8, 0x1)),
+ (0x01F0C, (0x5B8, 0x3)),
+ (0x01FC3, (0x79A, 0x2)),
+ (0x01FF2, (0x7F3, 0x3)),
+ (0x2F8EC, (0xC48, 0x1)),
+ (0x2F885, (0xBE1, 0x1)),
+ (0x2FA1A, (0xD76, 0x1)),
+ (0x00216, (0x1DC, 0x2)),
+ (0x2F8C7, (0xC23, 0x1)),
+ (0x01F71, (0x6AB, 0x2)),
+ (0x00209, (0x1C2, 0x2)),
+ (0x0F999, (0x97A, 0x1)),
+ (0x01FD1, (0x7B6, 0x2)),
+ (0x03094, (0x89F, 0x2)),
+ (0x2F878, (0xBD4, 0x1)),
+ (0x01E5C, (0x41E, 0x3)),
+ (0x01FED, (0x7EE, 0x2)),
+ (0x0F9F7, (0x9D8, 0x1)),
+ (0x2F9DE, (0xD3A, 0x1)),
+ (0x0F925, (0x906, 0x1)),
+ (0x001DA, (0x169, 0x3)),
+ (0x000D5, (0x026, 0x2)),
+ (0x0FA08, (0x9E9, 0x1)),
+ (0x01EC9, (0x518, 0x2)),
+ (0x00117, (0x094, 0x2)),
+ (0x01F3A, (0x62A, 0x3)),
+ (0x2F9FE, (0xD5A, 0x1)),
+ (0x01F2C, (0x604, 0x3)),
+ (0x0F94C, (0x92D, 0x1)),
+ (0x01E52, (0x408, 0x3)),
+ (0x02249, (0x82D, 0x2)),
+ (0x0021E, (0x1E8, 0x2)),
+ (0x01F44, (0x646, 0x3)),
+ (0x0F988, (0x969, 0x1)),
+ (0x01E4B, (0x3F4, 0x2)),
+ (0x01FE0, (0x7D1, 0x2)),
+ (0x01F6C, (0x69D, 0x3)),
+ (0x0FA66, (0xA3B, 0x1)),
+ (0x2F82B, (0xB87, 0x1)),
+ (0x01E67, (0x439, 0x3)),
+ (0x2F976, (0xCD2, 0x1)),
+ (0x0FA43, (0xA18, 0x1)),
+ (0x01E35, (0x3C6, 0x2)),
+ (0x2F83D, (0xB99, 0x1)),
+ (0x2F8DE, (0xC3A, 0x1)),
+ (0x2F813, (0xB6F, 0x1)),
+ (0x00175, (0x12E, 0x2)),
+ (0x0F979, (0x95A, 0x1)),
+ (0x2F942, (0xC9E, 0x1)),
+ (0x0F9FE, (0x9DF, 0x1)),
+ (0x0FAA3, (0xA76, 0x1)),
+ (0x0F974, (0x955, 0x1)),
+ (0x0F9AA, (0x98B, 0x1)),
+ (0x0F9C1, (0x9A2, 0x1)),
+ (0x02000, (0x80B, 0x1)),
+ (0x2F905, (0xC61, 0x1)),
+ (0x1109C, (0xAF9, 0x2)),
+ (0x0FA7F, (0xA52, 0x1)),
+ (0x2F890, (0xBEC, 0x1)),
+ (0x03073, (0x88F, 0x2)),
+ (0x0F9E8, (0x9C9, 0x1)),
+ (0x2F887, (0xBE3, 0x1)),
+ (0x000FA, (0x060, 0x2)),
+ (0x2F803, (0xB5F, 0x1)),
+ (0x2F9CF, (0xD2B, 0x1)),
+ (0x2F8A7, (0xC03, 0x1)),
+ (0x2F820, (0xB7C, 0x1)),
+ (0x0FB30, (0xABF, 0x2)),
+ (0x000EF, (0x050, 0x2)),
+ (0x1D1C0, (0xB59, 0x3)),
+ (0x01E37, (0x3CA, 0x2)),
+ (0x2F932, (0xC8E, 0x1)),
+ (0x021AE, (0x815, 0x2)),
+ (0x0FAC6, (0xA99, 0x1)),
+ (0x01F2B, (0x601, 0x3)),
+ (0x0FA3F, (0xA14, 0x1)),
+ (0x0FA54, (0xA29, 0x1)),
+ (0x001DB, (0x16C, 0x3)),
+ (0x01F26, (0x5F4, 0x3)),
+ (0x2F80F, (0xB6B, 0x1)),
+ (0x001F0, (0x198, 0x2)),
+ (0x0FA0B, (0x9EC, 0x1)),
+ (0x2F857, (0xBB3, 0x1)),
+ (0x0FA10, (0x9EF, 0x1)),
+ (0x2FA14, (0xD70, 0x1)),
+ (0x2F8F4, (0xC50, 0x1)),
+ (0x003B0, (0x235, 0x3)),
+ (0x0F9D2, (0x9B3, 0x1)),
+ (0x2F842, (0xB9E, 0x1)),
+ (0x01F9A, (0x725, 0x4)),
+ (0x01EED, (0x579, 0x3)),
+ (0x01ED8, (0x53E, 0x3)),
+ (0x00144, (0x0DA, 0x2)),
+ (0x003D4, (0x244, 0x2)),
+ (0x2F870, (0xBCC, 0x1)),
+ (0x0F95C, (0x93D, 0x1)),
+ (0x0FA92, (0xA65, 0x1)),
+ (0x2F962, (0xCBE, 0x1)),
+ (0x2F8E4, (0xC40, 0x1)),
+ (0x01E15, (0x37F, 0x3)),
+ (0x022E0, (0x859, 0x2)),
+ (0x001D1, (0x152, 0x2)),
+ (0x00165, (0x112, 0x2)),
+ (0x0FAD2, (0xAA5, 0x1)),
+ (0x0FB2C, (0xAB5, 0x3)),
+ (0x01E39, (0x3CF, 0x3)),
+ (0x2F9AE, (0xD0A, 0x1)),
+ (0x000C8, (0x00E, 0x2)),
+ (0x2F8BC, (0xC18, 0x1)),
+ (0x01EEB, (0x573, 0x3)),
+ (0x2F96A, (0xCC6, 0x1)),
+ (0x001FA, (0x1A2, 0x3)),
+ (0x2F8CD, (0xC29, 0x1)),
+ (0x2F8A4, (0xC00, 0x1)),
+ (0x0F91E, (0x8FF, 0x1)),
+ (0x113C7, (0xB0F, 0x2)),
+ (0x01FEF, (0x7F2, 0x1)),
+ (0x2F899, (0xBF5, 0x1)),
+ (0x2F8D8, (0xC34, 0x1)),
+ (0x01E47, (0x3EC, 0x2)),
+ (0x022AE, (0x855, 0x2)),
+ (0x00389, (0x21C, 0x2)),
+ (0x0FA8E, (0xA61, 0x1)),
+ (0x000CC, (0x016, 0x2)),
+ (0x2F81D, (0xB79, 0x1)),
+ (0x0F941, (0x922, 0x1)),
+ (0x0F975, (0x956, 0x1)),
+ (0x00A5A, (0x2E4, 0x2)),
+ (0x00FA2, (0x332, 0x2)),
+ (0x01FB1, (0x77B, 0x2)),
+ (0x00106, (0x076, 0x2)),
+ (0x2F954, (0xCB0, 0x1)),
+ (0x004EB, (0x294, 0x2)),
+ (0x01F72, (0x6AD, 0x2)),
+ (0x2F8AE, (0xC0A, 0x1)),
+ (0x01ED4, (0x532, 0x3)),
+ (0x01E81, (0x474, 0x2)),
+ (0x0FA42, (0xA17, 0x1)),
+ (0x00626, (0x2B6, 0x2)),
+ (0x01E43, (0x3E4, 0x2)),
+ (0x01F77, (0x6B7, 0x2)),
+ (0x001EA, (0x18A, 0x2)),
+ (0x0F9D3, (0x9B4, 0x1)),
+ (0x2F819, (0xB75, 0x1)),
+ (0x2F8BE, (0xC1A, 0x1)),
+ (0x01ED9, (0x541, 0x3)),
+ (0x0F930, (0x911, 0x1)),
+ (0x0FA91, (0xA64, 0x1)),
+ (0x0095F, (0x2D2, 0x2)),
+ (0x2F930, (0xC8C, 0x1)),
+ (0x2F86D, (0xBC9, 0x1)),
+ (0x004EA, (0x292, 0x2)),
+ (0x01EE6, (0x566, 0x2)),
+ (0x01F01, (0x59A, 0x2)),
+ (0x022E2, (0x85D, 0x2)),
+ (0x01FDD, (0x7CB, 0x2)),
+ (0x2FA18, (0xD74, 0x1)),
+ (0x03076, (0x893, 0x2)),
+ (0x2F906, (0xC62, 0x1)),
+ (0x2F9C3, (0xD1F, 0x1)),
+ (0x01F08, (0x5AE, 0x2)),
+ (0x01B3B, (0x348, 0x2)),
+ (0x0022B, (0x1F7, 0x3)),
+ (0x01F86, (0x6DB, 0x4)),
+ (0x000C3, (0x006, 0x2)),
+ (0x0038E, (0x222, 0x2)),
+ (0x004D0, (0x26E, 0x2)),
+ (0x030C7, (0x8BD, 0x2)),
+ (0x00A5B, (0x2E6, 0x2)),
+ (0x000F9, (0x05E, 0x2)),
+ (0x0017D, (0x13E, 0x2)),
+ (0x01E94, (0x49A, 0x2)),
+ (0x01E3D, (0x3D8, 0x2)),
+ (0x0FAB1, (0xA84, 0x1)),
+ (0x2F8DA, (0xC36, 0x1)),
+ (0x01F6F, (0x6A6, 0x3)),
+ (0x0F937, (0x918, 0x1)),
+ (0x2F8EE, (0xC4A, 0x1)),
+ (0x2F8C1, (0xC1D, 0x1)),
+ (0x2F913, (0xC6F, 0x1)),
+ (0x0F912, (0x8F3, 0x1)),
+ (0x2F978, (0xCD4, 0x1)),
+ (0x2F97F, (0xCDB, 0x1)),
+ (0x001EF, (0x196, 0x2)),
+ (0x01E65, (0x433, 0x3)),
+ (0x0012F, (0x0C0, 0x2)),
+ (0x01FC6, (0x79F, 0x2)),
+ (0x0FAC0, (0xA93, 0x1)),
+ (0x0020A, (0x1C4, 0x2)),
+ (0x000C0, (0x000, 0x2)),
+ (0x02209, (0x81F, 0x2)),
+ (0x003CE, (0x240, 0x2)),
+ (0x0020D, (0x1CA, 0x2)),
+ (0x2F99E, (0xCFA, 0x1)),
+ (0x00FA7, (0x334, 0x2)),
+ (0x0F98E, (0x96F, 0x1)),
+ (0x2F805, (0xB61, 0x1)),
+ (0x01EC1, (0x501, 0x3)),
+ (0x00159, (0x0FA, 0x2)),
+ (0x01FCD, (0x7AE, 0x2)),
+ (0x01F40, (0x63C, 0x2)),
+ (0x2F933, (0xC8F, 0x1)),
+ (0x030B0, (0x8A7, 0x2)),
+ (0x01F30, (0x610, 0x2)),
+ (0x00F93, (0x32E, 0x2)),
+ (0x1134C, (0xB03, 0x2)),
+ (0x2FA06, (0xD62, 0x1)),
+ (0x2F9A2, (0xCFE, 0x1)),
+ (0x2F80C, (0xB68, 0x1)),
+ (0x2F9D9, (0xD35, 0x1)),
+ (0x01E19, (0x38A, 0x2)),
+ (0x000C5, (0x00A, 0x2)),
+ (0x01F9F, (0x739, 0x4)),
+ (0x2F95D, (0xCB9, 0x1)),
+ (0x00DDC, (0x311, 0x2)),
+ (0x01F81, (0x6C8, 0x3)),
+ (0x01E76, (0x45A, 0x2)),
+ (0x0F957, (0x938, 0x1)),
+ (0x00134, (0x0C4, 0x2)),
+ (0x01E97, (0x4A0, 0x2)),
+ (0x01EB2, (0x4DA, 0x3)),
+ (0x2F89A, (0xBF6, 0x1)),
+ (0x2F828, (0xB84, 0x1)),
+ (0x0015C, (0x100, 0x2)),
+ (0x0F967, (0x948, 0x1)),
+ (0x00122, (0x0AA, 0x2)),
+ (0x2F967, (0xCC3, 0x1)),
+ (0x00163, (0x10E, 0x2)),
+ (0x0FA2A, (0x9FF, 0x1)),
+ (0x00207, (0x1BE, 0x2)),
+ (0x001D8, (0x163, 0x3)),
+ (0x01F78, (0x6B9, 0x2)),
+ (0x0FA51, (0xA26, 0x1)),
+ (0x2F988, (0xCE4, 0x1)),
+ (0x2F918, (0xC74, 0x1)),
+ (0x030D7, (0x8CB, 0x2)),
+ (0x2F92D, (0xC89, 0x1)),
+ (0x2F9A1, (0xCFD, 0x1)),
+ (0x01F42, (0x640, 0x3)),
+ (0x00160, (0x108, 0x2)),
+ (0x00CC0, (0x2FE, 0x2)),
+ (0x030BA, (0x8B1, 0x2)),
+ (0x01EBE, (0x4F8, 0x3)),
+ (0x01E10, (0x374, 0x2)),
+ (0x01EDE, (0x550, 0x3)),
+ (0x01F57, (0x66F, 0x3)),
+ (0x0F940, (0x921, 0x1)),
+ (0x01E06, (0x35E, 0x2)),
+ (0x0010A, (0x07E, 0x2)),
+ (0x01E46, (0x3EA, 0x2)),
+ (0x0F900, (0x8E1, 0x1)),
+ (0x004EE, (0x29A, 0x2)),
+ (0x2F88C, (0xBE8, 0x1)),
+ (0x2F889, (0xBE5, 0x1)),
+ (0x00FB9, (0x338, 0x2)),
+ (0x2F90C, (0xC68, 0x1)),
+ (0x2F8F1, (0xC4D, 0x1)),
+ (0x00C48, (0x2FC, 0x2)),
+ (0x03067, (0x887, 0x2)),
+ (0x2F917, (0xC73, 0x1)),
+ (0x2F8F3, (0xC4F, 0x1)),
+ (0x2F97A, (0xCD6, 0x1)),
+ (0x0F961, (0x942, 0x1)),
+ (0x0F97C, (0x95D, 0x1)),
+ (0x0037E, (0x214, 0x1)),
+ (0x2F824, (0xB80, 0x1)),
+ (0x004DA, (0x27A, 0x2)),
+ (0x2F89D, (0xBF9, 0x1)),
+ (0x2F960, (0xCBC, 0x1)),
+ (0x0022C, (0x1FA, 0x3)),
+ (0x2F96F, (0xCCB, 0x1)),
+ (0x01F33, (0x617, 0x3)),
+ (0x0FAD5, (0xAA8, 0x1)),
+ (0x2F9F7, (0xD53, 0x1)),
+ (0x16125, (0xB27, 0x2)),
+ (0x2F9AA, (0xD06, 0x1)),
+ (0x022EC, (0x865, 0x2)),
+ (0x00204, (0x1B8, 0x2)),
+ (0x01F3B, (0x62D, 0x3)),
+ (0x2F925, (0xC81, 0x1)),
+ (0x2F8B8, (0xC14, 0x1)),
+ (0x01E8B, (0x488, 0x2)),
+ (0x2F840, (0xB9C, 0x1)),
+ (0x2F931, (0xC8D, 0x1)),
+ (0x00218, (0x1E0, 0x2)),
+ (0x001EB, (0x18C, 0x2)),
+ (0x0F9A6, (0x987, 0x1)),
+ (0x0F976, (0x957, 0x1)),
+ (0x01EA0, (0x4A8, 0x2)),
+ (0x2F86E, (0xBCA, 0x1)),
+ (0x0FA97, (0xA6A, 0x1)),
+ (0x02204, (0x81D, 0x2)),
+ (0x0F9A5, (0x986, 0x1)),
+ (0x01F99, (0x722, 0x3)),
+ (0x01E82, (0x476, 0x2)),
+ (0x01F7D, (0x6C3, 0x2)),
+ (0x001E9, (0x188, 0x2)),
+ (0x2F884, (0xBE0, 0x1)),
+ (0x0020C, (0x1C8, 0x2)),
+ (0x16D69, (0xB34, 0x2)),
+ (0x2F9BC, (0xD18, 0x1)),
+ (0x2F847, (0xBA3, 0x1)),
+ (0x2F8C4, (0xC20, 0x1)),
+ (0x00BCB, (0x2F8, 0x2)),
+ (0x2F830, (0xB8C, 0x1)),
+ (0x01E03, (0x358, 0x2)),
+ (0x01E18, (0x388, 0x2)),
+ (0x030B6, (0x8AD, 0x2)),
+ (0x2F9D4, (0xD30, 0x1)),
+ (0x0F9B7, (0x998, 0x1)),
+ (0x001CE, (0x14C, 0x2)),
+ (0x0F934, (0x915, 0x1)),
+ (0x001B0, (0x148, 0x2)),
+ (0x0011F, (0x0A4, 0x2)),
+ (0x03074, (0x891, 0x2)),
+ (0x2F89C, (0xBF8, 0x1)),
+ (0x00227, (0x1EE, 0x2)),
+ (0x2F979, (0xCD5, 0x1)),
+ (0x2F9F2, (0xD4E, 0x1)),
+ (0x01FA4, (0x74B, 0x4)),
+ (0x2F862, (0xBBE, 0x1)),
+ (0x2F8E5, (0xC41, 0x1)),
+ (0x0016E, (0x120, 0x2)),
+ (0x0F98C, (0x96D, 0x1)),
+ (0x2F95E, (0xCBA, 0x1)),
+ (0x2F996, (0xCF2, 0x1)),
+ (0x01F84, (0x6D3, 0x4)),
+ (0x2F945, (0xCA1, 0x1)),
+ (0x00929, (0x2BE, 0x2)),
+ (0x2F89B, (0xBF7, 0x1)),
+ (0x02224, (0x823, 0x2)),
+ (0x01B08, (0x33E, 0x2)),
+ (0x0F9D6, (0x9B7, 0x1)),
+ (0x01F60, (0x67D, 0x2)),
+ (0x2F953, (0xCAF, 0x1)),
+ (0x01E6E, (0x44A, 0x2)),
+ (0x2F861, (0xBBD, 0x1)),
+ (0x00B5D, (0x2F2, 0x2)),
+ (0x2F938, (0xC94, 0x1)),
+ (0x2F9BD, (0xD19, 0x1)),
+ (0x2F9E4, (0xD40, 0x1)),
+ (0x2F943, (0xC9F, 0x1)),
+ (0x01E3F, (0x3DC, 0x2)),
+ (0x03060, (0x881, 0x2)),
+ (0x2F92F, (0xC8B, 0x1)),
+ (0x2F880, (0xBDC, 0x1)),
+ (0x02262, (0x831, 0x2)),
+ (0x0F9EB, (0x9CC, 0x1)),
+ (0x0F9DC, (0x9BD, 0x1)),
+ (0x01F45, (0x649, 0x3)),
+ (0x0FA6D, (0xA42, 0x1)),
+ (0x01E53, (0x40B, 0x3)),
+ (0x2F88F, (0xBEB, 0x1)),
+ (0x0F956, (0x937, 0x1)),
+ (0x0FA84, (0xA57, 0x1)),
+ (0x001D7, (0x160, 0x3)),
+ (0x113C5, (0xB0D, 0x2)),
+ (0x000E5, (0x03E, 0x2)),
+ (0x01F90, (0x701, 0x3)),
+ (0x2F9A6, (0xD02, 0x1)),
+ (0x01F0E, (0x5BE, 0x3)),
+ (0x0095E, (0x2D0, 0x2)),
+ (0x01E4D, (0x3F9, 0x3)),
+ (0x000D6, (0x028, 0x2)),
+ (0x01F96, (0x717, 0x4)),
+ (0x01EA6, (0x4B6, 0x3)),
+ (0x2F874, (0xBD0, 0x1)),
+ (0x2F9C5, (0xD21, 0x1)),
+ (0x2F981, (0xCDD, 0x1)),
+ (0x0F92B, (0x90C, 0x1)),
+ (0x0FA04, (0x9E5, 0x1)),
+ (0x2F987, (0xCE3, 0x1)),
+ (0x01E64, (0x430, 0x3)),
+ (0x0FB2B, (0xAB3, 0x2)),
+ (0x0FAAB, (0xA7E, 0x1)),
+ (0x2F915, (0xC71, 0x1)),
+ (0x2F81B, (0xB77, 0x1)),
+ (0x00958, (0x2C4, 0x2)),
+ (0x2FA07, (0xD63, 0x1)),
+ (0x0022E, (0x200, 0x2)),
+ (0x0FACC, (0xA9F, 0x1)),
+ (0x2F895, (0xBF1, 0x1)),
+ (0x001E3, (0x180, 0x2)),
+ (0x11385, (0xB07, 0x2)),
+ (0x0FA34, (0xA09, 0x1)),
+ (0x0FAA7, (0xA7A, 0x1)),
+ (0x01F92, (0x707, 0x4)),
+ (0x2F8C9, (0xC25, 0x1)),
+ (0x0FA18, (0x9F4, 0x1)),
+ (0x0F9DA, (0x9BB, 0x1)),
+ (0x2F94B, (0xCA7, 0x1)),
+ (0x0220C, (0x821, 0x2)),
+ (0x0F99E, (0x97F, 0x1)),
+ (0x00F57, (0x31E, 0x2)),
+ (0x00226, (0x1EC, 0x2)),
+ (0x01EB8, (0x4EC, 0x2)),
+ (0x00CCA, (0x304, 0x2)),
+ (0x2F8DF, (0xC3B, 0x1)),
+ (0x0040C, (0x24E, 0x2)),
+ (0x0F926, (0x907, 0x1)),
+ (0x01E85, (0x47C, 0x2)),
+ (0x0015B, (0x0FE, 0x2)),
+ (0x0FA7B, (0xA4E, 0x1)),
+ (0x0FA67, (0xA3C, 0x1)),
+ (0x0F946, (0x927, 0x1)),
+ (0x2F9CD, (0xD29, 0x1)),
+ (0x03054, (0x875, 0x2)),
+ (0x2F868, (0xBC4, 0x1)),
+ (0x0FA7D, (0xA50, 0x1)),
+ (0x01EA5, (0x4B3, 0x3)),
+ (0x2F832, (0xB8E, 0x1)),
+ (0x0FAA0, (0xA73, 0x1)),
+ (0x01FE8, (0x7E4, 0x2)),
+ (0x2F8B1, (0xC0D, 0x1)),
+ (0x00219, (0x1E2, 0x2)),
+ (0x0F9DD, (0x9BE, 0x1)),
+ (0x001DF, (0x175, 0x3)),
+ (0x0FA56, (0xA2B, 0x1)),
+ (0x2F9EC, (0xD48, 0x1)),
+ (0x2F8F5, (0xC51, 0x1)),
+ (0x03050, (0x871, 0x2)),
+ (0x1D163, (0xB46, 0x3)),
+ (0x01EB4, (0x4E0, 0x3)),
+ (0x0F95A, (0x93B, 0x1)),
+ (0x00DDD, (0x313, 0x3)),
+ (0x0FA76, (0xA49, 0x1)),
+ (0x00203, (0x1B6, 0x2)),
+ (0x01B40, (0x34C, 0x2)),
+ (0x004E2, (0x286, 0x2)),
+ (0x01E91, (0x494, 0x2)),
+ (0x2F95A, (0xCB6, 0x1)),
+ (0x0F9E4, (0x9C5, 0x1)),
+ (0x16D6A, (0xB36, 0x3)),
+ (0x0F989, (0x96A, 0x1)),
+ (0x01F03, (0x59F, 0x3)),
+ (0x00154, (0x0F0, 0x2)),
+ (0x000DB, (0x02E, 0x2)),
+ (0x2F923, (0xC7F, 0x1)),
+ (0x00232, (0x20A, 0x2)),
+ (0x00148, (0x0E2, 0x2)),
+ (0x2F87C, (0xBD8, 0x1)),
+ (0x0F9A0, (0x981, 0x1)),
+ (0x0F9CE, (0x9AF, 0x1)),
+ (0x006C2, (0x2BA, 0x2)),
+ (0x0FB41, (0xADB, 0x2)),
+ (0x2F8AA, (0xC06, 0x1)),
+ (0x2F91C, (0xC78, 0x1)),
+ (0x0F990, (0x971, 0x1)),
+ (0x01EE2, (0x55C, 0x3)),
+ (0x01F68, (0x693, 0x2)),
+ (0x01F21, (0x5E6, 0x2)),
+ (0x2F9B7, (0xD13, 0x1)),
+ (0x01FF8, (0x800, 0x2)),
+ (0x0FA09, (0x9EA, 0x1)),
+ (0x030B4, (0x8AB, 0x2)),
+ (0x0FB34, (0xAC7, 0x2)),
+ (0x000C2, (0x004, 0x2)),
+ (0x004E3, (0x288, 0x2)),
+ (0x01E59, (0x418, 0x2)),
+ (0x01B0C, (0x342, 0x2)),
+ (0x2F894, (0xBF0, 0x1)),
+ (0x01E57, (0x414, 0x2)),
+ (0x0021A, (0x1E4, 0x2)),
+ (0x0F9CB, (0x9AC, 0x1)),
+ (0x0226E, (0x835, 0x2)),
+ (0x114BC, (0xB15, 0x2)),
+ (0x2F896, (0xBF2, 0x1)),
+ (0x02274, (0x83D, 0x2)),
+ (0x0FAD6, (0xAA9, 0x1)),
+ (0x02275, (0x83F, 0x2)),
+ (0x0010C, (0x082, 0x2)),
+ (0x2F9B1, (0xD0D, 0x1)),
+ (0x0FB3B, (0xAD3, 0x2)),
+ (0x2F9F1, (0xD4D, 0x1)),
+ (0x00A36, (0x2E0, 0x2)),
+ (0x00BCA, (0x2F6, 0x2)),
+ (0x01ECC, (0x51E, 0x2)),
+ (0x2F958, (0xCB4, 0x1)),
+ (0x0FB35, (0xAC9, 0x2)),
+ (0x001A0, (0x142, 0x2)),
+ (0x0FA19, (0x9F5, 0x1)),
+ (0x0013D, (0x0D4, 0x2)),
+ (0x01EF6, (0x590, 0x2)),
+ (0x0038C, (0x220, 0x2)),
+ (0x2F881, (0xBDD, 0x1)),
+ (0x0F9D9, (0x9BA, 0x1)),
+ (0x01ECD, (0x520, 0x2)),
+ (0x01E7C, (0x46A, 0x2)),
+ (0x2F9DD, (0xD39, 0x1)),
+ (0x16126, (0xB29, 0x3)),
+ (0x2F9ED, (0xD49, 0x1)),
+ (0x2F952, (0xCAE, 0x1)),
+ (0x0F91F, (0x900, 0x1)),
+ (0x2F902, (0xC5E, 0x1)),
+ (0x0F97A, (0x95B, 0x1)),
+ (0x2F8FF, (0xC5B, 0x1)),
+ (0x0FA37, (0xA0C, 0x1)),
+ (0x0FB44, (0xADF, 0x2)),
+ (0x2F9EE, (0xD4A, 0x1)),
+ (0x00A5E, (0x2E8, 0x2)),
+ (0x01F4B, (0x653, 0x3)),
+ (0x0F9F2, (0x9D3, 0x1)),
+ (0x01E6D, (0x448, 0x2)),
+ (0x00164, (0x110, 0x2)),
+ (0x003CD, (0x23E, 0x2)),
+ (0x030FA, (0x8DD, 0x2)),
+ (0x0FAB2, (0xA85, 0x1)),
+ (0x01E40, (0x3DE, 0x2)),
+ (0x00156, (0x0F4, 0x2)),
+ (0x0FA53, (0xA28, 0x1)),
+ (0x2F99F, (0xCFB, 0x1)),
+ (0x2F96D, (0xCC9, 0x1)),
+ (0x2F9A7, (0xD03, 0x1)),
+ (0x01F19, (0x5D6, 0x2)),
+ (0x0F9BA, (0x99B, 0x1)),
+ (0x01EF0, (0x582, 0x3)),
+ (0x2F8D2, (0xC2E, 0x1)),
+ (0x00F5C, (0x320, 0x2)),
+ (0x1D1BD, (0xB50, 0x3)),
+ (0x01FB2, (0x77D, 0x3)),
+ (0x03065, (0x885, 0x2)),
+ (0x2F9DB, (0xD37, 0x1)),
+ (0x0038A, (0x21E, 0x2)),
+ (0x01F91, (0x704, 0x3)),
+ (0x0FB3A, (0xAD1, 0x2)),
+ (0x2F9BE, (0xD1A, 0x1)),
+ (0x01FBA, (0x78E, 0x2)),
+ (0x000F4, (0x058, 0x2)),
+ (0x00B4B, (0x2EC, 0x2)),
+ (0x0F910, (0x8F1, 0x1)),
+ (0x0F95B, (0x93C, 0x1)),
+ (0x2F876, (0xBD2, 0x1)),
+ (0x2F81F, (0xB7B, 0x1)),
+ (0x2F8BD, (0xC19, 0x1)),
+ (0x0F954, (0x935, 0x1)),
+ (0x2F822, (0xB7E, 0x1)),
+ (0x00201, (0x1B2, 0x2)),
+ (0x01E84, (0x47A, 0x2)),
+ (0x2FA08, (0xD64, 0x1)),
+ (0x0F9CF, (0x9B0, 0x1)),
+ (0x2F9A9, (0xD05, 0x1)),
+ (0x01F76, (0x6B5, 0x2)),
+ (0x0F96A, (0x94B, 0x1)),
+ (0x0F9E3, (0x9C4, 0x1)),
+ (0x2F844, (0xBA0, 0x1)),
+ (0x0FB2E, (0xABB, 0x2)),
+ (0x0FAB5, (0xA88, 0x1)),
+ (0x000C1, (0x002, 0x2)),
+ (0x00178, (0x134, 0x2)),
+ (0x2F8D6, (0xC32, 0x1)),
+ (0x00343, (0x210, 0x1)),
+ (0x2F815, (0xB71, 0x1)),
+ (0x2F85F, (0xBBB, 0x1)),
+ (0x0F93B, (0x91C, 0x1)),
+ (0x001F8, (0x19E, 0x2)),
+ (0x01EB6, (0x4E6, 0x3)),
+ (0x01FE7, (0x7E1, 0x3)),
+ (0x0FA47, (0xA1C, 0x1)),
+ (0x2F99B, (0xCF7, 0x1)),
+ (0x004C1, (0x26A, 0x2)),
+ (0x01F49, (0x64E, 0x2)),
+ (0x2F8A9, (0xC05, 0x1)),
+ (0x01E32, (0x3C0, 0x2)),
+ (0x000F2, (0x054, 0x2)),
+ (0x0FA9A, (0xA6D, 0x1)),
+ (0x2F85B, (0xBB7, 0x1)),
+ (0x0F9CD, (0x9AE, 0x1)),
+ (0x030AE, (0x8A5, 0x2)),
+ (0x01F7B, (0x6BF, 0x2)),
+ (0x01E92, (0x496, 0x2)),
+ (0x2F8B2, (0xC0E, 0x1)),
+ (0x0F97E, (0x95F, 0x1)),
+ (0x01EB7, (0x4E9, 0x3)),
+ (0x0FA06, (0x9E7, 0x1)),
+ (0x01FCF, (0x7B2, 0x2)),
+ (0x2F8EA, (0xC46, 0x1)),
+ (0x2F97E, (0xCDA, 0x1)),
+ (0x2F8E2, (0xC3E, 0x1)),
+ (0x01F18, (0x5D4, 0x2)),
+ (0x0F98D, (0x96E, 0x1)),
+ (0x03056, (0x877, 0x2)),
+ (0x2F93A, (0xC96, 0x1)),
+ (0x0FACE, (0xAA1, 0x1)),
+ (0x01E8C, (0x48A, 0x2)),
+ (0x00158, (0x0F8, 0x2)),
+ (0x0FA55, (0xA2A, 0x1)),
+ (0x01FC4, (0x79C, 0x3)),
+ (0x115BA, (0xB19, 0x2)),
+ (0x0017E, (0x140, 0x2)),
+ (0x0010E, (0x086, 0x2)),
+ (0x0F950, (0x931, 0x1)),
+ (0x2F886, (0xBE2, 0x1)),
+ (0x01EF7, (0x592, 0x2)),
+ (0x2F9DC, (0xD38, 0x1)),
+ (0x009DF, (0x2DC, 0x2)),
+ (0x01F8A, (0x6E9, 0x4)),
+ (0x0FAC1, (0xA94, 0x1)),
+ (0x2F934, (0xC90, 0x1)),
+ (0x01EEC, (0x576, 0x3)),
+ (0x01EEF, (0x57F, 0x3)),
+ (0x01F41, (0x63E, 0x2)),
+ (0x0F943, (0x924, 0x1)),
+ (0x01EC7, (0x513, 0x3)),
+ (0x01F66, (0x68D, 0x3)),
+ (0x01F10, (0x5C4, 0x2)),
+ (0x2F8CF, (0xC2B, 0x1)),
+ (0x01FA0, (0x73D, 0x3)),
+ (0x2F909, (0xC65, 0x1)),
+ (0x00FAC, (0x336, 0x2)),
+ (0x004E5, (0x28C, 0x2)),
+ (0x2F991, (0xCED, 0x1)),
+ (0x0F958, (0x939, 0x1)),
+ (0x01FCA, (0x7A8, 0x2)),
+ (0x003CA, (0x238, 0x2)),
+ (0x2F817, (0xB73, 0x1)),
+ (0x00F4D, (0x31A, 0x2)),
+ (0x00143, (0x0D8, 0x2)),
+ (0x0013C, (0x0D2, 0x2)),
+ (0x001F9, (0x1A0, 0x2)),
+ (0x2F9D2, (0xD2E, 0x1)),
+ (0x2F866, (0xBC2, 0x1)),
+ (0x2F9D0, (0xD2C, 0x1)),
+ (0x01E01, (0x354, 0x2)),
+ (0x2F90D, (0xC69, 0x1)),
+ (0x0015A, (0x0FC, 0x2)),
+ (0x00125, (0x0B0, 0x2)),
+ (0x0F984, (0x965, 0x1)),
+ (0x0F91C, (0x8FD, 0x1)),
+ (0x0FA8C, (0xA5F, 0x1)),
+ (0x01E14, (0x37C, 0x3)),
+ (0x0226D, (0x833, 0x2)),
+ (0x0045C, (0x260, 0x2)),
+ (0x00102, (0x06E, 0x2)),
+ (0x0FAAF, (0xA82, 0x1)),
+ (0x2F836, (0xB92, 0x1)),
+ (0x006C0, (0x2B8, 0x2)),
+ (0x0F9FF, (0x9E0, 0x1)),
+ (0x0F97F, (0x960, 0x1)),
+ (0x2F8CA, (0xC26, 0x1)),
+ (0x2F92A, (0xC86, 0x1)),
+ (0x0012B, (0x0B8, 0x2)),
+ (0x0309E, (0x8A1, 0x2)),
+ (0x0FA4E, (0xA23, 0x1)),
+ (0x0FAC8, (0xA9B, 0x1)),
+ (0x01FDF, (0x7CF, 0x2)),
+ (0x2F96E, (0xCCA, 0x1)),
+ (0x00F9D, (0x330, 0x2)),
+ (0x2F802, (0xB5E, 0x1)),
+ (0x01E05, (0x35C, 0x2)),
+ (0x2F80D, (0xB69, 0x1)),
+ (0x2F941, (0xC9D, 0x1)),
+ (0x0021B, (0x1E6, 0x2)),
+ (0x2F82C, (0xB88, 0x1)),
+ (0x0FB46, (0xAE1, 0x2)),
+ (0x0F971, (0x952, 0x1)),
+ (0x0F9C3, (0x9A4, 0x1)),
+ (0x2F83C, (0xB98, 0x1)),
+ (0x2F81A, (0xB76, 0x1)),
+ (0x0F9BB, (0x99C, 0x1)),
+ (0x0FAAC, (0xA7F, 0x1)),
+ (0x01F5F, (0x67A, 0x3)),
+ (0x0FA6A, (0xA3F, 0x1)),
+ (0x2F8B3, (0xC0F, 0x1)),
+ (0x0F9C9, (0x9AA, 0x1)),
+ (0x0F9EE, (0x9CF, 0x1)),
+ (0x01E6B, (0x444, 0x2)),
+ (0x01E2C, (0x3B2, 0x2)),
+ (0x2F851, (0xBAD, 0x1)),
+ (0x2F812, (0xB6E, 0x1)),
+ (0x01F15, (0x5D1, 0x3)),
+ (0x0FA4A, (0xA1F, 0x1)),
+ (0x030DA, (0x8CF, 0x2)),
+ (0x01EC6, (0x510, 0x3)),
+ (0x00208, (0x1C0, 0x2)),
+ (0x0F90B, (0x8EC, 0x1)),
+ (0x01E00, (0x352, 0x2)),
+ (0x0FB40, (0xAD9, 0x2)),
+ (0x2F82D, (0xB89, 0x1)),
+ (0x001D9, (0x166, 0x3)),
+ (0x0FAA5, (0xA78, 0x1)),
+ (0x000F6, (0x05C, 0x2)),
+ (0x022E1, (0x85B, 0x2)),
+ (0x2F961, (0xCBD, 0x1)),
+ (0x021CF, (0x81B, 0x2)),
+ (0x0F9D8, (0x9B9, 0x1)),
+ (0x0FA3D, (0xA12, 0x1)),
+ (0x0FB2F, (0xABD, 0x2)),
+ (0x0FA85, (0xA58, 0x1)),
+ (0x0095C, (0x2CC, 0x2)),
+ (0x01FF7, (0x7FD, 0x3)),
+ (0x01EAE, (0x4CE, 0x3)),
+ (0x2F98E, (0xCEA, 0x1)),
+ (0x01F83, (0x6CF, 0x4)),
+ (0x030C5, (0x8BB, 0x2)),
+ (0x00403, (0x24A, 0x2)),
+ (0x00120, (0x0A6, 0x2)),
+ (0x004F2, (0x2A2, 0x2)),
+ (0x0F98F, (0x970, 0x1)),
+ (0x2F9B0, (0xD0C, 0x1)),
+ (0x01FF3, (0x7F6, 0x2)),
+ (0x00D4A, (0x309, 0x2)),
+ (0x0013A, (0x0CE, 0x2)),
+ (0x01E74, (0x456, 0x2)),
+ (0x2F831, (0xB8D, 0x1)),
+ (0x2F80B, (0xB67, 0x1)),
+ (0x2F8A3, (0xBFF, 0x1)),
+ (0x0F955, (0x936, 0x1)),
+ (0x2F89F, (0xBFB, 0x1)),
+ (0x0011B, (0x09C, 0x2)),
+ (0x0F93C, (0x91D, 0x1)),
+ (0x009DD, (0x2DA, 0x2)),
+ (0x2F9AC, (0xD08, 0x1)),
+ (0x0F933, (0x914, 0x1)),
+ (0x2F8C3, (0xC1F, 0x1)),
+ (0x16121, (0xB1F, 0x2)),
+ (0x2F82A, (0xB86, 0x1)),
+ (0x2F93E, (0xC9A, 0x1)),
+ (0x0022D, (0x1FD, 0x3)),
+ (0x01ED2, (0x52C, 0x3)),
+ (0x2F99D, (0xCF9, 0x1)),
+ (0x01F36, (0x620, 0x3)),
+ (0x2F9D7, (0xD33, 0x1)),
+ (0x01EAD, (0x4CB, 0x3)),
+ (0x2F914, (0xC70, 0x1)),
+ (0x01FE4, (0x7DB, 0x2)),
+ (0x00B5C, (0x2F0, 0x2)),
+ (0x01F95, (0x713, 0x4)),
+ (0x00959, (0x2C6, 0x2)),
+ (0x0F9C0, (0x9A1, 0x1)),
+ (0x01ED7, (0x53B, 0x3)),
+ (0x2F865, (0xBC1, 0x1)),
+ (0x2F801, (0xB5D, 0x1)),
+ (0x01E3E, (0x3DA, 0x2)),
+ (0x2F848, (0xBA4, 0x1)),
+ (0x2F8EF, (0xC4B, 0x1)),
+ (0x2F875, (0xBD1, 0x1)),
+ (0x01E04, (0x35A, 0x2)),
+ (0x0FA1C, (0x9F8, 0x1)),
+ (0x2F807, (0xB63, 0x1)),
+ (0x01ECF, (0x524, 0x2)),
+ (0x01ED1, (0x529, 0x3)),
+ (0x0F927, (0x908, 0x1)),
+ (0x2F8D4, (0xC30, 0x1)),
+ (0x0FA39, (0xA0E, 0x1)),
+ (0x2F989, (0xCE5, 0x1)),
+ (0x2FA0C, (0xD68, 0x1)),
+ (0x2F86A, (0xBC6, 0x1)),
+ (0x01EDC, (0x54A, 0x3)),
+ (0x0F917, (0x8F8, 0x1)),
+ (0x2F8A0, (0xBFC, 0x1)),
+ (0x2F897, (0xBF3, 0x1)),
+ (0x01E38, (0x3CC, 0x3)),
+ (0x000E2, (0x038, 0x2)),
+ (0x01FC9, (0x7A6, 0x2)),
+ (0x01F34, (0x61A, 0x3)),
+ (0x02289, (0x84F, 0x2)),
+ (0x2F9FA, (0xD56, 0x1)),
+ (0x02244, (0x829, 0x2)),
+ (0x0FAA6, (0xA79, 0x1)),
+ (0x2F846, (0xBA2, 0x1)),
+ (0x02126, (0x80D, 0x1)),
+ (0x0010B, (0x080, 0x2)),
+ (0x00145, (0x0DC, 0x2)),
+ (0x00130, (0x0C2, 0x2)),
+ (0x2F9E5, (0xD41, 0x1)),
+ (0x2F912, (0xC6E, 0x1)),
+ (0x0F9AE, (0x98F, 0x1)),
+ (0x2F957, (0xCB3, 0x1)),
+ (0x0F904, (0x8E5, 0x1)),
+ (0x01F98, (0x71F, 0x3)),
+ (0x0F93A, (0x91B, 0x1)),
+ (0x2F8AF, (0xC0B, 0x1)),
+ (0x2F879, (0xBD5, 0x1)),
+ (0x01FF4, (0x7F8, 0x3)),
+ (0x01E23, (0x3A0, 0x2)),
+ (0x00212, (0x1D4, 0x2)),
+ (0x030DD, (0x8D3, 0x2)),
+ (0x2F87B, (0xBD7, 0x1)),
+ (0x2F8EB, (0xC47, 0x1)),
+ (0x01EC2, (0x504, 0x3)),
+ (0x0219A, (0x811, 0x2)),
+ (0x000E1, (0x036, 0x2)),
+ (0x000D1, (0x01E, 0x2)),
+ (0x0F972, (0x953, 0x1)),
];
-
pub(crate) const COMPATIBILITY_DECOMPOSED_CHARS: &[char] = &[
'\u{0020}',
'\u{0020}',
@@ -15600,6 +11270,42 @@
'\u{0058}',
'\u{0059}',
'\u{005A}',
+ '\u{0030}',
+ '\u{0031}',
+ '\u{0032}',
+ '\u{0033}',
+ '\u{0034}',
+ '\u{0035}',
+ '\u{0036}',
+ '\u{0037}',
+ '\u{0038}',
+ '\u{0039}',
+ '\u{0041}',
+ '\u{0042}',
+ '\u{0043}',
+ '\u{0044}',
+ '\u{0045}',
+ '\u{0046}',
+ '\u{0047}',
+ '\u{0048}',
+ '\u{0049}',
+ '\u{004A}',
+ '\u{004B}',
+ '\u{004C}',
+ '\u{004D}',
+ '\u{004E}',
+ '\u{004F}',
+ '\u{0050}',
+ '\u{0051}',
+ '\u{0052}',
+ '\u{0053}',
+ '\u{0054}',
+ '\u{0055}',
+ '\u{0056}',
+ '\u{0057}',
+ '\u{0058}',
+ '\u{0059}',
+ '\u{005A}',
'\u{0061}',
'\u{0062}',
'\u{0063}',
@@ -17019,7635 +12725,4155 @@
'\u{0038}',
'\u{0039}',
];
+
pub(crate) const COMPATIBILITY_DECOMPOSED_SALT: &[u16] = &[
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x16c,
- 0xe,
- 0x4ef,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x3,
- 0x97,
- 0x165,
- 0x0,
- 0x0,
- 0x185,
- 0x0,
- 0x1,
- 0x0,
- 0x3f4,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x91,
- 0x0,
- 0xdd,
- 0x1,
- 0x26c,
- 0x0,
- 0xb,
- 0x0,
- 0xe0,
- 0xbc,
- 0x3,
- 0x213,
- 0x1,
- 0x0,
- 0xc8,
- 0x3,
- 0x1c,
- 0xfc,
- 0x0,
- 0x0,
- 0x11,
- 0x132,
- 0x0,
- 0x0,
- 0x10b,
- 0x90,
- 0x474,
- 0xd6,
- 0x0,
- 0x0,
- 0x3,
- 0xd,
- 0x5,
- 0x0,
- 0x6,
- 0x19,
- 0x54,
- 0x132,
- 0x4c,
- 0x17,
- 0x6,
- 0x48,
- 0x3,
- 0x0,
- 0x0,
- 0x6,
- 0xc,
- 0x3,
- 0x0,
- 0xb1,
- 0x1,
- 0x8c,
- 0x0,
- 0x1b,
- 0xc0,
- 0x7,
- 0x2,
- 0x0,
- 0x12,
- 0x0,
- 0x0,
- 0x6,
- 0x1,
- 0x1be,
- 0xc8,
- 0x0,
- 0x7d,
- 0x0,
- 0xa,
- 0x0,
- 0x0,
- 0xb4,
- 0x2,
- 0x8,
- 0x5,
- 0x144,
- 0xdb,
- 0x1,
- 0x6,
- 0x0,
- 0x0,
- 0xd,
- 0x14,
- 0x0,
- 0x4f,
- 0x2,
- 0x0,
- 0x3,
- 0x32,
- 0x0,
- 0x5,
- 0xe,
- 0x7c,
- 0x2c,
- 0x6,
- 0x0,
- 0x0,
- 0x7,
- 0x0,
- 0x5f,
- 0x5,
- 0xf,
- 0x67,
- 0x0,
- 0x1,
- 0x34,
- 0x0,
- 0x0,
- 0x0,
- 0x90,
- 0x12,
- 0x0,
- 0x0,
- 0x1e,
- 0x4c,
- 0x89,
- 0xa8,
- 0x0,
- 0x4,
- 0x1f,
- 0x0,
- 0x0,
- 0x1,
- 0x99,
- 0x18,
- 0xd,
- 0x3,
- 0x7,
- 0x5,
- 0x19,
- 0x2,
- 0x0,
- 0x4,
- 0x1,
- 0x3,
- 0x90,
- 0xb,
- 0x29,
- 0x55,
- 0x0,
- 0x51,
- 0x0,
- 0x2,
- 0xd0,
- 0x7a,
- 0x66,
- 0x0,
- 0x95,
- 0x7,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x8d,
- 0xf,
- 0x21,
- 0x56,
- 0xa,
- 0x1b,
- 0x0,
- 0x0,
- 0x8,
- 0x7,
- 0x7c,
- 0x5,
- 0x0,
- 0x62,
- 0x2,
- 0x13,
- 0x6,
- 0x0,
- 0x4f,
- 0x0,
- 0x0,
- 0x32,
- 0x2f,
- 0x4,
- 0xd,
- 0xa0,
- 0x4,
- 0x8,
- 0x24,
- 0x1f,
- 0x0,
- 0x0,
- 0x82,
- 0x45,
- 0x0,
- 0x61,
- 0x0,
- 0x1d,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x7,
- 0x17,
- 0xb,
- 0x0,
- 0x0,
- 0x0,
- 0xb,
- 0x8,
- 0x8,
- 0x0,
- 0x0,
- 0x3d,
- 0x0,
- 0x96,
- 0x0,
- 0x0,
- 0x0,
- 0x8,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x3,
- 0x7,
- 0x2c,
- 0x0,
- 0x0,
- 0x14,
- 0x24,
- 0x2,
- 0x2,
- 0x0,
- 0x2,
- 0x0,
- 0x12,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x25,
- 0xa,
- 0x1,
- 0x66,
- 0xb,
- 0x8,
- 0x0,
- 0xc,
- 0x10,
- 0x2,
- 0x3,
- 0x8,
- 0x4,
- 0x6,
- 0x1,
- 0x4,
- 0xe3,
- 0x23,
- 0x20,
- 0x7,
- 0x0,
- 0xf,
- 0x1e,
- 0x23,
- 0x3d,
- 0x4,
- 0x0,
- 0x1,
- 0x0,
- 0x3,
- 0x25,
- 0x0,
- 0x1,
- 0x31,
- 0x9d,
- 0x0,
- 0x0,
- 0x4,
- 0x1,
- 0x0,
- 0x0,
- 0x8,
- 0x0,
- 0x0,
- 0x26,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x2,
- 0x0,
- 0x3,
- 0x0,
- 0x1b,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0xa,
- 0x3,
- 0x1,
- 0x2,
- 0xc,
- 0xc,
- 0x1,
- 0x1,
- 0x0,
- 0x11,
- 0x4,
- 0x3d,
- 0x2,
- 0x1b,
- 0x2,
- 0x0,
- 0xc,
- 0x6,
- 0x6,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x9,
- 0x2c,
- 0x0,
- 0x9,
- 0x37,
- 0x2d,
- 0x0,
- 0x12,
- 0x23,
- 0x0,
- 0x0,
- 0x1c,
- 0x0,
- 0x26,
- 0x10,
- 0x15,
- 0x2,
- 0x0,
- 0xb,
- 0x0,
- 0x4,
- 0x14,
- 0x5,
- 0x13,
- 0x7,
- 0x1c,
- 0x3,
- 0x36,
- 0x0,
- 0x8,
- 0x1,
- 0x19,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x4,
- 0x1,
- 0x8,
- 0x2,
- 0xa,
- 0x6,
- 0x13,
- 0x0,
- 0x0,
- 0x0,
- 0x2f,
- 0x1,
- 0x0,
- 0x16,
- 0x5,
- 0xc,
- 0xc,
- 0x1,
- 0x10,
- 0x3,
- 0xe,
- 0x0,
- 0x1,
- 0xd,
- 0x28,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x4,
- 0x10,
- 0x21,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0x23,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0xd,
- 0x1,
- 0x0,
- 0x0,
- 0x6,
- 0x6b,
- 0x0,
- 0x14,
- 0x0,
- 0x0,
- 0x6,
- 0x12,
- 0x0,
- 0x2,
- 0x0,
- 0x2a,
- 0x1,
- 0xb,
- 0x1,
- 0x6,
- 0x9,
- 0x8,
- 0x1,
- 0x0,
- 0x2b,
- 0x0,
- 0x8,
- 0x7,
- 0x0,
- 0xf,
- 0x16,
- 0x0,
- 0x0,
- 0x44,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0xc,
- 0x19,
- 0x25,
- 0x2,
- 0x1f,
- 0xf,
- 0xc,
- 0x1,
- 0x1f,
- 0xa,
- 0x0,
- 0x38,
- 0xe,
- 0xf,
- 0xc,
- 0x25,
- 0x0,
- 0x6,
- 0xe,
- 0x0,
- 0x8,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x9,
- 0x1,
- 0x16,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x15,
- 0x62,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x3d,
- 0x0,
- 0x3,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x29,
- 0x4,
- 0x2c,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x22,
- 0x0,
- 0x14,
- 0x28,
- 0x0,
- 0x7,
- 0x4,
- 0x3,
- 0x6,
- 0x0,
- 0x1,
- 0xd,
- 0x2a,
- 0x0,
- 0x0,
- 0x44,
- 0x0,
- 0x8,
- 0x0,
- 0x2,
- 0x1,
- 0xb,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x3,
- 0x1c,
- 0x5,
- 0x0,
- 0x6,
- 0x2,
- 0x0,
- 0x11,
- 0x6,
- 0x7,
- 0x0,
- 0x2,
- 0x28,
- 0x7,
- 0x1d,
- 0xb,
- 0x5,
- 0x2e,
- 0x11,
- 0x0,
- 0x1,
- 0xc,
- 0x0,
- 0x7,
- 0x2f,
- 0x0,
- 0x0,
- 0x5,
- 0xa,
- 0x0,
- 0x8,
- 0x6,
- 0x0,
- 0x0,
- 0x7,
- 0x1,
- 0x8,
- 0x20,
- 0xc,
- 0x0,
- 0x1a,
- 0x5,
- 0x0,
- 0x26,
- 0x26,
- 0x2,
- 0xb,
- 0x8,
- 0x0,
- 0x4,
- 0x5,
- 0x2,
- 0x0,
- 0x5,
- 0x12,
- 0x0,
- 0x5,
- 0x0,
- 0x1,
- 0x6,
- 0x9,
- 0x1,
- 0x3,
- 0x15,
- 0x3,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x3,
- 0x0,
- 0x16,
- 0x0,
- 0x10,
- 0x3,
- 0x0,
- 0x1b,
- 0x2,
- 0x0,
- 0x9,
- 0x0,
- 0x9,
- 0x0,
- 0x9,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0xc,
- 0x26,
- 0x1,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0xc,
- 0x1e,
- 0x0,
- 0x1,
- 0x36,
- 0x6,
- 0x3,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0x0,
- 0x8,
- 0xc,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x4,
- 0x2,
- 0x7,
- 0x1,
- 0x2,
- 0x7,
- 0xd,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x5,
- 0x0,
- 0x8,
- 0x5,
- 0x0,
- 0x0,
- 0x3,
- 0x6,
- 0x0,
- 0x0,
- 0x8,
- 0x1,
- 0x5,
- 0x1,
- 0x3,
- 0x3,
- 0x10,
- 0xb,
- 0x7,
- 0x0,
- 0xf,
- 0x11,
- 0x0,
- 0x18,
- 0x0,
- 0x0,
- 0xf,
- 0x2,
- 0x7,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0xc,
- 0x18,
- 0x0,
- 0x17,
- 0x0,
- 0x1,
- 0x0,
- 0x26,
- 0x3,
- 0x0,
- 0x1b,
- 0x0,
- 0x8,
- 0x3,
- 0x3,
- 0x0,
- 0x0,
- 0x2,
- 0x6,
- 0x0,
- 0xb,
- 0x1b,
- 0x9,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x5,
- 0x0,
- 0x6,
- 0x0,
- 0x4,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x9,
- 0x9,
- 0x0,
- 0x2,
- 0x7,
- 0xe,
- 0x23,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0xf,
- 0x0,
- 0x8,
- 0x22,
- 0xe,
- 0x10,
- 0x7,
- 0x3,
- 0xc,
- 0x19,
- 0x1,
- 0xa,
- 0x2,
- 0x0,
- 0x3,
- 0x18,
- 0x1,
- 0x16,
- 0xa,
- 0x0,
- 0x2,
- 0x8,
- 0x0,
- 0x23,
- 0x0,
- 0x0,
- 0x6,
- 0x2,
- 0x0,
- 0x4,
- 0xd,
- 0x1b,
- 0x0,
- 0x4,
- 0x38,
- 0x0,
- 0x0,
- 0x11,
- 0xe,
- 0x0,
- 0x0,
- 0x0,
- 0x9,
- 0x0,
- 0x21,
- 0x13,
- 0x2,
- 0x18,
- 0x4,
- 0x1,
- 0x10,
- 0x0,
- 0x2,
- 0x0,
- 0x6,
- 0x14,
- 0xa,
- 0x0,
- 0x0,
- 0x4,
- 0xe,
- 0x0,
- 0x0,
- 0x5,
- 0x4,
- 0x0,
- 0x20,
- 0x1d,
- 0x1,
- 0x0,
- 0x9,
- 0x0,
- 0x1,
- 0x1,
- 0x4,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x24,
- 0x1,
- 0x0,
- 0x9,
- 0x8,
- 0x0,
- 0x1,
- 0xa,
- 0x1,
- 0x0,
- 0x4,
- 0x0,
- 0x13,
- 0x5,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x4,
- 0x0,
- 0x0,
- 0x5,
- 0x1,
- 0x9,
- 0x2,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0xa,
- 0x0,
- 0x0,
- 0x10,
- 0x1,
- 0x4,
- 0x0,
- 0x0,
- 0x1,
- 0x4,
- 0x0,
- 0x1,
- 0x2,
- 0x4,
- 0x3,
- 0x0,
- 0x4,
- 0x14,
- 0x7,
- 0xa,
- 0x2,
- 0x6,
- 0x0,
- 0x2,
- 0x1,
- 0x8,
- 0x7,
- 0x0,
- 0x0,
- 0x0,
- 0x14,
- 0x1,
- 0x10,
- 0x0,
- 0x0,
- 0x5,
- 0x1,
- 0x6,
- 0x5,
- 0x3,
- 0x0,
- 0x9,
- 0x2,
- 0x4,
- 0x2,
- 0x0,
- 0x0,
- 0xc,
- 0x19,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0xf,
- 0x8,
- 0xd,
- 0x0,
- 0x3,
- 0x1,
- 0x0,
- 0x9,
- 0x14,
- 0x17,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x1,
- 0x0,
- 0x5,
- 0x15,
- 0x1,
- 0x19,
- 0x1,
- 0x1,
- 0x1,
- 0x1,
- 0x3,
- 0x0,
- 0x6,
- 0x3,
- 0x0,
- 0x11,
- 0x5,
- 0x0,
- 0x4,
- 0xc,
- 0x3,
- 0x0,
- 0x7,
- 0x0,
- 0x0,
- 0x3,
- 0x4,
- 0x3,
- 0xb,
- 0x0,
- 0x0,
- 0x6,
- 0x8,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0xd,
- 0x3,
- 0x0,
- 0x7,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x9,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x9,
- 0xa,
- 0x8,
- 0x1,
- 0x7,
- 0x3,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x4,
- 0x1,
- 0xb,
- 0x0,
- 0x13,
- 0x6,
- 0x7,
- 0x0,
- 0x0,
- 0x8,
- 0x7,
- 0x7,
- 0x0,
- 0x3,
- 0x0,
- 0x2,
- 0x3,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x1b,
- 0x3,
- 0x2,
- 0x9,
- 0x2,
- 0x1,
- 0x2,
- 0x0,
- 0x4,
- 0x1,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0x1,
- 0x5,
- 0x0,
- 0xf,
- 0x1,
- 0x6,
- 0x8,
- 0x4,
- 0x0,
- 0x0,
- 0x3,
- 0xb,
- 0x2,
- 0x5,
- 0x1,
- 0x2,
- 0x13,
- 0x13,
- 0x0,
- 0x9,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x2,
- 0x21,
- 0x0,
- 0x6,
- 0x3,
- 0x1,
- 0x1,
- 0x5,
- 0x3,
- 0x0,
- 0x10,
- 0x22,
- 0xb,
- 0x0,
- 0x8,
- 0x0,
- 0x0,
- 0x3,
- 0x4,
- 0x1,
- 0x1a,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x12,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x21,
- 0x0,
- 0x2,
- 0xd,
- 0x1,
- 0x3,
- 0x5,
- 0x1,
- 0xc,
- 0x10,
- 0x0,
- 0x24,
- 0x0,
- 0x0,
- 0x6,
- 0x6,
- 0x1b,
- 0x1,
- 0xd,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x7,
- 0x2,
- 0x0,
- 0x5,
- 0x24,
- 0x6,
- 0x1,
- 0xe,
- 0x0,
- 0xb,
- 0xe,
- 0x7,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x2,
- 0x18,
- 0x3,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0x4,
- 0x4,
- 0x0,
- 0x1,
- 0x0,
- 0x14,
- 0x6,
- 0xb,
- 0x0,
- 0x2,
- 0x1,
- 0x2,
- 0x6,
- 0x6,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x2,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x8,
- 0x1,
- 0xc,
- 0x0,
- 0x7,
- 0x2,
- 0x3,
- 0x1,
- 0x0,
- 0x6,
- 0x1,
- 0x7,
- 0x11,
- 0x3,
- 0x0,
- 0x1,
- 0xa,
- 0x2,
- 0x2,
- 0x8,
- 0x6,
- 0x8,
- 0x0,
- 0x0,
- 0x4,
- 0x8,
- 0x1,
- 0x7,
- 0x2,
- 0x2,
- 0x6,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0x7,
- 0x1,
- 0xe,
- 0x2,
- 0x2,
- 0x32,
- 0x7,
- 0xb,
- 0x4,
- 0x4,
- 0x0,
- 0x6,
- 0x0,
- 0x8,
- 0x0,
- 0x0,
- 0x0,
- 0x9,
- 0x2,
- 0x1b,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0xc,
- 0x2,
- 0x1,
- 0x2,
- 0xf,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0xc,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0xb,
- 0x0,
- 0x2,
- 0x1,
- 0x3,
- 0x0,
- 0x1,
- 0x6,
- 0xa,
- 0x1,
- 0x0,
- 0x8,
- 0x0,
- 0x4,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0xe,
- 0x2,
- 0x1,
- 0x1,
- 0x1,
- 0x7,
- 0x1,
- 0x3,
- 0x1,
- 0x2,
- 0x1,
- 0x3,
- 0x2,
- 0x0,
- 0x11,
- 0x3,
- 0x2,
- 0x3,
- 0x0,
- 0x0,
- 0x3,
- 0x4,
- 0x0,
- 0x0,
- 0x1,
- 0x20,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x7,
- 0x2,
- 0x0,
- 0x12,
- 0x0,
- 0xa,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x4,
- 0xf,
- 0x0,
- 0x7,
- 0x4,
- 0x2,
- 0x12,
- 0x0,
- 0x1,
- 0x4,
- 0x2,
- 0x3,
- 0x0,
- 0x1,
- 0x17,
- 0x1,
- 0x1,
- 0x5,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0xb,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x9,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x4,
- 0xa,
- 0x0,
- 0x0,
- 0x6,
- 0x7,
- 0x2,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x6,
- 0xb,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0xc,
- 0x8,
- 0x1,
- 0xd,
- 0xb,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x5,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x3,
- 0x3,
- 0x0,
- 0x0,
- 0x8,
- 0x0,
- 0x1,
- 0x9,
- 0x11,
- 0x1,
- 0xc,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x17,
- 0x1,
- 0x0,
- 0x5,
- 0xb,
- 0x1,
- 0x4,
- 0x1,
- 0x6,
- 0x1d,
- 0x0,
- 0x1,
- 0x4,
- 0x2,
- 0x9,
- 0x2,
- 0xf,
- 0x14,
- 0x2,
- 0x1,
- 0x7,
- 0x1,
- 0x1,
- 0x7,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x13,
- 0x2,
- 0x1,
- 0x1,
- 0x3,
- 0x0,
- 0x2,
- 0x2,
- 0x0,
- 0x3,
- 0x1,
- 0x0,
- 0x5,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0xa,
- 0x6,
- 0x1,
- 0x6,
- 0x7,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x7,
- 0x4,
- 0x0,
- 0x0,
- 0xc,
- 0x2,
- 0x0,
- 0xa,
- 0x1,
- 0x0,
- 0x0,
- 0xa,
- 0x0,
- 0x6,
- 0x3,
- 0x1,
- 0x0,
- 0xd,
- 0x3,
- 0x5,
- 0x0,
- 0x2,
- 0xa,
- 0x0,
- 0xb,
- 0x1,
- 0x6,
- 0x22,
- 0x0,
- 0x5,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x12,
- 0x4,
- 0x2,
- 0x0,
- 0x0,
- 0xc,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x4,
- 0x2,
- 0x1,
- 0x8,
- 0x4,
- 0x6,
- 0x1,
- 0x0,
- 0x3,
- 0xa,
- 0x0,
- 0x5,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0xe,
- 0x1,
- 0x1,
- 0x0,
- 0x6,
- 0x0,
- 0x8,
- 0x0,
- 0x0,
- 0xa,
- 0x1,
- 0x0,
- 0x4,
- 0x0,
- 0x4,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x17,
- 0x4,
- 0x0,
- 0xb,
- 0x3,
- 0x5,
- 0x4,
- 0x0,
- 0x3,
- 0xf,
- 0x6,
- 0x1,
- 0x1,
- 0x7,
- 0x4,
- 0x3,
- 0x1,
- 0x3,
- 0x4,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x5,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x3,
- 0x1,
- 0x0,
- 0x5,
- 0x0,
- 0xd,
- 0x6,
- 0x1,
- 0x0,
- 0x0,
- 0x7,
- 0x0,
- 0x0,
- 0xa,
- 0x3,
- 0x2,
- 0xa,
- 0x1,
- 0x7,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x5,
- 0x3,
- 0x0,
- 0x5,
- 0x2,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x1,
- 0x4,
- 0x9,
- 0x5,
- 0x1,
- 0x1,
- 0x6,
- 0x0,
- 0x9,
- 0x1,
- 0xa,
- 0x2,
- 0x2,
- 0x0,
- 0x0,
- 0x2,
- 0x2,
- 0x7,
- 0x9,
- 0x0,
- 0x10,
- 0x1c,
- 0x4,
- 0x0,
- 0x0,
- 0x3,
- 0x3,
- 0xd,
- 0x1,
- 0x3,
- 0x0,
- 0x0,
- 0xc,
- 0x7,
- 0x1,
- 0x3,
- 0x7,
- 0x8,
- 0x3,
- 0x6,
- 0x0,
- 0x3,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x4,
- 0xa,
- 0x5,
- 0x0,
- 0x1,
- 0x13,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0xe,
- 0x1,
- 0xc,
- 0x1,
- 0x1,
- 0x9,
- 0x0,
- 0x0,
- 0x1,
- 0xc,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x4,
- 0x3,
- 0x1,
- 0xc,
- 0xc,
- 0x3,
- 0x0,
- 0xc,
- 0xb,
- 0x0,
- 0x1,
- 0x1,
- 0xa,
- 0x1,
- 0xb,
- 0x0,
- 0x0,
- 0x1c,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x8,
- 0x3,
- 0x0,
- 0x5,
- 0x0,
- 0x3,
- 0x3,
- 0x0,
- 0x4,
- 0x0,
- 0x2,
- 0x6,
- 0xf,
- 0x0,
- 0x1,
- 0x4,
- 0x0,
- 0x0,
- 0x11,
- 0xb,
- 0x4,
- 0x5,
- 0x4,
- 0x0,
- 0xd,
- 0x4,
- 0x4,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0xa,
- 0x1,
- 0x13,
- 0x6,
- 0x0,
- 0x7,
- 0x7,
- 0x1,
- 0x1,
- 0x4,
- 0x4,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x7,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x2,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x4,
- 0x5,
- 0x10,
- 0x0,
- 0x7,
- 0x0,
- 0xa,
- 0x11,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0xb,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x2,
- 0x0,
- 0xa,
- 0x0,
- 0x3,
- 0x0,
- 0x7,
- 0x6,
- 0x1,
- 0x0,
- 0x4,
- 0x2,
- 0x2,
- 0x0,
- 0x1,
- 0x2,
- 0x3,
- 0x4,
- 0x0,
- 0x4,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x10,
- 0x5,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0xa,
- 0x4,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x6,
- 0xb,
- 0xb,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x9,
- 0x0,
- 0x2,
- 0x4,
- 0x0,
- 0x5,
- 0x2,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x4,
- 0x6,
- 0x1,
- 0x4,
- 0x1,
- 0x0,
- 0x1,
- 0x7,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0x2,
- 0x2,
- 0x0,
- 0x6,
- 0x5,
- 0x8,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x4,
- 0x7,
- 0x0,
- 0x1,
- 0x7,
- 0x0,
- 0x2,
- 0x2,
- 0xb,
- 0x1,
- 0x2,
- 0x6,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x4,
- 0x0,
- 0x0,
- 0x3,
- 0x1,
- 0x7,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0xb,
- 0x0,
- 0x0,
- 0x0,
- 0x6,
- 0x0,
- 0x1,
- 0x0,
- 0x4,
- 0xc,
- 0x2,
- 0x0,
- 0x1,
- 0x1,
- 0x2,
- 0x4,
- 0xe,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x4,
- 0x3,
- 0x18,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x5,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x3,
- 0x4,
- 0x0,
- 0x0,
- 0x5,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x14,
- 0x4,
- 0xb,
- 0x12,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0xb,
- 0x3,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x10,
- 0xd,
- 0x1,
- 0x1,
- 0x7,
- 0x6,
- 0x1,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x2,
- 0x1,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x8,
- 0x4,
- 0x2,
- 0x6,
- 0x9,
- 0x5,
- 0x0,
- 0x16,
- 0x1,
- 0x4,
- 0x0,
- 0x3,
- 0x3,
- 0x4,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0xd,
- 0x2,
- 0x0,
- 0xb,
- 0x6,
- 0xa,
- 0x3,
- 0x0,
- 0x5,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x5,
- 0x1,
- 0x0,
- 0xa,
- 0x0,
- 0x2,
- 0x0,
- 0x2,
- 0x2,
- 0x5,
- 0x1,
- 0x2,
- 0x0,
- 0x2,
- 0x2,
- 0x5,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x3,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x19,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x5,
- 0x4,
- 0x1,
- 0x4,
- 0x0,
- 0x1,
- 0x3,
- 0x4,
- 0x6,
- 0x1,
- 0x1,
- 0x4,
- 0x3,
- 0x4,
- 0x0,
- 0x4,
- 0x5,
- 0x9,
- 0x0,
- 0x1,
- 0x9,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0xc,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x2,
- 0x3,
- 0x2,
- 0x1,
- 0x0,
- 0x4,
- 0x0,
- 0x4,
- 0x7,
- 0x3,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x5,
- 0x6,
- 0x9,
- 0x0,
- 0x2,
- 0x1b,
- 0x2,
- 0x0,
- 0x9,
- 0x0,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x6,
- 0x2,
- 0x1,
- 0x6,
- 0x1,
- 0xb,
- 0x3,
- 0x6,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x2,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x3,
- 0x3,
- 0x5,
- 0xb,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0xb,
- 0x3,
- 0x2,
- 0x13,
- 0x1,
- 0x1,
- 0x8,
- 0x3,
- 0x2,
- 0x5,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x5,
- 0x0,
- 0x1,
- 0x3,
- 0x4,
- 0x5,
- 0x0,
- 0x2,
- 0x0,
- 0xe,
- 0x1,
- 0x0,
- 0x0,
- 0x5,
- 0x3,
- 0x5,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x8,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x9,
- 0x0,
- 0x0,
- 0x0,
- 0x6,
- 0x0,
- 0x3,
- 0x3,
- 0x9,
- 0x7,
- 0x0,
- 0x8,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0x3,
- 0x5,
- 0x4,
- 0x1,
- 0x2,
- 0x2,
- 0x0,
- 0x4,
- 0x3,
- 0x0,
- 0x7,
- 0x5,
- 0x3,
- 0x1,
- 0x0,
- 0x4,
- 0x1,
- 0x0,
- 0x3,
- 0x0,
- 0x8,
- 0x2,
- 0x4,
- 0x4,
- 0x0,
- 0x9,
- 0x1,
- 0x4,
- 0x0,
- 0x6,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0xa,
- 0x1,
- 0x0,
- 0x1,
- 0x6,
- 0x0,
- 0x1,
- 0x6,
- 0x3,
- 0x2,
- 0x2,
- 0x0,
- 0x1,
- 0x1,
- 0x3,
- 0x5,
- 0x0,
- 0x0,
- 0x2,
- 0x4,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x6,
- 0x0,
- 0x5,
- 0x4,
- 0x4,
- 0x1,
- 0x1,
- 0x4,
- 0x1,
- 0x2,
- 0x0,
- 0x2,
- 0x2,
- 0x5,
- 0xd,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x4,
- 0x0,
- 0x0,
- 0x7,
- 0x0,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x4,
- 0x0,
- 0x9,
- 0x2,
- 0x4,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x3,
- 0x0,
- 0xa,
- 0x0,
- 0x3,
- 0x1,
- 0x5,
- 0x1,
- 0x0,
- 0x0,
- 0x5,
- 0xa,
- 0x1,
- 0x2,
- 0x0,
- 0x2,
- 0x4,
- 0x9,
- 0x1,
- 0x4,
- 0x5,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x9,
- 0x2,
- 0x4,
- 0x8,
- 0x2,
- 0x0,
- 0x0,
- 0x3,
- 0x8,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x3,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x4,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x9,
- 0x1,
- 0x1,
- 0x5,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x4,
- 0x2,
- 0x4,
- 0x2,
- 0x2,
- 0x0,
- 0x1,
- 0xa,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x3,
- 0x2,
- 0x5,
- 0x1,
- 0x2,
- 0x1,
- 0x2,
- 0x0,
- 0x4,
- 0x2,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x2,
- 0x3,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x5,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x7,
- 0x1,
- 0x1,
- 0x3,
- 0x0,
- 0x3,
- 0x1,
- 0x1,
- 0x0,
- 0x9,
- 0x2,
- 0x0,
- 0x1,
- 0x1,
- 0x7,
- 0x6,
- 0x2,
- 0x0,
- 0x6,
- 0x0,
- 0x4,
- 0x0,
- 0x2,
- 0x7,
- 0x4,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x4,
- 0x3,
- 0x0,
- 0xa,
- 0x0,
- 0x0,
- 0x2,
- 0x2,
- 0x1,
- 0x1,
- 0x3,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x6,
- 0x1,
- 0x3,
- 0xb,
- 0xb,
- 0x0,
- 0x4,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x5,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x4,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x5,
- 0x3,
- 0x2,
- 0x3,
- 0x8,
- 0x1,
- 0x6,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x4,
- 0x5,
- 0x2,
- 0x0,
- 0x6,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x2,
- 0x2,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x5,
- 0x2,
- 0x2,
- 0x6,
- 0x1,
- 0x5,
- 0x3,
- 0x2,
- 0x5,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x4,
- 0x2,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x15,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x7,
- 0x3,
- 0x3,
- 0x3,
- 0x1,
- 0x1,
- 0x2,
- 0x6,
- 0x1,
- 0x7,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x3,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x3,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x5,
- 0x0,
- 0x1,
- 0x5,
- 0x4,
- 0x8,
- 0x2,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x4,
- 0x3,
- 0x1,
- 0x4,
- 0x0,
- 0x4,
- 0x0,
- 0x2,
- 0x2,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x5,
- 0x0,
- 0x2,
- 0x4,
- 0x2,
- 0x1,
- 0x6,
- 0x0,
- 0x1,
- 0xf,
- 0x0,
- 0x2,
- 0x5,
- 0x0,
- 0x2,
- 0x0,
- 0x3,
- 0x4,
- 0x2,
- 0x4,
- 0x3,
- 0x5,
- 0x1,
- 0x1,
- 0x1,
- 0x7,
- 0x0,
- 0x7,
- 0x2,
- 0x0,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x2,
- 0x7,
- 0x1,
- 0x7,
- 0x3,
- 0x1,
- 0x0,
- 0x2,
- 0x2,
- 0x0,
- 0x5,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x1,
- 0x1,
- 0x2,
- 0x2,
- 0x2,
- 0x0,
- 0x1,
- 0x4,
- 0x2,
- 0x1,
- 0x2,
- 0x3,
- 0x0,
- 0x2,
- 0x2,
- 0x4,
- 0x2,
- 0x1,
- 0x2,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x7,
- 0x1,
- 0x0,
- 0x1,
- 0x4,
- 0x3,
- 0x3,
- 0x1,
- 0x5,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x6,
- 0x1,
- 0x0,
- 0x2,
- 0xd,
- 0x1,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0xf,
- 0x2,
- 0x0,
- 0xa,
- 0x2,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x4,
- 0x2,
- 0x0,
- 0x3,
- 0x0,
- 0x2,
- 0x0,
- 0x7,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0xb,
- 0x0,
- 0x0,
- 0xa,
- 0x5,
- 0x9,
- 0x1,
- 0x0,
- 0x3,
- 0x1,
- 0x0,
- 0xc,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x3,
- 0x2,
- 0x0,
- 0x7,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x6,
- 0x2,
- 0x0,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0x4,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x7,
- 0x2,
- 0x4,
- 0x1,
- 0x5,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x2,
- 0x3,
- 0x8,
- 0x1,
- 0x6,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x3,
- 0x5,
- 0x0,
- 0x2,
- 0x1,
- 0x1,
- 0x3,
- 0x0,
- 0x3,
- 0x7,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x1,
- 0x6,
- 0x5,
- 0x0,
- 0x5,
- 0x4,
- 0x0,
- 0x0,
- 0x3,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x2,
- 0x2,
- 0x0,
- 0x2,
- 0x0,
- 0x4,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x4,
- 0x1,
- 0x1,
- 0x4,
- 0x2,
- 0x1,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x3,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0xb,
- 0x2,
- 0x0,
- 0x0,
- 0x3,
- 0x3,
- 0x5,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x8,
- 0x1,
- 0x4,
- 0x3,
- 0x0,
- 0x7,
- 0x1,
- 0x3,
- 0x1,
- 0x0,
- 0x2,
- 0x3,
- 0x3,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x4,
- 0x2,
- 0x5,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x1,
- 0x2,
- 0x1,
- 0x3,
- 0x1,
- 0x0,
- 0x5,
- 0x2,
- 0x4,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x7,
- 0x0,
- 0x6,
- 0x4,
- 0x0,
- 0x1,
- 0x2,
- 0x2,
- 0x3,
- 0x5,
- 0x0,
- 0x8,
- 0x3,
- 0x3,
- 0x2,
- 0x1,
- 0x7,
- 0x2,
- 0x1,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x8,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x6,
- 0x7,
- 0x1,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x4,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x5,
- 0x2,
- 0x3,
- 0x1,
- 0x2,
- 0x0,
- 0x6,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x2,
- 0x3,
- 0x0,
- 0x2,
- 0x7,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x4,
- 0x2,
- 0x0,
- 0x11,
- 0x5,
- 0x4,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x7,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x5,
- 0x1,
- 0x2,
- 0x2,
- 0xe,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x3,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0xa,
- 0x1,
- 0x4,
- 0x0,
- 0x5,
- 0x1,
- 0x1,
- 0x1,
- 0x2,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x8,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x1,
- 0xf,
- 0x1,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x5,
- 0x7,
- 0x2,
- 0x2,
- 0x6,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x4,
- 0x0,
- 0x2,
- 0x1,
- 0x3,
- 0x2,
- 0x2,
- 0x1,
- 0x0,
- 0x3,
- 0x2,
- 0x4,
- 0x3,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x6,
- 0x5,
- 0x1,
- 0x9,
- 0x0,
- 0x3,
- 0x1,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x2,
- 0x0,
- 0x3,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x8,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x2,
- 0x4,
- 0x1,
- 0x2,
- 0x1,
- 0x5,
- 0x0,
- 0x1,
- 0x2,
- 0x2,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x2,
- 0x3,
- 0x1,
- 0x1,
- 0x3,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x5,
- 0x0,
- 0x2,
- 0x6,
- 0x1,
- 0x0,
- 0x4,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x2,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0xb,
- 0x4,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x5,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x5,
- 0x1,
- 0x0,
- 0x2,
- 0x4,
- 0x1,
- 0x1,
- 0x2,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x6,
- 0x0,
- 0x2,
- 0x3,
- 0x0,
- 0x1,
- 0x2,
- 0x3,
- 0x0,
- 0x0,
- 0x3,
- 0x2,
- 0x4,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x3,
- 0x0,
- 0xd,
- 0x2,
- 0x0,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x4,
- 0xd,
- 0x4,
- 0x1,
- 0x6,
- 0x2,
- 0x3,
- 0x0,
- 0x3,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x3,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x3,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x3,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x3,
- 0x4,
- 0x1,
- 0x2,
- 0x3,
- 0x0,
- 0x2,
- 0x3,
- 0x2,
- 0x1,
- 0x1,
- 0x7,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x2,
- 0x5,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x5,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x5,
- 0x5,
- 0x0,
- 0x1,
- 0x3,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x3,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x1,
- 0x6,
- 0x0,
- 0x1,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x1,
- 0x4,
- 0x1,
- 0x2,
- 0x1,
- 0x8,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x2,
- 0x1,
- 0x7,
- 0x1,
- 0x0,
- 0x6,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x6,
- 0x3,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x5,
- 0x1,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x1,
- 0x0,
- 0x3,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x8,
- 0x7,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x2,
- 0x3,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x7,
- 0x4,
- 0x0,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x3,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x4,
- 0x2,
- 0x2,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x6,
- 0x8,
- 0x5,
- 0x1,
- 0x0,
- 0x8,
- 0x0,
- 0x6,
- 0x1,
- 0x0,
- 0xc,
- 0x3,
- 0x5,
- 0x0,
- 0x2,
- 0x1,
- 0x5,
- 0x1,
- 0x1,
- 0x4,
- 0x3,
- 0x1,
- 0x1,
- 0x5,
- 0x6,
- 0x1,
- 0x2,
- 0x7,
- 0x3,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x2,
- 0x2,
- 0x0,
- 0x2,
- 0x3,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x5,
- 0x5,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x4,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x8,
- 0x1,
- 0x6,
- 0x0,
- 0x0,
- 0x3,
- 0x1,
- 0x1,
- 0x1,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x5,
- 0x0,
- 0x1,
- 0x0,
- 0x5,
- 0x1,
- 0x4,
- 0x1,
- 0x8,
- 0x0,
- 0x1,
- 0x4,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x3,
- 0x1,
- 0x0,
- 0x1,
- 0x2,
- 0x2,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x5,
- 0x3,
- 0x1,
- 0x2,
- 0x3,
- 0x1,
- 0xc,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x5,
- 0x3,
- 0x2,
- 0x1,
- 0x0,
- 0x3,
- 0x2,
- 0x0,
+ 0x000, 0x000, 0x00A, 0x000, 0x000, 0x000, 0x001, 0x1B9F, 0x004, 0xF3F, 0x005, 0x185, 0x000,
+ 0x000, 0x001, 0x000, 0x001, 0x002, 0x19D, 0x000, 0x099, 0x000, 0x03E, 0x000, 0x00A, 0x3FC,
+ 0x0A1, 0x000, 0x000, 0x000, 0x000, 0x001, 0x1EA, 0x000, 0x59B, 0x001, 0x3D6, 0x000, 0x078,
+ 0x000, 0x2F7, 0x017, 0x00E, 0x0BA, 0x0B8, 0x000, 0x0A3, 0x089, 0x007, 0x014, 0x000, 0x000,
+ 0x000, 0x003, 0x000, 0x000, 0x000, 0x243, 0x047, 0x005, 0x000, 0x000, 0x13F, 0x009, 0x001,
+ 0x000, 0x000, 0x004, 0x015, 0x001, 0x0D6, 0x01C, 0x000, 0x002, 0x0FF, 0x1B5, 0x000, 0x000,
+ 0x002, 0x001, 0x006, 0x000, 0x0EC, 0x004, 0x038, 0x0F3, 0x000, 0x00A, 0x01A, 0x001, 0x000,
+ 0x0A1, 0x000, 0x000, 0x013, 0x0CC, 0x05C, 0x007, 0x000, 0x052, 0x000, 0x00D, 0x000, 0x000,
+ 0x043, 0x001, 0x004, 0x003, 0x05D, 0x11C, 0x004, 0x001, 0x000, 0x000, 0x053, 0x008, 0x000,
+ 0x000, 0x002, 0x000, 0x01E, 0x04D, 0x000, 0x022, 0x001, 0x01F, 0x000, 0x001, 0x000, 0x000,
+ 0x000, 0x01E, 0x022, 0x013, 0x007, 0x004, 0x000, 0x060, 0x005, 0x000, 0x000, 0x000, 0x004,
+ 0x06A, 0x000, 0x000, 0x000, 0x088, 0x001, 0x000, 0x07F, 0x000, 0x002, 0x000, 0x000, 0x00D,
+ 0x038, 0x0A7, 0x049, 0x0D5, 0x001, 0x028, 0x004, 0x002, 0x000, 0x030, 0x00A, 0x001, 0x0F0,
+ 0x024, 0x002, 0x031, 0x09B, 0x000, 0x090, 0x003, 0x00B, 0x003, 0x002, 0x000, 0x057, 0x000,
+ 0x004, 0x000, 0x000, 0x000, 0x000, 0x005, 0x000, 0x03A, 0x006, 0x00E, 0x007, 0x000, 0x089,
+ 0x000, 0x000, 0x001, 0x005, 0x006, 0x02F, 0x000, 0x068, 0x001, 0x000, 0x043, 0x000, 0x028,
+ 0x000, 0x000, 0x0A4, 0x035, 0x013, 0x01F, 0x02F, 0x002, 0x011, 0x052, 0x008, 0x000, 0x000,
+ 0x013, 0x014, 0x000, 0x024, 0x000, 0x000, 0x001, 0x02C, 0x001, 0x000, 0x000, 0x014, 0x00C,
+ 0x016, 0x000, 0x000, 0x008, 0x00A, 0x006, 0x000, 0x000, 0x00D, 0x000, 0x0A9, 0x000, 0x000,
+ 0x000, 0x000, 0x009, 0x000, 0x000, 0x001, 0x000, 0x000, 0x002, 0x012, 0x000, 0x000, 0x036,
+ 0x002, 0x01E, 0x004, 0x00C, 0x000, 0x002, 0x000, 0x012, 0x001, 0x035, 0x000, 0x000, 0x00A,
+ 0x007, 0x015, 0x005, 0x01C, 0x024, 0x07A, 0x000, 0x005, 0x001, 0x012, 0x000, 0x004, 0x001,
+ 0x005, 0x010, 0x009, 0x000, 0x020, 0x01B, 0x006, 0x01E, 0x005, 0x04A, 0x000, 0x004, 0x000,
+ 0x014, 0x000, 0x009, 0x065, 0x000, 0x001, 0x000, 0x074, 0x000, 0x000, 0x045, 0x001, 0x000,
+ 0x000, 0x008, 0x000, 0x000, 0x017, 0x000, 0x000, 0x006, 0x000, 0x002, 0x000, 0x005, 0x000,
+ 0x01B, 0x000, 0x017, 0x000, 0x001, 0x003, 0x029, 0x002, 0x002, 0x007, 0x007, 0x001, 0x001,
+ 0x03A, 0x001, 0x001, 0x000, 0x003, 0x000, 0x004, 0x001, 0x011, 0x016, 0x000, 0x002, 0x000,
+ 0x002, 0x002, 0x002, 0x006, 0x000, 0x046, 0x000, 0x002, 0x000, 0x000, 0x00D, 0x011, 0x000,
+ 0x000, 0x01B, 0x03D, 0x007, 0x024, 0x019, 0x008, 0x05C, 0x000, 0x028, 0x004, 0x014, 0x002,
+ 0x004, 0x001, 0x001, 0x001, 0x000, 0x008, 0x008, 0x012, 0x002, 0x052, 0x00F, 0x000, 0x000,
+ 0x000, 0x007, 0x006, 0x000, 0x01E, 0x01D, 0x001, 0x010, 0x000, 0x000, 0x000, 0x001, 0x001,
+ 0x000, 0x004, 0x006, 0x017, 0x006, 0x004, 0x003, 0x003, 0x03E, 0x000, 0x002, 0x007, 0x023,
+ 0x000, 0x000, 0x001, 0x000, 0x000, 0x004, 0x007, 0x021, 0x010, 0x019, 0x005, 0x000, 0x007,
+ 0x000, 0x001, 0x000, 0x000, 0x000, 0x00C, 0x012, 0x02E, 0x000, 0x013, 0x027, 0x000, 0x013,
+ 0x000, 0x000, 0x006, 0x02C, 0x000, 0x006, 0x000, 0x00E, 0x001, 0x001, 0x005, 0x002, 0x004,
+ 0x016, 0x00D, 0x012, 0x008, 0x000, 0x001, 0x003, 0x000, 0x000, 0x001, 0x000, 0x000, 0x010,
+ 0x000, 0x000, 0x00B, 0x000, 0x000, 0x007, 0x004, 0x00F, 0x008, 0x001, 0x006, 0x001, 0x004,
+ 0x004, 0x00A, 0x002, 0x000, 0x002, 0x003, 0x005, 0x000, 0x000, 0x00B, 0x00B, 0x000, 0x005,
+ 0x003, 0x000, 0x000, 0x004, 0x004, 0x01C, 0x020, 0x000, 0x000, 0x000, 0x000, 0x013, 0x00D,
+ 0x00A, 0x003, 0x000, 0x00C, 0x00B, 0x000, 0x001, 0x000, 0x000, 0x003, 0x001, 0x001, 0x03E,
+ 0x000, 0x001, 0x017, 0x000, 0x019, 0x010, 0x003, 0x000, 0x000, 0x000, 0x000, 0x003, 0x000,
+ 0x008, 0x001, 0x000, 0x007, 0x003, 0x010, 0x001, 0x000, 0x002, 0x009, 0x000, 0x08B, 0x000,
+ 0x005, 0x000, 0x008, 0x000, 0x005, 0x012, 0x00F, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000,
+ 0x001, 0x046, 0x000, 0x004, 0x00C, 0x000, 0x001, 0x006, 0x000, 0x014, 0x005, 0x01A, 0x007,
+ 0x000, 0x002, 0x005, 0x000, 0x007, 0x001, 0x020, 0x00D, 0x00B, 0x02B, 0x000, 0x01B, 0x000,
+ 0x003, 0x000, 0x001, 0x01A, 0x001, 0x004, 0x000, 0x000, 0x007, 0x000, 0x00C, 0x01B, 0x023,
+ 0x002, 0x000, 0x019, 0x01F, 0x001, 0x010, 0x008, 0x00A, 0x000, 0x000, 0x006, 0x002, 0x002,
+ 0x002, 0x012, 0x009, 0x01E, 0x004, 0x000, 0x00B, 0x004, 0x008, 0x01E, 0x003, 0x006, 0x00C,
+ 0x000, 0x000, 0x002, 0x000, 0x00A, 0x000, 0x01B, 0x000, 0x001, 0x009, 0x000, 0x00F, 0x002,
+ 0x000, 0x00A, 0x000, 0x008, 0x000, 0x001, 0x000, 0x000, 0x001, 0x001, 0x00C, 0x00C, 0x001,
+ 0x000, 0x000, 0x004, 0x000, 0x005, 0x000, 0x022, 0x002, 0x00F, 0x015, 0x00D, 0x000, 0x000,
+ 0x001, 0x000, 0x016, 0x000, 0x000, 0x000, 0x000, 0x008, 0x000, 0x000, 0x001, 0x000, 0x000,
+ 0x004, 0x001, 0x001, 0x004, 0x002, 0x002, 0x00F, 0x00A, 0x014, 0x000, 0x000, 0x001, 0x002,
+ 0x000, 0x002, 0x00F, 0x000, 0x000, 0x007, 0x000, 0x026, 0x000, 0x035, 0x009, 0x000, 0x005,
+ 0x002, 0x000, 0x00F, 0x003, 0x003, 0x006, 0x000, 0x02F, 0x002, 0x000, 0x007, 0x000, 0x000,
+ 0x001, 0x008, 0x016, 0x003, 0x000, 0x000, 0x016, 0x000, 0x002, 0x000, 0x00D, 0x000, 0x001,
+ 0x000, 0x005, 0x001, 0x00A, 0x000, 0x000, 0x002, 0x00A, 0x001, 0x000, 0x000, 0x006, 0x001,
+ 0x000, 0x003, 0x002, 0x015, 0x000, 0x002, 0x000, 0x000, 0x003, 0x001, 0x008, 0x002, 0x000,
+ 0x006, 0x000, 0x001, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00D, 0x014, 0x000, 0x001,
+ 0x000, 0x004, 0x000, 0x003, 0x002, 0x000, 0x000, 0x004, 0x019, 0x006, 0x007, 0x013, 0x019,
+ 0x003, 0x00B, 0x008, 0x013, 0x007, 0x002, 0x009, 0x000, 0x000, 0x019, 0x016, 0x002, 0x015,
+ 0x000, 0x004, 0x000, 0x007, 0x000, 0x008, 0x000, 0x000, 0x007, 0x001, 0x006, 0x01E, 0x01B,
+ 0x000, 0x00C, 0x003, 0x00F, 0x000, 0x000, 0x001, 0x00A, 0x000, 0x000, 0x000, 0x006, 0x016,
+ 0x006, 0x002, 0x000, 0x015, 0x006, 0x004, 0x002, 0x009, 0x000, 0x009, 0x002, 0x000, 0x00A,
+ 0x000, 0x000, 0x005, 0x00C, 0x000, 0x005, 0x001, 0x004, 0x000, 0x00A, 0x001, 0x004, 0x008,
+ 0x00E, 0x000, 0x001, 0x002, 0x006, 0x001, 0x000, 0x024, 0x000, 0x000, 0x003, 0x001, 0x000,
+ 0x004, 0x002, 0x000, 0x016, 0x001, 0x009, 0x000, 0x007, 0x000, 0x017, 0x001, 0x000, 0x005,
+ 0x016, 0x002, 0x01F, 0x000, 0x000, 0x002, 0x000, 0x000, 0x00A, 0x001, 0x00A, 0x000, 0x007,
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x005, 0x000, 0x005, 0x00B, 0x00C, 0x000, 0x000,
+ 0x001, 0x004, 0x006, 0x003, 0x001, 0x016, 0x001, 0x000, 0x000, 0x001, 0x004, 0x000, 0x001,
+ 0x019, 0x003, 0x003, 0x004, 0x005, 0x001, 0x01D, 0x000, 0x000, 0x007, 0x001, 0x001, 0x01F,
+ 0x000, 0x000, 0x001, 0x02B, 0x006, 0x010, 0x000, 0x009, 0x006, 0x00C, 0x00A, 0x002, 0x000,
+ 0x000, 0x001, 0x00C, 0x000, 0x000, 0x000, 0x016, 0x000, 0x000, 0x016, 0x00C, 0x00F, 0x000,
+ 0x010, 0x002, 0x000, 0x00C, 0x01C, 0x002, 0x000, 0x000, 0x000, 0x000, 0x001, 0x002, 0x000,
+ 0x003, 0x017, 0x004, 0x01C, 0x005, 0x00C, 0x001, 0x007, 0x004, 0x000, 0x001, 0x002, 0x000,
+ 0x00E, 0x00F, 0x002, 0x009, 0x001, 0x006, 0x020, 0x00B, 0x000, 0x000, 0x001, 0x00B, 0x002,
+ 0x002, 0x000, 0x000, 0x000, 0x007, 0x000, 0x001, 0x000, 0x000, 0x001, 0x001, 0x000, 0x007,
+ 0x000, 0x003, 0x006, 0x000, 0x000, 0x000, 0x000, 0x002, 0x000, 0x00B, 0x002, 0x000, 0x006,
+ 0x001, 0x001, 0x000, 0x00E, 0x00C, 0x000, 0x006, 0x000, 0x000, 0x00E, 0x000, 0x003, 0x001,
+ 0x000, 0x000, 0x023, 0x009, 0x007, 0x000, 0x000, 0x011, 0x012, 0x000, 0x000, 0x006, 0x001,
+ 0x001, 0x000, 0x00D, 0x008, 0x007, 0x002, 0x029, 0x003, 0x008, 0x004, 0x002, 0x00C, 0x001,
+ 0x000, 0x001, 0x00E, 0x001, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000, 0x002, 0x000, 0x007,
+ 0x005, 0x004, 0x000, 0x000, 0x002, 0x005, 0x005, 0x005, 0x001, 0x007, 0x002, 0x00C, 0x000,
+ 0x003, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x006, 0x003, 0x008,
+ 0x000, 0x000, 0x006, 0x003, 0x004, 0x015, 0x000, 0x007, 0x005, 0x004, 0x000, 0x008, 0x000,
+ 0x006, 0x000, 0x006, 0x004, 0x002, 0x000, 0x00F, 0x001, 0x000, 0x000, 0x000, 0x002, 0x007,
+ 0x000, 0x01A, 0x008, 0x000, 0x000, 0x001, 0x003, 0x000, 0x00C, 0x000, 0x000, 0x001, 0x005,
+ 0x00C, 0x000, 0x000, 0x004, 0x002, 0x000, 0x003, 0x006, 0x001, 0x004, 0x00A, 0x000, 0x002,
+ 0x000, 0x000, 0x005, 0x007, 0x001, 0x013, 0x01A, 0x001, 0x003, 0x000, 0x003, 0x000, 0x000,
+ 0x006, 0x010, 0x000, 0x002, 0x019, 0x00B, 0x001, 0x00E, 0x000, 0x006, 0x016, 0x014, 0x000,
+ 0x000, 0x000, 0x004, 0x000, 0x000, 0x005, 0x002, 0x00B, 0x002, 0x016, 0x000, 0x000, 0x003,
+ 0x001, 0x000, 0x001, 0x000, 0x00C, 0x002, 0x014, 0x000, 0x000, 0x004, 0x003, 0x009, 0x009,
+ 0x000, 0x001, 0x000, 0x000, 0x002, 0x001, 0x001, 0x000, 0x001, 0x000, 0x001, 0x007, 0x005,
+ 0x005, 0x000, 0x000, 0x001, 0x003, 0x003, 0x002, 0x011, 0x01C, 0x002, 0x011, 0x003, 0x000,
+ 0x00D, 0x002, 0x001, 0x001, 0x030, 0x00B, 0x007, 0x000, 0x000, 0x01C, 0x001, 0x001, 0x003,
+ 0x002, 0x000, 0x001, 0x00D, 0x000, 0x009, 0x000, 0x001, 0x001, 0x006, 0x006, 0x002, 0x000,
+ 0x001, 0x003, 0x00D, 0x004, 0x003, 0x011, 0x005, 0x000, 0x009, 0x000, 0x000, 0x000, 0x002,
+ 0x002, 0x014, 0x000, 0x000, 0x000, 0x001, 0x004, 0x001, 0x000, 0x001, 0x003, 0x000, 0x000,
+ 0x002, 0x000, 0x009, 0x003, 0x000, 0x000, 0x000, 0x002, 0x000, 0x007, 0x003, 0x001, 0x000,
+ 0x003, 0x005, 0x010, 0x001, 0x000, 0x013, 0x000, 0x003, 0x005, 0x000, 0x002, 0x000, 0x000,
+ 0x001, 0x001, 0x001, 0x001, 0x003, 0x004, 0x003, 0x001, 0x00D, 0x000, 0x001, 0x002, 0x000,
+ 0x008, 0x007, 0x001, 0x003, 0x000, 0x000, 0x000, 0x00E, 0x004, 0x000, 0x006, 0x00D, 0x000,
+ 0x000, 0x000, 0x003, 0x000, 0x000, 0x003, 0x000, 0x000, 0x020, 0x00A, 0x000, 0x001, 0x002,
+ 0x000, 0x000, 0x000, 0x007, 0x008, 0x000, 0x008, 0x01F, 0x001, 0x000, 0x013, 0x008, 0x001,
+ 0x00A, 0x005, 0x004, 0x008, 0x001, 0x001, 0x000, 0x001, 0x004, 0x003, 0x006, 0x002, 0x001,
+ 0x000, 0x000, 0x000, 0x005, 0x000, 0x001, 0x000, 0x000, 0x000, 0x004, 0x000, 0x000, 0x00C,
+ 0x002, 0x007, 0x000, 0x000, 0x00C, 0x003, 0x000, 0x000, 0x009, 0x002, 0x001, 0x004, 0x000,
+ 0x000, 0x000, 0x000, 0x008, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x009, 0x007, 0x00F,
+ 0x001, 0x024, 0x00C, 0x002, 0x001, 0x000, 0x000, 0x000, 0x008, 0x001, 0x009, 0x00B, 0x000,
+ 0x00F, 0x002, 0x001, 0x000, 0x000, 0x000, 0x01C, 0x002, 0x001, 0x001, 0x003, 0x001, 0x001,
+ 0x000, 0x000, 0x005, 0x001, 0x000, 0x000, 0x000, 0x001, 0x006, 0x009, 0x002, 0x007, 0x005,
+ 0x00C, 0x002, 0x001, 0x006, 0x003, 0x002, 0x003, 0x002, 0x004, 0x003, 0x003, 0x007, 0x000,
+ 0x001, 0x004, 0x00A, 0x000, 0x001, 0x004, 0x001, 0x002, 0x000, 0x000, 0x000, 0x000, 0x003,
+ 0x003, 0x001, 0x001, 0x008, 0x035, 0x000, 0x003, 0x002, 0x000, 0x002, 0x001, 0x000, 0x001,
+ 0x001, 0x002, 0x000, 0x00B, 0x002, 0x001, 0x000, 0x000, 0x006, 0x000, 0x004, 0x007, 0x001,
+ 0x004, 0x004, 0x002, 0x000, 0x000, 0x003, 0x002, 0x001, 0x000, 0x000, 0x00C, 0x002, 0x00B,
+ 0x001, 0x00C, 0x000, 0x000, 0x001, 0x000, 0x003, 0x014, 0x001, 0x003, 0x001, 0x001, 0x009,
+ 0x000, 0x005, 0x003, 0x00A, 0x000, 0x001, 0x009, 0x007, 0x000, 0x005, 0x000, 0x003, 0x002,
+ 0x000, 0x000, 0x00C, 0x00C, 0x00C, 0x00E, 0x000, 0x004, 0x001, 0x000, 0x002, 0x000, 0x000,
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x001, 0x000, 0x001, 0x003, 0x004, 0x001,
+ 0x002, 0x002, 0x000, 0x005, 0x000, 0x005, 0x00C, 0x000, 0x000, 0x004, 0x001, 0x000, 0x000,
+ 0x034, 0x007, 0x003, 0x00A, 0x000, 0x000, 0x000, 0x002, 0x004, 0x005, 0x000, 0x002, 0x008,
+ 0x000, 0x000, 0x000, 0x006, 0x001, 0x000, 0x003, 0x000, 0x008, 0x010, 0x000, 0x004, 0x000,
+ 0x000, 0x000, 0x004, 0x000, 0x002, 0x002, 0x000, 0x003, 0x003, 0x001, 0x004, 0x000, 0x005,
+ 0x011, 0x001, 0x001, 0x002, 0x00C, 0x009, 0x00A, 0x000, 0x002, 0x004, 0x001, 0x021, 0x000,
+ 0x000, 0x000, 0x001, 0x005, 0x000, 0x006, 0x000, 0x001, 0x000, 0x000, 0x000, 0x001, 0x000,
+ 0x001, 0x00C, 0x000, 0x001, 0x001, 0x000, 0x000, 0x007, 0x000, 0x000, 0x000, 0x002, 0x001,
+ 0x000, 0x001, 0x001, 0x002, 0x000, 0x008, 0x009, 0x005, 0x001, 0x003, 0x005, 0x002, 0x000,
+ 0x004, 0x002, 0x000, 0x000, 0x001, 0x002, 0x006, 0x007, 0x006, 0x003, 0x009, 0x000, 0x006,
+ 0x000, 0x006, 0x006, 0x007, 0x004, 0x000, 0x022, 0x002, 0x002, 0x002, 0x002, 0x008, 0x004,
+ 0x000, 0x004, 0x000, 0x009, 0x003, 0x001, 0x00A, 0x005, 0x002, 0x000, 0x000, 0x002, 0x007,
+ 0x001, 0x001, 0x006, 0x000, 0x001, 0x003, 0x000, 0x002, 0x001, 0x000, 0x005, 0x007, 0x001,
+ 0x027, 0x002, 0x008, 0x000, 0x001, 0x002, 0x003, 0x000, 0x000, 0x002, 0x001, 0x009, 0x002,
+ 0x001, 0x000, 0x002, 0x001, 0x011, 0x009, 0x000, 0x002, 0x001, 0x000, 0x00C, 0x007, 0x003,
+ 0x004, 0x007, 0x001, 0x00C, 0x001, 0x009, 0x000, 0x005, 0x002, 0x000, 0x009, 0x001, 0x001,
+ 0x003, 0x000, 0x007, 0x000, 0x00F, 0x000, 0x000, 0x000, 0x002, 0x002, 0x009, 0x000, 0x00A,
+ 0x002, 0x000, 0x000, 0x007, 0x005, 0x000, 0x001, 0x000, 0x005, 0x000, 0x009, 0x000, 0x001,
+ 0x002, 0x000, 0x000, 0x005, 0x009, 0x004, 0x003, 0x004, 0x000, 0x002, 0x001, 0x004, 0x001,
+ 0x000, 0x000, 0x002, 0x000, 0x000, 0x000, 0x000, 0x009, 0x007, 0x000, 0x001, 0x005, 0x009,
+ 0x002, 0x00F, 0x001, 0x003, 0x001, 0x000, 0x000, 0x003, 0x000, 0x002, 0x000, 0x003, 0x005,
+ 0x000, 0x002, 0x000, 0x004, 0x001, 0x000, 0x000, 0x000, 0x001, 0x000, 0x001, 0x007, 0x000,
+ 0x002, 0x000, 0x002, 0x008, 0x000, 0x000, 0x009, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000,
+ 0x002, 0x001, 0x002, 0x006, 0x000, 0x000, 0x00F, 0x000, 0x001, 0x007, 0x000, 0x001, 0x000,
+ 0x00D, 0x000, 0x002, 0x006, 0x000, 0x003, 0x003, 0x001, 0x007, 0x00D, 0x006, 0x004, 0x001,
+ 0x001, 0x000, 0x001, 0x000, 0x001, 0x005, 0x002, 0x000, 0x000, 0x000, 0x018, 0x002, 0x002,
+ 0x000, 0x000, 0x007, 0x000, 0x000, 0x003, 0x001, 0x008, 0x010, 0x003, 0x000, 0x000, 0x000,
+ 0x000, 0x000, 0x004, 0x007, 0x000, 0x001, 0x000, 0x002, 0x004, 0x000, 0x008, 0x000, 0x000,
+ 0x000, 0x00B, 0x000, 0x001, 0x000, 0x008, 0x00A, 0x001, 0x005, 0x001, 0x000, 0x007, 0x006,
+ 0x000, 0x001, 0x000, 0x000, 0x001, 0x004, 0x000, 0x00B, 0x004, 0x003, 0x000, 0x000, 0x00C,
+ 0x001, 0x000, 0x003, 0x008, 0x000, 0x001, 0x001, 0x000, 0x003, 0x00B, 0x006, 0x000, 0x001,
+ 0x002, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000, 0x009, 0x003, 0x006,
+ 0x000, 0x003, 0x003, 0x001, 0x001, 0x001, 0x000, 0x000, 0x005, 0x000, 0x000, 0x007, 0x003,
+ 0x008, 0x002, 0x004, 0x000, 0x004, 0x006, 0x001, 0x002, 0x001, 0x002, 0x003, 0x000, 0x000,
+ 0x000, 0x000, 0x000, 0x000, 0x002, 0x001, 0x000, 0x002, 0x000, 0x007, 0x003, 0x00A, 0x003,
+ 0x001, 0x004, 0x001, 0x004, 0x002, 0x006, 0x003, 0x002, 0x000, 0x000, 0x008, 0x011, 0x000,
+ 0x000, 0x00D, 0x000, 0x000, 0x000, 0x000, 0x000, 0x006, 0x005, 0x000, 0x001, 0x000, 0x000,
+ 0x001, 0x004, 0x000, 0x000, 0x004, 0x001, 0x001, 0x000, 0x000, 0x00F, 0x004, 0x002, 0x003,
+ 0x000, 0x000, 0x002, 0x002, 0x002, 0x000, 0x000, 0x000, 0x005, 0x002, 0x008, 0x002, 0x000,
+ 0x002, 0x000, 0x005, 0x006, 0x001, 0x009, 0x000, 0x001, 0x001, 0x004, 0x002, 0x001, 0x000,
+ 0x000, 0x000, 0x002, 0x002, 0x003, 0x001, 0x005, 0x002, 0x000, 0x000, 0x004, 0x005, 0x001,
+ 0x000, 0x001, 0x000, 0x009, 0x000, 0x002, 0x001, 0x000, 0x003, 0x000, 0x002, 0x002, 0x003,
+ 0x000, 0x000, 0x009, 0x001, 0x003, 0x000, 0x001, 0x006, 0x003, 0x000, 0x002, 0x001, 0x007,
+ 0x003, 0x000, 0x005, 0x000, 0x001, 0x000, 0x000, 0x000, 0x004, 0x005, 0x000, 0x001, 0x000,
+ 0x003, 0x002, 0x001, 0x000, 0x002, 0x000, 0x001, 0x011, 0x001, 0x001, 0x004, 0x000, 0x001,
+ 0x000, 0x001, 0x001, 0x000, 0x004, 0x003, 0x000, 0x000, 0x000, 0x002, 0x001, 0x000, 0x017,
+ 0x004, 0x000, 0x000, 0x000, 0x003, 0x00C, 0x000, 0x008, 0x003, 0x002, 0x003, 0x005, 0x000,
+ 0x002, 0x003, 0x002, 0x001, 0x000, 0x003, 0x000, 0x001, 0x001, 0x000, 0x001, 0x000, 0x004,
+ 0x001, 0x006, 0x002, 0x01D, 0x004, 0x004, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000, 0x009,
+ 0x002, 0x007, 0x002, 0x005, 0x000, 0x000, 0x009, 0x001, 0x004, 0x000, 0x001, 0x000, 0x000,
+ 0x004, 0x007, 0x000, 0x006, 0x005, 0x000, 0x001, 0x001, 0x000, 0x003, 0x001, 0x001, 0x002,
+ 0x000, 0x000, 0x000, 0x002, 0x000, 0x000, 0x000, 0x001, 0x000, 0x002, 0x003, 0x005, 0x001,
+ 0x007, 0x001, 0x001, 0x003, 0x002, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000,
+ 0x000, 0x002, 0x002, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x004, 0x003, 0x002,
+ 0x004, 0x000, 0x000, 0x001, 0x000, 0x000, 0x002, 0x00B, 0x008, 0x000, 0x004, 0x003, 0x001,
+ 0x009, 0x003, 0x002, 0x001, 0x003, 0x000, 0x002, 0x005, 0x000, 0x005, 0x001, 0x003, 0x005,
+ 0x002, 0x001, 0x003, 0x000, 0x010, 0x002, 0x000, 0x000, 0x000, 0x001, 0x000, 0x006, 0x000,
+ 0x001, 0x003, 0x000, 0x008, 0x000, 0x000, 0x002, 0x006, 0x000, 0x004, 0x000, 0x000, 0x001,
+ 0x000, 0x004, 0x000, 0x003, 0x001, 0x003, 0x000, 0x002, 0x003, 0x001, 0x005, 0x003, 0x005,
+ 0x005, 0x001, 0x001, 0x001, 0x000, 0x006, 0x003, 0x001, 0x000, 0x001, 0x001, 0x000, 0x003,
+ 0x002, 0x001, 0x006, 0x000, 0x005, 0x002, 0x003, 0x009, 0x007, 0x004, 0x000, 0x002, 0x002,
+ 0x001, 0x002, 0x006, 0x000, 0x000, 0x000, 0x002, 0x000, 0x001, 0x000, 0x004, 0x003, 0x000,
+ 0x002, 0x005, 0x012, 0x005, 0x002, 0x000, 0x001, 0x00D, 0x003, 0x004, 0x000, 0x000, 0x001,
+ 0x002, 0x000, 0x00D, 0x000, 0x00D, 0x001, 0x000, 0x001, 0x000, 0x001, 0x001, 0x001, 0x001,
+ 0x001, 0x001, 0x002, 0x000, 0x001, 0x005, 0x003, 0x000, 0x005, 0x000, 0x001, 0x000, 0x000,
+ 0x004, 0x000, 0x002, 0x001, 0x000, 0x001, 0x002, 0x000, 0x000, 0x005, 0x000, 0x001, 0x000,
+ 0x000, 0x000, 0x001, 0x000, 0x003, 0x000, 0x001, 0x002, 0x002, 0x000, 0x000, 0x001, 0x000,
+ 0x005, 0x000, 0x00D, 0x000, 0x001, 0x002, 0x00A, 0x003, 0x000, 0x000, 0x002, 0x002, 0x001,
+ 0x002, 0x000, 0x002, 0x001, 0x001, 0x005, 0x000, 0x00A, 0x000, 0x000, 0x003, 0x003, 0x009,
+ 0x001, 0x004, 0x002, 0x002, 0x000, 0x000, 0x003, 0x006, 0x000, 0x000, 0x00A, 0x001, 0x003,
+ 0x001, 0x00C, 0x000, 0x000, 0x000, 0x002, 0x001, 0x006, 0x001, 0x000, 0x001, 0x002, 0x007,
+ 0x000, 0x000, 0x005, 0x002, 0x001, 0x000, 0x001, 0x001, 0x001, 0x000, 0x004, 0x000, 0x000,
+ 0x001, 0x000, 0x001, 0x000, 0x001, 0x006, 0x000, 0x008, 0x000, 0x002, 0x004, 0x002, 0x004,
+ 0x002, 0x002, 0x000, 0x002, 0x000, 0x000, 0x000, 0x000, 0x002, 0x000, 0x005, 0x002, 0x006,
+ 0x000, 0x001, 0x002, 0x005, 0x000, 0x000, 0x001, 0x000, 0x002, 0x000, 0x005, 0x000, 0x001,
+ 0x001, 0x002, 0x003, 0x000, 0x000, 0x000, 0x000, 0x005, 0x000, 0x000, 0x001, 0x00D, 0x001,
+ 0x000, 0x000, 0x000, 0x001, 0x000, 0x005, 0x002, 0x000, 0x007, 0x009, 0x001, 0x002, 0x002,
+ 0x000, 0x001, 0x009, 0x007, 0x000, 0x005, 0x002, 0x000, 0x001, 0x001, 0x005, 0x006, 0x002,
+ 0x000, 0x00F, 0x000, 0x001, 0x000, 0x005, 0x001, 0x002, 0x001, 0x002, 0x000, 0x000, 0x002,
+ 0x003, 0x000, 0x007, 0x003, 0x000, 0x000, 0x003, 0x000, 0x002, 0x002, 0x001, 0x002, 0x001,
+ 0x002, 0x005, 0x001, 0x000, 0x009, 0x000, 0x000, 0x000, 0x006, 0x009, 0x001, 0x00A, 0x001,
+ 0x001, 0x000, 0x000, 0x003, 0x006, 0x000, 0x000, 0x000, 0x001, 0x002, 0x000, 0x000, 0x007,
+ 0x002, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000, 0x003, 0x001, 0x000, 0x004, 0x001, 0x006,
+ 0x002, 0x002, 0x000, 0x000, 0x004, 0x00B, 0x001, 0x000, 0x000, 0x005, 0x001, 0x003, 0x000,
+ 0x002, 0x006, 0x008, 0x002, 0x000, 0x006, 0x000, 0x004, 0x001, 0x006, 0x000, 0x002, 0x003,
+ 0x001, 0x001, 0x001, 0x003, 0x002, 0x002, 0x002, 0x002, 0x00C, 0x001, 0x000, 0x004, 0x005,
+ 0x000, 0x004, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000, 0x001, 0x000, 0x002, 0x000, 0x000,
+ 0x000, 0x001, 0x002, 0x000, 0x000, 0x008, 0x004, 0x001, 0x002, 0x000, 0x003, 0x001, 0x002,
+ 0x000, 0x003, 0x003, 0x007, 0x000, 0x000, 0x000, 0x000, 0x001, 0x00B, 0x000, 0x001, 0x000,
+ 0x000, 0x002, 0x001, 0x002, 0x001, 0x007, 0x001, 0x002, 0x003, 0x002, 0x000, 0x000, 0x001,
+ 0x004, 0x001, 0x001, 0x001, 0x001, 0x001, 0x000, 0x00A, 0x001, 0x005, 0x000, 0x006, 0x000,
+ 0x000, 0x000, 0x001, 0x003, 0x001, 0x007, 0x002, 0x000, 0x000, 0x001, 0x002, 0x001, 0x002,
+ 0x000, 0x001, 0x001, 0x001, 0x001, 0x000, 0x006, 0x000, 0x000, 0x000, 0x000, 0x003, 0x005,
+ 0x000, 0x003, 0x001, 0x002, 0x006, 0x001, 0x000, 0x001, 0x002, 0x000, 0x002, 0x003, 0x000,
+ 0x001, 0x000, 0x003, 0x002, 0x00C, 0x001, 0x006, 0x008, 0x007, 0x002, 0x001, 0x003, 0x000,
+ 0x006, 0x002, 0x000, 0x000, 0x001, 0x000, 0x000, 0x002, 0x000, 0x000, 0x000, 0x000, 0x005,
+ 0x000, 0x005, 0x000, 0x000, 0x001, 0x002, 0x001, 0x000, 0x001, 0x001, 0x000, 0x00A, 0x002,
+ 0x000, 0x000, 0x00C, 0x000, 0x001, 0x000, 0x002, 0x003, 0x001, 0x004, 0x001, 0x002, 0x001,
+ 0x000, 0x007, 0x001, 0x001, 0x008, 0x009, 0x002, 0x000, 0x002, 0x002, 0x003, 0x003, 0x001,
+ 0x003, 0x002, 0x000, 0x000, 0x001, 0x000, 0x006, 0x005, 0x000, 0x002, 0x002, 0x000, 0x001,
+ 0x002, 0x005, 0x004, 0x002, 0x001, 0x002, 0x000, 0x000, 0x001, 0x000, 0x001, 0x001, 0x002,
+ 0x000, 0x007, 0x005, 0x003, 0x000, 0x000, 0x001, 0x000, 0x004, 0x003, 0x000, 0x002, 0x007,
+ 0x001, 0x000, 0x002, 0x000, 0x002, 0x004, 0x002, 0x000, 0x000, 0x002, 0x000, 0x00E, 0x001,
+ 0x001, 0x000, 0x000, 0x003, 0x000, 0x003, 0x000, 0x000, 0x002, 0x000, 0x000, 0x006, 0x003,
+ 0x003, 0x003, 0x001, 0x000, 0x001, 0x000, 0x000, 0x003, 0x000, 0x000, 0x000, 0x000, 0x001,
+ 0x000, 0x007, 0x005, 0x001, 0x000, 0x001, 0x001, 0x003, 0x001, 0x009, 0x000, 0x000, 0x008,
+ 0x000, 0x000, 0x00F, 0x002, 0x002, 0x000, 0x004, 0x000, 0x000, 0x000, 0x002, 0x000, 0x001,
+ 0x007, 0x002, 0x001, 0x000, 0x001, 0x001, 0x002, 0x000, 0x000, 0x002, 0x000, 0x000, 0x002,
+ 0x000, 0x002, 0x002, 0x001, 0x006, 0x000, 0x001, 0x000, 0x001, 0x004, 0x000, 0x002, 0x003,
+ 0x001, 0x002, 0x000, 0x003, 0x002, 0x001, 0x000, 0x001, 0x000, 0x000, 0x000, 0x002, 0x000,
+ 0x001, 0x004, 0x001, 0x00E, 0x003, 0x003, 0x000, 0x005, 0x001, 0x000, 0x000, 0x002, 0x001,
+ 0x002, 0x000, 0x000, 0x003, 0x000, 0x002, 0x001, 0x000, 0x001, 0x000, 0x001, 0x002, 0x000,
+ 0x001, 0x000, 0x001, 0x001, 0x001, 0x001, 0x005, 0x003, 0x000, 0x00A, 0x002, 0x002, 0x001,
+ 0x000, 0x000, 0x004, 0x000, 0x002, 0x00A, 0x000, 0x000, 0x008, 0x004, 0x000, 0x001, 0x004,
+ 0x005, 0x005, 0x002, 0x001, 0x000, 0x000, 0x000, 0x006, 0x000, 0x001, 0x001, 0x000, 0x000,
+ 0x001, 0x001, 0x002, 0x001, 0x000, 0x001, 0x002, 0x002, 0x002, 0x000, 0x001, 0x001, 0x001,
+ 0x002, 0x000, 0x001, 0x000, 0x001, 0x000, 0x001, 0x002, 0x001, 0x000, 0x001, 0x002, 0x000,
+ 0x002, 0x002, 0x000, 0x000, 0x000, 0x003, 0x000, 0x001, 0x003, 0x001, 0x002, 0x007, 0x000,
+ 0x002, 0x004, 0x004, 0x000, 0x005, 0x000, 0x000, 0x001, 0x003, 0x003, 0x000, 0x009, 0x001,
+ 0x000, 0x001, 0x002, 0x004, 0x003, 0x001, 0x000, 0x001, 0x001, 0x002, 0x003, 0x001, 0x006,
+ 0x003, 0x001, 0x003, 0x001, 0x005, 0x004, 0x001, 0x000, 0x001, 0x001, 0x000, 0x005, 0x001,
+ 0x000, 0x001, 0x001, 0x002, 0x000, 0x005, 0x008, 0x001, 0x000, 0x007, 0x000, 0x000, 0x000,
+ 0x005, 0x001, 0x000, 0x000, 0x001, 0x000, 0x001, 0x000, 0x000, 0x002, 0x002, 0x000, 0x000,
+ 0x00A, 0x000, 0x000, 0x000, 0x001, 0x000, 0x001, 0x007, 0x002, 0x004, 0x000, 0x001, 0x005,
+ 0x000, 0x001, 0x000, 0x000, 0x000, 0x004, 0x000, 0x000, 0x004, 0x002, 0x000, 0x002, 0x001,
+ 0x001, 0x000, 0x002, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x002, 0x000, 0x000,
+ 0x004, 0x000, 0x001, 0x000, 0x003, 0x003, 0x000, 0x001, 0x003, 0x001, 0x000, 0x001, 0x000,
+ 0x000, 0x002, 0x000, 0x00A, 0x000, 0x001, 0x000, 0x000, 0x003, 0x001, 0x001, 0x005, 0x004,
+ 0x003, 0x000, 0x000, 0x002, 0x001, 0x000, 0x001, 0x000, 0x001, 0x002, 0x002, 0x001, 0x000,
+ 0x004, 0x001, 0x000, 0x003, 0x001, 0x001, 0x005, 0x001, 0x001, 0x007, 0x001, 0x003, 0x000,
+ 0x000, 0x004, 0x003, 0x001, 0x002, 0x00B, 0x002, 0x001, 0x000, 0x000, 0x000, 0x001, 0x002,
+ 0x001, 0x004, 0x003, 0x001, 0x001, 0x002, 0x000, 0x000, 0x002, 0x002, 0x000, 0x000, 0x000,
+ 0x002, 0x002, 0x001, 0x000, 0x002, 0x000, 0x000, 0x001, 0x001, 0x008, 0x002, 0x001, 0x000,
+ 0x003, 0x000, 0x001, 0x001, 0x001, 0x000, 0x003, 0x004, 0x002, 0x007, 0x003, 0x001, 0x009,
+ 0x002, 0x005, 0x002, 0x002, 0x003, 0x000, 0x00F, 0x000, 0x002, 0x001, 0x003, 0x004, 0x001,
+ 0x000, 0x003, 0x009, 0x002, 0x001, 0x008, 0x000, 0x001, 0x001, 0x000, 0x009, 0x000, 0x000,
+ 0x001, 0x000, 0x00A, 0x000, 0x004, 0x001, 0x000, 0x002, 0x003, 0x009, 0x002, 0x000, 0x000,
+ 0x005, 0x001, 0x002, 0x003, 0x002, 0x000, 0x001, 0x002, 0x002, 0x001, 0x003, 0x000, 0x000,
+ 0x002, 0x001, 0x001, 0x000, 0x001, 0x005, 0x001, 0x002, 0x002, 0x002, 0x002, 0x002, 0x002,
+ 0x008, 0x005, 0x000, 0x001, 0x001, 0x002, 0x000, 0x001, 0x000, 0x00B, 0x004, 0x000, 0x002,
+ 0x002, 0x004, 0x000, 0x001, 0x002, 0x000, 0x000, 0x001, 0x001, 0x001, 0x001, 0x002, 0x000,
+ 0x002, 0x000, 0x002, 0x005, 0x004, 0x000, 0x000, 0x000, 0x005, 0x000, 0x000, 0x003, 0x002,
+ 0x001, 0x000, 0x000, 0x000, 0x003, 0x000, 0x002, 0x000, 0x000, 0x001, 0x002, 0x002, 0x001,
+ 0x000, 0x001, 0x004, 0x001, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x002, 0x000,
+ 0x004, 0x000, 0x001, 0x002, 0x000, 0x001, 0x002, 0x000, 0x000, 0x001, 0x000, 0x002, 0x002,
+ 0x001, 0x001, 0x001, 0x000, 0x003, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000,
+ 0x001, 0x008, 0x004, 0x001, 0x002, 0x007, 0x005, 0x000, 0x003, 0x002, 0x000, 0x002, 0x002,
+ 0x004, 0x000, 0x004, 0x000, 0x004, 0x002, 0x001, 0x002, 0x002, 0x002, 0x001, 0x000, 0x000,
+ 0x001, 0x003, 0x003, 0x001, 0x001, 0x002, 0x002, 0x000, 0x001, 0x001, 0x000, 0x001, 0x000,
+ 0x001, 0x001, 0x003, 0x004, 0x001, 0x002, 0x002, 0x004, 0x000, 0x003, 0x001, 0x001, 0x001,
+ 0x000, 0x003, 0x001, 0x000, 0x003, 0x002, 0x001, 0x000, 0x003, 0x002, 0x001, 0x006, 0x006,
+ 0x000, 0x000, 0x002, 0x001, 0x000, 0x001, 0x002, 0x003, 0x002, 0x001, 0x003, 0x001, 0x000,
+ 0x001, 0x005, 0x003, 0x001, 0x002, 0x004, 0x00D, 0x000, 0x001, 0x000, 0x000, 0x001, 0x000,
+ 0x000, 0x001, 0x001, 0x001, 0x000, 0x000, 0x001, 0x001, 0x002, 0x000, 0x003, 0x003, 0x000,
+ 0x001, 0x000, 0x002, 0x000, 0x005, 0x000, 0x001, 0x000, 0x001, 0x000, 0x000, 0x004, 0x001,
+ 0x002, 0x000, 0x000, 0x002, 0x002, 0x000, 0x000, 0x001, 0x004, 0x002, 0x000, 0x000, 0x004,
+ 0x001, 0x002, 0x000, 0x000, 0x000, 0x000, 0x001, 0x001, 0x002, 0x003, 0x000, 0x001, 0x002,
+ 0x003, 0x001, 0x000, 0x002, 0x001, 0x001, 0x000, 0x003, 0x002, 0x001, 0x001, 0x000, 0x000,
+ 0x003, 0x000, 0x003, 0x000, 0x000, 0x000, 0x003, 0x000, 0x002, 0x001, 0x001, 0x002, 0x000,
+ 0x004, 0x000, 0x001, 0x000, 0x001, 0x006, 0x000, 0x004, 0x001, 0x002, 0x000, 0x000, 0x000,
+ 0x000, 0x001, 0x002, 0x000, 0x002, 0x000, 0x002, 0x000, 0x001, 0x002, 0x001, 0x002, 0x000,
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x003, 0x000, 0x002, 0x001, 0x001, 0x000, 0x002, 0x000,
+ 0x000, 0x003, 0x008, 0x003, 0x000, 0x000, 0x000, 0x002, 0x001, 0x000, 0x000, 0x000, 0x000,
+ 0x001, 0x003, 0x003, 0x004, 0x000, 0x003, 0x001, 0x000, 0x001, 0x001, 0x000, 0x002, 0x004,
+ 0x001, 0x002, 0x001, 0x004, 0x002, 0x001, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000, 0x001,
+ 0x001, 0x008, 0x000, 0x003, 0x000, 0x001, 0x001, 0x004, 0x001, 0x002, 0x000, 0x001, 0x001,
+ 0x000, 0x003, 0x001, 0x000, 0x008, 0x000, 0x000, 0x002, 0x001, 0x004, 0x005, 0x006, 0x001,
+ 0x002, 0x000, 0x003, 0x003, 0x000, 0x001, 0x000, 0x003, 0x000, 0x004, 0x000, 0x005, 0x001,
+ 0x002, 0x001, 0x003, 0x002, 0x004, 0x001, 0x001, 0x002, 0x001, 0x003, 0x005, 0x001, 0x003,
+ 0x001, 0x000, 0x000, 0x003, 0x000, 0x003, 0x001, 0x005, 0x000, 0x001, 0x000, 0x001, 0x002,
+ 0x001, 0x000, 0x004, 0x002, 0x002, 0x001, 0x002, 0x001, 0x005, 0x000, 0x001, 0x002, 0x001,
+ 0x000, 0x000, 0x001, 0x00A, 0x003, 0x002, 0x002, 0x000, 0x004, 0x001, 0x000, 0x001, 0x000,
+ 0x003, 0x000, 0x001, 0x001, 0x000, 0x001, 0x001, 0x002, 0x000, 0x001, 0x002, 0x000, 0x002,
+ 0x000, 0x001, 0x002, 0x002, 0x003, 0x000, 0x003, 0x003, 0x004, 0x003, 0x000, 0x000, 0x007,
+ 0x000, 0x002, 0x002, 0x000, 0x001, 0x002, 0x000, 0x000, 0x002, 0x000, 0x002, 0x000, 0x000,
+ 0x001, 0x000, 0x001, 0x003, 0x002, 0x003, 0x002, 0x000, 0x000, 0x002, 0x000, 0x000, 0x000,
+ 0x000, 0x000, 0x001, 0x000, 0x001, 0x001, 0x001, 0x002, 0x001, 0x000, 0x001, 0x001, 0x000,
];
pub(crate) const COMPATIBILITY_DECOMPOSED_KV: &[(u32, (u16, u16))] = &[
- (0x1d5e5, (4752, 1)),
- (0x1d430, (4339, 1)),
- (0xfca0, (3015, 2)),
- (0x1d769, (5138, 1)),
- (0xfe55, (3808, 1)),
- (0xfd72, (3438, 3)),
- (0xb2, (6, 1)),
- (0x333b, (1909, 5)),
- (0xfbae, (2585, 1)),
- (0x1d727, (5072, 1)),
- (0x246d, (573, 2)),
- (0x332c, (1846, 4)),
- (0x1d79a, (5187, 1)),
- (0xfd81, (3483, 3)),
- (0xff07, (4015, 1)),
- (0x1d76b, (5140, 1)),
- (0x2fb1, (1034, 1)),
- (0x1d4ef, (4518, 1)),
- (0x3193, (1179, 1)),
- (0xfbec, (2621, 3)),
- (0x1d410, (4307, 1)),
- (0x2177, (527, 4)),
- (0xfcfa, (3200, 2)),
- (0x1ee8e, (5451, 1)),
- (0xfed8, (3958, 1)),
- (0x32b8, (1568, 2)),
- (0xfb7f, (2536, 1)),
- (0x1d5f4, (4767, 1)),
- (0x33e0, (2351, 2)),
- (0x1e055, (5324, 1)),
- (0xffac, (4180, 1)),
- (0x1e9a, (234, 2)),
- (0xfdf7, (3716, 4)),
- (0x1d493, (4437, 1)),
- (0x2085, (340, 1)),
- (0x2148, (433, 1)),
- (0x1d4e9, (4512, 1)),
- (0x1d73c, (5093, 1)),
- (0x1da8, (210, 1)),
- (0xfeba, (3928, 1)),
- (0x1d48e, (4432, 1)),
- (0x1ee6c, (5422, 1)),
- (0x1d628, (4819, 1)),
- (0x1d6d1, (4986, 1)),
- (0x2130, (413, 1)),
- (0xff6c, (4116, 1)),
- (0x1d7b4, (5213, 1)),
- (0x1da4, (206, 1)),
- (0x1e061, (5336, 1)),
- (0x3224, (1319, 3)),
- (0x3229, (1334, 3)),
- (0x1d7ff, (5286, 1)),
- (0x1d657, (4866, 1)),
- (0xfee9, (3975, 1)),
- (0x32f6, (1659, 1)),
- (0xfc13, (2716, 2)),
- (0x1d46e, (4400, 1)),
- (0x2472, (583, 2)),
- (0x1d6ba, (4963, 1)),
- (0xfd05, (3222, 2)),
- (0x33d7, (2328, 2)),
- (0xfc17, (2724, 2)),
- (0x2170, (513, 1)),
- (0xfd1c, (3268, 2)),
- (0x3382, (2123, 2)),
- (0x1d764, (5133, 1)),
- (0x1ee95, (5458, 1)),
- (0x2f24, (893, 1)),
- (0x32e5, (1642, 1)),
- (0x1d409, (4300, 1)),
- (0x1d43, (157, 1)),
- (0x1d597, (4674, 1)),
- (0x2f81, (986, 1)),
- (0xfc4a, (2826, 2)),
- (0x1d713, (5052, 1)),
- (0x1d7a1, (5194, 1)),
- (0xff74, (4124, 1)),
- (0xff7d, (4133, 1)),
- (0x2483, (638, 4)),
- (0x3323, (1817, 3)),
- (0x1e059, (5328, 1)),
- (0x1d558, (4611, 1)),
- (0xfc37, (2788, 2)),
- (0x2f64, (957, 1)),
- (0xfe58, (3811, 1)),
- (0x32ee, (1651, 1)),
- (0xfc6a, (2902, 2)),
- (0x1d466, (4392, 1)),
- (0x207e, (333, 1)),
- (0x1e050, (5319, 1)),
- (0x1d5ed, (4760, 1)),
- (0xfc97, (2992, 3)),
- (0x1d791, (5178, 1)),
- (0x1d7bd, (5222, 1)),
- (0x314d, (1112, 1)),
- (0x33aa, (2219, 3)),
- (0xfc0c, (2702, 2)),
- (0x2f47, (928, 1)),
- (0x3230, (1355, 3)),
- (0xfdc6, (3684, 3)),
- (0x1d614, (4799, 1)),
- (0x3291, (1522, 1)),
- (0xfe31, (3771, 1)),
- (0x1d706, (5039, 1)),
- (0xfe78, (3842, 2)),
- (0x325a, (1440, 2)),
- (0x2f84, (989, 1)),
- (0xfca1, (3017, 2)),
- (0x24bb, (792, 1)),
- (0x2094, (354, 1)),
- (0x1d4f8, (4527, 1)),
- (0xfcfe, (3208, 2)),
- (0x1d487, (4425, 1)),
- (0x1d6fd, (5030, 1)),
- (0x1d559, (4612, 1)),
- (0x2074, (323, 1)),
- (0x2112, (391, 1)),
- (0xfcd5, (3121, 2)),
- (0x2f06, (863, 1)),
- (0x107ba, (4290, 1)),
- (0xa7f4, (2443, 1)),
- (0x24bf, (796, 1)),
- (0x1d49c, (4446, 1)),
- (0x1d63c, (4839, 1)),
- (0x32a2, (1539, 1)),
- (0x1f220, (5668, 1)),
- (0x1d60f, (4794, 1)),
- (0x32d5, (1626, 1)),
- (0xfcec, (3169, 2)),
- (0xfc49, (2824, 2)),
- (0xfe70, (3830, 2)),
- (0x2f45, (926, 1)),
- (0x33b8, (2258, 2)),
- (0x2e2, (85, 1)),
- (0x2fba, (1043, 1)),
- (0x32c6, (1596, 2)),
- (0x1ee87, (5445, 1)),
- (0xffb3, (4187, 1)),
- (0xfb71, (2522, 1)),
- (0xff0b, (4019, 1)),
- (0xfd26, (3288, 2)),
- (0xfc63, (2881, 3)),
- (0x3131, (1084, 1)),
- (0xff6f, (4119, 1)),
- (0x24b9, (790, 1)),
- (0x32b1, (1554, 2)),
- (0xfda0, (3570, 3)),
- (0x1d72e, (5079, 1)),
- (0x1d64d, (4856, 1)),
- (0xfb8f, (2552, 1)),
- (0x1e03c, (5299, 1)),
- (0xfd39, (3326, 2)),
- (0xfd8b, (3513, 3)),
- (0x1079a, (4259, 1)),
- (0xfb95, (2558, 1)),
- (0x107af, (4280, 1)),
- (0x1f16c, (5642, 2)),
- (0x1d793, (5180, 1)),
- (0x1d437, (4346, 1)),
- (0x3282, (1507, 1)),
- (0xbe, (21, 3)),
- (0x2c7d, (853, 1)),
- (0xfec8, (3942, 1)),
- (0xfc99, (2998, 3)),
- (0x337d, (2111, 2)),
- (0x3290, (1521, 1)),
- (0x2f0d, (870, 1)),
- (0x1d6be, (4967, 1)),
- (0x1d5c6, (4721, 1)),
- (0xff38, (4064, 1)),
- (0xfda9, (3597, 3)),
- (0x1d690, (4923, 1)),
- (0x1d42d, (4336, 1)),
- (0x1d524, (4566, 1)),
- (0x3f5, (108, 1)),
- (0x1d68f, (4922, 1)),
- (0x1d5af, (4698, 1)),
- (0xfd5e, (3378, 3)),
- (0xfef7, (3993, 3)),
- (0x33e8, (2367, 2)),
- (0x1d4cc, (4483, 1)),
- (0x1d42f, (4338, 1)),
- (0xfe10, (3757, 1)),
- (0x1d57e, (4649, 1)),
- (0x107b7, (4287, 1)),
- (0x1d499, (4443, 1)),
- (0x1ee0f, (5363, 1)),
- (0xfc96, (2990, 2)),
- (0x1d4d2, (4489, 1)),
- (0xffe9, (4229, 1)),
- (0xffa5, (4173, 1)),
- (0x3299, (1530, 1)),
- (0x1d5c4, (4719, 1)),
- (0xfe5c, (3815, 1)),
- (0x17f, (34, 1)),
- (0x1d7ea, (5265, 1)),
- (0x1d4b0, (4458, 1)),
- (0x1d5be, (4713, 1)),
- (0x33d9, (2334, 3)),
- (0x32e7, (1644, 1)),
- (0x1d6e2, (5003, 1)),
- (0xffad, (4181, 1)),
- (0xfcae, (3043, 2)),
- (0xfcda, (3131, 2)),
- (0xfc1b, (2732, 2)),
- (0x2f62, (955, 1)),
- (0x320a, (1222, 3)),
- (0x3f9, (109, 1)),
- (0xfdc1, (3669, 3)),
- (0x2f72, (971, 1)),
- (0x316d, (1144, 1)),
- (0x322b, (1340, 3)),
- (0x2157, (457, 3)),
- (0x1d659, (4868, 1)),
- (0x1d3c, (150, 1)),
- (0x333e, (1923, 4)),
- (0x217e, (541, 1)),
- (0x1f11b, (5545, 3)),
- (0x1ee74, (5429, 1)),
- (0x1d458, (4378, 1)),
- (0xfbfa, (2663, 3)),
- (0xfeb3, (3921, 1)),
- (0xfb5f, (2504, 1)),
- (0x2fc9, (1058, 1)),
- (0x315a, (1125, 1)),
- (0x1d4a9, (4452, 1)),
- (0xfd31, (3310, 2)),
- (0x3139, (1092, 1)),
- (0x1db0, (218, 1)),
- (0x1d4f3, (4522, 1)),
- (0xfccf, (3109, 2)),
- (0xfb80, (2537, 1)),
- (0xfc6e, (2910, 2)),
- (0x1d768, (5137, 1)),
- (0x2b6, (68, 1)),
- (0x333a, (1905, 4)),
- (0x1d7c9, (5234, 1)),
- (0x1f13c, (5611, 1)),
- (0x1d6a2, (4941, 1)),
- (0x2006, (281, 1)),
- (0x1d445, (4360, 1)),
- (0x1d763, (5132, 1)),
- (0x1d5fa, (4773, 1)),
- (0x3241, (1406, 3)),
- (0xfe4a, (3795, 2)),
- (0x326d, (1465, 1)),
- (0x1d6c2, (4971, 1)),
- (0xfd7d, (3471, 3)),
- (0x3370, (2080, 3)),
- (0x1d6bb, (4964, 1)),
- (0x1d78f, (5176, 1)),
- (0x1d4e6, (4509, 1)),
- (0xff12, (4026, 1)),
- (0xfb05, (2463, 2)),
- (0x1ee1b, (5375, 1)),
- (0x1d609, (4788, 1)),
- (0xfe79, (3844, 2)),
- (0xfbf6, (2651, 3)),
- (0x1d780, (5161, 1)),
- (0xfd38, (3324, 2)),
- (0x1d4de, (4501, 1)),
- (0x3182, (1165, 1)),
- (0xfe48, (3792, 1)),
- (0xfe5e, (3817, 1)),
- (0x1ee1c, (5376, 1)),
- (0x3319, (1774, 6)),
- (0x323f, (1400, 3)),
- (0x2f03, (860, 1)),
- (0x1d566, (4625, 1)),
- (0xfcf3, (3184, 3)),
- (0x1d581, (4652, 1)),
- (0x1d6eb, (5012, 1)),
- (0x1e047, (5310, 1)),
- (0x3301, (1675, 4)),
- (0x2fa8, (1025, 1)),
- (0x249b, (706, 3)),
- (0xff70, (4120, 1)),
- (0x1f219, (5661, 1)),
- (0x1d441, (4356, 1)),
- (0xfce9, (3163, 2)),
- (0x32cd, (1613, 3)),
- (0x1d70d, (5046, 1)),
- (0xff61, (4105, 1)),
- (0x2496, (691, 3)),
- (0x1d416, (4313, 1)),
- (0x3390, (2154, 2)),
- (0x1d756, (5119, 1)),
- (0x1e04a, (5313, 1)),
- (0xfc6b, (2904, 2)),
- (0xfc50, (2838, 2)),
- (0x1d572, (4637, 1)),
- (0xffce, (4209, 1)),
- (0x2f12, (875, 1)),
- (0xff95, (4157, 1)),
- (0xfb99, (2562, 1)),
- (0xff46, (4078, 1)),
- (0xfdb7, (3639, 3)),
- (0x2156, (454, 3)),
- (0xff52, (4090, 1)),
- (0x1f241, (5699, 3)),
- (0x1d40f, (4306, 1)),
- (0x1d440, (4355, 1)),
- (0x3f1, (105, 1)),
- (0x2078, (327, 1)),
- (0x1d66c, (4887, 1)),
- (0x1f13e, (5613, 1)),
- (0xfc24, (2750, 2)),
- (0xfe96, (3892, 1)),
- (0x1d460, (4386, 1)),
- (0x1d6c9, (4978, 1)),
- (0x3330, (1865, 3)),
- (0x2f95, (1006, 1)),
- (0x1d71e, (5063, 1)),
- (0x1d51e, (4560, 1)),
- (0x10782, (4236, 1)),
- (0xfc26, (2754, 2)),
- (0xfd1e, (3272, 2)),
- (0x2145, (430, 1)),
- (0x327b, (1492, 2)),
- (0xfcbc, (3071, 2)),
- (0xff39, (4065, 1)),
- (0xfc9c, (3007, 2)),
- (0xfe62, (3821, 1)),
- (0x1d41c, (4319, 1)),
- (0x1d691, (4924, 1)),
- (0x1d488, (4426, 1)),
- (0x1ee4f, (5406, 1)),
- (0x1d5e4, (4751, 1)),
- (0x1e03d, (5300, 1)),
- (0xfd55, (3351, 3)),
- (0xfcbd, (3073, 2)),
- (0x3297, (1528, 1)),
- (0x1d5e0, (4747, 1)),
- (0x3192, (1178, 1)),
- (0x32d2, (1623, 1)),
- (0x2f9e, (1015, 1)),
- (0xfd1a, (3264, 2)),
- (0x32e6, (1643, 1)),
- (0x1eeaf, (5477, 1)),
- (0x24d6, (819, 1)),
- (0xfef4, (3986, 1)),
- (0x1ee72, (5428, 1)),
- (0x1d5d3, (4734, 1)),
- (0xfd0c, (3236, 2)),
- (0x1d66b, (4886, 1)),
- (0xff5a, (4098, 1)),
- (0xfe57, (3810, 1)),
- (0xfb6a, (2515, 1)),
- (0x1d44c, (4367, 1)),
- (0x2474, (587, 3)),
- (0xfdb3, (3627, 3)),
- (0xfb92, (2555, 1)),
- (0x2098, (358, 1)),
- (0x1d5a9, (4692, 1)),
- (0x24b6, (787, 1)),
- (0x1d626, (4817, 1)),
- (0xab69, (2450, 1)),
- (0x1d630, (4827, 1)),
- (0xfb6c, (2517, 1)),
- (0x1d76f, (5144, 1)),
- (0x3155, (1120, 1)),
- (0xfe97, (3893, 1)),
- (0x1dbb, (229, 1)),
- (0x33bd, (2268, 2)),
- (0x1d54c, (4600, 1)),
- (0x2124, (408, 1)),
- (0x33d2, (2315, 3)),
- (0x3236, (1373, 3)),
- (0x1f112, (5518, 3)),
- (0x1d37, (146, 1)),
- (0x132, (24, 2)),
- (0x329e, (1535, 1)),
- (0x1d65a, (4869, 1)),
- (0xfdf8, (3720, 4)),
- (0x385, (92, 3)),
- (0x2f71, (970, 1)),
- (0x1ee61, (5415, 1)),
- (0xfe3d, (3783, 1)),
- (0x3153, (1118, 1)),
- (0xfccc, (3103, 2)),
- (0x3203, (1201, 3)),
- (0xfe3f, (3785, 1)),
- (0x1d550, (4604, 1)),
- (0x1d6e9, (5010, 1)),
- (0x1d675, (4896, 1)),
- (0x3f4, (107, 1)),
- (0x1d53e, (4591, 1)),
- (0x315c, (1127, 1)),
- (0x32ac, (1549, 1)),
- (0x24cd, (810, 1)),
- (0xffe6, (4227, 1)),
- (0x3166, (1137, 1)),
- (0x1ee6d, (5423, 1)),
- (0x24d3, (816, 1)),
- (0xffee, (4234, 1)),
- (0x1d777, (5152, 1)),
- (0xff55, (4093, 1)),
- (0x1d5de, (4745, 1)),
- (0x1d593, (4670, 1)),
- (0x1ee2b, (5386, 1)),
- (0x1d486, (4424, 1)),
- (0xfd71, (3435, 3)),
- (0xfef9, (3999, 3)),
- (0x326a, (1462, 1)),
- (0x33d6, (2325, 3)),
- (0x3345, (1947, 3)),
- (0x2d9, (73, 2)),
- (0xfbe4, (2609, 1)),
- (0x3149, (1108, 1)),
- (0x1d40d, (4304, 1)),
- (0x1f235, (5689, 1)),
- (0x1d6de, (4999, 1)),
- (0x677, (116, 2)),
- (0x1d656, (4865, 1)),
- (0x1d3d, (151, 1)),
- (0x1d6f0, (5017, 1)),
- (0xfe34, (3774, 1)),
- (0x1d69c, (4935, 1)),
- (0xfe76, (3838, 2)),
- (0x1daf, (217, 1)),
- (0x1c5, (38, 3)),
- (0x1d739, (5090, 1)),
- (0x33e4, (2359, 2)),
- (0x1d6ed, (5014, 1)),
- (0x1d6d8, (4993, 1)),
- (0xfc81, (2948, 2)),
- (0xfecd, (3947, 1)),
- (0x1d726, (5071, 1)),
- (0x1e051, (5320, 1)),
- (0xfc2c, (2766, 2)),
- (0x1d6f3, (5020, 1)),
- (0xfc3b, (2796, 2)),
- (0xfce7, (3159, 2)),
- (0x33b1, (2244, 2)),
- (0x2161, (484, 2)),
- (0xfe89, (3875, 2)),
- (0x1d63f, (4842, 1)),
- (0x1d5c9, (4724, 1)),
- (0x3266, (1458, 1)),
- (0xfd00, (3212, 2)),
- (0x1d4c, (166, 1)),
- (0x1d7e3, (5258, 1)),
- (0x1d62b, (4822, 1)),
- (0xfdae, (3612, 3)),
- (0x339c, (2182, 2)),
- (0xfc8c, (2970, 2)),
- (0x1d449, (4364, 1)),
- (0xffe2, (4222, 1)),
- (0x222f, (551, 2)),
- (0xfc62, (2878, 3)),
- (0x1d70a, (5043, 1)),
- (0x2fb3, (1036, 1)),
- (0x1f239, (5693, 1)),
- (0x32dc, (1633, 1)),
- (0x1d7ad, (5206, 1)),
- (0x3303, (1684, 3)),
- (0x248b, (664, 2)),
- (0x3168, (1139, 1)),
- (0xfdf0, (3690, 3)),
- (0xff8b, (4147, 1)),
- (0x1d5c1, (4716, 1)),
- (0x320f, (1238, 4)),
- (0x1f145, (5620, 1)),
- (0x1f118, (5536, 3)),
- (0xffa0, (4168, 1)),
- (0x335a, (2022, 2)),
- (0x1d632, (4829, 1)),
- (0x33eb, (2375, 3)),
- (0x2120, (401, 2)),
- (0x24da, (823, 1)),
- (0xff28, (4048, 1)),
- (0xfeaa, (3912, 1)),
- (0x2fad, (1030, 1)),
- (0x20a8, (363, 2)),
- (0x33f3, (2399, 3)),
- (0x32e2, (1639, 1)),
- (0x3318, (1770, 4)),
- (0x1ee35, (5395, 1)),
- (0x1d5cd, (4728, 1)),
- (0x325f, (1450, 2)),
- (0x3365, (2047, 3)),
- (0x1d4f, (168, 1)),
- (0x24e7, (836, 1)),
- (0xfc76, (2926, 2)),
- (0xfedd, (3963, 1)),
- (0xfcca, (3099, 2)),
- (0x208b, (346, 1)),
- (0x1f14e, (5633, 3)),
- (0x1ee89, (5447, 1)),
- (0x217d, (540, 1)),
- (0x1d770, (5145, 1)),
- (0x1d4b8, (4466, 1)),
- (0xfca5, (3025, 2)),
- (0x1d701, (5034, 1)),
- (0x3253, (1426, 2)),
- (0xfe8e, (3884, 1)),
- (0xfc56, (2850, 2)),
- (0x1d469, (4395, 1)),
- (0x3394, (2165, 3)),
- (0xfbe2, (2607, 1)),
- (0x2048, (312, 2)),
- (0xfcf9, (3198, 2)),
- (0xeb3, (122, 2)),
- (0x2fc7, (1056, 1)),
- (0x3376, (2095, 2)),
- (0x10784, (4238, 1)),
- (0x1d6ad, (4950, 1)),
- (0xff80, (4136, 1)),
- (0x1d498, (4442, 1)),
- (0x1f141, (5616, 1)),
- (0x33a5, (2205, 2)),
- (0x1d683, (4910, 1)),
- (0xfdba, (3648, 3)),
- (0x2110, (389, 1)),
- (0x1d6dc, (4997, 1)),
- (0x1d4bf, (4471, 1)),
- (0x1d7d6, (5245, 1)),
- (0x1f226, (5674, 1)),
- (0x1d60d, (4792, 1)),
- (0x2025, (290, 2)),
- (0x1f247, (5717, 3)),
- (0xfe90, (3886, 1)),
- (0x330d, (1721, 4)),
- (0xfb5a, (2499, 1)),
- (0x2fa7, (1024, 1)),
- (0x33bb, (2264, 2)),
- (0x1d70b, (5044, 1)),
- (0x2dd, (81, 2)),
- (0x1d795, (5182, 1)),
- (0x2488, (658, 2)),
- (0xfc4c, (2830, 2)),
- (0x1d599, (4676, 1)),
- (0xfce3, (3151, 2)),
- (0x1d5bb, (4710, 1)),
- (0x2f8c, (997, 1)),
- (0x1d7fe, (5285, 1)),
- (0x1d42c, (4335, 1)),
- (0xff78, (4128, 1)),
- (0x1d67a, (4901, 1)),
- (0x1d72c, (5077, 1)),
- (0xff68, (4112, 1)),
- (0x317a, (1157, 1)),
- (0x1d70f, (5048, 1)),
- (0x32c9, (1602, 3)),
- (0xedd, (126, 2)),
- (0x1d5f1, (4764, 1)),
- (0x1d4c2, (4474, 1)),
- (0xff24, (4044, 1)),
- (0xff9a, (4162, 1)),
- (0x1d671, (4892, 1)),
- (0xffcf, (4210, 1)),
- (0x2f0b, (868, 1)),
- (0x32cc, (1611, 2)),
- (0x1d6fa, (5027, 1)),
- (0x1d616, (4801, 1)),
- (0xfb15, (2471, 2)),
- (0xfee7, (3973, 1)),
- (0xff96, (4158, 1)),
- (0x3d2, (97, 1)),
- (0x1d5d9, (4740, 1)),
- (0x1ffd, (271, 2)),
- (0xfbb1, (2589, 2)),
- (0xfca3, (3021, 2)),
- (0x2f7f, (984, 1)),
- (0x2f42, (923, 1)),
- (0xfc27, (2756, 2)),
- (0x1eea7, (5470, 1)),
- (0x212d, (411, 1)),
- (0x1d35, (144, 1)),
- (0x1e05c, (5331, 1)),
- (0xfcb2, (3051, 2)),
- (0xfc7e, (2942, 2)),
- (0x2f9d, (1014, 1)),
- (0x33f9, (2417, 3)),
- (0x1d606, (4785, 1)),
- (0x1d55b, (4614, 1)),
- (0x1d62f, (4826, 1)),
- (0x2f9f, (1016, 1)),
- (0x1dbc, (230, 1)),
- (0xff3b, (4067, 1)),
- (0x32d8, (1629, 1)),
- (0x1d568, (4627, 1)),
- (0x33e5, (2361, 2)),
- (0x2f82, (987, 1)),
- (0xfea7, (3909, 1)),
- (0x1d55d, (4616, 1)),
- (0x1d4ac, (4455, 1)),
- (0x24b2, (775, 3)),
- (0xfd37, (3322, 2)),
- (0x2f80, (985, 1)),
- (0x1d4df, (4502, 1)),
- (0xfb73, (2524, 1)),
- (0xfdc7, (3687, 3)),
- (0x1d48, (162, 1)),
- (0xfbb0, (2587, 2)),
- (0x1d704, (5037, 1)),
- (0x1d481, (4419, 1)),
- (0x2f5b, (948, 1)),
- (0x1e034, (5291, 1)),
- (0x2b2, (64, 1)),
- (0x1d41d, (4320, 1)),
- (0xfcce, (3107, 2)),
- (0x33a8, (2213, 4)),
- (0x1d6e4, (5005, 1)),
- (0x1d7c7, (5232, 1)),
- (0x32b6, (1564, 2)),
- (0x3218, (1274, 4)),
- (0xfdf9, (3724, 3)),
- (0xfd07, (3226, 2)),
- (0xff69, (4113, 1)),
- (0x3196, (1182, 1)),
- (0x1d7ec, (5267, 1)),
- (0xfcde, (3139, 2)),
- (0x3274, (1478, 2)),
- (0xfd11, (3246, 2)),
- (0xfdb9, (3645, 3)),
- (0xfccd, (3105, 2)),
- (0x2fa2, (1019, 1)),
- (0xfb21, (2478, 1)),
- (0x1d401, (4292, 1)),
- (0x1ee0d, (5361, 1)),
- (0x338d, (2148, 2)),
- (0xfd36, (3320, 2)),
- (0xfc44, (2814, 2)),
- (0x1d573, (4638, 1)),
- (0x327c, (1494, 5)),
- (0x1d787, (5168, 1)),
- (0x2f1d, (886, 1)),
- (0x1d4ca, (4481, 1)),
- (0x2f32, (907, 1)),
- (0x1d443, (4358, 1)),
- (0xfec5, (3939, 1)),
- (0x1f237, (5691, 1)),
- (0xfb9f, (2568, 1)),
- (0x332e, (1855, 6)),
- (0x24cc, (809, 1)),
- (0x2162, (486, 3)),
- (0xffb6, (4190, 1)),
- (0xfb9b, (2564, 1)),
- (0x1fce, (250, 3)),
- (0x318e, (1177, 1)),
- (0x32fa, (1663, 1)),
- (0x32db, (1632, 1)),
- (0xfee5, (3971, 1)),
- (0xfe41, (3787, 1)),
- (0x1d5df, (4746, 1)),
- (0x33f6, (2408, 3)),
- (0x1d585, (4656, 1)),
- (0xfd92, (3528, 3)),
- (0x1d5b, (180, 1)),
- (0x1078a, (4243, 1)),
- (0x337a, (2105, 2)),
- (0xfdc3, (3675, 3)),
- (0x1078e, (4247, 1)),
- (0xff63, (4107, 1)),
- (0xfedf, (3965, 1)),
- (0xfd5c, (3372, 3)),
- (0x1e043, (5306, 1)),
- (0x1d47b, (4413, 1)),
- (0xfe18, (3765, 1)),
- (0x1d7c5, (5230, 1)),
- (0xfbda, (2598, 1)),
- (0x1d59d, (4680, 1)),
- (0x1e058, (5327, 1)),
- (0x216a, (504, 2)),
- (0x1d798, (5185, 1)),
- (0x1ee37, (5397, 1)),
- (0xfc22, (2746, 2)),
- (0x3171, (1148, 1)),
- (0xfd66, (3402, 3)),
- (0x1eea2, (5466, 1)),
- (0xfb88, (2545, 1)),
- (0x1d6b4, (4957, 1)),
- (0x32e3, (1640, 1)),
- (0x208e, (349, 1)),
- (0x3223, (1316, 3)),
- (0x3137, (1090, 1)),
- (0x222c, (546, 2)),
- (0x2f8b, (996, 1)),
- (0x1f11a, (5542, 3)),
- (0xfc4f, (2836, 2)),
- (0x1d52b, (4573, 1)),
- (0xfba5, (2575, 2)),
- (0x1d465, (4391, 1)),
- (0xff50, (4088, 1)),
- (0xff2b, (4051, 1)),
- (0xfc60, (2872, 3)),
- (0x326e, (1466, 2)),
- (0xfb78, (2529, 1)),
- (0x2080, (335, 1)),
- (0xfe37, (3777, 1)),
- (0x1f243, (5705, 3)),
- (0xfb01, (2453, 2)),
- (0x32a1, (1538, 1)),
- (0x1d6d9, (4994, 1)),
- (0x2007, (282, 1)),
- (0x321a, (1282, 4)),
- (0x1d730, (5081, 1)),
- (0xfb7a, (2531, 1)),
- (0x3175, (1152, 1)),
- (0x2136, (418, 1)),
- (0x3355, (2007, 2)),
- (0x32b5, (1562, 2)),
- (0xfe3b, (3781, 1)),
- (0xfd2a, (3296, 2)),
- (0x24ad, (760, 3)),
- (0x1d471, (4403, 1)),
- (0x3272, (1474, 2)),
- (0x1d77b, (5156, 1)),
- (0xfd68, (3408, 3)),
- (0x1d65d, (4872, 1)),
- (0x1f138, (5607, 1)),
- (0x1e066, (5341, 1)),
- (0x217c, (539, 1)),
- (0x1d586, (4657, 1)),
- (0x1d785, (5166, 1)),
- (0x1d73d, (5094, 1)),
- (0xfd53, (3345, 3)),
- (0x208c, (347, 1)),
- (0x3326, (1827, 3)),
- (0x1d517, (4554, 1)),
- (0x1ee6f, (5425, 1)),
- (0xfcb0, (3047, 2)),
- (0xfe19, (3766, 3)),
- (0xfb25, (2482, 1)),
- (0xff3c, (4068, 1)),
- (0xfc7f, (2944, 2)),
- (0x1d680, (4907, 1)),
- (0xff47, (4079, 1)),
- (0x3361, (2036, 2)),
- (0x1d5e7, (4754, 1)),
- (0x1e031, (5288, 1)),
- (0x10791, (4250, 1)),
- (0x1f125, (5575, 3)),
- (0x1d716, (5055, 1)),
- (0xfe11, (3758, 1)),
- (0x1d7cb, (5236, 1)),
- (0x316a, (1141, 1)),
- (0x1f16a, (5638, 2)),
- (0x1d7af, (5208, 1)),
- (0xfc2b, (2764, 2)),
- (0xff1e, (4038, 1)),
- (0x2fa6, (1023, 1)),
- (0xfd6c, (3420, 3)),
- (0x2116, (394, 2)),
- (0x3327, (1830, 2)),
- (0xfc21, (2744, 2)),
- (0x1d30, (139, 1)),
- (0x1d6fe, (5031, 1)),
- (0xfc3c, (2798, 2)),
- (0xfbf7, (2654, 3)),
- (0x1d66e, (4889, 1)),
- (0xfe36, (3776, 1)),
- (0x1d600, (4779, 1)),
- (0x32c4, (1592, 2)),
- (0xfcee, (3173, 2)),
- (0xfea8, (3910, 1)),
- (0x1d7cf, (5238, 1)),
- (0x1e05d, (5332, 1)),
- (0x1d682, (4909, 1)),
- (0x2498, (697, 3)),
- (0xfedc, (3962, 1)),
- (0x1d6ec, (5013, 1)),
- (0x2f1e, (887, 1)),
- (0x1d69d, (4936, 1)),
- (0xfc55, (2848, 2)),
- (0x1ee97, (5460, 1)),
- (0x1d5bf, (4714, 1)),
- (0x207f, (334, 1)),
- (0x1eeb4, (5482, 1)),
- (0xfc38, (2790, 2)),
- (0x1da7, (209, 1)),
- (0x1d705, (5038, 1)),
- (0x1d720, (5065, 1)),
- (0x215b, (469, 3)),
- (0x1d4fc, (4531, 1)),
- (0x1e03f, (5302, 1)),
- (0x1d59a, (4677, 1)),
- (0xfcfd, (3206, 2)),
- (0x10781, (4235, 1)),
- (0x2f9c, (1013, 1)),
- (0x1d5b3, (4702, 1)),
- (0x1d7a4, (5197, 1)),
- (0x107a7, (4272, 1)),
- (0xfb90, (2553, 1)),
- (0x1d490, (4434, 1)),
- (0x1d543, (4595, 1)),
- (0x2f6a, (963, 1)),
- (0x3366, (2050, 3)),
- (0x1d414, (4311, 1)),
- (0x1d633, (4830, 1)),
- (0x335f, (2032, 2)),
- (0x32a8, (1545, 1)),
- (0x33cf, (2309, 2)),
- (0xfefc, (4007, 2)),
- (0x1d6a3, (4942, 1)),
- (0xffba, (4194, 1)),
- (0x1078d, (4246, 1)),
- (0x1d6c4, (4973, 1)),
- (0x1e044, (5307, 1)),
- (0x1d4aa, (4453, 1)),
- (0x1d595, (4672, 1)),
- (0x3331, (1868, 3)),
- (0x1d7f7, (5278, 1)),
- (0x1d6fb, (5028, 1)),
- (0x1d49, (163, 1)),
- (0x1d49e, (4447, 1)),
- (0x1d411, (4308, 1)),
- (0x2107, (380, 1)),
- (0x205f, (320, 1)),
- (0x1e038, (5295, 1)),
- (0xfb4f, (2487, 2)),
- (0x1ee9a, (5463, 1)),
- (0x1d43c, (4351, 1)),
- (0x32ad, (1550, 1)),
- (0x1d468, (4394, 1)),
- (0x3184, (1167, 1)),
- (0x3162, (1133, 1)),
- (0x2f69, (962, 1)),
- (0xfe81, (3859, 2)),
- (0x1ee05, (5353, 1)),
- (0xfea5, (3907, 1)),
- (0x32ba, (1572, 2)),
- (0x32f0, (1653, 1)),
- (0x1d7d9, (5248, 1)),
- (0x1d4c0, (4472, 1)),
- (0xfea3, (3905, 1)),
- (0x321d, (1294, 7)),
- (0x1d6c7, (4976, 1)),
- (0x1fcf, (253, 3)),
- (0x33bf, (2272, 2)),
- (0x1d718, (5057, 1)),
- (0x10790, (4249, 1)),
- (0x1d501, (4536, 1)),
- (0x1d610, (4795, 1)),
- (0x32e0, (1637, 1)),
- (0xfd21, (3278, 2)),
- (0x1d6db, (4996, 1)),
- (0x1f13d, (5612, 1)),
- (0x3038, (1073, 1)),
- (0x33a7, (2210, 3)),
- (0xfd25, (3286, 2)),
- (0x1d7e1, (5256, 1)),
- (0xffbd, (4197, 1)),
- (0x1ee8c, (5449, 1)),
- (0x1ee08, (5356, 1)),
- (0x33c3, (2282, 2)),
- (0x1d51a, (4557, 1)),
- (0x32bf, (1582, 2)),
- (0x249e, (715, 3)),
- (0x33c8, (2295, 2)),
- (0x1f210, (5651, 1)),
- (0x2179, (533, 1)),
- (0x3222, (1313, 3)),
- (0x1d782, (5163, 1)),
- (0x10789, (4242, 1)),
- (0x3305, (1692, 3)),
- (0xfe3a, (3780, 1)),
- (0x1d631, (4828, 1)),
- (0x3199, (1185, 1)),
- (0xffd4, (4213, 1)),
- (0x209c, (362, 1)),
- (0x3247, (1418, 1)),
- (0xfc88, (2962, 2)),
- (0xffb9, (4193, 1)),
- (0x1d46c, (4398, 1)),
- (0x1d636, (4833, 1)),
- (0x315f, (1130, 1)),
- (0xfb8b, (2548, 1)),
- (0xb5, (10, 1)),
- (0x1d419, (4316, 1)),
- (0xfed5, (3955, 1)),
- (0x1d6ca, (4979, 1)),
- (0x339e, (2186, 2)),
- (0x1d641, (4844, 1)),
- (0x1d6af, (4952, 1)),
- (0x3288, (1513, 1)),
- (0x2154, (448, 3)),
- (0xfe8d, (3883, 1)),
- (0x1d40b, (4302, 1)),
- (0x1d607, (4786, 1)),
- (0xff26, (4046, 1)),
- (0x1d758, (5121, 1)),
- (0xfc4e, (2834, 2)),
- (0x3364, (2044, 3)),
- (0x1d4f5, (4524, 1)),
- (0x2fc6, (1055, 1)),
- (0x1d5dc, (4743, 1)),
- (0xfc5e, (2866, 3)),
- (0xff36, (4062, 1)),
- (0x24c5, (802, 1)),
- (0x1d587, (4658, 1)),
- (0x2091, (351, 1)),
- (0x1d750, (5113, 1)),
- (0x24b0, (769, 3)),
- (0x1f122, (5566, 3)),
- (0x3339, (1902, 3)),
- (0x1e054, (5323, 1)),
- (0x1d511, (4549, 1)),
- (0x3335, (1887, 3)),
- (0xffaa, (4178, 1)),
- (0x1f240, (5696, 3)),
- (0x1d612, (4797, 1)),
- (0x1d553, (4606, 1)),
- (0x1d5aa, (4693, 1)),
- (0xaa, (3, 1)),
- (0xff62, (4106, 1)),
- (0x24de, (827, 1)),
- (0x1d7e2, (5257, 1)),
- (0xfe6a, (3828, 1)),
- (0x2f6f, (968, 1)),
- (0xfd59, (3363, 3)),
- (0x1f1, (56, 2)),
- (0x1d33, (142, 1)),
- (0x1078f, (4248, 1)),
- (0x1d536, (4584, 1)),
- (0x2f0a, (867, 1)),
- (0x3244, (1415, 1)),
- (0x246e, (575, 2)),
- (0xfc85, (2956, 2)),
- (0x32f3, (1656, 1)),
- (0x1fbf4, (5729, 1)),
- (0x1d643, (4846, 1)),
- (0xfba0, (2569, 1)),
- (0x1db1, (219, 1)),
- (0x1d457, (4377, 1)),
- (0x1d7d7, (5246, 1)),
- (0x3172, (1149, 1)),
- (0x33b2, (2246, 2)),
- (0x107aa, (4275, 1)),
- (0x2f16, (879, 1)),
- (0x1d731, (5082, 1)),
- (0x1d725, (5070, 1)),
- (0xfbf4, (2645, 3)),
- (0x33f5, (2405, 3)),
- (0x339d, (2184, 2)),
- (0xfcc4, (3087, 2)),
- (0xfc1c, (2734, 2)),
- (0xff11, (4025, 1)),
- (0x1d76d, (5142, 1)),
- (0x1d61c, (4807, 1)),
- (0x1d733, (5084, 1)),
- (0x1d5c7, (4722, 1)),
- (0xff81, (4137, 1)),
- (0x2122, (406, 2)),
- (0x1d4ae, (4456, 1)),
- (0x1f21d, (5665, 1)),
- (0x1d47f, (4417, 1)),
- (0x1d757, (5120, 1)),
- (0xbc, (15, 3)),
- (0x1d621, (4812, 1)),
- (0xffe4, (4225, 1)),
- (0xfec9, (3943, 1)),
- (0x1ee84, (5442, 1)),
- (0xfd98, (3546, 3)),
- (0x3161, (1132, 1)),
- (0x213f, (428, 1)),
- (0x1d9e, (200, 1)),
- (0x1d619, (4804, 1)),
- (0x1d4d6, (4493, 1)),
- (0x1d5c0, (4715, 1)),
- (0x2f7b, (980, 1)),
- (0x1ee0b, (5359, 1)),
- (0x1d746, (5103, 1)),
- (0xfceb, (3167, 2)),
- (0xfef3, (3985, 1)),
- (0xfcf4, (3187, 3)),
- (0xfe7a, (3846, 2)),
- (0x215c, (472, 3)),
- (0x1d4fd, (4532, 1)),
- (0xfba7, (2578, 1)),
- (0xfd3c, (3332, 2)),
- (0x1d46a, (4396, 1)),
- (0x2163, (489, 2)),
- (0x1ee64, (5417, 1)),
- (0x1d692, (4925, 1)),
- (0x1d648, (4851, 1)),
- (0x1d482, (4420, 1)),
- (0x1d576, (4641, 1)),
- (0x1d717, (5056, 1)),
- (0xfe30, (3769, 2)),
- (0x1f232, (5686, 1)),
- (0xfc77, (2928, 2)),
- (0x1d668, (4883, 1)),
- (0x2146, (431, 1)),
- (0xa8, (1, 2)),
- (0xfb93, (2556, 1)),
- (0x1d5ef, (4762, 1)),
- (0xfbfd, (2670, 1)),
- (0x107ab, (4276, 1)),
- (0x1e063, (5338, 1)),
- (0x1d470, (4402, 1)),
- (0x3356, (2009, 6)),
- (0x1d4c5, (4476, 1)),
- (0xfbe7, (2612, 1)),
- (0x24ea, (839, 1)),
- (0x1d519, (4556, 1)),
- (0x1d654, (4863, 1)),
- (0x2f6d, (966, 1)),
- (0x1d518, (4555, 1)),
- (0x1d639, (4836, 1)),
- (0xfd52, (3342, 3)),
- (0x1d79f, (5192, 1)),
- (0x1d775, (5150, 1)),
- (0x3371, (2083, 3)),
- (0x1e048, (5311, 1)),
- (0x1d7ce, (5237, 1)),
- (0xff65, (4109, 1)),
- (0x33a0, (2191, 3)),
- (0x313e, (1097, 1)),
- (0x1d60a, (4789, 1)),
- (0x1d591, (4668, 1)),
- (0x1e04d, (5316, 1)),
- (0x1d5c5, (4720, 1)),
- (0x327a, (1490, 2)),
- (0x1d68, (193, 1)),
- (0xff71, (4121, 1)),
- (0x1d42e, (4337, 1)),
- (0x1d77a, (5155, 1)),
- (0xfe44, (3790, 1)),
- (0x1f132, (5601, 1)),
- (0x1d5f6, (4769, 1)),
- (0x1d77c, (5157, 1)),
- (0x1d66f, (4890, 1)),
- (0x1d7f5, (5276, 1)),
- (0xfcd7, (3125, 2)),
- (0x3188, (1171, 1)),
- (0x1d7a0, (5193, 1)),
- (0xfbe5, (2610, 1)),
- (0xff8d, (4149, 1)),
- (0x107a1, (4266, 1)),
- (0x1d44e, (4369, 1)),
- (0x1d528, (4570, 1)),
- (0x2fc4, (1053, 1)),
- (0x2024, (289, 1)),
- (0x10fc, (135, 1)),
- (0xfdb0, (3618, 3)),
- (0xfcb4, (3055, 2)),
- (0x330c, (1717, 4)),
- (0x316b, (1142, 1)),
- (0x1f111, (5515, 3)),
- (0x2fb8, (1041, 1)),
- (0x3385, (2129, 2)),
- (0x1da9, (211, 1)),
- (0x1d73a, (5091, 1)),
- (0x3293, (1524, 1)),
- (0x1d4cf, (4486, 1)),
- (0x32d6, (1627, 1)),
- (0x338b, (2144, 2)),
- (0x314a, (1109, 1)),
- (0x1f14d, (5631, 2)),
- (0x1e9b, (236, 2)),
- (0x1d64a, (4853, 1)),
- (0x1d7da, (5249, 1)),
- (0xfb17, (2475, 2)),
- (0x1d761, (5130, 1)),
- (0x2097, (357, 1)),
- (0x1fc0, (242, 2)),
- (0x33e3, (2357, 2)),
- (0x1d6b3, (4956, 1)),
- (0x1d5b4, (4703, 1)),
- (0xfd17, (3258, 2)),
- (0xfc2a, (2762, 2)),
- (0x1d76a, (5139, 1)),
- (0x1d68a, (4917, 1)),
- (0x1e039, (5296, 1)),
- (0xfbe9, (2614, 1)),
- (0x1f107, (5504, 2)),
- (0x107a4, (4269, 1)),
- (0x216d, (510, 1)),
- (0x2092, (352, 1)),
- (0xff3d, (4069, 1)),
- (0x107b3, (4283, 1)),
- (0x2f51, (938, 1)),
- (0xfc59, (2856, 2)),
- (0x1d529, (4571, 1)),
- (0x3237, (1376, 3)),
- (0x3215, (1262, 4)),
- (0x2465, (561, 1)),
- (0x1d735, (5086, 1)),
- (0x107b9, (4289, 1)),
- (0xfed3, (3953, 1)),
- (0x203c, (306, 2)),
- (0x2f9b, (1012, 1)),
- (0x2f66, (959, 1)),
- (0xfd75, (3447, 3)),
- (0x1d634, (4831, 1)),
- (0xe33, (120, 2)),
- (0x1dba, (228, 1)),
- (0xfd5a, (3366, 3)),
- (0x2494, (685, 3)),
- (0x315d, (1128, 1)),
- (0x1d509, (4543, 1)),
- (0x1d797, (5184, 1)),
- (0x334f, (1986, 3)),
- (0x1d7fb, (5282, 1)),
- (0x2463, (559, 1)),
- (0xff02, (4010, 1)),
- (0xfb61, (2506, 1)),
- (0x33ec, (2378, 3)),
- (0x1d5f7, (4770, 1)),
- (0x33ae, (2231, 5)),
- (0xfc89, (2964, 2)),
- (0x1d738, (5089, 1)),
- (0x1e030, (5287, 1)),
- (0x1f22a, (5678, 1)),
- (0x2f4b, (932, 1)),
- (0x3302, (1679, 5)),
- (0x1d4d, (167, 1)),
- (0x1d4d7, (4494, 1)),
- (0xfc4d, (2832, 2)),
- (0x1d4e5, (4508, 1)),
- (0x1d542, (4594, 1)),
- (0x3336, (1890, 5)),
- (0x2fb6, (1039, 1)),
- (0x2fa1, (1018, 1)),
- (0x1d71a, (5059, 1)),
- (0xfca4, (3023, 2)),
- (0x1d618, (4803, 1)),
- (0xfcc2, (3083, 2)),
- (0x1dac, (214, 1)),
- (0xfcb8, (3063, 2)),
- (0xfb7c, (2533, 1)),
- (0x317f, (1162, 1)),
- (0x1d7e0, (5255, 1)),
- (0xffc6, (4203, 1)),
- (0x3150, (1115, 1)),
- (0x3276, (1482, 2)),
- (0x328d, (1518, 1)),
- (0x32bc, (1576, 2)),
- (0x133, (26, 2)),
- (0x1f245, (5711, 3)),
- (0x213e, (427, 1)),
- (0xfb66, (2511, 1)),
- (0x2f89, (994, 1)),
- (0x1f12e, (5597, 2)),
- (0x1d4f1, (4520, 1)),
- (0xfc91, (2980, 2)),
- (0xff53, (4091, 1)),
- (0x3306, (1695, 3)),
- (0x2473, (585, 2)),
- (0x1dae, (216, 1)),
- (0xfbac, (2583, 1)),
- (0x33b4, (2250, 2)),
- (0x3214, (1258, 4)),
- (0x32c2, (1588, 2)),
- (0x24ca, (807, 1)),
- (0x1d533, (4581, 1)),
- (0x33f8, (2414, 3)),
- (0xff44, (4076, 1)),
- (0x1d4f7, (4526, 1)),
- (0x1078c, (4245, 1)),
- (0xffca, (4205, 1)),
- (0xfe17, (3764, 1)),
- (0xfbe1, (2606, 1)),
- (0xfc32, (2778, 2)),
- (0x1d625, (4816, 1)),
- (0x140, (30, 2)),
- (0xfeab, (3913, 1)),
- (0x1d6d3, (4988, 1)),
- (0x1d7a8, (5201, 1)),
- (0xfb5d, (2502, 1)),
- (0x3220, (1307, 3)),
- (0x24a5, (736, 3)),
- (0x1d4b3, (4461, 1)),
- (0x107ad, (4278, 1)),
- (0x3399, (2176, 2)),
- (0x2f36, (911, 1)),
- (0xfc74, (2922, 2)),
- (0x1d5a5, (4688, 1)),
- (0x2fc3, (1052, 1)),
- (0x1e06c, (5347, 1)),
- (0x32d9, (1630, 1)),
- (0x1d544, (4596, 1)),
- (0x3221, (1310, 3)),
- (0x1d512, (4550, 1)),
- (0xfece, (3948, 1)),
- (0xfcf7, (3194, 2)),
- (0xfb82, (2539, 1)),
- (0x1d6b8, (4961, 1)),
- (0x3194, (1180, 1)),
- (0xffe5, (4226, 1)),
- (0x32e8, (1645, 1)),
- (0x24af, (766, 3)),
- (0x1fbf1, (5726, 1)),
- (0xfbfc, (2669, 1)),
- (0xb3, (7, 1)),
- (0x24c6, (803, 1)),
- (0x1d749, (5106, 1)),
- (0xfd9a, (3552, 3)),
- (0x1d4b5, (4463, 1)),
- (0xfede, (3964, 1)),
- (0x1d6e7, (5008, 1)),
- (0x2f48, (929, 1)),
- (0x1d4e3, (4506, 1)),
- (0x1eea6, (5469, 1)),
- (0x2f97, (1008, 1)),
- (0x24a8, (745, 3)),
- (0x1d562, (4621, 1)),
- (0x2102, (371, 1)),
- (0x1d61b, (4806, 1)),
- (0x3176, (1153, 1)),
- (0x1d60, (185, 1)),
- (0x1d698, (4931, 1)),
- (0xfed9, (3959, 1)),
- (0x1d61f, (4810, 1)),
- (0x1ee6a, (5421, 1)),
- (0xfd09, (3230, 2)),
- (0x1d561, (4620, 1)),
- (0x1d4e1, (4504, 1)),
- (0x1d7f4, (5275, 1)),
- (0x2f68, (961, 1)),
- (0x1eeb3, (5481, 1)),
- (0x1e062, (5337, 1)),
- (0x2fbe, (1047, 1)),
- (0x2047, (310, 2)),
- (0xff23, (4043, 1)),
- (0xfe77, (3840, 2)),
- (0x1d75b, (5124, 1)),
- (0x1d4b9, (4467, 1)),
- (0x33ba, (2262, 2)),
- (0x2482, (634, 4)),
- (0xffb0, (4184, 1)),
- (0x3164, (1135, 1)),
- (0x24d1, (814, 1)),
- (0x24db, (824, 1)),
- (0x1d5bc, (4711, 1)),
- (0x3396, (2170, 2)),
- (0x1d590, (4667, 1)),
- (0x1d5da, (4741, 1)),
- (0x1d454, (4375, 1)),
- (0x1ee24, (5382, 1)),
- (0x2134, (416, 1)),
- (0x1d7a5, (5198, 1)),
- (0x1e056, (5325, 1)),
- (0x32f7, (1660, 1)),
- (0xfe72, (3834, 2)),
- (0x1e04c, (5315, 1)),
- (0xfef0, (3982, 1)),
- (0x2f0f, (872, 1)),
- (0x2f88, (993, 1)),
- (0x1d4cd, (4484, 1)),
- (0x1d54b, (4599, 1)),
- (0x1d7ba, (5219, 1)),
- (0x1fbf, (240, 2)),
- (0xffeb, (4231, 1)),
- (0x1d5ee, (4761, 1)),
- (0xff72, (4122, 1)),
- (0x1f218, (5660, 1)),
- (0x3234, (1367, 3)),
- (0x1d7ef, (5270, 1)),
- (0x1d425, (4328, 1)),
- (0x1d6ce, (4983, 1)),
- (0x1ee83, (5441, 1)),
- (0x1e04f, (5318, 1)),
- (0x1d483, (4421, 1)),
- (0xff73, (4123, 1)),
- (0xff1c, (4036, 1)),
- (0x33f2, (2396, 3)),
- (0x217b, (536, 3)),
- (0x2004, (279, 1)),
- (0x1d6a4, (4943, 1)),
- (0x326f, (1468, 2)),
- (0xfc57, (2852, 2)),
- (0x32f2, (1655, 1)),
- (0x1d646, (4849, 1)),
- (0x1d412, (4309, 1)),
- (0x249a, (703, 3)),
- (0x1f127, (5581, 3)),
- (0x330b, (1714, 3)),
- (0xfc5c, (2862, 2)),
- (0x2f46, (927, 1)),
- (0x1d40a, (4301, 1)),
- (0x24d8, (821, 1)),
- (0x1d77e, (5159, 1)),
- (0xfd3a, (3328, 2)),
- (0x1d64, (189, 1)),
- (0x315e, (1129, 1)),
- (0x319d, (1189, 1)),
- (0x1ee3b, (5399, 1)),
- (0xfb26, (2483, 1)),
- (0x1d4fe, (4533, 1)),
- (0x2480, (626, 4)),
- (0x216e, (511, 1)),
- (0x1e03b, (5298, 1)),
- (0x1d6b6, (4959, 1)),
- (0xbd, (18, 3)),
- (0x1d42, (156, 1)),
- (0x24a1, (724, 3)),
- (0x33df, (2348, 3)),
- (0xffb5, (4189, 1)),
- (0x1e042, (5305, 1)),
- (0xfc9a, (3001, 3)),
- (0x1d5eb, (4758, 1)),
- (0xfcbf, (3077, 2)),
- (0xfd58, (3360, 3)),
- (0x2464, (560, 1)),
- (0xfe3c, (3782, 1)),
- (0x3246, (1417, 1)),
- (0x2a0c, (840, 4)),
- (0xfdb4, (3630, 3)),
- (0xfd96, (3540, 3)),
- (0x1d407, (4298, 1)),
- (0x3257, (1434, 2)),
- (0x207a, (329, 1)),
- (0x3d5, (102, 1)),
- (0x336b, (2065, 3)),
- (0x32d0, (1621, 1)),
- (0x1eeae, (5476, 1)),
- (0x1d5d5, (4736, 1)),
- (0x1eead, (5475, 1)),
- (0x2f1a, (883, 1)),
- (0xfee0, (3966, 1)),
- (0x2fa3, (1020, 1)),
- (0x1eeb2, (5480, 1)),
- (0xfbf5, (2648, 3)),
- (0x1e067, (5342, 1)),
- (0x3174, (1151, 1)),
- (0xfbe0, (2605, 1)),
- (0x1ee51, (5407, 1)),
- (0xff3f, (4071, 1)),
- (0x3165, (1136, 1)),
- (0x323d, (1394, 3)),
- (0x1d72d, (5078, 1)),
- (0x1d79b, (5188, 1)),
- (0x1d4b6, (4464, 1)),
- (0xfc54, (2846, 2)),
- (0x2fb0, (1033, 1)),
- (0x3228, (1331, 3)),
- (0x1d3a, (149, 1)),
- (0x3213, (1254, 4)),
- (0x1e065, (5340, 1)),
- (0x1d4ff, (4534, 1)),
- (0x1d734, (5085, 1)),
- (0x1d78b, (5172, 1)),
- (0xa69d, (2439, 1)),
- (0x2f96, (1007, 1)),
- (0xfc39, (2792, 2)),
- (0x1f14c, (5629, 2)),
- (0xfedb, (3961, 1)),
- (0x2495, (688, 3)),
- (0x1f124, (5572, 3)),
- (0x1d7dc, (5251, 1)),
- (0x1e053, (5322, 1)),
- (0x2f9a, (1011, 1)),
- (0xfd61, (3387, 3)),
- (0xfd02, (3216, 2)),
- (0x1eeab, (5473, 1)),
- (0x1079f, (4264, 1)),
- (0x1ee86, (5444, 1)),
- (0xfd9b, (3555, 3)),
- (0x1d50f, (4547, 1)),
- (0xfc8e, (2974, 2)),
- (0x1d513, (4551, 1)),
- (0x1d54f, (4603, 1)),
- (0x2173, (519, 2)),
- (0x2f5a, (947, 1)),
- (0x1d78c, (5173, 1)),
- (0x1d767, (5136, 1)),
- (0xfdab, (3603, 3)),
- (0x2f01, (858, 1)),
- (0xfc3f, (2804, 2)),
- (0x33c6, (2288, 4)),
- (0x1d6c0, (4969, 1)),
- (0xfb98, (2561, 1)),
- (0x3151, (1116, 1)),
- (0x1ee09, (5357, 1)),
- (0xfd8a, (3510, 3)),
- (0xff4d, (4085, 1)),
- (0x1d729, (5074, 1)),
- (0xfeb4, (3922, 1)),
- (0xfba4, (2573, 2)),
- (0x1d6b9, (4962, 1)),
- (0x1d6d0, (4985, 1)),
- (0x318d, (1176, 1)),
- (0x1f10a, (5510, 2)),
- (0x2017, (287, 2)),
- (0x1f121, (5563, 3)),
- (0x1d41f, (4322, 1)),
- (0x1d415, (4312, 1)),
- (0x319b, (1187, 1)),
- (0x1d6dd, (4998, 1)),
- (0x337f, (2115, 4)),
- (0x3260, (1452, 1)),
- (0x1fbf6, (5731, 1)),
- (0xfb7b, (2532, 1)),
- (0x1d752, (5115, 1)),
- (0x2f50, (937, 1)),
- (0xfebf, (3933, 1)),
- (0x1d658, (4867, 1)),
- (0xfdfa, (3727, 18)),
- (0x336e, (2074, 3)),
- (0xff51, (4089, 1)),
- (0xfc16, (2722, 2)),
- (0x1d5d, (182, 1)),
- (0x24b8, (789, 1)),
- (0xab5d, (2447, 1)),
- (0x1d41b, (4318, 1)),
- (0xfb68, (2513, 1)),
- (0x1f103, (5496, 2)),
- (0x2f53, (940, 1)),
- (0x3352, (1996, 2)),
- (0x1d5f9, (4772, 1)),
- (0x1d494, (4438, 1)),
- (0x1d52c, (4574, 1)),
- (0x24e6, (835, 1)),
- (0x2faf, (1032, 1)),
- (0x32c1, (1586, 2)),
- (0x2b3, (65, 1)),
- (0xfec1, (3935, 1)),
- (0x1f147, (5622, 1)),
- (0x384, (90, 2)),
- (0x24ba, (791, 1)),
- (0xff87, (4143, 1)),
- (0x1d669, (4884, 1)),
- (0xff35, (4061, 1)),
- (0xfefb, (4005, 2)),
- (0x1d7fa, (5281, 1)),
- (0x1d50, (169, 1)),
- (0xfef2, (3984, 1)),
- (0x3245, (1416, 1)),
- (0x1d78a, (5171, 1)),
- (0xfb75, (2526, 1)),
- (0x1ee91, (5454, 1)),
- (0x33e9, (2369, 3)),
- (0x2139, (421, 1)),
- (0x3258, (1436, 2)),
- (0x3287, (1512, 1)),
- (0x317d, (1160, 1)),
- (0x24ae, (763, 3)),
- (0xff98, (4160, 1)),
- (0x1d596, (4673, 1)),
- (0x1d6b0, (4953, 1)),
- (0x1e069, (5344, 1)),
- (0x1f22c, (5680, 1)),
- (0xff42, (4074, 1)),
- (0xffbb, (4195, 1)),
- (0xff1d, (4037, 1)),
- (0x1d503, (4538, 1)),
- (0x1d6e1, (5002, 1)),
- (0xfcc7, (3093, 2)),
- (0xff60, (4104, 1)),
- (0x1ee5d, (5413, 1)),
- (0x1f115, (5527, 3)),
- (0x1d4c9, (4480, 1)),
- (0x1d567, (4626, 1)),
- (0x1d67e, (4905, 1)),
- (0x33ed, (2381, 3)),
- (0x1e068, (5343, 1)),
- (0xfda6, (3588, 3)),
- (0x33ca, (2299, 2)),
- (0x1d7f8, (5279, 1)),
- (0x33ef, (2387, 3)),
- (0xfd50, (3336, 3)),
- (0x248e, (670, 2)),
- (0xfcd4, (3119, 2)),
- (0xfe98, (3894, 1)),
- (0x32a7, (1544, 1)),
- (0xffa9, (4177, 1)),
- (0x2172, (516, 3)),
- (0x1d5a, (179, 1)),
- (0xff27, (4047, 1)),
- (0x1dad, (215, 1)),
- (0x1d766, (5135, 1)),
- (0x24df, (828, 1)),
- (0xfeae, (3916, 1)),
- (0xfe35, (3775, 1)),
- (0x1d5a3, (4686, 1)),
- (0x1d650, (4859, 1)),
- (0x1d62a, (4821, 1)),
- (0x1d4dd, (4500, 1)),
- (0xff5b, (4099, 1)),
- (0x1d464, (4390, 1)),
- (0xfc34, (2782, 2)),
- (0x1d6bc, (4965, 1)),
- (0x1d71c, (5061, 1)),
- (0x2128, (409, 1)),
- (0xfb74, (2525, 1)),
- (0xfced, (3171, 2)),
- (0xa69c, (2438, 1)),
- (0x2a74, (844, 3)),
- (0xfef8, (3996, 3)),
- (0x1d63a, (4837, 1)),
- (0xfcb5, (3057, 2)),
- (0x1d435, (4344, 1)),
- (0x1ee69, (5420, 1)),
- (0x2036, (301, 2)),
- (0x1fbd, (238, 2)),
- (0x1d5fb, (4774, 1)),
- (0x1d5b9, (4708, 1)),
- (0xfd57, (3357, 3)),
- (0x318b, (1174, 1)),
- (0xfdf5, (3708, 4)),
- (0xfe7c, (3850, 2)),
- (0xfc9b, (3004, 3)),
- (0xfd14, (3252, 2)),
- (0x1d51b, (4558, 1)),
- (0x1ee67, (5418, 1)),
- (0x338a, (2142, 2)),
- (0xff40, (4072, 1)),
- (0xfb50, (2489, 1)),
- (0x1d4c7, (4478, 1)),
- (0x1079c, (4261, 1)),
- (0x1ee17, (5371, 1)),
- (0x1f190, (5644, 2)),
- (0x1d5f0, (4763, 1)),
- (0x32b3, (1558, 2)),
- (0x1d7d5, (5244, 1)),
- (0xfe64, (3823, 1)),
- (0xfb8e, (2551, 1)),
- (0xfc07, (2692, 2)),
- (0xfb58, (2497, 1)),
- (0x1d75c, (5125, 1)),
- (0x2168, (501, 2)),
- (0x1d745, (5102, 1)),
- (0x1ee4e, (5405, 1)),
- (0x2fcc, (1061, 1)),
- (0x1d781, (5162, 1)),
- (0x313c, (1095, 1)),
- (0x1fde, (259, 3)),
- (0x2fbd, (1046, 1)),
- (0x1d5d4, (4735, 1)),
- (0x1d500, (4535, 1)),
- (0xfc80, (2946, 2)),
- (0x33a3, (2199, 3)),
- (0x1d502, (4537, 1)),
- (0x32d1, (1622, 1)),
- (0xfd97, (3543, 3)),
- (0x1d489, (4427, 1)),
- (0xffd6, (4215, 1)),
- (0xfcc3, (3085, 2)),
- (0x2493, (682, 3)),
- (0x1d6c6, (4975, 1)),
- (0x208d, (348, 1)),
- (0xfb06, (2465, 2)),
- (0x319c, (1188, 1)),
- (0x1da1, (203, 1)),
- (0xff1b, (4035, 1)),
- (0xfee1, (3967, 1)),
- (0xfc65, (2887, 3)),
- (0xfc14, (2718, 2)),
- (0xfea2, (3904, 1)),
- (0xfb91, (2554, 1)),
- (0x3350, (1989, 3)),
- (0x1d6c8, (4977, 1)),
- (0x1d677, (4898, 1)),
- (0x10783, (4237, 1)),
- (0x1da3, (205, 1)),
- (0x1d51, (170, 1)),
- (0x3261, (1453, 1)),
- (0xfc78, (2930, 2)),
- (0x3363, (2041, 3)),
- (0x2f3c, (917, 1)),
- (0x2f27, (896, 1)),
- (0x32a3, (1540, 1)),
- (0x1fbf5, (5730, 1)),
- (0x2b4, (66, 1)),
- (0x3286, (1511, 1)),
- (0x2f17, (880, 1)),
- (0x1d5cc, (4727, 1)),
- (0x1f230, (5684, 1)),
- (0xfb03, (2457, 3)),
- (0x24ce, (811, 1)),
- (0x2f30, (905, 1)),
- (0xfd60, (3384, 3)),
- (0x1f123, (5569, 3)),
- (0x1d532, (4580, 1)),
- (0x1f21e, (5666, 1)),
- (0x3353, (1998, 4)),
- (0x1d9b, (197, 1)),
- (0x1f104, (5498, 2)),
- (0x1f21b, (5663, 1)),
- (0xfe52, (3806, 1)),
- (0xfd3b, (3330, 2)),
- (0x2f61, (954, 1)),
- (0xfc00, (2673, 3)),
- (0x1ee71, (5427, 1)),
- (0x3f0, (104, 1)),
- (0x1d7e4, (5259, 1)),
- (0xfc5d, (2864, 2)),
- (0x1d670, (4891, 1)),
- (0xfe33, (3773, 1)),
- (0x1d57d, (4648, 1)),
- (0xfe6b, (3829, 1)),
- (0x3233, (1364, 3)),
- (0x2f21, (890, 1)),
- (0xfc15, (2720, 2)),
- (0x1d55f, (4618, 1)),
- (0xfd64, (3396, 3)),
- (0x1d49a, (4444, 1)),
- (0xfe7b, (3848, 2)),
- (0x1d762, (5131, 1)),
- (0x1d6e0, (5001, 1)),
- (0xfeb5, (3923, 1)),
- (0x1d46b, (4397, 1)),
- (0x1db6, (224, 1)),
- (0x3141, (1100, 1)),
- (0xfe9c, (3898, 1)),
- (0x1d484, (4422, 1)),
- (0x329d, (1534, 1)),
- (0x1d530, (4578, 1)),
- (0xfd32, (3312, 2)),
- (0xfc5f, (2869, 3)),
- (0x1ee7b, (5435, 1)),
- (0xf0c, (128, 1)),
- (0x1d56f, (4634, 1)),
- (0x1d6aa, (4947, 1)),
- (0x33dc, (2341, 2)),
- (0x24e3, (832, 1)),
- (0x1f22e, (5682, 1)),
- (0x1d4b7, (4465, 1)),
- (0x1d5d1, (4732, 1)),
- (0x1d7a6, (5199, 1)),
- (0x2f4e, (935, 1)),
- (0x1d6ae, (4951, 1)),
- (0x3f2, (106, 1)),
- (0x3280, (1505, 1)),
- (0x1d3e, (152, 1)),
- (0xfbef, (2630, 3)),
- (0x1f102, (5494, 2)),
- (0xfe54, (3807, 1)),
- (0x3263, (1455, 1)),
- (0xff9b, (4163, 1)),
- (0x1d584, (4655, 1)),
- (0x3351, (1992, 4)),
- (0x3156, (1121, 1)),
- (0xfbf2, (2639, 3)),
- (0xfb02, (2455, 2)),
- (0x317b, (1158, 1)),
- (0x314c, (1111, 1)),
- (0x1c6, (41, 3)),
- (0x1d73f, (5096, 1)),
- (0x1ee4d, (5404, 1)),
- (0x1d53, (172, 1)),
- (0x33d1, (2313, 2)),
- (0x1d58a, (4661, 1)),
- (0xfd83, (3489, 3)),
- (0x2178, (531, 2)),
- (0x1d751, (5114, 1)),
- (0xfd77, (3453, 3)),
- (0x1d479, (4411, 1)),
- (0x215d, (475, 3)),
- (0xfd87, (3501, 3)),
- (0x318a, (1173, 1)),
- (0x1d43f, (4354, 1)),
- (0x2fcd, (1062, 1)),
- (0x1d4f0, (4519, 1)),
- (0x1d59, (178, 1)),
- (0x1d65f, (4874, 1)),
- (0x3393, (2162, 3)),
- (0x1ee92, (5455, 1)),
- (0xa770, (2440, 1)),
- (0xfd0b, (3234, 2)),
- (0x208a, (345, 1)),
- (0xfe80, (3858, 1)),
- (0x1d7f3, (5274, 1)),
- (0xfd0d, (3238, 2)),
- (0x1d54a, (4598, 1)),
- (0x1d699, (4932, 1)),
- (0xfe92, (3888, 1)),
- (0xfe4c, (3799, 2)),
- (0x1d653, (4862, 1)),
- (0x1e04b, (5314, 1)),
- (0x1d5b8, (4707, 1)),
- (0x1d45a, (4380, 1)),
- (0x335b, (2024, 2)),
- (0x1d789, (5170, 1)),
- (0xa7f2, (2441, 1)),
- (0x1eea3, (5467, 1)),
- (0xff7c, (4132, 1)),
- (0x2176, (524, 3)),
- (0xffa6, (4174, 1)),
- (0xff57, (4095, 1)),
- (0x1ee79, (5433, 1)),
- (0x1d5ae, (4697, 1)),
- (0x1d46f, (4401, 1)),
- (0x2da, (75, 2)),
- (0x2f4d, (934, 1)),
- (0xfdc5, (3681, 3)),
- (0x3384, (2127, 2)),
- (0x24c0, (797, 1)),
- (0x1d57c, (4647, 1)),
- (0x1d7b0, (5209, 1)),
- (0x1d5cb, (4726, 1)),
- (0x1d783, (5164, 1)),
- (0x1d4e8, (4511, 1)),
- (0x1d58e, (4665, 1)),
- (0xff0d, (4021, 1)),
- (0x1d644, (4847, 1)),
- (0x24c4, (801, 1)),
- (0x2f52, (939, 1)),
- (0x1d68e, (4921, 1)),
- (0x1d50d, (4545, 1)),
- (0xfb6b, (2516, 1)),
- (0x2fcb, (1060, 1)),
- (0xff32, (4058, 1)),
- (0xffab, (4179, 1)),
- (0x316c, (1143, 1)),
- (0x2070, (321, 1)),
- (0xfd8d, (3519, 3)),
- (0xfe74, (3836, 2)),
- (0x2131, (414, 1)),
- (0xff64, (4108, 1)),
- (0x339b, (2180, 2)),
- (0x1e06a, (5345, 1)),
- (0x1f224, (5672, 1)),
- (0x1d405, (4296, 1)),
- (0xff49, (4081, 1)),
- (0xff37, (4063, 1)),
- (0x2075, (324, 1)),
- (0xfebe, (3932, 1)),
- (0xfee8, (3974, 1)),
- (0xa7f8, (2444, 1)),
- (0x1d7be, (5223, 1)),
- (0x1d9d, (199, 1)),
- (0x107b6, (4286, 1)),
- (0x2f79, (978, 1)),
- (0x1f212, (5653, 1)),
- (0xfcdf, (3141, 3)),
- (0x1d5a1, (4684, 1)),
- (0xfcc9, (3097, 2)),
- (0x1ee11, (5365, 1)),
- (0x339f, (2188, 3)),
- (0xfb83, (2540, 1)),
- (0x1f131, (5600, 1)),
- (0xff08, (4016, 1)),
- (0xfe9e, (3900, 1)),
- (0xfe39, (3779, 1)),
- (0x3386, (2131, 2)),
- (0xfd6f, (3429, 3)),
- (0x1d58b, (4662, 1)),
- (0x1d5f3, (4766, 1)),
- (0x1d5f, (184, 1)),
- (0xfc30, (2774, 2)),
- (0x33fa, (2420, 3)),
- (0x1ee5b, (5412, 1)),
- (0x2478, (599, 3)),
- (0x1d747, (5104, 1)),
- (0xfcf8, (3196, 2)),
- (0x1d667, (4882, 1)),
- (0x1d796, (5183, 1)),
- (0x2011, (286, 1)),
- (0x1f144, (5619, 1)),
- (0xfd3d, (3334, 2)),
- (0x3270, (1470, 2)),
- (0x326c, (1464, 1)),
- (0x1d5c8, (4723, 1)),
- (0x1d68c, (4919, 1)),
- (0xfdfb, (3745, 8)),
- (0xfdb6, (3636, 3)),
- (0x2095, (355, 1)),
- (0x3219, (1278, 4)),
- (0x2499, (700, 3)),
- (0x1ee52, (5408, 1)),
- (0x2dc, (79, 2)),
- (0x210e, (387, 1)),
- (0x1d5ce, (4729, 1)),
- (0x1d687, (4914, 1)),
- (0x1d702, (5035, 1)),
- (0x2093, (353, 1)),
- (0x1d615, (4800, 1)),
- (0x2f0c, (869, 1)),
- (0x3185, (1168, 1)),
- (0x1d42a, (4333, 1)),
- (0x247b, (608, 3)),
- (0xfeee, (3980, 1)),
- (0x10785, (4239, 1)),
- (0x209a, (360, 1)),
- (0xfb72, (2523, 1)),
- (0x33e2, (2355, 2)),
- (0xfc75, (2924, 2)),
- (0x24d2, (815, 1)),
- (0x1e05b, (5330, 1)),
- (0x212c, (410, 1)),
- (0x247f, (622, 4)),
- (0x1d45e, (4384, 1)),
- (0xfee3, (3969, 1)),
- (0x2f19, (882, 1)),
- (0x321e, (1301, 6)),
- (0x2f05, (862, 1)),
- (0xfb16, (2473, 2)),
- (0x3142, (1101, 1)),
- (0x107a5, (4270, 1)),
- (0x2001, (276, 1)),
- (0xfc84, (2954, 2)),
- (0x1d55c, (4615, 1)),
- (0x1d7c4, (5229, 1)),
- (0x2fa0, (1017, 1)),
- (0x1f143, (5618, 1)),
- (0x2f8f, (1000, 1)),
- (0x24c9, (806, 1)),
- (0x32c5, (1594, 2)),
- (0x248f, (672, 2)),
- (0xff84, (4140, 1)),
- (0x3324, (1820, 4)),
- (0xfcb7, (3061, 2)),
- (0x1e041, (5304, 1)),
- (0x24d9, (822, 1)),
- (0xfd16, (3256, 2)),
- (0x3251, (1422, 2)),
- (0xfc92, (2982, 2)),
- (0xfe8f, (3885, 1)),
- (0xfdc4, (3678, 3)),
- (0x2f1c, (885, 1)),
- (0x1f22b, (5679, 1)),
- (0x1d5db, (4742, 1)),
- (0x2f41, (922, 1)),
- (0xfd1b, (3266, 2)),
- (0x3217, (1270, 4)),
- (0x1f250, (5723, 1)),
- (0x3321, (1809, 5)),
- (0x2f40, (921, 1)),
- (0x2fca, (1059, 1)),
- (0x107a6, (4271, 1)),
- (0x1d589, (4660, 1)),
- (0x3136, (1089, 1)),
- (0xfc7d, (2940, 2)),
- (0xfb87, (2544, 1)),
- (0xfc0e, (2706, 2)),
- (0x1f106, (5502, 2)),
- (0x2f65, (958, 1)),
- (0xfe56, (3809, 1)),
- (0xfb9c, (2565, 1)),
- (0xfee4, (3970, 1)),
- (0x1ee06, (5354, 1)),
- (0x1d6d2, (4987, 1)),
- (0x1d45d, (4383, 1)),
- (0x1d660, (4875, 1)),
- (0x1f216, (5658, 1)),
- (0x1d400, (4291, 1)),
- (0xfb13, (2467, 2)),
- (0xfc6f, (2912, 2)),
- (0xfca7, (3029, 2)),
- (0xfe13, (3760, 1)),
- (0xfe4b, (3797, 2)),
- (0x1d78d, (5174, 1)),
- (0xff2e, (4054, 1)),
- (0x2f6b, (964, 1)),
- (0xfbe6, (2611, 1)),
- (0x1d4f6, (4525, 1)),
- (0x107a8, (4273, 1)),
- (0x328b, (1516, 1)),
- (0x1d5c, (181, 1)),
- (0x246a, (567, 2)),
- (0xfcb9, (3065, 2)),
- (0xfbd6, (2594, 1)),
- (0x33f7, (2411, 3)),
- (0xfd08, (3228, 2)),
- (0x32c7, (1598, 2)),
- (0x1d684, (4911, 1)),
- (0x1eea1, (5465, 1)),
- (0xfd78, (3456, 3)),
- (0x1ee80, (5438, 1)),
- (0x1f225, (5673, 1)),
- (0x1eeb6, (5484, 1)),
- (0x1ee0c, (5360, 1)),
- (0xab5c, (2446, 1)),
- (0xfb5c, (2501, 1)),
- (0x322e, (1349, 3)),
- (0xfc4b, (2828, 2)),
- (0x24c7, (804, 1)),
- (0x3360, (2034, 2)),
- (0x1d737, (5088, 1)),
- (0x33d0, (2311, 2)),
- (0xfc90, (2978, 2)),
- (0x1eeb0, (5478, 1)),
- (0xfda1, (3573, 3)),
- (0x3375, (2093, 2)),
- (0x2f00, (857, 1)),
- (0xfb9a, (2563, 1)),
- (0x322a, (1337, 3)),
- (0x32a9, (1546, 1)),
- (0x1d472, (4404, 1)),
- (0x1d4d4, (4491, 1)),
- (0x1f221, (5669, 1)),
- (0xff7b, (4131, 1)),
- (0x1d46, (160, 1)),
- (0xffb1, (4185, 1)),
- (0x1d436, (4345, 1)),
- (0x3298, (1529, 1)),
- (0xfc43, (2812, 2)),
- (0xfc31, (2776, 2)),
- (0x1d679, (4900, 1)),
- (0x315b, (1126, 1)),
- (0x1d712, (5051, 1)),
- (0xfe99, (3895, 1)),
- (0xfed1, (3951, 1)),
- (0x339a, (2178, 2)),
- (0x1d4a6, (4451, 1)),
- (0xfbd5, (2593, 1)),
- (0x210a, (383, 1)),
- (0xfb96, (2559, 1)),
- (0x2f8e, (999, 1)),
- (0x1d7a9, (5202, 1)),
- (0xfb5e, (2503, 1)),
- (0x10793, (4252, 1)),
- (0x2f56, (943, 1)),
- (0x207d, (332, 1)),
- (0x1f227, (5675, 1)),
- (0xfc94, (2986, 2)),
- (0x1d4d3, (4490, 1)),
- (0xfd67, (3405, 3)),
- (0xff09, (4017, 1)),
- (0x1d5a4, (4687, 1)),
- (0x1e06d, (5348, 1)),
- (0x1d39, (148, 1)),
- (0x3210, (1242, 4)),
- (0x1d721, (5066, 1)),
- (0xff91, (4153, 1)),
- (0x1d62d, (4824, 1)),
- (0x1d7c0, (5225, 1)),
- (0x1f213, (5654, 2)),
- (0x1f130, (5599, 1)),
- (0x1d4d5, (4492, 1)),
- (0x1db2, (220, 1)),
- (0x2f98, (1009, 1)),
- (0x1d56a, (4629, 1)),
- (0x2477, (596, 3)),
- (0x1d526, (4568, 1)),
- (0x2475, (590, 3)),
- (0x107b8, (4288, 1)),
- (0x1f242, (5702, 3)),
- (0x587, (110, 2)),
- (0x1d7b3, (5212, 1)),
- (0x2076, (325, 1)),
- (0x1d6f2, (5019, 1)),
- (0xfdbc, (3654, 3)),
- (0x24a6, (739, 3)),
- (0x33d4, (2320, 2)),
- (0x1d4d8, (4495, 1)),
- (0x320c, (1228, 3)),
- (0x1d57b, (4646, 1)),
- (0x1ee15, (5369, 1)),
- (0x24a4, (733, 3)),
- (0x2149, (434, 1)),
- (0xfbf8, (2657, 3)),
- (0x2f04, (861, 1)),
- (0x1d5ca, (4725, 1)),
- (0x1d57, (176, 1)),
- (0xff22, (4042, 1)),
- (0x1d68b, (4918, 1)),
- (0x1d7b5, (5214, 1)),
- (0x1d4c8, (4479, 1)),
- (0x2088, (343, 1)),
- (0x3340, (1929, 5)),
- (0x1d507, (4541, 1)),
- (0x325d, (1446, 2)),
- (0x1d5fe, (4777, 1)),
- (0x317c, (1159, 1)),
- (0x1ee47, (5401, 1)),
- (0x33b0, (2242, 2)),
- (0x1d786, (5167, 1)),
- (0xfc83, (2952, 2)),
- (0x1d444, (4359, 1)),
- (0x32f1, (1654, 1)),
- (0x3152, (1117, 1)),
- (0xff13, (4027, 1)),
- (0xfe38, (3778, 1)),
- (0x1d4ec, (4515, 1)),
- (0xfd7e, (3474, 3)),
- (0x336f, (2077, 3)),
- (0x3d0, (95, 1)),
- (0x1d7f1, (5272, 1)),
- (0x1f251, (5724, 1)),
- (0x1db3, (221, 1)),
- (0x1d514, (4552, 1)),
- (0x33fb, (2423, 3)),
- (0xfbf1, (2636, 3)),
- (0xfd84, (3492, 3)),
- (0x1fbf3, (5728, 1)),
- (0x328a, (1515, 1)),
- (0x24ab, (754, 3)),
- (0x1d7e7, (5262, 1)),
- (0x335c, (2026, 2)),
- (0xff85, (4141, 1)),
- (0x1d4bd, (4469, 1)),
- (0xfdb5, (3633, 3)),
- (0xfdf2, (3696, 4)),
- (0xfe83, (3863, 2)),
- (0x1fdd, (256, 3)),
- (0xfc7b, (2936, 2)),
- (0x319a, (1186, 1)),
- (0x3275, (1480, 2)),
- (0xfd20, (3276, 2)),
- (0x1d402, (4293, 1)),
- (0xff67, (4111, 1)),
- (0x1d7dd, (5252, 1)),
- (0xfc2e, (2770, 2)),
- (0xff04, (4012, 1)),
- (0x1eeb1, (5479, 1)),
- (0x3317, (1765, 5)),
- (0x3367, (2053, 3)),
- (0x1d652, (4861, 1)),
- (0x337e, (2113, 2)),
- (0x1d9c, (198, 1)),
- (0x1079e, (4263, 1)),
- (0x2f5f, (952, 1)),
- (0xfea6, (3908, 1)),
- (0x1d66, (191, 1)),
- (0x1ee90, (5453, 1)),
- (0x1d723, (5068, 1)),
- (0x247e, (618, 4)),
- (0x216b, (506, 3)),
- (0x1d74c, (5109, 1)),
- (0x1d68d, (4920, 1)),
- (0x3211, (1246, 4)),
- (0x1d77f, (5160, 1)),
- (0xff86, (4142, 1)),
- (0x2f18, (881, 1)),
- (0x3347, (1953, 5)),
- (0xfc72, (2918, 2)),
- (0x1d496, (4440, 1)),
- (0x1f129, (5587, 3)),
- (0x210d, (386, 1)),
- (0x1d40e, (4305, 1)),
- (0x1d4e0, (4503, 1)),
- (0x1d571, (4636, 1)),
- (0x200a, (285, 1)),
- (0x1d53d, (4590, 1)),
- (0x2099, (359, 1)),
- (0x2a75, (847, 2)),
- (0xfe40, (3786, 1)),
- (0xfebd, (3931, 1)),
- (0x1d44b, (4366, 1)),
- (0x32d3, (1624, 1)),
- (0x1d666, (4881, 1)),
- (0xfbaa, (2581, 1)),
- (0x2f7e, (983, 1)),
- (0xff77, (4127, 1)),
- (0xff25, (4045, 1)),
- (0x1d693, (4926, 1)),
- (0xfeb6, (3924, 1)),
- (0x1d695, (4928, 1)),
- (0xffd5, (4214, 1)),
- (0x1d491, (4435, 1)),
- (0x3359, (2020, 2)),
- (0x1d57f, (4650, 1)),
- (0xffd7, (4216, 1)),
- (0x1ee32, (5393, 1)),
- (0x3267, (1459, 1)),
- (0xfd30, (3308, 2)),
- (0xfbed, (2624, 3)),
- (0xfd94, (3534, 3)),
- (0x3278, (1486, 2)),
- (0xff97, (4159, 1)),
- (0x1d686, (4913, 1)),
- (0x1f108, (5506, 2)),
- (0x2f2c, (901, 1)),
- (0xfcd1, (3113, 2)),
- (0x2468, (564, 1)),
- (0xfe3e, (3784, 1)),
- (0xff66, (4110, 1)),
- (0xff14, (4028, 1)),
- (0x1d74d, (5110, 1)),
- (0x32f5, (1658, 1)),
- (0x33cd, (2305, 2)),
- (0x2469, (565, 2)),
- (0x32b4, (1560, 2)),
- (0x1d65b, (4870, 1)),
- (0x1f113, (5521, 3)),
- (0x2155, (451, 3)),
- (0x1daa, (212, 1)),
- (0xfed6, (3956, 1)),
- (0x1d5bd, (4712, 1)),
- (0x1e045, (5308, 1)),
- (0xfdf3, (3700, 4)),
- (0xfb8c, (2549, 1)),
- (0x1d7d4, (5243, 1)),
- (0x2b8, (70, 1)),
- (0x1d565, (4624, 1)),
- (0x2fd5, (1070, 1)),
- (0x1d4af, (4457, 1)),
- (0xfcf2, (3181, 3)),
- (0x1f142, (5617, 1)),
- (0x3195, (1181, 1)),
- (0x1d56c, (4631, 1)),
- (0xfd0e, (3240, 2)),
- (0x1eeb7, (5485, 1)),
- (0xff54, (4092, 1)),
- (0x678, (118, 2)),
- (0xfbee, (2627, 3)),
- (0x1d540, (4592, 1)),
- (0x33be, (2270, 2)),
- (0xfead, (3915, 1)),
- (0x1d40c, (4303, 1)),
- (0xfb23, (2480, 1)),
- (0xfee6, (3972, 1)),
- (0xffa1, (4169, 1)),
- (0x1d674, (4895, 1)),
- (0x1d36, (145, 1)),
- (0x2106, (377, 3)),
- (0x3231, (1358, 3)),
- (0x1ee59, (5411, 1)),
- (0x3338, (1898, 4)),
- (0x1d7c3, (5228, 1)),
- (0x107b5, (4285, 1)),
- (0x2b0, (62, 1)),
- (0xfc36, (2786, 2)),
- (0x1f234, (5688, 1)),
- (0x1d473, (4405, 1)),
- (0x313f, (1098, 1)),
- (0xfd7b, (3465, 3)),
- (0x3154, (1119, 1)),
- (0x1ee31, (5392, 1)),
- (0xffae, (4182, 1)),
- (0x1d4b, (165, 1)),
- (0x1ee4b, (5403, 1)),
- (0x1d672, (4893, 1)),
- (0x313b, (1094, 1)),
- (0x1d7ae, (5207, 1)),
- (0xfd35, (3318, 2)),
- (0x3200, (1192, 3)),
- (0xff19, (4033, 1)),
- (0x1d538, (4586, 1)),
- (0x1f105, (5500, 2)),
- (0x2f3a, (915, 1)),
- (0xff2d, (4053, 1)),
- (0x1ee03, (5352, 1)),
- (0x2fc5, (1054, 1)),
- (0xfc19, (2728, 2)),
- (0xfb27, (2484, 1)),
- (0x2f31, (906, 1)),
- (0x2a76, (849, 3)),
- (0x1d655, (4864, 1)),
- (0x1d47e, (4416, 1)),
- (0x246f, (577, 2)),
- (0x2f13, (876, 1)),
- (0x1f233, (5687, 1)),
- (0x1d59f, (4682, 1)),
- (0x2497, (694, 3)),
- (0x2e9f, (855, 1)),
- (0x32dd, (1634, 1)),
- (0xfd28, (3292, 2)),
- (0x1d7bb, (5220, 1)),
- (0x1d7d2, (5241, 1)),
- (0x32e1, (1638, 1)),
- (0x1d69b, (4934, 1)),
- (0x107ac, (4277, 1)),
- (0xfc93, (2984, 2)),
- (0x2f34, (909, 1)),
- (0x2490, (674, 2)),
- (0xfb6e, (2519, 1)),
- (0x1f12d, (5595, 2)),
- (0xfba1, (2570, 1)),
- (0x1d48d, (4431, 1)),
- (0x1f228, (5676, 1)),
- (0x2471, (581, 2)),
- (0xfb59, (2498, 1)),
- (0xfec3, (3937, 1)),
- (0x329a, (1531, 1)),
- (0x33c9, (2297, 2)),
- (0x1dbd, (231, 1)),
- (0x1d474, (4406, 1)),
- (0x1d673, (4894, 1)),
- (0xffe1, (4221, 1)),
- (0x1d4c3, (4475, 1)),
- (0x1d649, (4852, 1)),
- (0xfed2, (3952, 1)),
- (0x3205, (1207, 3)),
- (0x1d537, (4585, 1)),
- (0xfcd9, (3129, 2)),
- (0x3140, (1099, 1)),
- (0x309f, (1080, 2)),
- (0xff58, (4096, 1)),
- (0x1d707, (5040, 1)),
- (0x1d5d8, (4739, 1)),
- (0x2f5e, (951, 1)),
- (0x329c, (1533, 1)),
- (0x1ee8f, (5452, 1)),
- (0x1f21a, (5662, 1)),
- (0x1fc1, (244, 3)),
- (0x1d71b, (5060, 1)),
- (0x1ee29, (5384, 1)),
- (0x2f5d, (950, 1)),
- (0x3346, (1950, 3)),
- (0x33cc, (2303, 2)),
- (0x1d676, (4897, 1)),
- (0x2fc1, (1050, 1)),
- (0x1d604, (4783, 1)),
- (0x1d4ed, (4516, 1)),
- (0x1d508, (4542, 1)),
- (0xfd5d, (3375, 3)),
- (0x1d5a7, (4690, 1)),
- (0x1e033, (5290, 1)),
- (0xb8, (11, 2)),
- (0xffda, (4217, 1)),
- (0x3273, (1476, 2)),
- (0xff21, (4041, 1)),
- (0x24cf, (812, 1)),
- (0x3332, (1871, 6)),
- (0x1d413, (4310, 1)),
- (0x249c, (709, 3)),
- (0xff30, (4056, 1)),
- (0x1ee68, (5419, 1)),
- (0x1d5b0, (4699, 1)),
- (0xfbd7, (2595, 1)),
- (0x3133, (1086, 1)),
- (0xfd33, (3314, 2)),
- (0xfc12, (2714, 2)),
- (0x334a, (1964, 6)),
- (0x1d48f, (4433, 1)),
- (0xff17, (4031, 1)),
- (0x13f, (28, 2)),
- (0x32c8, (1600, 2)),
- (0xfe63, (3822, 1)),
- (0x1d6f7, (5024, 1)),
- (0x33e6, (2363, 2)),
- (0x1d689, (4916, 1)),
- (0x1d7fc, (5283, 1)),
- (0x2167, (497, 4)),
- (0x1da2, (204, 1)),
- (0x1eea8, (5471, 1)),
- (0x3169, (1140, 1)),
- (0xaf, (4, 2)),
- (0xfcb6, (3059, 2)),
- (0xfbeb, (2618, 3)),
- (0xfe61, (3820, 1)),
- (0x1d6f5, (5022, 1)),
- (0x3277, (1484, 2)),
- (0x321b, (1286, 4)),
- (0xfc28, (2758, 2)),
- (0x1d51c, (4559, 1)),
- (0xff92, (4154, 1)),
- (0x3395, (2168, 2)),
- (0x1d5fd, (4776, 1)),
- (0x1d722, (5067, 1)),
- (0x2f99, (1010, 1)),
- (0x33a4, (2202, 3)),
- (0x3d6, (103, 1)),
- (0x24e8, (837, 1)),
- (0x212f, (412, 1)),
- (0x1f201, (5648, 2)),
- (0xfec0, (3934, 1)),
- (0x1d67d, (4904, 1)),
- (0x33a1, (2194, 2)),
- (0xfca6, (3027, 2)),
- (0x2f85, (990, 1)),
- (0x37a, (88, 2)),
- (0x32cf, (1618, 3)),
- (0x1f200, (5646, 2)),
- (0x2e4, (87, 1)),
- (0x1d75e, (5127, 1)),
- (0x1d4a5, (4450, 1)),
- (0xfed0, (3950, 1)),
- (0x3269, (1461, 1)),
- (0x1d55e, (4617, 1)),
- (0x1d439, (4348, 1)),
- (0x1d5b5, (4704, 1)),
- (0xfc64, (2884, 3)),
- (0xfeb0, (3918, 1)),
- (0xfbd8, (2596, 1)),
- (0x3147, (1106, 1)),
- (0xfbe3, (2608, 1)),
- (0x2113, (392, 1)),
- (0x1e05f, (5334, 1)),
- (0x3368, (2056, 3)),
- (0xff4e, (4086, 1)),
- (0x1d6a9, (4946, 1)),
- (0xfb6d, (2518, 1)),
- (0x332b, (1840, 6)),
- (0x334c, (1973, 5)),
- (0xfb52, (2491, 1)),
- (0x1d426, (4329, 1)),
- (0xab5f, (2449, 1)),
- (0xfe5d, (3816, 1)),
- (0x1d6bf, (4968, 1)),
- (0x1d6b5, (4958, 1)),
- (0xfba6, (2577, 1)),
- (0x1ffe, (273, 2)),
- (0xfbd4, (2592, 1)),
- (0xfc6d, (2908, 2)),
- (0xff20, (4040, 1)),
- (0x1d5ab, (4694, 1)),
- (0x1d5f2, (4765, 1)),
- (0x325c, (1444, 2)),
- (0xfe42, (3788, 1)),
- (0x3383, (2125, 2)),
- (0xfb22, (2479, 1)),
- (0x1d5ec, (4759, 1)),
- (0x1d63e, (4841, 1)),
- (0xfc7a, (2934, 2)),
- (0x1d4cb, (4482, 1)),
- (0xfd9f, (3567, 3)),
- (0x319f, (1191, 1)),
- (0x1d521, (4563, 1)),
- (0x217f, (542, 1)),
- (0x3238, (1379, 3)),
- (0x1d438, (4347, 1)),
- (0xffa4, (4172, 1)),
- (0x24aa, (751, 3)),
- (0xba, (14, 1)),
- (0xfc79, (2932, 2)),
- (0xfe5b, (3814, 1)),
- (0x1ee02, (5351, 1)),
- (0x32fb, (1664, 1)),
- (0x2d8, (71, 2)),
- (0x32da, (1631, 1)),
- (0x338c, (2146, 2)),
- (0xfd2b, (3298, 2)),
- (0xfd06, (3224, 2)),
- (0x32b0, (1553, 1)),
- (0x1e03e, (5301, 1)),
- (0x2fab, (1028, 1)),
- (0x210c, (385, 1)),
- (0xfcd6, (3123, 2)),
- (0x2164, (491, 1)),
- (0xff83, (4139, 1)),
- (0x24b4, (781, 3)),
- (0x2f94, (1005, 1)),
- (0x32ed, (1650, 1)),
- (0x3232, (1361, 3)),
- (0x2f59, (946, 1)),
- (0xff33, (4059, 1)),
- (0x3262, (1454, 1)),
- (0x330e, (1725, 4)),
- (0x2489, (660, 2)),
- (0x2fb5, (1038, 1)),
- (0xfeea, (3976, 1)),
- (0x2fc8, (1057, 1)),
- (0x215e, (478, 3)),
- (0xff05, (4013, 1)),
- (0x2f8a, (995, 1)),
- (0x1ee1d, (5377, 1)),
- (0xfebb, (3929, 1)),
- (0x1d67f, (4906, 1)),
- (0xfe93, (3889, 1)),
- (0xfecf, (3949, 1)),
- (0xfbfb, (2666, 3)),
- (0x1d6d6, (4991, 1)),
- (0x2152, (441, 4)),
- (0x1db7, (225, 1)),
- (0x1f14a, (5625, 2)),
- (0xfbdc, (2600, 1)),
- (0x1d694, (4927, 1)),
- (0x2158, (460, 3)),
- (0x1d63d, (4840, 1)),
- (0x2101, (368, 3)),
- (0x2137, (419, 1)),
- (0xfdc0, (3666, 3)),
- (0x1d7a3, (5196, 1)),
- (0x1d54, (173, 1)),
- (0x10797, (4256, 1)),
- (0x3268, (1460, 1)),
- (0x10795, (4254, 1)),
- (0x33b9, (2260, 2)),
- (0xfc02, (2679, 3)),
- (0x332f, (1861, 4)),
- (0x213d, (426, 1)),
- (0x3283, (1508, 1)),
- (0x2f15, (878, 1)),
- (0x1d453, (4374, 1)),
- (0x107b0, (4281, 1)),
- (0x2f33, (908, 1)),
- (0xfe7f, (3856, 2)),
- (0x1d7eb, (5266, 1)),
- (0x32ca, (1605, 3)),
- (0xedc, (124, 2)),
- (0xffed, (4233, 1)),
- (0x1d7ca, (5235, 1)),
- (0x3265, (1457, 1)),
- (0x3389, (2138, 4)),
- (0xfcaf, (3045, 2)),
- (0xfd69, (3411, 3)),
- (0x32a4, (1541, 1)),
- (0x2f75, (974, 1)),
- (0x2c7c, (852, 1)),
- (0x2fae, (1031, 1)),
- (0xff2c, (4052, 1)),
- (0xfdf1, (3693, 3)),
- (0x1d613, (4798, 1)),
- (0xfc73, (2920, 2)),
- (0x1d495, (4439, 1)),
- (0x1d4ea, (4513, 1)),
- (0xa7f3, (2442, 1)),
- (0x1d7e5, (5260, 1)),
- (0xfe85, (3867, 2)),
- (0x1d4f2, (4521, 1)),
- (0x1d65e, (4873, 1)),
- (0x1d7c6, (5231, 1)),
- (0x2103, (372, 2)),
- (0x2083, (338, 1)),
- (0xfc33, (2780, 2)),
- (0x333d, (1918, 5)),
- (0xfcef, (3175, 2)),
- (0xfeb8, (3926, 1)),
- (0x32fd, (1666, 1)),
- (0x1d74b, (5108, 1)),
- (0x247c, (611, 3)),
- (0x1079d, (4262, 1)),
- (0x1e052, (5321, 1)),
- (0x1ee10, (5364, 1)),
- (0x2f7d, (982, 1)),
- (0xfda4, (3582, 3)),
- (0x323a, (1385, 3)),
- (0x3157, (1122, 1)),
- (0x33c0, (2274, 2)),
- (0x1f3, (60, 2)),
- (0xfc51, (2840, 2)),
- (0xfe15, (3762, 1)),
- (0x3204, (1204, 3)),
- (0x3397, (2172, 2)),
- (0x1d4e2, (4505, 1)),
- (0x32ce, (1616, 2)),
- (0xfb69, (2514, 1)),
- (0x1d6fc, (5029, 1)),
- (0x32a5, (1542, 1)),
- (0xfe9a, (3896, 1)),
- (0x1dbe, (232, 1)),
- (0x2090, (350, 1)),
- (0xfbd9, (2597, 1)),
- (0x1d778, (5153, 1)),
- (0x1d6d7, (4992, 1)),
- (0x1d7bf, (5224, 1)),
- (0xfda8, (3594, 3)),
- (0x3391, (2156, 3)),
- (0xfc5b, (2860, 2)),
- (0x2467, (563, 1)),
- (0x1d7f0, (5271, 1)),
- (0x3186, (1169, 1)),
- (0x2f10, (873, 1)),
- (0x1d5e3, (4750, 1)),
- (0xfce5, (3155, 2)),
- (0x1d75a, (5123, 1)),
- (0xa7f9, (2445, 1)),
- (0x1d580, (4651, 1)),
- (0x1d49b, (4445, 1)),
- (0x2151, (438, 3)),
- (0x1f23b, (5695, 1)),
- (0xfcad, (3041, 2)),
- (0x32b7, (1566, 2)),
- (0x1d5cf, (4730, 1)),
- (0x1d790, (5177, 1)),
- (0x1d6cd, (4982, 1)),
- (0xffcc, (4207, 1)),
- (0x3307, (1698, 6)),
- (0x1d7df, (5254, 1)),
- (0x2f07, (864, 1)),
- (0x24d5, (818, 1)),
- (0x1d5a0, (4683, 1)),
- (0xfb85, (2542, 1)),
- (0x1d520, (4562, 1)),
- (0x1d4d1, (4488, 1)),
- (0x2461, (557, 1)),
- (0x1d452, (4373, 1)),
- (0xfb70, (2521, 1)),
- (0x1d69f, (4938, 1)),
- (0x1d594, (4671, 1)),
- (0x3271, (1472, 2)),
- (0x1e057, (5326, 1)),
- (0x1d40, (154, 1)),
- (0x1ee27, (5383, 1)),
- (0xfd34, (3316, 2)),
- (0x209b, (361, 1)),
- (0x1d578, (4643, 1)),
- (0xff56, (4094, 1)),
- (0x2121, (403, 3)),
- (0x3148, (1107, 1)),
- (0x2f3d, (918, 1)),
- (0x1d724, (5069, 1)),
- (0x2166, (494, 3)),
- (0x2f1b, (884, 1)),
- (0x1d5ea, (4757, 1)),
- (0xfc05, (2688, 2)),
- (0x336a, (2062, 3)),
- (0x24a3, (730, 3)),
- (0x3320, (1804, 5)),
- (0x1ee82, (5440, 1)),
- (0x3344, (1944, 3)),
- (0x210b, (384, 1)),
- (0x1d560, (4619, 1)),
- (0x1ee30, (5391, 1)),
- (0x24e5, (834, 1)),
- (0xffea, (4230, 1)),
- (0x1f236, (5690, 1)),
- (0x2037, (303, 3)),
- (0x1e05a, (5329, 1)),
- (0x2000, (275, 1)),
- (0x1d7e6, (5261, 1)),
- (0xff6d, (4117, 1)),
- (0x3036, (1072, 1)),
- (0x1d6f4, (5021, 1)),
- (0x1ee18, (5372, 1)),
- (0x1ee00, (5349, 1)),
- (0xffb4, (4188, 1)),
- (0x1d6a8, (4945, 1)),
- (0x3362, (2038, 3)),
- (0xfec2, (3936, 1)),
- (0x2f26, (895, 1)),
- (0x33fe, (2432, 3)),
- (0x2034, (298, 3)),
- (0x1cc, (54, 2)),
- (0x33e1, (2353, 2)),
- (0xfcc0, (3079, 2)),
- (0x33de, (2345, 3)),
- (0x1d5ba, (4709, 1)),
- (0x1d47d, (4415, 1)),
- (0xff76, (4126, 1)),
- (0xfce2, (3149, 2)),
- (0x217a, (534, 2)),
- (0xfc29, (2760, 2)),
- (0x1d6e6, (5007, 1)),
- (0x1f139, (5608, 1)),
- (0xff2f, (4055, 1)),
- (0x1d7a2, (5195, 1)),
- (0x3000, (1071, 1)),
- (0x1d6b2, (4955, 1)),
- (0x107a9, (4274, 1)),
- (0xfecb, (3945, 1)),
- (0x2f09, (866, 1)),
- (0xfe16, (3763, 1)),
- (0x2100, (365, 3)),
- (0x3369, (2059, 3)),
- (0x3322, (1814, 3)),
- (0xfca8, (3031, 2)),
- (0x2e0, (83, 1)),
- (0x1d6c3, (4972, 1)),
- (0x2147, (432, 1)),
- (0x1d57a, (4645, 1)),
- (0x1d6ff, (5032, 1)),
- (0x1d5d7, (4738, 1)),
- (0xff0f, (4023, 1)),
- (0x3259, (1438, 2)),
- (0x1d45, (159, 1)),
- (0xfef5, (3987, 3)),
- (0x1ee94, (5457, 1)),
- (0x1d76c, (5141, 1)),
- (0x316f, (1146, 1)),
- (0x2f11, (874, 1)),
- (0xff1f, (4039, 1)),
- (0x3212, (1250, 4)),
- (0x32c0, (1584, 2)),
- (0xffb8, (4192, 1)),
- (0xfc0b, (2700, 2)),
- (0xfc04, (2685, 3)),
- (0x1d651, (4860, 1)),
- (0x1f215, (5657, 1)),
- (0x3325, (1824, 3)),
- (0x1d753, (5116, 1)),
- (0x2fbf, (1048, 1)),
- (0x1d73e, (5095, 1)),
- (0xff06, (4014, 1)),
- (0xfb67, (2512, 1)),
- (0x3242, (1409, 3)),
- (0x1d6c1, (4970, 1)),
- (0xfe14, (3761, 1)),
- (0x1d743, (5100, 1)),
- (0xfeca, (3944, 1)),
- (0xfe43, (3789, 1)),
- (0x1d7d1, (5240, 1)),
- (0x1d563, (4622, 1)),
- (0x1f21f, (5667, 1)),
- (0xfc0d, (2704, 2)),
- (0x2f7c, (981, 1)),
- (0xff82, (4138, 1)),
- (0x3250, (1419, 3)),
- (0x1d6df, (5000, 1)),
- (0x1d7c1, (5226, 1)),
- (0xfcfb, (3202, 2)),
- (0xfd51, (3339, 3)),
- (0x3159, (1124, 1)),
- (0x1d422, (4325, 1)),
- (0xfb04, (2460, 3)),
- (0x313a, (1093, 1)),
- (0x1d638, (4835, 1)),
- (0x33cb, (2301, 2)),
- (0x107a0, (4265, 1)),
- (0x1d492, (4436, 1)),
- (0x2460, (556, 1)),
- (0x1d510, (4548, 1)),
- (0x3374, (2090, 3)),
- (0x1e032, (5289, 1)),
- (0xfb29, (2486, 1)),
- (0x1ee01, (5350, 1)),
- (0x1d623, (4814, 1)),
- (0x331d, (1793, 3)),
- (0xffe8, (4228, 1)),
- (0x1d531, (4579, 1)),
- (0x1ee2a, (5385, 1)),
- (0x2fb9, (1042, 1)),
- (0x24e9, (838, 1)),
- (0xfcf0, (3177, 2)),
- (0x1d4e7, (4510, 1)),
- (0x2fd3, (1068, 1)),
- (0xfd62, (3390, 3)),
- (0x1d7de, (5253, 1)),
- (0x1ee1e, (5378, 1)),
- (0xfdb2, (3624, 3)),
- (0x2fb4, (1037, 1)),
- (0xffc2, (4199, 1)),
- (0x322c, (1343, 3)),
- (0xfe8c, (3881, 2)),
- (0x1d6ef, (5016, 1)),
- (0x329f, (1536, 1)),
- (0x10796, (4255, 1)),
- (0x1d38, (147, 1)),
- (0x331e, (1796, 4)),
- (0x1d65c, (4871, 1)),
- (0xfb76, (2527, 1)),
- (0x1f11d, (5551, 3)),
- (0xfc95, (2988, 2)),
- (0x1f12c, (5594, 1)),
- (0x1d588, (4659, 1)),
- (0x33ee, (2384, 3)),
- (0x24a9, (748, 3)),
- (0x3209, (1219, 3)),
- (0x3202, (1198, 3)),
- (0x1d72a, (5075, 1)),
- (0x2230, (553, 3)),
- (0x1ee21, (5380, 1)),
- (0x3177, (1154, 1)),
- (0x335e, (2030, 2)),
- (0xfeed, (3979, 1)),
- (0x3312, (1741, 4)),
- (0x3392, (2159, 3)),
- (0x1d41e, (4321, 1)),
- (0x1d5a8, (4691, 1)),
- (0xff6b, (4115, 1)),
- (0xfef1, (3983, 1)),
- (0x329b, (1532, 1)),
- (0xfb9d, (2566, 1)),
- (0x1d69a, (4933, 1)),
- (0x32c3, (1590, 2)),
- (0x32b2, (1556, 2)),
- (0xfc8f, (2976, 2)),
- (0x216c, (509, 1)),
- (0x1ee99, (5462, 1)),
- (0xfdbe, (3660, 3)),
- (0x2fb7, (1040, 1)),
- (0x1d760, (5129, 1)),
- (0x33c4, (2284, 2)),
- (0xfc8a, (2966, 2)),
- (0x1d7f9, (5280, 1)),
- (0x1d53c, (4589, 1)),
- (0x32cb, (1608, 3)),
- (0xfd29, (3294, 2)),
- (0x1f128, (5584, 3)),
- (0x1da0, (202, 1)),
- (0xfe9f, (3901, 1)),
- (0x2171, (514, 2)),
- (0x1d56b, (4630, 1)),
- (0x1d64e, (4857, 1)),
- (0x1d432, (4341, 1)),
- (0x3315, (1753, 6)),
- (0xfb64, (2509, 1)),
- (0x3284, (1509, 1)),
- (0x3357, (2015, 3)),
- (0xfc35, (2784, 2)),
- (0x2f92, (1003, 1)),
- (0x216f, (512, 1)),
- (0x33ab, (2222, 3)),
- (0x1d434, (4343, 1)),
- (0x1d4c1, (4473, 1)),
- (0xfdbd, (3657, 3)),
- (0x1d6bd, (4966, 1)),
- (0x1ee34, (5394, 1)),
- (0x1d6cc, (4981, 1)),
- (0x1f135, (5604, 1)),
- (0xfc9f, (3013, 2)),
- (0x1d556, (4609, 1)),
- (0x33c7, (2292, 3)),
- (0xfb00, (2451, 2)),
- (0x1d765, (5134, 1)),
- (0x1d748, (5105, 1)),
- (0x2084, (339, 1)),
- (0x1d44a, (4365, 1)),
- (0x1d62, (187, 1)),
- (0x318c, (1175, 1)),
- (0x2049, (314, 2)),
- (0x32e4, (1641, 1)),
- (0x1d552, (4605, 1)),
- (0x1d546, (4597, 1)),
- (0x1d624, (4815, 1)),
- (0x1eeb9, (5487, 1)),
- (0x1d4da, (4497, 1)),
- (0x1ca, (50, 2)),
- (0x3240, (1403, 3)),
- (0xfba8, (2579, 1)),
- (0xffdc, (4219, 1)),
- (0x3225, (1322, 3)),
- (0x1d799, (5186, 1)),
- (0x1d622, (4813, 1)),
- (0xfb28, (2485, 1)),
- (0x303a, (1075, 1)),
- (0xffb2, (4186, 1)),
- (0x1d592, (4669, 1)),
- (0x207b, (330, 1)),
- (0x1f12a, (5590, 3)),
- (0xfd1f, (3274, 2)),
- (0x1f217, (5659, 1)),
- (0x1d575, (4640, 1)),
- (0xfcf1, (3179, 2)),
- (0xfd6e, (3426, 3)),
- (0x24dd, (826, 1)),
- (0x1d605, (4784, 1)),
- (0x1ee2f, (5390, 1)),
- (0xfd27, (3290, 2)),
- (0x1d52e, (4576, 1)),
- (0x1d428, (4331, 1)),
- (0x1ee36, (5396, 1)),
- (0x32eb, (1648, 1)),
- (0x1d678, (4899, 1)),
- (0xfb14, (2469, 2)),
- (0xff10, (4024, 1)),
- (0x1d60e, (4793, 1)),
- (0xfbad, (2584, 1)),
- (0x1d570, (4635, 1)),
- (0x2f38, (913, 1)),
- (0x2f4a, (931, 1)),
- (0xff3a, (4066, 1)),
- (0x1d741, (5098, 1)),
- (0x1d788, (5169, 1)),
- (0x320d, (1231, 3)),
- (0x1d64b, (4854, 1)),
- (0x2b1, (63, 1)),
- (0x33a6, (2207, 3)),
- (0x1d774, (5149, 1)),
- (0xfd2c, (3300, 2)),
- (0x2109, (381, 2)),
- (0x1f100, (5490, 2)),
- (0xfc03, (2682, 3)),
- (0x1d61, (186, 1)),
- (0x1d7f2, (5273, 1)),
- (0xfbab, (2582, 1)),
- (0xffa7, (4175, 1)),
- (0x1d664, (4879, 1)),
- (0xfcdd, (3137, 2)),
- (0x1d4be, (4470, 1)),
- (0x33da, (2337, 2)),
- (0x1d67, (192, 1)),
- (0x2f60, (953, 1)),
- (0x24a0, (721, 3)),
- (0xfb56, (2495, 1)),
- (0x24bd, (794, 1)),
- (0xfbdf, (2604, 1)),
- (0xffb7, (4191, 1)),
- (0x1d77d, (5158, 1)),
- (0x3296, (1527, 1)),
- (0x1d5b7, (4706, 1)),
- (0x1f23a, (5694, 1)),
- (0x316e, (1145, 1)),
- (0x336d, (2071, 3)),
- (0xff7e, (4134, 1)),
- (0x1d534, (4582, 1)),
- (0x32a6, (1543, 1)),
- (0x1ee7c, (5436, 1)),
- (0x1ee2d, (5388, 1)),
- (0xfd5b, (3369, 3)),
- (0x331a, (1780, 6)),
- (0x32f4, (1657, 1)),
- (0x32bb, (1574, 2)),
- (0x3343, (1940, 4)),
- (0x2fd4, (1069, 1)),
- (0xfcd2, (3115, 2)),
- (0x2189, (543, 3)),
- (0x107ae, (4279, 1)),
- (0xffd3, (4212, 1)),
- (0x2f2d, (902, 1)),
- (0xfd56, (3354, 3)),
- (0x2105, (374, 3)),
- (0xfbff, (2672, 1)),
- (0xfbea, (2615, 3)),
- (0x1d71d, (5062, 1)),
- (0x1ee42, (5400, 1)),
- (0xfdfc, (3753, 4)),
- (0x33d8, (2330, 4)),
- (0x675, (112, 2)),
- (0x1cb, (52, 2)),
- (0xfd6b, (3417, 3)),
- (0x332a, (1837, 3)),
- (0x1d7a7, (5200, 1)),
- (0xfb51, (2490, 1)),
- (0x33fd, (2429, 3)),
- (0x1ee57, (5410, 1)),
- (0xa0, (0, 1)),
- (0x2f2b, (900, 1)),
- (0x1d404, (4295, 1)),
- (0x2081, (336, 1)),
- (0xf79, (132, 3)),
- (0xfeec, (3978, 1)),
- (0xfc2f, (2772, 2)),
- (0x1d52, (171, 1)),
- (0xff41, (4073, 1)),
- (0x1d5ad, (4696, 1)),
- (0x2133, (415, 1)),
- (0x1d7ab, (5204, 1)),
- (0x1d463, (4389, 1)),
- (0xfe71, (3832, 2)),
- (0xfbaf, (2586, 1)),
- (0x1d736, (5087, 1)),
- (0x1d5e, (183, 1)),
- (0x2e3, (86, 1)),
- (0xfea4, (3906, 1)),
- (0x1e035, (5292, 1)),
- (0x3354, (2002, 5)),
- (0x211a, (397, 1)),
- (0xfe8b, (3879, 2)),
- (0x1ee5f, (5414, 1)),
- (0x1d74f, (5112, 1)),
- (0x1d78, (196, 1)),
- (0x1f13f, (5614, 1)),
- (0xffc7, (4204, 1)),
- (0x314b, (1110, 1)),
- (0x1d5a6, (4689, 1)),
- (0xfd0a, (3232, 2)),
- (0x2476, (593, 3)),
- (0x1e037, (5294, 1)),
- (0x1d63, (188, 1)),
- (0xfb62, (2507, 1)),
- (0xfdf6, (3712, 4)),
- (0xfd7a, (3462, 3)),
- (0xffa2, (4170, 1)),
- (0x1c4, (35, 3)),
- (0x1d4f4, (4523, 1)),
- (0x3388, (2135, 3)),
- (0x1d5a2, (4685, 1)),
- (0x2f90, (1001, 1)),
- (0x3281, (1506, 1)),
- (0x1d4b2, (4460, 1)),
- (0x1d61a, (4805, 1)),
- (0xfcc8, (3095, 2)),
- (0x1d61e, (4809, 1)),
- (0xfcb3, (3053, 2)),
- (0xfd86, (3498, 3)),
- (0x2096, (356, 1)),
- (0x1d714, (5053, 1)),
- (0xfed7, (3957, 1)),
- (0xff8c, (4148, 1)),
- (0x2f77, (976, 1)),
- (0x107b4, (4284, 1)),
- (0x2089, (344, 1)),
- (0x3207, (1213, 3)),
- (0xfd15, (3254, 2)),
- (0x1d6b7, (4960, 1)),
- (0x1f134, (5603, 1)),
- (0xfe59, (3812, 1)),
- (0x1d6d4, (4989, 1)),
- (0x1d708, (5041, 1)),
- (0x1d7f6, (5277, 1)),
- (0x1d74e, (5111, 1)),
- (0x1d7db, (5250, 1)),
- (0xfcbe, (3075, 2)),
- (0x2f86, (991, 1)),
- (0x2f35, (910, 1)),
- (0xfb81, (2538, 1)),
- (0x1d569, (4628, 1)),
- (0x3189, (1172, 1)),
- (0xfc71, (2916, 2)),
- (0x1d45b, (4381, 1)),
- (0xff4b, (4083, 1)),
- (0xfbdb, (2599, 1)),
- (0x3243, (1412, 3)),
- (0x2b5, (67, 1)),
- (0x1d564, (4623, 1)),
- (0x3170, (1147, 1)),
- (0xfbdd, (2601, 2)),
- (0x2fce, (1063, 1)),
- (0x215a, (466, 3)),
- (0x2175, (522, 2)),
- (0xfd7f, (3477, 3)),
- (0x3380, (2119, 2)),
- (0xff4c, (4084, 1)),
- (0x1d6cb, (4980, 1)),
- (0xfee2, (3968, 1)),
- (0xffc5, (4202, 1)),
- (0x32ae, (1551, 1)),
- (0xfe69, (3827, 1)),
- (0x3235, (1370, 3)),
- (0x24bc, (793, 1)),
- (0x2fbb, (1044, 1)),
- (0xffa3, (4171, 1)),
- (0x3316, (1759, 6)),
- (0x1f12b, (5593, 1)),
- (0xfc11, (2712, 2)),
- (0x2f44, (925, 1)),
- (0xfbd3, (2591, 1)),
- (0x1d63b, (4838, 1)),
- (0xfd0f, (3242, 2)),
- (0x1f146, (5621, 1)),
- (0x328e, (1519, 1)),
- (0x309c, (1078, 2)),
- (0x1da6, (208, 1)),
- (0x32bd, (1578, 2)),
- (0xfba2, (2571, 1)),
- (0x1d527, (4569, 1)),
- (0xfcc5, (3089, 2)),
- (0x332d, (1850, 5)),
- (0xfe5a, (3813, 1)),
- (0x1d60c, (4791, 1)),
- (0x2481, (630, 4)),
- (0xfe4e, (3802, 1)),
- (0xff45, (4077, 1)),
- (0x32ef, (1652, 1)),
- (0x1d2d, (137, 1)),
- (0x3135, (1088, 1)),
- (0x3342, (1937, 3)),
- (0x1f117, (5533, 3)),
- (0x1d72b, (5076, 1)),
- (0x1d41, (155, 1)),
- (0xff5d, (4101, 1)),
- (0xfd03, (3218, 2)),
- (0xfecc, (3946, 1)),
- (0x1d52f, (4577, 1)),
- (0xfc23, (2748, 2)),
- (0x1d522, (4564, 1)),
- (0x32f8, (1661, 1)),
- (0x3143, (1102, 1)),
- (0x1d450, (4371, 1)),
- (0x2db, (77, 2)),
- (0xfccb, (3101, 2)),
- (0x24b1, (772, 3)),
- (0x1d7ee, (5269, 1)),
- (0x1d52d, (4575, 1)),
- (0x1d792, (5179, 1)),
- (0x2fa9, (1026, 1)),
- (0x3206, (1210, 3)),
- (0x2f22, (891, 1)),
- (0x2f14, (877, 1)),
- (0x309b, (1076, 2)),
- (0x1eea9, (5472, 1)),
- (0xfd74, (3444, 3)),
- (0x1d6a, (195, 1)),
- (0x1e05e, (5333, 1)),
- (0x1d5d6, (4737, 1)),
- (0x1d504, (4539, 1)),
- (0xfc9e, (3011, 2)),
- (0x2153, (445, 3)),
- (0x1d421, (4324, 1)),
- (0x1eea5, (5468, 1)),
- (0x2f67, (960, 1)),
- (0x3d4, (100, 2)),
- (0xfc82, (2950, 2)),
- (0x1ee98, (5461, 1)),
- (0x2f1f, (888, 1)),
- (0x1d7d3, (5242, 1)),
- (0x3313, (1745, 6)),
- (0x325e, (1448, 2)),
- (0x2f74, (973, 1)),
- (0x336c, (2068, 3)),
- (0x2484, (642, 4)),
- (0xfe66, (3825, 1)),
- (0x1078b, (4244, 1)),
- (0xfef6, (3990, 3)),
- (0xfd85, (3495, 3)),
- (0x1d48b, (4429, 1)),
- (0x2487, (654, 4)),
- (0x1d64f, (4858, 1)),
- (0xfe7d, (3852, 2)),
- (0xfd7c, (3468, 3)),
- (0xfcc1, (3081, 2)),
- (0x1d4a2, (4449, 1)),
- (0x203e, (308, 2)),
- (0x1d598, (4675, 1)),
- (0x323c, (1391, 3)),
- (0x247a, (605, 3)),
- (0xfd12, (3248, 2)),
- (0x1d429, (4332, 1)),
- (0x1ee13, (5367, 1)),
- (0xfc8d, (2972, 2)),
- (0x2f29, (898, 1)),
- (0x1d6a1, (4940, 1)),
- (0x1f110, (5512, 3)),
- (0x1d2c, (136, 1)),
- (0x1d7b8, (5217, 1)),
- (0x32ec, (1649, 1)),
- (0x3145, (1104, 1)),
- (0xfdbf, (3663, 3)),
- (0x1d54d, (4601, 1)),
- (0x3181, (1164, 1)),
- (0xfc67, (2893, 3)),
- (0xff34, (4060, 1)),
- (0x1d6e3, (5004, 1)),
- (0xfd70, (3432, 3)),
- (0x1d608, (4787, 1)),
- (0x1d711, (5050, 1)),
- (0xff9d, (4165, 1)),
- (0x1d51f, (4561, 1)),
- (0x1d773, (5148, 1)),
- (0xfd95, (3537, 3)),
- (0xff5f, (4103, 1)),
- (0x2174, (521, 1)),
- (0xfec4, (3938, 1)),
- (0x1d523, (4565, 1)),
- (0x207c, (331, 1)),
- (0x2faa, (1027, 1)),
- (0x1d69e, (4937, 1)),
- (0x2f55, (942, 1)),
- (0x1d582, (4653, 1)),
- (0x1d601, (4780, 1)),
- (0x1d7aa, (5203, 1)),
- (0x215f, (481, 2)),
- (0xff4a, (4082, 1)),
- (0x1d477, (4409, 1)),
- (0x1d525, (4567, 1)),
- (0xfda2, (3576, 3)),
- (0xff94, (4156, 1)),
- (0xff8e, (4150, 1)),
- (0x1d43b, (4350, 1)),
- (0x1d709, (5042, 1)),
- (0x1d56d, (4632, 1)),
- (0x33ea, (2372, 3)),
- (0x1ee77, (5432, 1)),
- (0x1eeac, (5474, 1)),
- (0x334d, (1978, 4)),
- (0x1d6a5, (4944, 1)),
- (0x33c2, (2278, 4)),
- (0x1d661, (4876, 1)),
- (0xfd01, (3214, 2)),
- (0x1d5d2, (4733, 1)),
- (0x2008, (283, 1)),
- (0xfd8f, (3525, 3)),
- (0x3227, (1328, 3)),
- (0x1d447, (4362, 1)),
- (0x249d, (712, 3)),
- (0x1f14b, (5627, 2)),
- (0x1d5fc, (4775, 1)),
- (0x1d50a, (4544, 1)),
- (0xfb86, (2543, 1)),
- (0x1d719, (5058, 1)),
- (0x330f, (1729, 4)),
- (0xfd6a, (3414, 3)),
- (0xfc9d, (3009, 2)),
- (0xfc3e, (2802, 2)),
- (0x1e064, (5339, 1)),
- (0x3d1, (96, 1)),
- (0xffaf, (4183, 1)),
- (0x1d433, (4342, 1)),
- (0xfbfe, (2671, 1)),
- (0x1d4dc, (4499, 1)),
- (0xfbf0, (2633, 3)),
- (0x33dd, (2343, 2)),
- (0xfcf5, (3190, 2)),
- (0xfce6, (3157, 2)),
- (0x1d554, (4607, 1)),
- (0x1fdf, (262, 3)),
- (0x2082, (337, 1)),
- (0xfeaf, (3917, 1)),
- (0x1d43d, (4352, 1)),
- (0x1c9, (48, 2)),
- (0x1e060, (5335, 1)),
- (0xff29, (4049, 1)),
- (0x33b6, (2254, 2)),
- (0xfb57, (2496, 1)),
- (0xfeb2, (3920, 1)),
- (0x1d703, (5036, 1)),
- (0x1d5e9, (4756, 1)),
- (0x24e1, (830, 1)),
- (0x10794, (4253, 1)),
- (0x328f, (1520, 1)),
- (0x1e049, (5312, 1)),
- (0x1d58c, (4663, 1)),
- (0x335d, (2028, 2)),
- (0x3039, (1074, 1)),
- (0x1d46d, (4399, 1)),
- (0x2f49, (930, 1)),
- (0x1f222, (5670, 1)),
- (0x32fe, (1667, 1)),
- (0x1d79c, (5189, 1)),
- (0x3179, (1156, 1)),
- (0x1d697, (4930, 1)),
- (0x1c8, (46, 2)),
- (0x2138, (420, 1)),
- (0x1d6ac, (4949, 1)),
- (0xfc20, (2742, 2)),
- (0x327e, (1503, 2)),
- (0xfd24, (3284, 2)),
- (0x32df, (1636, 1)),
- (0xfc53, (2844, 2)),
- (0xfeb9, (3927, 1)),
- (0x1d76e, (5143, 1)),
- (0x3378, (2099, 3)),
- (0xff9f, (4167, 1)),
- (0x1ee19, (5373, 1)),
- (0x1f119, (5539, 3)),
- (0x1d480, (4418, 1)),
- (0xfc1d, (2736, 2)),
- (0x30ff, (1082, 2)),
- (0xfb63, (2508, 1)),
- (0x1f13a, (5609, 1)),
- (0x333c, (1914, 4)),
- (0xfc87, (2960, 2)),
- (0x1d45c, (4382, 1)),
- (0xfea9, (3911, 1)),
- (0x1d41a, (4317, 1)),
- (0x1eebb, (5489, 1)),
- (0x1d54e, (4602, 1)),
- (0xffc4, (4201, 1)),
- (0x1d423, (4326, 1)),
- (0xfcdc, (3135, 2)),
- (0x1d58f, (4666, 1)),
- (0x1d456, (4376, 1)),
- (0xfd8c, (3516, 3)),
- (0x1d5c2, (4717, 1)),
- (0xfdbb, (3651, 3)),
- (0x1d67c, (4903, 1)),
- (0x1d4ab, (4454, 1)),
- (0x1d557, (4610, 1)),
- (0xfce4, (3153, 2)),
- (0x322f, (1352, 3)),
- (0x33bc, (2266, 2)),
- (0xfe7e, (3854, 2)),
- (0x1d44f, (4370, 1)),
- (0x1d74a, (5107, 1)),
- (0x3167, (1138, 1)),
- (0xfb9e, (2567, 1)),
- (0xff6e, (4118, 1)),
- (0xff90, (4152, 1)),
- (0x1d700, (5033, 1)),
- (0x1d431, (4340, 1)),
- (0x1d459, (4379, 1)),
- (0x213b, (422, 3)),
- (0x1d779, (5154, 1)),
- (0xfc46, (2818, 2)),
- (0x334b, (1970, 3)),
- (0xfc41, (2808, 2)),
- (0x3279, (1488, 2)),
- (0x3294, (1525, 1)),
- (0x1d4eb, (4514, 1)),
- (0x1d71f, (5064, 1)),
- (0x2f28, (897, 1)),
- (0xfbe8, (2613, 1)),
- (0x24a2, (727, 3)),
- (0x1d759, (5122, 1)),
- (0xfcba, (3067, 2)),
- (0x1d2e, (138, 1)),
- (0xfb97, (2560, 1)),
- (0x248c, (666, 2)),
- (0x1da5, (207, 1)),
- (0x33d3, (2318, 2)),
- (0xfdf4, (3704, 4)),
- (0x107a3, (4268, 1)),
- (0x2f8d, (998, 1)),
- (0x1fbf7, (5732, 1)),
- (0x1ee7e, (5437, 1)),
- (0xff31, (4057, 1)),
- (0xfd04, (3220, 2)),
- (0x323e, (1397, 3)),
- (0x246c, (571, 2)),
- (0x1d7e9, (5264, 1)),
- (0xfd76, (3450, 3)),
- (0x3328, (1832, 2)),
- (0x1d602, (4781, 1)),
- (0xfe60, (3819, 1)),
- (0x1d58, (177, 1)),
- (0xfd8e, (3522, 3)),
- (0x320b, (1225, 3)),
- (0x2fa4, (1021, 1)),
- (0xfcd8, (3127, 2)),
- (0xfcd3, (3117, 2)),
- (0x1d446, (4361, 1)),
- (0x3310, (1733, 4)),
- (0x1d66a, (4885, 1)),
- (0x33ce, (2307, 2)),
- (0xf77, (129, 3)),
- (0x1d7b7, (5216, 1)),
- (0xfb8a, (2547, 1)),
- (0x2f2f, (904, 1)),
- (0x3372, (2086, 2)),
- (0x2479, (602, 3)),
- (0x24c8, (805, 1)),
- (0x1d485, (4423, 1)),
- (0x1d476, (4408, 1)),
- (0x33c1, (2276, 2)),
- (0x2f7a, (979, 1)),
- (0x1d6f9, (5026, 1)),
- (0x1d42b, (4334, 1)),
- (0x1d475, (4407, 1)),
- (0xfe51, (3805, 1)),
- (0x1dbf, (233, 1)),
- (0x3180, (1163, 1)),
- (0x1d427, (4330, 1)),
- (0x2f08, (865, 1)),
- (0x1e03a, (5297, 1)),
- (0x3381, (2121, 2)),
- (0xff5e, (4102, 1)),
- (0x1d75f, (5128, 1)),
- (0x1f2, (58, 2)),
- (0x1d539, (4587, 1)),
- (0x1d4f9, (4528, 1)),
- (0x2f43, (924, 1)),
- (0xfd1d, (3270, 2)),
- (0xfc1f, (2740, 2)),
- (0x247d, (614, 4)),
- (0xff3e, (4070, 1)),
- (0x1d776, (5151, 1)),
- (0x1d9f, (201, 1)),
- (0x1ee16, (5370, 1)),
- (0x3256, (1432, 2)),
- (0xff7a, (4130, 1)),
- (0x1d629, (4820, 1)),
- (0x1ee54, (5409, 1)),
- (0xff59, (4097, 1)),
- (0x1d6cf, (4984, 1)),
- (0x1d6f6, (5023, 1)),
- (0x33b5, (2252, 2)),
- (0x1d7b9, (5218, 1)),
- (0xffd2, (4211, 1)),
- (0x3358, (2018, 2)),
- (0x2f2a, (899, 1)),
- (0x2e1, (84, 1)),
- (0xfc68, (2896, 3)),
- (0x3329, (1834, 3)),
- (0xfce1, (3147, 2)),
- (0x1d732, (5083, 1)),
- (0xfb54, (2493, 1)),
- (0x1d4e4, (4507, 1)),
- (0x222d, (548, 3)),
- (0xfdb1, (3621, 3)),
- (0x1d794, (5181, 1)),
- (0xfe88, (3873, 2)),
- (0x1d7c8, (5233, 1)),
- (0xff43, (4075, 1)),
- (0x1d420, (4323, 1)),
- (0xfc3d, (2800, 2)),
- (0xfd18, (3260, 2)),
- (0xfe87, (3871, 2)),
- (0x2fd0, (1065, 1)),
- (0xfbf9, (2660, 3)),
- (0x323b, (1388, 3)),
- (0x1d685, (4912, 1)),
- (0x2087, (342, 1)),
- (0x1d75d, (5126, 1)),
- (0x1d47, (161, 1)),
- (0xfc42, (2810, 2)),
- (0x2f3f, (920, 1)),
- (0xfe82, (3861, 2)),
- (0x1d6c5, (4974, 1)),
- (0x1ee88, (5446, 1)),
- (0x32e9, (1646, 1)),
- (0x1d44d, (4368, 1)),
- (0xfc52, (2842, 2)),
- (0x321c, (1290, 4)),
- (0x1fee, (268, 3)),
- (0x1d448, (4363, 1)),
- (0x3349, (1962, 2)),
- (0x1d5e2, (4749, 1)),
- (0x1f214, (5656, 1)),
- (0x3239, (1382, 3)),
- (0x2005, (280, 1)),
- (0x1f11e, (5554, 3)),
- (0x1f238, (5692, 1)),
- (0x2f3b, (916, 1)),
- (0xfdaf, (3615, 3)),
- (0x1d6da, (4995, 1)),
- (0xffec, (4232, 1)),
- (0x1d62c, (4823, 1)),
- (0x3226, (1325, 3)),
- (0xff93, (4155, 1)),
- (0x3314, (1751, 2)),
- (0x2079, (328, 1)),
- (0xff8f, (4151, 1)),
- (0x3173, (1150, 1)),
- (0x1d583, (4654, 1)),
- (0x1fbf9, (5734, 1)),
- (0xb4, (8, 2)),
- (0xfdc2, (3672, 3)),
- (0x1d32, (141, 1)),
- (0x1d418, (4315, 1)),
- (0xff7f, (4135, 1)),
- (0x1f133, (5602, 1)),
- (0x32a0, (1537, 1)),
- (0xfd63, (3393, 3)),
- (0x1d771, (5146, 1)),
- (0x33ad, (2228, 3)),
- (0x2b7, (69, 1)),
- (0x1f211, (5652, 1)),
- (0x1f16b, (5640, 2)),
- (0xfb77, (2528, 1)),
- (0xfefa, (4002, 3)),
- (0x1d461, (4387, 1)),
- (0x32ea, (1647, 1)),
- (0x1d555, (4608, 1)),
- (0x1dab, (213, 1)),
- (0xfebc, (3930, 1)),
- (0x1d6b1, (4954, 1)),
- (0x317e, (1161, 1)),
- (0x1d5b1, (4700, 1)),
- (0xfe95, (3891, 1)),
- (0x331f, (1800, 4)),
- (0x1d70c, (5045, 1)),
- (0x1d662, (4877, 1)),
- (0x1d70e, (5047, 1)),
- (0x1d417, (4314, 1)),
- (0xfc10, (2710, 2)),
- (0xfc1a, (2730, 2)),
- (0x1d755, (5118, 1)),
- (0x3134, (1087, 1)),
- (0x3308, (1704, 4)),
- (0x1d541, (4593, 1)),
- (0x10787, (4240, 1)),
- (0xfeac, (3914, 1)),
- (0x1f229, (5677, 1)),
- (0x1e046, (5309, 1)),
- (0x24c3, (800, 1)),
- (0x2026, (292, 3)),
- (0x149, (32, 2)),
- (0x33e7, (2365, 2)),
- (0x211c, (399, 1)),
- (0x2f58, (945, 1)),
- (0x1d5ff, (4778, 1)),
- (0xfe9b, (3897, 1)),
- (0xfd2f, (3306, 2)),
- (0x1d710, (5049, 1)),
- (0x1d65, (190, 1)),
- (0xfc1e, (2738, 2)),
- (0xfd9d, (3561, 3)),
- (0x2077, (326, 1)),
- (0x24cb, (808, 1)),
- (0x1eeba, (5488, 1)),
- (0xff0e, (4022, 1)),
- (0xfb7e, (2535, 1)),
- (0x3337, (1895, 3)),
- (0x248d, (668, 2)),
- (0xfd99, (3549, 3)),
- (0xfd65, (3399, 3)),
- (0x1d7ac, (5205, 1)),
- (0x1f11c, (5548, 3)),
- (0x32ff, (1668, 2)),
- (0x1ee7a, (5434, 1)),
- (0x1e06b, (5346, 1)),
- (0xfe47, (3791, 1)),
- (0x1d637, (4834, 1)),
- (0x3264, (1456, 1)),
- (0xfc58, (2854, 2)),
- (0x1d603, (4782, 1)),
- (0x1d478, (4410, 1)),
- (0xff0a, (4018, 1)),
- (0xfda3, (3579, 3)),
- (0x1d44, (158, 1)),
- (0x24d0, (813, 1)),
- (0xab5e, (2448, 1)),
- (0xfcfc, (3204, 2)),
- (0xffe0, (4220, 1)),
- (0x1ee0a, (5358, 1)),
- (0x313d, (1096, 1)),
- (0x3398, (2174, 2)),
- (0xfcd0, (3111, 2)),
- (0x2f6e, (967, 1)),
- (0x202f, (295, 1)),
- (0xfcaa, (3035, 2)),
- (0x1d43a, (4349, 1)),
- (0xfd23, (3282, 2)),
- (0x2ef3, (856, 1)),
- (0xfe5f, (3818, 1)),
- (0x2f93, (1004, 1)),
- (0x2086, (341, 1)),
- (0xfd6d, (3423, 3)),
- (0x249f, (718, 3)),
- (0x1d424, (4327, 1)),
- (0x1fbf8, (5733, 1)),
- (0x1d462, (4388, 1)),
- (0xfe4d, (3801, 1)),
- (0x1d53b, (4588, 1)),
- (0xfe49, (3793, 2)),
- (0x1d6ab, (4948, 1)),
- (0x3132, (1085, 1)),
- (0x1d7c2, (5227, 1)),
- (0xfd9c, (3558, 3)),
- (0x2fc2, (1051, 1)),
- (0x33f4, (2402, 3)),
- (0x213c, (425, 1)),
- (0x1d7e8, (5263, 1)),
- (0xff88, (4144, 1)),
- (0x1d79d, (5190, 1)),
- (0x24c1, (798, 1)),
- (0x24e0, (829, 1)),
- (0x1eeb8, (5486, 1)),
- (0xfc70, (2914, 2)),
- (0xfc6c, (2906, 2)),
- (0x2fac, (1029, 1)),
- (0x1f202, (5650, 1)),
- (0xfbf3, (2642, 3)),
- (0x2f78, (977, 1)),
- (0x3255, (1430, 2)),
- (0x2f2e, (903, 1)),
- (0xfb24, (2481, 1)),
- (0x32af, (1552, 1)),
- (0x1d4a, (164, 1)),
- (0x2f25, (894, 1)),
- (0x1ee6e, (5424, 1)),
- (0xfd2d, (3302, 2)),
- (0xff6a, (4114, 1)),
- (0x2466, (562, 1)),
- (0x1d579, (4644, 1)),
- (0x1f231, (5685, 1)),
- (0xfc61, (2875, 3)),
- (0x1d7fd, (5284, 1)),
- (0xfd5f, (3381, 3)),
- (0x1ee1a, (5374, 1)),
- (0x3348, (1958, 4)),
- (0xfba9, (2580, 1)),
- (0x1d45f, (4385, 1)),
- (0x1d66d, (4888, 1)),
- (0xfce8, (3161, 2)),
- (0xfb5b, (2500, 1)),
- (0x1ee62, (5416, 1)),
- (0x3146, (1105, 1)),
- (0x33ac, (2225, 3)),
- (0x1f149, (5624, 1)),
- (0x3295, (1526, 1)),
- (0x3333, (1877, 4)),
- (0xfc0f, (2708, 2)),
- (0xff8a, (4146, 1)),
- (0x3387, (2133, 2)),
- (0x676, (114, 2)),
- (0xffcd, (4208, 1)),
- (0xfe86, (3869, 2)),
- (0x1d6e8, (5009, 1)),
- (0xfc40, (2806, 2)),
- (0xfc0a, (2698, 2)),
- (0x10788, (4241, 1)),
- (0x2fc0, (1049, 1)),
- (0x1d5b6, (4705, 1)),
- (0xffa8, (4176, 1)),
- (0x3289, (1514, 1)),
- (0xfd79, (3459, 3)),
- (0x3300, (1670, 5)),
- (0x1d55, (174, 1)),
- (0x24b5, (784, 3)),
- (0x2f4c, (933, 1)),
- (0x3163, (1134, 1)),
- (0x2002, (277, 1)),
- (0x2f57, (944, 1)),
- (0xfcdb, (3133, 2)),
- (0x1d49f, (4448, 1)),
- (0x1d688, (4915, 1)),
- (0xff18, (4032, 1)),
- (0x2f54, (941, 1)),
- (0x1ee85, (5443, 1)),
- (0x2fd1, (1066, 1)),
- (0x33c5, (2286, 2)),
- (0xfb53, (2492, 1)),
- (0x3197, (1183, 1)),
- (0x2fcf, (1064, 1)),
- (0x1d516, (4553, 1)),
- (0x3201, (1195, 3)),
- (0xfd82, (3486, 3)),
- (0xff16, (4030, 1)),
- (0x2150, (435, 3)),
- (0x1f109, (5508, 2)),
- (0xfe9d, (3899, 1)),
- (0x210f, (388, 1)),
- (0x320e, (1234, 4)),
- (0x1e040, (5303, 1)),
- (0x330a, (1711, 3)),
- (0x1ee0e, (5362, 1)),
- (0xfc45, (2816, 2)),
- (0xff48, (4080, 1)),
- (0xfc47, (2820, 2)),
- (0x1d505, (4540, 1)),
- (0x2169, (503, 1)),
- (0x24dc, (825, 1)),
- (0x1d7d8, (5247, 1)),
- (0xfb55, (2494, 1)),
- (0xfe84, (3865, 2)),
- (0x1ee22, (5381, 1)),
- (0x1d772, (5147, 1)),
- (0x33f0, (2390, 3)),
- (0x1d4b1, (4459, 1)),
- (0xff99, (4161, 1)),
- (0xfd2e, (3304, 2)),
- (0x2159, (463, 3)),
- (0x1d58d, (4664, 1)),
- (0x1d627, (4818, 1)),
- (0xfeeb, (3977, 1)),
- (0x3334, (1881, 6)),
- (0x1f126, (5578, 3)),
- (0x3144, (1103, 1)),
- (0x1e036, (5293, 1)),
- (0x1db9, (227, 1)),
- (0x1d6ea, (5011, 1)),
- (0x1d6ee, (5015, 1)),
- (0xfec6, (3940, 1)),
- (0x1d64c, (4855, 1)),
- (0xfcbb, (3069, 2)),
- (0x2033, (296, 2)),
- (0x2009, (284, 1)),
- (0x3377, (2097, 2)),
- (0x3160, (1131, 1)),
- (0x1d48c, (4430, 1)),
- (0x24b3, (778, 3)),
- (0x1d4d0, (4487, 1)),
- (0xffcb, (4206, 1)),
- (0xfdad, (3609, 3)),
- (0x1ee8b, (5448, 1)),
- (0xfeb1, (3919, 1)),
- (0xfcea, (3165, 2)),
- (0x2f76, (975, 1)),
- (0x32be, (1580, 2)),
- (0x1d7b1, (5210, 1)),
- (0x1d5f8, (4771, 1)),
- (0xfd73, (3441, 3)),
- (0xff1a, (4034, 1)),
- (0xfca2, (3019, 2)),
- (0x211b, (398, 1)),
- (0x1d5b2, (4701, 1)),
- (0xfb60, (2505, 1)),
- (0x1ee2e, (5389, 1)),
- (0x2071, (322, 1)),
- (0x1d4bb, (4468, 1)),
- (0x33fc, (2426, 3)),
- (0xfeef, (3981, 1)),
- (0x1d4fb, (4530, 1)),
- (0x1d728, (5073, 1)),
- (0xfcff, (3210, 2)),
- (0x1d6f8, (5025, 1)),
- (0x1d535, (4583, 1)),
- (0x1d34, (143, 1)),
- (0x2165, (492, 2)),
- (0x1ee2c, (5387, 1)),
- (0x1d5dd, (4744, 1)),
- (0x2140, (429, 1)),
- (0x322d, (1346, 3)),
- (0x1ee96, (5459, 1)),
- (0xffbe, (4198, 1)),
- (0x1eeb5, (5483, 1)),
- (0x3311, (1737, 4)),
- (0xfd89, (3507, 3)),
- (0x32d7, (1628, 1)),
- (0x2f91, (1002, 1)),
- (0x10798, (4257, 1)),
- (0x246b, (569, 2)),
- (0x24c2, (799, 1)),
- (0x1d50e, (4546, 1)),
- (0xffbc, (4196, 1)),
- (0xfd9e, (3564, 3)),
- (0x2115, (393, 1)),
- (0x1d715, (5054, 1)),
- (0xfcac, (3039, 2)),
- (0xfc98, (2995, 3)),
- (0xfc66, (2890, 3)),
- (0x2d6f, (854, 1)),
- (0x1d59c, (4679, 1)),
- (0xfc01, (2676, 3)),
- (0x1ee49, (5402, 1)),
- (0x2119, (396, 1)),
- (0x24d7, (820, 1)),
- (0x1d642, (4845, 1)),
- (0x3304, (1687, 5)),
- (0x3198, (1184, 1)),
- (0xfed4, (3954, 1)),
- (0x2f6c, (965, 1)),
- (0x1d406, (4297, 1)),
- (0x1d61d, (4808, 1)),
- (0x33d5, (2322, 3)),
- (0x1ee07, (5355, 1)),
- (0x1d4ce, (4485, 1)),
- (0x1f101, (5492, 2)),
- (0x10792, (4251, 1)),
- (0x24be, (795, 1)),
- (0x2fbc, (1045, 1)),
- (0x1f14f, (5636, 2)),
- (0xfe12, (3759, 1)),
- (0xfec7, (3941, 1)),
- (0xfc2d, (2768, 2)),
- (0x248a, (662, 2)),
- (0x1fed, (265, 3)),
- (0x1d6d5, (4990, 1)),
- (0x2fb2, (1035, 1)),
- (0xfc8b, (2968, 2)),
- (0x3158, (1123, 1)),
- (0xffe3, (4223, 2)),
- (0xfb84, (2541, 1)),
- (0xfb65, (2510, 1)),
- (0x1ee93, (5456, 1)),
- (0x3208, (1216, 3)),
- (0x32fc, (1665, 1)),
- (0xfe94, (3890, 1)),
- (0x2f4f, (936, 1)),
- (0x2f87, (992, 1)),
- (0x1ee75, (5430, 1)),
- (0x2057, (316, 4)),
- (0x1d617, (4802, 1)),
- (0x1d5e1, (4748, 1)),
- (0xfdac, (3606, 3)),
- (0x2f0e, (871, 1)),
- (0x211d, (400, 1)),
- (0x331c, (1790, 3)),
- (0x2f83, (988, 1)),
- (0x1d5c3, (4718, 1)),
- (0x3373, (2088, 2)),
- (0x1f13b, (5610, 1)),
- (0x2486, (650, 4)),
- (0x1d665, (4880, 1)),
- (0xfce0, (3144, 3)),
- (0x3d3, (98, 2)),
- (0x1d403, (4294, 1)),
- (0x1d640, (4843, 1)),
- (0x24ac, (757, 3)),
- (0x2f39, (914, 1)),
- (0x1f140, (5615, 1)),
- (0xfb6f, (2520, 1)),
- (0xfd13, (3250, 2)),
- (0x1d4c6, (4477, 1)),
- (0x1f248, (5720, 3)),
- (0x3183, (1166, 1)),
- (0x1d62e, (4825, 1)),
- (0x1f148, (5623, 1)),
- (0xfb89, (2546, 1)),
- (0x1ee81, (5439, 1)),
- (0xfc25, (2752, 2)),
- (0x1f223, (5671, 1)),
- (0x334e, (1982, 4)),
- (0x2fd2, (1067, 1)),
- (0xfd54, (3348, 3)),
- (0xff01, (4009, 1)),
- (0x1d740, (5097, 1)),
- (0x1d7bc, (5221, 1)),
- (0x1db4, (222, 1)),
- (0x1d43e, (4353, 1)),
- (0xfca9, (3033, 2)),
- (0xfd22, (3280, 2)),
- (0x2f23, (892, 1)),
- (0x314e, (1113, 1)),
- (0xfe8a, (3877, 2)),
- (0xff03, (4011, 1)),
- (0x3292, (1523, 1)),
- (0xfcf6, (3192, 2)),
- (0x1d3f, (153, 1)),
- (0x1db8, (226, 1)),
- (0xfe68, (3826, 1)),
- (0x1d69, (194, 1)),
- (0x1079b, (4260, 1)),
- (0x331b, (1786, 4)),
- (0xfda7, (3591, 3)),
- (0xffdb, (4218, 1)),
- (0xfc7c, (2938, 2)),
- (0xfda5, (3585, 3)),
- (0x3341, (1934, 3)),
- (0x24a7, (742, 3)),
- (0x3216, (1266, 4)),
- (0x2f3e, (919, 1)),
- (0xff9c, (4164, 1)),
- (0xfb20, (2477, 1)),
- (0x1f116, (5530, 3)),
- (0x325b, (1442, 2)),
- (0x1d5e6, (4753, 1)),
- (0x1d79e, (5191, 1)),
- (0x1ee14, (5368, 1)),
- (0x333f, (1927, 2)),
- (0x32d4, (1625, 1)),
- (0x1f22d, (5681, 1)),
- (0xfd88, (3504, 3)),
- (0x1d4d9, (4496, 1)),
- (0xfdaa, (3600, 3)),
- (0xfcc6, (3091, 2)),
- (0x1d56e, (4633, 1)),
- (0x1ee39, (5398, 1)),
- (0x1d48a, (4428, 1)),
- (0x1d7d0, (5239, 1)),
- (0xb9, (13, 1)),
- (0x1f120, (5560, 3)),
- (0x1d60b, (4790, 1)),
- (0x2f70, (969, 1)),
- (0x1d4fa, (4529, 1)),
- (0x2f5c, (949, 1)),
- (0x32ab, (1548, 1)),
- (0xfba3, (2572, 1)),
- (0x2f02, (859, 1)),
- (0x1f11f, (5557, 3)),
- (0xfc69, (2899, 3)),
- (0x24d4, (817, 1)),
- (0x2491, (676, 3)),
- (0x326b, (1463, 1)),
- (0xfc08, (2694, 2)),
- (0x1d7b2, (5211, 1)),
- (0x33ff, (2435, 3)),
- (0xfb8d, (2550, 1)),
- (0x1fbf0, (5725, 1)),
- (0x3252, (1424, 2)),
- (0x1d6e5, (5006, 1)),
- (0x1d5ac, (4695, 1)),
- (0xfb94, (2557, 1)),
- (0x2f63, (956, 1)),
- (0x107a2, (4267, 1)),
- (0xfc06, (2690, 2)),
- (0xfc5a, (2858, 2)),
- (0xff75, (4125, 1)),
- (0xfeda, (3960, 1)),
- (0xff79, (4129, 1)),
- (0x2462, (558, 1)),
- (0xfc09, (2696, 2)),
- (0x2111, (390, 1)),
- (0x319e, (1190, 1)),
- (0x1d451, (4372, 1)),
- (0x2f20, (889, 1)),
- (0x1d6a0, (4939, 1)),
- (0x1d577, (4642, 1)),
- (0x1d7b6, (5215, 1)),
- (0xff15, (4029, 1)),
- (0x1d744, (5101, 1)),
- (0x1f21c, (5664, 1)),
- (0x1fbf2, (5727, 1)),
- (0xfc3a, (2794, 2)),
- (0x337b, (2107, 2)),
- (0xfdb8, (3642, 3)),
- (0xffc3, (4200, 1)),
- (0x33db, (2339, 2)),
- (0xff0c, (4020, 1)),
- (0x1d52a, (4572, 1)),
- (0x1ee9b, (5464, 1)),
- (0x24e2, (831, 1)),
- (0xff9e, (4166, 1)),
- (0x32de, (1635, 1)),
- (0x1d574, (4639, 1)),
- (0x1ee76, (5431, 1)),
- (0x1d59e, (4681, 1)),
- (0x1f244, (5708, 3)),
- (0x1f137, (5606, 1)),
- (0xfea0, (3902, 1)),
- (0xff2a, (4050, 1)),
- (0x314f, (1114, 1)),
- (0x1d47c, (4414, 1)),
- (0x1d467, (4393, 1)),
- (0xff4f, (4087, 1)),
- (0xfea1, (3903, 1)),
- (0x33a9, (2217, 2)),
- (0x10799, (4258, 1)),
- (0x1ee12, (5366, 1)),
- (0x2492, (679, 3)),
- (0x1d696, (4929, 1)),
- (0xfcab, (3037, 2)),
- (0xfd19, (3262, 2)),
- (0x1d5e8, (4755, 1)),
- (0x1ee1f, (5379, 1)),
- (0xfe91, (3887, 1)),
- (0x1c7, (44, 2)),
- (0x1d681, (4908, 1)),
- (0x24b7, (788, 1)),
- (0x1d784, (5165, 1)),
- (0x1d742, (5099, 1)),
- (0x33a2, (2196, 3)),
- (0x1d645, (4848, 1)),
- (0x1ee70, (5426, 1)),
- (0x1d611, (4796, 1)),
- (0x337c, (2109, 2)),
- (0x1d442, (4357, 1)),
- (0xfe32, (3772, 1)),
- (0x1d31, (140, 1)),
- (0x3138, (1091, 1)),
- (0x2485, (646, 4)),
- (0x1f114, (5524, 3)),
- (0x1d5d0, (4731, 1)),
- (0x1d635, (4832, 1)),
- (0x3309, (1708, 3)),
- (0x1d408, (4299, 1)),
- (0xfe50, (3804, 1)),
- (0x1ee8d, (5450, 1)),
- (0xfd93, (3531, 3)),
- (0x1d67b, (4902, 1)),
- (0x1d4db, (4498, 1)),
- (0x1f136, (5605, 1)),
- (0x1f22f, (5683, 1)),
- (0x1d7ed, (5268, 1)),
- (0x32f9, (1662, 1)),
- (0x32aa, (1547, 1)),
- (0x33af, (2236, 6)),
- (0x24e4, (833, 1)),
- (0x2003, (278, 1)),
- (0xfd80, (3480, 3)),
- (0x1e04e, (5317, 1)),
- (0x1d59b, (4678, 1)),
- (0x3285, (1510, 1)),
- (0x1d78e, (5175, 1)),
- (0x3379, (2102, 3)),
- (0x107b2, (4282, 1)),
- (0xfeb7, (3925, 1)),
- (0x2470, (579, 2)),
- (0x1d620, (4811, 1)),
- (0x1d4b4, (4462, 1)),
- (0x1d754, (5117, 1)),
- (0x1f246, (5714, 3)),
- (0x2160, (483, 1)),
- (0x1d72f, (5080, 1)),
- (0xfe4f, (3803, 1)),
- (0x1d47a, (4412, 1)),
- (0x1fcd, (247, 3)),
- (0x327d, (1499, 4)),
- (0x338e, (2150, 2)),
- (0x33b3, (2248, 2)),
- (0xfd10, (3244, 2)),
- (0x2f37, (912, 1)),
- (0x3187, (1170, 1)),
- (0xff5c, (4100, 1)),
- (0x2135, (417, 1)),
- (0x1d73b, (5092, 1)),
- (0x3178, (1155, 1)),
- (0xfc86, (2958, 2)),
- (0x2fa5, (1022, 1)),
- (0x1d6f1, (5018, 1)),
- (0x1db5, (223, 1)),
- (0xfb7d, (2534, 1)),
- (0xfc48, (2822, 2)),
- (0x1d56, (175, 1)),
- (0x1d647, (4850, 1)),
- (0xfe65, (3824, 1)),
- (0xfc18, (2726, 2)),
- (0x33f1, (2393, 3)),
- (0x328c, (1517, 1)),
- (0x32b9, (1570, 2)),
- (0xfb79, (2530, 1)),
- (0x1d4ee, (4517, 1)),
- (0x338f, (2152, 2)),
- (0x1d663, (4878, 1)),
- (0x33b7, (2256, 2)),
- (0x1d55a, (4613, 1)),
- (0xfcb1, (3049, 2)),
- (0x3254, (1428, 2)),
- (0xfbde, (2603, 1)),
- (0x2f73, (972, 1)),
- (0x1d497, (4441, 1)),
- (0xff89, (4145, 1)),
- (0x1d5f5, (4768, 1)),
+ (0x1D5E5, (0x12B4, 0x1)),
+ (0x1D430, (0x1117, 0x1)),
+ (0x0FDF1, (0xE6D, 0x3)),
+ (0x024DF, (0x33C, 0x1)),
+ (0x0FF18, (0xFC0, 0x1)),
+ (0x0FD72, (0xD6E, 0x3)),
+ (0x1D5A3, (0x1272, 0x1)),
+ (0x02000, (0x113, 0x1)),
+ (0x1D43F, (0x1126, 0x1)),
+ (0x03197, (0x49F, 0x1)),
+ (0x0FCCC, (0xC1F, 0x2)),
+ (0x033DA, (0x921, 0x2)),
+ (0x03289, (0x5EA, 0x1)),
+ (0x0FFEA, (0x1086, 0x1)),
+ (0x024E1, (0x33E, 0x1)),
+ (0x02155, (0x1C3, 0x3)),
+ (0x03298, (0x5F9, 0x1)),
+ (0x0FEF8, (0xF9C, 0x3)),
+ (0x0FF47, (0xFEF, 0x1)),
+ (0x0FBEC, (0xA3D, 0x3)),
+ (0x1D410, (0x10F7, 0x1)),
+ (0x02177, (0x20F, 0x4)),
+ (0x1D4D3, (0x11AE, 0x1)),
+ (0x0FD63, (0xD41, 0x3)),
+ (0x0335B, (0x7E8, 0x2)),
+ (0x0FED8, (0xF76, 0x1)),
+ (0x032B8, (0x620, 0x2)),
+ (0x1D5F4, (0x12C3, 0x1)),
+ (0x0FF27, (0xFCF, 0x1)),
+ (0x1E055, (0x14F0, 0x1)),
+ (0x0FFAC, (0x1054, 0x1)),
+ (0x01E9A, (0x0EA, 0x2)),
+ (0x1D532, (0x1208, 0x1)),
+ (0x0337A, (0x839, 0x2)),
+ (0x1E041, (0x14DC, 0x1)),
+ (0x02148, (0x1B1, 0x1)),
+ (0x1F21D, (0x1645, 0x1)),
+ (0x1D73C, (0x1409, 0x1)),
+ (0x01DA8, (0x0D2, 0x1)),
+ (0x02F4A, (0x3A3, 0x1)),
+ (0x0FF35, (0xFDD, 0x1)),
+ (0x1D48E, (0x1174, 0x1)),
+ (0x1EE10, (0x1518, 0x1)),
+ (0x02F7D, (0x3D6, 0x1)),
+ (0x02492, (0x2A7, 0x3)),
+ (0x0FB58, (0x9C1, 0x1)),
+ (0x1F227, (0x164F, 0x1)),
+ (0x02F4E, (0x3A7, 0x1)),
+ (0x1D652, (0x1321, 0x1)),
+ (0x1F106, (0x15A2, 0x2)),
+ (0x1D724, (0x13F1, 0x1)),
+ (0x1D6DA, (0x13A7, 0x1)),
+ (0x03204, (0x4B4, 0x3)),
+ (0x0FEE9, (0xF87, 0x1)),
+ (0x1F135, (0x1608, 0x1)),
+ (0x0203E, (0x134, 0x2)),
+ (0x1D46E, (0x1154, 0x1)),
+ (0x1D750, (0x141D, 0x1)),
+ (0x03399, (0x880, 0x2)),
+ (0x0FFD7, (0x1078, 0x1)),
+ (0x03211, (0x4DE, 0x4)),
+ (0x1D538, (0x120E, 0x1)),
+ (0x1E065, (0x1500, 0x1)),
+ (0x03315, (0x6D9, 0x6)),
+ (0x03382, (0x84B, 0x2)),
+ (0x03161, (0x46C, 0x1)),
+ (0x1D60A, (0x12D9, 0x1)),
+ (0x1D4E5, (0x11C0, 0x1)),
+ (0x02F24, (0x37D, 0x1)),
+ (0x0FE6B, (0xEF5, 0x1)),
+ (0x1D58F, (0x125E, 0x1)),
+ (0x0FEC2, (0xF60, 0x1)),
+ (0x0FC2E, (0xAD2, 0x2)),
+ (0x032F2, (0x677, 0x1)),
+ (0x0FF0C, (0xFB4, 0x1)),
+ (0x1E037, (0x14D2, 0x1)),
+ (0x1D7A1, (0x146E, 0x1)),
+ (0x03362, (0x7F6, 0x3)),
+ (0x0FB50, (0x9B9, 0x1)),
+ (0x1D7F2, (0x14BD, 0x1)),
+ (0x0FCA7, (0xBD5, 0x2)),
+ (0x1E059, (0x14F4, 0x1)),
+ (0x0FD99, (0xDDD, 0x3)),
+ (0x1D464, (0x114A, 0x1)),
+ (0x0FB78, (0x9E1, 0x1)),
+ (0x0FE58, (0xEE3, 0x1)),
+ (0x032EE, (0x673, 0x1)),
+ (0x107A8, (0x10B1, 0x1)),
+ (0x0FD5C, (0xD2C, 0x3)),
+ (0x0207E, (0x14D, 0x1)),
+ (0x0321A, (0x502, 0x4)),
+ (0x1D7D8, (0x14A3, 0x1)),
+ (0x01D40, (0x09A, 0x1)),
+ (0x0FCDE, (0xC43, 0x2)),
+ (0x1CCF7, (0x10E4, 0x1)),
+ (0x032A5, (0x606, 0x1)),
+ (0x0FC0C, (0xA8E, 0x2)),
+ (0x0FF40, (0xFE8, 0x1)),
+ (0x033C0, (0x8E2, 0x2)),
+ (0x0FC40, (0xAF6, 0x2)),
+ (0x1D5CD, (0x129C, 0x1)),
+ (0x1D7F8, (0x14C3, 0x1)),
+ (0x01DA1, (0x0CB, 0x1)),
+ (0x02F26, (0x37F, 0x1)),
+ (0x1D706, (0x13D3, 0x1)),
+ (0x0FF36, (0xFDE, 0x1)),
+ (0x0325A, (0x5A0, 0x2)),
+ (0x02F84, (0x3DD, 0x1)),
+ (0x0317D, (0x488, 0x1)),
+ (0x0FC16, (0xAA2, 0x2)),
+ (0x1D5B6, (0x1285, 0x1)),
+ (0x0FD3B, (0xD02, 0x2)),
+ (0x0313E, (0x449, 0x1)),
+ (0x1D69F, (0x136E, 0x1)),
+ (0x024A8, (0x2E9, 0x3)),
+ (0x1D50F, (0x11E7, 0x1)),
+ (0x0FD52, (0xD0E, 0x3)),
+ (0x02112, (0x187, 0x1)),
+ (0x0FDF0, (0xE6A, 0x3)),
+ (0x1D77A, (0x1447, 0x1)),
+ (0x0FF7E, (0x1026, 0x1)),
+ (0x1D7E0, (0x14AB, 0x1)),
+ (0x0FC07, (0xA84, 0x2)),
+ (0x0FB5B, (0x9C4, 0x1)),
+ (0x1D49C, (0x1182, 0x1)),
+ (0x0FE48, (0xED0, 0x1)),
+ (0x1F220, (0x1648, 0x1)),
+ (0x02F8B, (0x3E4, 0x1)),
+ (0x02048, (0x138, 0x2)),
+ (0x0FCEC, (0xC61, 0x2)),
+ (0x02F89, (0x3E2, 0x1)),
+ (0x0FC49, (0xB08, 0x2)),
+ (0x03293, (0x5F4, 0x1)),
+ (0x00385, (0x05C, 0x3)),
+ (0x0222C, (0x222, 0x2)),
+ (0x02FBA, (0x413, 0x1)),
+ (0x032C6, (0x63C, 0x2)),
+ (0x1D600, (0x12CF, 0x1)),
+ (0x1D58C, (0x125B, 0x1)),
+ (0x0FB71, (0x9DA, 0x1)),
+ (0x1D55F, (0x122E, 0x1)),
+ (0x1D494, (0x117A, 0x1)),
+ (0x0320C, (0x4CC, 0x3)),
+ (0x1D4E4, (0x11BF, 0x1)),
+ (0x01DB4, (0x0DE, 0x1)),
+ (0x0FF82, (0x102A, 0x1)),
+ (0x032B1, (0x612, 0x2)),
+ (0x02475, (0x24E, 0x3)),
+ (0x1D46B, (0x1151, 0x1)),
+ (0x01DA0, (0x0CA, 0x1)),
+ (0x1D4D4, (0x11AF, 0x1)),
+ (0x0FB8F, (0x9F8, 0x1)),
+ (0x1D7A2, (0x146F, 0x1)),
+ (0x02084, (0x153, 0x1)),
+ (0x1079A, (0x10A3, 0x1)),
+ (0x1D6F0, (0x13BD, 0x1)),
+ (0x107AF, (0x10B8, 0x1)),
+ (0x1D597, (0x1266, 0x1)),
+ (0x0FC14, (0xA9E, 0x2)),
+ (0x0319E, (0x4A6, 0x1)),
+ (0x03282, (0x5E3, 0x1)),
+ (0x10788, (0x1091, 0x1)),
+ (0x1EE22, (0x1529, 0x1)),
+ (0x0FD2A, (0xCE0, 0x2)),
+ (0x1F139, (0x160C, 0x1)),
+ (0x0FF0A, (0xFB2, 0x1)),
+ (0x03290, (0x5F1, 0x1)),
+ (0x1E039, (0x14D4, 0x1)),
+ (0x1F21E, (0x1646, 0x1)),
+ (0x03304, (0x697, 0x5)),
+ (0x1D6A1, (0x1370, 0x1)),
+ (0x024B3, (0x30A, 0x3)),
+ (0x03198, (0x4A0, 0x1)),
+ (0x1EE96, (0x1577, 0x1)),
+ (0x0FC41, (0xAF8, 0x2)),
+ (0x0FE3D, (0xEC7, 0x1)),
+ (0x1D73B, (0x1408, 0x1)),
+ (0x0A69D, (0x987, 0x1)),
+ (0x1D5AF, (0x127E, 0x1)),
+ (0x0316F, (0x47A, 0x1)),
+ (0x0FEF7, (0xF99, 0x3)),
+ (0x033E8, (0x93F, 0x2)),
+ (0x024BE, (0x31B, 0x1)),
+ (0x033BB, (0x8D8, 0x2)),
+ (0x033EC, (0x94A, 0x3)),
+ (0x0329F, (0x600, 0x1)),
+ (0x1D402, (0x10E9, 0x1)),
+ (0x02092, (0x160, 0x1)),
+ (0x033EE, (0x950, 0x3)),
+ (0x0FEA2, (0xF40, 0x1)),
+ (0x1D4D2, (0x11AD, 0x1)),
+ (0x0328A, (0x5EB, 0x1)),
+ (0x0FFA5, (0x104D, 0x1)),
+ (0x03299, (0x5FA, 0x1)),
+ (0x1D5C4, (0x1293, 0x1)),
+ (0x1D6B6, (0x1383, 0x1)),
+ (0x0FF08, (0xFB0, 0x1)),
+ (0x1D7EA, (0x14B5, 0x1)),
+ (0x02F15, (0x36E, 0x1)),
+ (0x024AB, (0x2F2, 0x3)),
+ (0x033D9, (0x91E, 0x3)),
+ (0x0FFE3, (0x107F, 0x2)),
+ (0x1D6E2, (0x13AF, 0x1)),
+ (0x1D728, (0x13F5, 0x1)),
+ (0x0FCAE, (0xBE3, 0x2)),
+ (0x02121, (0x193, 0x3)),
+ (0x1D422, (0x1109, 0x1)),
+ (0x1D41E, (0x1105, 0x1)),
+ (0x01D3F, (0x099, 0x1)),
+ (0x0FF86, (0x102E, 0x1)),
+ (0x0FDC1, (0xE55, 0x3)),
+ (0x0FC45, (0xB00, 0x2)),
+ (0x1CCDB, (0x10C8, 0x1)),
+ (0x1D50A, (0x11E4, 0x1)),
+ (0x1079D, (0x10A6, 0x1)),
+ (0x00140, (0x01E, 0x2)),
+ (0x1D76C, (0x1439, 0x1)),
+ (0x0FED4, (0xF72, 0x1)),
+ (0x1D67A, (0x1349, 0x1)),
+ (0x1F11B, (0x15CD, 0x3)),
+ (0x002B7, (0x045, 0x1)),
+ (0x1D458, (0x113E, 0x1)),
+ (0x0FD8E, (0xDC2, 0x3)),
+ (0x0FEB3, (0xF51, 0x1)),
+ (0x0FB5F, (0x9C8, 0x1)),
+ (0x02FC9, (0x422, 0x1)),
+ (0x024CC, (0x329, 0x1)),
+ (0x1D4A9, (0x1188, 0x1)),
+ (0x0FD31, (0xCEE, 0x2)),
+ (0x001C4, (0x023, 0x3)),
+ (0x03156, (0x461, 0x1)),
+ (0x1D4F3, (0x11CE, 0x1)),
+ (0x024C8, (0x325, 0x1)),
+ (0x0FB02, (0x997, 0x2)),
+ (0x0FBDD, (0xA29, 0x2)),
+ (0x1D768, (0x1435, 0x1)),
+ (0x002B6, (0x044, 0x1)),
+ (0x0FB7C, (0x9E5, 0x1)),
+ (0x02146, (0x1AF, 0x1)),
+ (0x0FFC2, (0x1067, 0x1)),
+ (0x1D6A2, (0x1371, 0x1)),
+ (0x02006, (0x119, 0x1)),
+ (0x1D445, (0x112C, 0x1)),
+ (0x0FF0B, (0xFB3, 0x1)),
+ (0x1D5FA, (0x12C9, 0x1)),
+ (0x02F0A, (0x363, 0x1)),
+ (0x02F14, (0x36D, 0x1)),
+ (0x0FE6A, (0xEF4, 0x1)),
+ (0x1D6C2, (0x138F, 0x1)),
+ (0x0FD7D, (0xD8F, 0x3)),
+ (0x03370, (0x820, 0x3)),
+ (0x0326F, (0x5BC, 0x2)),
+ (0x1EE2A, (0x152D, 0x1)),
+ (0x0FC86, (0xB8E, 0x2)),
+ (0x0FF12, (0xFBA, 0x1)),
+ (0x02F05, (0x35E, 0x1)),
+ (0x0FBE1, (0xA2E, 0x1)),
+ (0x1EE1B, (0x1523, 0x1)),
+ (0x0216A, (0x1F8, 0x2)),
+ (0x0FC78, (0xB72, 0x2)),
+ (0x1D4BE, (0x119A, 0x1)),
+ (0x03366, (0x802, 0x3)),
+ (0x1D69E, (0x136D, 0x1)),
+ (0x03182, (0x48D, 0x1)),
+ (0x1D425, (0x110C, 0x1)),
+ (0x1D760, (0x142D, 0x1)),
+ (0x02139, (0x1A5, 0x1)),
+ (0x0FDA5, (0xE01, 0x3)),
+ (0x033B8, (0x8D2, 0x2)),
+ (0x0FB03, (0x999, 0x3)),
+ (0x1D461, (0x1147, 0x1)),
+ (0x1D58B, (0x125A, 0x1)),
+ (0x0FC7E, (0xB7E, 0x2)),
+ (0x1D7ED, (0x14B8, 0x1)),
+ (0x1E047, (0x14E2, 0x1)),
+ (0x033C4, (0x8EC, 0x2)),
+ (0x1EEB0, (0x158A, 0x1)),
+ (0x02467, (0x233, 0x1)),
+ (0x1D4C8, (0x11A3, 0x1)),
+ (0x0FF70, (0x1018, 0x1)),
+ (0x0FC30, (0xAD6, 0x2)),
+ (0x1EE79, (0x155D, 0x1)),
+ (0x0FDC5, (0xE61, 0x3)),
+ (0x1D70D, (0x13DA, 0x1)),
+ (0x0FF61, (0x1009, 0x1)),
+ (0x1D7DE, (0x14A9, 0x1)),
+ (0x1D416, (0x10FD, 0x1)),
+ (0x0FF90, (0x1038, 0x1)),
+ (0x03390, (0x86A, 0x2)),
+ (0x1CCDD, (0x10CA, 0x1)),
+ (0x1078D, (0x1096, 0x1)),
+ (0x1EEA8, (0x1583, 0x1)),
+ (0x0FC50, (0xB16, 0x2)),
+ (0x1D572, (0x1241, 0x1)),
+ (0x0FED7, (0xF75, 0x1)),
+ (0x1D629, (0x12F8, 0x1)),
+ (0x1D693, (0x1362, 0x1)),
+ (0x0FDAC, (0xE16, 0x3)),
+ (0x033C3, (0x8EA, 0x2)),
+ (0x0FEF2, (0xF90, 0x1)),
+ (0x02156, (0x1C6, 0x3)),
+ (0x1F241, (0x1667, 0x3)),
+ (0x0203C, (0x132, 0x2)),
+ (0x1D40F, (0x10F6, 0x1)),
+ (0x02165, (0x1EC, 0x2)),
+ (0x003F1, (0x069, 0x1)),
+ (0x107A2, (0x10AB, 0x1)),
+ (0x0FB8D, (0x9F6, 0x1)),
+ (0x0FC24, (0xABE, 0x2)),
+ (0x1D510, (0x11E8, 0x1)),
+ (0x03239, (0x566, 0x3)),
+ (0x1D67E, (0x134D, 0x1)),
+ (0x0320D, (0x4CF, 0x3)),
+ (0x03330, (0x749, 0x3)),
+ (0x1D735, (0x1402, 0x1)),
+ (0x0FB72, (0x9DB, 0x1)),
+ (0x1EE51, (0x1543, 0x1)),
+ (0x1D635, (0x1304, 0x1)),
+ (0x0FC26, (0xAC2, 0x2)),
+ (0x1F218, (0x1640, 0x1)),
+ (0x02145, (0x1AE, 0x1)),
+ (0x01DB8, (0x0E2, 0x1)),
+ (0x1D79B, (0x1468, 0x1)),
+ (0x0314C, (0x457, 0x1)),
+ (0x0FC9C, (0xBBF, 0x2)),
+ (0x0FCEF, (0xC67, 0x2)),
+ (0x032DD, (0x662, 0x1)),
+ (0x0212C, (0x19A, 0x1)),
+ (0x1D488, (0x116E, 0x1)),
+ (0x02F68, (0x3C1, 0x1)),
+ (0x1E05B, (0x14F6, 0x1)),
+ (0x1E03D, (0x14D8, 0x1)),
+ (0x032B2, (0x614, 0x2)),
+ (0x0FD76, (0xD7A, 0x3)),
+ (0x0FD6F, (0xD65, 0x3)),
+ (0x1F141, (0x1614, 0x1)),
+ (0x1D627, (0x12F6, 0x1)),
+ (0x0FF97, (0x103F, 0x1)),
+ (0x02F9E, (0x3F7, 0x1)),
+ (0x0FD1A, (0xCC0, 0x2)),
+ (0x1F10A, (0x15AA, 0x2)),
+ (0x02FB7, (0x410, 0x1)),
+ (0x0FCDD, (0xC41, 0x2)),
+ (0x0FC10, (0xA96, 0x2)),
+ (0x03347, (0x7A1, 0x5)),
+ (0x03369, (0x80B, 0x3)),
+ (0x033C6, (0x8F0, 0x4)),
+ (0x0330F, (0x6C1, 0x4)),
+ (0x02F98, (0x3F1, 0x1)),
+ (0x0FB8A, (0x9F3, 0x1)),
+ (0x0FD56, (0xD1A, 0x3)),
+ (0x1D44C, (0x1133, 0x1)),
+ (0x1D68C, (0x135B, 0x1)),
+ (0x0FDB3, (0xE2B, 0x3)),
+ (0x02FAE, (0x407, 0x1)),
+ (0x1CCD6, (0x10C3, 0x1)),
+ (0x0FFB0, (0x1058, 0x1)),
+ (0x1D60E, (0x12DD, 0x1)),
+ (0x02070, (0x141, 0x1)),
+ (0x0AB69, (0x992, 0x1)),
+ (0x1E068, (0x1503, 0x1)),
+ (0x03140, (0x44B, 0x1)),
+ (0x0FFAE, (0x1056, 0x1)),
+ (0x03155, (0x460, 0x1)),
+ (0x0FB51, (0x9BA, 0x1)),
+ (0x01DBB, (0x0E5, 0x1)),
+ (0x02466, (0x232, 0x1)),
+ (0x1D729, (0x13F6, 0x1)),
+ (0x0FBFF, (0xA70, 0x1)),
+ (0x003D0, (0x05F, 0x1)),
+ (0x033D2, (0x90B, 0x3)),
+ (0x1F112, (0x15B2, 0x3)),
+ (0x01D37, (0x092, 0x1)),
+ (0x02057, (0x13C, 0x4)),
+ (0x0314F, (0x45A, 0x1)),
+ (0x002B3, (0x041, 0x1)),
+ (0x0FF64, (0x100C, 0x1)),
+ (0x0FEAE, (0xF4C, 0x1)),
+ (0x1F244, (0x1670, 0x3)),
+ (0x02F71, (0x3CA, 0x1)),
+ (0x0FE13, (0xEB0, 0x1)),
+ (0x02135, (0x1A1, 0x1)),
+ (0x0FF5A, (0x1002, 0x1)),
+ (0x03143, (0x44E, 0x1)),
+ (0x1D552, (0x1221, 0x1)),
+ (0x03339, (0x76E, 0x3)),
+ (0x0FCCA, (0xC1B, 0x2)),
+ (0x0FD19, (0xCBE, 0x2)),
+ (0x1D487, (0x116D, 0x1)),
+ (0x003F4, (0x06B, 0x1)),
+ (0x1E035, (0x14D0, 0x1)),
+ (0x0FD84, (0xDA4, 0x3)),
+ (0x1D4FA, (0x11D5, 0x1)),
+ (0x1D51B, (0x11F2, 0x1)),
+ (0x0FB7A, (0x9E3, 0x1)),
+ (0x0FFC7, (0x106C, 0x1)),
+ (0x1EE6D, (0x1553, 0x1)),
+ (0x024D3, (0x330, 0x1)),
+ (0x0FFEE, (0x108A, 0x1)),
+ (0x1D777, (0x1444, 0x1)),
+ (0x0FF34, (0xFDC, 0x1)),
+ (0x1D5DE, (0x12AD, 0x1)),
+ (0x1D482, (0x1168, 0x1)),
+ (0x1EE2B, (0x152E, 0x1)),
+ (0x024E6, (0x343, 0x1)),
+ (0x1EE67, (0x154E, 0x1)),
+ (0x0210B, (0x180, 0x1)),
+ (0x0FB75, (0x9DE, 0x1)),
+ (0x0FFD6, (0x1077, 0x1)),
+ (0x1D5E8, (0x12B7, 0x1)),
+ (0x01D56, (0x0AF, 0x1)),
+ (0x0FBE4, (0xA31, 0x1)),
+ (0x1F23A, (0x1662, 0x1)),
+ (0x0FD6B, (0xD59, 0x3)),
+ (0x1F235, (0x165D, 0x1)),
+ (0x0FDFC, (0xEA9, 0x4)),
+ (0x0FF9F, (0x1047, 0x1)),
+ (0x1EE80, (0x1562, 0x1)),
+ (0x1D485, (0x116B, 0x1)),
+ (0x0FD59, (0xD23, 0x3)),
+ (0x0FE34, (0xEBE, 0x1)),
+ (0x0FF41, (0xFE9, 0x1)),
+ (0x0FD6A, (0xD56, 0x3)),
+ (0x01DAF, (0x0D9, 0x1)),
+ (0x03176, (0x481, 0x1)),
+ (0x0FBD8, (0xA24, 0x1)),
+ (0x0FBA2, (0xA0B, 0x1)),
+ (0x02F2F, (0x388, 0x1)),
+ (0x1F13B, (0x160E, 0x1)),
+ (0x1D440, (0x1127, 0x1)),
+ (0x0FECD, (0xF6B, 0x1)),
+ (0x03138, (0x443, 0x1)),
+ (0x0FDC7, (0xE67, 0x3)),
+ (0x1D74A, (0x1417, 0x1)),
+ (0x0FEEC, (0xF8A, 0x1)),
+ (0x0316A, (0x475, 0x1)),
+ (0x02F8C, (0x3E5, 0x1)),
+ (0x033B1, (0x8C4, 0x2)),
+ (0x0FF2E, (0xFD6, 0x1)),
+ (0x02F3B, (0x394, 0x1)),
+ (0x1D63F, (0x130E, 0x1)),
+ (0x1D5C9, (0x1298, 0x1)),
+ (0x1D4B8, (0x1196, 0x1)),
+ (0x024B1, (0x304, 0x3)),
+ (0x1D45B, (0x1141, 0x1)),
+ (0x03170, (0x47B, 0x1)),
+ (0x1D7E3, (0x14AE, 0x1)),
+ (0x0FEB5, (0xF53, 0x1)),
+ (0x0339C, (0x886, 0x2)),
+ (0x0FC8C, (0xB9A, 0x2)),
+ (0x0FBDE, (0xA2B, 0x1)),
+ (0x0FD0A, (0xCA0, 0x2)),
+ (0x1E052, (0x14ED, 0x1)),
+ (0x0FD9B, (0xDE3, 0x3)),
+ (0x0331E, (0x704, 0x4)),
+ (0x02FB3, (0x40C, 0x1)),
+ (0x024E8, (0x345, 0x1)),
+ (0x033AF, (0x8BC, 0x6)),
+ (0x1D7AD, (0x147A, 0x1)),
+ (0x1EEAE, (0x1588, 0x1)),
+ (0x03303, (0x694, 0x3)),
+ (0x02470, (0x243, 0x2)),
+ (0x1D6DF, (0x13AC, 0x1)),
+ (0x0FF8B, (0x1033, 0x1)),
+ (0x1079E, (0x10A7, 0x1)),
+ (0x1D5C1, (0x1290, 0x1)),
+ (0x0FB24, (0x9B1, 0x1)),
+ (0x1D79C, (0x1469, 0x1)),
+ (0x1F133, (0x1606, 0x1)),
+ (0x0335A, (0x7E6, 0x2)),
+ (0x0FE19, (0xEB6, 0x3)),
+ (0x0208C, (0x15B, 0x1)),
+ (0x1D680, (0x134F, 0x1)),
+ (0x1D5D6, (0x12A5, 0x1)),
+ (0x1EEB8, (0x1592, 0x1)),
+ (0x01D58, (0x0B1, 0x1)),
+ (0x032F9, (0x67E, 0x1)),
+ (0x0FD86, (0xDAA, 0x3)),
+ (0x107B4, (0x10BC, 0x1)),
+ (0x0338E, (0x866, 0x2)),
+ (0x0FC35, (0xAE0, 0x2)),
+ (0x02C7D, (0x355, 0x1)),
+ (0x1EE35, (0x1537, 0x1)),
+ (0x0FD0E, (0xCA8, 0x2)),
+ (0x0325F, (0x5AA, 0x2)),
+ (0x033F2, (0x95C, 0x3)),
+ (0x01D4F, (0x0A8, 0x1)),
+ (0x1D6D2, (0x139F, 0x1)),
+ (0x0FC76, (0xB6E, 0x2)),
+ (0x1D406, (0x10ED, 0x1)),
+ (0x000BC, (0x00F, 0x3)),
+ (0x1F231, (0x1659, 0x1)),
+ (0x1EE89, (0x156B, 0x1)),
+ (0x1D415, (0x10FC, 0x1)),
+ (0x0FDF8, (0xE88, 0x4)),
+ (0x1D42B, (0x1112, 0x1)),
+ (0x0FCD5, (0xC31, 0x2)),
+ (0x0FCA5, (0xBD1, 0x2)),
+ (0x1D701, (0x13CE, 0x1)),
+ (0x0FF13, (0xFBB, 0x1)),
+ (0x1D41A, (0x1101, 0x1)),
+ (0x1D775, (0x1442, 0x1)),
+ (0x1D469, (0x114F, 0x1)),
+ (0x03284, (0x5E5, 0x1)),
+ (0x032BF, (0x62E, 0x2)),
+ (0x03322, (0x716, 0x3)),
+ (0x0FCF9, (0xC7E, 0x2)),
+ (0x02F45, (0x39E, 0x1)),
+ (0x0FD28, (0xCDC, 0x2)),
+ (0x03376, (0x82F, 0x2)),
+ (0x1D771, (0x143E, 0x1)),
+ (0x02F78, (0x3D1, 0x1)),
+ (0x0FF80, (0x1028, 0x1)),
+ (0x1D498, (0x117E, 0x1)),
+ (0x1F13F, (0x1612, 0x1)),
+ (0x1D710, (0x13DD, 0x1)),
+ (0x0FEBF, (0xF5D, 0x1)),
+ (0x032D1, (0x656, 0x1)),
+ (0x024BA, (0x317, 0x1)),
+ (0x1D6DC, (0x13A9, 0x1)),
+ (0x1D556, (0x1225, 0x1)),
+ (0x0FF38, (0xFE0, 0x1)),
+ (0x1D700, (0x13CD, 0x1)),
+ (0x0FC7B, (0xB78, 0x2)),
+ (0x02025, (0x122, 0x2)),
+ (0x0FD5E, (0xD32, 0x3)),
+ (0x0FE90, (0xF2E, 0x1)),
+ (0x1D78E, (0x145B, 0x1)),
+ (0x1D7DD, (0x14A8, 0x1)),
+ (0x0FF51, (0xFF9, 0x1)),
+ (0x1D648, (0x1317, 0x1)),
+ (0x1D73F, (0x140C, 0x1)),
+ (0x0328E, (0x5EF, 0x1)),
+ (0x1D795, (0x1462, 0x1)),
+ (0x02488, (0x292, 0x2)),
+ (0x024A6, (0x2E3, 0x3)),
+ (0x0319C, (0x4A4, 0x1)),
+ (0x1D717, (0x13E4, 0x1)),
+ (0x1D409, (0x10F0, 0x1)),
+ (0x1D4D8, (0x11B3, 0x1)),
+ (0x1D7FE, (0x14C9, 0x1)),
+ (0x03367, (0x805, 0x3)),
+ (0x0FF78, (0x1020, 0x1)),
+ (0x1D404, (0x10EB, 0x1)),
+ (0x1D43A, (0x1121, 0x1)),
+ (0x0FF88, (0x1030, 0x1)),
+ (0x0202F, (0x127, 0x1)),
+ (0x1D418, (0x10FF, 0x1)),
+ (0x0338C, (0x862, 0x2)),
+ (0x00EDD, (0x07E, 0x2)),
+ (0x1D5F1, (0x12C0, 0x1)),
+ (0x1D4C2, (0x119E, 0x1)),
+ (0x0FF24, (0xFCC, 0x1)),
+ (0x0FE49, (0xED1, 0x2)),
+ (0x0246E, (0x23F, 0x2)),
+ (0x0FFCF, (0x1072, 0x1)),
+ (0x02F0B, (0x364, 0x1)),
+ (0x01FDF, (0x106, 0x3)),
+ (0x1D6FA, (0x13C7, 0x1)),
+ (0x1D616, (0x12E5, 0x1)),
+ (0x0246D, (0x23D, 0x2)),
+ (0x0FEE7, (0xF85, 0x1)),
+ (0x0FC5B, (0xB2C, 0x2)),
+ (0x003D2, (0x061, 0x1)),
+ (0x1D524, (0x11FA, 0x1)),
+ (0x0336F, (0x81D, 0x3)),
+ (0x0FBB1, (0xA1D, 0x2)),
+ (0x0FCAF, (0xBE5, 0x2)),
+ (0x02151, (0x1B6, 0x3)),
+ (0x02F7F, (0x3D8, 0x1)),
+ (0x0337B, (0x83B, 0x2)),
+ (0x1F219, (0x1641, 0x1)),
+ (0x1EEA7, (0x1582, 0x1)),
+ (0x0334A, (0x7AC, 0x6)),
+ (0x1E05C, (0x14F7, 0x1)),
+ (0x03235, (0x55A, 0x3)),
+ (0x0FF5B, (0x1003, 0x1)),
+ (0x1D608, (0x12D7, 0x1)),
+ (0x03375, (0x82D, 0x2)),
+ (0x02F6C, (0x3C5, 0x1)),
+ (0x1CCF2, (0x10DF, 0x1)),
+ (0x1D47B, (0x1161, 0x1)),
+ (0x1D62F, (0x12FE, 0x1)),
+ (0x032F3, (0x678, 0x1)),
+ (0x032AC, (0x60D, 0x1)),
+ (0x1D721, (0x13EE, 0x1)),
+ (0x1EE70, (0x1556, 0x1)),
+ (0x000BE, (0x015, 0x3)),
+ (0x033E5, (0x939, 0x2)),
+ (0x0FE7F, (0xF10, 0x2)),
+ (0x1D55D, (0x122C, 0x1)),
+ (0x0337C, (0x83D, 0x2)),
+ (0x0FBA7, (0xA12, 0x1)),
+ (0x1D5B1, (0x1280, 0x1)),
+ (0x033FC, (0x97A, 0x3)),
+ (0x1D6AA, (0x1377, 0x1)),
+ (0x1D4DF, (0x11BA, 0x1)),
+ (0x1D45F, (0x1145, 0x1)),
+ (0x1E032, (0x14CD, 0x1)),
+ (0x01D48, (0x0A2, 0x1)),
+ (0x1D769, (0x1436, 0x1)),
+ (0x1D704, (0x13D1, 0x1)),
+ (0x1D621, (0x12F0, 0x1)),
+ (0x033D1, (0x909, 0x2)),
+ (0x0FDBF, (0xE4F, 0x3)),
+ (0x1D73E, (0x140B, 0x1)),
+ (0x0322D, (0x542, 0x3)),
+ (0x0FB27, (0x9B4, 0x1)),
+ (0x1F22A, (0x1652, 0x1)),
+ (0x0FE17, (0xEB4, 0x1)),
+ (0x01D31, (0x08C, 0x1)),
+ (0x0FCFC, (0xC84, 0x2)),
+ (0x03218, (0x4FA, 0x4)),
+ (0x1F14D, (0x1623, 0x2)),
+ (0x0FD07, (0xC9A, 0x2)),
+ (0x0330A, (0x6AF, 0x3)),
+ (0x02F64, (0x3BD, 0x1)),
+ (0x02F60, (0x3B9, 0x1)),
+ (0x02002, (0x115, 0x1)),
+ (0x0FF72, (0x101A, 0x1)),
+ (0x0FD11, (0xCAE, 0x2)),
+ (0x1D66F, (0x133E, 0x1)),
+ (0x1EEBB, (0x1595, 0x1)),
+ (0x01DA6, (0x0D0, 0x1)),
+ (0x0FB21, (0x9AE, 0x1)),
+ (0x1D450, (0x1137, 0x1)),
+ (0x1D670, (0x133F, 0x1)),
+ (0x02477, (0x254, 0x3)),
+ (0x0FD36, (0xCF8, 0x2)),
+ (0x0FC44, (0xAFE, 0x2)),
+ (0x1EEB5, (0x158F, 0x1)),
+ (0x02153, (0x1BD, 0x3)),
+ (0x1D787, (0x1454, 0x1)),
+ (0x0FC8D, (0xB9C, 0x2)),
+ (0x1D40C, (0x10F3, 0x1)),
+ (0x0FC62, (0xB3E, 0x3)),
+ (0x107B9, (0x10C1, 0x1)),
+ (0x03384, (0x84F, 0x2)),
+ (0x1EE77, (0x155C, 0x1)),
+ (0x0FCC1, (0xC09, 0x2)),
+ (0x0FCB8, (0xBF7, 0x2)),
+ (0x0335D, (0x7EC, 0x2)),
+ (0x1F11C, (0x15D0, 0x3)),
+ (0x1D5AD, (0x127C, 0x1)),
+ (0x0FB9B, (0xA04, 0x1)),
+ (0x01FCE, (0x0FA, 0x3)),
+ (0x01D5D, (0x0B6, 0x1)),
+ (0x032FA, (0x67F, 0x1)),
+ (0x032DB, (0x660, 0x1)),
+ (0x0FEE5, (0xF83, 0x1)),
+ (0x0FE41, (0xECB, 0x1)),
+ (0x0FF04, (0xFAC, 0x1)),
+ (0x0208D, (0x15C, 0x1)),
+ (0x024CE, (0x32B, 0x1)),
+ (0x0FD92, (0xDC8, 0x3)),
+ (0x1D441, (0x1128, 0x1)),
+ (0x1078A, (0x1093, 0x1)),
+ (0x02F73, (0x3CC, 0x1)),
+ (0x02111, (0x186, 0x1)),
+ (0x1078E, (0x1097, 0x1)),
+ (0x033CD, (0x901, 0x2)),
+ (0x0249A, (0x2BF, 0x3)),
+ (0x1D7CE, (0x1499, 0x1)),
+ (0x0FF67, (0x100F, 0x1)),
+ (0x0FC74, (0xB6A, 0x2)),
+ (0x0FC89, (0xB94, 0x2)),
+ (0x0217F, (0x21E, 0x1)),
+ (0x02168, (0x1F5, 0x2)),
+ (0x1D59D, (0x126C, 0x1)),
+ (0x03261, (0x5AD, 0x1)),
+ (0x1D68F, (0x135E, 0x1)),
+ (0x0FB63, (0x9CC, 0x1)),
+ (0x1EE37, (0x1539, 0x1)),
+ (0x1D56C, (0x123B, 0x1)),
+ (0x03171, (0x47C, 0x1)),
+ (0x1D56D, (0x123C, 0x1)),
+ (0x0FE4A, (0xED3, 0x2)),
+ (0x1EEA2, (0x157E, 0x1)),
+ (0x0FE5E, (0xEE9, 0x1)),
+ (0x1D6B4, (0x1381, 0x1)),
+ (0x1D69B, (0x136A, 0x1)),
+ (0x0208E, (0x15D, 0x1)),
+ (0x0FE98, (0xF36, 0x1)),
+ (0x1D61E, (0x12ED, 0x1)),
+ (0x1D439, (0x1120, 0x1)),
+ (0x02172, (0x204, 0x3)),
+ (0x02F30, (0x389, 0x1)),
+ (0x1D52B, (0x1201, 0x1)),
+ (0x1D49B, (0x1181, 0x1)),
+ (0x02109, (0x17D, 0x2)),
+ (0x0FF50, (0xFF8, 0x1)),
+ (0x0315C, (0x467, 0x1)),
+ (0x0335F, (0x7F0, 0x2)),
+ (0x0314E, (0x459, 0x1)),
+ (0x03267, (0x5B3, 0x1)),
+ (0x02F74, (0x3CD, 0x1)),
+ (0x0FC93, (0xBA8, 0x2)),
+ (0x1EE98, (0x1579, 0x1)),
+ (0x1F243, (0x166D, 0x3)),
+ (0x01D60, (0x0B9, 0x1)),
+ (0x0FF62, (0x100A, 0x1)),
+ (0x1D6D9, (0x13A6, 0x1)),
+ (0x03167, (0x472, 0x1)),
+ (0x02480, (0x272, 0x4)),
+ (0x0FD69, (0xD53, 0x3)),
+ (0x033E0, (0x92F, 0x2)),
+ (0x03175, (0x480, 0x1)),
+ (0x0FC15, (0xAA0, 0x2)),
+ (0x1D536, (0x120C, 0x1)),
+ (0x0FBF8, (0xA61, 0x3)),
+ (0x0FE3B, (0xEC5, 0x1)),
+ (0x0211B, (0x18E, 0x1)),
+ (0x024AD, (0x2F8, 0x3)),
+ (0x1CCE3, (0x10D0, 0x1)),
+ (0x0331F, (0x708, 0x4)),
+ (0x0FE72, (0xEFA, 0x2)),
+ (0x1D65D, (0x132C, 0x1)),
+ (0x0FC6B, (0xB58, 0x2)),
+ (0x1D56B, (0x123A, 0x1)),
+ (0x0217C, (0x21B, 0x1)),
+ (0x1D7E4, (0x14AF, 0x1)),
+ (0x1D586, (0x1255, 0x1)),
+ (0x0FC8B, (0xB98, 0x2)),
+ (0x1D4A2, (0x1185, 0x1)),
+ (0x0FD53, (0xD11, 0x3)),
+ (0x0A770, (0x988, 0x1)),
+ (0x1D517, (0x11EE, 0x1)),
+ (0x1D7AA, (0x1477, 0x1)),
+ (0x1EE6F, (0x1555, 0x1)),
+ (0x1D559, (0x1228, 0x1)),
+ (0x00675, (0x070, 0x2)),
+ (0x03337, (0x767, 0x3)),
+ (0x107B6, (0x10BE, 0x1)),
+ (0x0FED0, (0xF6E, 0x1)),
+ (0x001F3, (0x03C, 0x2)),
+ (0x1CCD8, (0x10C5, 0x1)),
+ (0x0FF17, (0xFBF, 0x1)),
+ (0x1F22D, (0x1655, 0x1)),
+ (0x10791, (0x109A, 0x1)),
+ (0x1D78A, (0x1457, 0x1)),
+ (0x1EE2D, (0x1530, 0x1)),
+ (0x033D0, (0x907, 0x2)),
+ (0x0FB04, (0x99C, 0x3)),
+ (0x01D66, (0x0BF, 0x1)),
+ (0x0332B, (0x730, 0x6)),
+ (0x1F16A, (0x162A, 0x2)),
+ (0x1D7AF, (0x147C, 0x1)),
+ (0x0FC90, (0xBA2, 0x2)),
+ (0x0FF1E, (0xFC6, 0x1)),
+ (0x1D6F1, (0x13BE, 0x1)),
+ (0x0FD6C, (0xD5C, 0x3)),
+ (0x0FB59, (0x9C2, 0x1)),
+ (0x0FEAA, (0xF48, 0x1)),
+ (0x0FE7E, (0xF0E, 0x2)),
+ (0x0315D, (0x468, 0x1)),
+ (0x02F7C, (0x3D5, 0x1)),
+ (0x1D7C4, (0x1491, 0x1)),
+ (0x02D6F, (0x356, 0x1)),
+ (0x1D653, (0x1322, 0x1)),
+ (0x0FE36, (0xEC0, 0x1)),
+ (0x0FEC3, (0xF61, 0x1)),
+ (0x03220, (0x51B, 0x3)),
+ (0x1D74F, (0x141C, 0x1)),
+ (0x02F63, (0x3BC, 0x1)),
+ (0x1D658, (0x1327, 0x1)),
+ (0x1D7CF, (0x149A, 0x1)),
+ (0x0FC04, (0xA7D, 0x3)),
+ (0x1D682, (0x1351, 0x1)),
+ (0x1D622, (0x12F1, 0x1)),
+ (0x033FA, (0x974, 0x3)),
+ (0x1D6EC, (0x13B9, 0x1)),
+ (0x01D5B, (0x0B4, 0x1)),
+ (0x0FCBA, (0xBFB, 0x2)),
+ (0x033F8, (0x96E, 0x3)),
+ (0x1D5BF, (0x128E, 0x1)),
+ (0x0FCA4, (0xBCF, 0x2)),
+ (0x1EEB4, (0x158E, 0x1)),
+ (0x1F217, (0x163F, 0x1)),
+ (0x01DA7, (0x0D1, 0x1)),
+ (0x1D736, (0x1403, 0x1)),
+ (0x1D720, (0x13ED, 0x1)),
+ (0x0FD94, (0xDCE, 0x3)),
+ (0x1D519, (0x11F0, 0x1)),
+ (0x1E03F, (0x14DA, 0x1)),
+ (0x1D7EF, (0x14BA, 0x1)),
+ (0x033A1, (0x892, 0x2)),
+ (0x1F143, (0x1616, 0x1)),
+ (0x1D4A5, (0x1186, 0x1)),
+ (0x02F9C, (0x3F5, 0x1)),
+ (0x0330B, (0x6B2, 0x3)),
+ (0x107A7, (0x10B0, 0x1)),
+ (0x0FF21, (0xFC9, 0x1)),
+ (0x02FC1, (0x41A, 0x1)),
+ (0x0FECA, (0xF68, 0x1)),
+ (0x1D63B, (0x130A, 0x1)),
+ (0x1F146, (0x1619, 0x1)),
+ (0x1CCF3, (0x10E0, 0x1)),
+ (0x1D633, (0x1302, 0x1)),
+ (0x024B9, (0x316, 0x1)),
+ (0x0334D, (0x7BA, 0x4)),
+ (0x032E9, (0x66E, 0x1)),
+ (0x033CF, (0x905, 0x2)),
+ (0x1D5E9, (0x12B8, 0x1)),
+ (0x024C0, (0x31D, 0x1)),
+ (0x1D64C, (0x131B, 0x1)),
+ (0x1D6C4, (0x1391, 0x1)),
+ (0x1E044, (0x14DF, 0x1)),
+ (0x1D407, (0x10EE, 0x1)),
+ (0x1D4AA, (0x1189, 0x1)),
+ (0x0328F, (0x5F0, 0x1)),
+ (0x1D529, (0x11FF, 0x1)),
+ (0x0249B, (0x2C2, 0x3)),
+ (0x03348, (0x7A6, 0x4)),
+ (0x02F08, (0x361, 0x1)),
+ (0x1D49E, (0x1183, 0x1)),
+ (0x03189, (0x494, 0x1)),
+ (0x1D42C, (0x1113, 0x1)),
+ (0x0207A, (0x149, 0x1)),
+ (0x1D6C5, (0x1392, 0x1)),
+ (0x02005, (0x118, 0x1)),
+ (0x1D5C2, (0x1291, 0x1)),
+ (0x0FB76, (0x9DF, 0x1)),
+ (0x1D6F9, (0x13C6, 0x1)),
+ (0x03147, (0x452, 0x1)),
+ (0x03184, (0x48F, 0x1)),
+ (0x02F92, (0x3EB, 0x1)),
+ (0x1D5D7, (0x12A6, 0x1)),
+ (0x0FB83, (0x9EC, 0x1)),
+ (0x02090, (0x15E, 0x1)),
+ (0x0FEA5, (0xF43, 0x1)),
+ (0x1D79D, (0x146A, 0x1)),
+ (0x1D7D9, (0x14A4, 0x1)),
+ (0x0FCC0, (0xC07, 0x2)),
+ (0x03279, (0x5D0, 0x2)),
+ (0x1D78F, (0x145C, 0x1)),
+ (0x0321D, (0x50E, 0x7)),
+ (0x1D6C7, (0x1394, 0x1)),
+ (0x1CCF5, (0x10E2, 0x1)),
+ (0x1EE8F, (0x1570, 0x1)),
+ (0x1EE0F, (0x1517, 0x1)),
+ (0x0FCDF, (0xC45, 0x3)),
+ (0x1D501, (0x11DC, 0x1)),
+ (0x1D610, (0x12DF, 0x1)),
+ (0x1CCE0, (0x10CD, 0x1)),
+ (0x0FD21, (0xCCE, 0x2)),
+ (0x032E4, (0x669, 0x1)),
+ (0x1F13D, (0x1610, 0x1)),
+ (0x0FCF7, (0xC7A, 0x2)),
+ (0x0313D, (0x448, 0x1)),
+ (0x01D9D, (0x0C7, 0x1)),
+ (0x02474, (0x24B, 0x3)),
+ (0x0FFBD, (0x1065, 0x1)),
+ (0x1D7D0, (0x149B, 0x1)),
+ (0x1F232, (0x165A, 0x1)),
+ (0x1F225, (0x164D, 0x1)),
+ (0x1D7F1, (0x14BC, 0x1)),
+ (0x03232, (0x551, 0x3)),
+ (0x0249E, (0x2CB, 0x3)),
+ (0x02F75, (0x3CE, 0x1)),
+ (0x1F210, (0x1637, 0x1)),
+ (0x1D4D5, (0x11B0, 0x1)),
+ (0x03222, (0x521, 0x3)),
+ (0x1D782, (0x144F, 0x1)),
+ (0x10789, (0x1092, 0x1)),
+ (0x03305, (0x69C, 0x3)),
+ (0x0FF4B, (0xFF3, 0x1)),
+ (0x0FCB2, (0xBEB, 0x2)),
+ (0x03199, (0x4A1, 0x1)),
+ (0x0FEEA, (0xF88, 0x1)),
+ (0x03396, (0x87A, 0x2)),
+ (0x03247, (0x58A, 0x1)),
+ (0x0FC88, (0xB92, 0x2)),
+ (0x0FBA6, (0xA11, 0x1)),
+ (0x01D9C, (0x0C6, 0x1)),
+ (0x0FC82, (0xB86, 0x2)),
+ (0x1EE6A, (0x1551, 0x1)),
+ (0x0FD38, (0xCFC, 0x2)),
+ (0x03325, (0x720, 0x3)),
+ (0x1D6BF, (0x138C, 0x1)),
+ (0x1D4B4, (0x1192, 0x1)),
+ (0x1D6CA, (0x1397, 0x1)),
+ (0x0339E, (0x88A, 0x2)),
+ (0x1D641, (0x1310, 0x1)),
+ (0x0FE63, (0xEEE, 0x1)),
+ (0x024D0, (0x32D, 0x1)),
+ (0x0FC9B, (0xBBC, 0x3)),
+ (0x0FE8D, (0xF2B, 0x1)),
+ (0x01DA5, (0x0CF, 0x1)),
+ (0x0A7F9, (0x98D, 0x1)),
+ (0x1D43B, (0x1122, 0x1)),
+ (0x0FDBA, (0xE40, 0x3)),
+ (0x1F134, (0x1607, 0x1)),
+ (0x0FC77, (0xB70, 0x2)),
+ (0x02FB0, (0x409, 0x1)),
+ (0x1D426, (0x110D, 0x1)),
+ (0x1D453, (0x113A, 0x1)),
+ (0x1D5DC, (0x12AB, 0x1)),
+ (0x1D6F3, (0x13C0, 0x1)),
+ (0x1D5EC, (0x12BB, 0x1)),
+ (0x024C5, (0x322, 0x1)),
+ (0x03168, (0x473, 0x1)),
+ (0x1D6CF, (0x139C, 0x1)),
+ (0x024B0, (0x301, 0x3)),
+ (0x1D568, (0x1237, 0x1)),
+ (0x1F122, (0x15E2, 0x3)),
+ (0x1D52E, (0x1204, 0x1)),
+ (0x1D511, (0x11E9, 0x1)),
+ (0x02FB1, (0x40A, 0x1)),
+ (0x1F137, (0x160A, 0x1)),
+ (0x0FFAA, (0x1052, 0x1)),
+ (0x0FB69, (0x9D2, 0x1)),
+ (0x01FCF, (0x0FD, 0x3)),
+ (0x1D5AA, (0x1279, 0x1)),
+ (0x1D6F6, (0x13C3, 0x1)),
+ (0x1D4EC, (0x11C7, 0x1)),
+ (0x1D5CF, (0x129E, 0x1)),
+ (0x032A4, (0x605, 0x1)),
+ (0x033CE, (0x903, 0x2)),
+ (0x10781, (0x108B, 0x1)),
+ (0x02F6F, (0x3C8, 0x1)),
+ (0x1F126, (0x15EE, 0x3)),
+ (0x02F5A, (0x3B3, 0x1)),
+ (0x0FF68, (0x1010, 0x1)),
+ (0x02F88, (0x3E1, 0x1)),
+ (0x01DB0, (0x0DA, 0x1)),
+ (0x0FCD0, (0xC27, 0x2)),
+ (0x033B0, (0x8C2, 0x2)),
+ (0x0333D, (0x77E, 0x5)),
+ (0x1E069, (0x1504, 0x1)),
+ (0x0FF8D, (0x1035, 0x1)),
+ (0x1D70C, (0x13D9, 0x1)),
+ (0x1D643, (0x1312, 0x1)),
+ (0x0FBA0, (0xA09, 0x1)),
+ (0x03157, (0x462, 0x1)),
+ (0x1D457, (0x113D, 0x1)),
+ (0x0FE95, (0xF33, 0x1)),
+ (0x0FD83, (0xDA1, 0x3)),
+ (0x1D56F, (0x123E, 0x1)),
+ (0x02F16, (0x36F, 0x1)),
+ (0x1D731, (0x13FE, 0x1)),
+ (0x1D459, (0x113F, 0x1)),
+ (0x1D698, (0x1367, 0x1)),
+ (0x1D740, (0x140D, 0x1)),
+ (0x033F5, (0x965, 0x3)),
+ (0x0339D, (0x888, 0x2)),
+ (0x03224, (0x527, 0x3)),
+ (0x0FC1C, (0xAAE, 0x2)),
+ (0x1F116, (0x15BE, 0x3)),
+ (0x0213F, (0x1AC, 0x1)),
+ (0x0FC39, (0xAE8, 0x2)),
+ (0x0FF2C, (0xFD4, 0x1)),
+ (0x1D5C7, (0x1296, 0x1)),
+ (0x03377, (0x831, 0x2)),
+ (0x1D788, (0x1455, 0x1)),
+ (0x02FD5, (0x42E, 0x1)),
+ (0x1D75E, (0x142B, 0x1)),
+ (0x1D743, (0x1410, 0x1)),
+ (0x0320B, (0x4C9, 0x3)),
+ (0x1F238, (0x1660, 0x1)),
+ (0x033A2, (0x894, 0x3)),
+ (0x0FE78, (0xF02, 0x2)),
+ (0x0FE93, (0xF31, 0x1)),
+ (0x1D683, (0x1352, 0x1)),
+ (0x0FD64, (0xD44, 0x3)),
+ (0x1D634, (0x1303, 0x1)),
+ (0x0FF3B, (0xFE3, 0x1)),
+ (0x01D9E, (0x0C8, 0x1)),
+ (0x03327, (0x726, 0x2)),
+ (0x1F236, (0x165E, 0x1)),
+ (0x1D5C0, (0x128F, 0x1)),
+ (0x02FCC, (0x425, 0x1)),
+ (0x1D431, (0x1118, 0x1)),
+ (0x1EE0B, (0x1513, 0x1)),
+ (0x1D7BA, (0x1487, 0x1)),
+ (0x0FC48, (0xB06, 0x2)),
+ (0x0FEF3, (0xF91, 0x1)),
+ (0x1D4CE, (0x11A9, 0x1)),
+ (0x0FFC3, (0x1068, 0x1)),
+ (0x1D4FD, (0x11D8, 0x1)),
+ (0x0FC1B, (0xAAC, 0x2)),
+ (0x1EE8C, (0x156D, 0x1)),
+ (0x1D784, (0x1451, 0x1)),
+ (0x03264, (0x5B0, 0x1)),
+ (0x0FF7B, (0x1023, 0x1)),
+ (0x1EE59, (0x1547, 0x1)),
+ (0x1D790, (0x145D, 0x1)),
+ (0x02F31, (0x38A, 0x1)),
+ (0x0FF22, (0xFCA, 0x1)),
+ (0x0211D, (0x190, 0x1)),
+ (0x1E057, (0x14F2, 0x1)),
+ (0x1D6FE, (0x13CB, 0x1)),
+ (0x1D484, (0x116A, 0x1)),
+ (0x1D668, (0x1337, 0x1)),
+ (0x0FE5F, (0xEEA, 0x1)),
+ (0x1D562, (0x1231, 0x1)),
+ (0x0319F, (0x4A7, 0x1)),
+ (0x02074, (0x143, 0x1)),
+ (0x1D5EF, (0x12BE, 0x1)),
+ (0x107AB, (0x10B4, 0x1)),
+ (0x020A8, (0x16B, 0x2)),
+ (0x1E063, (0x14FE, 0x1)),
+ (0x0FC57, (0xB24, 0x2)),
+ (0x03356, (0x7D9, 0x6)),
+ (0x1D43D, (0x1124, 0x1)),
+ (0x0FCCF, (0xC25, 0x2)),
+ (0x01D47, (0x0A1, 0x1)),
+ (0x1D654, (0x1323, 0x1)),
+ (0x0FFE8, (0x1084, 0x1)),
+ (0x03302, (0x68F, 0x5)),
+ (0x0FCD9, (0xC39, 0x2)),
+ (0x1D639, (0x1308, 0x1)),
+ (0x1D79F, (0x146C, 0x1)),
+ (0x1D6B2, (0x137F, 0x1)),
+ (0x0FE8E, (0xF2C, 0x1)),
+ (0x1E048, (0x14E3, 0x1)),
+ (0x03039, (0x432, 0x1)),
+ (0x1E064, (0x14FF, 0x1)),
+ (0x033A0, (0x88F, 0x3)),
+ (0x1D49F, (0x1184, 0x1)),
+ (0x02F4C, (0x3A5, 0x1)),
+ (0x0FC31, (0xAD8, 0x2)),
+ (0x1D491, (0x1177, 0x1)),
+ (0x1E04D, (0x14E8, 0x1)),
+ (0x0FF16, (0xFBE, 0x1)),
+ (0x01D68, (0x0C1, 0x1)),
+ (0x0FF71, (0x1019, 0x1)),
+ (0x1EE76, (0x155B, 0x1)),
+ (0x1D423, (0x110A, 0x1)),
+ (0x01FCD, (0x0F7, 0x3)),
+ (0x0FE44, (0xECE, 0x1)),
+ (0x1F132, (0x1605, 0x1)),
+ (0x1D77C, (0x1449, 0x1)),
+ (0x0FF93, (0x103B, 0x1)),
+ (0x0331B, (0x6FA, 0x4)),
+ (0x1D7F5, (0x14C0, 0x1)),
+ (0x0FF8F, (0x1037, 0x1)),
+ (0x032A2, (0x603, 0x1)),
+ (0x1EE0E, (0x1516, 0x1)),
+ (0x1D6E8, (0x13B5, 0x1)),
+ (0x1D520, (0x11F6, 0x1)),
+ (0x033E4, (0x937, 0x2)),
+ (0x1D44E, (0x1135, 0x1)),
+ (0x1CCD9, (0x10C6, 0x1)),
+ (0x02FC4, (0x41D, 0x1)),
+ (0x02024, (0x121, 0x1)),
+ (0x010FC, (0x087, 0x1)),
+ (0x0FDB0, (0xE22, 0x3)),
+ (0x1EE87, (0x1569, 0x1)),
+ (0x03000, (0x42F, 0x1)),
+ (0x1FBF6, (0x1687, 0x1)),
+ (0x1D76F, (0x143C, 0x1)),
+ (0x03385, (0x851, 0x2)),
+ (0x0325D, (0x5A6, 0x2)),
+ (0x1D6C3, (0x1390, 0x1)),
+ (0x0FC0A, (0xA8A, 0x2)),
+ (0x1D67C, (0x134B, 0x1)),
+ (0x0FF9B, (0x1043, 0x1)),
+ (0x0FE7A, (0xF06, 0x2)),
+ (0x02FB4, (0x40D, 0x1)),
+ (0x02096, (0x164, 0x1)),
+ (0x0247C, (0x263, 0x3)),
+ (0x1D64A, (0x1319, 0x1)),
+ (0x1D785, (0x1452, 0x1)),
+ (0x1D7DA, (0x14A5, 0x1)),
+ (0x0FB17, (0x9AB, 0x2)),
+ (0x1D761, (0x142E, 0x1)),
+ (0x032C7, (0x63E, 0x2)),
+ (0x01FC0, (0x0F2, 0x2)),
+ (0x033E3, (0x935, 0x2)),
+ (0x0FCDB, (0xC3D, 0x2)),
+ (0x1D5B4, (0x1283, 0x1)),
+ (0x1D48F, (0x1175, 0x1)),
+ (0x0FC2A, (0xACA, 0x2)),
+ (0x1D55B, (0x122A, 0x1)),
+ (0x1D68A, (0x1359, 0x1)),
+ (0x1D637, (0x1306, 0x1)),
+ (0x0FFB6, (0x105E, 0x1)),
+ (0x1D770, (0x143D, 0x1)),
+ (0x107A4, (0x10AD, 0x1)),
+ (0x03186, (0x491, 0x1)),
+ (0x0FE18, (0xEB5, 0x1)),
+ (0x03253, (0x592, 0x2)),
+ (0x02163, (0x1E9, 0x2)),
+ (0x02F51, (0x3AA, 0x1)),
+ (0x003F5, (0x06C, 0x1)),
+ (0x0329B, (0x5FC, 0x1)),
+ (0x0FFB8, (0x1060, 0x1)),
+ (0x03215, (0x4EE, 0x4)),
+ (0x0FFA3, (0x104B, 0x1)),
+ (0x1D4CA, (0x11A5, 0x1)),
+ (0x0FBAB, (0xA16, 0x1)),
+ (0x0FF65, (0x100D, 0x1)),
+ (0x0FE5C, (0xEE7, 0x1)),
+ (0x0FC52, (0xB1A, 0x2)),
+ (0x02F9B, (0x3F4, 0x1)),
+ (0x1D51A, (0x11F1, 0x1)),
+ (0x03234, (0x557, 0x3)),
+ (0x00E33, (0x078, 0x2)),
+ (0x0FD8A, (0xDB6, 0x3)),
+ (0x0FD5A, (0xD26, 0x3)),
+ (0x02494, (0x2AD, 0x3)),
+ (0x02F80, (0x3D9, 0x1)),
+ (0x0FB67, (0x9D0, 0x1)),
+ (0x032A1, (0x602, 0x1)),
+ (0x1D797, (0x1464, 0x1)),
+ (0x0309C, (0x436, 0x2)),
+ (0x0FFE1, (0x107D, 0x1)),
+ (0x0FD7B, (0xD89, 0x3)),
+ (0x0FB61, (0x9CA, 0x1)),
+ (0x0FF10, (0xFB8, 0x1)),
+ (0x03280, (0x5E1, 0x1)),
+ (0x1F138, (0x160B, 0x1)),
+ (0x033AE, (0x8B7, 0x5)),
+ (0x10798, (0x10A1, 0x1)),
+ (0x1D738, (0x1405, 0x1)),
+ (0x0FC5D, (0xB30, 0x2)),
+ (0x1D50E, (0x11E6, 0x1)),
+ (0x02F4B, (0x3A4, 0x1)),
+ (0x02FA4, (0x3FD, 0x1)),
+ (0x032B6, (0x61C, 0x2)),
+ (0x032EB, (0x670, 0x1)),
+ (0x03135, (0x440, 0x1)),
+ (0x1D5C3, (0x1292, 0x1)),
+ (0x0FB97, (0xA00, 0x1)),
+ (0x0FCE8, (0xC59, 0x2)),
+ (0x0322B, (0x53C, 0x3)),
+ (0x0FC43, (0xAFC, 0x2)),
+ (0x032E5, (0x66A, 0x1)),
+ (0x0FBA5, (0xA0F, 0x2)),
+ (0x1D6EE, (0x13BB, 0x1)),
+ (0x0FD80, (0xD98, 0x3)),
+ (0x01DAC, (0x0D6, 0x1)),
+ (0x1CCDF, (0x10CC, 0x1)),
+ (0x1E03C, (0x14D7, 0x1)),
+ (0x02037, (0x12F, 0x3)),
+ (0x1D5F8, (0x12C7, 0x1)),
+ (0x1D66C, (0x133B, 0x1)),
+ (0x03150, (0x45B, 0x1)),
+ (0x03276, (0x5CA, 0x2)),
+ (0x1D4EA, (0x11C5, 0x1)),
+ (0x032BC, (0x628, 0x2)),
+ (0x1F145, (0x1618, 0x1)),
+ (0x0213E, (0x1AB, 0x1)),
+ (0x1D412, (0x10F9, 0x1)),
+ (0x10790, (0x1099, 0x1)),
+ (0x0FEDA, (0xF78, 0x1)),
+ (0x1F12E, (0x1601, 0x2)),
+ (0x1D4F1, (0x11CC, 0x1)),
+ (0x0FED2, (0xF70, 0x1)),
+ (0x0FD81, (0xD9B, 0x3)),
+ (0x03306, (0x69F, 0x3)),
+ (0x02473, (0x249, 0x2)),
+ (0x1D6B0, (0x137D, 0x1)),
+ (0x0FB9F, (0xA08, 0x1)),
+ (0x033B4, (0x8CA, 0x2)),
+ (0x03214, (0x4EA, 0x4)),
+ (0x1D7E2, (0x14AD, 0x1)),
+ (0x0331D, (0x701, 0x3)),
+ (0x1D578, (0x1247, 0x1)),
+ (0x02122, (0x196, 0x2)),
+ (0x0FF44, (0xFEC, 0x1)),
+ (0x1D4F7, (0x11D2, 0x1)),
+ (0x0FCD3, (0xC2D, 0x2)),
+ (0x0FFCA, (0x106D, 0x1)),
+ (0x000B5, (0x00A, 0x1)),
+ (0x0FC32, (0xADA, 0x2)),
+ (0x1D7C5, (0x1492, 0x1)),
+ (0x1D625, (0x12F4, 0x1)),
+ (0x032A3, (0x604, 0x1)),
+ (0x03311, (0x6C9, 0x4)),
+ (0x1EE2C, (0x152F, 0x1)),
+ (0x03180, (0x48B, 0x1)),
+ (0x0FB5D, (0x9C6, 0x1)),
+ (0x0FB25, (0x9B2, 0x1)),
+ (0x0FBEE, (0xA43, 0x3)),
+ (0x02FC7, (0x420, 0x1)),
+ (0x0322F, (0x548, 0x3)),
+ (0x1D5FE, (0x12CD, 0x1)),
+ (0x02F36, (0x38F, 0x1)),
+ (0x1D74D, (0x141A, 0x1)),
+ (0x1D5A5, (0x1274, 0x1)),
+ (0x02FC3, (0x41C, 0x1)),
+ (0x1E06C, (0x1507, 0x1)),
+ (0x1D508, (0x11E2, 0x1)),
+ (0x1D741, (0x140E, 0x1)),
+ (0x03221, (0x51E, 0x3)),
+ (0x1D512, (0x11EA, 0x1)),
+ (0x0FECE, (0xF6C, 0x1)),
+ (0x1D6D5, (0x13A2, 0x1)),
+ (0x032A7, (0x608, 0x1)),
+ (0x1D6B8, (0x1385, 0x1)),
+ (0x0FF06, (0xFAE, 0x1)),
+ (0x0FFE5, (0x1082, 0x1)),
+ (0x0323C, (0x56F, 0x3)),
+ (0x1CCE1, (0x10CE, 0x1)),
+ (0x0FE39, (0xEC3, 0x1)),
+ (0x0FBFC, (0xA6D, 0x1)),
+ (0x1F11D, (0x15D3, 0x3)),
+ (0x0FCCD, (0xC21, 0x2)),
+ (0x0FF42, (0xFEA, 0x1)),
+ (0x02189, (0x21F, 0x3)),
+ (0x00149, (0x020, 0x2)),
+ (0x01DB3, (0x0DD, 0x1)),
+ (0x1EE4D, (0x1540, 0x1)),
+ (0x1D6E7, (0x13B4, 0x1)),
+ (0x107A0, (0x10A9, 0x1)),
+ (0x002DD, (0x051, 0x2)),
+ (0x02F97, (0x3F0, 0x1)),
+ (0x1D71E, (0x13EB, 0x1)),
+ (0x1D4F9, (0x11D4, 0x1)),
+ (0x02102, (0x173, 0x1)),
+ (0x1D7B4, (0x1481, 0x1)),
+ (0x0315B, (0x466, 0x1)),
+ (0x0AB5D, (0x98F, 0x1)),
+ (0x001CB, (0x034, 0x2)),
+ (0x0FED9, (0xF77, 0x1)),
+ (0x02167, (0x1F1, 0x4)),
+ (0x0FD20, (0xCCC, 0x2)),
+ (0x1D69D, (0x136C, 0x1)),
+ (0x1D561, (0x1230, 0x1)),
+ (0x0213D, (0x1AA, 0x1)),
+ (0x1D7F4, (0x14BF, 0x1)),
+ (0x1D632, (0x1301, 0x1)),
+ (0x0FF9A, (0x1042, 0x1)),
+ (0x03389, (0x85A, 0x4)),
+ (0x02034, (0x12A, 0x3)),
+ (0x01D67, (0x0C0, 0x1)),
+ (0x0FF23, (0xFCB, 0x1)),
+ (0x1D577, (0x1246, 0x1)),
+ (0x0FEDC, (0xF7A, 0x1)),
+ (0x1D75B, (0x1428, 0x1)),
+ (0x1D4B9, (0x1197, 0x1)),
+ (0x033BA, (0x8D6, 0x2)),
+ (0x1D667, (0x1336, 0x1)),
+ (0x0331C, (0x6FE, 0x3)),
+ (0x1CCD7, (0x10C4, 0x1)),
+ (0x0FEC7, (0xF65, 0x1)),
+ (0x1CCF6, (0x10E3, 0x1)),
+ (0x1EE99, (0x157A, 0x1)),
+ (0x1CCEE, (0x10DB, 0x1)),
+ (0x1D5DA, (0x12A9, 0x1)),
+ (0x1D454, (0x113B, 0x1)),
+ (0x1EE94, (0x1575, 0x1)),
+ (0x1D4FC, (0x11D7, 0x1)),
+ (0x1D7A5, (0x1472, 0x1)),
+ (0x1F120, (0x15DC, 0x3)),
+ (0x1D72C, (0x13F9, 0x1)),
+ (0x0FE52, (0xEDE, 0x1)),
+ (0x1D684, (0x1353, 0x1)),
+ (0x0FE86, (0xF1D, 0x2)),
+ (0x03360, (0x7F2, 0x2)),
+ (0x02F0F, (0x368, 0x1)),
+ (0x1D5CE, (0x129D, 0x1)),
+ (0x1D60B, (0x12DA, 0x1)),
+ (0x1D5BA, (0x1289, 0x1)),
+ (0x02F10, (0x369, 0x1)),
+ (0x1D726, (0x13F3, 0x1)),
+ (0x0FFEB, (0x1087, 0x1)),
+ (0x02491, (0x2A4, 0x3)),
+ (0x0FE16, (0xEB3, 0x1)),
+ (0x1D754, (0x1421, 0x1)),
+ (0x032AD, (0x60E, 0x1)),
+ (0x02116, (0x18A, 0x2)),
+ (0x1D6CE, (0x139B, 0x1)),
+ (0x1D71D, (0x13EA, 0x1)),
+ (0x0FEA8, (0xF46, 0x1)),
+ (0x1D434, (0x111B, 0x1)),
+ (0x1D483, (0x1169, 0x1)),
+ (0x1D443, (0x112A, 0x1)),
+ (0x0FF1C, (0xFC4, 0x1)),
+ (0x0210A, (0x17F, 0x1)),
+ (0x1D6C1, (0x138E, 0x1)),
+ (0x1E040, (0x14DB, 0x1)),
+ (0x02F41, (0x39A, 0x1)),
+ (0x01DBD, (0x0E7, 0x1)),
+ (0x0FC2B, (0xACC, 0x2)),
+ (0x032CA, (0x645, 0x3)),
+ (0x03321, (0x711, 0x5)),
+ (0x03364, (0x7FC, 0x3)),
+ (0x1F130, (0x1603, 0x1)),
+ (0x02FBE, (0x417, 0x1)),
+ (0x0FE68, (0xEF2, 0x1)),
+ (0x0FCC4, (0xC0F, 0x2)),
+ (0x1D719, (0x13E6, 0x1)),
+ (0x1D5C8, (0x1297, 0x1)),
+ (0x1D4DC, (0x11B7, 0x1)),
+ (0x1D537, (0x120D, 0x1)),
+ (0x0FD3A, (0xD00, 0x2)),
+ (0x01D64, (0x0BD, 0x1)),
+ (0x0315E, (0x469, 0x1)),
+ (0x1EE19, (0x1521, 0x1)),
+ (0x0FF01, (0xFA9, 0x1)),
+ (0x1EE3B, (0x153B, 0x1)),
+ (0x1D4FE, (0x11D9, 0x1)),
+ (0x01FBF, (0x0F0, 0x2)),
+ (0x0216E, (0x1FF, 0x1)),
+ (0x1D5B3, (0x1282, 0x1)),
+ (0x01D44, (0x09E, 0x1)),
+ (0x032CD, (0x64D, 0x3)),
+ (0x01D42, (0x09C, 0x1)),
+ (0x1D56E, (0x123D, 0x1)),
+ (0x033DF, (0x92C, 0x3)),
+ (0x0FFB5, (0x105D, 0x1)),
+ (0x1E042, (0x14DD, 0x1)),
+ (0x02F81, (0x3DA, 0x1)),
+ (0x0FB6B, (0x9D4, 0x1)),
+ (0x0FCBF, (0xC05, 0x2)),
+ (0x0FD58, (0xD20, 0x3)),
+ (0x1D64E, (0x131D, 0x1)),
+ (0x0FEFC, (0xFA7, 0x2)),
+ (0x03246, (0x589, 0x1)),
+ (0x03162, (0x46D, 0x1)),
+ (0x02F65, (0x3BE, 0x1)),
+ (0x0FD96, (0xDD4, 0x3)),
+ (0x1D5E7, (0x12B6, 0x1)),
+ (0x03273, (0x5C4, 0x2)),
+ (0x0FCCE, (0xC23, 0x2)),
+ (0x003D5, (0x066, 0x1)),
+ (0x0326B, (0x5B7, 0x1)),
+ (0x032D0, (0x655, 0x1)),
+ (0x0FFE9, (0x1085, 0x1)),
+ (0x1D5D5, (0x12A4, 0x1)),
+ (0x1F21F, (0x1647, 0x1)),
+ (0x0FB8B, (0x9F4, 0x1)),
+ (0x0FEE0, (0xF7E, 0x1)),
+ (0x02F99, (0x3F2, 0x1)),
+ (0x02FA3, (0x3FC, 0x1)),
+ (0x0FBF5, (0xA58, 0x3)),
+ (0x1D43C, (0x1123, 0x1)),
+ (0x1D7B6, (0x1483, 0x1)),
+ (0x0FBE0, (0xA2D, 0x1)),
+ (0x1D40D, (0x10F4, 0x1)),
+ (0x1F144, (0x1617, 0x1)),
+ (0x03165, (0x470, 0x1)),
+ (0x0323D, (0x572, 0x3)),
+ (0x1D46C, (0x1152, 0x1)),
+ (0x1D4AE, (0x118C, 0x1)),
+ (0x02085, (0x154, 0x1)),
+ (0x02F86, (0x3DF, 0x1)),
+ (0x1EE95, (0x1576, 0x1)),
+ (0x0FDA8, (0xE0A, 0x3)),
+ (0x03228, (0x533, 0x3)),
+ (0x03213, (0x4E6, 0x4)),
+ (0x02485, (0x286, 0x4)),
+ (0x1D70A, (0x13D7, 0x1)),
+ (0x02F57, (0x3B0, 0x1)),
+ (0x1F14E, (0x1625, 0x3)),
+ (0x0FB96, (0x9FF, 0x1)),
+ (0x0FCE5, (0xC53, 0x2)),
+ (0x0317A, (0x485, 0x1)),
+ (0x03294, (0x5F5, 0x1)),
+ (0x1D786, (0x1453, 0x1)),
+ (0x024E4, (0x341, 0x1)),
+ (0x02495, (0x2B0, 0x3)),
+ (0x1F124, (0x15E8, 0x3)),
+ (0x03272, (0x5C2, 0x2)),
+ (0x02F9A, (0x3F3, 0x1)),
+ (0x0FD61, (0xD3B, 0x3)),
+ (0x0FCB0, (0xBE7, 0x2)),
+ (0x0FD02, (0xC90, 0x2)),
+ (0x1EEAB, (0x1585, 0x1)),
+ (0x1079F, (0x10A8, 0x1)),
+ (0x1D5AE, (0x127D, 0x1)),
+ (0x1D7B1, (0x147E, 0x1)),
+ (0x024C3, (0x320, 0x1)),
+ (0x0FC8E, (0xB9E, 0x2)),
+ (0x1D5E0, (0x12AF, 0x1)),
+ (0x0FFA9, (0x1051, 0x1)),
+ (0x01D33, (0x08E, 0x1)),
+ (0x1D505, (0x11E0, 0x1)),
+ (0x1D767, (0x1434, 0x1)),
+ (0x1D53D, (0x1212, 0x1)),
+ (0x1078F, (0x1098, 0x1)),
+ (0x0FC3F, (0xAF4, 0x2)),
+ (0x1D6A9, (0x1376, 0x1)),
+ (0x1D47A, (0x1160, 0x1)),
+ (0x0FC72, (0xB66, 0x2)),
+ (0x03151, (0x45C, 0x1)),
+ (0x03335, (0x75F, 0x3)),
+ (0x1D579, (0x1248, 0x1)),
+ (0x02F72, (0x3CB, 0x1)),
+ (0x0222F, (0x227, 0x2)),
+ (0x000BA, (0x00E, 0x1)),
+ (0x1D6BB, (0x1388, 0x1)),
+ (0x0FF03, (0xFAB, 0x1)),
+ (0x033B6, (0x8CE, 0x2)),
+ (0x1D419, (0x1100, 0x1)),
+ (0x1D763, (0x1430, 0x1)),
+ (0x02171, (0x202, 0x2)),
+ (0x02017, (0x11F, 0x2)),
+ (0x032B5, (0x61A, 0x2)),
+ (0x00132, (0x018, 0x2)),
+ (0x1EE8D, (0x156E, 0x1)),
+ (0x0319B, (0x4A3, 0x1)),
+ (0x1D5ED, (0x12BC, 0x1)),
+ (0x0FF58, (0x1000, 0x1)),
+ (0x0313C, (0x447, 0x1)),
+ (0x0FB7D, (0x9E6, 0x1)),
+ (0x03394, (0x875, 0x3)),
+ (0x02124, (0x198, 0x1)),
+ (0x02F50, (0x3A9, 0x1)),
+ (0x1D522, (0x11F8, 0x1)),
+ (0x0FF66, (0x100E, 0x1)),
+ (0x0FDFA, (0xE8F, 0x12)),
+ (0x0FC71, (0xB64, 0x2)),
+ (0x1D772, (0x143F, 0x1)),
+ (0x1D65A, (0x1329, 0x1)),
+ (0x1D7C6, (0x1493, 0x1)),
+ (0x0FEB8, (0xF56, 0x1)),
+ (0x0FEEE, (0xF8C, 0x1)),
+ (0x1EE61, (0x154B, 0x1)),
+ (0x0FB68, (0x9D1, 0x1)),
+ (0x1F103, (0x159C, 0x2)),
+ (0x1D585, (0x1254, 0x1)),
+ (0x03352, (0x7CC, 0x2)),
+ (0x0FDF2, (0xE70, 0x4)),
+ (0x0331A, (0x6F4, 0x6)),
+ (0x1D52C, (0x1202, 0x1)),
+ (0x0013F, (0x01C, 0x2)),
+ (0x02FAF, (0x408, 0x1)),
+ (0x032C1, (0x632, 0x2)),
+ (0x03320, (0x70C, 0x5)),
+ (0x1D5FD, (0x12CC, 0x1)),
+ (0x0FEB7, (0xF55, 0x1)),
+ (0x0FFE6, (0x1083, 0x1)),
+ (0x0FCE9, (0xC5B, 0x2)),
+ (0x0FD7A, (0xD86, 0x3)),
+ (0x0FF87, (0x102F, 0x1)),
+ (0x1EE1A, (0x1522, 0x1)),
+ (0x1F248, (0x167C, 0x3)),
+ (0x1D7C2, (0x148F, 0x1)),
+ (0x1D694, (0x1363, 0x1)),
+ (0x033B5, (0x8CC, 0x2)),
+ (0x03245, (0x588, 0x1)),
+ (0x1EE27, (0x152B, 0x1)),
+ (0x0FDBE, (0xE4C, 0x3)),
+ (0x1EE91, (0x1572, 0x1)),
+ (0x03329, (0x72A, 0x3)),
+ (0x1D4CF, (0x11AA, 0x1)),
+ (0x0FED3, (0xF71, 0x1)),
+ (0x02134, (0x1A0, 0x1)),
+ (0x03287, (0x5E8, 0x1)),
+ (0x024AE, (0x2FB, 0x3)),
+ (0x0FEB9, (0xF57, 0x1)),
+ (0x032AB, (0x60C, 0x1)),
+ (0x1D596, (0x1265, 0x1)),
+ (0x1D4F8, (0x11D3, 0x1)),
+ (0x0FEC9, (0xF67, 0x1)),
+ (0x1F22C, (0x1654, 0x1)),
+ (0x1F13A, (0x160D, 0x1)),
+ (0x032EF, (0x674, 0x1)),
+ (0x1D77F, (0x144C, 0x1)),
+ (0x02F82, (0x3DB, 0x1)),
+ (0x1D6E1, (0x13AE, 0x1)),
+ (0x03314, (0x6D7, 0x2)),
+ (0x0FEA4, (0xF42, 0x1)),
+ (0x1F115, (0x15BB, 0x3)),
+ (0x0222D, (0x224, 0x3)),
+ (0x1D4C9, (0x11A4, 0x1)),
+ (0x1D567, (0x1236, 0x1)),
+ (0x1D7EE, (0x14B9, 0x1)),
+ (0x032F1, (0x676, 0x1)),
+ (0x0FF8C, (0x1034, 0x1)),
+ (0x1D5A6, (0x1275, 0x1)),
+ (0x0FE61, (0xEEC, 0x1)),
+ (0x033EF, (0x953, 0x3)),
+ (0x02140, (0x1AD, 0x1)),
+ (0x1D659, (0x1328, 0x1)),
+ (0x1D542, (0x1216, 0x1)),
+ (0x03137, (0x442, 0x1)),
+ (0x02F2D, (0x386, 0x1)),
+ (0x1D4EE, (0x11C9, 0x1)),
+ (0x0FFE0, (0x107C, 0x1)),
+ (0x1D4E0, (0x11BB, 0x1)),
+ (0x01D34, (0x08F, 0x1)),
+ (0x1D6ED, (0x13BA, 0x1)),
+ (0x01DAD, (0x0D7, 0x1)),
+ (0x1D766, (0x1433, 0x1)),
+ (0x03380, (0x847, 0x2)),
+ (0x02170, (0x201, 0x1)),
+ (0x0FE35, (0xEBF, 0x1)),
+ (0x033A8, (0x8A5, 0x4)),
+ (0x1D650, (0x131F, 0x1)),
+ (0x01DB2, (0x0DC, 0x1)),
+ (0x1D4DD, (0x11B8, 0x1)),
+ (0x1F222, (0x164A, 0x1)),
+ (0x00587, (0x06E, 0x2)),
+ (0x02080, (0x14F, 0x1)),
+ (0x0FC8A, (0xB96, 0x2)),
+ (0x1D71C, (0x13E9, 0x1)),
+ (0x1D52A, (0x1200, 0x1)),
+ (0x1D557, (0x1226, 0x1)),
+ (0x0A69C, (0x986, 0x1)),
+ (0x0FD66, (0xD4A, 0x3)),
+ (0x02A74, (0x34C, 0x3)),
+ (0x1D764, (0x1431, 0x1)),
+ (0x1D45D, (0x1143, 0x1)),
+ (0x0FCBE, (0xC03, 0x2)),
+ (0x1D7F0, (0x14BB, 0x1)),
+ (0x0FBEA, (0xA37, 0x3)),
+ (0x02036, (0x12D, 0x2)),
+ (0x01FBD, (0x0EE, 0x2)),
+ (0x1D527, (0x11FD, 0x1)),
+ (0x1D5FB, (0x12CA, 0x1)),
+ (0x0FD57, (0xD1D, 0x3)),
+ (0x0318B, (0x496, 0x1)),
+ (0x0FDF5, (0xE7C, 0x4)),
+ (0x1078C, (0x1095, 0x1)),
+ (0x1CCF9, (0x10E6, 0x1)),
+ (0x1EEB6, (0x1590, 0x1)),
+ (0x1D6E3, (0x13B0, 0x1)),
+ (0x03166, (0x471, 0x1)),
+ (0x0338A, (0x85E, 0x2)),
+ (0x1D5EE, (0x12BD, 0x1)),
+ (0x03241, (0x57E, 0x3)),
+ (0x03365, (0x7FF, 0x3)),
+ (0x0FD39, (0xCFE, 0x2)),
+ (0x1EE17, (0x151F, 0x1)),
+ (0x1D432, (0x1119, 0x1)),
+ (0x1D56A, (0x1239, 0x1)),
+ (0x1D606, (0x12D5, 0x1)),
+ (0x0FEDD, (0xF7B, 0x1)),
+ (0x0FE64, (0xEEF, 0x1)),
+ (0x1D496, (0x117C, 0x1)),
+ (0x1CCEB, (0x10D8, 0x1)),
+ (0x1D7FA, (0x14C5, 0x1)),
+ (0x1D4BB, (0x1198, 0x1)),
+ (0x1D75C, (0x1429, 0x1)),
+ (0x001C9, (0x030, 0x2)),
+ (0x1FBF3, (0x1684, 0x1)),
+ (0x01D45, (0x09F, 0x1)),
+ (0x1D708, (0x13D5, 0x1)),
+ (0x1D781, (0x144E, 0x1)),
+ (0x01FDE, (0x103, 0x3)),
+ (0x1D64F, (0x131E, 0x1)),
+ (0x02FBD, (0x416, 0x1)),
+ (0x1D500, (0x11DB, 0x1)),
+ (0x033D7, (0x918, 0x2)),
+ (0x033A3, (0x897, 0x3)),
+ (0x1D502, (0x11DD, 0x1)),
+ (0x1D444, (0x112B, 0x1)),
+ (0x1D7C0, (0x148D, 0x1)),
+ (0x1D489, (0x116F, 0x1)),
+ (0x0FC4A, (0xB0A, 0x2)),
+ (0x0FCC3, (0xC0D, 0x2)),
+ (0x033A5, (0x89D, 0x2)),
+ (0x1D6C6, (0x1393, 0x1)),
+ (0x03258, (0x59C, 0x2)),
+ (0x02149, (0x1B2, 0x1)),
+ (0x107BA, (0x10C2, 0x1)),
+ (0x0FED6, (0xF74, 0x1)),
+ (0x1EE05, (0x150D, 0x1)),
+ (0x02EF3, (0x358, 0x1)),
+ (0x0FF94, (0x103C, 0x1)),
+ (0x0FC65, (0xB47, 0x3)),
+ (0x1E04E, (0x14E9, 0x1)),
+ (0x0FB91, (0x9FA, 0x1)),
+ (0x0FD12, (0xCB0, 0x2)),
+ (0x1D6C8, (0x1395, 0x1)),
+ (0x0FE4B, (0xED5, 0x2)),
+ (0x0249F, (0x2CE, 0x3)),
+ (0x01DA3, (0x0CD, 0x1)),
+ (0x032C2, (0x634, 0x2)),
+ (0x01D51, (0x0AA, 0x1)),
+ (0x1D7FF, (0x14CA, 0x1)),
+ (0x02076, (0x145, 0x1)),
+ (0x02F3C, (0x395, 0x1)),
+ (0x0FF63, (0x100B, 0x1)),
+ (0x01D3C, (0x096, 0x1)),
+ (0x1E03E, (0x14D9, 0x1)),
+ (0x1FBF5, (0x1686, 0x1)),
+ (0x001CC, (0x036, 0x2)),
+ (0x03286, (0x5E7, 0x1)),
+ (0x1D4EB, (0x11C6, 0x1)),
+ (0x1F230, (0x1658, 0x1)),
+ (0x0FCAA, (0xBDB, 0x2)),
+ (0x02FC5, (0x41E, 0x1)),
+ (0x03227, (0x530, 0x3)),
+ (0x0FB00, (0x993, 0x2)),
+ (0x1F13E, (0x1611, 0x1)),
+ (0x0FE77, (0xF00, 0x2)),
+ (0x1D7B5, (0x1482, 0x1)),
+ (0x0FFBB, (0x1063, 0x1)),
+ (0x03353, (0x7CE, 0x4)),
+ (0x01D9B, (0x0C5, 0x1)),
+ (0x1D72B, (0x13F8, 0x1)),
+ (0x1F21B, (0x1643, 0x1)),
+ (0x0338B, (0x860, 0x2)),
+ (0x02F61, (0x3BA, 0x1)),
+ (0x02C7C, (0x354, 0x1)),
+ (0x0FC00, (0xA71, 0x3)),
+ (0x0FF96, (0x103E, 0x1)),
+ (0x003F0, (0x068, 0x1)),
+ (0x1EE0D, (0x1515, 0x1)),
+ (0x0FF6D, (0x1015, 0x1)),
+ (0x0FD54, (0xD14, 0x3)),
+ (0x0FE33, (0xEBD, 0x1)),
+ (0x02F09, (0x362, 0x1)),
+ (0x1D5A1, (0x1270, 0x1)),
+ (0x03233, (0x554, 0x3)),
+ (0x02F21, (0x37A, 0x1)),
+ (0x1D4F4, (0x11CF, 0x1)),
+ (0x02FAA, (0x403, 0x1)),
+ (0x02F55, (0x3AE, 0x1)),
+ (0x1D49A, (0x1180, 0x1)),
+ (0x1F234, (0x165C, 0x1)),
+ (0x1E060, (0x14FB, 0x1)),
+ (0x1D6E0, (0x13AD, 0x1)),
+ (0x1D433, (0x111A, 0x1)),
+ (0x1D77B, (0x1448, 0x1)),
+ (0x0FD22, (0xCD0, 0x2)),
+ (0x03141, (0x44C, 0x1)),
+ (0x0FE9C, (0xF3A, 0x1)),
+ (0x1D46D, (0x1153, 0x1)),
+ (0x0329D, (0x5FE, 0x1)),
+ (0x032EC, (0x671, 0x1)),
+ (0x0FFBC, (0x1064, 0x1)),
+ (0x0FC5F, (0xB35, 0x3)),
+ (0x1EE7B, (0x155F, 0x1)),
+ (0x03236, (0x55D, 0x3)),
+ (0x1D67B, (0x134A, 0x1)),
+ (0x033E1, (0x931, 0x2)),
+ (0x1EE18, (0x1520, 0x1)),
+ (0x024E3, (0x340, 0x1)),
+ (0x1F22E, (0x1656, 0x1)),
+ (0x1D657, (0x1326, 0x1)),
+ (0x1D4B7, (0x1195, 0x1)),
+ (0x030FF, (0x43A, 0x2)),
+ (0x0FB64, (0x9CD, 0x1)),
+ (0x0FCFF, (0xC8A, 0x2)),
+ (0x000B9, (0x00D, 0x1)),
+ (0x03139, (0x444, 0x1)),
+ (0x01D3E, (0x098, 0x1)),
+ (0x003D6, (0x067, 0x1)),
+ (0x02088, (0x157, 0x1)),
+ (0x0FE54, (0xEDF, 0x1)),
+ (0x03263, (0x5AF, 0x1)),
+ (0x0FFC4, (0x1069, 0x1)),
+ (0x1D7CB, (0x1498, 0x1)),
+ (0x1D584, (0x1253, 0x1)),
+ (0x02100, (0x16D, 0x3)),
+ (0x03332, (0x74F, 0x6)),
+ (0x0FBF2, (0xA4F, 0x3)),
+ (0x0317B, (0x486, 0x1)),
+ (0x0FBF1, (0xA4C, 0x3)),
+ (0x001C6, (0x029, 0x3)),
+ (0x0FC83, (0xB88, 0x2)),
+ (0x024A7, (0x2E6, 0x3)),
+ (0x1D6C9, (0x1396, 0x1)),
+ (0x01D53, (0x0AC, 0x1)),
+ (0x032BA, (0x624, 0x2)),
+ (0x1F13C, (0x160F, 0x1)),
+ (0x02178, (0x213, 0x2)),
+ (0x1F237, (0x165F, 0x1)),
+ (0x1D751, (0x141E, 0x1)),
+ (0x1D479, (0x115F, 0x1)),
+ (0x0215D, (0x1DB, 0x3)),
+ (0x02F17, (0x370, 0x1)),
+ (0x0FF48, (0xFF0, 0x1)),
+ (0x0FC38, (0xAE6, 0x2)),
+ (0x1D465, (0x114B, 0x1)),
+ (0x02FCD, (0x426, 0x1)),
+ (0x01D59, (0x0B2, 0x1)),
+ (0x1D65F, (0x132E, 0x1)),
+ (0x03393, (0x872, 0x3)),
+ (0x024E9, (0x346, 0x1)),
+ (0x024DB, (0x338, 0x1)),
+ (0x0FD0B, (0xCA2, 0x2)),
+ (0x0208A, (0x159, 0x1)),
+ (0x0FE5A, (0xEE5, 0x1)),
+ (0x01D4B, (0x0A5, 0x1)),
+ (0x0FD0D, (0xCA6, 0x2)),
+ (0x01D2E, (0x08A, 0x1)),
+ (0x03288, (0x5E9, 0x1)),
+ (0x1D699, (0x1368, 0x1)),
+ (0x0FE92, (0xF30, 0x1)),
+ (0x1F11A, (0x15CA, 0x3)),
+ (0x1D589, (0x1258, 0x1)),
+ (0x1E04B, (0x14E6, 0x1)),
+ (0x02F3D, (0x396, 0x1)),
+ (0x1D45A, (0x1140, 0x1)),
+ (0x0FF4C, (0xFF4, 0x1)),
+ (0x1D789, (0x1456, 0x1)),
+ (0x0A7F2, (0x989, 0x1)),
+ (0x02497, (0x2B6, 0x3)),
+ (0x0FF7C, (0x1024, 0x1)),
+ (0x033D6, (0x915, 0x3)),
+ (0x0FFA6, (0x104E, 0x1)),
+ (0x1E033, (0x14CE, 0x1)),
+ (0x1D581, (0x1250, 0x1)),
+ (0x0FF2D, (0xFD5, 0x1)),
+ (0x1D46F, (0x1155, 0x1)),
+ (0x1D5F5, (0x12C4, 0x1)),
+ (0x1EE7E, (0x1561, 0x1)),
+ (0x1D497, (0x117D, 0x1)),
+ (0x1D594, (0x1263, 0x1)),
+ (0x1D499, (0x117F, 0x1)),
+ (0x1D57C, (0x124B, 0x1)),
+ (0x01D32, (0x08D, 0x1)),
+ (0x1D5CB, (0x129A, 0x1)),
+ (0x1D783, (0x1450, 0x1)),
+ (0x1D4E8, (0x11C3, 0x1)),
+ (0x1D58E, (0x125D, 0x1)),
+ (0x0FF0D, (0xFB5, 0x1)),
+ (0x0FB88, (0x9F1, 0x1)),
+ (0x1D474, (0x115A, 0x1)),
+ (0x02F52, (0x3AB, 0x1)),
+ (0x1D68E, (0x135D, 0x1)),
+ (0x03297, (0x5F8, 0x1)),
+ (0x1EE83, (0x1565, 0x1)),
+ (0x02FCB, (0x424, 0x1)),
+ (0x0FF32, (0xFDA, 0x1)),
+ (0x0FFAB, (0x1053, 0x1)),
+ (0x1CCEF, (0x10DC, 0x1)),
+ (0x0FC95, (0xBAC, 0x2)),
+ (0x02A76, (0x351, 0x3)),
+ (0x0FE74, (0xEFC, 0x2)),
+ (0x1D63A, (0x1309, 0x1)),
+ (0x1D4CB, (0x11A6, 0x1)),
+ (0x033BF, (0x8E0, 0x2)),
+ (0x1D664, (0x1333, 0x1)),
+ (0x1F224, (0x164C, 0x1)),
+ (0x00676, (0x072, 0x2)),
+ (0x03277, (0x5CC, 0x2)),
+ (0x1D6AC, (0x1379, 0x1)),
+ (0x033E9, (0x941, 0x3)),
+ (0x0FEBE, (0xF5C, 0x1)),
+ (0x0FEE8, (0xF86, 0x1)),
+ (0x0FF3C, (0xFE4, 0x1)),
+ (0x1D7BE, (0x148B, 0x1)),
+ (0x0FDA0, (0xDF2, 0x3)),
+ (0x0314B, (0x456, 0x1)),
+ (0x02F79, (0x3D2, 0x1)),
+ (0x0FC66, (0xB4A, 0x3)),
+ (0x0FD1F, (0xCCA, 0x2)),
+ (0x0FB81, (0x9EA, 0x1)),
+ (0x0FCC9, (0xC19, 0x2)),
+ (0x1D5B5, (0x1284, 0x1)),
+ (0x0FEF4, (0xF92, 0x1)),
+ (0x0339F, (0x88C, 0x3)),
+ (0x1D6FD, (0x13CA, 0x1)),
+ (0x02107, (0x17C, 0x1)),
+ (0x0FE9E, (0xF3C, 0x1)),
+ (0x1D745, (0x1412, 0x1)),
+ (0x0249D, (0x2C8, 0x3)),
+ (0x02F8F, (0x3E8, 0x1)),
+ (0x1EE31, (0x1534, 0x1)),
+ (0x1D5B0, (0x127F, 0x1)),
+ (0x1D5F3, (0x12C2, 0x1)),
+ (0x01D5F, (0x0B8, 0x1)),
+ (0x1D7BB, (0x1488, 0x1)),
+ (0x0FF33, (0xFDB, 0x1)),
+ (0x1EE5B, (0x1548, 0x1)),
+ (0x1D747, (0x1414, 0x1)),
+ (0x0337D, (0x83F, 0x2)),
+ (0x0FCF8, (0xC7C, 0x2)),
+ (0x1D796, (0x1463, 0x1)),
+ (0x03194, (0x49C, 0x1)),
+ (0x03196, (0x49E, 0x1)),
+ (0x03292, (0x5F3, 0x1)),
+ (0x0FD3D, (0xD06, 0x2)),
+ (0x1D535, (0x120B, 0x1)),
+ (0x03149, (0x454, 0x1)),
+ (0x1D62D, (0x12FC, 0x1)),
+ (0x0FF55, (0xFFD, 0x1)),
+ (0x0FDB6, (0xE34, 0x3)),
+ (0x1D604, (0x12D3, 0x1)),
+ (0x02095, (0x163, 0x1)),
+ (0x03219, (0x4FE, 0x4)),
+ (0x032C8, (0x640, 0x2)),
+ (0x1CCDA, (0x10C7, 0x1)),
+ (0x0210E, (0x183, 0x1)),
+ (0x0FC2C, (0xACE, 0x2)),
+ (0x1F108, (0x15A6, 0x2)),
+ (0x1D687, (0x1356, 0x1)),
+ (0x1D702, (0x13CF, 0x1)),
+ (0x1D615, (0x12E4, 0x1)),
+ (0x02F0C, (0x365, 0x1)),
+ (0x03185, (0x490, 0x1)),
+ (0x1D42A, (0x1111, 0x1)),
+ (0x03254, (0x594, 0x2)),
+ (0x0FFB9, (0x1061, 0x1)),
+ (0x1D428, (0x110F, 0x1)),
+ (0x1D72E, (0x13FB, 0x1)),
+ (0x0209A, (0x168, 0x1)),
+ (0x1D689, (0x1358, 0x1)),
+ (0x033E2, (0x933, 0x2)),
+ (0x0FC75, (0xB6C, 0x2)),
+ (0x0FBF6, (0xA5B, 0x3)),
+ (0x0FBDA, (0xA26, 0x1)),
+ (0x1D44A, (0x1131, 0x1)),
+ (0x0FF5C, (0x1004, 0x1)),
+ (0x0FEE3, (0xF81, 0x1)),
+ (0x02162, (0x1E6, 0x3)),
+ (0x03181, (0x48C, 0x1)),
+ (0x0321E, (0x515, 0x6)),
+ (0x032BE, (0x62C, 0x2)),
+ (0x1F201, (0x1634, 0x2)),
+ (0x0FDF7, (0xE84, 0x4)),
+ (0x107A5, (0x10AE, 0x1)),
+ (0x0FC1F, (0xAB4, 0x2)),
+ (0x0FC84, (0xB8A, 0x2)),
+ (0x033C2, (0x8E6, 0x4)),
+ (0x0FDF6, (0xE80, 0x4)),
+ (0x02FA0, (0x3F9, 0x1)),
+ (0x1F109, (0x15A8, 0x2)),
+ (0x024B4, (0x30D, 0x3)),
+ (0x1D5B7, (0x1286, 0x1)),
+ (0x0248F, (0x2A0, 0x2)),
+ (0x0247A, (0x25D, 0x3)),
+ (0x0AB5E, (0x990, 0x1)),
+ (0x032DA, (0x65F, 0x1)),
+ (0x0FD50, (0xD08, 0x3)),
+ (0x0336B, (0x811, 0x3)),
+ (0x024D9, (0x336, 0x1)),
+ (0x0FD16, (0xCB8, 0x2)),
+ (0x03251, (0x58E, 0x2)),
+ (0x02F90, (0x3E9, 0x1)),
+ (0x0FE8F, (0xF2D, 0x1)),
+ (0x03398, (0x87E, 0x2)),
+ (0x02F1C, (0x375, 0x1)),
+ (0x0FCE1, (0xC4B, 0x2)),
+ (0x0249C, (0x2C5, 0x3)),
+ (0x1D7C9, (0x1496, 0x1)),
+ (0x0FD62, (0xD3E, 0x3)),
+ (0x0FD1B, (0xCC2, 0x2)),
+ (0x03373, (0x828, 0x2)),
+ (0x1E054, (0x14EF, 0x1)),
+ (0x0FD06, (0xC98, 0x2)),
+ (0x02FCA, (0x423, 0x1)),
+ (0x1D526, (0x11FC, 0x1)),
+ (0x02461, (0x22D, 0x1)),
+ (0x03136, (0x441, 0x1)),
+ (0x0FC7D, (0xB7C, 0x2)),
+ (0x0FB87, (0x9F0, 0x1)),
+ (0x0FEAC, (0xF4A, 0x1)),
+ (0x0317E, (0x489, 0x1)),
+ (0x032E7, (0x66C, 0x1)),
+ (0x1D76B, (0x1438, 0x1)),
+ (0x0FB9C, (0xA05, 0x1)),
+ (0x1D44B, (0x1132, 0x1)),
+ (0x1EE06, (0x150E, 0x1)),
+ (0x03216, (0x4F2, 0x4)),
+ (0x033BD, (0x8DC, 0x2)),
+ (0x1F148, (0x161B, 0x1)),
+ (0x1F216, (0x163E, 0x1)),
+ (0x1D4AC, (0x118B, 0x1)),
+ (0x0FB13, (0x9A3, 0x2)),
+ (0x1D5CC, (0x129B, 0x1)),
+ (0x1F214, (0x163C, 0x1)),
+ (0x0FC20, (0xAB6, 0x2)),
+ (0x02F04, (0x35D, 0x1)),
+ (0x1D78D, (0x145A, 0x1)),
+ (0x0FCA9, (0xBD9, 0x2)),
+ (0x0FE62, (0xEED, 0x1)),
+ (0x0FC7A, (0xB76, 0x2)),
+ (0x1D4F6, (0x11D1, 0x1)),
+ (0x1E034, (0x14CF, 0x1)),
+ (0x0FC1E, (0xAB2, 0x2)),
+ (0x01D5C, (0x0B5, 0x1)),
+ (0x01D4C, (0x0A6, 0x1)),
+ (0x0246A, (0x237, 0x2)),
+ (0x0FBD6, (0xA22, 0x1)),
+ (0x02F7B, (0x3D4, 0x1)),
+ (0x033CB, (0x8FD, 0x2)),
+ (0x0FD08, (0xC9C, 0x2)),
+ (0x1F190, (0x1630, 0x2)),
+ (0x1CCE4, (0x10D1, 0x1)),
+ (0x0FD78, (0xD80, 0x3)),
+ (0x0336D, (0x817, 0x3)),
+ (0x0A7F4, (0x98B, 0x1)),
+ (0x0FCF3, (0xC70, 0x3)),
+ (0x0217D, (0x21C, 0x1)),
+ (0x1D5A0, (0x126F, 0x1)),
+ (0x0FD5F, (0xD35, 0x3)),
+ (0x000B4, (0x008, 0x2)),
+ (0x0322E, (0x545, 0x3)),
+ (0x1EEBA, (0x1594, 0x1)),
+ (0x1F229, (0x1651, 0x1)),
+ (0x1D5DD, (0x12AC, 0x1)),
+ (0x1E067, (0x1502, 0x1)),
+ (0x0FC5A, (0xB2A, 0x2)),
+ (0x0FD95, (0xDD1, 0x3)),
+ (0x1F118, (0x15C4, 0x3)),
+ (0x1EE08, (0x1510, 0x1)),
+ (0x02FC8, (0x421, 0x1)),
+ (0x0FCC6, (0xC13, 0x2)),
+ (0x1D6B1, (0x137E, 0x1)),
+ (0x1D4CD, (0x11A8, 0x1)),
+ (0x1D472, (0x1158, 0x1)),
+ (0x1D74C, (0x1419, 0x1)),
+ (0x1D54C, (0x121C, 0x1)),
+ (0x1E031, (0x14CC, 0x1)),
+ (0x02490, (0x2A2, 0x2)),
+ (0x0FC09, (0xA88, 0x2)),
+ (0x1FBF4, (0x1685, 0x1)),
+ (0x02460, (0x22C, 0x1)),
+ (0x0FF07, (0xFAF, 0x1)),
+ (0x0FBF9, (0xA64, 0x3)),
+ (0x02154, (0x1C0, 0x3)),
+ (0x1D679, (0x1348, 0x1)),
+ (0x03223, (0x524, 0x3)),
+ (0x1D712, (0x13DF, 0x1)),
+ (0x0FE99, (0xF37, 0x1)),
+ (0x1D6D8, (0x13A5, 0x1)),
+ (0x1D677, (0x1346, 0x1)),
+ (0x1CCE7, (0x10D4, 0x1)),
+ (0x1D470, (0x1156, 0x1)),
+ (0x0FC69, (0xB53, 0x3)),
+ (0x02FC6, (0x41F, 0x1)),
+ (0x1D541, (0x1215, 0x1)),
+ (0x1D7E1, (0x14AC, 0x1)),
+ (0x0FF75, (0x101D, 0x1)),
+ (0x032D4, (0x659, 0x1)),
+ (0x01DAE, (0x0D8, 0x1)),
+ (0x0FFDC, (0x107B, 0x1)),
+ (0x033D4, (0x910, 0x2)),
+ (0x0FC94, (0xBAA, 0x2)),
+ (0x0FB28, (0x9B5, 0x1)),
+ (0x0FD67, (0xD4D, 0x3)),
+ (0x1CCE2, (0x10CF, 0x1)),
+ (0x0211A, (0x18D, 0x1)),
+ (0x0FE38, (0xEC2, 0x1)),
+ (0x01D39, (0x094, 0x1)),
+ (0x1D7F3, (0x14BE, 0x1)),
+ (0x1F11F, (0x15D9, 0x3)),
+ (0x0FF91, (0x1039, 0x1)),
+ (0x032E2, (0x667, 0x1)),
+ (0x0212D, (0x19B, 0x1)),
+ (0x1D467, (0x114D, 0x1)),
+ (0x02FA2, (0x3FB, 0x1)),
+ (0x0FC36, (0xAE2, 0x2)),
+ (0x1D730, (0x13FD, 0x1)),
+ (0x02F25, (0x37E, 0x1)),
+ (0x1D7D3, (0x149E, 0x1)),
+ (0x0FC27, (0xAC4, 0x2)),
+ (0x02079, (0x148, 0x1)),
+ (0x1D5A7, (0x1276, 0x1)),
+ (0x1D478, (0x115E, 0x1)),
+ (0x1F242, (0x166A, 0x3)),
+ (0x1EE71, (0x1557, 0x1)),
+ (0x1D59B, (0x126A, 0x1)),
+ (0x1078B, (0x1094, 0x1)),
+ (0x1D6F2, (0x13BF, 0x1)),
+ (0x0FDBC, (0xE46, 0x3)),
+ (0x0FB73, (0x9DC, 0x1)),
+ (0x02F69, (0x3C2, 0x1)),
+ (0x0200A, (0x11D, 0x1)),
+ (0x1EE69, (0x1550, 0x1)),
+ (0x1D57B, (0x124A, 0x1)),
+ (0x0FCEA, (0xC5D, 0x2)),
+ (0x0323F, (0x578, 0x3)),
+ (0x1D45C, (0x1142, 0x1)),
+ (0x0FFA0, (0x1048, 0x1)),
+ (0x1D429, (0x1110, 0x1)),
+ (0x1D5CA, (0x1299, 0x1)),
+ (0x1079C, (0x10A5, 0x1)),
+ (0x02F29, (0x382, 0x1)),
+ (0x0FD8D, (0xDBF, 0x3)),
+ (0x0FE50, (0xEDC, 0x1)),
+ (0x1D793, (0x1460, 0x1)),
+ (0x0209C, (0x16A, 0x1)),
+ (0x03340, (0x789, 0x5)),
+ (0x1EE7A, (0x155E, 0x1)),
+ (0x0326E, (0x5BA, 0x2)),
+ (0x1D69C, (0x136B, 0x1)),
+ (0x0317C, (0x487, 0x1)),
+ (0x1D424, (0x110B, 0x1)),
+ (0x0FCBB, (0xBFD, 0x2)),
+ (0x0FB7E, (0x9E7, 0x1)),
+ (0x1D678, (0x1347, 0x1)),
+ (0x024C6, (0x323, 0x1)),
+ (0x1E06B, (0x1506, 0x1)),
+ (0x1F110, (0x15AC, 0x3)),
+ (0x01D43, (0x09D, 0x1)),
+ (0x02498, (0x2B9, 0x3)),
+ (0x1D6AB, (0x1378, 0x1)),
+ (0x0FD7E, (0xD92, 0x3)),
+ (0x0FD9A, (0xDE0, 0x3)),
+ (0x1D449, (0x1130, 0x1)),
+ (0x1D5D9, (0x12A8, 0x1)),
+ (0x10784, (0x108E, 0x1)),
+ (0x01D5A, (0x0B3, 0x1)),
+ (0x0FC05, (0xA80, 0x2)),
+ (0x024BC, (0x319, 0x1)),
+ (0x033FB, (0x977, 0x3)),
+ (0x02F42, (0x39B, 0x1)),
+ (0x0338F, (0x868, 0x2)),
+ (0x0FC70, (0xB62, 0x2)),
+ (0x02091, (0x15F, 0x1)),
+ (0x03183, (0x48E, 0x1)),
+ (0x0336E, (0x81A, 0x3)),
+ (0x02093, (0x161, 0x1)),
+ (0x1D78C, (0x1459, 0x1)),
+ (0x1D5C6, (0x1295, 0x1)),
+ (0x0FDB5, (0xE31, 0x3)),
+ (0x1D5F9, (0x12C8, 0x1)),
+ (0x1D4BF, (0x119B, 0x1)),
+ (0x02F9F, (0x3F8, 0x1)),
+ (0x0319A, (0x4A2, 0x1)),
+ (0x03275, (0x5C8, 0x2)),
+ (0x1D5D1, (0x12A0, 0x1)),
+ (0x0FFED, (0x1089, 0x1)),
+ (0x0FDA4, (0xDFE, 0x3)),
+ (0x0FED1, (0xF6F, 0x1)),
+ (0x0FEA7, (0xF45, 0x1)),
+ (0x1D6A3, (0x1372, 0x1)),
+ (0x0FCE3, (0xC4F, 0x2)),
+ (0x1EEB1, (0x158B, 0x1)),
+ (0x03317, (0x6E5, 0x5)),
+ (0x0FE80, (0xF12, 0x1)),
+ (0x02101, (0x170, 0x3)),
+ (0x0328C, (0x5ED, 0x1)),
+ (0x0FBFD, (0xA6E, 0x1)),
+ (0x02F5F, (0x3B8, 0x1)),
+ (0x03278, (0x5CE, 0x2)),
+ (0x0FF11, (0xFB9, 0x1)),
+ (0x02F1A, (0x373, 0x1)),
+ (0x1EE90, (0x1571, 0x1)),
+ (0x024D5, (0x332, 0x1)),
+ (0x0247E, (0x26A, 0x4)),
+ (0x0FB93, (0x9FC, 0x1)),
+ (0x0FD10, (0xCAC, 0x2)),
+ (0x1D68D, (0x135C, 0x1)),
+ (0x1CCE8, (0x10D5, 0x1)),
+ (0x003F2, (0x06A, 0x1)),
+ (0x01DB9, (0x0E3, 0x1)),
+ (0x02F18, (0x371, 0x1)),
+ (0x1F149, (0x161C, 0x1)),
+ (0x01D65, (0x0BE, 0x1)),
+ (0x0FE8A, (0xF25, 0x2)),
+ (0x1F129, (0x15F7, 0x3)),
+ (0x0210D, (0x182, 0x1)),
+ (0x1D40E, (0x10F5, 0x1)),
+ (0x0333E, (0x783, 0x4)),
+ (0x1EE09, (0x1511, 0x1)),
+ (0x033DC, (0x925, 0x2)),
+ (0x0FDB4, (0xE2E, 0x3)),
+ (0x02099, (0x167, 0x1)),
+ (0x0FD2D, (0xCE6, 0x2)),
+ (0x032A0, (0x601, 0x1)),
+ (0x0FEBD, (0xF5B, 0x1)),
+ (0x0FF73, (0x101B, 0x1)),
+ (0x032D8, (0x65D, 0x1)),
+ (0x10794, (0x109D, 0x1)),
+ (0x0FBAA, (0xA15, 0x1)),
+ (0x0FE37, (0xEC1, 0x1)),
+ (0x0FF1A, (0xFC2, 0x1)),
+ (0x0FCA2, (0xBCB, 0x2)),
+ (0x0FD85, (0xDA7, 0x3)),
+ (0x1D78B, (0x1458, 0x1)),
+ (0x1D6A8, (0x1375, 0x1)),
+ (0x1D778, (0x1445, 0x1)),
+ (0x02F1B, (0x374, 0x1)),
+ (0x000B2, (0x006, 0x1)),
+ (0x03359, (0x7E4, 0x2)),
+ (0x03179, (0x484, 0x1)),
+ (0x0FB99, (0xA02, 0x1)),
+ (0x1D5B2, (0x1281, 0x1)),
+ (0x107A3, (0x10AC, 0x1)),
+ (0x1D626, (0x12F5, 0x1)),
+ (0x0318A, (0x495, 0x1)),
+ (0x1D4C0, (0x119C, 0x1)),
+ (0x0FBDF, (0xA2C, 0x1)),
+ (0x1D686, (0x1355, 0x1)),
+ (0x0FE40, (0xECA, 0x1)),
+ (0x02F2C, (0x385, 0x1)),
+ (0x1F136, (0x1609, 0x1)),
+ (0x02FCF, (0x428, 0x1)),
+ (0x02F3F, (0x398, 0x1)),
+ (0x0FE3E, (0xEC8, 0x1)),
+ (0x0327C, (0x5D6, 0x5)),
+ (0x0FF14, (0xFBC, 0x1)),
+ (0x1D53E, (0x1213, 0x1)),
+ (0x0314A, (0x455, 0x1)),
+ (0x1D636, (0x1305, 0x1)),
+ (0x0FDC3, (0xE5B, 0x3)),
+ (0x02F95, (0x3EE, 0x1)),
+ (0x1F113, (0x15B5, 0x3)),
+ (0x1D481, (0x1167, 0x1)),
+ (0x01DAA, (0x0D4, 0x1)),
+ (0x1D5F2, (0x12C1, 0x1)),
+ (0x1D5BD, (0x128C, 0x1)),
+ (0x1E045, (0x14E0, 0x1)),
+ (0x02F6A, (0x3C3, 0x1)),
+ (0x0FB8C, (0x9F5, 0x1)),
+ (0x02F5B, (0x3B4, 0x1)),
+ (0x1D7D4, (0x149F, 0x1)),
+ (0x0335E, (0x7EE, 0x2)),
+ (0x1D565, (0x1234, 0x1)),
+ (0x1D442, (0x1129, 0x1)),
+ (0x1D48A, (0x1170, 0x1)),
+ (0x0FCF2, (0xC6D, 0x3)),
+ (0x1F142, (0x1615, 0x1)),
+ (0x1D544, (0x1218, 0x1)),
+ (0x1D452, (0x1139, 0x1)),
+ (0x002D9, (0x049, 0x2)),
+ (0x1D573, (0x1242, 0x1)),
+ (0x0FF54, (0xFFC, 0x1)),
+ (0x0FCDC, (0xC3F, 0x2)),
+ (0x0FC4F, (0xB14, 0x2)),
+ (0x1D540, (0x1214, 0x1)),
+ (0x0FEAD, (0xF4B, 0x1)),
+ (0x0FCE0, (0xC48, 0x3)),
+ (0x0FDA6, (0xE04, 0x3)),
+ (0x0FB23, (0x9B0, 0x1)),
+ (0x1D446, (0x112D, 0x1)),
+ (0x1D66E, (0x133D, 0x1)),
+ (0x1EE07, (0x150F, 0x1)),
+ (0x01D36, (0x091, 0x1)),
+ (0x0FD1E, (0xCC8, 0x2)),
+ (0x10782, (0x108C, 0x1)),
+ (0x03160, (0x46B, 0x1)),
+ (0x03338, (0x76A, 0x4)),
+ (0x1D7C3, (0x1490, 0x1)),
+ (0x1F14F, (0x1628, 0x2)),
+ (0x1D41C, (0x1103, 0x1)),
+ (0x0FF60, (0x1008, 0x1)),
+ (0x1D7C1, (0x148E, 0x1)),
+ (0x1D473, (0x1159, 0x1)),
+ (0x0313F, (0x44A, 0x1)),
+ (0x1D582, (0x1251, 0x1)),
+ (0x0FC0F, (0xA94, 0x2)),
+ (0x1D569, (0x1238, 0x1)),
+ (0x03336, (0x762, 0x5)),
+ (0x03355, (0x7D7, 0x2)),
+ (0x1EE4B, (0x153F, 0x1)),
+ (0x03169, (0x474, 0x1)),
+ (0x0FB65, (0x9CE, 0x1)),
+ (0x0FFA7, (0x104F, 0x1)),
+ (0x03323, (0x719, 0x3)),
+ (0x1D6BC, (0x1389, 0x1)),
+ (0x01D4D, (0x0A7, 0x1)),
+ (0x1D7FB, (0x14C6, 0x1)),
+ (0x03300, (0x686, 0x5)),
+ (0x0FDF9, (0xE8C, 0x3)),
+ (0x1EE24, (0x152A, 0x1)),
+ (0x1EE03, (0x150C, 0x1)),
+ (0x03230, (0x54B, 0x3)),
+ (0x0FC19, (0xAA8, 0x2)),
+ (0x024A3, (0x2DA, 0x3)),
+ (0x1F239, (0x1661, 0x1)),
+ (0x0318C, (0x497, 0x1)),
+ (0x1D588, (0x1257, 0x1)),
+ (0x0FF69, (0x1011, 0x1)),
+ (0x0246F, (0x241, 0x2)),
+ (0x02F13, (0x36C, 0x1)),
+ (0x024C4, (0x321, 0x1)),
+ (0x03178, (0x483, 0x1)),
+ (0x1EE81, (0x1563, 0x1)),
+ (0x02E9F, (0x357, 0x1)),
+ (0x1D6AD, (0x137A, 0x1)),
+ (0x0FC4D, (0xB10, 0x2)),
+ (0x0FEAF, (0xF4D, 0x1)),
+ (0x033F4, (0x962, 0x3)),
+ (0x032E1, (0x666, 0x1)),
+ (0x03319, (0x6EE, 0x6)),
+ (0x033C1, (0x8E4, 0x2)),
+ (0x1F100, (0x1596, 0x2)),
+ (0x02F34, (0x38D, 0x1)),
+ (0x1E030, (0x14CB, 0x1)),
+ (0x0FD9D, (0xDE9, 0x3)),
+ (0x1D47F, (0x1165, 0x1)),
+ (0x0FBA1, (0xA0A, 0x1)),
+ (0x1D48D, (0x1173, 0x1)),
+ (0x1F228, (0x1650, 0x1)),
+ (0x02120, (0x191, 0x2)),
+ (0x0FE88, (0xF21, 0x2)),
+ (0x0FB4F, (0x9B7, 0x2)),
+ (0x0205F, (0x140, 0x1)),
+ (0x033C9, (0x8F9, 0x2)),
+ (0x0207F, (0x14E, 0x1)),
+ (0x1D716, (0x13E3, 0x1)),
+ (0x1D673, (0x1342, 0x1)),
+ (0x1EE9A, (0x157B, 0x1)),
+ (0x1D7D5, (0x14A0, 0x1)),
+ (0x1D649, (0x1318, 0x1)),
+ (0x1EE5F, (0x154A, 0x1)),
+ (0x1D75A, (0x1427, 0x1)),
+ (0x1D5D4, (0x12A3, 0x1)),
+ (0x002E2, (0x055, 0x1)),
+ (0x0FEC1, (0xF5F, 0x1)),
+ (0x0309F, (0x438, 0x2)),
+ (0x0FB5E, (0x9C7, 0x1)),
+ (0x1D47E, (0x1164, 0x1)),
+ (0x1D707, (0x13D4, 0x1)),
+ (0x02F5E, (0x3B7, 0x1)),
+ (0x0FB9D, (0xA06, 0x1)),
+ (0x03326, (0x723, 0x3)),
+ (0x0FEA3, (0xF41, 0x1)),
+ (0x1E038, (0x14D3, 0x1)),
+ (0x01FC1, (0x0F4, 0x3)),
+ (0x1D71B, (0x13E8, 0x1)),
+ (0x032F4, (0x679, 0x1)),
+ (0x03346, (0x79E, 0x3)),
+ (0x1D7A0, (0x146D, 0x1)),
+ (0x02F4F, (0x3A8, 0x1)),
+ (0x03361, (0x7F4, 0x2)),
+ (0x1F211, (0x1638, 0x1)),
+ (0x1EE2F, (0x1532, 0x1)),
+ (0x1D4ED, (0x11C8, 0x1)),
+ (0x0FC9A, (0xBB9, 0x3)),
+ (0x1D4E1, (0x11BC, 0x1)),
+ (0x032A8, (0x609, 0x1)),
+ (0x1F226, (0x164E, 0x1)),
+ (0x000B8, (0x00B, 0x2)),
+ (0x1EE54, (0x1545, 0x1)),
+ (0x01D69, (0x0C2, 0x1)),
+ (0x0207B, (0x14A, 0x1)),
+ (0x1079B, (0x10A4, 0x1)),
+ (0x0FC0E, (0xA92, 0x2)),
+ (0x1EE1E, (0x1526, 0x1)),
+ (0x1D518, (0x11EF, 0x1)),
+ (0x1D420, (0x1107, 0x1)),
+ (0x0FBA3, (0xA0C, 0x1)),
+ (0x02FD0, (0x429, 0x1)),
+ (0x1D4C6, (0x11A1, 0x1)),
+ (0x03133, (0x43E, 0x1)),
+ (0x0FD33, (0xCF2, 0x2)),
+ (0x0FC12, (0xA9A, 0x2)),
+ (0x0FFBA, (0x1062, 0x1)),
+ (0x01D50, (0x0A9, 0x1)),
+ (0x0248A, (0x296, 0x2)),
+ (0x0FD05, (0xC96, 0x2)),
+ (0x0FDB9, (0xE3D, 0x3)),
+ (0x0210C, (0x181, 0x1)),
+ (0x0339B, (0x884, 0x2)),
+ (0x033E6, (0x93B, 0x2)),
+ (0x1D613, (0x12E2, 0x1)),
+ (0x1D7B2, (0x147F, 0x1)),
+ (0x0FBAF, (0xA1A, 0x1)),
+ (0x01DA2, (0x0CC, 0x1)),
+ (0x0316E, (0x479, 0x1)),
+ (0x02F48, (0x3A1, 0x1)),
+ (0x000AF, (0x004, 0x2)),
+ (0x10799, (0x10A2, 0x1)),
+ (0x0FBEB, (0xA3A, 0x3)),
+ (0x0315F, (0x46A, 0x1)),
+ (0x1EEB2, (0x158C, 0x1)),
+ (0x1D468, (0x114E, 0x1)),
+ (0x1D42F, (0x1116, 0x1)),
+ (0x0FC55, (0xB20, 0x2)),
+ (0x1D51C, (0x11F3, 0x1)),
+ (0x0FF92, (0x103A, 0x1)),
+ (0x03395, (0x878, 0x2)),
+ (0x1D674, (0x1343, 0x1)),
+ (0x1D722, (0x13EF, 0x1)),
+ (0x0FBE6, (0xA33, 0x1)),
+ (0x033A4, (0x89A, 0x3)),
+ (0x033F7, (0x96B, 0x3)),
+ (0x02001, (0x114, 0x1)),
+ (0x1F14B, (0x161F, 0x2)),
+ (0x1D733, (0x1400, 0x1)),
+ (0x0FEC0, (0xF5E, 0x1)),
+ (0x1D67D, (0x134C, 0x1)),
+ (0x0FC23, (0xABC, 0x2)),
+ (0x1D601, (0x12D0, 0x1)),
+ (0x02F85, (0x3DE, 0x1)),
+ (0x0037A, (0x058, 0x2)),
+ (0x032CF, (0x652, 0x3)),
+ (0x1F200, (0x1632, 0x2)),
+ (0x02499, (0x2BC, 0x3)),
+ (0x1D490, (0x1176, 0x1)),
+ (0x032F0, (0x675, 0x1)),
+ (0x02F19, (0x372, 0x1)),
+ (0x1D696, (0x1365, 0x1)),
+ (0x1D55E, (0x122D, 0x1)),
+ (0x0FCF5, (0xC76, 0x2)),
+ (0x0FC7F, (0xB80, 0x2)),
+ (0x0FC64, (0xB44, 0x3)),
+ (0x0FFB3, (0x105B, 0x1)),
+ (0x1F105, (0x15A0, 0x2)),
+ (0x1D748, (0x1415, 0x1)),
+ (0x1D405, (0x10EC, 0x1)),
+ (0x02113, (0x188, 0x1)),
+ (0x0FEE1, (0xF7F, 0x1)),
+ (0x1E05F, (0x14FA, 0x1)),
+ (0x0FCFD, (0xC86, 0x2)),
+ (0x0FF4E, (0xFF6, 0x1)),
+ (0x1D7F7, (0x14C2, 0x1)),
+ (0x0FFD5, (0x1076, 0x1)),
+ (0x0FCB3, (0xBED, 0x2)),
+ (0x0FB52, (0x9BB, 0x1)),
+ (0x1D595, (0x1264, 0x1)),
+ (0x1F147, (0x161A, 0x1)),
+ (0x0FE5D, (0xEE8, 0x1)),
+ (0x1D655, (0x1324, 0x1)),
+ (0x1D6B5, (0x1382, 0x1)),
+ (0x024BF, (0x31C, 0x1)),
+ (0x03256, (0x598, 0x2)),
+ (0x01FFE, (0x111, 0x2)),
+ (0x024BB, (0x318, 0x1)),
+ (0x1D6AF, (0x137C, 0x1)),
+ (0x03260, (0x5AC, 0x1)),
+ (0x02F01, (0x35A, 0x1)),
+ (0x0FC80, (0xB82, 0x2)),
+ (0x0325C, (0x5A4, 0x2)),
+ (0x1D6A0, (0x136F, 0x1)),
+ (0x03383, (0x84D, 0x2)),
+ (0x0FB22, (0x9AF, 0x1)),
+ (0x1D61C, (0x12EB, 0x1)),
+ (0x0216F, (0x200, 0x1)),
+ (0x01D57, (0x0B0, 0x1)),
+ (0x024D8, (0x335, 0x1)),
+ (0x1D773, (0x1440, 0x1)),
+ (0x0FC5E, (0xB32, 0x3)),
+ (0x1F213, (0x163A, 0x2)),
+ (0x1D70F, (0x13DC, 0x1)),
+ (0x1D5E6, (0x12B5, 0x1)),
+ (0x0FFA4, (0x104C, 0x1)),
+ (0x1F12D, (0x15FF, 0x2)),
+ (0x0FB16, (0x9A9, 0x2)),
+ (0x1E05A, (0x14F5, 0x1)),
+ (0x0FC79, (0xB74, 0x2)),
+ (0x02FA7, (0x400, 0x1)),
+ (0x0327A, (0x5D2, 0x2)),
+ (0x032FB, (0x680, 0x1)),
+ (0x002D8, (0x047, 0x2)),
+ (0x1EEA5, (0x1580, 0x1)),
+ (0x1CCEA, (0x10D7, 0x1)),
+ (0x02493, (0x2AA, 0x3)),
+ (0x1E04A, (0x14E5, 0x1)),
+ (0x1D598, (0x1267, 0x1)),
+ (0x02FAB, (0x404, 0x1)),
+ (0x1D758, (0x1425, 0x1)),
+ (0x1D4DA, (0x11B5, 0x1)),
+ (0x0FBDB, (0xA27, 0x1)),
+ (0x02164, (0x1EB, 0x1)),
+ (0x0FF83, (0x102B, 0x1)),
+ (0x02F94, (0x3ED, 0x1)),
+ (0x02483, (0x27E, 0x4)),
+ (0x032ED, (0x672, 0x1)),
+ (0x0334F, (0x7C2, 0x3)),
+ (0x1D737, (0x1404, 0x1)),
+ (0x0FDC4, (0xE5E, 0x3)),
+ (0x0FE55, (0xEE0, 0x1)),
+ (0x0FF7D, (0x1025, 0x1)),
+ (0x02489, (0x294, 0x2)),
+ (0x02FB5, (0x40E, 0x1)),
+ (0x0FE3C, (0xEC6, 0x1)),
+ (0x1D628, (0x12F7, 0x1)),
+ (0x032F5, (0x67A, 0x1)),
+ (0x0FF05, (0xFAD, 0x1)),
+ (0x0FFA8, (0x1050, 0x1)),
+ (0x1EE1D, (0x1525, 0x1)),
+ (0x03159, (0x464, 0x1)),
+ (0x02A0C, (0x348, 0x4)),
+ (0x1D746, (0x1413, 0x1)),
+ (0x0FECF, (0xF6D, 0x1)),
+ (0x0FBFB, (0xA6A, 0x3)),
+ (0x1D6D6, (0x13A3, 0x1)),
+ (0x02152, (0x1B9, 0x4)),
+ (0x1E043, (0x14DE, 0x1)),
+ (0x03172, (0x47D, 0x1)),
+ (0x107AA, (0x10B3, 0x1)),
+ (0x0FBDC, (0xA28, 0x1)),
+ (0x02158, (0x1CC, 0x3)),
+ (0x1D63D, (0x130C, 0x1)),
+ (0x0FEE2, (0xF80, 0x1)),
+ (0x024DC, (0x339, 0x1)),
+ (0x0FDC0, (0xE52, 0x3)),
+ (0x02F1E, (0x377, 0x1)),
+ (0x01D54, (0x0AD, 0x1)),
+ (0x1D759, (0x1426, 0x1)),
+ (0x1D553, (0x1222, 0x1)),
+ (0x10795, (0x109E, 0x1)),
+ (0x033B9, (0x8D4, 0x2)),
+ (0x1D5D2, (0x12A1, 0x1)),
+ (0x1D451, (0x1138, 0x1)),
+ (0x0335C, (0x7EA, 0x2)),
+ (0x03283, (0x5E4, 0x1)),
+ (0x032E6, (0x66B, 0x1)),
+ (0x03281, (0x5E2, 0x1)),
+ (0x107B0, (0x10B9, 0x1)),
+ (0x03371, (0x823, 0x3)),
+ (0x0FCF1, (0xC6B, 0x2)),
+ (0x1EE86, (0x1568, 0x1)),
+ (0x0FFDB, (0x107A, 0x1)),
+ (0x1D647, (0x1316, 0x1)),
+ (0x03210, (0x4DA, 0x4)),
+ (0x1D7CA, (0x1497, 0x1)),
+ (0x0FDF4, (0xE78, 0x4)),
+ (0x0FD0C, (0xCA4, 0x2)),
+ (0x02007, (0x11A, 0x1)),
+ (0x0333B, (0x775, 0x5)),
+ (0x02A75, (0x34F, 0x2)),
+ (0x03231, (0x54E, 0x3)),
+ (0x02F8D, (0x3E6, 0x1)),
+ (0x1D6DD, (0x13AA, 0x1)),
+ (0x107B5, (0x10BD, 0x1)),
+ (0x02F54, (0x3AD, 0x1)),
+ (0x0FB98, (0xA01, 0x1)),
+ (0x0FD60, (0xD38, 0x3)),
+ (0x1D495, (0x117B, 0x1)),
+ (0x0FF4D, (0xFF5, 0x1)),
+ (0x0313B, (0x446, 0x1)),
+ (0x0A7F3, (0x98A, 0x1)),
+ (0x1D7E5, (0x14B0, 0x1)),
+ (0x1D4F2, (0x11CD, 0x1)),
+ (0x1D65E, (0x132D, 0x1)),
+ (0x02F6D, (0x3C6, 0x1)),
+ (0x1EE00, (0x1509, 0x1)),
+ (0x02103, (0x174, 0x2)),
+ (0x0FF5D, (0x1005, 0x1)),
+ (0x1F16B, (0x162C, 0x2)),
+ (0x0FF8A, (0x1032, 0x1)),
+ (0x1D4B3, (0x1191, 0x1)),
+ (0x032FD, (0x682, 0x1)),
+ (0x1D74B, (0x1418, 0x1)),
+ (0x0FD03, (0xC92, 0x2)),
+ (0x1D471, (0x1157, 0x1)),
+ (0x1D576, (0x1245, 0x1)),
+ (0x1D493, (0x1179, 0x1)),
+ (0x0FF6A, (0x1012, 0x1)),
+ (0x0FE31, (0xEBB, 0x1)),
+ (0x0323A, (0x569, 0x3)),
+ (0x01D49, (0x0A3, 0x1)),
+ (0x1D7E9, (0x14B4, 0x1)),
+ (0x0FB6E, (0x9D7, 0x1)),
+ (0x0FC51, (0xB18, 0x2)),
+ (0x033ED, (0x94D, 0x3)),
+ (0x0FE15, (0xEB2, 0x1)),
+ (0x02F28, (0x381, 0x1)),
+ (0x1D6A4, (0x1373, 0x1)),
+ (0x1D4E2, (0x11BD, 0x1)),
+ (0x032CE, (0x650, 0x2)),
+ (0x02094, (0x162, 0x1)),
+ (0x1D6FC, (0x13C9, 0x1)),
+ (0x032F6, (0x67B, 0x1)),
+ (0x0FE9A, (0xF38, 0x1)),
+ (0x01DBE, (0x0E8, 0x1)),
+ (0x01DB7, (0x0E1, 0x1)),
+ (0x1D4BD, (0x1199, 0x1)),
+ (0x0FDA1, (0xDF5, 0x3)),
+ (0x1D6D7, (0x13A4, 0x1)),
+ (0x1D7BF, (0x148C, 0x1)),
+ (0x03316, (0x6DF, 0x6)),
+ (0x03391, (0x86C, 0x3)),
+ (0x1D744, (0x1411, 0x1)),
+ (0x1D41F, (0x1106, 0x1)),
+ (0x1EE84, (0x1566, 0x1)),
+ (0x0FFBE, (0x1066, 0x1)),
+ (0x03244, (0x587, 0x1)),
+ (0x1D58D, (0x125C, 0x1)),
+ (0x02FD1, (0x42A, 0x1)),
+ (0x0FF19, (0xFC1, 0x1)),
+ (0x1D5C5, (0x1294, 0x1)),
+ (0x1D663, (0x1332, 0x1)),
+ (0x1D723, (0x13F0, 0x1)),
+ (0x1F247, (0x1679, 0x3)),
+ (0x1F23B, (0x1663, 0x1)),
+ (0x0FCD6, (0xC33, 0x2)),
+ (0x01DB5, (0x0DF, 0x1)),
+ (0x02083, (0x152, 0x1)),
+ (0x024C9, (0x326, 0x1)),
+ (0x1D6CD, (0x139A, 0x1)),
+ (0x1D5A9, (0x1278, 0x1)),
+ (0x03307, (0x6A2, 0x6)),
+ (0x1D7DF, (0x14AA, 0x1)),
+ (0x1D692, (0x1361, 0x1)),
+ (0x1D509, (0x11E3, 0x1)),
+ (0x024AF, (0x2FE, 0x3)),
+ (0x1CCDE, (0x10CB, 0x1)),
+ (0x1EE93, (0x1574, 0x1)),
+ (0x0FD14, (0xCB4, 0x2)),
+ (0x0316C, (0x477, 0x1)),
+ (0x0FC42, (0xAFA, 0x2)),
+ (0x0FB70, (0x9D9, 0x1)),
+ (0x02F06, (0x35F, 0x1)),
+ (0x0FD8B, (0xDB9, 0x3)),
+ (0x03271, (0x5C0, 0x2)),
+ (0x03342, (0x791, 0x3)),
+ (0x03269, (0x5B5, 0x1)),
+ (0x1FBF1, (0x1682, 0x1)),
+ (0x032D6, (0x65B, 0x1)),
+ (0x0209B, (0x169, 0x1)),
+ (0x1D7B8, (0x1485, 0x1)),
+ (0x0FF56, (0xFFE, 0x1)),
+ (0x0FE60, (0xEEB, 0x1)),
+ (0x1D5E4, (0x12B3, 0x1)),
+ (0x1F233, (0x165B, 0x1)),
+ (0x0FF1D, (0xFC5, 0x1)),
+ (0x0FCF6, (0xC78, 0x2)),
+ (0x1D4DB, (0x11B6, 0x1)),
+ (0x02F67, (0x3C0, 0x1)),
+ (0x1D53B, (0x1210, 0x1)),
+ (0x0FBA4, (0xA0D, 0x2)),
+ (0x0336A, (0x80E, 0x3)),
+ (0x0FD1C, (0xCC4, 0x2)),
+ (0x1E061, (0x14FC, 0x1)),
+ (0x0FB95, (0x9FE, 0x1)),
+ (0x03257, (0x59A, 0x2)),
+ (0x1D560, (0x122F, 0x1)),
+ (0x032C5, (0x63A, 0x2)),
+ (0x1EE30, (0x1533, 0x1)),
+ (0x1D466, (0x114C, 0x1)),
+ (0x0FE9F, (0xF3D, 0x1)),
+ (0x03038, (0x431, 0x1)),
+ (0x032AE, (0x60F, 0x1)),
+ (0x1D7B0, (0x147D, 0x1)),
+ (0x1CCF0, (0x10DD, 0x1)),
+ (0x1D7E6, (0x14B1, 0x1)),
+ (0x0FCA0, (0xBC7, 0x2)),
+ (0x0336C, (0x814, 0x3)),
+ (0x0FD2B, (0xCE2, 0x2)),
+ (0x0FBAE, (0xA19, 0x1)),
+ (0x0FFB4, (0x105C, 0x1)),
+ (0x02F33, (0x38C, 0x1)),
+ (0x0FD3C, (0xD04, 0x2)),
+ (0x0FF31, (0xFD9, 0x1)),
+ (0x0332C, (0x736, 0x4)),
+ (0x1F12B, (0x15FD, 0x1)),
+ (0x033FE, (0x980, 0x3)),
+ (0x01D41, (0x09B, 0x1)),
+ (0x107B8, (0x10C0, 0x1)),
+ (0x1D62A, (0x12F9, 0x1)),
+ (0x1D631, (0x1300, 0x1)),
+ (0x1EEAC, (0x1586, 0x1)),
+ (0x02FB8, (0x411, 0x1)),
+ (0x1D4FB, (0x11D6, 0x1)),
+ (0x0FF76, (0x101E, 0x1)),
+ (0x0FC37, (0xAE4, 0x2)),
+ (0x0FC29, (0xAC8, 0x2)),
+ (0x1D6E6, (0x13B3, 0x1)),
+ (0x107A1, (0x10AA, 0x1)),
+ (0x0319D, (0x4A5, 0x1)),
+ (0x0FCAC, (0xBDF, 0x2)),
+ (0x03344, (0x798, 0x3)),
+ (0x0FE4C, (0xED7, 0x2)),
+ (0x0208B, (0x15A, 0x1)),
+ (0x107A9, (0x10B2, 0x1)),
+ (0x0FE96, (0xF34, 0x1)),
+ (0x0FC56, (0xB22, 0x2)),
+ (0x0FBFA, (0xA67, 0x3)),
+ (0x0FB85, (0x9EE, 0x1)),
+ (0x0FD89, (0xDB3, 0x3)),
+ (0x03295, (0x5F6, 0x1)),
+ (0x0FCA8, (0xBD7, 0x2)),
+ (0x002E0, (0x053, 0x1)),
+ (0x03350, (0x7C5, 0x3)),
+ (0x02147, (0x1B0, 0x1)),
+ (0x01D30, (0x08B, 0x1)),
+ (0x03387, (0x855, 0x2)),
+ (0x0317F, (0x48A, 0x1)),
+ (0x1F107, (0x15A4, 0x2)),
+ (0x1D555, (0x1224, 0x1)),
+ (0x1D6BE, (0x138B, 0x1)),
+ (0x0FEF5, (0xF93, 0x3)),
+ (0x03351, (0x7C8, 0x4)),
+ (0x1D4AB, (0x118A, 0x1)),
+ (0x02479, (0x25A, 0x3)),
+ (0x024CB, (0x328, 0x1)),
+ (0x0FF1F, (0xFC7, 0x1)),
+ (0x03212, (0x4E2, 0x4)),
+ (0x032C0, (0x630, 0x2)),
+ (0x1EE75, (0x155A, 0x1)),
+ (0x0A7F8, (0x98C, 0x1)),
+ (0x1F245, (0x1673, 0x3)),
+ (0x0FB57, (0x9C0, 0x1)),
+ (0x1F215, (0x163D, 0x1)),
+ (0x0FEA9, (0xF47, 0x1)),
+ (0x02484, (0x282, 0x4)),
+ (0x02FBF, (0x418, 0x1)),
+ (0x0FED5, (0xF73, 0x1)),
+ (0x1D4D6, (0x11B1, 0x1)),
+ (0x02F7A, (0x3D3, 0x1)),
+ (0x03242, (0x581, 0x3)),
+ (0x1D456, (0x113C, 0x1)),
+ (0x0FE14, (0xEB1, 0x1)),
+ (0x0FC59, (0xB28, 0x2)),
+ (0x0FCD7, (0xC35, 0x2)),
+ (0x0FE43, (0xECD, 0x1)),
+ (0x1D7D1, (0x149C, 0x1)),
+ (0x1D563, (0x1232, 0x1)),
+ (0x0FC4E, (0xB12, 0x2)),
+ (0x1F250, (0x167F, 0x1)),
+ (0x1D4F5, (0x11D0, 0x1)),
+ (0x0FBD5, (0xA21, 0x1)),
+ (0x1D661, (0x1330, 0x1)),
+ (0x03252, (0x590, 0x2)),
+ (0x0FECC, (0xF6A, 0x1)),
+ (0x0FF85, (0x102D, 0x1)),
+ (0x0FD51, (0xD0B, 0x3)),
+ (0x1D605, (0x12D4, 0x1)),
+ (0x0FBE5, (0xA32, 0x1)),
+ (0x1D4CC, (0x11A7, 0x1)),
+ (0x1F119, (0x15C7, 0x3)),
+ (0x1D638, (0x1307, 0x1)),
+ (0x0FDAF, (0xE1F, 0x3)),
+ (0x1D739, (0x1406, 0x1)),
+ (0x1F21A, (0x1642, 0x1)),
+ (0x0318E, (0x499, 0x1)),
+ (0x0316D, (0x478, 0x1)),
+ (0x03374, (0x82A, 0x3)),
+ (0x02469, (0x235, 0x2)),
+ (0x0FB29, (0x9B6, 0x1)),
+ (0x1EE01, (0x150A, 0x1)),
+ (0x0248E, (0x29E, 0x2)),
+ (0x1D623, (0x12F2, 0x1)),
+ (0x032D9, (0x65E, 0x1)),
+ (0x1D531, (0x1207, 0x1)),
+ (0x03146, (0x451, 0x1)),
+ (0x1E051, (0x14EC, 0x1)),
+ (0x1D48C, (0x1172, 0x1)),
+ (0x0FCF0, (0xC69, 0x2)),
+ (0x0FB80, (0x9E9, 0x1)),
+ (0x0FEB1, (0xF4F, 0x1)),
+ (0x02FD3, (0x42C, 0x1)),
+ (0x0FD77, (0xD7D, 0x3)),
+ (0x02482, (0x27A, 0x4)),
+ (0x03152, (0x45D, 0x1)),
+ (0x02176, (0x20C, 0x3)),
+ (0x024B8, (0x315, 0x1)),
+ (0x0322C, (0x53F, 0x3)),
+ (0x0FE56, (0xEE1, 0x1)),
+ (0x03397, (0x87C, 0x2)),
+ (0x02476, (0x251, 0x3)),
+ (0x10796, (0x109F, 0x1)),
+ (0x1D4D0, (0x11AB, 0x1)),
+ (0x107B3, (0x10BB, 0x1)),
+ (0x1D779, (0x1446, 0x1)),
+ (0x0FD7C, (0xD8C, 0x3)),
+ (0x02F22, (0x37B, 0x1)),
+ (0x0FC34, (0xADE, 0x2)),
+ (0x0FCB9, (0xBF9, 0x2)),
+ (0x1D676, (0x1345, 0x1)),
+ (0x1D408, (0x10EF, 0x1)),
+ (0x0FB74, (0x9DD, 0x1)),
+ (0x0332A, (0x72D, 0x3)),
+ (0x1D7B3, (0x1480, 0x1)),
+ (0x03202, (0x4AE, 0x3)),
+ (0x02230, (0x229, 0x3)),
+ (0x0FE65, (0xEF0, 0x1)),
+ (0x032DF, (0x664, 0x1)),
+ (0x03177, (0x482, 0x1)),
+ (0x0FD2C, (0xCE4, 0x2)),
+ (0x0FEED, (0xF8B, 0x1)),
+ (0x1F12A, (0x15FA, 0x3)),
+ (0x02F62, (0x3BB, 0x1)),
+ (0x02FA6, (0x3FF, 0x1)),
+ (0x0248C, (0x29A, 0x2)),
+ (0x0FF6B, (0x1013, 0x1)),
+ (0x0FEF1, (0xF8F, 0x1)),
+ (0x1D4B5, (0x1193, 0x1)),
+ (0x1D6E4, (0x13B1, 0x1)),
+ (0x03312, (0x6CD, 0x4)),
+ (0x1EE21, (0x1528, 0x1)),
+ (0x0FD18, (0xCBC, 0x2)),
+ (0x1D57A, (0x1249, 0x1)),
+ (0x0216C, (0x1FD, 0x1)),
+ (0x03131, (0x43C, 0x1)),
+ (0x03217, (0x4F6, 0x4)),
+ (0x03386, (0x853, 0x2)),
+ (0x1D711, (0x13DE, 0x1)),
+ (0x03200, (0x4A8, 0x3)),
+ (0x1D62C, (0x12FB, 0x1)),
+ (0x1D590, (0x125F, 0x1)),
+ (0x1D53C, (0x1211, 0x1)),
+ (0x032CB, (0x648, 0x3)),
+ (0x0FD29, (0xCDE, 0x2)),
+ (0x1EEA1, (0x157D, 0x1)),
+ (0x0FE4F, (0xEDB, 0x1)),
+ (0x0FB54, (0x9BD, 0x1)),
+ (0x0322A, (0x539, 0x3)),
+ (0x1F14A, (0x161D, 0x2)),
+ (0x02136, (0x1A2, 0x1)),
+ (0x0FF2B, (0xFD3, 0x1)),
+ (0x0FCFB, (0xC82, 0x2)),
+ (0x0FDB2, (0xE28, 0x3)),
+ (0x1EE36, (0x1538, 0x1)),
+ (0x0FD2E, (0xCE8, 0x2)),
+ (0x0FF46, (0xFEE, 0x1)),
+ (0x1CCF8, (0x10E5, 0x1)),
+ (0x1D60C, (0x12DB, 0x1)),
+ (0x033AB, (0x8AE, 0x3)),
+ (0x1D7BC, (0x1489, 0x1)),
+ (0x1D4C1, (0x119D, 0x1)),
+ (0x0FDBD, (0xE49, 0x3)),
+ (0x03331, (0x74C, 0x3)),
+ (0x1EE34, (0x1536, 0x1)),
+ (0x1D6CC, (0x1399, 0x1)),
+ (0x1D44F, (0x1136, 0x1)),
+ (0x0332E, (0x73F, 0x6)),
+ (0x0FF6E, (0x1016, 0x1)),
+ (0x01D78, (0x0C4, 0x1)),
+ (0x1D780, (0x144D, 0x1)),
+ (0x1D765, (0x1432, 0x1)),
+ (0x0FE71, (0xEF8, 0x2)),
+ (0x02496, (0x2B3, 0x3)),
+ (0x1D460, (0x1146, 0x1)),
+ (0x1D756, (0x1423, 0x1)),
+ (0x0FC5C, (0xB2E, 0x2)),
+ (0x0337F, (0x843, 0x4)),
+ (0x0FC2D, (0xAD0, 0x2)),
+ (0x024AA, (0x2EF, 0x3)),
+ (0x1D546, (0x1219, 0x1)),
+ (0x1D624, (0x12F3, 0x1)),
+ (0x1EEB9, (0x1593, 0x1)),
+ (0x01D63, (0x0BC, 0x1)),
+ (0x001CA, (0x032, 0x2)),
+ (0x03240, (0x57B, 0x3)),
+ (0x1D4E3, (0x11BE, 0x1)),
+ (0x1E062, (0x14FD, 0x1)),
+ (0x03225, (0x52A, 0x3)),
+ (0x0FE79, (0xF04, 0x2)),
+ (0x02F20, (0x379, 0x1)),
+ (0x0FCAD, (0xBE1, 0x2)),
+ (0x0FC85, (0xB8C, 0x2)),
+ (0x02FB9, (0x412, 0x1)),
+ (0x1D7D2, (0x149D, 0x1)),
+ (0x0332D, (0x73A, 0x5)),
+ (0x1D4E6, (0x11C1, 0x1)),
+ (0x024E2, (0x33F, 0x1)),
+ (0x1EEAF, (0x1589, 0x1)),
+ (0x032B0, (0x611, 0x1)),
+ (0x1D575, (0x1244, 0x1)),
+ (0x0FD6E, (0xD62, 0x3)),
+ (0x0FD71, (0xD6B, 0x3)),
+ (0x1D521, (0x11F7, 0x1)),
+ (0x0FF9D, (0x1045, 0x1)),
+ (0x1D671, (0x1340, 0x1)),
+ (0x0247B, (0x260, 0x3)),
+ (0x1D7D7, (0x14A2, 0x1)),
+ (0x03174, (0x47F, 0x1)),
+ (0x1D7A8, (0x1475, 0x1)),
+ (0x1F16C, (0x162E, 0x2)),
+ (0x0FB14, (0x9A5, 0x2)),
+ (0x1D5D3, (0x12A2, 0x1)),
+ (0x1F123, (0x15E5, 0x3)),
+ (0x0FBAD, (0xA18, 0x1)),
+ (0x03308, (0x6A8, 0x4)),
+ (0x03164, (0x46F, 0x1)),
+ (0x02033, (0x128, 0x2)),
+ (0x1D644, (0x1313, 0x1)),
+ (0x0FCD8, (0xC37, 0x2)),
+ (0x0FC22, (0xABA, 0x2)),
+ (0x0215A, (0x1D2, 0x3)),
+ (0x1D64B, (0x131A, 0x1)),
+ (0x0FBEF, (0xA46, 0x3)),
+ (0x01DBF, (0x0E9, 0x1)),
+ (0x033A6, (0x89F, 0x3)),
+ (0x0FD74, (0xD74, 0x3)),
+ (0x1D533, (0x1209, 0x1)),
+ (0x01DA4, (0x0CE, 0x1)),
+ (0x1D40A, (0x10F1, 0x1)),
+ (0x0FEA0, (0xF3E, 0x1)),
+ (0x01D61, (0x0BA, 0x1)),
+ (0x1E03A, (0x14D5, 0x1)),
+ (0x0FCB5, (0xBF1, 0x2)),
+ (0x1D4D7, (0x11B2, 0x1)),
+ (0x03145, (0x450, 0x1)),
+ (0x0FC98, (0xBB3, 0x3)),
+ (0x1D539, (0x120F, 0x1)),
+ (0x1EE72, (0x1558, 0x1)),
+ (0x001F2, (0x03A, 0x2)),
+ (0x1D51E, (0x11F4, 0x1)),
+ (0x024A0, (0x2D1, 0x3)),
+ (0x0FB56, (0x9BF, 0x1)),
+ (0x024BD, (0x31A, 0x1)),
+ (0x0FFB7, (0x105F, 0x1)),
+ (0x1D77D, (0x144A, 0x1)),
+ (0x0217E, (0x21D, 0x1)),
+ (0x1D43E, (0x1125, 0x1)),
+ (0x033D3, (0x90E, 0x2)),
+ (0x0FE7D, (0xF0C, 0x2)),
+ (0x000AA, (0x003, 0x1)),
+ (0x0309B, (0x434, 0x2)),
+ (0x01D4A, (0x0A4, 0x1)),
+ (0x1EE52, (0x1544, 0x1)),
+ (0x032A6, (0x607, 0x1)),
+ (0x1EE7C, (0x1560, 0x1)),
+ (0x0332F, (0x745, 0x4)),
+ (0x01D46, (0x0A0, 0x1)),
+ (0x1D792, (0x145F, 0x1)),
+ (0x1D593, (0x1262, 0x1)),
+ (0x032BB, (0x626, 0x2)),
+ (0x03343, (0x794, 0x4)),
+ (0x02FD4, (0x42D, 0x1)),
+ (0x0FCD2, (0xC2B, 0x2)),
+ (0x1D66B, (0x133A, 0x1)),
+ (0x107AE, (0x10B7, 0x1)),
+ (0x0FC3C, (0xAEE, 0x2)),
+ (0x1D656, (0x1325, 0x1)),
+ (0x02464, (0x230, 0x1)),
+ (0x02105, (0x176, 0x3)),
+ (0x0FB5C, (0x9C5, 0x1)),
+ (0x0FE47, (0xECF, 0x1)),
+ (0x0329A, (0x5FB, 0x1)),
+ (0x1EE42, (0x153C, 0x1)),
+ (0x01D3D, (0x097, 0x1)),
+ (0x033D8, (0x91A, 0x4)),
+ (0x1D666, (0x1335, 0x1)),
+ (0x03358, (0x7E2, 0x2)),
+ (0x0FB6C, (0x9D5, 0x1)),
+ (0x1D5A8, (0x1277, 0x1)),
+ (0x02F7E, (0x3D7, 0x1)),
+ (0x0FF3D, (0xFE5, 0x1)),
+ (0x033FD, (0x97D, 0x3)),
+ (0x0FD70, (0xD68, 0x3)),
+ (0x032A9, (0x60A, 0x1)),
+ (0x02F2B, (0x384, 0x1)),
+ (0x1D48B, (0x1171, 0x1)),
+ (0x02081, (0x150, 0x1)),
+ (0x0FE9D, (0xF3B, 0x1)),
+ (0x00F79, (0x084, 0x3)),
+ (0x0329E, (0x5FF, 0x1)),
+ (0x0247F, (0x26E, 0x4)),
+ (0x01D52, (0x0AB, 0x1)),
+ (0x02F5D, (0x3B6, 0x1)),
+ (0x02133, (0x19F, 0x1)),
+ (0x0FEAB, (0xF49, 0x1)),
+ (0x1D463, (0x1149, 0x1)),
+ (0x0FBE7, (0xA34, 0x1)),
+ (0x000BD, (0x012, 0x3)),
+ (0x0329C, (0x5FD, 0x1)),
+ (0x01D5E, (0x0B7, 0x1)),
+ (0x0FC3A, (0xAEA, 0x2)),
+ (0x002E3, (0x056, 0x1)),
+ (0x1D675, (0x1344, 0x1)),
+ (0x03354, (0x7D2, 0x5)),
+ (0x1D5E3, (0x12B2, 0x1)),
+ (0x0FE8B, (0xF27, 0x2)),
+ (0x0FF77, (0x101F, 0x1)),
+ (0x032B7, (0x61E, 0x2)),
+ (0x0FD65, (0xD47, 0x3)),
+ (0x03203, (0x4B1, 0x3)),
+ (0x1D54B, (0x121B, 0x1)),
+ (0x024CD, (0x32A, 0x1)),
+ (0x002DA, (0x04B, 0x2)),
+ (0x1D62B, (0x12FA, 0x1)),
+ (0x1EE82, (0x1564, 0x1)),
+ (0x1E04C, (0x14E7, 0x1)),
+ (0x0248B, (0x298, 0x2)),
+ (0x0FB62, (0x9CB, 0x1)),
+ (0x1F212, (0x1639, 0x1)),
+ (0x1D7FC, (0x14C7, 0x1)),
+ (0x0FFA2, (0x104A, 0x1)),
+ (0x0FC96, (0xBAE, 0x2)),
+ (0x0FCED, (0xC63, 0x2)),
+ (0x0FBA9, (0xA14, 0x1)),
+ (0x1D5A2, (0x1271, 0x1)),
+ (0x0FF9E, (0x1046, 0x1)),
+ (0x0FB5A, (0x9C3, 0x1)),
+ (0x024A4, (0x2DD, 0x3)),
+ (0x1D4B2, (0x1190, 0x1)),
+ (0x1EE11, (0x1519, 0x1)),
+ (0x0FCC8, (0xC17, 0x2)),
+ (0x03250, (0x58B, 0x3)),
+ (0x1D421, (0x1108, 0x1)),
+ (0x1D7E7, (0x14B2, 0x1)),
+ (0x033F3, (0x95F, 0x3)),
+ (0x107AC, (0x10B5, 0x1)),
+ (0x033A9, (0x8A9, 0x2)),
+ (0x1EE9B, (0x157C, 0x1)),
+ (0x02F77, (0x3D0, 0x1)),
+ (0x0FF20, (0xFC8, 0x1)),
+ (0x02089, (0x158, 0x1)),
+ (0x0FE5B, (0xEE6, 0x1)),
+ (0x0FCA3, (0xBCD, 0x2)),
+ (0x1D6B7, (0x1384, 0x1)),
+ (0x0FE76, (0xEFE, 0x2)),
+ (0x0FE59, (0xEE4, 0x1)),
+ (0x1D6D4, (0x13A1, 0x1)),
+ (0x02F6B, (0x3C4, 0x1)),
+ (0x1EE1F, (0x1527, 0x1)),
+ (0x1D74E, (0x141B, 0x1)),
+ (0x0FFD4, (0x1075, 0x1)),
+ (0x001C5, (0x026, 0x3)),
+ (0x01D2D, (0x089, 0x1)),
+ (0x02F35, (0x38E, 0x1)),
+ (0x1F104, (0x159E, 0x2)),
+ (0x0FBF4, (0xA55, 0x3)),
+ (0x1D411, (0x10F8, 0x1)),
+ (0x1D42E, (0x1115, 0x1)),
+ (0x01FEE, (0x10C, 0x3)),
+ (0x0FC54, (0xB1E, 0x2)),
+ (0x1F22F, (0x1657, 0x1)),
+ (0x1D5E2, (0x12B1, 0x1)),
+ (0x1D60F, (0x12DE, 0x1)),
+ (0x0FC6F, (0xB60, 0x2)),
+ (0x1D476, (0x115C, 0x1)),
+ (0x033CA, (0x8FB, 0x2)),
+ (0x02FCE, (0x427, 0x1)),
+ (0x1D59A, (0x1269, 0x1)),
+ (0x02175, (0x20A, 0x2)),
+ (0x1D6D0, (0x139D, 0x1)),
+ (0x02150, (0x1B3, 0x3)),
+ (0x1D7AE, (0x147B, 0x1)),
+ (0x1D6CB, (0x1398, 0x1)),
+ (0x0FC02, (0xA77, 0x3)),
+ (0x0FFC5, (0x106A, 0x1)),
+ (0x1D76A, (0x1437, 0x1)),
+ (0x0FE69, (0xEF3, 0x1)),
+ (0x0326C, (0x5B8, 0x1)),
+ (0x0FE89, (0xF23, 0x2)),
+ (0x02FBB, (0x414, 0x1)),
+ (0x1D514, (0x11EC, 0x1)),
+ (0x03036, (0x430, 0x1)),
+ (0x0FD97, (0xDD7, 0x3)),
+ (0x0FC11, (0xA98, 0x2)),
+ (0x02F44, (0x39D, 0x1)),
+ (0x0FBD3, (0xA1F, 0x1)),
+ (0x0FFCD, (0x1070, 0x1)),
+ (0x0FD88, (0xDB0, 0x3)),
+ (0x1D507, (0x11E1, 0x1)),
+ (0x0FF02, (0xFAA, 0x1)),
+ (0x1EEB3, (0x158D, 0x1)),
+ (0x1D7D6, (0x14A1, 0x1)),
+ (0x032BD, (0x62A, 0x2)),
+ (0x1D603, (0x12D2, 0x1)),
+ (0x0FC4C, (0xB0E, 0x2)),
+ (0x0FCC5, (0xC11, 0x2)),
+ (0x02F8E, (0x3E7, 0x1)),
+ (0x0FFAD, (0x1055, 0x1)),
+ (0x0FD68, (0xD50, 0x3)),
+ (0x1D435, (0x111C, 0x1)),
+ (0x0FE4E, (0xEDA, 0x1)),
+ (0x0318D, (0x498, 0x1)),
+ (0x1D75F, (0x142C, 0x1)),
+ (0x032C9, (0x642, 0x3)),
+ (0x0313A, (0x445, 0x1)),
+ (0x1D7A4, (0x1471, 0x1)),
+ (0x1F117, (0x15C1, 0x3)),
+ (0x033C7, (0x8F4, 0x3)),
+ (0x1D6E5, (0x13B2, 0x1)),
+ (0x03207, (0x4BD, 0x3)),
+ (0x1D614, (0x12E3, 0x1)),
+ (0x1D571, (0x1240, 0x1)),
+ (0x1D6F7, (0x13C4, 0x1)),
+ (0x1D52F, (0x1205, 0x1)),
+ (0x032FE, (0x683, 0x1)),
+ (0x0FDC6, (0xE64, 0x3)),
+ (0x1EE29, (0x152C, 0x1)),
+ (0x1D5EA, (0x12B9, 0x1)),
+ (0x002DB, (0x04D, 0x2)),
+ (0x0FCCB, (0xC1D, 0x2)),
+ (0x02137, (0x1A3, 0x1)),
+ (0x0FCA6, (0xBD3, 0x2)),
+ (0x02166, (0x1EE, 0x3)),
+ (0x033BC, (0x8DA, 0x2)),
+ (0x0FBD9, (0xA25, 0x1)),
+ (0x02FA9, (0x402, 0x1)),
+ (0x03206, (0x4BA, 0x3)),
+ (0x0FBE2, (0xA2F, 0x1)),
+ (0x1CCED, (0x10DA, 0x1)),
+ (0x0FCD4, (0xC2F, 0x2)),
+ (0x1EEA9, (0x1584, 0x1)),
+ (0x01D6A, (0x0C3, 0x1)),
+ (0x1E05E, (0x14F9, 0x1)),
+ (0x1D64D, (0x131C, 0x1)),
+ (0x1D504, (0x11DF, 0x1)),
+ (0x0FBAC, (0xA17, 0x1)),
+ (0x01D35, (0x090, 0x1)),
+ (0x0FC25, (0xAC0, 0x2)),
+ (0x002B5, (0x043, 0x1)),
+ (0x0FC8F, (0xBA0, 0x2)),
+ (0x1D79A, (0x1467, 0x1)),
+ (0x003D4, (0x064, 0x2)),
+ (0x03392, (0x86F, 0x3)),
+ (0x02486, (0x28A, 0x4)),
+ (0x02F1F, (0x378, 0x1)),
+ (0x03313, (0x6D1, 0x6)),
+ (0x1D4C7, (0x11A2, 0x1)),
+ (0x0325E, (0x5A8, 0x2)),
+ (0x03238, (0x563, 0x3)),
+ (0x0FD32, (0xCF0, 0x2)),
+ (0x0FF53, (0xFFB, 0x1)),
+ (0x0FE66, (0xEF1, 0x1)),
+ (0x0AB5C, (0x98E, 0x1)),
+ (0x024D7, (0x334, 0x1)),
+ (0x10783, (0x108D, 0x1)),
+ (0x024B2, (0x307, 0x3)),
+ (0x02487, (0x28E, 0x4)),
+ (0x0FF6F, (0x1017, 0x1)),
+ (0x0FC63, (0xB41, 0x3)),
+ (0x0FD6D, (0xD5F, 0x3)),
+ (0x02110, (0x185, 0x1)),
+ (0x0FBA8, (0xA13, 0x1)),
+ (0x1F251, (0x1680, 0x1)),
+ (0x0FBED, (0xA40, 0x3)),
+ (0x033BE, (0x8DE, 0x2)),
+ (0x0FB05, (0x99F, 0x2)),
+ (0x0FC99, (0xBB6, 0x3)),
+ (0x1EE15, (0x151D, 0x1)),
+ (0x1EE13, (0x151B, 0x1)),
+ (0x024A1, (0x2D4, 0x3)),
+ (0x033DE, (0x929, 0x3)),
+ (0x1D5B9, (0x1288, 0x1)),
+ (0x1D690, (0x135F, 0x1)),
+ (0x01D2C, (0x088, 0x1)),
+ (0x0FB90, (0x9F9, 0x1)),
+ (0x1D42D, (0x1114, 0x1)),
+ (0x024C2, (0x31F, 0x1)),
+ (0x1D4FF, (0x11DA, 0x1)),
+ (0x01DBC, (0x0E6, 0x1)),
+ (0x0FCB7, (0xBF5, 0x2)),
+ (0x0FC67, (0xB4D, 0x3)),
+ (0x000B3, (0x007, 0x1)),
+ (0x0FC2F, (0xAD4, 0x2)),
+ (0x03345, (0x79B, 0x3)),
+ (0x01FFD, (0x10F, 0x2)),
+ (0x1D7EC, (0x14B7, 0x1)),
+ (0x033A7, (0x8A2, 0x3)),
+ (0x1D51F, (0x11F5, 0x1)),
+ (0x032CC, (0x64B, 0x2)),
+ (0x02130, (0x19D, 0x1)),
+ (0x0FF5F, (0x1007, 0x1)),
+ (0x02174, (0x209, 0x1)),
+ (0x0337E, (0x841, 0x2)),
+ (0x1D523, (0x11F9, 0x1)),
+ (0x0207C, (0x14B, 0x1)),
+ (0x033D5, (0x912, 0x3)),
+ (0x1D65C, (0x132B, 0x1)),
+ (0x024A9, (0x2EC, 0x3)),
+ (0x0FD9F, (0xDEF, 0x3)),
+ (0x1D762, (0x142F, 0x1)),
+ (0x03154, (0x45F, 0x1)),
+ (0x0215F, (0x1E1, 0x2)),
+ (0x0FF4A, (0xFF2, 0x1)),
+ (0x1D477, (0x115D, 0x1)),
+ (0x1D400, (0x10E7, 0x1)),
+ (0x1D525, (0x11FB, 0x1)),
+ (0x03255, (0x596, 0x2)),
+ (0x1F111, (0x15AF, 0x3)),
+ (0x0FF8E, (0x1036, 0x1)),
+ (0x1D709, (0x13D6, 0x1)),
+ (0x1E06A, (0x1505, 0x1)),
+ (0x1D4E9, (0x11C4, 0x1)),
+ (0x1CCE9, (0x10D6, 0x1)),
+ (0x003F9, (0x06D, 0x1)),
+ (0x0FE3A, (0xEC4, 0x1)),
+ (0x03259, (0x59E, 0x2)),
+ (0x1D6A5, (0x1374, 0x1)),
+ (0x02F02, (0x35B, 0x1)),
+ (0x0FD01, (0xC8E, 0x2)),
+ (0x0325B, (0x5A2, 0x2)),
+ (0x02008, (0x11B, 0x1)),
+ (0x0FD8F, (0xDC5, 0x3)),
+ (0x1D7DC, (0x14A7, 0x1)),
+ (0x1D447, (0x112E, 0x1)),
+ (0x02086, (0x155, 0x1)),
+ (0x1D492, (0x1178, 0x1)),
+ (0x1D70B, (0x13D8, 0x1)),
+ (0x1D5FC, (0x12CB, 0x1)),
+ (0x0FE81, (0xF13, 0x2)),
+ (0x0FB86, (0x9EF, 0x1)),
+ (0x0FD30, (0xCEC, 0x2)),
+ (0x02F3A, (0x393, 0x1)),
+ (0x1D5BB, (0x128A, 0x1)),
+ (0x0FC9D, (0xBC1, 0x2)),
+ (0x0FC3E, (0xAF2, 0x2)),
+ (0x0FE7B, (0xF08, 0x2)),
+ (0x0FFAF, (0x1057, 0x1)),
+ (0x0FF57, (0xFFF, 0x1)),
+ (0x0FBFE, (0xA6F, 0x1)),
+ (0x1D59F, (0x126E, 0x1)),
+ (0x1D646, (0x1315, 0x1)),
+ (0x0FBF0, (0xA49, 0x3)),
+ (0x0315A, (0x465, 0x1)),
+ (0x0FEA6, (0xF44, 0x1)),
+ (0x0FCE6, (0xC55, 0x2)),
+ (0x1D554, (0x1223, 0x1)),
+ (0x1D791, (0x145E, 0x1)),
+ (0x02F1D, (0x376, 0x1)),
+ (0x03363, (0x7F9, 0x3)),
+ (0x0FC60, (0xB38, 0x3)),
+ (0x03268, (0x5B4, 0x1)),
+ (0x1D695, (0x1364, 0x1)),
+ (0x0FF29, (0xFD1, 0x1)),
+ (0x0FE57, (0xEE2, 0x1)),
+ (0x02F47, (0x3A0, 0x1)),
+ (0x0210F, (0x184, 0x1)),
+ (0x01D55, (0x0AE, 0x1)),
+ (0x1D4EF, (0x11CA, 0x1)),
+ (0x033B2, (0x8C6, 0x2)),
+ (0x024D2, (0x32F, 0x1)),
+ (0x1E049, (0x14E4, 0x1)),
+ (0x02F32, (0x38B, 0x1)),
+ (0x1CCF4, (0x10E1, 0x1)),
+ (0x1EE85, (0x1567, 0x1)),
+ (0x02F4D, (0x3A6, 0x1)),
+ (0x0FF84, (0x102C, 0x1)),
+ (0x1F114, (0x15B8, 0x3)),
+ (0x0FD7F, (0xD95, 0x3)),
+ (0x0314D, (0x458, 0x1)),
+ (0x01D62, (0x0BB, 0x1)),
+ (0x1D697, (0x1366, 0x1)),
+ (0x1F102, (0x159A, 0x2)),
+ (0x0333F, (0x787, 0x2)),
+ (0x02138, (0x1A4, 0x1)),
+ (0x1D54A, (0x121A, 0x1)),
+ (0x0FB7F, (0x9E8, 0x1)),
+ (0x0FB06, (0x9A1, 0x2)),
+ (0x0FD24, (0xCD4, 0x2)),
+ (0x1D66A, (0x1339, 0x1)),
+ (0x0FC53, (0xB1C, 0x2)),
+ (0x1D45E, (0x1144, 0x1)),
+ (0x1D76E, (0x143B, 0x1)),
+ (0x03378, (0x833, 0x3)),
+ (0x1D61F, (0x12EE, 0x1)),
+ (0x1D7A6, (0x1473, 0x1)),
+ (0x1D7C7, (0x1494, 0x1)),
+ (0x0FF2F, (0xFD7, 0x1)),
+ (0x0FC1D, (0xAB0, 0x2)),
+ (0x1D65B, (0x132A, 0x1)),
+ (0x0213B, (0x1A6, 0x3)),
+ (0x1D6BA, (0x1387, 0x1)),
+ (0x0333C, (0x77A, 0x4)),
+ (0x002B4, (0x042, 0x1)),
+ (0x0FD26, (0xCD8, 0x2)),
+ (0x0FF25, (0xFCD, 0x1)),
+ (0x0217A, (0x216, 0x2)),
+ (0x0FC13, (0xA9C, 0x2)),
+ (0x1D54E, (0x121E, 0x1)),
+ (0x00678, (0x076, 0x2)),
+ (0x1D7E8, (0x14B3, 0x1)),
+ (0x1D6D1, (0x139E, 0x1)),
+ (0x03274, (0x5C6, 0x2)),
+ (0x032E3, (0x668, 0x1)),
+ (0x1D6FF, (0x13CC, 0x1)),
+ (0x1D58A, (0x1259, 0x1)),
+ (0x0FDBB, (0xE43, 0x3)),
+ (0x1E04F, (0x14EA, 0x1)),
+ (0x0FD09, (0xC9E, 0x2)),
+ (0x024DD, (0x33A, 0x1)),
+ (0x0FCE4, (0xC51, 0x2)),
+ (0x1D47C, (0x1162, 0x1)),
+ (0x0AB5F, (0x991, 0x1)),
+ (0x0FF98, (0x1040, 0x1)),
+ (0x0FBF7, (0xA5E, 0x3)),
+ (0x03187, (0x492, 0x1)),
+ (0x0FF37, (0xFDF, 0x1)),
+ (0x02FA1, (0x3FA, 0x1)),
+ (0x0FB9E, (0xA07, 0x1)),
+ (0x03237, (0x560, 0x3)),
+ (0x0FCE7, (0xC57, 0x2)),
+ (0x1CCDC, (0x10C9, 0x1)),
+ (0x1D755, (0x1422, 0x1)),
+ (0x02011, (0x11E, 0x1)),
+ (0x1EEB7, (0x1591, 0x1)),
+ (0x0FC46, (0xB02, 0x2)),
+ (0x033DB, (0x923, 0x2)),
+ (0x0334B, (0x7B2, 0x3)),
+ (0x0339A, (0x882, 0x2)),
+ (0x0FE83, (0xF17, 0x2)),
+ (0x0FEC8, (0xF66, 0x1)),
+ (0x0FFDA, (0x1079, 0x1)),
+ (0x01D38, (0x093, 0x1)),
+ (0x0FBE8, (0xA35, 0x1)),
+ (0x1D55C, (0x122B, 0x1)),
+ (0x024A2, (0x2D7, 0x3)),
+ (0x1F131, (0x1604, 0x1)),
+ (0x0FFE2, (0x107E, 0x1)),
+ (0x0303A, (0x433, 0x1)),
+ (0x0FD35, (0xCF6, 0x2)),
+ (0x03301, (0x68B, 0x4)),
+ (0x1FBF0, (0x1681, 0x1)),
+ (0x002DC, (0x04F, 0x2)),
+ (0x0FE85, (0xF1B, 0x2)),
+ (0x01D3A, (0x095, 0x1)),
+ (0x0FC17, (0xAA4, 0x2)),
+ (0x1FBF7, (0x1688, 0x1)),
+ (0x0FB66, (0x9CF, 0x1)),
+ (0x1EEA3, (0x157F, 0x1)),
+ (0x0FD04, (0xC94, 0x2)),
+ (0x0323E, (0x575, 0x3)),
+ (0x0328D, (0x5EE, 0x1)),
+ (0x1D7BD, (0x148A, 0x1)),
+ (0x1D6C0, (0x138D, 0x1)),
+ (0x03328, (0x728, 0x2)),
+ (0x1D602, (0x12D1, 0x1)),
+ (0x1D607, (0x12D6, 0x1)),
+ (0x1F125, (0x15EB, 0x3)),
+ (0x02468, (0x234, 0x1)),
+ (0x0FE11, (0xEAE, 0x1)),
+ (0x02098, (0x166, 0x1)),
+ (0x0FD98, (0xDDA, 0x3)),
+ (0x0FC6E, (0xB5E, 0x2)),
+ (0x1CCF1, (0x10DE, 0x1)),
+ (0x03310, (0x6C5, 0x4)),
+ (0x1D530, (0x1206, 0x1)),
+ (0x02179, (0x215, 0x1)),
+ (0x00F77, (0x081, 0x3)),
+ (0x1D7B7, (0x1484, 0x1)),
+ (0x033EB, (0x947, 0x3)),
+ (0x0326D, (0x5B9, 0x1)),
+ (0x03372, (0x826, 0x2)),
+ (0x0FBD4, (0xA20, 0x1)),
+ (0x1D550, (0x1220, 0x1)),
+ (0x03144, (0x44F, 0x1)),
+ (0x002B8, (0x046, 0x1)),
+ (0x1D725, (0x13F2, 0x1)),
+ (0x1EE32, (0x1535, 0x1)),
+ (0x02131, (0x19E, 0x1)),
+ (0x033C5, (0x8EE, 0x2)),
+ (0x1CCE5, (0x10D2, 0x1)),
+ (0x0FE51, (0xEDD, 0x1)),
+ (0x0334E, (0x7BE, 0x4)),
+ (0x10785, (0x108F, 0x1)),
+ (0x1D427, (0x110E, 0x1)),
+ (0x1D6F4, (0x13C1, 0x1)),
+ (0x02075, (0x144, 0x1)),
+ (0x1D660, (0x132F, 0x1)),
+ (0x0FF5E, (0x1006, 0x1)),
+ (0x0FC0B, (0xA8C, 0x2)),
+ (0x0FD37, (0xCFA, 0x2)),
+ (0x02F03, (0x35C, 0x1)),
+ (0x024B7, (0x314, 0x1)),
+ (0x02F43, (0x39C, 0x1)),
+ (0x0FD1D, (0xCC6, 0x2)),
+ (0x03142, (0x44D, 0x1)),
+ (0x0247D, (0x266, 0x4)),
+ (0x0FF3E, (0xFE6, 0x1)),
+ (0x1D776, (0x1443, 0x1)),
+ (0x01D9F, (0x0C9, 0x1)),
+ (0x1EE16, (0x151E, 0x1)),
+ (0x1D6BD, (0x138A, 0x1)),
+ (0x02F46, (0x39F, 0x1)),
+ (0x0FF7A, (0x1022, 0x1)),
+ (0x0FEBC, (0xF5A, 0x1)),
+ (0x0FF59, (0x1001, 0x1)),
+ (0x1D665, (0x1334, 0x1)),
+ (0x1F12C, (0x15FE, 0x1)),
+ (0x02F59, (0x3B2, 0x1)),
+ (0x1D7B9, (0x1486, 0x1)),
+ (0x0321B, (0x506, 0x4)),
+ (0x0FFD2, (0x1073, 0x1)),
+ (0x02F2A, (0x383, 0x1)),
+ (0x002E1, (0x054, 0x1)),
+ (0x0FC68, (0xB50, 0x3)),
+ (0x1F128, (0x15F4, 0x3)),
+ (0x02003, (0x116, 0x1)),
+ (0x0FEC4, (0xF62, 0x1)),
+ (0x0FD75, (0xD77, 0x3)),
+ (0x02F12, (0x36B, 0x1)),
+ (0x1D6B9, (0x1386, 0x1)),
+ (0x0FD17, (0xCBA, 0x2)),
+ (0x0FDB1, (0xE25, 0x3)),
+ (0x0330D, (0x6B9, 0x4)),
+ (0x02F9D, (0x3F6, 0x1)),
+ (0x0FF43, (0xFEB, 0x1)),
+ (0x032B4, (0x618, 0x2)),
+ (0x1D72D, (0x13FA, 0x1)),
+ (0x1D669, (0x1338, 0x1)),
+ (0x0FE87, (0xF1F, 0x2)),
+ (0x1EE92, (0x1573, 0x1)),
+ (0x000A0, (0x000, 0x1)),
+ (0x1F140, (0x1613, 0x1)),
+ (0x1D685, (0x1354, 0x1)),
+ (0x02087, (0x156, 0x1)),
+ (0x1D6E9, (0x13B6, 0x1)),
+ (0x1D75D, (0x142A, 0x1)),
+ (0x02F40, (0x399, 0x1)),
+ (0x0FD5B, (0xD29, 0x3)),
+ (0x0FCBC, (0xBFF, 0x2)),
+ (0x02097, (0x165, 0x1)),
+ (0x033F6, (0x968, 0x3)),
+ (0x1D794, (0x1461, 0x1)),
+ (0x1D44D, (0x1134, 0x1)),
+ (0x1D6EF, (0x13BC, 0x1)),
+ (0x0FE70, (0xEF6, 0x2)),
+ (0x0FCFE, (0xC88, 0x2)),
+ (0x1D448, (0x112F, 0x1)),
+ (0x0FC92, (0xBA6, 0x2)),
+ (0x1D40B, (0x10F2, 0x1)),
+ (0x02161, (0x1E4, 0x2)),
+ (0x02047, (0x136, 0x2)),
+ (0x1D7F6, (0x14C1, 0x1)),
+ (0x1D691, (0x1360, 0x1)),
+ (0x1F11E, (0x15D6, 0x3)),
+ (0x0FD55, (0xD17, 0x3)),
+ (0x0FEE4, (0xF82, 0x1)),
+ (0x1D69A, (0x1369, 0x1)),
+ (0x032D2, (0x657, 0x1)),
+ (0x0FFEC, (0x1088, 0x1)),
+ (0x0FF1B, (0xFC3, 0x1)),
+ (0x03266, (0x5B2, 0x1)),
+ (0x1E056, (0x14F1, 0x1)),
+ (0x0FE10, (0xEAD, 0x1)),
+ (0x03388, (0x857, 0x3)),
+ (0x1EE97, (0x1578, 0x1)),
+ (0x03173, (0x47E, 0x1)),
+ (0x1D583, (0x1252, 0x1)),
+ (0x1FBF9, (0x168A, 0x1)),
+ (0x0FE4D, (0xED9, 0x1)),
+ (0x024DE, (0x33B, 0x1)),
+ (0x1D543, (0x1217, 0x1)),
+ (0x1D57D, (0x124C, 0x1)),
+ (0x0FF7F, (0x1027, 0x1)),
+ (0x1F240, (0x1664, 0x3)),
+ (0x1D534, (0x120A, 0x1)),
+ (0x0FD23, (0xCD2, 0x2)),
+ (0x0FF45, (0xFED, 0x1)),
+ (0x033AD, (0x8B4, 0x3)),
+ (0x1D618, (0x12E7, 0x1)),
+ (0x0FC6D, (0xB5C, 0x2)),
+ (0x000A8, (0x001, 0x2)),
+ (0x0FB77, (0x9E0, 0x1)),
+ (0x0FEFA, (0xFA2, 0x3)),
+ (0x1EE5D, (0x1549, 0x1)),
+ (0x032EA, (0x66F, 0x1)),
+ (0x02F23, (0x37C, 0x1)),
+ (0x01DAB, (0x0D5, 0x1)),
+ (0x00EDC, (0x07C, 0x2)),
+ (0x0FE97, (0xF35, 0x1)),
+ (0x0FCB4, (0xBEF, 0x2)),
+ (0x02FA5, (0x3FE, 0x1)),
+ (0x1D438, (0x111F, 0x1)),
+ (0x03195, (0x49D, 0x1)),
+ (0x1D727, (0x13F4, 0x1)),
+ (0x1D662, (0x1331, 0x1)),
+ (0x1D70E, (0x13DB, 0x1)),
+ (0x1D417, (0x10FE, 0x1)),
+ (0x1D436, (0x111D, 0x1)),
+ (0x0FC1A, (0xAAA, 0x2)),
+ (0x1D7DB, (0x14A6, 0x1)),
+ (0x1D6FB, (0x13C8, 0x1)),
+ (0x0FEF6, (0xF96, 0x3)),
+ (0x03193, (0x49B, 0x1)),
+ (0x10787, (0x1090, 0x1)),
+ (0x1E053, (0x14EE, 0x1)),
+ (0x1D651, (0x1320, 0x1)),
+ (0x1E046, (0x14E1, 0x1)),
+ (0x0FE3F, (0xEC9, 0x1)),
+ (0x0FF49, (0xFF1, 0x1)),
+ (0x02026, (0x124, 0x3)),
+ (0x033E7, (0x93D, 0x2)),
+ (0x0211C, (0x18F, 0x1)),
+ (0x02F58, (0x3B1, 0x1)),
+ (0x1D5FF, (0x12CE, 0x1)),
+ (0x0FE9B, (0xF39, 0x1)),
+ (0x0FD2F, (0xCEA, 0x2)),
+ (0x0FF09, (0xFB1, 0x1)),
+ (0x1D61A, (0x12E9, 0x1)),
+ (0x1D7AB, (0x1478, 0x1)),
+ (0x1D5A4, (0x1273, 0x1)),
+ (0x0328B, (0x5EC, 0x1)),
+ (0x1D4C3, (0x119F, 0x1)),
+ (0x1CCE6, (0x10D3, 0x1)),
+ (0x0FF0E, (0xFB6, 0x1)),
+ (0x00677, (0x074, 0x2)),
+ (0x02F00, (0x359, 0x1)),
+ (0x0248D, (0x29C, 0x2)),
+ (0x0FD27, (0xCDA, 0x2)),
+ (0x01DB6, (0x0E0, 0x1)),
+ (0x0326A, (0x5B6, 0x1)),
+ (0x1D566, (0x1235, 0x1)),
+ (0x024C7, (0x324, 0x1)),
+ (0x032FF, (0x684, 0x2)),
+ (0x10797, (0x10A0, 0x1)),
+ (0x024A5, (0x2E0, 0x3)),
+ (0x0FE30, (0xEB9, 0x2)),
+ (0x1D437, (0x111E, 0x1)),
+ (0x0FF0F, (0xFB7, 0x1)),
+ (0x0FC58, (0xB26, 0x2)),
+ (0x1D7A7, (0x1474, 0x1)),
+ (0x0215C, (0x1D8, 0x3)),
+ (0x0FDA3, (0xDFB, 0x3)),
+ (0x1D516, (0x11ED, 0x1)),
+ (0x02F8A, (0x3E3, 0x1)),
+ (0x0FD0F, (0xCAA, 0x2)),
+ (0x1D403, (0x10EA, 0x1)),
+ (0x1D413, (0x10FA, 0x1)),
+ (0x03262, (0x5AE, 0x1)),
+ (0x1EE0A, (0x1512, 0x1)),
+ (0x0FFB1, (0x1059, 0x1)),
+ (0x1F22B, (0x1653, 0x1)),
+ (0x1D703, (0x13D0, 0x1)),
+ (0x02F6E, (0x3C7, 0x1)),
+ (0x024EA, (0x347, 0x1)),
+ (0x1D73D, (0x140A, 0x1)),
+ (0x0FCDA, (0xC3B, 0x2)),
+ (0x02F49, (0x3A2, 0x1)),
+ (0x03148, (0x453, 0x1)),
+ (0x0FC0D, (0xA90, 0x2)),
+ (0x02F93, (0x3EC, 0x1)),
+ (0x033AA, (0x8AB, 0x3)),
+ (0x02F27, (0x380, 0x1)),
+ (0x032E8, (0x66D, 0x1)),
+ (0x1FBF8, (0x1689, 0x1)),
+ (0x1F101, (0x1598, 0x2)),
+ (0x1D462, (0x1148, 0x1)),
+ (0x1D749, (0x1416, 0x1)),
+ (0x1D7A9, (0x1476, 0x1)),
+ (0x1D57F, (0x124E, 0x1)),
+ (0x03132, (0x43D, 0x1)),
+ (0x0FF6C, (0x1014, 0x1)),
+ (0x0FD9C, (0xDE6, 0x3)),
+ (0x03192, (0x49A, 0x1)),
+ (0x02FC2, (0x41B, 0x1)),
+ (0x1D799, (0x1466, 0x1)),
+ (0x0213C, (0x1A9, 0x1)),
+ (0x1E06D, (0x1508, 0x1)),
+ (0x1D4E7, (0x11C2, 0x1)),
+ (0x0FB15, (0x9A7, 0x2)),
+ (0x02FBC, (0x415, 0x1)),
+ (0x024E0, (0x33D, 0x1)),
+ (0x03209, (0x4C3, 0x3)),
+ (0x033EA, (0x944, 0x3)),
+ (0x0FC6C, (0xB5A, 0x2)),
+ (0x02FAC, (0x405, 0x1)),
+ (0x1F202, (0x1636, 0x1)),
+ (0x0FBF3, (0xA52, 0x3)),
+ (0x0327B, (0x5D4, 0x2)),
+ (0x02F38, (0x391, 0x1)),
+ (0x02F2E, (0x387, 0x1)),
+ (0x00F0C, (0x080, 0x1)),
+ (0x0FDAB, (0xE13, 0x3)),
+ (0x1EE64, (0x154D, 0x1)),
+ (0x0FC3B, (0xAEC, 0x2)),
+ (0x1EE6E, (0x1554, 0x1)),
+ (0x1D63E, (0x130D, 0x1)),
+ (0x1D47D, (0x1163, 0x1)),
+ (0x0FF28, (0xFD0, 0x1)),
+ (0x0FCF4, (0xC73, 0x3)),
+ (0x0FC9E, (0xBC3, 0x2)),
+ (0x1D7AC, (0x1479, 0x1)),
+ (0x1D7FD, (0x14C8, 0x1)),
+ (0x0FB01, (0x995, 0x2)),
+ (0x0FDAE, (0xE1C, 0x3)),
+ (0x0316B, (0x476, 0x1)),
+ (0x1D63C, (0x130B, 0x1)),
+ (0x0FDB7, (0xE37, 0x3)),
+ (0x1D66D, (0x133C, 0x1)),
+ (0x03334, (0x759, 0x6)),
+ (0x0FC6A, (0xB56, 0x2)),
+ (0x1EE62, (0x154C, 0x1)),
+ (0x0338D, (0x864, 0x2)),
+ (0x033AC, (0x8B1, 0x3)),
+ (0x0330E, (0x6BD, 0x4)),
+ (0x0FE82, (0xF15, 0x2)),
+ (0x03333, (0x755, 0x4)),
+ (0x0246C, (0x23B, 0x2)),
+ (0x1D73A, (0x1407, 0x1)),
+ (0x0FC87, (0xB90, 0x2)),
+ (0x1E066, (0x1501, 0x1)),
+ (0x0FD00, (0xC8C, 0x2)),
+ (0x03291, (0x5F2, 0x1)),
+ (0x1D732, (0x13FF, 0x1)),
+ (0x0216B, (0x1FA, 0x3)),
+ (0x02FB6, (0x40F, 0x1)),
+ (0x024E7, (0x344, 0x1)),
+ (0x02FC0, (0x419, 0x1)),
+ (0x033F9, (0x971, 0x3)),
+ (0x0FC9F, (0xBC5, 0x2)),
+ (0x03188, (0x493, 0x1)),
+ (0x0FD79, (0xD83, 0x3)),
+ (0x03229, (0x536, 0x3)),
+ (0x1D4C5, (0x11A0, 0x1)),
+ (0x024B5, (0x310, 0x3)),
+ (0x1D591, (0x1260, 0x1)),
+ (0x03163, (0x46E, 0x1)),
+ (0x033DD, (0x927, 0x2)),
+ (0x032C3, (0x636, 0x2)),
+ (0x01DA9, (0x0D3, 0x1)),
+ (0x0FC4B, (0xB0C, 0x2)),
+ (0x0FBE9, (0xA36, 0x1)),
+ (0x1D71F, (0x13EC, 0x1)),
+ (0x0334C, (0x7B5, 0x5)),
+ (0x10793, (0x109C, 0x1)),
+ (0x02F56, (0x3AF, 0x1)),
+ (0x1D4D1, (0x11AC, 0x1)),
+ (0x0FB53, (0x9BC, 0x1)),
+ (0x00EB3, (0x07A, 0x2)),
+ (0x02F11, (0x36A, 0x1)),
+ (0x0FB89, (0x9F2, 0x1)),
+ (0x03201, (0x4AB, 0x3)),
+ (0x0FD82, (0xD9E, 0x3)),
+ (0x1D503, (0x11DE, 0x1)),
+ (0x0FEC5, (0xF63, 0x1)),
+ (0x1D486, (0x116C, 0x1)),
+ (0x1D753, (0x1420, 0x1)),
+ (0x0FF3F, (0xFE7, 0x1)),
+ (0x03349, (0x7AA, 0x2)),
+ (0x1D5F7, (0x12C6, 0x1)),
+ (0x1D599, (0x1268, 0x1)),
+ (0x1D558, (0x1227, 0x1)),
+ (0x1D5B8, (0x1287, 0x1)),
+ (0x02F07, (0x360, 0x1)),
+ (0x03381, (0x849, 0x2)),
+ (0x0FC47, (0xB04, 0x2)),
+ (0x0330C, (0x6B5, 0x4)),
+ (0x02169, (0x1F7, 0x1)),
+ (0x03285, (0x5E6, 0x1)),
+ (0x1D612, (0x12E1, 0x1)),
+ (0x0FB55, (0x9BE, 0x1)),
+ (0x1D68B, (0x135A, 0x1)),
+ (0x1D798, (0x1465, 0x1)),
+ (0x033F0, (0x956, 0x3)),
+ (0x0FEBA, (0xF58, 0x1)),
+ (0x1D4B1, (0x118F, 0x1)),
+ (0x0FF99, (0x1041, 0x1)),
+ (0x02159, (0x1CF, 0x3)),
+ (0x0FF39, (0xFE1, 0x1)),
+ (0x1D5F0, (0x12BF, 0x1)),
+ (0x1D480, (0x1166, 0x1)),
+ (0x0FEEB, (0xF89, 0x1)),
+ (0x1EE8E, (0x156F, 0x1)),
+ (0x02128, (0x199, 0x1)),
+ (0x1E036, (0x14D1, 0x1)),
+ (0x0FEFB, (0xFA5, 0x2)),
+ (0x1D6DB, (0x13A8, 0x1)),
+ (0x1D6EA, (0x13B7, 0x1)),
+ (0x0FEC6, (0xF64, 0x1)),
+ (0x1EE6C, (0x1552, 0x1)),
+ (0x024C1, (0x31E, 0x1)),
+ (0x1D6B3, (0x1380, 0x1)),
+ (0x1D713, (0x13E0, 0x1)),
+ (0x0FE8C, (0xF29, 0x2)),
+ (0x0FCC2, (0xC0B, 0x2)),
+ (0x024E5, (0x342, 0x1)),
+ (0x0FCC7, (0xC15, 0x2)),
+ (0x00133, (0x01A, 0x2)),
+ (0x1D640, (0x130F, 0x1)),
+ (0x0FFCB, (0x106E, 0x1)),
+ (0x0FDAD, (0xE19, 0x3)),
+ (0x1D57E, (0x124D, 0x1)),
+ (0x1D757, (0x1424, 0x1)),
+ (0x032D3, (0x658, 0x1)),
+ (0x02F76, (0x3CF, 0x1)),
+ (0x02465, (0x231, 0x1)),
+ (0x1EE1C, (0x1524, 0x1)),
+ (0x032D5, (0x65A, 0x1)),
+ (0x0FD73, (0xD71, 0x3)),
+ (0x0FBB0, (0xA1B, 0x2)),
+ (0x02F66, (0x3BF, 0x1)),
+ (0x1D5F6, (0x12C5, 0x1)),
+ (0x0FEBB, (0xF59, 0x1)),
+ (0x002B1, (0x03F, 0x1)),
+ (0x1EE2E, (0x1531, 0x1)),
+ (0x02071, (0x142, 0x1)),
+ (0x0FDFB, (0xEA1, 0x8)),
+ (0x0FC81, (0xB84, 0x2)),
+ (0x0FEEF, (0xF8D, 0x1)),
+ (0x02173, (0x207, 0x2)),
+ (0x1EEA6, (0x1581, 0x1)),
+ (0x02478, (0x257, 0x3)),
+ (0x1D6F8, (0x13C5, 0x1)),
+ (0x1EEAD, (0x1587, 0x1)),
+ (0x1D5BC, (0x128B, 0x1)),
+ (0x1D6AE, (0x137B, 0x1)),
+ (0x0FEDF, (0xF7D, 0x1)),
+ (0x1D5BE, (0x128D, 0x1)),
+ (0x1D672, (0x1341, 0x1)),
+ (0x0FD25, (0xCD6, 0x2)),
+ (0x01DBA, (0x0E4, 0x1)),
+ (0x02463, (0x22F, 0x1)),
+ (0x0FCE2, (0xC4D, 0x2)),
+ (0x0215B, (0x1D5, 0x3)),
+ (0x1D7F9, (0x14C4, 0x1)),
+ (0x032D7, (0x65C, 0x1)),
+ (0x1D4AF, (0x118D, 0x1)),
+ (0x02F91, (0x3EA, 0x1)),
+ (0x0246B, (0x239, 0x2)),
+ (0x107AD, (0x10B6, 0x1)),
+ (0x003D1, (0x060, 0x1)),
+ (0x0FFCC, (0x106F, 0x1)),
+ (0x0FD9E, (0xDEC, 0x3)),
+ (0x02115, (0x189, 0x1)),
+ (0x1D715, (0x13E2, 0x1)),
+ (0x1D5DB, (0x12AA, 0x1)),
+ (0x1D774, (0x1441, 0x1)),
+ (0x0FC61, (0xB3B, 0x3)),
+ (0x1D401, (0x10E8, 0x1)),
+ (0x03309, (0x6AC, 0x3)),
+ (0x1EE68, (0x154F, 0x1)),
+ (0x1EE49, (0x153E, 0x1)),
+ (0x02119, (0x18C, 0x1)),
+ (0x0FB82, (0x9EB, 0x1)),
+ (0x1D642, (0x1311, 0x1)),
+ (0x0FC97, (0xBB0, 0x3)),
+ (0x107B7, (0x10BF, 0x1)),
+ (0x0FB9A, (0xA03, 0x1)),
+ (0x0FFC6, (0x106B, 0x1)),
+ (0x03265, (0x5B1, 0x1)),
+ (0x0333A, (0x771, 0x4)),
+ (0x1D61D, (0x12EC, 0x1)),
+ (0x02F53, (0x3AC, 0x1)),
+ (0x02082, (0x151, 0x1)),
+ (0x1D734, (0x1401, 0x1)),
+ (0x02106, (0x179, 0x3)),
+ (0x10792, (0x109B, 0x1)),
+ (0x1D61B, (0x12EA, 0x1)),
+ (0x1D513, (0x11EB, 0x1)),
+ (0x0FFA1, (0x1049, 0x1)),
+ (0x0FE12, (0xEAF, 0x1)),
+ (0x0FDA2, (0xDF8, 0x3)),
+ (0x0FC91, (0xBA4, 0x2)),
+ (0x01FED, (0x109, 0x3)),
+ (0x1D5DF, (0x12AE, 0x1)),
+ (0x032F8, (0x67D, 0x1)),
+ (0x02FB2, (0x40B, 0x1)),
+ (0x032C4, (0x638, 0x2)),
+ (0x03158, (0x463, 0x1)),
+ (0x1D6D3, (0x13A0, 0x1)),
+ (0x0FB84, (0x9ED, 0x1)),
+ (0x024CA, (0x327, 0x1)),
+ (0x03208, (0x4C0, 0x3)),
+ (0x032FC, (0x681, 0x1)),
+ (0x0FE94, (0xF32, 0x1)),
+ (0x02157, (0x1C9, 0x3)),
+ (0x03357, (0x7DF, 0x3)),
+ (0x0320A, (0x4C6, 0x3)),
+ (0x024DA, (0x337, 0x1)),
+ (0x0FDC2, (0xE58, 0x3)),
+ (0x1D617, (0x12E6, 0x1)),
+ (0x1D5E1, (0x12B0, 0x1)),
+ (0x1D570, (0x123F, 0x1)),
+ (0x0327E, (0x5DF, 0x2)),
+ (0x01FDD, (0x100, 0x3)),
+ (0x0FD5D, (0xD2F, 0x3)),
+ (0x02F83, (0x3DC, 0x1)),
+ (0x0FFE4, (0x1081, 0x1)),
+ (0x0FD87, (0xDAD, 0x3)),
+ (0x024D1, (0x32E, 0x1)),
+ (0x00384, (0x05A, 0x2)),
+ (0x024D6, (0x333, 0x1)),
+ (0x1EE47, (0x153D, 0x1)),
+ (0x003D3, (0x062, 0x2)),
+ (0x032F7, (0x67C, 0x1)),
+ (0x1D609, (0x12D8, 0x1)),
+ (0x024AC, (0x2F5, 0x3)),
+ (0x02F39, (0x392, 0x1)),
+ (0x0FBD7, (0xA23, 0x1)),
+ (0x0FB6F, (0x9D8, 0x1)),
+ (0x0FD13, (0xCB2, 0x2)),
+ (0x0320F, (0x4D6, 0x4)),
+ (0x0FCEE, (0xC65, 0x2)),
+ (0x1D52D, (0x1203, 0x1)),
+ (0x1D62E, (0x12FD, 0x1)),
+ (0x02FAD, (0x406, 0x1)),
+ (0x1D414, (0x10FB, 0x1)),
+ (0x0FE84, (0xF19, 0x2)),
+ (0x1D76D, (0x143A, 0x1)),
+ (0x1F223, (0x164B, 0x1)),
+ (0x02F87, (0x3E0, 0x1)),
+ (0x02FD2, (0x42B, 0x1)),
+ (0x0FF95, (0x103D, 0x1)),
+ (0x1EE02, (0x150B, 0x1)),
+ (0x02471, (0x245, 0x2)),
+ (0x1D714, (0x13E1, 0x1)),
+ (0x1D718, (0x13E5, 0x1)),
+ (0x0FFCE, (0x1071, 0x1)),
+ (0x002B0, (0x03E, 0x1)),
+ (0x1EE57, (0x1546, 0x1)),
+ (0x01DB1, (0x0DB, 0x1)),
+ (0x0FBE3, (0xA30, 0x1)),
+ (0x1E058, (0x14F3, 0x1)),
+ (0x03153, (0x45E, 0x1)),
+ (0x0FF52, (0xFFA, 0x1)),
+ (0x03243, (0x584, 0x3)),
+ (0x03226, (0x52D, 0x3)),
+ (0x0FB6A, (0x9D3, 0x1)),
+ (0x1EE74, (0x1559, 0x1)),
+ (0x032DC, (0x661, 0x1)),
+ (0x0FC03, (0xA7A, 0x3)),
+ (0x01E9B, (0x0EC, 0x2)),
+ (0x0FDA7, (0xE07, 0x3)),
+ (0x0FD15, (0xCB6, 0x2)),
+ (0x0FC01, (0xA74, 0x3)),
+ (0x0FC7C, (0xB7A, 0x2)),
+ (0x03341, (0x78E, 0x3)),
+ (0x03324, (0x71C, 0x4)),
+ (0x02FA8, (0x401, 0x1)),
+ (0x02F3E, (0x397, 0x1)),
+ (0x0FF9C, (0x1044, 0x1)),
+ (0x0FB20, (0x9AD, 0x1)),
+ (0x02F0D, (0x366, 0x1)),
+ (0x1D5EB, (0x12BA, 0x1)),
+ (0x1D59C, (0x126B, 0x1)),
+ (0x0017F, (0x022, 0x1)),
+ (0x1D79E, (0x146B, 0x1)),
+ (0x1EE14, (0x151C, 0x1)),
+ (0x0FD8C, (0xDBC, 0x3)),
+ (0x0FCBD, (0xC01, 0x2)),
+ (0x1F221, (0x1649, 0x1)),
+ (0x02049, (0x13A, 0x2)),
+ (0x1D4D9, (0x11B4, 0x1)),
+ (0x0FDAA, (0xE10, 0x3)),
+ (0x0320E, (0x4D2, 0x4)),
+ (0x1EE39, (0x153A, 0x1)),
+ (0x1D72A, (0x13F7, 0x1)),
+ (0x032AF, (0x610, 0x1)),
+ (0x0FB8E, (0x9F7, 0x1)),
+ (0x02077, (0x146, 0x1)),
+ (0x1D4A6, (0x1187, 0x1)),
+ (0x02F70, (0x3C9, 0x1)),
+ (0x03368, (0x808, 0x3)),
+ (0x0FB6D, (0x9D6, 0x1)),
+ (0x02F5C, (0x3B5, 0x1)),
+ (0x03134, (0x43F, 0x1)),
+ (0x024B6, (0x313, 0x1)),
+ (0x1D630, (0x12FF, 0x1)),
+ (0x033CC, (0x8FF, 0x2)),
+ (0x0FB92, (0x9FB, 0x1)),
+ (0x024D4, (0x331, 0x1)),
+ (0x1D46A, (0x1150, 0x1)),
+ (0x0FF30, (0xFD8, 0x1)),
+ (0x0FC08, (0xA86, 0x2)),
+ (0x0FFB2, (0x105A, 0x1)),
+ (0x033FF, (0x983, 0x3)),
+ (0x0217B, (0x218, 0x3)),
+ (0x0FEDE, (0xF7C, 0x1)),
+ (0x02004, (0x117, 0x1)),
+ (0x0FCD1, (0xC29, 0x2)),
+ (0x0207D, (0x14C, 0x1)),
+ (0x0FB94, (0x9FD, 0x1)),
+ (0x02078, (0x147, 0x1)),
+ (0x1D4DE, (0x11B9, 0x1)),
+ (0x0FC06, (0xA82, 0x2)),
+ (0x1D5AB, (0x127A, 0x1)),
+ (0x1D6EB, (0x13B8, 0x1)),
+ (0x0FF79, (0x1021, 0x1)),
+ (0x1D705, (0x13D2, 0x1)),
+ (0x02462, (0x22E, 0x1)),
+ (0x0FCA1, (0xBC9, 0x2)),
+ (0x0FC28, (0xAC6, 0x2)),
+ (0x1D77E, (0x144B, 0x1)),
+ (0x0FEE6, (0xF84, 0x1)),
+ (0x1F127, (0x15F1, 0x3)),
+ (0x1D580, (0x124F, 0x1)),
+ (0x1EE4F, (0x1542, 0x1)),
+ (0x1D619, (0x12E8, 0x1)),
+ (0x0323B, (0x56C, 0x3)),
+ (0x001C8, (0x02E, 0x2)),
+ (0x1F21C, (0x1644, 0x1)),
+ (0x1FBF2, (0x1683, 0x1)),
+ (0x0FB26, (0x9B3, 0x1)),
+ (0x1E03B, (0x14D6, 0x1)),
+ (0x0FDB8, (0xE3A, 0x3)),
+ (0x1D54F, (0x121F, 0x1)),
+ (0x1D564, (0x1233, 0x1)),
+ (0x1D7EB, (0x14B6, 0x1)),
+ (0x1E050, (0x14EB, 0x1)),
+ (0x1D5D8, (0x12A7, 0x1)),
+ (0x1D4F0, (0x11CB, 0x1)),
+ (0x0FFD3, (0x1074, 0x1)),
+ (0x032DE, (0x663, 0x1)),
+ (0x1D574, (0x1243, 0x1)),
+ (0x002E4, (0x057, 0x1)),
+ (0x1D59E, (0x126D, 0x1)),
+ (0x0FF74, (0x101C, 0x1)),
+ (0x0215E, (0x1DE, 0x3)),
+ (0x0FD34, (0xCF4, 0x2)),
+ (0x0FF2A, (0xFD2, 0x1)),
+ (0x0FF15, (0xFBD, 0x1)),
+ (0x1D50D, (0x11E5, 0x1)),
+ (0x0FC21, (0xAB8, 0x2)),
+ (0x0FF4F, (0xFF7, 0x1)),
+ (0x0FEA1, (0xF3F, 0x1)),
+ (0x1D60D, (0x12DC, 0x1)),
+ (0x0FF3A, (0xFE2, 0x1)),
+ (0x1EE12, (0x151A, 0x1)),
+ (0x03318, (0x6EA, 0x4)),
+ (0x0FE7C, (0xF0A, 0x2)),
+ (0x0FCAB, (0xBDD, 0x2)),
+ (0x03205, (0x4B7, 0x3)),
+ (0x001F1, (0x038, 0x2)),
+ (0x0FE42, (0xECC, 0x1)),
+ (0x0FE91, (0xF2F, 0x1)),
+ (0x001C7, (0x02C, 0x2)),
+ (0x1D681, (0x1350, 0x1)),
+ (0x1D6DE, (0x13AB, 0x1)),
+ (0x1D4B0, (0x118E, 0x1)),
+ (0x1D742, (0x140F, 0x1)),
+ (0x1D67F, (0x134E, 0x1)),
+ (0x1D645, (0x1314, 0x1)),
+ (0x0FEB0, (0xF4E, 0x1)),
+ (0x1F121, (0x15DF, 0x3)),
+ (0x1D611, (0x12E0, 0x1)),
+ (0x1D752, (0x141F, 0x1)),
+ (0x0FE32, (0xEBC, 0x1)),
+ (0x0FF81, (0x1029, 0x1)),
+ (0x02009, (0x11C, 0x1)),
+ (0x1F14C, (0x1621, 0x2)),
+ (0x0FEDB, (0xF79, 0x1)),
+ (0x1D5D0, (0x129F, 0x1)),
+ (0x0FCFA, (0xC80, 0x2)),
+ (0x03296, (0x5F7, 0x1)),
+ (0x1D71A, (0x13E7, 0x1)),
+ (0x107A6, (0x10AF, 0x1)),
+ (0x1D5AC, (0x127B, 0x1)),
+ (0x0FD93, (0xDCB, 0x3)),
+ (0x1EE8B, (0x156C, 0x1)),
+ (0x0FECB, (0xF69, 0x1)),
+ (0x1D7A3, (0x1470, 0x1)),
+ (0x02F96, (0x3EF, 0x1)),
+ (0x1EE4E, (0x1541, 0x1)),
+ (0x024CF, (0x32C, 0x1)),
+ (0x032AA, (0x60B, 0x1)),
+ (0x1EE88, (0x156A, 0x1)),
+ (0x03270, (0x5BE, 0x2)),
+ (0x0FCEB, (0xC5F, 0x2)),
+ (0x032E0, (0x665, 0x1)),
+ (0x1D587, (0x1256, 0x1)),
+ (0x1CCEC, (0x10D9, 0x1)),
+ (0x1D7C8, (0x1495, 0x1)),
+ (0x0FEB2, (0xF50, 0x1)),
+ (0x03379, (0x836, 0x3)),
+ (0x1D688, (0x1357, 0x1)),
+ (0x107B2, (0x10BA, 0x1)),
+ (0x033C8, (0x8F7, 0x2)),
+ (0x1D620, (0x12EF, 0x1)),
+ (0x0FC3D, (0xAF0, 0x2)),
+ (0x0FDA9, (0xE0D, 0x3)),
+ (0x1F246, (0x1676, 0x3)),
+ (0x0FEF9, (0xF9F, 0x3)),
+ (0x02160, (0x1E3, 0x1)),
+ (0x1D72F, (0x13FC, 0x1)),
+ (0x0FC73, (0xB68, 0x2)),
+ (0x02481, (0x276, 0x4)),
+ (0x1D528, (0x11FE, 0x1)),
+ (0x0327D, (0x5DB, 0x4)),
+ (0x0FB60, (0x9C9, 0x1)),
+ (0x033B3, (0x8C8, 0x2)),
+ (0x02F37, (0x390, 0x1)),
+ (0x1D54D, (0x121D, 0x1)),
+ (0x0FC33, (0xADC, 0x2)),
+ (0x032B3, (0x616, 0x2)),
+ (0x1D41B, (0x1102, 0x1)),
+ (0x1D475, (0x115B, 0x1)),
+ (0x0216D, (0x1FE, 0x1)),
+ (0x0FEB4, (0xF52, 0x1)),
+ (0x1D41D, (0x1104, 0x1)),
+ (0x1EE0C, (0x1514, 0x1)),
+ (0x0FEB6, (0xF54, 0x1)),
+ (0x1E05D, (0x14F8, 0x1)),
+ (0x0FF26, (0xFCE, 0x1)),
+ (0x1D592, (0x1261, 0x1)),
+ (0x0212F, (0x19C, 0x1)),
+ (0x0FC18, (0xAA6, 0x2)),
+ (0x0FDF3, (0xE74, 0x4)),
+ (0x033F1, (0x959, 0x3)),
+ (0x0FCB6, (0xBF3, 0x2)),
+ (0x032B9, (0x622, 0x2)),
+ (0x0FB79, (0x9E2, 0x1)),
+ (0x1D4B6, (0x1194, 0x1)),
+ (0x0FEF0, (0xF8E, 0x1)),
+ (0x033B7, (0x8D0, 0x2)),
+ (0x0FB7B, (0x9E4, 0x1)),
+ (0x1D55A, (0x1229, 0x1)),
+ (0x0FCB1, (0xBE9, 0x2)),
+ (0x02472, (0x247, 0x2)),
+ (0x0321C, (0x50A, 0x4)),
+ (0x002B2, (0x040, 0x1)),
+ (0x02F0E, (0x367, 0x1)),
+ (0x0FF89, (0x1031, 0x1)),
+ (0x1D6F5, (0x13C2, 0x1)),
];
-
pub(crate) const CJK_COMPAT_VARIANTS_DECOMPOSED_CHARS: &[char] = &[
'\u{349E}',
'\u{FE00}',
@@ -26654,6921 +18880,1540 @@
'\u{2A600}',
'\u{FE00}',
];
+
pub(crate) const CJK_COMPAT_VARIANTS_DECOMPOSED_SALT: &[u16] = &[
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x162,
- 0x14,
- 0xb6,
- 0x0,
- 0x183,
- 0xd,
- 0x0,
- 0x0,
- 0x35,
- 0x11,
- 0x7,
- 0x0,
- 0x1c,
- 0x0,
- 0x1,
- 0x0,
- 0xd3,
- 0xb,
- 0xa,
- 0xe1,
- 0x0,
- 0x0,
- 0x0,
- 0x48,
- 0x72,
- 0xc7,
- 0x2,
- 0x21,
- 0x15,
- 0x2c,
- 0x0,
- 0x0,
- 0x0,
- 0x5,
- 0x1f,
- 0x8,
- 0x7,
- 0x0,
- 0x4,
- 0x0,
- 0x7,
- 0x10,
- 0x0,
- 0x0,
- 0x0,
- 0x4e,
- 0x0,
- 0x6,
- 0x0,
- 0x11,
- 0x14,
- 0x4,
- 0x1a,
- 0x2,
- 0x58,
- 0x0,
- 0x17,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x4,
- 0x6,
- 0x16,
- 0x20,
- 0x4,
- 0x0,
- 0x1e,
- 0x30,
- 0x0,
- 0x24,
- 0x1a,
- 0x17,
- 0x0,
- 0xa0,
- 0x29,
- 0x34,
- 0x2,
- 0x0,
- 0x4,
- 0x0,
- 0x23,
- 0x29,
- 0x21,
- 0x0,
- 0x0,
- 0xb,
- 0x0,
- 0x20,
- 0x1,
- 0x7,
- 0x8,
- 0x9,
- 0x8,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x4,
- 0x3,
- 0x1d,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x29,
- 0xd,
- 0x7,
- 0x0,
- 0x0,
- 0x2,
- 0xe,
- 0x9,
- 0x4,
- 0xc,
- 0x1,
- 0x13,
- 0x5,
- 0x6,
- 0x5,
- 0x1,
- 0x9,
- 0x1,
- 0xa,
- 0x2,
- 0x0,
- 0x8,
- 0x29,
- 0x0,
- 0x8,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0xd,
- 0x0,
- 0x9,
- 0x10,
- 0xf,
- 0x0,
- 0x11,
- 0xf,
- 0x0,
- 0x8,
- 0x1,
- 0x1,
- 0x5,
- 0x0,
- 0x1,
- 0x26,
- 0x5,
- 0x39,
- 0x8,
- 0x1,
- 0x17,
- 0xd,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0xe,
- 0x0,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x1,
- 0x2,
- 0x4,
- 0x3,
- 0x35,
- 0x1,
- 0x2,
- 0x1,
- 0x7,
- 0x0,
- 0x0,
- 0x3,
- 0x2,
- 0x11,
- 0x0,
- 0xd,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x5,
- 0x0,
- 0xe,
- 0x0,
- 0x0,
- 0x3,
- 0x6,
- 0x2,
- 0xb,
- 0x2,
- 0x1,
- 0x3,
- 0x12,
- 0xb,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0xb,
- 0x1,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2f,
- 0x1,
- 0x13,
- 0xb,
- 0x4,
- 0x2,
- 0x4,
- 0x4,
- 0x0,
- 0xb,
- 0x4,
- 0x0,
- 0xb,
- 0x4,
- 0xd,
- 0xc,
- 0x0,
- 0x1e,
- 0x0,
- 0x21,
- 0xd,
- 0x2,
- 0x7,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x20,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1f,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x5,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x11,
- 0x2,
- 0x8,
- 0x7,
- 0x0,
- 0x0,
- 0xc,
- 0x3,
- 0x0,
- 0x4,
- 0xe,
- 0x23,
- 0x4,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x4,
- 0x8,
- 0x10,
- 0x2,
- 0x0,
- 0x13,
- 0xd,
- 0x0,
- 0xb,
- 0x9,
- 0x6,
- 0x0,
- 0x0,
- 0x9,
- 0xc,
- 0xa,
- 0x4,
- 0x1a,
- 0x3,
- 0x1,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x6,
- 0x3,
- 0xa,
- 0x0,
- 0xa,
- 0x6,
- 0x8,
- 0x8,
- 0x3,
- 0x19,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0xc,
- 0x5,
- 0x0,
- 0x5,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x8,
- 0x0,
- 0xc,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x2,
- 0x15,
- 0x0,
- 0x4,
- 0x1,
- 0x12,
- 0x4,
- 0x3,
- 0xc,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x5,
- 0x2,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x10,
- 0x4,
- 0x0,
- 0x5,
- 0x2,
- 0x1,
- 0x6,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0xa,
- 0x8,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x4,
- 0xc,
- 0x2,
- 0x0,
- 0x6,
- 0x3,
- 0x3,
- 0xf,
- 0x0,
- 0x3,
- 0x5,
- 0x1,
- 0x0,
- 0x0,
- 0x8,
- 0x0,
- 0x2,
- 0x4,
- 0x2,
- 0x13,
- 0x0,
- 0x0,
- 0x0,
- 0xa,
- 0x6,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0xa,
- 0x0,
- 0x5,
- 0x0,
- 0x5,
- 0x0,
- 0x6,
- 0x0,
- 0x1,
- 0x1,
- 0x5,
- 0x1,
- 0xa,
- 0x9,
- 0x5,
- 0x1,
- 0x0,
- 0x7,
- 0x1,
- 0x1,
- 0x7,
- 0x1,
- 0x1f,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x11,
- 0x5,
- 0x3,
- 0x5,
- 0x3,
- 0x1,
- 0x1,
- 0x0,
- 0x4,
- 0x1,
- 0x4,
- 0x1,
- 0x8,
- 0x0,
- 0x19,
- 0x0,
- 0x4,
- 0x3,
- 0x5,
- 0x6,
- 0x0,
- 0x11,
- 0xe,
- 0x5,
- 0x1,
- 0x0,
- 0x1a,
- 0x4,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x5,
- 0x0,
- 0x0,
- 0x1,
- 0x17,
- 0x0,
- 0x6,
- 0x3,
- 0xf,
- 0x1,
- 0x6,
- 0x9,
- 0x0,
- 0x5,
- 0x0,
- 0x3,
- 0x1,
- 0x17,
- 0x7,
- 0x0,
- 0x2,
- 0x5,
- 0x3,
- 0x2,
- 0x0,
- 0x7,
- 0x1,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x5,
- 0x15,
- 0x4,
- 0x0,
- 0x3,
- 0x1,
- 0x3,
- 0x7,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x9,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x9,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0x0,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x8,
- 0x0,
- 0x2,
- 0x2,
- 0x3,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x8,
- 0x3,
- 0x2,
- 0x0,
- 0x9,
- 0x4,
- 0x0,
- 0x6,
- 0xf,
- 0x1,
- 0x0,
- 0x0,
- 0x4,
- 0x2,
- 0x2,
- 0x4,
- 0x4,
- 0xd,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x5,
- 0x0,
- 0x0,
- 0xc,
- 0x4,
- 0x9,
- 0x2,
- 0x8,
- 0x1,
- 0x0,
- 0x5,
- 0x4,
- 0x1,
- 0x2,
- 0x1,
- 0x5,
- 0x2,
- 0xb,
- 0x4,
- 0xd,
- 0x4,
- 0x0,
- 0x1,
- 0x18,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x2,
- 0xa,
- 0x2,
- 0x4,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0xc,
- 0x1,
- 0xc,
- 0x1,
- 0x9,
- 0xb,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x7,
- 0x2,
- 0x0,
- 0x6,
- 0x4,
- 0xa,
- 0x1,
- 0x1,
- 0x5,
- 0x2,
- 0x6,
- 0x4,
- 0x3,
- 0xd,
- 0x2,
- 0x2,
- 0x0,
- 0x1,
- 0x2,
- 0x3,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x2,
- 0x0,
- 0x5,
- 0x2,
- 0x5,
- 0x2,
- 0x1,
- 0x4,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x7,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x4,
- 0x8,
- 0x0,
- 0x3,
- 0x2,
- 0x2,
- 0x2,
- 0x2,
- 0x4,
- 0x1,
- 0x4,
- 0x2,
- 0x0,
- 0x1,
- 0x4,
- 0x1,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0xc,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x6,
- 0x2,
- 0x0,
- 0x0,
- 0x8,
- 0x1,
- 0x9,
- 0x1,
- 0x3,
- 0x0,
- 0x4,
- 0x1,
- 0x0,
- 0x6,
- 0x0,
- 0x3,
- 0x7,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x3,
- 0x2,
- 0x0,
- 0x2,
- 0x7,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x5,
- 0x3,
- 0x1,
- 0x3,
- 0x0,
- 0x5,
- 0x0,
- 0x1,
- 0x0,
- 0x3,
- 0x1,
- 0x1,
- 0x2,
- 0x3,
- 0x0,
- 0x2,
- 0x3,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x4,
- 0x3,
- 0x2,
- 0x4,
- 0x3,
- 0x5,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x2,
- 0x0,
- 0x0,
- 0x4,
- 0x3,
- 0x0,
- 0x1,
- 0x6,
- 0x1,
- 0x4,
- 0x0,
- 0x2,
- 0x2,
- 0x1,
- 0x0,
- 0xd,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x3,
- 0x8,
- 0x5,
- 0x7,
- 0x6,
- 0x0,
- 0x1,
- 0x6,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x2,
- 0x4,
- 0x2,
- 0x1,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x5,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x4,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x3,
- 0x3,
- 0x1,
- 0x0,
- 0x4,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x1,
- 0x1,
- 0x4,
- 0x0,
- 0x0,
- 0x3,
- 0x1,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x2,
- 0x1,
- 0x2,
- 0x1,
- 0x9,
- 0x1,
- 0x0,
- 0x1,
- 0x3,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x4,
- 0x1,
- 0x1,
- 0x1,
- 0x2,
- 0x1,
- 0x6,
- 0x1,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x1,
- 0x0,
- 0x5,
- 0x1,
+ 0x005, 0x000, 0x000, 0x000, 0x162, 0x014, 0x0B6, 0x000, 0x183, 0x00D, 0x000, 0x000, 0x035,
+ 0x011, 0x007, 0x000, 0x01C, 0x000, 0x001, 0x000, 0x0D3, 0x00B, 0x00A, 0x0E1, 0x000, 0x000,
+ 0x000, 0x048, 0x072, 0x0C7, 0x002, 0x021, 0x015, 0x02C, 0x000, 0x000, 0x000, 0x005, 0x01F,
+ 0x008, 0x007, 0x000, 0x004, 0x000, 0x007, 0x010, 0x000, 0x000, 0x000, 0x04E, 0x000, 0x006,
+ 0x000, 0x011, 0x014, 0x004, 0x01A, 0x002, 0x058, 0x000, 0x017, 0x000, 0x000, 0x000, 0x004,
+ 0x000, 0x001, 0x000, 0x001, 0x000, 0x004, 0x006, 0x016, 0x020, 0x004, 0x000, 0x01E, 0x030,
+ 0x000, 0x024, 0x01A, 0x017, 0x000, 0x0A0, 0x029, 0x034, 0x002, 0x000, 0x004, 0x000, 0x023,
+ 0x029, 0x021, 0x000, 0x000, 0x00B, 0x000, 0x020, 0x001, 0x007, 0x008, 0x009, 0x008, 0x000,
+ 0x001, 0x000, 0x001, 0x004, 0x003, 0x01D, 0x000, 0x000, 0x000, 0x001, 0x029, 0x00D, 0x007,
+ 0x000, 0x000, 0x002, 0x00E, 0x009, 0x004, 0x00C, 0x001, 0x013, 0x005, 0x006, 0x005, 0x001,
+ 0x009, 0x001, 0x00A, 0x002, 0x000, 0x008, 0x029, 0x000, 0x008, 0x002, 0x000, 0x000, 0x000,
+ 0x000, 0x000, 0x000, 0x000, 0x00D, 0x000, 0x009, 0x010, 0x00F, 0x000, 0x011, 0x00F, 0x000,
+ 0x008, 0x001, 0x001, 0x005, 0x000, 0x001, 0x026, 0x005, 0x039, 0x008, 0x001, 0x017, 0x00D,
+ 0x004, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00E, 0x000, 0x005, 0x000,
+ 0x000, 0x000, 0x000, 0x004, 0x000, 0x001, 0x002, 0x004, 0x003, 0x035, 0x001, 0x002, 0x001,
+ 0x007, 0x000, 0x000, 0x003, 0x002, 0x011, 0x000, 0x00D, 0x003, 0x000, 0x000, 0x000, 0x000,
+ 0x000, 0x000, 0x000, 0x000, 0x004, 0x005, 0x000, 0x00E, 0x000, 0x000, 0x003, 0x006, 0x002,
+ 0x00B, 0x002, 0x001, 0x003, 0x012, 0x00B, 0x000, 0x000, 0x000, 0x002, 0x00B, 0x001, 0x004,
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x02F, 0x001,
+ 0x013, 0x00B, 0x004, 0x002, 0x004, 0x004, 0x000, 0x00B, 0x004, 0x000, 0x00B, 0x004, 0x00D,
+ 0x00C, 0x000, 0x01E, 0x000, 0x021, 0x00D, 0x002, 0x007, 0x000, 0x000, 0x000, 0x001, 0x002,
+ 0x000, 0x020, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01F, 0x001, 0x002, 0x000, 0x000, 0x005,
+ 0x000, 0x000, 0x004, 0x000, 0x011, 0x002, 0x008, 0x007, 0x000, 0x000, 0x00C, 0x003, 0x000,
+ 0x004, 0x00E, 0x023, 0x004, 0x001, 0x000, 0x002, 0x000, 0x004, 0x008, 0x010, 0x002, 0x000,
+ 0x013, 0x00D, 0x000, 0x00B, 0x009, 0x006, 0x000, 0x000, 0x009, 0x00C, 0x00A, 0x004, 0x01A,
+ 0x003, 0x001, 0x003, 0x000, 0x001, 0x000, 0x006, 0x003, 0x00A, 0x000, 0x00A, 0x006, 0x008,
+ 0x008, 0x003, 0x019, 0x000, 0x000, 0x000, 0x000, 0x00C, 0x005, 0x000, 0x005, 0x001, 0x000,
+ 0x002, 0x000, 0x008, 0x000, 0x00C, 0x000, 0x002, 0x000, 0x001, 0x000, 0x000, 0x000, 0x000,
+ 0x004, 0x002, 0x015, 0x000, 0x004, 0x001, 0x012, 0x004, 0x003, 0x00C, 0x004, 0x000, 0x000,
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x003, 0x000, 0x005, 0x002, 0x000, 0x001, 0x002, 0x001,
+ 0x010, 0x004, 0x000, 0x005, 0x002, 0x001, 0x006, 0x000, 0x000, 0x000, 0x000, 0x00A, 0x008,
+ 0x002, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x004, 0x00C, 0x002,
+ 0x000, 0x006, 0x003, 0x003, 0x00F, 0x000, 0x003, 0x005, 0x001, 0x000, 0x000, 0x008, 0x000,
+ 0x002, 0x004, 0x002, 0x013, 0x000, 0x000, 0x000, 0x00A, 0x006, 0x001, 0x000, 0x000, 0x000,
+ 0x000, 0x000, 0x000, 0x000, 0x00A, 0x000, 0x005, 0x000, 0x005, 0x000, 0x006, 0x000, 0x001,
+ 0x001, 0x005, 0x001, 0x00A, 0x009, 0x005, 0x001, 0x000, 0x007, 0x001, 0x001, 0x007, 0x001,
+ 0x01F, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x002,
+ 0x011, 0x005, 0x003, 0x005, 0x003, 0x001, 0x001, 0x000, 0x004, 0x001, 0x004, 0x001, 0x008,
+ 0x000, 0x019, 0x000, 0x004, 0x003, 0x005, 0x006, 0x000, 0x011, 0x00E, 0x005, 0x001, 0x000,
+ 0x01A, 0x004, 0x000, 0x003, 0x000, 0x000, 0x005, 0x000, 0x000, 0x001, 0x017, 0x000, 0x006,
+ 0x003, 0x00F, 0x001, 0x006, 0x009, 0x000, 0x005, 0x000, 0x003, 0x001, 0x017, 0x007, 0x000,
+ 0x002, 0x005, 0x003, 0x002, 0x000, 0x007, 0x001, 0x000, 0x004, 0x000, 0x000, 0x005, 0x015,
+ 0x004, 0x000, 0x003, 0x001, 0x003, 0x007, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000, 0x000,
+ 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x009, 0x000, 0x000, 0x000, 0x001, 0x003, 0x000,
+ 0x000, 0x003, 0x001, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000, 0x003, 0x008, 0x000,
+ 0x002, 0x002, 0x003, 0x005, 0x000, 0x000, 0x000, 0x008, 0x003, 0x002, 0x000, 0x009, 0x004,
+ 0x000, 0x006, 0x00F, 0x001, 0x000, 0x000, 0x004, 0x002, 0x002, 0x004, 0x004, 0x00D, 0x000,
+ 0x000, 0x000, 0x001, 0x000, 0x002, 0x005, 0x000, 0x000, 0x00C, 0x004, 0x009, 0x002, 0x008,
+ 0x001, 0x000, 0x005, 0x004, 0x001, 0x002, 0x001, 0x005, 0x002, 0x00B, 0x004, 0x00D, 0x004,
+ 0x000, 0x001, 0x018, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003,
+ 0x000, 0x002, 0x00A, 0x002, 0x004, 0x004, 0x000, 0x000, 0x000, 0x001, 0x000, 0x00C, 0x001,
+ 0x00C, 0x001, 0x009, 0x00B, 0x000, 0x001, 0x000, 0x002, 0x000, 0x005, 0x000, 0x000, 0x000,
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x007, 0x002, 0x000, 0x006, 0x004, 0x00A, 0x001, 0x001,
+ 0x005, 0x002, 0x006, 0x004, 0x003, 0x00D, 0x002, 0x002, 0x000, 0x001, 0x002, 0x003, 0x002,
+ 0x000, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x002, 0x000, 0x001,
+ 0x000, 0x000, 0x003, 0x002, 0x000, 0x005, 0x002, 0x005, 0x002, 0x001, 0x004, 0x001, 0x001,
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007, 0x002, 0x000, 0x000, 0x000, 0x000, 0x000,
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x002, 0x000, 0x000, 0x004, 0x008, 0x000,
+ 0x003, 0x002, 0x002, 0x002, 0x002, 0x004, 0x001, 0x004, 0x002, 0x000, 0x001, 0x004, 0x001,
+ 0x001, 0x002, 0x000, 0x000, 0x00C, 0x000, 0x001, 0x002, 0x000, 0x006, 0x002, 0x000, 0x000,
+ 0x008, 0x001, 0x009, 0x001, 0x003, 0x000, 0x004, 0x001, 0x000, 0x006, 0x000, 0x003, 0x007,
+ 0x000, 0x000, 0x002, 0x001, 0x000, 0x003, 0x002, 0x000, 0x002, 0x007, 0x000, 0x000, 0x000,
+ 0x000, 0x005, 0x003, 0x001, 0x003, 0x000, 0x005, 0x000, 0x001, 0x000, 0x003, 0x001, 0x001,
+ 0x002, 0x003, 0x000, 0x002, 0x003, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000, 0x000, 0x001,
+ 0x000, 0x004, 0x003, 0x002, 0x004, 0x003, 0x005, 0x002, 0x000, 0x000, 0x001, 0x003, 0x002,
+ 0x000, 0x000, 0x004, 0x003, 0x000, 0x001, 0x006, 0x001, 0x004, 0x000, 0x002, 0x002, 0x001,
+ 0x000, 0x00D, 0x001, 0x000, 0x000, 0x001, 0x000, 0x002, 0x003, 0x008, 0x005, 0x007, 0x006,
+ 0x000, 0x001, 0x006, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
+ 0x000, 0x002, 0x000, 0x001, 0x000, 0x000, 0x001, 0x001, 0x002, 0x004, 0x002, 0x001, 0x001,
+ 0x002, 0x000, 0x000, 0x000, 0x001, 0x005, 0x001, 0x000, 0x002, 0x000, 0x000, 0x000, 0x000,
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x004, 0x000, 0x002, 0x000, 0x001, 0x003,
+ 0x003, 0x001, 0x000, 0x004, 0x000, 0x001, 0x001, 0x001, 0x001, 0x001, 0x004, 0x000, 0x000,
+ 0x003, 0x001, 0x003, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x002,
+ 0x000, 0x000, 0x001, 0x003, 0x002, 0x001, 0x002, 0x001, 0x009, 0x001, 0x000, 0x001, 0x003,
+ 0x004, 0x000, 0x000, 0x000, 0x002, 0x000, 0x003, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000,
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x002, 0x001, 0x004, 0x001, 0x001, 0x001, 0x002,
+ 0x001, 0x006, 0x001, 0x001, 0x002, 0x001, 0x000, 0x000, 0x000, 0x003, 0x001, 0x000, 0x005,
+ 0x001,
];
pub(crate) const CJK_COMPAT_VARIANTS_DECOMPOSED_KV: &[(u32, (u16, u16))] = &[
- (0xfa08, (1448, 2)),
- (0x2f825, (280, 2)),
- (0x2f838, (1796, 2)),
- (0x2f95b, (1192, 2)),
- (0x2f8fb, (1856, 2)),
- (0x2f83a, (340, 2)),
- (0x2f8a7, (636, 2)),
- (0x2f856, (422, 2)),
- (0x2f810, (208, 2)),
- (0xfa8b, (668, 2)),
- (0xfa7a, (378, 2)),
- (0x2f9ef, (118, 2)),
- (0x2f959, (1188, 2)),
- (0xf9c8, (804, 2)),
- (0xf9c4, (1770, 2)),
- (0x2f833, (328, 2)),
- (0xf96c, (430, 2)),
- (0xf9a1, (1486, 2)),
- (0xf906, (336, 2)),
- (0x2fa01, (1988, 2)),
- (0xf94c, (844, 2)),
- (0xf90f, (1274, 2)),
- (0x2f8dd, (1842, 2)),
- (0xfa55, (1194, 2)),
- (0x2f860, (1800, 2)),
- (0x2f999, (1350, 2)),
- (0xfabc, (1510, 2)),
- (0x2f9b9, (1428, 2)),
- (0xf943, (582, 2)),
- (0x2f952, (1900, 2)),
- (0x2f8f1, (856, 2)),
- (0xf99c, (256, 2)),
- (0xf969, (748, 2)),
- (0xf98d, (1568, 2)),
- (0xfa7f, (460, 2)),
- (0x2f9d6, (1542, 2)),
- (0x2f81b, (236, 2)),
- (0xfa9d, (1126, 2)),
- (0x2f8e4, (826, 2)),
- (0xfa94, (800, 2)),
- (0x2f890, (580, 2)),
- (0xf93d, (1244, 2)),
- (0x2f924, (1016, 2)),
- (0x2f983, (1308, 2)),
- (0xfa2f, (1656, 2)),
- (0x2f891, (1818, 2)),
- (0x2f934, (1072, 2)),
- (0x2f835, (972, 2)),
- (0x2f899, (590, 2)),
- (0x2f8ae, (660, 2)),
- (0xf9d6, (922, 2)),
- (0x2f9a0, (1358, 2)),
- (0xfac2, (1562, 2)),
- (0x2f851, (442, 2)),
- (0x2f804, (166, 2)),
- (0x2f90d, (1860, 2)),
- (0xf95e, (148, 2)),
- (0x2f8da, (794, 2)),
- (0x2f885, (550, 2)),
- (0x2f96a, (1232, 2)),
- (0xf907, (1774, 2)),
- (0xf9f9, (1218, 2)),
- (0xf94b, (514, 2)),
- (0x2f915, (962, 2)),
- (0xf9f1, (1654, 2)),
- (0x2f86d, (490, 2)),
- (0x2f921, (1010, 2)),
- (0xfa96, (870, 2)),
- (0xf9e0, (758, 2)),
- (0xf921, (532, 2)),
- (0x2f99f, (1386, 2)),
- (0x2f8b2, (678, 2)),
- (0xfab1, (1266, 2)),
- (0xfa6c, (1868, 2)),
- (0x2f819, (162, 2)),
- (0x2f910, (1862, 2)),
- (0x2f8dc, (798, 2)),
- (0x2f9d3, (1962, 2)),
- (0x2f8a3, (622, 2)),
- (0xf915, (892, 2)),
- (0x2f88a, (20, 2)),
- (0xf9f6, (1314, 2)),
- (0x2f9f1, (1976, 2)),
- (0xf98e, (556, 2)),
- (0xfad5, (1896, 2)),
- (0xf93b, (1132, 2)),
- (0x2f91e, (994, 2)),
- (0xf9eb, (308, 2)),
- (0xfa42, (754, 2)),
- (0x2f958, (78, 2)),
- (0xfa19, (1164, 2)),
- (0xfaaa, (1118, 2)),
- (0x2f949, (70, 2)),
- (0x2f978, (1276, 2)),
- (0x2f8a9, (638, 2)),
- (0x2f90a, (50, 2)),
- (0x2f89a, (594, 2)),
- (0x2f8b5, (688, 2)),
- (0x2f94c, (74, 2)),
- (0xfa43, (768, 2)),
- (0xf997, (1296, 2)),
- (0x2f8ba, (698, 2)),
- (0xfa00, (252, 2)),
- (0xfac3, (1582, 2)),
- (0x2f948, (1122, 2)),
- (0x2f9f4, (540, 2)),
- (0xfa99, (938, 2)),
- (0x2f976, (1272, 2)),
- (0xf978, (214, 2)),
- (0x2f8fe, (878, 2)),
- (0x2f8e3, (1846, 2)),
- (0xf919, (1602, 2)),
- (0x2f8ef, (854, 2)),
- (0xf939, (1730, 2)),
- (0x2f8c9, (746, 2)),
- (0x2f844, (370, 2)),
- (0xfabb, (1490, 2)),
- (0x2f9c4, (1452, 2)),
- (0x2f984, (96, 2)),
- (0x2f802, (152, 2)),
- (0xfa15, (246, 2)),
- (0xf9be, (750, 2)),
- (0xf942, (440, 2)),
- (0x2f852, (414, 2)),
- (0xfaae, (1216, 2)),
- (0x2fa17, (1756, 2)),
- (0x2f92d, (58, 2)),
- (0x2f83f, (354, 2)),
- (0xf90c, (456, 2)),
- (0xf931, (848, 2)),
- (0xf9c1, (1094, 2)),
- (0x2f873, (506, 2)),
- (0x2f965, (1914, 2)),
- (0xf902, (1554, 2)),
- (0x2f805, (176, 2)),
- (0x2f8ca, (1832, 2)),
- (0xf9c7, (270, 2)),
- (0x2f8f4, (864, 2)),
- (0xfa0d, (390, 2)),
- (0xfa5c, (1316, 2)),
- (0xfa4c, (1150, 2)),
- (0x2f865, (466, 2)),
- (0x2f876, (14, 2)),
- (0x2f9d7, (1544, 2)),
- (0xf975, (712, 2)),
- (0x2f9bb, (1436, 2)),
- (0x2f9d2, (1526, 2)),
- (0xf9ed, (346, 2)),
- (0x2f9b4, (1416, 2)),
- (0xfa6d, (1324, 2)),
- (0xf9e5, (1086, 2)),
- (0x2f8d8, (788, 2)),
- (0x2f93d, (1886, 2)),
- (0xfa03, (1224, 2)),
- (0xf9a0, (1454, 2)),
- (0x2fa12, (1994, 2)),
- (0xfa63, (1512, 2)),
- (0xf920, (1744, 2)),
- (0xf91f, (1408, 2)),
- (0x2f97d, (1294, 2)),
- (0xf990, (676, 2)),
- (0xfa57, (1252, 2)),
- (0x2f975, (1926, 2)),
- (0xfad8, (1768, 2)),
- (0xfab3, (1356, 2)),
- (0x2f9f3, (1660, 2)),
- (0xf9fb, (978, 2)),
- (0xf918, (1380, 2)),
- (0x2f8c3, (728, 2)),
- (0xf9ca, (900, 2)),
- (0xf952, (286, 2)),
- (0x2fa0b, (1732, 2)),
- (0x2f941, (1890, 2)),
- (0x2f862, (468, 2)),
- (0x2f8ff, (890, 2)),
- (0x2f85d, (450, 2)),
- (0xf9d9, (632, 2)),
- (0x2f855, (412, 2)),
- (0x2f98f, (1334, 2)),
- (0xf9d4, (184, 2)),
- (0xf99e, (360, 2)),
- (0x2f850, (254, 2)),
- (0xfa22, (1500, 2)),
- (0x2f94f, (1134, 2)),
- (0xfaa9, (1120, 2)),
- (0xfa71, (234, 2)),
- (0xf95d, (1504, 2)),
- (0x2f8bd, (720, 2)),
- (0x2fa02, (1706, 2)),
- (0x2f93f, (64, 2)),
- (0x2f808, (186, 2)),
- (0x2f950, (1142, 2)),
- (0x2f933, (60, 2)),
- (0x2f853, (416, 2)),
- (0x2f8f0, (1850, 2)),
- (0xf967, (140, 2)),
- (0xfa16, (1026, 2)),
- (0xfaa6, (1100, 2)),
- (0x2f8b3, (680, 2)),
- (0x2f9f7, (1982, 2)),
- (0xf986, (1636, 2)),
- (0x2f99d, (1364, 2)),
- (0x2f9b8, (1422, 2)),
- (0xf998, (1558, 2)),
- (0x2f82b, (306, 2)),
- (0x2f872, (504, 2)),
- (0xfab9, (1488, 2)),
- (0xfa9b, (964, 2)),
- (0xf9b0, (1292, 2)),
- (0xf98b, (776, 2)),
- (0xfad1, (1844, 2)),
- (0xf917, (1044, 2)),
- (0x2f989, (1838, 2)),
- (0x2f866, (476, 2)),
- (0xf932, (1000, 2)),
- (0x2fa0e, (134, 2)),
- (0xfa07, (1566, 2)),
- (0xf9bd, (510, 2)),
- (0x2f88c, (562, 2)),
- (0xfa56, (1204, 2)),
- (0xfa64, (1536, 2)),
- (0xfa04, (488, 2)),
- (0xfa9e, (1008, 2)),
- (0x2f9e0, (1968, 2)),
- (0x2f89d, (604, 2)),
- (0x2f9ee, (1634, 2)),
- (0xf9db, (1036, 2)),
- (0xf923, (1400, 2)),
- (0x2f841, (362, 2)),
- (0x2f81a, (232, 2)),
- (0xf911, (1440, 2)),
- (0xfaad, (1206, 2)),
- (0xfac1, (1540, 2)),
- (0x2f928, (1032, 2)),
- (0x2f935, (1878, 2)),
- (0x2f8d5, (772, 2)),
- (0xf92e, (238, 2)),
- (0xfa59, (1262, 2)),
- (0x2f96b, (1918, 2)),
- (0x2f8b9, (702, 2)),
- (0x2f877, (512, 2)),
- (0x2fa00, (1698, 2)),
- (0xfa05, (894, 2)),
- (0xf9e8, (1462, 2)),
- (0x2f8c6, (730, 2)),
- (0xf97a, (820, 2)),
- (0x2f9ea, (1620, 2)),
- (0xf944, (1214, 2)),
- (0x2f8c4, (732, 2)),
- (0x2f9cd, (114, 2)),
- (0x2f8e5, (816, 2)),
- (0x2f9d9, (1790, 2)),
- (0x2f980, (1836, 2)),
- (0x2f9a8, (1390, 2)),
- (0x2f92f, (1054, 2)),
- (0x2f951, (76, 2)),
- (0x2f9f9, (124, 2)),
- (0xfab4, (1376, 2)),
- (0xf985, (1146, 2)),
- (0x2f829, (300, 2)),
- (0x2f8a2, (26, 2)),
- (0x2f9c3, (1450, 2)),
- (0x2f936, (1076, 2)),
- (0x2f9af, (104, 2)),
- (0xfa77, (296, 2)),
- (0xf956, (1184, 2)),
- (0xfa5f, (1384, 2)),
- (0x2f93b, (1882, 2)),
- (0xf914, (838, 2)),
- (0x2f994, (1340, 2)),
- (0x2f91b, (1784, 2)),
- (0x2f880, (538, 2)),
- (0x2f956, (1176, 2)),
- (0xf958, (1378, 2)),
- (0x2f99b, (1362, 2)),
- (0x2fa06, (1718, 2)),
- (0xfabf, (1514, 2)),
- (0x2f8b6, (696, 2)),
- (0x2f8a0, (618, 2)),
- (0xfa87, (640, 2)),
- (0x2f8ea, (836, 2)),
- (0x2f867, (10, 2)),
- (0xf97d, (1492, 2)),
- (0xf968, (884, 2)),
- (0xfa5a, (1268, 2)),
- (0xf97b, (1228, 2)),
- (0x2fa10, (1992, 2)),
- (0xfa2b, (1710, 2)),
- (0xfa75, (220, 2)),
- (0xf94d, (920, 2)),
- (0xfad4, (68, 2)),
- (0x2f8cc, (780, 2)),
- (0xfa8a, (644, 2)),
- (0xf9f4, (808, 2)),
- (0xfac6, (1650, 2)),
- (0xfa9c, (992, 2)),
- (0xfa10, (426, 2)),
- (0xf9e2, (828, 2)),
- (0xf947, (1138, 2)),
- (0xf941, (1494, 2)),
- (0xfa4e, (1152, 2)),
- (0x2f9da, (1548, 2)),
- (0x2f893, (1318, 2)),
- (0xf96f, (1484, 2)),
- (0xf983, (752, 2)),
- (0xf9f5, (918, 2)),
- (0xf962, (1082, 2)),
- (0x2f968, (1230, 2)),
- (0x2f923, (1872, 2)),
- (0x2fa18, (1758, 2)),
- (0x2f930, (1060, 2)),
- (0xfa90, (744, 2)),
- (0xfa54, (1186, 2)),
- (0xf9d8, (596, 2)),
- (0x2f9e4, (1598, 2)),
- (0x2fa05, (1716, 2)),
- (0x2f964, (82, 2)),
- (0xf99f, (982, 2)),
- (0x2f94b, (72, 2)),
- (0x2f9a9, (1392, 2)),
- (0xfa0c, (198, 2)),
- (0x2f986, (478, 2)),
- (0xfa85, (602, 2)),
- (0x2f95f, (1200, 2)),
- (0xf9f8, (1202, 2)),
- (0xf9b4, (1696, 2)),
- (0x2f82e, (316, 2)),
- (0xfad9, (1772, 2)),
- (0x2f937, (1880, 2)),
- (0xf9cf, (1234, 2)),
- (0xfaa1, (1058, 2)),
- (0x2f917, (970, 2)),
- (0xfaa5, (1092, 2)),
- (0xfa3b, (516, 2)),
- (0x2f88d, (564, 2)),
- (0x2f906, (1858, 2)),
- (0x2f901, (912, 2)),
- (0x2f97a, (1290, 2)),
- (0xfa60, (1468, 2)),
- (0x2f92c, (56, 2)),
- (0x2f80a, (196, 2)),
- (0x2f99a, (1360, 2)),
- (0x2fa13, (1996, 2)),
- (0x2f938, (1084, 2)),
- (0x2f813, (2, 2)),
- (0x2f831, (324, 2)),
- (0xfa1c, (1678, 2)),
- (0xfacc, (1702, 2)),
- (0xfa5e, (1330, 2)),
- (0x2f995, (1342, 2)),
- (0x2f8d3, (226, 2)),
- (0xfacd, (1726, 2)),
- (0x2f81d, (248, 2)),
- (0x2f97b, (1930, 2)),
- (0xfa3a, (432, 2)),
- (0xf9c6, (1640, 2)),
- (0xfabd, (1506, 2)),
- (0xf92d, (170, 2)),
- (0xf99b, (1628, 2)),
- (0xf91d, (852, 2)),
- (0x2f84d, (410, 2)),
- (0x2f8ad, (658, 2)),
- (0xf9d3, (1648, 2)),
- (0x2f843, (366, 2)),
- (0xf97c, (1326, 2)),
- (0xfa30, (174, 2)),
- (0x2f858, (434, 2)),
- (0x2f8a5, (624, 2)),
- (0x2f988, (1938, 2)),
- (0x2f9e1, (1970, 2)),
- (0xfa74, (200, 2)),
- (0x2f882, (546, 2)),
- (0x2f879, (526, 2)),
- (0x2f8b7, (704, 2)),
- (0xf940, (1746, 2)),
- (0x2f9e5, (1972, 2)),
- (0x2f9cf, (1482, 2)),
- (0xfa8e, (722, 2)),
- (0x2f90c, (936, 2)),
- (0x2f985, (1310, 2)),
- (0x2f849, (388, 2)),
- (0x2f960, (80, 2)),
- (0x2f8c2, (30, 2)),
- (0x2f85f, (462, 2)),
- (0x2f916, (52, 2)),
- (0xf9fa, (1022, 2)),
- (0x2f824, (8, 2)),
- (0xf936, (1414, 2)),
- (0x2f94a, (1124, 2)),
- (0x2f80e, (204, 2)),
- (0x2f913, (968, 2)),
- (0x2f94d, (1898, 2)),
- (0xf999, (1388, 2)),
- (0x2f979, (1282, 2)),
- (0x2f926, (1874, 2)),
- (0xf9ea, (1662, 2)),
- (0xfa3f, (650, 2)),
- (0x2f83b, (342, 2)),
- (0xfa5b, (1286, 2)),
- (0xfa93, (790, 2)),
- (0xf913, (1586, 2)),
- (0xf98c, (860, 2)),
- (0x2f8c0, (718, 2)),
- (0xfad7, (1964, 2)),
- (0xf98a, (272, 2)),
- (0xfa26, (1596, 2)),
- (0xfabe, (1496, 2)),
- (0x2f977, (1928, 2)),
- (0xf954, (244, 2)),
- (0xf91a, (1720, 2)),
- (0x2f8cd, (760, 2)),
- (0x2f8a4, (1822, 2)),
- (0xfa84, (592, 2)),
- (0x2f85e, (452, 2)),
- (0xfa9f, (1020, 2)),
- (0xf9b1, (1614, 2)),
- (0x2f9ca, (4, 2)),
- (0xfac4, (1604, 2)),
- (0xf927, (1446, 2)),
- (0xfa01, (558, 2)),
- (0xf929, (784, 2)),
- (0xf9f3, (1750, 2)),
- (0x2f9e6, (1600, 2)),
- (0xfa70, (142, 2)),
- (0x2f820, (262, 2)),
- (0xf9a9, (406, 2)),
- (0x2f9bf, (108, 2)),
- (0x2f922, (1012, 2)),
- (0x2f9de, (1556, 2)),
- (0x2f8ec, (1848, 2)),
- (0xf9b5, (172, 2)),
- (0x2f9b7, (1424, 2)),
- (0x2f981, (92, 2)),
- (0xfa31, (194, 2)),
- (0x2f9c1, (1444, 2)),
- (0x2f874, (588, 2)),
- (0xf9d0, (1704, 2)),
- (0xf94a, (438, 2)),
- (0x2f998, (1346, 2)),
- (0x2f91c, (986, 2)),
- (0x2f9df, (1564, 2)),
- (0x2f859, (1798, 2)),
- (0x2f883, (16, 2)),
- (0xf9cc, (1048, 2)),
- (0x2f9b5, (1418, 2)),
- (0x2f970, (1264, 2)),
- (0x2f814, (210, 2)),
- (0x2f9ff, (1694, 2)),
- (0x2f84c, (398, 2)),
- (0x2f9a4, (1942, 2)),
- (0x2f966, (1222, 2)),
- (0xfa1e, (1280, 2)),
- (0x2fa0c, (1736, 2)),
- (0x2f863, (470, 2)),
- (0xfaa2, (1070, 2)),
- (0x2f91a, (980, 2)),
- (0x2f8f8, (1808, 2)),
- (0x2f8a6, (634, 2)),
- (0x2f895, (586, 2)),
- (0xf90b, (376, 2)),
- (0x2f993, (1338, 2)),
- (0x2f8be, (1830, 2)),
- (0xf948, (1532, 2)),
- (0x2f80d, (1788, 2)),
- (0x2f81f, (6, 2)),
- (0xf9e4, (1046, 2)),
- (0x2f823, (268, 2)),
- (0x2f9fa, (1684, 2)),
- (0x2f8fa, (876, 2)),
- (0xfa6a, (1700, 2)),
- (0x2f9f0, (1638, 2)),
- (0x2f967, (84, 2)),
- (0xfa8f, (726, 2)),
- (0xfa06, (774, 2)),
- (0xf982, (578, 2)),
- (0xf989, (1754, 2)),
- (0x2f990, (1332, 2)),
- (0xfac9, (1682, 2)),
- (0x2f8ed, (850, 2)),
- (0x2f822, (266, 2)),
- (0xf9cb, (932, 2)),
- (0xfa4d, (1154, 2)),
- (0x2f944, (1894, 2)),
- (0x2f9e8, (1622, 2)),
- (0x2f8d2, (224, 2)),
- (0x2f97c, (1932, 2)),
- (0xfa68, (1664, 2)),
- (0xfa53, (1172, 2)),
- (0x2f8f5, (872, 2)),
- (0x2f945, (1112, 2)),
- (0xfa95, (862, 2)),
- (0xfa2e, (1592, 2)),
- (0xf91b, (154, 2)),
- (0x2f837, (334, 2)),
- (0x2f894, (584, 2)),
- (0x2fa09, (1990, 2)),
- (0x2f974, (90, 2)),
- (0xf9ba, (156, 2)),
- (0x2f80b, (190, 2)),
- (0xfaca, (1688, 2)),
- (0x2f969, (1226, 2)),
- (0x2f8b1, (674, 2)),
- (0x2f8d1, (34, 2)),
- (0x2f91d, (1866, 2)),
- (0x2f9d4, (1528, 2)),
- (0x2fa15, (1752, 2)),
- (0x2f954, (1902, 2)),
- (0xfa81, (482, 2)),
- (0x2f9a5, (1946, 2)),
- (0x2f90f, (954, 2)),
- (0xf92a, (908, 2)),
- (0x2fa19, (1760, 2)),
- (0x2f943, (1892, 2)),
- (0x2f947, (1116, 2)),
- (0x2fa0a, (1728, 2)),
- (0x2f963, (1210, 2)),
- (0xf9bb, (192, 2)),
- (0x2f8ac, (662, 2)),
- (0xf9c5, (766, 2)),
- (0x2f97e, (1934, 2)),
- (0x2f889, (1814, 2)),
- (0x2f8e9, (834, 2)),
- (0xf9da, (814, 2)),
- (0xface, (1778, 2)),
- (0x2f920, (1004, 2)),
- (0xf951, (1642, 2)),
- (0xf9bc, (500, 2)),
- (0x2f940, (1108, 2)),
- (0x2f84e, (400, 2)),
- (0xfa48, (990, 2)),
- (0x2fa08, (130, 2)),
- (0xf9e6, (1270, 2)),
- (0x2f8c8, (742, 2)),
- (0xf912, (1464, 2)),
- (0x2f8f7, (1852, 2)),
- (0x2f904, (914, 2)),
- (0xfa76, (278, 2)),
- (0x2f8e8, (832, 2)),
- (0x2f9e2, (1588, 2)),
- (0xf903, (1534, 2)),
- (0xfa9a, (950, 2)),
- (0xf996, (1250, 2)),
- (0x2f8db, (802, 2)),
- (0xfa4a, (1050, 2)),
- (0xfa6b, (616, 2)),
- (0x2f8fd, (886, 2)),
- (0xfa79, (368, 2)),
- (0xf987, (1724, 2)),
- (0x2f8f2, (48, 2)),
- (0xf90d, (672, 2)),
- (0xf922, (958, 2)),
- (0xfa88, (630, 2)),
- (0xf91c, (320, 2)),
- (0x2f870, (502, 2)),
- (0x2f9ac, (1398, 2)),
- (0x2f839, (338, 2)),
- (0x2fa03, (128, 2)),
- (0x2f854, (418, 2)),
- (0x2f92a, (54, 2)),
- (0xfa35, (312, 2)),
- (0x2f9e7, (1616, 2)),
- (0x2f9a6, (1944, 2)),
- (0xfaaf, (1240, 2)),
- (0x2f911, (1864, 2)),
- (0x2f95d, (1908, 2)),
- (0x2f89c, (598, 2)),
- (0xfa45, (910, 2)),
- (0xfa1b, (1174, 2)),
- (0xfa3d, (620, 2)),
- (0xf980, (350, 2)),
- (0xfa8c, (684, 2)),
- (0x2f9e9, (1624, 2)),
- (0x2f9f8, (122, 2)),
- (0x2f902, (904, 2)),
- (0x2fa1d, (2002, 2)),
- (0xfab6, (1470, 2)),
- (0xf995, (1180, 2)),
- (0x2f832, (326, 2)),
- (0x2f955, (1904, 2)),
- (0x2f8fc, (882, 2)),
- (0x2f875, (508, 2)),
- (0x2f82a, (302, 2)),
- (0x2f811, (218, 2)),
- (0x2f868, (12, 2)),
- (0x2f925, (1018, 2)),
- (0xfa20, (1406, 2)),
- (0x2f83e, (352, 2)),
- (0xf9af, (1278, 2)),
- (0x2f997, (1940, 2)),
- (0x2f9ec, (1632, 2)),
- (0xf9ab, (542, 2)),
- (0xf935, (1404, 2)),
- (0xfa80, (474, 2)),
- (0x2f95c, (1906, 2)),
- (0xfa92, (786, 2)),
- (0xf95b, (692, 2)),
- (0xf93e, (1366, 2)),
- (0xf9de, (344, 2)),
- (0xf9f0, (1402, 2)),
- (0x2f847, (380, 2)),
- (0xfa98, (944, 2)),
- (0xf90e, (1096, 2)),
- (0xfa4f, (1156, 2)),
- (0xfaa4, (1090, 2)),
- (0x2f9c0, (1442, 2)),
- (0x2f8bf, (724, 2)),
- (0xfa62, (1508, 2)),
- (0xf9b6, (1178, 2)),
- (0x2f826, (284, 2)),
- (0xf9c9, (810, 2)),
- (0x2f992, (276, 2)),
- (0x2f8e1, (818, 2)),
- (0xf959, (1646, 2)),
- (0x2f892, (1820, 2)),
- (0xfa18, (1148, 2)),
- (0x2f87d, (1812, 2)),
- (0xf970, (868, 2)),
- (0x2f92b, (1040, 2)),
- (0x2fa04, (1714, 2)),
- (0xfa89, (652, 2)),
- (0x2f9e3, (1594, 2)),
- (0x2f9c2, (110, 2)),
- (0xfacb, (1690, 2)),
- (0x2f9c8, (112, 2)),
- (0x2f908, (928, 2)),
- (0x2f86f, (498, 2)),
- (0x2f98a, (1840, 2)),
- (0xf9a8, (164, 2)),
- (0x2f8c7, (32, 2)),
- (0x2fa16, (138, 2)),
- (0xfa4b, (1136, 2)),
- (0x2f878, (522, 2)),
- (0x2f8bb, (706, 2)),
- (0x2f816, (1786, 2)),
- (0x2f86a, (484, 2)),
- (0xf9c3, (1584, 2)),
- (0xf945, (1300, 2)),
- (0x2f9fe, (1692, 2)),
- (0xfa86, (626, 2)),
- (0x2f82c, (310, 2)),
- (0xf988, (1748, 2)),
- (0xfac5, (1618, 2)),
- (0xfa66, (1574, 2)),
- (0x2f840, (358, 2)),
- (0xf9ee, (998, 2)),
- (0x2f830, (322, 2)),
- (0x2f914, (966, 2)),
- (0x2f942, (1888, 2)),
- (0xfaa3, (1074, 2)),
- (0xf974, (1344, 2)),
- (0x2f807, (182, 2)),
- (0x2f905, (916, 2)),
- (0x2f9b2, (106, 2)),
- (0x2f887, (554, 2)),
- (0x2f912, (956, 2)),
- (0xf9ae, (1056, 2)),
- (0xf96a, (1236, 2)),
- (0xf9b7, (1606, 2)),
- (0x2f932, (1068, 2)),
- (0x2f98d, (1570, 2)),
- (0xfa25, (1578, 2)),
- (0xf993, (988, 2)),
- (0x2f9f5, (1672, 2)),
- (0xf9df, (518, 2)),
- (0x2f9c7, (1460, 2)),
- (0x2f996, (1348, 2)),
- (0x2f842, (364, 2)),
- (0x2f869, (480, 2)),
- (0x2f861, (1802, 2)),
- (0x2f8af, (664, 2)),
- (0x2f8c5, (736, 2)),
- (0x2f962, (1208, 2)),
- (0x2f98b, (1320, 2)),
- (0x2f9a1, (1368, 2)),
- (0xfad2, (42, 2)),
- (0x2f9ae, (102, 2)),
- (0x2f8bc, (710, 2)),
- (0xf9b3, (1676, 2)),
- (0x2f88f, (2000, 2)),
- (0xf965, (180, 2)),
- (0x2f953, (1160, 2)),
- (0x2f84b, (408, 2)),
- (0x2f90b, (940, 2)),
- (0x2f834, (1794, 2)),
- (0xfa2d, (1740, 2)),
- (0x2f8e6, (830, 2)),
- (0xf971, (1572, 2)),
- (0x2fa1c, (1766, 2)),
- (0xfa61, (1478, 2)),
- (0x2f98e, (98, 2)),
- (0x2f9c9, (1466, 2)),
- (0xfa0b, (574, 2)),
- (0x2f86b, (486, 2)),
- (0xf949, (1670, 2)),
- (0xfac7, (1666, 2)),
- (0xf96e, (1382, 2)),
- (0xf966, (600, 2)),
- (0xf955, (242, 2)),
- (0x2f8d0, (36, 2)),
- (0x2f93a, (1088, 2)),
- (0xf9ff, (260, 2)),
- (0xfac8, (1680, 2)),
- (0xf93c, (1168, 2)),
- (0x2f845, (372, 2)),
- (0x2f9ce, (116, 2)),
- (0xfad6, (1916, 2)),
- (0x2f95a, (1190, 2)),
- (0xf9e9, (1608, 2)),
- (0x2f91f, (1870, 2)),
- (0xf950, (1260, 2)),
- (0x2f8c1, (714, 2)),
- (0x2f9ad, (1948, 2)),
- (0x2f97f, (1298, 2)),
- (0xfa83, (576, 2)),
- (0x2f82d, (314, 2)),
- (0x2f8df, (812, 2)),
- (0x2f87c, (530, 2)),
- (0xfa58, (1258, 2)),
- (0x2f846, (374, 2)),
- (0xfa37, (396, 2)),
- (0xfa78, (384, 2)),
- (0x2f9f6, (1978, 2)),
- (0x2f99e, (1374, 2)),
- (0xfad3, (66, 2)),
- (0xfad0, (1824, 2)),
- (0xf9d5, (528, 2)),
- (0xfab7, (1474, 2)),
- (0xfa09, (1644, 2)),
- (0x2f8ce, (38, 2)),
- (0xf957, (1246, 2)),
- (0xf991, (734, 2)),
- (0xfab8, (1480, 2)),
- (0x2f8eb, (846, 2)),
- (0x2f9b1, (1952, 2)),
- (0xfa2a, (1708, 2)),
- (0x2f93c, (1884, 2)),
- (0xfa72, (212, 2)),
- (0x2f96f, (1256, 2)),
- (0x2f8d6, (1304, 2)),
- (0x2f886, (552, 2)),
- (0xf9fd, (160, 2)),
- (0xf9c0, (996, 2)),
- (0x2f9be, (1438, 2)),
- (0xf9b8, (1658, 2)),
- (0x2f81e, (250, 2)),
- (0xf900, (1524, 2)),
- (0x2f98c, (1322, 2)),
- (0x2f93e, (62, 2)),
- (0xfaa0, (1028, 2)),
- (0x2f8f3, (858, 2)),
- (0xf961, (1034, 2)),
- (0x2f83d, (348, 2)),
- (0x2f8f6, (874, 2)),
- (0xf9d2, (682, 2)),
- (0x2f84a, (392, 2)),
- (0xf9e1, (796, 2)),
- (0xfa7c, (428, 2)),
- (0x2f9aa, (1396, 2)),
- (0xfa51, (1162, 2)),
- (0x2f8b8, (1828, 2)),
- (0x2f931, (1062, 2)),
- (0xfa7e, (454, 2)),
- (0xf9a6, (1212, 2)),
- (0xf976, (1080, 2)),
- (0xfa97, (902, 2)),
- (0x2f8e7, (44, 2)),
- (0x2f88b, (560, 2)),
- (0x2f9c6, (1458, 2)),
- (0x2f8d9, (792, 2)),
- (0xfa52, (1170, 2)),
- (0x2fa0d, (132, 2)),
- (0x2f900, (898, 2)),
- (0x2f836, (332, 2)),
- (0xf9ad, (1042, 2)),
- (0xf934, (1284, 2)),
- (0xfab0, (1254, 2)),
- (0x2f809, (188, 2)),
- (0x2f9f2, (120, 2)),
- (0x2f86c, (1804, 2)),
- (0xf9fc, (1516, 2)),
- (0x2f95e, (1910, 2)),
- (0xf9a3, (608, 2)),
- (0x2f971, (88, 2)),
- (0x2f89b, (24, 2)),
- (0xf977, (158, 2)),
- (0xfa1a, (1166, 2)),
- (0xfa3c, (520, 2)),
- (0x2f9bd, (1432, 2)),
- (0xf928, (568, 2)),
- (0x2f864, (472, 2)),
- (0x2f9d1, (1522, 2)),
- (0x2f982, (1306, 2)),
- (0xf9dc, (1652, 2)),
- (0x2f972, (1922, 2)),
- (0x2f8cb, (756, 2)),
- (0xf960, (612, 2)),
- (0xf992, (952, 2)),
- (0x2f8b4, (686, 2)),
- (0x2f803, (1780, 2)),
- (0x2f818, (230, 2)),
- (0xf9f7, (1198, 2)),
- (0x2f827, (292, 2)),
- (0x2f9fb, (1984, 2)),
- (0x2f987, (1936, 2)),
- (0xfaab, (1140, 2)),
- (0xfa39, (424, 2)),
- (0x2fa07, (1722, 2)),
- (0xf9b9, (628, 2)),
- (0x2f86e, (492, 2)),
- (0x2f8e0, (806, 2)),
- (0xfaa7, (1102, 2)),
- (0x2f8a8, (642, 2)),
- (0xfa0a, (1476, 2)),
- (0x2fa14, (1998, 2)),
- (0x2f888, (18, 2)),
- (0x2f9a2, (1370, 2)),
- (0x2f848, (386, 2)),
- (0xfaa8, (1106, 2)),
- (0xfa67, (1580, 2)),
- (0xf946, (1014, 2)),
- (0x2f946, (1114, 2)),
- (0xfa7d, (436, 2)),
- (0xfa1d, (1220, 2)),
- (0x2fa11, (136, 2)),
- (0xfa2c, (1712, 2)),
- (0xf924, (1472, 2)),
- (0x2f96e, (1248, 2)),
- (0xf96d, (1110, 2)),
- (0xf95a, (1518, 2)),
- (0x2f85c, (448, 2)),
- (0xf92b, (1024, 2)),
- (0xfac0, (1520, 2)),
- (0xfa8d, (716, 2)),
- (0x2f9d8, (1966, 2)),
- (0xf938, (1674, 2)),
- (0x2f821, (264, 2)),
- (0xf9aa, (496, 2)),
- (0xf9ce, (1130, 2)),
- (0xfa47, (948, 2)),
- (0x2f8aa, (648, 2)),
- (0x2f918, (976, 2)),
- (0x2f8ee, (46, 2)),
- (0xf96b, (330, 2)),
- (0xf909, (458, 2)),
- (0x2f87f, (534, 2)),
- (0xf908, (1776, 2)),
- (0xfa5d, (1328, 2)),
- (0xf9ac, (614, 2)),
- (0x2f896, (22, 2)),
- (0x2f9b0, (1950, 2)),
- (0xf9a7, (1030, 2)),
- (0xf99d, (274, 2)),
- (0x2f957, (1182, 2)),
- (0xf905, (144, 2)),
- (0x2f9bc, (1430, 2)),
- (0x2f8f9, (1854, 2)),
- (0x2f8b0, (670, 2)),
- (0x2f881, (544, 2)),
- (0x2fa1b, (1764, 2)),
- (0x2f9dd, (1792, 2)),
- (0x2f9ed, (1974, 2)),
- (0x2f871, (1806, 2)),
- (0x2f8ab, (654, 2)),
- (0x2f812, (1782, 2)),
- (0xf933, (1104, 2)),
- (0xf9f2, (1734, 2)),
- (0xf984, (960, 2)),
- (0x2f90e, (924, 2)),
- (0xfab2, (1288, 2)),
- (0xfa32, (202, 2)),
- (0x2f96d, (86, 2)),
- (0x2f9a7, (100, 2)),
- (0xf94f, (1238, 2)),
- (0x2fa0f, (1738, 2)),
- (0xf925, (690, 2)),
- (0xfa91, (764, 2)),
- (0xf972, (880, 2)),
- (0xf90a, (1612, 2)),
- (0xfa02, (694, 2)),
- (0xf92f, (288, 2)),
- (0xf9dd, (258, 2)),
- (0xfa17, (1098, 2)),
- (0xf93f, (1626, 2)),
- (0x2f898, (1920, 2)),
- (0x2f907, (896, 2)),
- (0xf9ec, (934, 2)),
- (0xf9e3, (888, 2)),
- (0xfab5, (1434, 2)),
- (0xfa40, (666, 2)),
- (0x2f815, (222, 2)),
- (0x2f9db, (1546, 2)),
- (0xf91e, (1002, 2)),
- (0xf92c, (1590, 2)),
- (0x2f884, (548, 2)),
- (0xfa46, (926, 2)),
- (0x2f9b3, (1412, 2)),
- (0x2f85b, (446, 2)),
- (0xf9cd, (1078, 2)),
- (0xf93a, (1742, 2)),
- (0xf97e, (1610, 2)),
- (0xfa3e, (646, 2)),
- (0x2f9eb, (1630, 2)),
- (0x2f8e2, (824, 2)),
- (0x2f9b6, (1420, 2)),
- (0xf916, (984, 2)),
- (0x2f8de, (40, 2)),
- (0xf98f, (656, 2)),
- (0xfa12, (762, 2)),
- (0xfa44, (822, 2)),
- (0xf981, (464, 2)),
- (0x2f9dc, (1552, 2)),
- (0xf95c, (840, 2)),
- (0xf937, (1550, 2)),
- (0x2f87a, (524, 2)),
- (0x2f903, (906, 2)),
- (0x2f9c5, (1956, 2)),
- (0x2f8cf, (770, 2)),
- (0x2f909, (930, 2)),
- (0x2f991, (1336, 2)),
- (0xfa65, (1538, 2)),
- (0xfa73, (168, 2)),
- (0x2f88e, (570, 2)),
- (0xf9ef, (1066, 2)),
- (0x2f9cb, (1958, 2)),
- (0x2f9a3, (1372, 2)),
- (0x2f99c, (1352, 2)),
- (0x2f919, (974, 2)),
- (0x2f857, (420, 2)),
- (0x2f96c, (1242, 2)),
- (0x2f800, (150, 2)),
- (0x2fa1a, (1762, 2)),
- (0xf97f, (294, 2)),
- (0xfaba, (1502, 2)),
- (0xfa82, (572, 2)),
- (0x2f92e, (1052, 2)),
- (0xf9fe, (1354, 2)),
- (0xf994, (1064, 2)),
- (0x2f83c, (356, 2)),
- (0xfa50, (1158, 2)),
- (0x2f817, (228, 2)),
- (0xfa38, (402, 2)),
- (0xfa69, (1686, 2)),
- (0xfaac, (1196, 2)),
- (0xf901, (778, 2)),
- (0xfa33, (282, 2)),
- (0xf9bf, (842, 2)),
- (0xf9d1, (216, 2)),
- (0xf95f, (494, 2)),
- (0x2f82f, (318, 2)),
- (0xf9a4, (708, 2)),
- (0x2f89e, (606, 2)),
- (0x2f801, (146, 2)),
- (0x2f84f, (404, 2)),
- (0x2f961, (1912, 2)),
- (0x2f87e, (536, 2)),
- (0x2f9d5, (1530, 2)),
- (0xf9e7, (1456, 2)),
- (0xf973, (700, 2)),
- (0xf9c2, (1394, 2)),
- (0x2f9d0, (1498, 2)),
- (0xf9a5, (866, 2)),
- (0x2f80c, (0, 2)),
- (0xf930, (738, 2)),
- (0x2f8a1, (28, 2)),
- (0x2f828, (298, 2)),
- (0x2f89f, (610, 2)),
- (0xf964, (1144, 2)),
- (0xf94e, (946, 2)),
- (0x2f8d7, (94, 2)),
- (0x2f806, (178, 2)),
- (0x2f9cc, (1960, 2)),
- (0x2f94e, (1128, 2)),
- (0x2f929, (1038, 2)),
- (0xfa34, (290, 2)),
- (0x2f939, (1816, 2)),
- (0xf910, (1410, 2)),
- (0xf926, (1312, 2)),
- (0xf9a2, (566, 2)),
- (0xfa49, (1006, 2)),
- (0xf953, (1302, 2)),
- (0x2f80f, (206, 2)),
- (0xf963, (304, 2)),
- (0x2f8d4, (782, 2)),
- (0xf9b2, (1668, 2)),
- (0x2f973, (1924, 2)),
- (0x2f897, (1834, 2)),
- (0x2f9fc, (126, 2)),
- (0xf99a, (1576, 2)),
- (0x2f85a, (444, 2)),
- (0xfacf, (1826, 2)),
- (0x2f9ab, (1954, 2)),
- (0x2f927, (1876, 2)),
- (0x2f9fd, (1986, 2)),
- (0xfa36, (382, 2)),
- (0xf904, (942, 2)),
- (0x2f81c, (1980, 2)),
- (0xfa7b, (394, 2)),
- (0xfa41, (740, 2)),
- (0x2f87b, (1810, 2)),
- (0x2f9ba, (1426, 2)),
- (0xf979, (240, 2)),
- (0xf9d7, (1560, 2)),
+ (0x0FA08, (0x5A8, 0x2)),
+ (0x2F825, (0x118, 0x2)),
+ (0x2F838, (0x704, 0x2)),
+ (0x2F95B, (0x4A8, 0x2)),
+ (0x2F8FB, (0x740, 0x2)),
+ (0x2F83A, (0x154, 0x2)),
+ (0x2F8A7, (0x27C, 0x2)),
+ (0x2F856, (0x1A6, 0x2)),
+ (0x2F810, (0x0D0, 0x2)),
+ (0x0FA8B, (0x29C, 0x2)),
+ (0x0FA7A, (0x17A, 0x2)),
+ (0x2F9EF, (0x076, 0x2)),
+ (0x2F959, (0x4A4, 0x2)),
+ (0x0F9C8, (0x324, 0x2)),
+ (0x0F9C4, (0x6EA, 0x2)),
+ (0x2F833, (0x148, 0x2)),
+ (0x0F96C, (0x1AE, 0x2)),
+ (0x0F9A1, (0x5CE, 0x2)),
+ (0x0F906, (0x150, 0x2)),
+ (0x2FA01, (0x7C4, 0x2)),
+ (0x0F94C, (0x34C, 0x2)),
+ (0x0F90F, (0x4FA, 0x2)),
+ (0x2F8DD, (0x732, 0x2)),
+ (0x0FA55, (0x4AA, 0x2)),
+ (0x2F860, (0x708, 0x2)),
+ (0x2F999, (0x546, 0x2)),
+ (0x0FABC, (0x5E6, 0x2)),
+ (0x2F9B9, (0x594, 0x2)),
+ (0x0F943, (0x246, 0x2)),
+ (0x2F952, (0x76C, 0x2)),
+ (0x2F8F1, (0x358, 0x2)),
+ (0x0F99C, (0x100, 0x2)),
+ (0x0F969, (0x2EC, 0x2)),
+ (0x0F98D, (0x620, 0x2)),
+ (0x0FA7F, (0x1CC, 0x2)),
+ (0x2F9D6, (0x606, 0x2)),
+ (0x2F81B, (0x0EC, 0x2)),
+ (0x0FA9D, (0x466, 0x2)),
+ (0x2F8E4, (0x33A, 0x2)),
+ (0x0FA94, (0x320, 0x2)),
+ (0x2F890, (0x244, 0x2)),
+ (0x0F93D, (0x4DC, 0x2)),
+ (0x2F924, (0x3F8, 0x2)),
+ (0x2F983, (0x51C, 0x2)),
+ (0x0FA2F, (0x678, 0x2)),
+ (0x2F891, (0x71A, 0x2)),
+ (0x2F934, (0x430, 0x2)),
+ (0x2F835, (0x3CC, 0x2)),
+ (0x2F899, (0x24E, 0x2)),
+ (0x2F8AE, (0x294, 0x2)),
+ (0x0F9D6, (0x39A, 0x2)),
+ (0x2F9A0, (0x54E, 0x2)),
+ (0x0FAC2, (0x61A, 0x2)),
+ (0x2F851, (0x1BA, 0x2)),
+ (0x2F804, (0x0A6, 0x2)),
+ (0x2F90D, (0x744, 0x2)),
+ (0x0F95E, (0x094, 0x2)),
+ (0x2F8DA, (0x31A, 0x2)),
+ (0x2F885, (0x226, 0x2)),
+ (0x2F96A, (0x4D0, 0x2)),
+ (0x0F907, (0x6EE, 0x2)),
+ (0x0F9F9, (0x4C2, 0x2)),
+ (0x0F94B, (0x202, 0x2)),
+ (0x2F915, (0x3C2, 0x2)),
+ (0x0F9F1, (0x676, 0x2)),
+ (0x2F86D, (0x1EA, 0x2)),
+ (0x2F921, (0x3F2, 0x2)),
+ (0x0FA96, (0x366, 0x2)),
+ (0x0F9E0, (0x2F6, 0x2)),
+ (0x0F921, (0x214, 0x2)),
+ (0x2F99F, (0x56A, 0x2)),
+ (0x2F8B2, (0x2A6, 0x2)),
+ (0x0FAB1, (0x4F2, 0x2)),
+ (0x0FA6C, (0x74C, 0x2)),
+ (0x2F819, (0x0A2, 0x2)),
+ (0x2F910, (0x746, 0x2)),
+ (0x2F8DC, (0x31E, 0x2)),
+ (0x2F9D3, (0x7AA, 0x2)),
+ (0x2F8A3, (0x26E, 0x2)),
+ (0x0F915, (0x37C, 0x2)),
+ (0x2F88A, (0x014, 0x2)),
+ (0x0F9F6, (0x522, 0x2)),
+ (0x2F9F1, (0x7B8, 0x2)),
+ (0x0F98E, (0x22C, 0x2)),
+ (0x0FAD5, (0x768, 0x2)),
+ (0x0F93B, (0x46C, 0x2)),
+ (0x2F91E, (0x3E2, 0x2)),
+ (0x0F9EB, (0x134, 0x2)),
+ (0x0FA42, (0x2F2, 0x2)),
+ (0x2F958, (0x04E, 0x2)),
+ (0x0FA19, (0x48C, 0x2)),
+ (0x0FAAA, (0x45E, 0x2)),
+ (0x2F949, (0x046, 0x2)),
+ (0x2F978, (0x4FC, 0x2)),
+ (0x2F8A9, (0x27E, 0x2)),
+ (0x2F90A, (0x032, 0x2)),
+ (0x2F89A, (0x252, 0x2)),
+ (0x2F8B5, (0x2B0, 0x2)),
+ (0x2F94C, (0x04A, 0x2)),
+ (0x0FA43, (0x300, 0x2)),
+ (0x0F997, (0x510, 0x2)),
+ (0x2F8BA, (0x2BA, 0x2)),
+ (0x0FA00, (0x0FC, 0x2)),
+ (0x0FAC3, (0x62E, 0x2)),
+ (0x2F948, (0x462, 0x2)),
+ (0x2F9F4, (0x21C, 0x2)),
+ (0x0FA99, (0x3AA, 0x2)),
+ (0x2F976, (0x4F8, 0x2)),
+ (0x0F978, (0x0D6, 0x2)),
+ (0x2F8FE, (0x36E, 0x2)),
+ (0x2F8E3, (0x736, 0x2)),
+ (0x0F919, (0x642, 0x2)),
+ (0x2F8EF, (0x356, 0x2)),
+ (0x0F939, (0x6C2, 0x2)),
+ (0x2F8C9, (0x2EA, 0x2)),
+ (0x2F844, (0x172, 0x2)),
+ (0x0FABB, (0x5D2, 0x2)),
+ (0x2F9C4, (0x5AC, 0x2)),
+ (0x2F984, (0x060, 0x2)),
+ (0x2F802, (0x098, 0x2)),
+ (0x0FA15, (0x0F6, 0x2)),
+ (0x0F9BE, (0x2EE, 0x2)),
+ (0x0F942, (0x1B8, 0x2)),
+ (0x2F852, (0x19E, 0x2)),
+ (0x0FAAE, (0x4C0, 0x2)),
+ (0x2FA17, (0x6DC, 0x2)),
+ (0x2F92D, (0x03A, 0x2)),
+ (0x2F83F, (0x162, 0x2)),
+ (0x0F90C, (0x1C8, 0x2)),
+ (0x0F931, (0x350, 0x2)),
+ (0x0F9C1, (0x446, 0x2)),
+ (0x2F873, (0x1FA, 0x2)),
+ (0x2F965, (0x77A, 0x2)),
+ (0x0F902, (0x612, 0x2)),
+ (0x2F805, (0x0B0, 0x2)),
+ (0x2F8CA, (0x728, 0x2)),
+ (0x0F9C7, (0x10E, 0x2)),
+ (0x2F8F4, (0x360, 0x2)),
+ (0x0FA0D, (0x186, 0x2)),
+ (0x0FA5C, (0x524, 0x2)),
+ (0x0FA4C, (0x47E, 0x2)),
+ (0x2F865, (0x1D2, 0x2)),
+ (0x2F876, (0x00E, 0x2)),
+ (0x2F9D7, (0x608, 0x2)),
+ (0x0F975, (0x2C8, 0x2)),
+ (0x2F9BB, (0x59C, 0x2)),
+ (0x2F9D2, (0x5F6, 0x2)),
+ (0x0F9ED, (0x15A, 0x2)),
+ (0x2F9B4, (0x588, 0x2)),
+ (0x0FA6D, (0x52C, 0x2)),
+ (0x0F9E5, (0x43E, 0x2)),
+ (0x2F8D8, (0x314, 0x2)),
+ (0x2F93D, (0x75E, 0x2)),
+ (0x0FA03, (0x4C8, 0x2)),
+ (0x0F9A0, (0x5AE, 0x2)),
+ (0x2FA12, (0x7CA, 0x2)),
+ (0x0FA63, (0x5E8, 0x2)),
+ (0x0F920, (0x6D0, 0x2)),
+ (0x0F91F, (0x580, 0x2)),
+ (0x2F97D, (0x50E, 0x2)),
+ (0x0F990, (0x2A4, 0x2)),
+ (0x0FA57, (0x4E4, 0x2)),
+ (0x2F975, (0x786, 0x2)),
+ (0x0FAD8, (0x6E8, 0x2)),
+ (0x0FAB3, (0x54C, 0x2)),
+ (0x2F9F3, (0x67C, 0x2)),
+ (0x0F9FB, (0x3D2, 0x2)),
+ (0x0F918, (0x564, 0x2)),
+ (0x2F8C3, (0x2D8, 0x2)),
+ (0x0F9CA, (0x384, 0x2)),
+ (0x0F952, (0x11E, 0x2)),
+ (0x2FA0B, (0x6C4, 0x2)),
+ (0x2F941, (0x762, 0x2)),
+ (0x2F862, (0x1D4, 0x2)),
+ (0x2F8FF, (0x37A, 0x2)),
+ (0x2F85D, (0x1C2, 0x2)),
+ (0x0F9D9, (0x278, 0x2)),
+ (0x2F855, (0x19C, 0x2)),
+ (0x2F98F, (0x536, 0x2)),
+ (0x0F9D4, (0x0B8, 0x2)),
+ (0x0F99E, (0x168, 0x2)),
+ (0x2F850, (0x0FE, 0x2)),
+ (0x0FA22, (0x5DC, 0x2)),
+ (0x2F94F, (0x46E, 0x2)),
+ (0x0FAA9, (0x460, 0x2)),
+ (0x0FA71, (0x0EA, 0x2)),
+ (0x0F95D, (0x5E0, 0x2)),
+ (0x2F8BD, (0x2D0, 0x2)),
+ (0x2FA02, (0x6AA, 0x2)),
+ (0x2F93F, (0x040, 0x2)),
+ (0x2F808, (0x0BA, 0x2)),
+ (0x2F950, (0x476, 0x2)),
+ (0x2F933, (0x03C, 0x2)),
+ (0x2F853, (0x1A0, 0x2)),
+ (0x2F8F0, (0x73A, 0x2)),
+ (0x0F967, (0x08C, 0x2)),
+ (0x0FA16, (0x402, 0x2)),
+ (0x0FAA6, (0x44C, 0x2)),
+ (0x2F8B3, (0x2A8, 0x2)),
+ (0x2F9F7, (0x7BE, 0x2)),
+ (0x0F986, (0x664, 0x2)),
+ (0x2F99D, (0x554, 0x2)),
+ (0x2F9B8, (0x58E, 0x2)),
+ (0x0F998, (0x616, 0x2)),
+ (0x2F82B, (0x132, 0x2)),
+ (0x2F872, (0x1F8, 0x2)),
+ (0x0FAB9, (0x5D0, 0x2)),
+ (0x0FA9B, (0x3C4, 0x2)),
+ (0x0F9B0, (0x50C, 0x2)),
+ (0x0F98B, (0x308, 0x2)),
+ (0x0FAD1, (0x734, 0x2)),
+ (0x0F917, (0x414, 0x2)),
+ (0x2F989, (0x72E, 0x2)),
+ (0x2F866, (0x1DC, 0x2)),
+ (0x0F932, (0x3E8, 0x2)),
+ (0x2FA0E, (0x086, 0x2)),
+ (0x0FA07, (0x61E, 0x2)),
+ (0x0F9BD, (0x1FE, 0x2)),
+ (0x2F88C, (0x232, 0x2)),
+ (0x0FA56, (0x4B4, 0x2)),
+ (0x0FA64, (0x600, 0x2)),
+ (0x0FA04, (0x1E8, 0x2)),
+ (0x0FA9E, (0x3F0, 0x2)),
+ (0x2F9E0, (0x7B0, 0x2)),
+ (0x2F89D, (0x25C, 0x2)),
+ (0x2F9EE, (0x662, 0x2)),
+ (0x0F9DB, (0x40C, 0x2)),
+ (0x0F923, (0x578, 0x2)),
+ (0x2F841, (0x16A, 0x2)),
+ (0x2F81A, (0x0E8, 0x2)),
+ (0x0F911, (0x5A0, 0x2)),
+ (0x0FAAD, (0x4B6, 0x2)),
+ (0x0FAC1, (0x604, 0x2)),
+ (0x2F928, (0x408, 0x2)),
+ (0x2F935, (0x756, 0x2)),
+ (0x2F8D5, (0x304, 0x2)),
+ (0x0F92E, (0x0EE, 0x2)),
+ (0x0FA59, (0x4EE, 0x2)),
+ (0x2F96B, (0x77E, 0x2)),
+ (0x2F8B9, (0x2BE, 0x2)),
+ (0x2F877, (0x200, 0x2)),
+ (0x2FA00, (0x6A2, 0x2)),
+ (0x0FA05, (0x37E, 0x2)),
+ (0x0F9E8, (0x5B6, 0x2)),
+ (0x2F8C6, (0x2DA, 0x2)),
+ (0x0F97A, (0x334, 0x2)),
+ (0x2F9EA, (0x654, 0x2)),
+ (0x0F944, (0x4BE, 0x2)),
+ (0x2F8C4, (0x2DC, 0x2)),
+ (0x2F9CD, (0x072, 0x2)),
+ (0x2F8E5, (0x330, 0x2)),
+ (0x2F9D9, (0x6FE, 0x2)),
+ (0x2F980, (0x72C, 0x2)),
+ (0x2F9A8, (0x56E, 0x2)),
+ (0x2F92F, (0x41E, 0x2)),
+ (0x2F951, (0x04C, 0x2)),
+ (0x2F9F9, (0x07C, 0x2)),
+ (0x0FAB4, (0x560, 0x2)),
+ (0x0F985, (0x47A, 0x2)),
+ (0x2F829, (0x12C, 0x2)),
+ (0x2F8A2, (0x01A, 0x2)),
+ (0x2F9C3, (0x5AA, 0x2)),
+ (0x2F936, (0x434, 0x2)),
+ (0x2F9AF, (0x068, 0x2)),
+ (0x0FA77, (0x128, 0x2)),
+ (0x0F956, (0x4A0, 0x2)),
+ (0x0FA5F, (0x568, 0x2)),
+ (0x2F93B, (0x75A, 0x2)),
+ (0x0F914, (0x346, 0x2)),
+ (0x2F994, (0x53C, 0x2)),
+ (0x2F91B, (0x6F8, 0x2)),
+ (0x2F880, (0x21A, 0x2)),
+ (0x2F956, (0x498, 0x2)),
+ (0x0F958, (0x562, 0x2)),
+ (0x2F99B, (0x552, 0x2)),
+ (0x2FA06, (0x6B6, 0x2)),
+ (0x0FABF, (0x5EA, 0x2)),
+ (0x2F8B6, (0x2B8, 0x2)),
+ (0x2F8A0, (0x26A, 0x2)),
+ (0x0FA87, (0x280, 0x2)),
+ (0x2F8EA, (0x344, 0x2)),
+ (0x2F867, (0x00A, 0x2)),
+ (0x0F97D, (0x5D4, 0x2)),
+ (0x0F968, (0x374, 0x2)),
+ (0x0FA5A, (0x4F4, 0x2)),
+ (0x0F97B, (0x4CC, 0x2)),
+ (0x2FA10, (0x7C8, 0x2)),
+ (0x0FA2B, (0x6AE, 0x2)),
+ (0x0FA75, (0x0DC, 0x2)),
+ (0x0F94D, (0x398, 0x2)),
+ (0x0FAD4, (0x044, 0x2)),
+ (0x2F8CC, (0x30C, 0x2)),
+ (0x0FA8A, (0x284, 0x2)),
+ (0x0F9F4, (0x328, 0x2)),
+ (0x0FAC6, (0x672, 0x2)),
+ (0x0FA9C, (0x3E0, 0x2)),
+ (0x0FA10, (0x1AA, 0x2)),
+ (0x0F9E2, (0x33C, 0x2)),
+ (0x0F947, (0x472, 0x2)),
+ (0x0F941, (0x5D6, 0x2)),
+ (0x0FA4E, (0x480, 0x2)),
+ (0x2F9DA, (0x60C, 0x2)),
+ (0x2F893, (0x526, 0x2)),
+ (0x0F96F, (0x5CC, 0x2)),
+ (0x0F983, (0x2F0, 0x2)),
+ (0x0F9F5, (0x396, 0x2)),
+ (0x0F962, (0x43A, 0x2)),
+ (0x2F968, (0x4CE, 0x2)),
+ (0x2F923, (0x750, 0x2)),
+ (0x2FA18, (0x6DE, 0x2)),
+ (0x2F930, (0x424, 0x2)),
+ (0x0FA90, (0x2E8, 0x2)),
+ (0x0FA54, (0x4A2, 0x2)),
+ (0x0F9D8, (0x254, 0x2)),
+ (0x2F9E4, (0x63E, 0x2)),
+ (0x2FA05, (0x6B4, 0x2)),
+ (0x2F964, (0x052, 0x2)),
+ (0x0F99F, (0x3D6, 0x2)),
+ (0x2F94B, (0x048, 0x2)),
+ (0x2F9A9, (0x570, 0x2)),
+ (0x0FA0C, (0x0C6, 0x2)),
+ (0x2F986, (0x1DE, 0x2)),
+ (0x0FA85, (0x25A, 0x2)),
+ (0x2F95F, (0x4B0, 0x2)),
+ (0x0F9F8, (0x4B2, 0x2)),
+ (0x0F9B4, (0x6A0, 0x2)),
+ (0x2F82E, (0x13C, 0x2)),
+ (0x0FAD9, (0x6EC, 0x2)),
+ (0x2F937, (0x758, 0x2)),
+ (0x0F9CF, (0x4D2, 0x2)),
+ (0x0FAA1, (0x422, 0x2)),
+ (0x2F917, (0x3CA, 0x2)),
+ (0x0FAA5, (0x444, 0x2)),
+ (0x0FA3B, (0x204, 0x2)),
+ (0x2F88D, (0x234, 0x2)),
+ (0x2F906, (0x742, 0x2)),
+ (0x2F901, (0x390, 0x2)),
+ (0x2F97A, (0x50A, 0x2)),
+ (0x0FA60, (0x5BC, 0x2)),
+ (0x2F92C, (0x038, 0x2)),
+ (0x2F80A, (0x0C4, 0x2)),
+ (0x2F99A, (0x550, 0x2)),
+ (0x2FA13, (0x7CC, 0x2)),
+ (0x2F938, (0x43C, 0x2)),
+ (0x2F813, (0x002, 0x2)),
+ (0x2F831, (0x144, 0x2)),
+ (0x0FA1C, (0x68E, 0x2)),
+ (0x0FACC, (0x6A6, 0x2)),
+ (0x0FA5E, (0x532, 0x2)),
+ (0x2F995, (0x53E, 0x2)),
+ (0x2F8D3, (0x0E2, 0x2)),
+ (0x0FACD, (0x6BE, 0x2)),
+ (0x2F81D, (0x0F8, 0x2)),
+ (0x2F97B, (0x78A, 0x2)),
+ (0x0FA3A, (0x1B0, 0x2)),
+ (0x0F9C6, (0x668, 0x2)),
+ (0x0FABD, (0x5E2, 0x2)),
+ (0x0F92D, (0x0AA, 0x2)),
+ (0x0F99B, (0x65C, 0x2)),
+ (0x0F91D, (0x354, 0x2)),
+ (0x2F84D, (0x19A, 0x2)),
+ (0x2F8AD, (0x292, 0x2)),
+ (0x0F9D3, (0x670, 0x2)),
+ (0x2F843, (0x16E, 0x2)),
+ (0x0F97C, (0x52E, 0x2)),
+ (0x0FA30, (0x0AE, 0x2)),
+ (0x2F858, (0x1B2, 0x2)),
+ (0x2F8A5, (0x270, 0x2)),
+ (0x2F988, (0x792, 0x2)),
+ (0x2F9E1, (0x7B2, 0x2)),
+ (0x0FA74, (0x0C8, 0x2)),
+ (0x2F882, (0x222, 0x2)),
+ (0x2F879, (0x20E, 0x2)),
+ (0x2F8B7, (0x2C0, 0x2)),
+ (0x0F940, (0x6D2, 0x2)),
+ (0x2F9E5, (0x7B4, 0x2)),
+ (0x2F9CF, (0x5CA, 0x2)),
+ (0x0FA8E, (0x2D2, 0x2)),
+ (0x2F90C, (0x3A8, 0x2)),
+ (0x2F985, (0x51E, 0x2)),
+ (0x2F849, (0x184, 0x2)),
+ (0x2F960, (0x050, 0x2)),
+ (0x2F8C2, (0x01E, 0x2)),
+ (0x2F85F, (0x1CE, 0x2)),
+ (0x2F916, (0x034, 0x2)),
+ (0x0F9FA, (0x3FE, 0x2)),
+ (0x2F824, (0x008, 0x2)),
+ (0x0F936, (0x586, 0x2)),
+ (0x2F94A, (0x464, 0x2)),
+ (0x2F80E, (0x0CC, 0x2)),
+ (0x2F913, (0x3C8, 0x2)),
+ (0x2F94D, (0x76A, 0x2)),
+ (0x0F999, (0x56C, 0x2)),
+ (0x2F979, (0x502, 0x2)),
+ (0x2F926, (0x752, 0x2)),
+ (0x0F9EA, (0x67E, 0x2)),
+ (0x0FA3F, (0x28A, 0x2)),
+ (0x2F83B, (0x156, 0x2)),
+ (0x0FA5B, (0x506, 0x2)),
+ (0x0FA93, (0x316, 0x2)),
+ (0x0F913, (0x632, 0x2)),
+ (0x0F98C, (0x35C, 0x2)),
+ (0x2F8C0, (0x2CE, 0x2)),
+ (0x0FAD7, (0x7AC, 0x2)),
+ (0x0F98A, (0x110, 0x2)),
+ (0x0FA26, (0x63C, 0x2)),
+ (0x0FABE, (0x5D8, 0x2)),
+ (0x2F977, (0x788, 0x2)),
+ (0x0F954, (0x0F4, 0x2)),
+ (0x0F91A, (0x6B8, 0x2)),
+ (0x2F8CD, (0x2F8, 0x2)),
+ (0x2F8A4, (0x71E, 0x2)),
+ (0x0FA84, (0x250, 0x2)),
+ (0x2F85E, (0x1C4, 0x2)),
+ (0x0FA9F, (0x3FC, 0x2)),
+ (0x0F9B1, (0x64E, 0x2)),
+ (0x2F9CA, (0x004, 0x2)),
+ (0x0FAC4, (0x644, 0x2)),
+ (0x0F927, (0x5A6, 0x2)),
+ (0x0FA01, (0x22E, 0x2)),
+ (0x0F929, (0x310, 0x2)),
+ (0x0F9F3, (0x6D6, 0x2)),
+ (0x2F9E6, (0x640, 0x2)),
+ (0x0FA70, (0x08E, 0x2)),
+ (0x2F820, (0x106, 0x2)),
+ (0x0F9A9, (0x196, 0x2)),
+ (0x2F9BF, (0x06C, 0x2)),
+ (0x2F922, (0x3F4, 0x2)),
+ (0x2F9DE, (0x614, 0x2)),
+ (0x2F8EC, (0x738, 0x2)),
+ (0x0F9B5, (0x0AC, 0x2)),
+ (0x2F9B7, (0x590, 0x2)),
+ (0x2F981, (0x05C, 0x2)),
+ (0x0FA31, (0x0C2, 0x2)),
+ (0x2F9C1, (0x5A4, 0x2)),
+ (0x2F874, (0x24C, 0x2)),
+ (0x0F9D0, (0x6A8, 0x2)),
+ (0x0F94A, (0x1B6, 0x2)),
+ (0x2F998, (0x542, 0x2)),
+ (0x2F91C, (0x3DA, 0x2)),
+ (0x2F9DF, (0x61C, 0x2)),
+ (0x2F859, (0x706, 0x2)),
+ (0x2F883, (0x010, 0x2)),
+ (0x0F9CC, (0x418, 0x2)),
+ (0x2F9B5, (0x58A, 0x2)),
+ (0x2F970, (0x4F0, 0x2)),
+ (0x2F814, (0x0D2, 0x2)),
+ (0x2F9FF, (0x69E, 0x2)),
+ (0x2F84C, (0x18E, 0x2)),
+ (0x2F9A4, (0x796, 0x2)),
+ (0x2F966, (0x4C6, 0x2)),
+ (0x0FA1E, (0x500, 0x2)),
+ (0x2FA0C, (0x6C8, 0x2)),
+ (0x2F863, (0x1D6, 0x2)),
+ (0x0FAA2, (0x42E, 0x2)),
+ (0x2F91A, (0x3D4, 0x2)),
+ (0x2F8F8, (0x710, 0x2)),
+ (0x2F8A6, (0x27A, 0x2)),
+ (0x2F895, (0x24A, 0x2)),
+ (0x0F90B, (0x178, 0x2)),
+ (0x2F993, (0x53A, 0x2)),
+ (0x2F8BE, (0x726, 0x2)),
+ (0x0F948, (0x5FC, 0x2)),
+ (0x2F80D, (0x6FC, 0x2)),
+ (0x2F81F, (0x006, 0x2)),
+ (0x0F9E4, (0x416, 0x2)),
+ (0x2F823, (0x10C, 0x2)),
+ (0x2F9FA, (0x694, 0x2)),
+ (0x2F8FA, (0x36C, 0x2)),
+ (0x0FA6A, (0x6A4, 0x2)),
+ (0x2F9F0, (0x666, 0x2)),
+ (0x2F967, (0x054, 0x2)),
+ (0x0FA8F, (0x2D6, 0x2)),
+ (0x0FA06, (0x306, 0x2)),
+ (0x0F982, (0x242, 0x2)),
+ (0x0F989, (0x6DA, 0x2)),
+ (0x2F990, (0x534, 0x2)),
+ (0x0FAC9, (0x692, 0x2)),
+ (0x2F8ED, (0x352, 0x2)),
+ (0x2F822, (0x10A, 0x2)),
+ (0x0F9CB, (0x3A4, 0x2)),
+ (0x0FA4D, (0x482, 0x2)),
+ (0x2F944, (0x766, 0x2)),
+ (0x2F9E8, (0x656, 0x2)),
+ (0x2F8D2, (0x0E0, 0x2)),
+ (0x2F97C, (0x78C, 0x2)),
+ (0x0FA68, (0x680, 0x2)),
+ (0x0FA53, (0x494, 0x2)),
+ (0x2F8F5, (0x368, 0x2)),
+ (0x2F945, (0x458, 0x2)),
+ (0x0FA95, (0x35E, 0x2)),
+ (0x0FA2E, (0x638, 0x2)),
+ (0x0F91B, (0x09A, 0x2)),
+ (0x2F837, (0x14E, 0x2)),
+ (0x2F894, (0x248, 0x2)),
+ (0x2FA09, (0x7C6, 0x2)),
+ (0x2F974, (0x05A, 0x2)),
+ (0x0F9BA, (0x09C, 0x2)),
+ (0x2F80B, (0x0BE, 0x2)),
+ (0x0FACA, (0x698, 0x2)),
+ (0x2F969, (0x4CA, 0x2)),
+ (0x2F8B1, (0x2A2, 0x2)),
+ (0x2F8D1, (0x022, 0x2)),
+ (0x2F91D, (0x74A, 0x2)),
+ (0x2F9D4, (0x5F8, 0x2)),
+ (0x2FA15, (0x6D8, 0x2)),
+ (0x2F954, (0x76E, 0x2)),
+ (0x0FA81, (0x1E2, 0x2)),
+ (0x2F9A5, (0x79A, 0x2)),
+ (0x2F90F, (0x3BA, 0x2)),
+ (0x0F92A, (0x38C, 0x2)),
+ (0x2FA19, (0x6E0, 0x2)),
+ (0x2F943, (0x764, 0x2)),
+ (0x2F947, (0x45C, 0x2)),
+ (0x2FA0A, (0x6C0, 0x2)),
+ (0x2F963, (0x4BA, 0x2)),
+ (0x0F9BB, (0x0C0, 0x2)),
+ (0x2F8AC, (0x296, 0x2)),
+ (0x0F9C5, (0x2FE, 0x2)),
+ (0x2F97E, (0x78E, 0x2)),
+ (0x2F889, (0x716, 0x2)),
+ (0x2F8E9, (0x342, 0x2)),
+ (0x0F9DA, (0x32E, 0x2)),
+ (0x0FACE, (0x6F2, 0x2)),
+ (0x2F920, (0x3EC, 0x2)),
+ (0x0F951, (0x66A, 0x2)),
+ (0x0F9BC, (0x1F4, 0x2)),
+ (0x2F940, (0x454, 0x2)),
+ (0x2F84E, (0x190, 0x2)),
+ (0x0FA48, (0x3DE, 0x2)),
+ (0x2FA08, (0x082, 0x2)),
+ (0x0F9E6, (0x4F6, 0x2)),
+ (0x2F8C8, (0x2E6, 0x2)),
+ (0x0F912, (0x5B8, 0x2)),
+ (0x2F8F7, (0x73C, 0x2)),
+ (0x2F904, (0x392, 0x2)),
+ (0x0FA76, (0x116, 0x2)),
+ (0x2F8E8, (0x340, 0x2)),
+ (0x2F9E2, (0x634, 0x2)),
+ (0x0F903, (0x5FE, 0x2)),
+ (0x0FA9A, (0x3B6, 0x2)),
+ (0x0F996, (0x4E2, 0x2)),
+ (0x2F8DB, (0x322, 0x2)),
+ (0x0FA4A, (0x41A, 0x2)),
+ (0x0FA6B, (0x268, 0x2)),
+ (0x2F8FD, (0x376, 0x2)),
+ (0x0FA79, (0x170, 0x2)),
+ (0x0F987, (0x6BC, 0x2)),
+ (0x2F8F2, (0x030, 0x2)),
+ (0x0F90D, (0x2A0, 0x2)),
+ (0x0F922, (0x3BE, 0x2)),
+ (0x0FA88, (0x276, 0x2)),
+ (0x0F91C, (0x140, 0x2)),
+ (0x2F870, (0x1F6, 0x2)),
+ (0x2F9AC, (0x576, 0x2)),
+ (0x2F839, (0x152, 0x2)),
+ (0x2FA03, (0x080, 0x2)),
+ (0x2F854, (0x1A2, 0x2)),
+ (0x2F92A, (0x036, 0x2)),
+ (0x0FA35, (0x138, 0x2)),
+ (0x2F9E7, (0x650, 0x2)),
+ (0x2F9A6, (0x798, 0x2)),
+ (0x0FAAF, (0x4D8, 0x2)),
+ (0x2F911, (0x748, 0x2)),
+ (0x2F95D, (0x774, 0x2)),
+ (0x2F89C, (0x256, 0x2)),
+ (0x0FA45, (0x38E, 0x2)),
+ (0x0FA1B, (0x496, 0x2)),
+ (0x0FA3D, (0x26C, 0x2)),
+ (0x0F980, (0x15E, 0x2)),
+ (0x0FA8C, (0x2AC, 0x2)),
+ (0x2F9E9, (0x658, 0x2)),
+ (0x2F9F8, (0x07A, 0x2)),
+ (0x2F902, (0x388, 0x2)),
+ (0x2FA1D, (0x7D2, 0x2)),
+ (0x0FAB6, (0x5BE, 0x2)),
+ (0x0F995, (0x49C, 0x2)),
+ (0x2F832, (0x146, 0x2)),
+ (0x2F955, (0x770, 0x2)),
+ (0x2F8FC, (0x372, 0x2)),
+ (0x2F875, (0x1FC, 0x2)),
+ (0x2F82A, (0x12E, 0x2)),
+ (0x2F811, (0x0DA, 0x2)),
+ (0x2F868, (0x00C, 0x2)),
+ (0x2F925, (0x3FA, 0x2)),
+ (0x0FA20, (0x57E, 0x2)),
+ (0x2F83E, (0x160, 0x2)),
+ (0x0F9AF, (0x4FE, 0x2)),
+ (0x2F997, (0x794, 0x2)),
+ (0x2F9EC, (0x660, 0x2)),
+ (0x0F9AB, (0x21E, 0x2)),
+ (0x0F935, (0x57C, 0x2)),
+ (0x0FA80, (0x1DA, 0x2)),
+ (0x2F95C, (0x772, 0x2)),
+ (0x0FA92, (0x312, 0x2)),
+ (0x0F95B, (0x2B4, 0x2)),
+ (0x0F93E, (0x556, 0x2)),
+ (0x0F9DE, (0x158, 0x2)),
+ (0x0F9F0, (0x57A, 0x2)),
+ (0x2F847, (0x17C, 0x2)),
+ (0x0FA98, (0x3B0, 0x2)),
+ (0x0F90E, (0x448, 0x2)),
+ (0x0FA4F, (0x484, 0x2)),
+ (0x0FAA4, (0x442, 0x2)),
+ (0x2F9C0, (0x5A2, 0x2)),
+ (0x2F8BF, (0x2D4, 0x2)),
+ (0x0FA62, (0x5E4, 0x2)),
+ (0x0F9B6, (0x49A, 0x2)),
+ (0x2F826, (0x11C, 0x2)),
+ (0x0F9C9, (0x32A, 0x2)),
+ (0x2F992, (0x114, 0x2)),
+ (0x2F8E1, (0x332, 0x2)),
+ (0x0F959, (0x66E, 0x2)),
+ (0x2F892, (0x71C, 0x2)),
+ (0x0FA18, (0x47C, 0x2)),
+ (0x2F87D, (0x714, 0x2)),
+ (0x0F970, (0x364, 0x2)),
+ (0x2F92B, (0x410, 0x2)),
+ (0x2FA04, (0x6B2, 0x2)),
+ (0x0FA89, (0x28C, 0x2)),
+ (0x2F9E3, (0x63A, 0x2)),
+ (0x2F9C2, (0x06E, 0x2)),
+ (0x0FACB, (0x69A, 0x2)),
+ (0x2F9C8, (0x070, 0x2)),
+ (0x2F908, (0x3A0, 0x2)),
+ (0x2F86F, (0x1F2, 0x2)),
+ (0x2F98A, (0x730, 0x2)),
+ (0x0F9A8, (0x0A4, 0x2)),
+ (0x2F8C7, (0x020, 0x2)),
+ (0x2FA16, (0x08A, 0x2)),
+ (0x0FA4B, (0x470, 0x2)),
+ (0x2F878, (0x20A, 0x2)),
+ (0x2F8BB, (0x2C2, 0x2)),
+ (0x2F816, (0x6FA, 0x2)),
+ (0x2F86A, (0x1E4, 0x2)),
+ (0x0F9C3, (0x630, 0x2)),
+ (0x0F945, (0x514, 0x2)),
+ (0x2F9FE, (0x69C, 0x2)),
+ (0x0FA86, (0x272, 0x2)),
+ (0x2F82C, (0x136, 0x2)),
+ (0x0F988, (0x6D4, 0x2)),
+ (0x0FAC5, (0x652, 0x2)),
+ (0x0FA66, (0x626, 0x2)),
+ (0x2F840, (0x166, 0x2)),
+ (0x0F9EE, (0x3E6, 0x2)),
+ (0x2F830, (0x142, 0x2)),
+ (0x2F914, (0x3C6, 0x2)),
+ (0x2F942, (0x760, 0x2)),
+ (0x0FAA3, (0x432, 0x2)),
+ (0x0F974, (0x540, 0x2)),
+ (0x2F807, (0x0B6, 0x2)),
+ (0x2F905, (0x394, 0x2)),
+ (0x2F9B2, (0x06A, 0x2)),
+ (0x2F887, (0x22A, 0x2)),
+ (0x2F912, (0x3BC, 0x2)),
+ (0x0F9AE, (0x420, 0x2)),
+ (0x0F96A, (0x4D4, 0x2)),
+ (0x0F9B7, (0x646, 0x2)),
+ (0x2F932, (0x42C, 0x2)),
+ (0x2F98D, (0x622, 0x2)),
+ (0x0FA25, (0x62A, 0x2)),
+ (0x0F993, (0x3DC, 0x2)),
+ (0x2F9F5, (0x688, 0x2)),
+ (0x0F9DF, (0x206, 0x2)),
+ (0x2F9C7, (0x5B4, 0x2)),
+ (0x2F996, (0x544, 0x2)),
+ (0x2F842, (0x16C, 0x2)),
+ (0x2F869, (0x1E0, 0x2)),
+ (0x2F861, (0x70A, 0x2)),
+ (0x2F8AF, (0x298, 0x2)),
+ (0x2F8C5, (0x2E0, 0x2)),
+ (0x2F962, (0x4B8, 0x2)),
+ (0x2F98B, (0x528, 0x2)),
+ (0x2F9A1, (0x558, 0x2)),
+ (0x0FAD2, (0x02A, 0x2)),
+ (0x2F9AE, (0x066, 0x2)),
+ (0x2F8BC, (0x2C6, 0x2)),
+ (0x0F9B3, (0x68C, 0x2)),
+ (0x2F88F, (0x7D0, 0x2)),
+ (0x0F965, (0x0B4, 0x2)),
+ (0x2F953, (0x488, 0x2)),
+ (0x2F84B, (0x198, 0x2)),
+ (0x2F90B, (0x3AC, 0x2)),
+ (0x2F834, (0x702, 0x2)),
+ (0x0FA2D, (0x6CC, 0x2)),
+ (0x2F8E6, (0x33E, 0x2)),
+ (0x0F971, (0x624, 0x2)),
+ (0x2FA1C, (0x6E6, 0x2)),
+ (0x0FA61, (0x5C6, 0x2)),
+ (0x2F98E, (0x062, 0x2)),
+ (0x2F9C9, (0x5BA, 0x2)),
+ (0x0FA0B, (0x23E, 0x2)),
+ (0x2F86B, (0x1E6, 0x2)),
+ (0x0F949, (0x686, 0x2)),
+ (0x0FAC7, (0x682, 0x2)),
+ (0x0F96E, (0x566, 0x2)),
+ (0x0F966, (0x258, 0x2)),
+ (0x0F955, (0x0F2, 0x2)),
+ (0x2F8D0, (0x024, 0x2)),
+ (0x2F93A, (0x440, 0x2)),
+ (0x0F9FF, (0x104, 0x2)),
+ (0x0FAC8, (0x690, 0x2)),
+ (0x0F93C, (0x490, 0x2)),
+ (0x2F845, (0x174, 0x2)),
+ (0x2F9CE, (0x074, 0x2)),
+ (0x0FAD6, (0x77C, 0x2)),
+ (0x2F95A, (0x4A6, 0x2)),
+ (0x0F9E9, (0x648, 0x2)),
+ (0x2F91F, (0x74E, 0x2)),
+ (0x0F950, (0x4EC, 0x2)),
+ (0x2F8C1, (0x2CA, 0x2)),
+ (0x2F9AD, (0x79C, 0x2)),
+ (0x2F97F, (0x512, 0x2)),
+ (0x0FA83, (0x240, 0x2)),
+ (0x2F82D, (0x13A, 0x2)),
+ (0x2F8DF, (0x32C, 0x2)),
+ (0x2F87C, (0x212, 0x2)),
+ (0x0FA58, (0x4EA, 0x2)),
+ (0x2F846, (0x176, 0x2)),
+ (0x0FA37, (0x18C, 0x2)),
+ (0x0FA78, (0x180, 0x2)),
+ (0x2F9F6, (0x7BA, 0x2)),
+ (0x2F99E, (0x55E, 0x2)),
+ (0x0FAD3, (0x042, 0x2)),
+ (0x0FAD0, (0x720, 0x2)),
+ (0x0F9D5, (0x210, 0x2)),
+ (0x0FAB7, (0x5C2, 0x2)),
+ (0x0FA09, (0x66C, 0x2)),
+ (0x2F8CE, (0x026, 0x2)),
+ (0x0F957, (0x4DE, 0x2)),
+ (0x0F991, (0x2DE, 0x2)),
+ (0x0FAB8, (0x5C8, 0x2)),
+ (0x2F8EB, (0x34E, 0x2)),
+ (0x2F9B1, (0x7A0, 0x2)),
+ (0x0FA2A, (0x6AC, 0x2)),
+ (0x2F93C, (0x75C, 0x2)),
+ (0x0FA72, (0x0D4, 0x2)),
+ (0x2F96F, (0x4E8, 0x2)),
+ (0x2F8D6, (0x518, 0x2)),
+ (0x2F886, (0x228, 0x2)),
+ (0x0F9FD, (0x0A0, 0x2)),
+ (0x0F9C0, (0x3E4, 0x2)),
+ (0x2F9BE, (0x59E, 0x2)),
+ (0x0F9B8, (0x67A, 0x2)),
+ (0x2F81E, (0x0FA, 0x2)),
+ (0x0F900, (0x5F4, 0x2)),
+ (0x2F98C, (0x52A, 0x2)),
+ (0x2F93E, (0x03E, 0x2)),
+ (0x0FAA0, (0x404, 0x2)),
+ (0x2F8F3, (0x35A, 0x2)),
+ (0x0F961, (0x40A, 0x2)),
+ (0x2F83D, (0x15C, 0x2)),
+ (0x2F8F6, (0x36A, 0x2)),
+ (0x0F9D2, (0x2AA, 0x2)),
+ (0x2F84A, (0x188, 0x2)),
+ (0x0F9E1, (0x31C, 0x2)),
+ (0x0FA7C, (0x1AC, 0x2)),
+ (0x2F9AA, (0x574, 0x2)),
+ (0x0FA51, (0x48A, 0x2)),
+ (0x2F8B8, (0x724, 0x2)),
+ (0x2F931, (0x426, 0x2)),
+ (0x0FA7E, (0x1C6, 0x2)),
+ (0x0F9A6, (0x4BC, 0x2)),
+ (0x0F976, (0x438, 0x2)),
+ (0x0FA97, (0x386, 0x2)),
+ (0x2F8E7, (0x02C, 0x2)),
+ (0x2F88B, (0x230, 0x2)),
+ (0x2F9C6, (0x5B2, 0x2)),
+ (0x2F8D9, (0x318, 0x2)),
+ (0x0FA52, (0x492, 0x2)),
+ (0x2FA0D, (0x084, 0x2)),
+ (0x2F900, (0x382, 0x2)),
+ (0x2F836, (0x14C, 0x2)),
+ (0x0F9AD, (0x412, 0x2)),
+ (0x0F934, (0x504, 0x2)),
+ (0x0FAB0, (0x4E6, 0x2)),
+ (0x2F809, (0x0BC, 0x2)),
+ (0x2F9F2, (0x078, 0x2)),
+ (0x2F86C, (0x70C, 0x2)),
+ (0x0F9FC, (0x5EC, 0x2)),
+ (0x2F95E, (0x776, 0x2)),
+ (0x0F9A3, (0x260, 0x2)),
+ (0x2F971, (0x058, 0x2)),
+ (0x2F89B, (0x018, 0x2)),
+ (0x0F977, (0x09E, 0x2)),
+ (0x0FA1A, (0x48E, 0x2)),
+ (0x0FA3C, (0x208, 0x2)),
+ (0x2F9BD, (0x598, 0x2)),
+ (0x0F928, (0x238, 0x2)),
+ (0x2F864, (0x1D8, 0x2)),
+ (0x2F9D1, (0x5F2, 0x2)),
+ (0x2F982, (0x51A, 0x2)),
+ (0x0F9DC, (0x674, 0x2)),
+ (0x2F972, (0x782, 0x2)),
+ (0x2F8CB, (0x2F4, 0x2)),
+ (0x0F960, (0x264, 0x2)),
+ (0x0F992, (0x3B8, 0x2)),
+ (0x2F8B4, (0x2AE, 0x2)),
+ (0x2F803, (0x6F4, 0x2)),
+ (0x2F818, (0x0E6, 0x2)),
+ (0x0F9F7, (0x4AE, 0x2)),
+ (0x2F827, (0x124, 0x2)),
+ (0x2F9FB, (0x7C0, 0x2)),
+ (0x2F987, (0x790, 0x2)),
+ (0x0FAAB, (0x474, 0x2)),
+ (0x0FA39, (0x1A8, 0x2)),
+ (0x2FA07, (0x6BA, 0x2)),
+ (0x0F9B9, (0x274, 0x2)),
+ (0x2F86E, (0x1EC, 0x2)),
+ (0x2F8E0, (0x326, 0x2)),
+ (0x0FAA7, (0x44E, 0x2)),
+ (0x2F8A8, (0x282, 0x2)),
+ (0x0FA0A, (0x5C4, 0x2)),
+ (0x2FA14, (0x7CE, 0x2)),
+ (0x2F888, (0x012, 0x2)),
+ (0x2F9A2, (0x55A, 0x2)),
+ (0x2F848, (0x182, 0x2)),
+ (0x0FAA8, (0x452, 0x2)),
+ (0x0FA67, (0x62C, 0x2)),
+ (0x0F946, (0x3F6, 0x2)),
+ (0x2F946, (0x45A, 0x2)),
+ (0x0FA7D, (0x1B4, 0x2)),
+ (0x0FA1D, (0x4C4, 0x2)),
+ (0x2FA11, (0x088, 0x2)),
+ (0x0FA2C, (0x6B0, 0x2)),
+ (0x0F924, (0x5C0, 0x2)),
+ (0x2F96E, (0x4E0, 0x2)),
+ (0x0F96D, (0x456, 0x2)),
+ (0x0F95A, (0x5EE, 0x2)),
+ (0x2F85C, (0x1C0, 0x2)),
+ (0x0F92B, (0x400, 0x2)),
+ (0x0FAC0, (0x5F0, 0x2)),
+ (0x0FA8D, (0x2CC, 0x2)),
+ (0x2F9D8, (0x7AE, 0x2)),
+ (0x0F938, (0x68A, 0x2)),
+ (0x2F821, (0x108, 0x2)),
+ (0x0F9AA, (0x1F0, 0x2)),
+ (0x0F9CE, (0x46A, 0x2)),
+ (0x0FA47, (0x3B4, 0x2)),
+ (0x2F8AA, (0x288, 0x2)),
+ (0x2F918, (0x3D0, 0x2)),
+ (0x2F8EE, (0x02E, 0x2)),
+ (0x0F96B, (0x14A, 0x2)),
+ (0x0F909, (0x1CA, 0x2)),
+ (0x2F87F, (0x216, 0x2)),
+ (0x0F908, (0x6F0, 0x2)),
+ (0x0FA5D, (0x530, 0x2)),
+ (0x0F9AC, (0x266, 0x2)),
+ (0x2F896, (0x016, 0x2)),
+ (0x2F9B0, (0x79E, 0x2)),
+ (0x0F9A7, (0x406, 0x2)),
+ (0x0F99D, (0x112, 0x2)),
+ (0x2F957, (0x49E, 0x2)),
+ (0x0F905, (0x090, 0x2)),
+ (0x2F9BC, (0x596, 0x2)),
+ (0x2F8F9, (0x73E, 0x2)),
+ (0x2F8B0, (0x29E, 0x2)),
+ (0x2F881, (0x220, 0x2)),
+ (0x2FA1B, (0x6E4, 0x2)),
+ (0x2F9DD, (0x700, 0x2)),
+ (0x2F9ED, (0x7B6, 0x2)),
+ (0x2F871, (0x70E, 0x2)),
+ (0x2F8AB, (0x28E, 0x2)),
+ (0x2F812, (0x6F6, 0x2)),
+ (0x0F933, (0x450, 0x2)),
+ (0x0F9F2, (0x6C6, 0x2)),
+ (0x0F984, (0x3C0, 0x2)),
+ (0x2F90E, (0x39C, 0x2)),
+ (0x0FAB2, (0x508, 0x2)),
+ (0x0FA32, (0x0CA, 0x2)),
+ (0x2F96D, (0x056, 0x2)),
+ (0x2F9A7, (0x064, 0x2)),
+ (0x0F94F, (0x4D6, 0x2)),
+ (0x2FA0F, (0x6CA, 0x2)),
+ (0x0F925, (0x2B2, 0x2)),
+ (0x0FA91, (0x2FC, 0x2)),
+ (0x0F972, (0x370, 0x2)),
+ (0x0F90A, (0x64C, 0x2)),
+ (0x0FA02, (0x2B6, 0x2)),
+ (0x0F92F, (0x120, 0x2)),
+ (0x0F9DD, (0x102, 0x2)),
+ (0x0FA17, (0x44A, 0x2)),
+ (0x0F93F, (0x65A, 0x2)),
+ (0x2F898, (0x780, 0x2)),
+ (0x2F907, (0x380, 0x2)),
+ (0x0F9EC, (0x3A6, 0x2)),
+ (0x0F9E3, (0x378, 0x2)),
+ (0x0FAB5, (0x59A, 0x2)),
+ (0x0FA40, (0x29A, 0x2)),
+ (0x2F815, (0x0DE, 0x2)),
+ (0x2F9DB, (0x60A, 0x2)),
+ (0x0F91E, (0x3EA, 0x2)),
+ (0x0F92C, (0x636, 0x2)),
+ (0x2F884, (0x224, 0x2)),
+ (0x0FA46, (0x39E, 0x2)),
+ (0x2F9B3, (0x584, 0x2)),
+ (0x2F85B, (0x1BE, 0x2)),
+ (0x0F9CD, (0x436, 0x2)),
+ (0x0F93A, (0x6CE, 0x2)),
+ (0x0F97E, (0x64A, 0x2)),
+ (0x0FA3E, (0x286, 0x2)),
+ (0x2F9EB, (0x65E, 0x2)),
+ (0x2F8E2, (0x338, 0x2)),
+ (0x2F9B6, (0x58C, 0x2)),
+ (0x0F916, (0x3D8, 0x2)),
+ (0x2F8DE, (0x028, 0x2)),
+ (0x0F98F, (0x290, 0x2)),
+ (0x0FA12, (0x2FA, 0x2)),
+ (0x0FA44, (0x336, 0x2)),
+ (0x0F981, (0x1D0, 0x2)),
+ (0x2F9DC, (0x610, 0x2)),
+ (0x0F95C, (0x348, 0x2)),
+ (0x0F937, (0x60E, 0x2)),
+ (0x2F87A, (0x20C, 0x2)),
+ (0x2F903, (0x38A, 0x2)),
+ (0x2F9C5, (0x7A4, 0x2)),
+ (0x2F8CF, (0x302, 0x2)),
+ (0x2F909, (0x3A2, 0x2)),
+ (0x2F991, (0x538, 0x2)),
+ (0x0FA65, (0x602, 0x2)),
+ (0x0FA73, (0x0A8, 0x2)),
+ (0x2F88E, (0x23A, 0x2)),
+ (0x0F9EF, (0x42A, 0x2)),
+ (0x2F9CB, (0x7A6, 0x2)),
+ (0x2F9A3, (0x55C, 0x2)),
+ (0x2F99C, (0x548, 0x2)),
+ (0x2F919, (0x3CE, 0x2)),
+ (0x2F857, (0x1A4, 0x2)),
+ (0x2F96C, (0x4DA, 0x2)),
+ (0x2F800, (0x096, 0x2)),
+ (0x2FA1A, (0x6E2, 0x2)),
+ (0x0F97F, (0x126, 0x2)),
+ (0x0FABA, (0x5DE, 0x2)),
+ (0x0FA82, (0x23C, 0x2)),
+ (0x2F92E, (0x41C, 0x2)),
+ (0x0F9FE, (0x54A, 0x2)),
+ (0x0F994, (0x428, 0x2)),
+ (0x2F83C, (0x164, 0x2)),
+ (0x0FA50, (0x486, 0x2)),
+ (0x2F817, (0x0E4, 0x2)),
+ (0x0FA38, (0x192, 0x2)),
+ (0x0FA69, (0x696, 0x2)),
+ (0x0FAAC, (0x4AC, 0x2)),
+ (0x0F901, (0x30A, 0x2)),
+ (0x0FA33, (0x11A, 0x2)),
+ (0x0F9BF, (0x34A, 0x2)),
+ (0x0F9D1, (0x0D8, 0x2)),
+ (0x0F95F, (0x1EE, 0x2)),
+ (0x2F82F, (0x13E, 0x2)),
+ (0x0F9A4, (0x2C4, 0x2)),
+ (0x2F89E, (0x25E, 0x2)),
+ (0x2F801, (0x092, 0x2)),
+ (0x2F84F, (0x194, 0x2)),
+ (0x2F961, (0x778, 0x2)),
+ (0x2F87E, (0x218, 0x2)),
+ (0x2F9D5, (0x5FA, 0x2)),
+ (0x0F9E7, (0x5B0, 0x2)),
+ (0x0F973, (0x2BC, 0x2)),
+ (0x0F9C2, (0x572, 0x2)),
+ (0x2F9D0, (0x5DA, 0x2)),
+ (0x0F9A5, (0x362, 0x2)),
+ (0x2F80C, (0x000, 0x2)),
+ (0x0F930, (0x2E2, 0x2)),
+ (0x2F8A1, (0x01C, 0x2)),
+ (0x2F828, (0x12A, 0x2)),
+ (0x2F89F, (0x262, 0x2)),
+ (0x0F964, (0x478, 0x2)),
+ (0x0F94E, (0x3B2, 0x2)),
+ (0x2F8D7, (0x05E, 0x2)),
+ (0x2F806, (0x0B2, 0x2)),
+ (0x2F9CC, (0x7A8, 0x2)),
+ (0x2F94E, (0x468, 0x2)),
+ (0x2F929, (0x40E, 0x2)),
+ (0x0FA34, (0x122, 0x2)),
+ (0x2F939, (0x718, 0x2)),
+ (0x0F910, (0x582, 0x2)),
+ (0x0F926, (0x520, 0x2)),
+ (0x0F9A2, (0x236, 0x2)),
+ (0x0FA49, (0x3EE, 0x2)),
+ (0x0F953, (0x516, 0x2)),
+ (0x2F80F, (0x0CE, 0x2)),
+ (0x0F963, (0x130, 0x2)),
+ (0x2F8D4, (0x30E, 0x2)),
+ (0x0F9B2, (0x684, 0x2)),
+ (0x2F973, (0x784, 0x2)),
+ (0x2F897, (0x72A, 0x2)),
+ (0x2F9FC, (0x07E, 0x2)),
+ (0x0F99A, (0x628, 0x2)),
+ (0x2F85A, (0x1BC, 0x2)),
+ (0x0FACF, (0x722, 0x2)),
+ (0x2F9AB, (0x7A2, 0x2)),
+ (0x2F927, (0x754, 0x2)),
+ (0x2F9FD, (0x7C2, 0x2)),
+ (0x0FA36, (0x17E, 0x2)),
+ (0x0F904, (0x3AE, 0x2)),
+ (0x2F81C, (0x7BC, 0x2)),
+ (0x0FA7B, (0x18A, 0x2)),
+ (0x0FA41, (0x2E4, 0x2)),
+ (0x2F87B, (0x712, 0x2)),
+ (0x2F9BA, (0x592, 0x2)),
+ (0x0F979, (0x0F0, 0x2)),
+ (0x0F9D7, (0x618, 0x2)),
];
pub(crate) const COMBINING_MARK_SALT: &[u16] = &[
- 0x0,
- 0x0,
- 0xd,
- 0x4,
- 0xc,
- 0x5,
- 0x689,
- 0x7,
- 0x0,
- 0x2,
- 0x0,
- 0x2,
- 0x3,
- 0x0,
- 0x0,
- 0xab,
- 0x0,
- 0x158,
- 0x0,
- 0x5a,
- 0x1c6,
- 0x143,
- 0x0,
- 0x1,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x6,
- 0x4,
- 0x0,
- 0x92,
- 0x0,
- 0x0,
- 0x24d,
- 0x0,
- 0x7,
- 0x0,
- 0x7f,
- 0xc,
- 0x0,
- 0xc7,
- 0x0,
- 0x16d,
- 0x0,
- 0x0,
- 0x0,
- 0xda,
- 0x4,
- 0x19,
- 0x5,
- 0x0,
- 0x93,
- 0x6,
- 0x7c,
- 0x13,
- 0x11b,
- 0x0,
- 0x1,
- 0x8,
- 0x58,
- 0x0,
- 0x5c,
- 0xa5,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0xb4,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x8,
- 0x0,
- 0x79,
- 0x7,
- 0x0,
- 0xa0,
- 0x37,
- 0x0,
- 0x7,
- 0x36,
- 0x5,
- 0x39,
- 0x0,
- 0x0,
- 0x2,
- 0x9,
- 0x0,
- 0x0,
- 0x73,
- 0x1,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x3d,
- 0x1,
- 0x0,
- 0x4,
- 0x0,
- 0x54,
- 0x1,
- 0x0,
- 0x27,
- 0x4d,
- 0xfa,
- 0x4d,
- 0x3,
- 0x1c,
- 0xdd,
- 0x6,
- 0x1,
- 0x24,
- 0x41,
- 0x0,
- 0x0,
- 0x0,
- 0xb,
- 0x0,
- 0x5,
- 0x3,
- 0xb6,
- 0x0,
- 0xf,
- 0x0,
- 0x1,
- 0x16,
- 0x0,
- 0x0,
- 0x9e,
- 0x1,
- 0x0,
- 0x21,
- 0x0,
- 0x25,
- 0x4,
- 0x10,
- 0x4,
- 0x15,
- 0x2,
- 0x1,
- 0x23,
- 0x5,
- 0x84,
- 0x0,
- 0x0,
- 0xf,
- 0xa,
- 0x2,
- 0x37,
- 0x1,
- 0x0,
- 0x46,
- 0xd,
- 0x12,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x24,
- 0xc,
- 0x4a,
- 0x2,
- 0x4,
- 0x0,
- 0x42,
- 0x0,
- 0x4,
- 0x13,
- 0x2,
- 0x13,
- 0x7b,
- 0x3e,
- 0x0,
- 0x11,
- 0x2,
- 0x7,
- 0x1,
- 0x0,
- 0x31,
- 0x3,
- 0x0,
- 0x12,
- 0x0,
- 0x0,
- 0x0,
- 0x35,
- 0x6,
- 0xe,
- 0x1e,
- 0xc1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x5,
- 0x2,
- 0x1c,
- 0x0,
- 0x8,
- 0x0,
- 0x9,
- 0x3,
- 0x8d,
- 0x70,
- 0x54,
- 0x23,
- 0x11,
- 0x1f,
- 0x5,
- 0x17,
- 0x4,
- 0x2,
- 0x0,
- 0x47,
- 0x17,
- 0xc,
- 0x2a,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x5,
- 0x38,
- 0x11,
- 0x15,
- 0x39,
- 0x6,
- 0x0,
- 0x3,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x53,
- 0x4,
- 0x1,
- 0x1,
- 0x1,
- 0x2,
- 0x0,
- 0xf,
- 0x6,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x28,
- 0x4,
- 0x0,
- 0x0,
- 0x11,
- 0x2e,
- 0x6,
- 0x4,
- 0x1,
- 0x1,
- 0x12,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x5,
- 0x0,
- 0x15,
- 0x2e,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0xd,
- 0x3,
- 0x0,
- 0x0,
- 0x3f,
- 0x8,
- 0x0,
- 0x8,
- 0x0,
- 0x0,
- 0x1a,
- 0x2,
- 0x0,
- 0x7,
- 0x0,
- 0xa,
- 0x0,
- 0x3,
- 0xc,
- 0x0,
- 0x14,
- 0x0,
- 0x6,
- 0x0,
- 0x19,
- 0x1,
- 0x3,
- 0x3,
- 0x6,
- 0x10,
- 0x12,
- 0x1,
- 0x16,
- 0x0,
- 0x4,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x2,
- 0x21,
- 0x1,
- 0x3,
- 0x13,
- 0x16,
- 0x0,
- 0x0,
- 0x1,
- 0x5,
- 0x0,
- 0xe,
- 0x0,
- 0x0,
- 0x38,
- 0x2,
- 0x20,
- 0x3,
- 0x0,
- 0xa,
- 0xe,
- 0x1,
- 0x3,
- 0x0,
- 0x0,
- 0xa,
- 0x6,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x4,
- 0x18,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0xc,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0xb,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x1b,
- 0x6,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x5,
- 0x20,
- 0x0,
- 0x9,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0xc,
- 0x0,
- 0x16,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x7,
- 0x0,
- 0x8,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1f,
- 0xa,
- 0x28,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x8,
- 0xd,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x3a,
- 0x4,
- 0x8,
- 0xb,
- 0x0,
- 0x17,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x22,
- 0x0,
- 0x4,
- 0x0,
- 0x1,
- 0x2,
- 0x6,
- 0x17,
- 0x7,
- 0x9,
- 0x27,
- 0x0,
- 0x1,
- 0x11,
- 0x7,
- 0x23,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x9,
- 0x8,
- 0x2,
- 0x27,
- 0x8,
- 0x0,
- 0x17,
- 0xc,
- 0x3b,
- 0x6,
- 0x0,
- 0x0,
- 0xc,
- 0x0,
- 0x4,
- 0x0,
- 0x2e,
- 0x5,
- 0x7,
- 0x7,
- 0x0,
- 0x3,
- 0xf,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x6,
- 0x2,
- 0x2,
- 0x4,
- 0x0,
- 0x3,
- 0xf,
- 0x0,
- 0x1,
- 0x12,
- 0x24,
- 0x0,
- 0x0,
- 0x0,
- 0xb,
- 0x1f,
- 0x15,
- 0xd,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x8,
- 0x0,
- 0x0,
- 0xc,
- 0x1,
- 0xe,
- 0x0,
- 0x4,
- 0x4,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0x2,
- 0x0,
- 0x2e,
- 0x0,
- 0x11,
- 0x0,
- 0x1b,
- 0xa,
- 0x13,
- 0x12,
- 0x2,
- 0x9,
- 0x1,
- 0xd,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0xd,
- 0x0,
- 0xb,
- 0x6,
- 0x0,
- 0x0,
- 0xb,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x13,
- 0x16,
- 0xd,
- 0xe,
- 0x4,
- 0xf,
- 0xb,
- 0x2,
- 0x0,
- 0x0,
- 0xa,
- 0x0,
- 0x3,
- 0x0,
- 0xd,
- 0x2,
- 0xb,
- 0x0,
- 0x1d,
- 0x0,
- 0x2,
- 0x7,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x7,
- 0x6,
- 0xe,
- 0x4,
- 0x0,
- 0x1,
- 0x8,
- 0x14,
- 0x0,
- 0x0,
- 0x15,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x10,
- 0x0,
- 0x0,
- 0x6,
- 0x17,
- 0x0,
- 0x1,
- 0x0,
- 0x10,
- 0x0,
- 0x0,
- 0x0,
- 0xa,
- 0x0,
- 0x0,
- 0x1,
- 0x6,
- 0x4,
- 0x0,
- 0x4,
- 0x1,
- 0x1,
- 0x2,
- 0x2,
- 0x0,
- 0x1,
- 0x7,
- 0x0,
- 0x0,
- 0x2,
- 0x2,
- 0x7,
- 0x2,
- 0x1f,
- 0x9,
- 0x0,
- 0x4,
- 0x7,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x3,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x1,
- 0x9,
- 0x17,
- 0x6,
- 0xf,
- 0xc,
- 0x0,
- 0x0,
- 0x0,
- 0x10,
- 0x0,
- 0x2,
- 0x2,
- 0x0,
- 0x6,
- 0x2,
- 0x0,
- 0x3,
- 0x2,
- 0x9,
- 0x3,
- 0x2,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x12,
- 0x4,
- 0x0,
- 0x8,
- 0x0,
- 0x3,
- 0x18,
- 0x0,
- 0x3,
- 0xc,
- 0x0,
- 0x2,
- 0x26,
- 0x0,
- 0x0,
- 0x2,
- 0x6,
- 0x2,
- 0x0,
- 0x1,
- 0x9,
- 0x8,
- 0x16,
- 0x1,
- 0x3,
- 0x11,
- 0x0,
- 0x13,
- 0x0,
- 0x2,
- 0x7,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0xc,
- 0x1a,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x2,
- 0x9,
- 0x4,
- 0x12,
- 0x0,
- 0x0,
- 0x11,
- 0x8,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0x3,
- 0x6,
- 0xf,
- 0x4,
- 0x1,
- 0x3,
- 0x0,
- 0x7,
- 0x4,
- 0x9,
- 0x4,
- 0x1,
- 0x0,
- 0x5,
- 0x4,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x2,
- 0x15,
- 0x2,
- 0x0,
- 0x8,
- 0x0,
- 0x2,
- 0x0,
- 0x3,
- 0x11,
- 0x6,
- 0x6,
- 0xd,
- 0x1,
- 0x0,
- 0x1,
- 0x3,
- 0x6,
- 0x20,
- 0x4,
- 0x1,
- 0x2,
- 0xb,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x11,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x7,
- 0x4,
- 0x5,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x5,
- 0x0,
- 0x2,
- 0x3,
- 0x0,
- 0x3,
- 0x0,
- 0x4,
- 0x4,
- 0x2,
- 0x0,
- 0x2,
- 0x19,
- 0x4,
- 0x1,
- 0x13,
- 0x1,
- 0x2,
- 0x9,
- 0xb,
- 0x6,
- 0x4,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x1a,
- 0x0,
- 0x2,
- 0x5,
- 0x0,
- 0xf,
- 0x0,
- 0x8,
- 0x0,
- 0x0,
- 0x2,
- 0x4,
- 0x10,
- 0x1,
- 0x1,
- 0x2,
- 0x12,
- 0x0,
- 0x0,
- 0x9,
- 0x0,
- 0x13,
- 0x1,
- 0x2,
- 0x4,
- 0x6,
- 0x4,
- 0x4,
- 0x0,
- 0x6,
- 0x2,
- 0x15,
- 0x0,
- 0x1,
- 0x9,
- 0xe,
- 0x2,
- 0x3,
- 0x3,
- 0x0,
- 0x1,
- 0x4,
- 0x0,
- 0x0,
- 0x5,
- 0xe,
- 0x0,
- 0x7,
- 0x0,
- 0x2,
- 0x0,
- 0xb,
- 0x2,
- 0x0,
- 0x1,
- 0x4,
- 0x9,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x4,
- 0x1,
- 0xd,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x4,
- 0x3,
- 0x1,
- 0x2,
- 0x0,
- 0x2,
- 0x5,
- 0x0,
- 0x3,
- 0x2c,
- 0xa,
- 0x3,
- 0x0,
- 0x9,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x27,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x15,
- 0x1,
- 0x2,
- 0x4,
- 0x0,
- 0x2,
- 0x0,
- 0x3,
- 0x3,
- 0x1,
- 0x0,
- 0x2,
- 0x5,
- 0xa,
- 0x9,
- 0x1,
- 0x2,
- 0x3,
- 0x1,
- 0x5,
- 0x1,
- 0x8,
- 0x1,
- 0x1,
- 0xf,
- 0x0,
- 0x3,
- 0xa,
- 0x3,
- 0x4,
- 0xd,
- 0x3,
- 0x1,
- 0x0,
- 0xc,
- 0x1e,
- 0x1,
- 0x1,
- 0xa,
- 0x1,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x6,
- 0x0,
- 0x3,
- 0x2,
- 0x7,
- 0x3,
- 0xe,
- 0x3,
- 0x4,
- 0xf,
- 0x4,
- 0x2,
- 0x3,
- 0x8,
- 0x0,
- 0x2,
- 0x3,
- 0x1,
- 0x10,
- 0x2,
- 0x2,
- 0x2,
- 0x0,
- 0x0,
- 0x5,
- 0x2,
- 0x0,
- 0x0,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x7,
- 0x8,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0xb,
- 0x7,
- 0x0,
- 0x3,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0xa,
- 0xa,
- 0x5,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x9,
- 0x0,
- 0x2,
- 0xb,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x8,
- 0x1,
- 0xc,
- 0xc,
- 0x4,
- 0x0,
- 0x1,
- 0x4,
- 0x3,
- 0x4,
- 0x3,
- 0x1,
- 0x7,
- 0x5,
- 0x2,
- 0x4,
- 0x1,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x8,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x2,
- 0x0,
- 0xc,
- 0x5,
- 0x1,
- 0x0,
- 0x2,
- 0x2,
- 0x6,
- 0x0,
- 0x1,
- 0x2,
- 0x2,
- 0x0,
- 0x0,
- 0x6,
- 0x2,
- 0x7,
- 0x1,
- 0x0,
- 0x0,
- 0x5,
- 0x1,
- 0xa,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0xc,
- 0x0,
- 0x3,
- 0x2,
- 0x9,
- 0x0,
- 0x2,
- 0x3,
- 0x0,
- 0x1,
- 0x1,
- 0x5,
- 0x4,
- 0x7,
- 0x1,
- 0x1,
- 0x1,
- 0x2,
- 0x1,
- 0x3,
- 0x3,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0x2,
- 0x2,
- 0x0,
- 0x1,
- 0x6,
- 0x1,
- 0xa,
- 0x0,
- 0x0,
- 0x8,
- 0x0,
- 0x5,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x7,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x10,
- 0x7,
- 0x1,
- 0x5,
- 0xe,
- 0x0,
- 0x0,
- 0x0,
- 0x5,
- 0x7,
- 0x5,
- 0x1,
- 0x0,
- 0x4,
- 0x0,
- 0x5,
- 0x3,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x9,
- 0x0,
- 0x4,
- 0x2,
- 0x3,
- 0x6,
- 0x5,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x3,
- 0x2,
- 0x4,
- 0x2,
- 0x2,
- 0x2,
- 0x0,
- 0x3,
- 0x6,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x2,
- 0x14,
- 0x0,
- 0x0,
- 0x7,
- 0x5,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x6,
- 0xb,
- 0x5,
- 0x0,
- 0xf,
- 0x1,
- 0x0,
- 0x6,
- 0x9,
- 0x1,
- 0x7,
- 0x2,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x5,
- 0x7,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x6,
- 0x6,
- 0x0,
- 0x7,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x8,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x6,
- 0xb,
- 0x7,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x8,
- 0x1,
- 0x1,
- 0x5,
- 0x2,
- 0x1,
- 0x2,
- 0xa,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x2,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x6,
- 0x2,
- 0x0,
- 0x2,
- 0x1,
- 0x4,
- 0x1,
- 0x2,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x4,
- 0x2,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x4,
- 0x3,
- 0x2,
- 0x3,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x3,
- 0x3,
- 0x0,
- 0x5,
- 0x5,
- 0x1,
- 0x3,
- 0x6,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0xa,
- 0x3,
- 0x1,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x2,
- 0x4,
- 0x3,
- 0x2,
- 0x0,
- 0x2,
- 0x5,
- 0x1,
- 0x0,
- 0xb,
- 0xa,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x3,
- 0x8,
- 0x2,
- 0x0,
- 0x4,
- 0x0,
- 0x1,
- 0x0,
- 0x8,
- 0x2,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x5,
- 0x3,
- 0x6,
- 0x2,
- 0x14,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x3,
- 0x3,
- 0x1,
- 0x3,
- 0x6,
- 0x8,
- 0x1,
- 0x1,
- 0x1,
- 0x1,
- 0x3,
- 0x8,
- 0x0,
- 0x0,
- 0x4,
- 0x6,
- 0x3,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x9,
- 0xa,
- 0x3,
- 0x3,
- 0x2,
- 0x5,
- 0x7,
- 0x2,
- 0x0,
- 0xa,
- 0x1,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x2,
- 0x0,
- 0x1,
- 0x6,
- 0x1,
- 0x0,
- 0x0,
- 0xb,
- 0x3,
- 0x2,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x6,
- 0x0,
- 0x2,
- 0x12,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x6,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x3,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0xf,
- 0x3,
- 0x2,
- 0xe,
- 0x9,
- 0x0,
- 0x1,
- 0x6,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0x0,
- 0x7,
- 0x5,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0xc,
- 0x0,
- 0x3,
- 0x0,
- 0x4,
- 0x6,
- 0x5,
- 0x1,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x4,
- 0x3,
- 0x0,
- 0x3,
- 0x4,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x6,
- 0x0,
- 0x6,
- 0x0,
- 0x2,
- 0x0,
- 0x2,
- 0x3,
- 0x3,
- 0x5,
- 0x1,
- 0x0,
- 0x5,
- 0x5,
- 0x3,
- 0x1,
- 0x1,
- 0x1,
- 0x1,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x1,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x7,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x1,
- 0x3,
- 0x0,
- 0x0,
- 0x4,
- 0x2,
- 0x5,
- 0x1,
- 0x2,
- 0x3,
- 0x0,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x6,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0x11,
- 0x0,
- 0x2,
- 0x5,
- 0x1,
- 0x9,
- 0x1,
- 0x0,
- 0x5,
- 0x3,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x6,
- 0x0,
- 0x4,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x8,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x7,
- 0x1,
- 0x0,
- 0x1,
- 0x5,
- 0x0,
- 0x1,
- 0x6,
- 0x2,
- 0x3,
- 0x5,
- 0x4,
- 0x2,
- 0x1,
- 0x1,
- 0x7,
- 0x3,
- 0x2,
- 0x3,
- 0x1,
- 0x0,
- 0x2,
- 0x8,
- 0x4,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0x0,
- 0xb,
- 0x2,
- 0x2,
- 0xf,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x5,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x3,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x6,
- 0x2,
- 0x2,
- 0x3,
- 0x1,
- 0xc,
- 0x0,
- 0x1,
- 0x6,
- 0x2,
- 0x3,
- 0x2,
- 0x1,
- 0x2,
- 0x1,
- 0x3,
- 0x2,
- 0x3,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x4,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x3,
- 0x4,
- 0x2,
- 0xb,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x4,
- 0x2,
- 0x5,
- 0x2,
- 0x7,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x6,
- 0x0,
- 0x0,
- 0x1,
- 0x4,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x5,
- 0x6,
- 0x1,
- 0x0,
- 0x1,
- 0x5,
- 0x0,
- 0x0,
- 0x4,
- 0x2,
- 0x3,
- 0x1,
- 0x0,
- 0xa,
- 0x3,
- 0xa,
- 0x2,
- 0x2,
- 0x1,
- 0x1,
- 0x2,
- 0x2,
- 0x3,
- 0x4,
- 0x2,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x7,
- 0x0,
- 0x3,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x4,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x6,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x3,
- 0xa,
- 0x1,
- 0x6,
- 0x2,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x6,
- 0x3,
- 0x0,
- 0x2,
- 0x6,
- 0x3,
- 0x4,
- 0x0,
- 0xa,
- 0x0,
- 0x2,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x4,
- 0x3,
- 0x2,
- 0x2,
- 0x0,
- 0x8,
- 0x1,
- 0x4,
- 0x4,
- 0x1,
- 0x1,
- 0x1,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x5,
- 0x1,
- 0x0,
- 0xa,
- 0x6,
- 0x1,
- 0x2,
- 0x4,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x5,
- 0x1,
- 0x3,
- 0x3,
- 0x0,
- 0x0,
- 0x1,
- 0x6,
- 0x5,
- 0xc,
- 0x0,
- 0x0,
- 0xa,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x4,
- 0x1,
- 0x2,
- 0x3,
- 0x2,
- 0x4,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x2,
- 0x2,
- 0x7,
- 0x1,
- 0x4,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x5,
- 0x2,
- 0x1,
- 0x0,
- 0x1,
- 0xa,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x4,
- 0x1,
- 0x4,
- 0x4,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x3,
- 0x0,
- 0x4,
- 0x3,
- 0x1,
- 0x0,
- 0x6,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x3,
- 0x0,
- 0x0,
- 0x3,
- 0x3,
- 0x0,
- 0x1,
- 0x2,
- 0x2,
- 0x1,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0xb,
- 0x7,
- 0x0,
- 0x1,
- 0x5,
- 0x1,
- 0x0,
- 0x0,
- 0x9,
- 0x1,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0xe,
- 0x2,
- 0x0,
- 0x4,
- 0x3,
- 0x1,
- 0x6,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x5,
- 0x3,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x3,
- 0x1,
- 0x0,
- 0x1,
- 0x5,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x1,
- 0x7,
- 0x1,
- 0x1,
- 0x2,
- 0x6,
- 0x4,
- 0x2,
- 0x3,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x3,
- 0x0,
- 0x1,
- 0x5,
- 0x0,
- 0x0,
- 0x6,
- 0x2,
- 0x2,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x1,
- 0x1,
- 0x2,
- 0x4,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x2,
- 0x0,
- 0x4,
- 0x1,
- 0x4,
- 0x2,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x2,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x5,
- 0x3,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x7,
- 0x4,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x5,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x2,
- 0x2,
- 0x2,
- 0x1,
- 0x2,
- 0x5,
- 0x2,
- 0x1,
- 0x1,
- 0x3,
- 0x0,
- 0x3,
- 0x1,
- 0x0,
- 0x2,
- 0x3,
- 0x6,
- 0x0,
- 0x3,
- 0x2,
- 0x0,
- 0x5,
- 0x0,
- 0x4,
- 0x4,
- 0x3,
- 0x1,
- 0x0,
- 0x2,
- 0x8,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x2,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x1,
- 0x4,
- 0x1,
- 0x2,
- 0x2,
- 0x2,
- 0x2,
- 0x0,
- 0x2,
- 0x4,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x2,
- 0x4,
- 0x4,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x4,
- 0x2,
- 0x3,
- 0x6,
- 0x0,
- 0x1,
- 0x5,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x2,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x3,
- 0x1,
- 0x1,
- 0x9,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x2,
- 0x2,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x5,
- 0x2,
- 0x4,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x8,
- 0x0,
- 0x3,
- 0x1,
- 0x3,
- 0x1,
- 0x2,
- 0x1,
- 0x1,
- 0x2,
- 0x1,
- 0x1,
- 0x3,
- 0x3,
- 0x1,
- 0x0,
- 0x3,
- 0x1,
- 0x2,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x4,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x1,
- 0x0,
- 0x1,
- 0x3,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x5,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x8,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x11,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x5,
- 0x0,
- 0x0,
- 0x6,
- 0x3,
- 0x0,
- 0x2,
- 0x2,
- 0x1,
- 0x1,
- 0x5,
- 0x3,
- 0x2,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x4,
- 0x1,
- 0x2,
- 0x2,
- 0x0,
- 0x1,
- 0x2,
- 0x2,
- 0x1,
- 0x1,
- 0xa,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x2,
- 0x1,
- 0x4,
- 0x6,
- 0x1,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x4,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0xb,
- 0x1,
- 0x8,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x5,
- 0x0,
- 0x3,
- 0xf,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x1,
- 0x1,
- 0x2,
- 0x8,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
+ 0x000, 0x000, 0x002, 0x001, 0x008, 0x005, 0x969, 0x1EE, 0x007, 0x0CD, 0x2D9, 0x012, 0x003,
+ 0x000, 0x000, 0x2D4, 0x000, 0x0C7, 0x14A, 0x000, 0x001, 0x38A, 0x000, 0x000, 0x007, 0x083,
+ 0x00A, 0x000, 0x000, 0x000, 0x001, 0x02B, 0x05D, 0x000, 0x000, 0x000, 0x0A0, 0x000, 0x005,
+ 0x000, 0x04B, 0x15D, 0x000, 0x023, 0x0BA, 0x000, 0x000, 0x000, 0x000, 0x058, 0x005, 0x002,
+ 0x005, 0x000, 0x064, 0x002, 0x000, 0x002, 0x019, 0x000, 0x001, 0x0EC, 0x001, 0x103, 0x026,
+ 0x011, 0x000, 0x001, 0x000, 0x000, 0x040, 0x003, 0x01C, 0x001, 0x023, 0x000, 0x002, 0x001,
+ 0x014, 0x000, 0x0B4, 0x000, 0x0A0, 0x0D8, 0x000, 0x003, 0x003, 0x08C, 0x02E, 0x000, 0x000,
+ 0x00E, 0x009, 0x000, 0x000, 0x02E, 0x001, 0x001, 0x000, 0x000, 0x000, 0x079, 0x001, 0x000,
+ 0x000, 0x036, 0x000, 0x001, 0x000, 0x000, 0x004, 0x03A, 0x000, 0x001, 0x01C, 0x180, 0x002,
+ 0x006, 0x0CA, 0x002, 0x000, 0x000, 0x000, 0x000, 0x076, 0x083, 0x000, 0x007, 0x07A, 0x000,
+ 0x018, 0x009, 0x070, 0x0AA, 0x000, 0x00F, 0x03C, 0x002, 0x000, 0x008, 0x000, 0x021, 0x008,
+ 0x03D, 0x019, 0x017, 0x003, 0x003, 0x017, 0x003, 0x018, 0x000, 0x000, 0x006, 0x001, 0x002,
+ 0x000, 0x004, 0x000, 0x004, 0x011, 0x034, 0x000, 0x004, 0x000, 0x000, 0x000, 0x000, 0x013,
+ 0x002, 0x000, 0x003, 0x016, 0x000, 0x007, 0x033, 0x006, 0x021, 0x007, 0x008, 0x024, 0x000,
+ 0x000, 0x003, 0x00B, 0x003, 0x006, 0x000, 0x0CB, 0x001, 0x000, 0x012, 0x000, 0x000, 0x000,
+ 0x01F, 0x00A, 0x024, 0x014, 0x054, 0x000, 0x000, 0x000, 0x000, 0x00D, 0x001, 0x029, 0x000,
+ 0x00B, 0x000, 0x001, 0x000, 0x017, 0x001, 0x012, 0x01B, 0x003, 0x000, 0x005, 0x000, 0x001,
+ 0x003, 0x001, 0x047, 0x000, 0x02C, 0x006, 0x000, 0x05B, 0x01F, 0x000, 0x000, 0x000, 0x004,
+ 0x001, 0x000, 0x003, 0x000, 0x008, 0x001, 0x028, 0x001, 0x001, 0x000, 0x000, 0x000, 0x005,
+ 0x003, 0x005, 0x02A, 0x001, 0x002, 0x000, 0x016, 0x015, 0x022, 0x000, 0x000, 0x01A, 0x009,
+ 0x00A, 0x000, 0x000, 0x001, 0x00D, 0x000, 0x005, 0x001, 0x001, 0x001, 0x000, 0x000, 0x000,
+ 0x000, 0x001, 0x005, 0x03A, 0x000, 0x010, 0x002, 0x004, 0x000, 0x000, 0x03A, 0x000, 0x015,
+ 0x002, 0x004, 0x000, 0x000, 0x01A, 0x00A, 0x000, 0x00B, 0x000, 0x000, 0x006, 0x002, 0x000,
+ 0x012, 0x000, 0x012, 0x000, 0x003, 0x01F, 0x006, 0x00C, 0x000, 0x000, 0x022, 0x000, 0x002,
+ 0x0A0, 0x00C, 0x003, 0x001, 0x039, 0x004, 0x003, 0x00B, 0x008, 0x009, 0x002, 0x000, 0x000,
+ 0x000, 0x000, 0x003, 0x002, 0x000, 0x004, 0x00B, 0x003, 0x000, 0x000, 0x005, 0x000, 0x005,
+ 0x000, 0x01B, 0x000, 0x000, 0x02A, 0x01E, 0x001, 0x001, 0x000, 0x003, 0x031, 0x001, 0x004,
+ 0x010, 0x000, 0x005, 0x001, 0x00D, 0x000, 0x00F, 0x002, 0x000, 0x000, 0x002, 0x000, 0x008,
+ 0x00C, 0x000, 0x00E, 0x003, 0x000, 0x000, 0x017, 0x000, 0x001, 0x000, 0x001, 0x001, 0x000,
+ 0x000, 0x002, 0x008, 0x007, 0x002, 0x037, 0x000, 0x01C, 0x00D, 0x000, 0x00A, 0x000, 0x000,
+ 0x007, 0x023, 0x000, 0x004, 0x000, 0x000, 0x000, 0x019, 0x006, 0x000, 0x002, 0x000, 0x048,
+ 0x005, 0x000, 0x000, 0x020, 0x000, 0x000, 0x00A, 0x002, 0x000, 0x01C, 0x008, 0x031, 0x000,
+ 0x000, 0x000, 0x00C, 0x00B, 0x002, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x000, 0x01E,
+ 0x000, 0x016, 0x000, 0x000, 0x016, 0x028, 0x000, 0x000, 0x000, 0x03A, 0x000, 0x001, 0x000,
+ 0x004, 0x000, 0x000, 0x000, 0x006, 0x002, 0x000, 0x011, 0x00B, 0x000, 0x007, 0x004, 0x000,
+ 0x00C, 0x000, 0x026, 0x036, 0x007, 0x002, 0x007, 0x00E, 0x002, 0x001, 0x00A, 0x000, 0x00E,
+ 0x002, 0x005, 0x008, 0x002, 0x002, 0x000, 0x000, 0x023, 0x005, 0x005, 0x00E, 0x005, 0x009,
+ 0x000, 0x00A, 0x004, 0x001, 0x006, 0x000, 0x000, 0x011, 0x000, 0x002, 0x000, 0x00E, 0x005,
+ 0x001, 0x000, 0x002, 0x00F, 0x001, 0x005, 0x000, 0x002, 0x00F, 0x001, 0x000, 0x002, 0x006,
+ 0x000, 0x03F, 0x009, 0x000, 0x000, 0x003, 0x003, 0x007, 0x000, 0x000, 0x000, 0x031, 0x00E,
+ 0x001, 0x000, 0x000, 0x001, 0x000, 0x002, 0x017, 0x003, 0x026, 0x000, 0x027, 0x000, 0x000,
+ 0x00C, 0x001, 0x006, 0x000, 0x003, 0x001, 0x000, 0x000, 0x002, 0x002, 0x000, 0x003, 0x000,
+ 0x008, 0x000, 0x01B, 0x000, 0x000, 0x00B, 0x013, 0x002, 0x001, 0x000, 0x002, 0x008, 0x000,
+ 0x001, 0x009, 0x000, 0x00D, 0x000, 0x004, 0x01B, 0x000, 0x000, 0x000, 0x003, 0x002, 0x000,
+ 0x001, 0x008, 0x00B, 0x015, 0x006, 0x001, 0x00B, 0x000, 0x008, 0x00A, 0x000, 0x000, 0x02B,
+ 0x000, 0x002, 0x000, 0x003, 0x005, 0x00B, 0x000, 0x00C, 0x000, 0x004, 0x004, 0x000, 0x000,
+ 0x001, 0x000, 0x000, 0x000, 0x007, 0x00A, 0x008, 0x002, 0x000, 0x001, 0x006, 0x014, 0x000,
+ 0x000, 0x003, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000, 0x003, 0x000, 0x000, 0x006, 0x003,
+ 0x000, 0x003, 0x000, 0x002, 0x000, 0x000, 0x000, 0x006, 0x000, 0x000, 0x004, 0x001, 0x004,
+ 0x000, 0x003, 0x001, 0x001, 0x004, 0x001, 0x000, 0x000, 0x003, 0x000, 0x000, 0x001, 0x002,
+ 0x001, 0x003, 0x002, 0x002, 0x000, 0x004, 0x00A, 0x008, 0x01E, 0x000, 0x000, 0x000, 0x000,
+ 0x001, 0x006, 0x004, 0x000, 0x000, 0x004, 0x000, 0x000, 0x002, 0x00F, 0x00B, 0x014, 0x000,
+ 0x002, 0x001, 0x000, 0x000, 0x000, 0x004, 0x000, 0x004, 0x002, 0x000, 0x006, 0x00B, 0x000,
+ 0x009, 0x018, 0x006, 0x006, 0x005, 0x001, 0x002, 0x000, 0x000, 0x000, 0x000, 0x006, 0x000,
+ 0x000, 0x00E, 0x001, 0x001, 0x000, 0x003, 0x000, 0x016, 0x003, 0x015, 0x000, 0x000, 0x006,
+ 0x006, 0x002, 0x000, 0x003, 0x001, 0x000, 0x00B, 0x005, 0x005, 0x001, 0x000, 0x000, 0x003,
+ 0x000, 0x004, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x001, 0x003, 0x000, 0x000, 0x002,
+ 0x002, 0x000, 0x00B, 0x000, 0x001, 0x005, 0x002, 0x000, 0x000, 0x011, 0x00F, 0x000, 0x001,
+ 0x00D, 0x00C, 0x001, 0x00B, 0x002, 0x010, 0x008, 0x001, 0x001, 0x004, 0x005, 0x011, 0x001,
+ 0x00B, 0x010, 0x000, 0x001, 0x006, 0x000, 0x00C, 0x000, 0x00E, 0x00B, 0x001, 0x000, 0x003,
+ 0x022, 0x004, 0x000, 0x001, 0x000, 0x007, 0x001, 0x004, 0x006, 0x001, 0x001, 0x000, 0x001,
+ 0x007, 0x003, 0x004, 0x007, 0x006, 0x001, 0x010, 0x00D, 0x000, 0x000, 0x000, 0x007, 0x003,
+ 0x000, 0x008, 0x001, 0x007, 0x003, 0x003, 0x000, 0x000, 0x010, 0x003, 0x002, 0x000, 0x000,
+ 0x000, 0x000, 0x005, 0x001, 0x000, 0x002, 0x000, 0x003, 0x000, 0x001, 0x010, 0x001, 0x000,
+ 0x015, 0x003, 0x007, 0x001, 0x00D, 0x005, 0x002, 0x015, 0x000, 0x001, 0x009, 0x000, 0x006,
+ 0x000, 0x003, 0x001, 0x000, 0x000, 0x002, 0x000, 0x002, 0x000, 0x000, 0x00F, 0x000, 0x001,
+ 0x015, 0x004, 0x002, 0x002, 0x001, 0x008, 0x000, 0x000, 0x000, 0x00C, 0x000, 0x004, 0x000,
+ 0x005, 0x007, 0x00F, 0x001, 0x003, 0x006, 0x001, 0x000, 0x004, 0x000, 0x00C, 0x004, 0x012,
+ 0x002, 0x002, 0x000, 0x001, 0x018, 0x004, 0x000, 0x000, 0x001, 0x00C, 0x000, 0x000, 0x00E,
+ 0x001, 0x000, 0x007, 0x002, 0x000, 0x000, 0x001, 0x017, 0x002, 0x002, 0x000, 0x000, 0x004,
+ 0x001, 0x000, 0x002, 0x006, 0x002, 0x003, 0x00A, 0x000, 0x005, 0x000, 0x003, 0x001, 0x002,
+ 0x002, 0x000, 0x001, 0x005, 0x003, 0x000, 0x00D, 0x00C, 0x001, 0x000, 0x001, 0x004, 0x000,
+ 0x002, 0x000, 0x001, 0x000, 0x000, 0x001, 0x005, 0x000, 0x000, 0x000, 0x000, 0x001, 0x01D,
+ 0x003, 0x002, 0x00C, 0x000, 0x000, 0x003, 0x009, 0x000, 0x000, 0x005, 0x003, 0x000, 0x001,
+ 0x002, 0x006, 0x001, 0x008, 0x001, 0x001, 0x00D, 0x004, 0x006, 0x008, 0x001, 0x00B, 0x007,
+ 0x00A, 0x006, 0x002, 0x00F, 0x005, 0x000, 0x00B, 0x006, 0x001, 0x001, 0x001, 0x004, 0x009,
+ 0x000, 0x001, 0x000, 0x003, 0x000, 0x009, 0x009, 0x004, 0x001, 0x001, 0x009, 0x006, 0x002,
+ 0x008, 0x007, 0x003, 0x000, 0x008, 0x007, 0x000, 0x014, 0x001, 0x001, 0x013, 0x003, 0x004,
+ 0x000, 0x000, 0x003, 0x001, 0x000, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
+ 0x005, 0x00A, 0x000, 0x000, 0x000, 0x012, 0x000, 0x000, 0x000, 0x002, 0x000, 0x008, 0x000,
+ 0x016, 0x011, 0x007, 0x003, 0x000, 0x009, 0x001, 0x002, 0x000, 0x000, 0x000, 0x000, 0x000,
+ 0x000, 0x001, 0x000, 0x000, 0x009, 0x00C, 0x004, 0x000, 0x002, 0x000, 0x000, 0x002, 0x001,
+ 0x007, 0x000, 0x000, 0x001, 0x000, 0x003, 0x000, 0x000, 0x000, 0x000, 0x009, 0x003, 0x002,
+ 0x008, 0x002, 0x000, 0x001, 0x001, 0x00A, 0x013, 0x002, 0x003, 0x001, 0x003, 0x006, 0x000,
+ 0x003, 0x001, 0x004, 0x002, 0x000, 0x000, 0x004, 0x004, 0x000, 0x000, 0x000, 0x00D, 0x002,
+ 0x009, 0x002, 0x000, 0x007, 0x007, 0x001, 0x000, 0x002, 0x006, 0x002, 0x000, 0x001, 0x002,
+ 0x003, 0x000, 0x000, 0x009, 0x003, 0x007, 0x001, 0x000, 0x000, 0x00F, 0x001, 0x00C, 0x000,
+ 0x003, 0x000, 0x002, 0x000, 0x000, 0x009, 0x002, 0x002, 0x000, 0x001, 0x000, 0x006, 0x000,
+ 0x002, 0x002, 0x003, 0x002, 0x001, 0x00F, 0x001, 0x008, 0x002, 0x002, 0x009, 0x009, 0x00B,
+ 0x007, 0x002, 0x000, 0x000, 0x005, 0x00E, 0x001, 0x004, 0x007, 0x002, 0x001, 0x000, 0x003,
+ 0x00A, 0x000, 0x000, 0x00E, 0x000, 0x009, 0x003, 0x003, 0x001, 0x000, 0x000, 0x000, 0x007,
+ 0x000, 0x008, 0x00E, 0x000, 0x000, 0x000, 0x000, 0x002, 0x010, 0x002, 0x001, 0x002, 0x000,
+ 0x009, 0x000, 0x000, 0x002, 0x006, 0x000, 0x001, 0x000, 0x002, 0x000, 0x00D, 0x003, 0x001,
+ 0x00B, 0x001, 0x001, 0x000, 0x007, 0x000, 0x000, 0x003, 0x002, 0x004, 0x006, 0x004, 0x000,
+ 0x001, 0x008, 0x001, 0x005, 0x005, 0x00B, 0x011, 0x004, 0x002, 0x000, 0x02A, 0x000, 0x001,
+ 0x004, 0x008, 0x004, 0x000, 0x001, 0x001, 0x000, 0x000, 0x001, 0x007, 0x00B, 0x003, 0x000,
+ 0x002, 0x000, 0x005, 0x004, 0x002, 0x000, 0x001, 0x00A, 0x009, 0x001, 0x002, 0x000, 0x006,
+ 0x003, 0x001, 0x006, 0x003, 0x000, 0x001, 0x003, 0x000, 0x000, 0x005, 0x002, 0x006, 0x002,
+ 0x001, 0x000, 0x000, 0x000, 0x000, 0x003, 0x001, 0x000, 0x004, 0x000, 0x007, 0x001, 0x000,
+ 0x000, 0x002, 0x008, 0x000, 0x004, 0x001, 0x015, 0x000, 0x004, 0x000, 0x000, 0x005, 0x000,
+ 0x009, 0x002, 0x008, 0x006, 0x001, 0x000, 0x001, 0x001, 0x002, 0x000, 0x001, 0x003, 0x000,
+ 0x000, 0x003, 0x000, 0x003, 0x001, 0x000, 0x000, 0x000, 0x000, 0x001, 0x001, 0x001, 0x008,
+ 0x000, 0x001, 0x001, 0x001, 0x009, 0x003, 0x002, 0x000, 0x000, 0x001, 0x00C, 0x007, 0x003,
+ 0x002, 0x00A, 0x000, 0x005, 0x008, 0x00A, 0x006, 0x005, 0x006, 0x001, 0x000, 0x003, 0x000,
+ 0x006, 0x003, 0x000, 0x002, 0x002, 0x004, 0x005, 0x003, 0x002, 0x001, 0x000, 0x001, 0x005,
+ 0x001, 0x000, 0x003, 0x001, 0x007, 0x001, 0x001, 0x000, 0x000, 0x003, 0x003, 0x007, 0x001,
+ 0x000, 0x001, 0x001, 0x003, 0x00A, 0x003, 0x00A, 0x000, 0x000, 0x000, 0x001, 0x003, 0x001,
+ 0x000, 0x004, 0x000, 0x002, 0x003, 0x006, 0x000, 0x000, 0x005, 0x001, 0x000, 0x000, 0x003,
+ 0x005, 0x003, 0x001, 0x001, 0x003, 0x000, 0x000, 0x000, 0x001, 0x001, 0x001, 0x001, 0x000,
+ 0x000, 0x001, 0x000, 0x001, 0x003, 0x001, 0x003, 0x004, 0x001, 0x009, 0x002, 0x002, 0x002,
+ 0x003, 0x006, 0x001, 0x000, 0x000, 0x001, 0x007, 0x000, 0x004, 0x000, 0x001, 0x000, 0x00B,
+ 0x000, 0x002, 0x001, 0x004, 0x000, 0x007, 0x002, 0x004, 0x008, 0x005, 0x001, 0x003, 0x001,
+ 0x000, 0x002, 0x000, 0x003, 0x000, 0x006, 0x003, 0x002, 0x000, 0x000, 0x008, 0x00D, 0x001,
+ 0x001, 0x000, 0x007, 0x001, 0x005, 0x008, 0x001, 0x009, 0x003, 0x000, 0x000, 0x003, 0x000,
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x004, 0x000, 0x000, 0x004, 0x003, 0x001, 0x004,
+ 0x000, 0x000, 0x000, 0x003, 0x003, 0x009, 0x003, 0x001, 0x000, 0x00A, 0x000, 0x001, 0x004,
+ 0x000, 0x001, 0x000, 0x000, 0x00C, 0x002, 0x000, 0x000, 0x007, 0x005, 0x000, 0x005, 0x000,
+ 0x000, 0x004, 0x000, 0x003, 0x000, 0x001, 0x006, 0x004, 0x004, 0x000, 0x002, 0x000, 0x003,
+ 0x001, 0x000, 0x005, 0x000, 0x002, 0x004, 0x000, 0x001, 0x000, 0x012, 0x001, 0x000, 0x008,
+ 0x003, 0x000, 0x002, 0x000, 0x005, 0x001, 0x001, 0x002, 0x001, 0x008, 0x003, 0x000, 0x006,
+ 0x001, 0x006, 0x001, 0x001, 0x002, 0x001, 0x000, 0x000, 0x000, 0x001, 0x003, 0x001, 0x004,
+ 0x000, 0x003, 0x008, 0x000, 0x005, 0x000, 0x000, 0x002, 0x000, 0x000, 0x001, 0x000, 0x000,
+ 0x00E, 0x001, 0x000, 0x000, 0x001, 0x003, 0x005, 0x000, 0x000, 0x001, 0x001, 0x003, 0x002,
+ 0x000, 0x002, 0x000, 0x007, 0x000, 0x000, 0x007, 0x001, 0x001, 0x000, 0x003, 0x000, 0x004,
+ 0x001, 0x002, 0x000, 0x000, 0x002, 0x003, 0x003, 0x000, 0x011, 0x000, 0x001, 0x001, 0x002,
+ 0x006, 0x003, 0x000, 0x002, 0x004, 0x002, 0x005, 0x000, 0x000, 0x000, 0x006, 0x000, 0x003,
+ 0x001, 0x007, 0x002, 0x000, 0x000, 0x000, 0x008, 0x000, 0x000, 0x001, 0x002, 0x000, 0x003,
+ 0x001, 0x001, 0x003, 0x000, 0x001, 0x001, 0x00E, 0x001, 0x000, 0x001, 0x008, 0x001, 0x001,
+ 0x001, 0x005, 0x008, 0x002, 0x003, 0x001, 0x000, 0x001, 0x003, 0x000, 0x001, 0x000, 0x003,
+ 0x001, 0x003, 0x000, 0x000, 0x000, 0x002, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000, 0x001,
+ 0x001, 0x002, 0x000, 0x004, 0x002, 0x001, 0x000, 0x007, 0x000, 0x003, 0x001, 0x000, 0x000,
+ 0x000, 0x008, 0x001, 0x001, 0x000, 0x003, 0x001, 0x000, 0x000, 0x001, 0x001, 0x000, 0x000,
+ 0x001, 0x005, 0x000, 0x001, 0x003, 0x002, 0x003, 0x001, 0x000, 0x00D, 0x001, 0x000, 0x003,
+ 0x002, 0x001, 0x004, 0x003, 0x001, 0x002, 0x002, 0x001, 0x002, 0x001, 0x003, 0x008, 0x000,
+ 0x003, 0x001, 0x000, 0x000, 0x000, 0x001, 0x000, 0x003, 0x002, 0x006, 0x002, 0x008, 0x000,
+ 0x000, 0x000, 0x000, 0x003, 0x000, 0x001, 0x000, 0x001, 0x005, 0x002, 0x005, 0x000, 0x001,
+ 0x000, 0x000, 0x000, 0x002, 0x000, 0x001, 0x006, 0x000, 0x001, 0x003, 0x000, 0x000, 0x002,
+ 0x000, 0x000, 0x001, 0x003, 0x00A, 0x004, 0x009, 0x000, 0x002, 0x000, 0x003, 0x003, 0x001,
+ 0x001, 0x00A, 0x000, 0x006, 0x004, 0x003, 0x003, 0x002, 0x001, 0x004, 0x002, 0x002, 0x003,
+ 0x005, 0x003, 0x000, 0x002, 0x000, 0x001, 0x001, 0x000, 0x002, 0x002, 0x001, 0x000, 0x004,
+ 0x002, 0x004, 0x000, 0x000, 0x000, 0x001, 0x007, 0x000, 0x000, 0x002, 0x003, 0x002, 0x003,
+ 0x000, 0x002, 0x001, 0x002, 0x000, 0x000, 0x000, 0x000, 0x003, 0x000, 0x004, 0x003, 0x008,
+ 0x008, 0x000, 0x001, 0x000, 0x000, 0x001, 0x000, 0x004, 0x000, 0x000, 0x001, 0x00C, 0x001,
+ 0x003, 0x000, 0x005, 0x001, 0x00A, 0x004, 0x001, 0x003, 0x001, 0x000, 0x001, 0x001, 0x000,
+ 0x003, 0x003, 0x003, 0x000, 0x000, 0x000, 0x007, 0x000, 0x005, 0x001, 0x000, 0x002, 0x000,
+ 0x003, 0x000, 0x002, 0x002, 0x001, 0x001, 0x001, 0x001, 0x004, 0x001, 0x005, 0x001, 0x000,
+ 0x001, 0x002, 0x001, 0x002, 0x002, 0x000, 0x000, 0x002, 0x001, 0x001, 0x003, 0x000, 0x000,
+ 0x004, 0x000, 0x00E, 0x004, 0x001, 0x002, 0x003, 0x001, 0x000, 0x002, 0x003, 0x000, 0x000,
+ 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000, 0x001, 0x000, 0x001, 0x000, 0x000, 0x00A,
+ 0x002, 0x000, 0x000, 0x000, 0x000, 0x012, 0x000, 0x000, 0x004, 0x003, 0x000, 0x003, 0x003,
+ 0x001, 0x001, 0x000, 0x000, 0x006, 0x005, 0x000, 0x001, 0x003, 0x002, 0x000, 0x001, 0x006,
+ 0x000, 0x000, 0x000, 0x001, 0x003, 0x002, 0x000, 0x002, 0x000, 0x000, 0x001, 0x000, 0x000,
+ 0x000, 0x003, 0x000, 0x005, 0x001, 0x002, 0x000, 0x000, 0x004, 0x000, 0x006, 0x000, 0x000,
+ 0x003, 0x004, 0x002, 0x000, 0x002, 0x002, 0x001, 0x008, 0x000, 0x001, 0x001, 0x001, 0x000,
+ 0x000, 0x001, 0x003, 0x000, 0x001, 0x003, 0x001, 0x000, 0x002, 0x000, 0x001, 0x000, 0x003,
+ 0x005, 0x000, 0x004, 0x001, 0x005, 0x000, 0x000, 0x001, 0x004, 0x002, 0x000, 0x000, 0x000,
+ 0x000, 0x004, 0x000, 0x000, 0x000, 0x001, 0x000, 0x010, 0x000, 0x001, 0x001, 0x000, 0x000,
+ 0x000, 0x001, 0x000, 0x001, 0x001, 0x006, 0x003, 0x005, 0x001, 0x000, 0x001, 0x001, 0x002,
+ 0x00E, 0x005, 0x003, 0x001, 0x001, 0x001, 0x002, 0x000, 0x001, 0x000, 0x004, 0x005, 0x002,
+ 0x003, 0x005, 0x003, 0x004, 0x000, 0x005, 0x001, 0x002, 0x001, 0x001, 0x002, 0x000, 0x005,
+ 0x001, 0x001, 0x001, 0x000, 0x002, 0x000, 0x006, 0x000, 0x001, 0x000, 0x002, 0x003, 0x002,
+ 0x003, 0x001, 0x000, 0x007, 0x001, 0x002, 0x003, 0x002, 0x001, 0x003, 0x000, 0x000, 0x000,
+ 0x001, 0x001, 0x005, 0x001, 0x000, 0x002, 0x001, 0x001, 0x001, 0x000, 0x000, 0x006, 0x000,
+ 0x001, 0x002, 0x001, 0x002, 0x001, 0x000, 0x000, 0x002, 0x001, 0x000, 0x002, 0x002, 0x001,
+ 0x002, 0x001, 0x003, 0x000, 0x002, 0x000, 0x000, 0x002, 0x000, 0x000, 0x002, 0x001, 0x001,
+ 0x005, 0x004, 0x004, 0x001, 0x003, 0x007, 0x001, 0x000, 0x000, 0x001, 0x002, 0x002, 0x003,
+ 0x001, 0x004, 0x005, 0x001, 0x001, 0x004, 0x001, 0x000, 0x008, 0x002, 0x000, 0x000, 0x003,
+ 0x002, 0x000, 0x001, 0x001, 0x001, 0x006, 0x002, 0x000, 0x004, 0x004, 0x001, 0x000, 0x004,
+ 0x002, 0x000, 0x000, 0x002, 0x000, 0x000, 0x000, 0x001, 0x000, 0x004, 0x001, 0x009, 0x001,
+ 0x004, 0x000, 0x001, 0x000, 0x001, 0x005, 0x000, 0x000, 0x000, 0x005, 0x003, 0x002, 0x003,
+ 0x004, 0x008, 0x002, 0x002, 0x000, 0x006, 0x001, 0x001, 0x002, 0x001, 0x000, 0x000, 0x002,
+ 0x000, 0x002, 0x002, 0x000, 0x002, 0x000, 0x002, 0x003, 0x000, 0x004, 0x002, 0x001, 0x002,
+ 0x003, 0x005, 0x001, 0x002, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x002, 0x002, 0x00B,
+ 0x000, 0x000, 0x000, 0x001, 0x006, 0x005, 0x000, 0x000, 0x000, 0x002, 0x002, 0x000, 0x003,
+ 0x003, 0x002, 0x001, 0x000, 0x001, 0x000, 0x000, 0x001, 0x001, 0x000, 0x000, 0x001, 0x001,
+ 0x004, 0x001, 0x000, 0x002, 0x002, 0x003, 0x003, 0x000, 0x000, 0x002, 0x004, 0x001, 0x002,
+ 0x005, 0x001, 0x001, 0x000, 0x001, 0x001, 0x001, 0x000, 0x004, 0x001, 0x000, 0x002, 0x000,
+ 0x001, 0x000, 0x003, 0x002, 0x002, 0x007, 0x003, 0x001, 0x001, 0x001, 0x002, 0x001, 0x001,
+ 0x003, 0x002, 0x000, 0x001, 0x002, 0x005, 0x001, 0x002, 0x001, 0x000, 0x003, 0x001, 0x000,
+ 0x003, 0x000, 0x000, 0x000, 0x003, 0x001, 0x000, 0x002, 0x000, 0x001, 0x000, 0x001, 0x000,
+ 0x001, 0x00A, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000,
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x003, 0x000, 0x000, 0x001, 0x005, 0x004, 0x000,
+ 0x000, 0x000, 0x007, 0x000, 0x001, 0x000, 0x003, 0x004, 0x003, 0x002, 0x000, 0x000, 0x001,
+ 0x000, 0x001, 0x001, 0x000, 0x000, 0x003, 0x001, 0x001, 0x000, 0x000, 0x000, 0x005, 0x001,
+ 0x000, 0x001, 0x001, 0x000, 0x003, 0x008, 0x000, 0x000, 0x003, 0x001, 0x000, 0x001, 0x004,
+ 0x001, 0x002, 0x001, 0x002, 0x002, 0x002, 0x000, 0x000, 0x000, 0x002, 0x000, 0x002, 0x000,
+ 0x001, 0x001, 0x001, 0x002, 0x003, 0x001, 0x004, 0x001, 0x001, 0x000, 0x001, 0x000, 0x003,
+ 0x000, 0x002, 0x002, 0x002, 0x002, 0x000, 0x002, 0x002, 0x001, 0x000, 0x000, 0x002, 0x003,
+ 0x000, 0x001, 0x000, 0x000, 0x003, 0x001, 0x001, 0x002, 0x002, 0x001, 0x003, 0x000, 0x009,
+ 0x001, 0x000, 0x001, 0x001, 0x002, 0x001, 0x002, 0x000, 0x001, 0x001, 0x000, 0x001, 0x001,
+ 0x001, 0x001, 0x001, 0x000, 0x001, 0x000, 0x008, 0x001, 0x001, 0x000, 0x001, 0x001, 0x004,
+ 0x000, 0x000, 0x003, 0x001, 0x001, 0x000, 0x001, 0x000, 0x002, 0x000, 0x000, 0x002, 0x001,
+ 0x002, 0x000, 0x001, 0x001, 0x000,
];
pub(crate) const COMBINING_MARK_KV: &[u32] = &[
- 0xe01cb,
- 0x115dd,
- 0x0e3a,
- 0x11441,
- 0xe0134,
- 0x11cb1,
- 0x115bd,
- 0x0faf,
- 0xe01dc,
- 0x11181,
- 0x11934,
- 0x11374,
- 0x0823,
- 0xa67c,
- 0x0a4d,
- 0xa952,
- 0x1e003,
- 0x0e49,
- 0x17b5,
- 0x1074,
- 0x2dfe,
- 0xa8be,
- 0x101fd,
- 0x102e0,
- 0x0fb1,
- 0xa9ba,
- 0x0c00,
- 0x1daa6,
- 0x05a2,
- 0xfe26,
- 0x0a41,
- 0x07a6,
- 0x0898,
- 0x0b82,
- 0x0afb,
- 0x0fbb,
- 0x1a7a,
- 0x1cf1a,
- 0x16f6b,
- 0xa675,
- 0x1cf45,
- 0xe012f,
- 0xe014f,
- 0x11c3b,
- 0x2df7,
- 0xa9bf,
- 0xa8eb,
- 0x1bc9e,
- 0x1a74,
- 0x0eb8,
- 0x302c,
- 0x0c4d,
- 0x064f,
- 0x105e,
- 0x0741,
- 0x1da44,
- 0x0b44,
- 0x1924,
- 0x1da1d,
- 0x09c0,
- 0xfe2d,
- 0x0330,
- 0xe01c3,
- 0x109d,
- 0x0322,
- 0x1cf18,
- 0x0c02,
- 0xe0128,
- 0x17cb,
- 0x1acb,
- 0xe01e3,
- 0xa802,
- 0x16f72,
- 0x11001,
- 0x11634,
- 0x1da9b,
- 0x08ce,
- 0x0eb7,
- 0x11041,
- 0x1a7b,
- 0x1057,
- 0xe0150,
- 0x1b6d,
- 0x0ce2,
- 0xa8e6,
- 0x1103e,
- 0x0619,
- 0x11081,
- 0x0fa3,
- 0x114c3,
- 0x11a90,
- 0x082c,
- 0x11173,
- 0x1a66,
- 0x1e8d4,
- 0x1d16e,
- 0x111b8,
- 0x1934,
- 0x1cf0c,
- 0xe01ce,
- 0x1cf39,
- 0x111be,
- 0xe01d2,
- 0x1da08,
- 0xe0141,
- 0x11236,
- 0x110c2,
- 0xfe25,
- 0x16b36,
- 0x0657,
- 0x0749,
- 0x0311,
- 0xe01c4,
- 0x20d3,
- 0x1da21,
- 0x1be9,
- 0x1cf0e,
- 0x16f5d,
- 0x1d182,
- 0x1cf41,
- 0x08fe,
- 0xfe05,
- 0x11a59,
- 0x1de6,
- 0x1ac6,
- 0xe0120,
- 0x11a38,
- 0x110b7,
- 0x1dec,
- 0x0351,
- 0x0309,
- 0x1dcd,
- 0x115bc,
- 0x114b5,
- 0x16f80,
- 0x11182,
- 0x16f6e,
- 0x11caa,
- 0xe0198,
- 0x0dd8,
- 0xa80b,
- 0x0eca,
- 0x1df0,
- 0xa8c5,
- 0x0fbc,
- 0x1136c,
- 0x1064,
- 0x1c29,
- 0x114c0,
- 0x1030,
- 0x1abd,
- 0x0e4c,
- 0x0a02,
- 0x1143d,
- 0x1e4ed,
- 0x20d8,
- 0x11a04,
- 0x1cf26,
- 0xe0116,
- 0x0acc,
- 0x10f4d,
- 0xaaed,
- 0x07aa,
- 0x0902,
- 0x11442,
- 0xe012c,
- 0x0ac7,
- 0xaabe,
- 0x1921,
- 0x11c9c,
- 0x11f3e,
- 0x11102,
- 0x0953,
- 0x1da5b,
- 0xa8e9,
- 0x11044,
- 0x16b33,
- 0x08e3,
- 0xe0158,
- 0xa826,
- 0x11f41,
- 0x0f19,
- 0x1058,
- 0xe01ef,
- 0xe011d,
- 0x17bb,
- 0x1171f,
- 0x11232,
- 0x1cd7,
- 0x0364,
- 0x1c35,
- 0x0a3f,
- 0x1a5a,
- 0x13453,
- 0x11a55,
- 0x1def,
- 0x0342,
- 0x0b4c,
- 0xe01ea,
- 0x1cf32,
- 0x1082,
- 0x0b63,
- 0x1ac5,
- 0x11635,
- 0x1a69,
- 0x0487,
- 0xe0164,
- 0x1da33,
- 0xe0107,
- 0x0bc0,
- 0x11c3e,
- 0xe01c1,
- 0x1daae,
- 0x0fa1,
- 0x11c95,
- 0xa671,
- 0x1c36,
- 0x1b71,
- 0x1b80,
- 0x033c,
- 0x20d5,
- 0x116ae,
- 0x1da54,
- 0x0819,
- 0x1e01f,
- 0x0301,
- 0x119dc,
- 0x11726,
- 0x031c,
- 0x17b8,
- 0xe015b,
- 0x1dd0,
- 0x0f9e,
- 0x0f94,
- 0x0f7f,
- 0x11d32,
- 0x11a8b,
- 0x1dda,
- 0xe017a,
- 0x116b6,
- 0x11c9b,
- 0x0f8e,
- 0x11720,
- 0xaa7d,
- 0x10f82,
- 0xa9b6,
- 0x0744,
- 0x11f01,
- 0x16f73,
- 0x11632,
- 0x0e38,
- 0x0bcc,
- 0x11f37,
- 0x07f1,
- 0x0340,
- 0x116b3,
- 0x11002,
- 0x1e946,
- 0x1cf1d,
- 0x1da49,
- 0x1da2e,
- 0x1b3e,
- 0xe010a,
- 0x09e2,
- 0x1cf2d,
- 0x0b03,
- 0x094f,
- 0x11373,
- 0x13449,
- 0x11838,
- 0xaa36,
- 0x0ccc,
- 0xe01b0,
- 0x07ad,
- 0x1df1,
- 0x17cd,
- 0x13455,
- 0x0ae2,
- 0x1cf3c,
- 0x1cf27,
- 0x16f85,
- 0x1e00a,
- 0x11c9f,
- 0x1d168,
- 0x119de,
- 0x11932,
- 0x1dc0,
- 0x110b0,
- 0x1e948,
- 0x1da27,
- 0x10378,
- 0x0310,
- 0x0df2,
- 0x11038,
- 0x114b4,
- 0x093a,
- 0x1ce0,
- 0x094c,
- 0x16f64,
- 0xa8ec,
- 0x111bf,
- 0x11133,
- 0x1bec,
- 0x1da35,
- 0xa94d,
- 0x1cf00,
- 0x032f,
- 0xa928,
- 0x05c7,
- 0x1a19,
- 0x0354,
- 0x11942,
- 0x1cf34,
- 0x07b0,
- 0x0afa,
- 0x1c32,
- 0x1da0d,
- 0x1cf25,
- 0x11d8b,
- 0x116b4,
- 0x1ac7,
- 0xa9bc,
- 0x1d18a,
- 0xfe21,
- 0xe0183,
- 0x07ac,
- 0x13450,
- 0xe012d,
- 0x119d6,
- 0x1de1,
- 0x0cbe,
- 0x065b,
- 0x0316,
- 0x1a59,
- 0x1e004,
- 0xa670,
- 0x1da4b,
- 0x17dd,
- 0x1e008,
- 0xe0191,
- 0x0f18,
- 0x1143f,
- 0xe0190,
- 0xabe3,
- 0x1da4d,
- 0x0cd5,
- 0x0dda,
- 0x0d63,
- 0x0e35,
- 0x1cf1e,
- 0x1da1e,
- 0xe01e8,
- 0x114bf,
- 0x0746,
- 0x1cd1,
- 0x1da75,
- 0x1e2ec,
- 0x0596,
- 0x1dfa,
- 0x0334,
- 0x16f77,
- 0x09e3,
- 0xe019f,
- 0x17ba,
- 0x0ac1,
- 0x1de3,
- 0x1e130,
- 0x1ba1,
- 0xe01a8,
- 0x1ac3,
- 0x11c38,
- 0x111b3,
- 0x0357,
- 0xe012a,
- 0x116ac,
- 0x0f76,
- 0x119e0,
- 0x1a72,
- 0x0fa2,
- 0x1772,
- 0x05b3,
- 0x1df7,
- 0x11cb6,
- 0x1da63,
- 0x16f70,
- 0x1cf8,
- 0x0747,
- 0x112e4,
- 0x1e8d3,
- 0xaa31,
- 0x0cc3,
- 0xfe0d,
- 0x11a37,
- 0x1dcb,
- 0x0317,
- 0x1dc8,
- 0x1c2b,
- 0x0eba,
- 0x085a,
- 0x11835,
- 0x036c,
- 0x05af,
- 0x1143b,
- 0x1da10,
- 0x11c9e,
- 0xa8e1,
- 0x035c,
- 0x1b03,
- 0x0366,
- 0x05c4,
- 0x1cf0d,
- 0x11a8a,
- 0xe01c8,
- 0xe01a9,
- 0x06e1,
- 0xfe24,
- 0xa926,
- 0xa824,
- 0xa92d,
- 0x111bc,
- 0xabea,
- 0x0afc,
- 0x1ded,
- 0x065a,
- 0x0952,
- 0x1da5d,
- 0x0956,
- 0x1ce1,
- 0x11933,
- 0x1d167,
- 0xa69f,
- 0x0d3e,
- 0x110b5,
- 0x116b2,
- 0x1e017,
- 0xe013e,
- 0x1d180,
- 0x1da67,
- 0xaaeb,
- 0x1dd1,
- 0xaab8,
- 0x1cf22,
- 0x2cf1,
- 0x06d7,
- 0x1930,
- 0x1da34,
- 0x0326,
- 0x1032,
- 0x1be7,
- 0x09c4,
- 0x1da57,
- 0x1136a,
- 0x1daa1,
- 0xe0179,
- 0x0cc1,
- 0x11129,
- 0x10f83,
- 0x1034,
- 0x0a82,
- 0xa951,
- 0x1344b,
- 0x2d7f,
- 0x09c7,
- 0x11f39,
- 0x11f34,
- 0x16f5b,
- 0x0bbe,
- 0x031a,
- 0x11d8e,
- 0x1e949,
- 0x1ab6,
- 0x1b40,
- 0x1d16d,
- 0x0d82,
- 0x1134c,
- 0x033f,
- 0x11d3f,
- 0x0dd6,
- 0x11445,
- 0x1a58,
- 0x08de,
- 0x1ac2,
- 0x1b34,
- 0x11ef4,
- 0x11d35,
- 0xe0195,
- 0x1c37,
- 0xa9e5,
- 0xa980,
- 0xe0185,
- 0xe018e,
- 0xa8ba,
- 0x193b,
- 0x1da3b,
- 0x094b,
- 0x10f48,
- 0x0d3c,
- 0x1dc9,
- 0x11046,
- 0x1926,
- 0x05b0,
- 0x0c55,
- 0x11c3c,
- 0x08e6,
- 0x0617,
- 0xe0109,
- 0x1e134,
- 0xfe2c,
- 0xabe6,
- 0xfe0f,
- 0x1df6,
- 0x1ac9,
- 0x103c,
- 0x093c,
- 0xe0154,
- 0x0ddb,
- 0x1cf13,
- 0x114c2,
- 0x20ea,
- 0xe01de,
- 0x06ec,
- 0x105f,
- 0x1d16f,
- 0xfe27,
- 0xe01c5,
- 0xe0182,
- 0x05b5,
- 0xe0104,
- 0xa9be,
- 0x1e002,
- 0x0cbf,
- 0x1886,
- 0x1b82,
- 0x0fc6,
- 0x032a,
- 0x0670,
- 0x0981,
- 0x0595,
- 0x08df,
- 0x08ca,
- 0x1715,
- 0x0b41,
- 0x0658,
- 0x1dc2,
- 0x065c,
- 0xe0130,
- 0x1bac,
- 0x1c24,
- 0x20de,
- 0x111bd,
- 0xa8b4,
- 0x0486,
- 0x0302,
- 0xe0102,
- 0x1145e,
- 0x1da3d,
- 0x1cf11,
- 0xe0151,
- 0xe01b4,
- 0x05b7,
- 0x1ab4,
- 0x1ba2,
- 0x1d1ad,
- 0x1182d,
- 0x1d18b,
- 0x17bd,
- 0x1cf1f,
- 0x0ac9,
- 0x11ca7,
- 0x1deb,
- 0x1d17b,
- 0x1da68,
- 0x0ecc,
- 0x1c30,
- 0x116b5,
- 0xa8e7,
- 0x1112a,
- 0x11a3d,
- 0x1136b,
- 0x05c5,
- 0x11363,
- 0x08f6,
- 0x1ab0,
- 0x1163d,
- 0x0c82,
- 0x1cf40,
- 0x0f3f,
- 0xe0100,
- 0x0dd3,
- 0x1035,
- 0x1a76,
- 0x1daa4,
- 0x0314,
- 0x10f46,
- 0x16f79,
- 0xe0159,
- 0x0f9c,
- 0xe013c,
- 0x1183a,
- 0x1e000,
- 0x1da41,
- 0x11a47,
- 0x0733,
- 0x1da60,
- 0x11440,
- 0x1b72,
- 0x07af,
- 0x0f73,
- 0xa827,
- 0xe01e9,
- 0x11a96,
- 0x1e012,
- 0x11830,
- 0x1da46,
- 0x2de6,
- 0x1cdb,
- 0x0616,
- 0xfe01,
- 0x11300,
- 0x0951,
- 0x0abc,
- 0xaa29,
- 0x1931,
- 0x1da17,
- 0x1a6d,
- 0x11723,
- 0x10f4a,
- 0xe011e,
- 0x06e4,
- 0x0343,
- 0x1cd2,
- 0x20d9,
- 0x1163e,
- 0x05a8,
- 0x1122e,
- 0x1de0,
- 0x103e,
- 0x102d,
- 0x1da0b,
- 0xaac1,
- 0x16f7c,
- 0x20da,
- 0xa948,
- 0xa67a,
- 0x1cf23,
- 0xaa35,
- 0xa8bc,
- 0x1da55,
- 0xe01b3,
- 0x16f57,
- 0x10a05,
- 0x1172a,
- 0x1a77,
- 0x116b1,
- 0x1dc1,
- 0x1cf06,
- 0x0a75,
- 0x16f75,
- 0x11d45,
- 0x1b3c,
- 0x1037,
- 0xe01be,
- 0xe01a5,
- 0x11833,
- 0x0954,
- 0xfe0b,
- 0x16f6f,
- 0x10eff,
- 0x064e,
- 0x0320,
- 0x1dcf,
- 0xfe29,
- 0x09be,
- 0x0f35,
- 0x0cd6,
- 0x0489,
- 0x0d4a,
- 0x17b7,
- 0x1dfc,
- 0xabe8,
- 0x1dce,
- 0x1b6c,
- 0x0ddf,
- 0x16f90,
- 0x11633,
- 0x11a94,
- 0xa94f,
- 0x11837,
- 0x0d00,
- 0x1d171,
- 0x108b,
- 0x0732,
- 0x11a99,
- 0x1d186,
- 0x0303,
- 0x10377,
- 0x114b3,
- 0x1e015,
- 0x0f9f,
- 0x0acd,
- 0xa8c1,
- 0x1daa3,
- 0x11c98,
- 0x115ba,
- 0xe017b,
- 0x0bc7,
- 0x11368,
- 0x08e7,
- 0x0ae3,
- 0x0c4c,
- 0x1cf37,
- 0x1cf3d,
- 0x112e3,
- 0x1bf1,
- 0x112e2,
- 0x1d170,
- 0xa9b3,
- 0x0362,
- 0x0f84,
- 0xe013f,
- 0x0483,
- 0x05b2,
- 0xe0160,
- 0x11cae,
- 0x10f4f,
- 0x16f61,
- 0xaaef,
- 0xe01d8,
- 0x11a06,
- 0x0339,
- 0x11636,
- 0x114b2,
- 0x11c2f,
- 0x0b3e,
- 0x1163a,
- 0x10f49,
- 0xa8ea,
- 0x0c41,
- 0x0655,
- 0x11234,
- 0x032c,
- 0xe01af,
- 0x1d17f,
- 0x0d3b,
- 0x1da23,
- 0xfb1e,
- 0x0ac2,
- 0x1bad,
- 0x1163c,
- 0x0f95,
- 0xa8bf,
- 0x1cf28,
- 0xe0139,
- 0x10f85,
- 0x1abb,
- 0x1da29,
- 0x1cf4,
- 0x06e8,
- 0x1e8d1,
- 0x0b3c,
- 0xe011c,
- 0x1e013,
- 0x1ace,
- 0x05ab,
- 0x10ae6,
- 0x20e1,
- 0x1cf3f,
- 0x1dfb,
- 0x08cd,
- 0x11c36,
- 0x073b,
- 0x082a,
- 0x17b6,
- 0x0e48,
- 0x20ee,
- 0x11937,
- 0x1cdf,
- 0xe0162,
- 0x1cf3a,
- 0x08d9,
- 0x11637,
- 0x2dfb,
- 0xe018c,
- 0x1df9,
- 0x11073,
- 0x135f,
- 0x08d7,
- 0x1773,
- 0x08e0,
- 0x16af3,
- 0x0610,
- 0xe019c,
- 0x0901,
- 0x1e018,
- 0x1e027,
- 0x1da2c,
- 0x0b43,
- 0x180c,
- 0x1753,
- 0x114b1,
- 0x115b2,
- 0xabe7,
- 0x031d,
- 0x0c01,
- 0x111b4,
- 0xe01e2,
- 0x08f5,
- 0x11cb5,
- 0x0cbc,
- 0x1a1a,
- 0x1da14,
- 0x1dc7,
- 0x1a18,
- 0x0d62,
- 0x0742,
- 0x1da58,
- 0x111b9,
- 0x11a35,
- 0x115b9,
- 0x0369,
- 0x05a6,
- 0xa8f0,
- 0xe0169,
- 0x116ab,
- 0x0ecb,
- 0x0599,
- 0x1da59,
- 0x2dec,
- 0x11c99,
- 0x0358,
- 0x11128,
- 0xa8b5,
- 0x1cf17,
- 0x16af2,
- 0x1133c,
- 0x0711,
- 0x11369,
- 0x1a70,
- 0x1062,
- 0xa94e,
- 0x1da11,
- 0x059c,
- 0x0fb9,
- 0x11d42,
- 0xa92a,
- 0x11d91,
- 0x1aba,
- 0x1a6b,
- 0x1122c,
- 0xe0136,
- 0x1086,
- 0x1067,
- 0xe01a2,
- 0x0afd,
- 0x1da15,
- 0x16f83,
- 0x1da2a,
- 0x1cf29,
- 0x1da28,
- 0x1b70,
- 0x17b4,
- 0x0ebb,
- 0x0947,
- 0x11371,
- 0x1a1b,
- 0x0361,
- 0x11d34,
- 0x1cd4,
- 0x1cf3e,
- 0x11935,
- 0x11130,
- 0x1a5b,
- 0x11134,
- 0xe0149,
- 0x11446,
- 0x0363,
- 0xe0180,
- 0xfe0c,
- 0x11c35,
- 0x0eb6,
- 0x0fa4,
- 0x0fa0,
- 0x08ff,
- 0x114ba,
- 0x11439,
- 0xe0170,
- 0x0d40,
- 0xe015f,
- 0x06dc,
- 0x111c9,
- 0x0c48,
- 0x1734,
- 0x1da43,
- 0xaa2c,
- 0x0ecd,
- 0xe01b1,
- 0x1e023,
- 0x16f60,
- 0x089d,
- 0x0e4d,
- 0x07ee,
- 0x0312,
- 0xa8c4,
- 0x034c,
- 0x1103c,
- 0x0829,
- 0x1cf42,
- 0x1daa2,
- 0x11729,
- 0x0957,
- 0x119d1,
- 0x1dc6,
- 0x1cf08,
- 0x1abf,
- 0x059e,
- 0x0d81,
- 0xe01d3,
- 0x1da09,
- 0x1d17d,
- 0x112e5,
- 0x11d90,
- 0x1e01e,
- 0x1e135,
- 0x030f,
- 0x110b2,
- 0x111ce,
- 0x17c6,
- 0xa8e3,
- 0x16f66,
- 0x0a3e,
- 0x1e132,
- 0xe0155,
- 0x1e4ee,
- 0x07ab,
- 0x20ed,
- 0x0963,
- 0xe01d0,
- 0xe01bf,
- 0x08d3,
- 0x1cde,
- 0x1ba4,
- 0x0ce3,
- 0x11437,
- 0x0b02,
- 0x0c40,
- 0x08f4,
- 0x11f38,
- 0x1088,
- 0xa950,
- 0x1bee,
- 0xa881,
- 0xe01a0,
- 0x0900,
- 0x1e8d6,
- 0x1171e,
- 0xe01b5,
- 0x05ac,
- 0xe0125,
- 0x20ef,
- 0x05b6,
- 0xe01a7,
- 0x11d8d,
- 0xe017c,
- 0x0ccb,
- 0x1b3f,
- 0x20eb,
- 0x0a3c,
- 0xe0157,
- 0x1a57,
- 0x1d1ac,
- 0xa8ef,
- 0x0598,
- 0x112e0,
- 0xe012b,
- 0x0f80,
- 0x1ddc,
- 0x034b,
- 0x1a68,
- 0xa6f0,
- 0x059b,
- 0x1b81,
- 0x16b32,
- 0x0faa,
- 0x109c,
- 0x034d,
- 0xe010c,
- 0x0319,
- 0x1925,
- 0x11a3b,
- 0x031b,
- 0x1a64,
- 0x08d4,
- 0xa677,
- 0x0b62,
- 0x11045,
- 0x0acb,
- 0x1112f,
- 0xe01d4,
- 0x1da0a,
- 0x115af,
- 0x0613,
- 0xaaf5,
- 0x08f1,
- 0x11a56,
- 0x0bbf,
- 0xaa4c,
- 0x1037a,
- 0x1dff,
- 0x0abe,
- 0x302e,
- 0x1b39,
- 0x1da9d,
- 0x1a6a,
- 0x11ef6,
- 0xe01aa,
- 0x112ea,
- 0x1e01c,
- 0x1039,
- 0x05b8,
- 0x11c34,
- 0x20db,
- 0x11230,
- 0x0c83,
- 0x1036,
- 0x0948,
- 0x119db,
- 0xe01ed,
- 0x1c31,
- 0x10a3f,
- 0x1ab5,
- 0x11d94,
- 0xa983,
- 0x0ccd,
- 0x17c4,
- 0x11931,
- 0x11f42,
- 0x1c28,
- 0x1da32,
- 0x11145,
- 0x302a,
- 0xe0135,
- 0x0ac8,
- 0x0cc7,
- 0xe01ad,
- 0x1da00,
- 0x1b37,
- 0x036f,
- 0x11d43,
- 0x116ad,
- 0x11ef5,
- 0xa8ff,
- 0x1da19,
- 0x030a,
- 0x09cc,
- 0x10eac,
- 0x11d8c,
- 0x11a0a,
- 0xaab4,
- 0xfe2f,
- 0x0ac0,
- 0xe0194,
- 0x065f,
- 0x11a07,
- 0xe015a,
- 0xe0173,
- 0x1c27,
- 0x17c8,
- 0x0820,
- 0x065d,
- 0x0bcb,
- 0xe01dd,
- 0x11343,
- 0x1e009,
- 0x0941,
- 0x1752,
- 0x1ce4,
- 0x0329,
- 0x1713,
- 0xe0118,
- 0x119da,
- 0x1da6a,
- 0x08f2,
- 0x0f71,
- 0x16f51,
- 0x089e,
- 0x2df8,
- 0x10a0e,
- 0x2de4,
- 0xaa2a,
- 0xe0192,
- 0x0dd2,
- 0x0c81,
- 0xe01c7,
- 0x10a38,
- 0xe0176,
- 0x20e9,
- 0xe019d,
- 0x20e7,
- 0x032e,
- 0x1e01d,
- 0x1cf24,
- 0x0731,
- 0x0ac4,
- 0xe017d,
- 0x16f7b,
- 0x1c34,
- 0x115b5,
- 0x0306,
- 0x16f76,
- 0x0bc8,
- 0x061a,
- 0xa949,
- 0x08f0,
- 0x11cb2,
- 0x1133f,
- 0x111b5,
- 0x11344,
- 0x082d,
- 0x1dd3,
- 0x1d172,
- 0xe010b,
- 0x2df6,
- 0x06e0,
- 0x1107f,
- 0x16f74,
- 0x11d47,
- 0x11943,
- 0x16b30,
- 0x11a01,
- 0x0d4b,
- 0xaa7b,
- 0x1da22,
- 0xe01ec,
- 0x13447,
- 0x1cf0b,
- 0x11c9a,
- 0x2dfa,
- 0xe01c2,
- 0x11724,
- 0x0485,
- 0x11a52,
- 0xe01cd,
- 0x1da03,
- 0xa8bb,
- 0x11722,
- 0x11930,
- 0x06ed,
- 0x0615,
- 0x1daa8,
- 0xe0132,
- 0x1cf33,
- 0x11042,
- 0x1cd8,
- 0x1a17,
- 0xe0171,
- 0x089f,
- 0x119dd,
- 0x1da5e,
- 0x1d1aa,
- 0x1da24,
- 0x0b01,
- 0x1a5e,
- 0x11d3d,
- 0xe0165,
- 0x0367,
- 0x110b6,
- 0x11074,
- 0x1cf38,
- 0x11237,
- 0x1df3,
- 0x1de5,
- 0xe0140,
- 0xa672,
- 0x074a,
- 0x10376,
- 0x180d,
- 0xe01c9,
- 0x0c63,
- 0x064c,
- 0x1ba8,
- 0x0f7c,
- 0x16f55,
- 0xe010d,
- 0x0484,
- 0x11caf,
- 0xe0106,
- 0x0318,
- 0x119e4,
- 0x032b,
- 0xe016e,
- 0x11438,
- 0x116af,
- 0x17cf,
- 0x1344d,
- 0x1e4ef,
- 0x11f03,
- 0x1da47,
- 0x106d,
- 0x1ddf,
- 0x0d47,
- 0x0c4a,
- 0x0a4c,
- 0x1cda,
- 0x0591,
- 0x0b56,
- 0x1d187,
- 0x0a47,
- 0x10a0c,
- 0x0a81,
- 0xa8b6,
- 0x11d95,
- 0x0cc0,
- 0x0a83,
- 0x1927,
- 0x06d8,
- 0xe011b,
- 0x06d6,
- 0x2dea,
- 0x1a61,
- 0xe0117,
- 0x20e4,
- 0xa9b8,
- 0x10f84,
- 0x08dd,
- 0xe01bb,
- 0x1dd2,
- 0x1da05,
- 0x0f87,
- 0x1bea,
- 0x17d1,
- 0x11728,
- 0x1dc3,
- 0x114b0,
- 0xa8b9,
- 0x073c,
- 0x0a48,
- 0x094e,
- 0xa94b,
- 0x0fb6,
- 0x17c1,
- 0x05a7,
- 0x1df2,
- 0x0bd7,
- 0x0d83,
- 0x1cf3b,
- 0x16fe4,
- 0x10efd,
- 0x0365,
- 0x089a,
- 0x0fa6,
- 0x1da3c,
- 0x11c9d,
- 0xe0114,
- 0x1ab7,
- 0x081f,
- 0xa8e8,
- 0x1193b,
- 0x0eb1,
- 0x032d,
- 0x1cf2c,
- 0xa8e4,
- 0xe01d7,
- 0x059d,
- 0xabed,
- 0x16f78,
- 0x1b04,
- 0x08f3,
- 0x11101,
- 0x115be,
- 0x11d31,
- 0x1c33,
- 0x1cf07,
- 0x0307,
- 0x0651,
- 0x1ce5,
- 0x1dd9,
- 0x115b8,
- 0xe01ac,
- 0x033e,
- 0x1920,
- 0x08e9,
- 0x2df9,
- 0x16f58,
- 0xe01d5,
- 0x16f6d,
- 0xe014a,
- 0x0d4d,
- 0x11ca0,
- 0x1cf0a,
- 0x1ce8,
- 0x1060,
- 0x11c96,
- 0x035e,
- 0xe0186,
- 0x115bb,
- 0x119d7,
- 0x16af4,
- 0x1daa9,
- 0x0982,
- 0x11cb3,
- 0x1cf2a,
- 0x11ca4,
- 0x033b,
- 0x135d,
- 0x11435,
- 0x114b8,
- 0x09bc,
- 0x1e005,
- 0x11082,
- 0x1d1ab,
- 0x10a03,
- 0xa8f1,
- 0x0e4a,
- 0x11ca2,
- 0xabec,
- 0x081c,
- 0x1ce2,
- 0x1da0e,
- 0x06df,
- 0xfe22,
- 0x1ce6,
- 0x1087,
- 0x0f8f,
- 0x11a8f,
- 0x09c2,
- 0x1da4e,
- 0x1e006,
- 0x08d0,
- 0x1dd8,
- 0x1714,
- 0x0a40,
- 0xe0126,
- 0x11a53,
- 0x13451,
- 0x1059,
- 0x1da61,
- 0x1e2ed,
- 0x1d17c,
- 0xa678,
- 0x3099,
- 0x16f65,
- 0xe0131,
- 0x0826,
- 0x11c3d,
- 0x0df3,
- 0x180f,
- 0x1a56,
- 0x11d8a,
- 0x1cd9,
- 0xa8e0,
- 0xe0129,
- 0x1938,
- 0x11f00,
- 0x0345,
- 0x1b02,
- 0xa9bd,
- 0x11443,
- 0xa806,
- 0xa9b9,
- 0x1da0c,
- 0xe01d6,
- 0x1e00f,
- 0x1932,
- 0x13454,
- 0x1134b,
- 0x192a,
- 0x0f79,
- 0x1a60,
- 0x0659,
- 0x11f3a,
- 0x1e8d5,
- 0x0d01,
- 0x0734,
- 0x11146,
- 0xe0108,
- 0xe0153,
- 0x06eb,
- 0xe013b,
- 0x1a73,
- 0xe0167,
- 0x11a98,
- 0x0f72,
- 0x11831,
- 0x1dcc,
- 0x0f81,
- 0x119d5,
- 0x16f68,
- 0x0f90,
- 0x114bb,
- 0x2dfd,
- 0xfe00,
- 0x08f7,
- 0x1da56,
- 0xe0187,
- 0xa9c0,
- 0x0f93,
- 0xa67b,
- 0x0344,
- 0x20e2,
- 0x08fa,
- 0x082b,
- 0x05a1,
- 0x1ba3,
- 0x1da42,
- 0x0313,
- 0x11366,
- 0x1a6c,
- 0xe01db,
- 0xa929,
- 0xe01e5,
- 0x1da1b,
- 0x116b0,
- 0x0324,
- 0x17be,
- 0x17c0,
- 0x20dd,
- 0x11836,
- 0x10f50,
- 0x073d,
- 0xe01bd,
- 0x0dd1,
- 0x1933,
- 0x1cf1b,
- 0x081b,
- 0xaa43,
- 0xe01ee,
- 0x115dc,
- 0x1de4,
- 0x0349,
- 0x11c32,
- 0xe0184,
- 0xa953,
- 0x20ec,
- 0xe0147,
- 0x1cf31,
- 0xaa2d,
- 0x0b47,
- 0x08cf,
- 0xa92c,
- 0x1e024,
- 0x1e01b,
- 0x1acd,
- 0xe0181,
- 0xe0124,
- 0x1a62,
- 0x09bf,
- 0x059a,
- 0x0d4c,
- 0x11727,
- 0x109b,
- 0x115c0,
- 0x2def,
- 0xe010e,
- 0x1ced,
- 0xaa30,
- 0x1baa,
- 0xaabf,
- 0x1da18,
- 0x1daaf,
- 0x1da1a,
- 0x1d181,
- 0x1ba6,
- 0x1cf02,
- 0x11ca9,
- 0xe01ba,
- 0x0903,
- 0x1cf05,
- 0x0abf,
- 0x108c,
- 0x115bf,
- 0x0d46,
- 0xe0111,
- 0x05a0,
- 0x11c3a,
- 0x11725,
- 0x0c04,
- 0x08d5,
- 0x10379,
- 0x0308,
- 0x1e020,
- 0x0f9a,
- 0x17c3,
- 0xfe06,
- 0x1a55,
- 0x115b0,
- 0x111b7,
- 0x20d4,
- 0x16f87,
- 0x0a03,
- 0xe0163,
- 0x102b,
- 0x06e2,
- 0xa9bb,
- 0x07a9,
- 0xaa4d,
- 0x10f4c,
- 0x11d97,
- 0x114bc,
- 0x2cf0,
- 0x1ab8,
- 0x1a67,
- 0x106b,
- 0x0f75,
- 0x11348,
- 0x1cf9,
- 0x11070,
- 0x065e,
- 0xe0199,
- 0x0f7b,
- 0xa679,
- 0x11a05,
- 0x1ab2,
- 0x034a,
- 0xa82c,
- 0x1e136,
- 0x10f4b,
- 0x20d2,
- 0x1cf46,
- 0x1da9e,
- 0x08db,
- 0x0f39,
- 0x111bb,
- 0x1da26,
- 0x10d26,
- 0x1e00c,
- 0x102c,
- 0x16f86,
- 0xe012e,
- 0x1e944,
- 0x0fb7,
- 0x1b36,
- 0x0c47,
- 0x180b,
- 0x0654,
- 0x11cad,
- 0x08ec,
- 0x16f6c,
- 0x1b44,
- 0x0ece,
- 0x0ddc,
- 0xe01e7,
- 0xe0177,
- 0x1dd7,
- 0xe015e,
- 0x0b55,
- 0x0aff,
- 0x0cca,
- 0x1163b,
- 0x1b01,
- 0x112e7,
- 0x10a01,
- 0x0f99,
- 0x11a3e,
- 0x1da01,
- 0x1143c,
- 0x11a97,
- 0xe019e,
- 0xe019a,
- 0x135e,
- 0xe018b,
- 0x034f,
- 0x1193d,
- 0x0368,
- 0xaaee,
- 0xaa2b,
- 0x10f47,
- 0x10f4e,
- 0x0f91,
- 0xe0112,
- 0x11640,
- 0x08ee,
- 0x11080,
- 0x11c33,
- 0x16f7f,
- 0x1dde,
- 0x1daab,
- 0xe017e,
- 0x0945,
- 0x0593,
- 0x1da5a,
- 0x05bb,
- 0x0942,
- 0x1da30,
- 0xaaf6,
- 0x1da50,
- 0x16ff0,
- 0xa8b7,
- 0x11940,
- 0x0360,
- 0x2df5,
- 0x073f,
- 0x1a78,
- 0x09fe,
- 0x08e5,
- 0x17ce,
- 0x16f52,
- 0xfe2e,
- 0x1c2f,
- 0x1182e,
- 0xe017f,
- 0x2df4,
- 0xe01a3,
- 0x11631,
- 0x07f0,
- 0x11ef3,
- 0x05bd,
- 0x1dfe,
- 0x1133e,
- 0x11a02,
- 0xe0110,
- 0x0afe,
- 0x2dee,
- 0x05a5,
- 0x0594,
- 0x1da04,
- 0x08ef,
- 0xe0145,
- 0x030e,
- 0x0347,
- 0x0c62,
- 0xfe09,
- 0x1133b,
- 0x114bd,
- 0x111b6,
- 0x1cf10,
- 0x1da3e,
- 0xe01b9,
- 0x1da48,
- 0x0b4d,
- 0x1dc5,
- 0x0dd4,
- 0x1e945,
- 0x0618,
- 0x0f74,
- 0x11043,
- 0x1a7f,
- 0x08d6,
- 0x1e08f,
- 0x11c30,
- 0x11a8c,
- 0xe01ca,
- 0x0332,
- 0x16af0,
- 0x0dde,
- 0x16f7a,
- 0x10a0f,
- 0x20d0,
- 0x11362,
- 0x1e00d,
- 0x1112b,
- 0x05a3,
- 0x0a70,
- 0x1da65,
- 0x11a5b,
- 0xa9b7,
- 0x11ca3,
- 0x0fb8,
- 0x1033,
- 0x111cf,
- 0xe011a,
- 0x0822,
- 0x05c2,
- 0x1733,
- 0xe0175,
- 0x1ab9,
- 0xe014e,
- 0x1e02a,
- 0x0f3e,
- 0x106c,
- 0x093b,
- 0x2de5,
- 0x17cc,
- 0x20e3,
- 0x1da9f,
- 0x11938,
- 0x0736,
- 0x1e029,
- 0x0d03,
- 0x0bcd,
- 0x11cab,
- 0x11039,
- 0x1e4ec,
- 0x1cf03,
- 0x030d,
- 0x1089,
- 0x302b,
- 0x11301,
- 0x11131,
- 0xa92b,
- 0x1d17e,
- 0x111ca,
- 0x1e8d0,
- 0x0650,
- 0x2df3,
- 0x08dc,
- 0x102e,
- 0xa94c,
- 0x0c03,
- 0xaab2,
- 0x0eb5,
- 0xa8e2,
- 0x0f77,
- 0xe0138,
- 0x1bed,
- 0xe01cf,
- 0x112e9,
- 0xe0144,
- 0x11d33,
- 0x1ac0,
- 0xe01b6,
- 0x17c2,
- 0x0ac5,
- 0x11d44,
- 0x0739,
- 0x11839,
- 0x1885,
- 0x11100,
- 0x064b,
- 0x1ba5,
- 0x110b3,
- 0x0e47,
- 0x08d2,
- 0x07ef,
- 0x0335,
- 0x0f86,
- 0x1a5d,
- 0x030c,
- 0xa67d,
- 0x1d165,
- 0x11cb0,
- 0x033d,
- 0x1beb,
- 0x16f8f,
- 0x11a5a,
- 0x10ae5,
- 0x1da13,
- 0x103d,
- 0x1cf12,
- 0x0e36,
- 0x11630,
- 0x0944,
- 0xaab7,
- 0x10a3a,
- 0x1da31,
- 0x1cf30,
- 0x07f2,
- 0x1cf09,
- 0xe014c,
- 0x1cf15,
- 0x0d42,
- 0x0946,
- 0x1da40,
- 0x0cc6,
- 0x09c1,
- 0x06e7,
- 0x0fa9,
- 0x1ba7,
- 0x0cf3,
- 0x0341,
- 0x05ba,
- 0x1acc,
- 0x0bc6,
- 0x1ddb,
- 0x0327,
- 0x1da2d,
- 0xe0178,
- 0x2dff,
- 0x16b34,
- 0x0bca,
- 0x1939,
- 0x1be6,
- 0x0fad,
- 0x119d3,
- 0xa9b4,
- 0x11d3a,
- 0x0488,
- 0x20e0,
- 0x1cf36,
- 0x0337,
- 0x1abe,
- 0x1031,
- 0x1dd4,
- 0x09d7,
- 0x1163f,
- 0x1cf21,
- 0x1dc4,
- 0xfe04,
- 0xe0189,
- 0x036a,
- 0x1ddd,
- 0x114b6,
- 0x11180,
- 0xe016a,
- 0x16f6a,
- 0x16ff1,
- 0xe0127,
- 0x11231,
- 0x11241,
- 0x0656,
- 0xe0161,
- 0x0346,
- 0x1143a,
- 0x1cd6,
- 0x0949,
- 0x1c26,
- 0x110b1,
- 0x11436,
- 0x11a03,
- 0x11367,
- 0x1e2ae,
- 0xfe0a,
- 0x1e00e,
- 0x0325,
- 0x1da9c,
- 0x1a65,
- 0x0983,
- 0x11a08,
- 0x17b9,
- 0x0c4b,
- 0xe0174,
- 0x1d244,
- 0x1344f,
- 0x2de7,
- 0x1b38,
- 0xe013a,
- 0x20dc,
- 0xe011f,
- 0x1cf19,
- 0x08d1,
- 0x1e010,
- 0x0955,
- 0x16f69,
- 0x10eab,
- 0x17c7,
- 0x11340,
- 0x081d,
- 0x0328,
- 0x1e028,
- 0x17bc,
- 0xaab3,
- 0xe01b7,
- 0x0e4e,
- 0x1abc,
- 0x1da66,
- 0x1732,
- 0xe01ae,
- 0x1cf43,
- 0x1d243,
- 0x1712,
- 0x0c42,
- 0x0b3f,
- 0x302d,
- 0xe01e6,
- 0x1da1c,
- 0x2ded,
- 0x1b41,
- 0x11cb4,
- 0xe0148,
- 0xe0123,
- 0x11d93,
- 0x1072,
- 0x1936,
- 0x1063,
- 0x0c56,
- 0x11a39,
- 0x1e2ef,
- 0xe01ab,
- 0x17d0,
- 0x1d242,
- 0x0359,
- 0x1123e,
- 0x11639,
- 0x1b73,
- 0xe0152,
- 0x11a8d,
- 0x16af1,
- 0x035b,
- 0x0bc2,
- 0x1da12,
- 0xe01da,
- 0x11c93,
- 0x094a,
- 0x073e,
- 0x11372,
- 0x0d48,
- 0x1de9,
- 0x114c1,
- 0x07ae,
- 0x11a54,
- 0x10a39,
- 0x11638,
- 0x2deb,
- 0x073a,
- 0x1cf0f,
- 0x0fab,
- 0x1aca,
- 0xa8c3,
- 0xa981,
- 0x1ac4,
- 0x1e133,
- 0xabe5,
- 0x1da52,
- 0x0e37,
- 0xe0105,
- 0x11357,
- 0x0336,
- 0x0c3e,
- 0xe010f,
- 0xe0188,
- 0x111cb,
- 0x11444,
- 0x0940,
- 0x11cac,
- 0xa8ed,
- 0x114b7,
- 0x11832,
- 0x0743,
- 0x08d8,
- 0x1e026,
- 0x1da53,
- 0x11c3f,
- 0x1da06,
- 0xe019b,
- 0x119d2,
- 0xaa34,
- 0x1b00,
- 0x0730,
- 0x13440,
- 0x0cc4,
- 0xe0146,
- 0x1c25,
- 0x030b,
- 0x11a95,
- 0x0323,
- 0x1e00b,
- 0x0943,
- 0x0f8d,
- 0x0dca,
- 0x10d25,
- 0x2de9,
- 0x1bab,
- 0x115b1,
- 0x1da2b,
- 0x0ebc,
- 0x1e131,
- 0xe018a,
- 0x1923,
- 0x05c1,
- 0x20df,
- 0x1103d,
- 0xa927,
- 0x1c2e,
- 0x07ec,
- 0x16f82,
- 0xe01e4,
- 0x1da25,
- 0x0f7a,
- 0x1cf20,
- 0x1171d,
- 0x11347,
- 0x112e6,
- 0x1d188,
- 0x11d41,
- 0x1068,
- 0x089c,
- 0x11f36,
- 0x11341,
- 0xaa2f,
- 0x0356,
- 0xe0137,
- 0x1344c,
- 0x0fb0,
- 0xe016b,
- 0x1df4,
- 0x1112d,
- 0x1de2,
- 0x1103b,
- 0x08f9,
- 0xe01c0,
- 0x11f40,
- 0x119df,
- 0x1083,
- 0xaa33,
- 0x13448,
- 0x0fb4,
- 0x0ac3,
- 0xabe4,
- 0x11a3c,
- 0x1134d,
- 0x114b9,
- 0x103a,
- 0x1da20,
- 0x08da,
- 0x16f56,
- 0x309a,
- 0x11127,
- 0x11a93,
- 0x192b,
- 0x0f97,
- 0x1cd5,
- 0x1da5f,
- 0x1084,
- 0x0eb4,
- 0x11370,
- 0x10efe,
- 0x1069,
- 0x111c0,
- 0x11834,
- 0x119d4,
- 0x1193c,
- 0x1cf1c,
- 0x1928,
- 0x17bf,
- 0x1da6c,
- 0xe0156,
- 0x1bf2,
- 0x0304,
- 0x11ca1,
- 0x11233,
- 0x0859,
- 0x0a42,
- 0x1c2d,
- 0x0738,
- 0x0592,
- 0x1b6f,
- 0x0355,
- 0x0ddd,
- 0x1a71,
- 0x0bc1,
- 0x112df,
- 0x1344e,
- 0x1daac,
- 0x1e014,
- 0x0d44,
- 0x1df8,
- 0x16f4f,
- 0xe01e0,
- 0x1da16,
- 0x11721,
- 0x0d02,
- 0x20e5,
- 0x115b4,
- 0x1b42,
- 0x1b43,
- 0x0b40,
- 0xe016c,
- 0x08ed,
- 0x109a,
- 0x11303,
- 0x1cf35,
- 0x1344a,
- 0x17c5,
- 0x11c39,
- 0xa66f,
- 0x093f,
- 0x20d7,
- 0x05ae,
- 0x1cf14,
- 0x1e016,
- 0x08eb,
- 0x16f53,
- 0x0745,
- 0x0353,
- 0x0c3c,
- 0x0315,
- 0x16f54,
- 0x0eb9,
- 0x114be,
- 0x08cb,
- 0x16f81,
- 0x06db,
- 0x07a7,
- 0x0a4b,
- 0x20e6,
- 0x1df5,
- 0xe01a4,
- 0xfe23,
- 0x1172b,
- 0x0dd9,
- 0x1929,
- 0x302f,
- 0x064d,
- 0x0a01,
- 0x09c8,
- 0x20d1,
- 0xe018f,
- 0xa8e5,
- 0xa8c2,
- 0x16b31,
- 0xa6f1,
- 0x0f92,
- 0x07fd,
- 0x094d,
- 0x0e4b,
- 0x1193e,
- 0xe0115,
- 0x093e,
- 0x0821,
- 0x1cd0,
- 0x1c2a,
- 0x0735,
- 0xa823,
- 0x05a4,
- 0xe0121,
- 0xe015c,
- 0x1a79,
- 0x0f83,
- 0x112e1,
- 0xa947,
- 0x16f5e,
- 0x10a06,
- 0x17d3,
- 0x1d185,
- 0x0d57,
- 0x16f62,
- 0x0f96,
- 0x115b3,
- 0x11f35,
- 0xe0119,
- 0x16f7d,
- 0xfe02,
- 0x0c46,
- 0x1cf44,
- 0x2de0,
- 0xaa2e,
- 0x111ba,
- 0x110b4,
- 0x1e8d2,
- 0x11c92,
- 0x1d169,
- 0x035f,
- 0x0740,
- 0x1cdc,
- 0x1122d,
- 0x2de8,
- 0x0748,
- 0x0ec9,
- 0x1a63,
- 0x1da5c,
- 0x1b35,
- 0x0cc2,
- 0x1112c,
- 0xe0113,
- 0x06da,
- 0x1922,
- 0x2de3,
- 0x18a9,
- 0x1ba9,
- 0x08cc,
- 0x11a57,
- 0x102f,
- 0x0737,
- 0x0652,
- 0x10a0d,
- 0x05b4,
- 0x11000,
- 0x0fa7,
- 0x06e3,
- 0x1bf3,
- 0xe01a6,
- 0x0352,
- 0x0305,
- 0x0f82,
- 0xe0172,
- 0x11235,
- 0x0d43,
- 0x106a,
- 0x20e8,
- 0x11c94,
- 0x1b6e,
- 0x05b1,
- 0x0614,
- 0x08fb,
- 0x11132,
- 0x103b,
- 0x110b9,
- 0x112e8,
- 0x1b6b,
- 0x1da6b,
- 0x1c2c,
- 0x1b3a,
- 0xe01bc,
- 0x1da64,
- 0x1085,
- 0x1da45,
- 0x11d36,
- 0x20f0,
- 0x1da0f,
- 0x0899,
- 0xe01d9,
- 0x031e,
- 0x0fa5,
- 0x1182c,
- 0xe01a1,
- 0xe01c6,
- 0x0350,
- 0x13452,
- 0x1ce3,
- 0x2de1,
- 0x2dfc,
- 0x1da4a,
- 0x1cf04,
- 0x16f63,
- 0x1d189,
- 0xe0101,
- 0xe014d,
- 0x11a92,
- 0x0817,
- 0x11c31,
- 0x11040,
- 0xe01df,
- 0x1e021,
- 0x11302,
- 0xe01e1,
- 0xe0166,
- 0x11a34,
- 0x111cc,
- 0xaaec,
- 0x0962,
- 0xfe07,
- 0x1cf16,
- 0x1bef,
- 0x08ea,
- 0x1e011,
- 0x0f7e,
- 0x1daa7,
- 0x1937,
- 0xe016d,
- 0x1dee,
- 0xfe28,
- 0x085b,
- 0xa94a,
- 0x1dd5,
- 0x1dea,
- 0x1a6f,
- 0xfe03,
- 0x1a75,
- 0x06ea,
- 0x16f7e,
- 0x0f37,
- 0x1182f,
- 0x059f,
- 0x1da69,
- 0x0fac,
- 0x0c3f,
- 0x0d41,
- 0x16f84,
- 0x0fae,
- 0xe0168,
- 0x0c44,
- 0x034e,
- 0x08fc,
- 0x05bf,
- 0x0dd0,
- 0x1bf0,
- 0x2cef,
- 0x1ab3,
- 0x0d3f,
- 0x1cf2b,
- 0xa8c0,
- 0x1a5c,
- 0x16f67,
- 0x1daaa,
- 0xe016f,
- 0x1da84,
- 0x2df2,
- 0x05a9,
- 0xe013d,
- 0x0c43,
- 0x1da36,
- 0xe0103,
- 0x08fd,
- 0x0fba,
- 0x0ec8,
- 0x1da1f,
- 0xa9b5,
- 0x1be8,
- 0xfe2b,
- 0x108d,
- 0x06d9,
- 0x1cdd,
- 0x0816,
- 0xa676,
- 0x0818,
- 0x16f5f,
- 0x0fa8,
- 0x0f9b,
- 0x0f9d,
- 0x0e31,
- 0x11a91,
- 0x0611,
- 0x0b4b,
- 0x0b57,
- 0xe015d,
- 0x108f,
- 0x1e001,
- 0x17ca,
- 0x08e1,
- 0x1bc9d,
- 0x2df1,
- 0x0b42,
- 0x081e,
- 0x16f59,
- 0xfe20,
- 0x0597,
- 0x1cf01,
- 0x1038,
- 0x035a,
- 0xe0196,
- 0x1a6e,
- 0x1daa5,
- 0x0321,
- 0x1da51,
- 0x17d2,
- 0x1daad,
- 0x033a,
- 0x1056,
- 0x1ab1,
- 0x0dcf,
- 0x1e947,
- 0x0300,
- 0x10d24,
- 0x10a02,
- 0x11342,
- 0x1ce7,
- 0x031f,
- 0x1073,
- 0x0653,
- 0x0fb2,
- 0x11a33,
- 0xe01cc,
- 0x1da02,
- 0xe0133,
- 0x2de2,
- 0x0333,
- 0x0a71,
- 0xe01eb,
- 0x11d96,
- 0x0612,
- 0xa8b8,
- 0x08e8,
- 0x11ca6,
- 0x1de8,
- 0x1da4f,
- 0x07a8,
- 0x0e39,
- 0xa982,
- 0x036e,
- 0x193a,
- 0x16f91,
- 0x10d27,
- 0x0f78,
- 0x035d,
- 0x1da2f,
- 0x11a36,
- 0xaab0,
- 0xfe0e,
- 0x05ad,
- 0x1dd6,
- 0xe0142,
- 0x1dfd,
- 0x1122f,
- 0x08e4,
- 0xaa7c,
- 0x1b3b,
- 0x0b48,
- 0x05bc,
- 0xa8ee,
- 0x11c97,
- 0x110b8,
- 0xe01b2,
- 0xe0122,
- 0x11a8e,
- 0x11a58,
- 0x036b,
- 0x0331,
- 0x16f71,
- 0x1143e,
- 0x110ba,
- 0x1112e,
- 0x089b,
- 0x1ac1,
- 0xe0143,
- 0x07ed,
- 0xa674,
- 0x2df0,
- 0x1da62,
- 0xa8bd,
- 0x1b3d,
- 0x11d3c,
- 0xe014b,
- 0xaa32,
- 0x11a51,
- 0x16f92,
- 0x1d166,
- 0x0cc8,
- 0x1dca,
- 0xe01b8,
- 0x1ac8,
- 0x17c9,
- 0xfe08,
- 0x0338,
- 0x1de7,
- 0xe018d,
- 0xa69e,
- 0x1da4c,
- 0x07f3,
- 0x16b35,
- 0x0a51,
- 0xa825,
- 0x1071,
- 0x11f3f,
- 0x0348,
- 0x116b7,
- 0x09c3,
- 0x1e2ee,
- 0x0e34,
- 0x036d,
- 0xabe9,
- 0x1cf7,
- 0x1935,
- 0x05aa,
- 0x1103f,
- 0x11a09,
- 0x1da3f,
- 0x108a,
- 0x16f5c,
- 0x20d6,
- 0x07eb,
- 0xfe2a,
- 0xe0193,
- 0x11d40,
- 0x05b9,
- 0x0f7d,
- 0x16f5a,
- 0xe0197,
- 0x09cd,
- 0x0fb5,
- 0x1da07,
- 0xe01d1,
- 0xa880,
- 0x1a7c,
- 0x11ca5,
- 0x09cb,
- 0x0fb3,
- 0x0825,
- 0x1103a,
- 0x0827,
- 0x1e94a,
- 0x08f8,
+ 0x1D165, 0x01B71, 0x0093B, 0x00D57, 0x00328, 0x11CB1, 0x1CF11, 0x11A0A, 0x01B82, 0xE01DC,
+ 0x01ABD, 0x02DEB, 0x11CAF, 0x1D172, 0x1CF3E, 0x114B8, 0x1CF40, 0x0A950, 0x114BA, 0x00748,
+ 0x16F7F, 0x020F0, 0x0A981, 0x101FD, 0x00FB1, 0x0102F, 0x01CD6, 0x1DA08, 0x00FA2, 0x11A57,
+ 0x1612D, 0x00A41, 0x006E3, 0x00898, 0x01BA4, 0x112E7, 0x16F70, 0x01BF3, 0x16F6B, 0x0106B,
+ 0x0A675, 0x1DA5B, 0x10D6B, 0x11EF3, 0x1CF25, 0x02DF7, 0x11A97, 0x0A8EB, 0x1BC9E, 0x0FE2E,
+ 0x1133E, 0x00334, 0x111B7, 0x16F5F, 0x0105E, 0xE0112, 0x00656, 0x11C98, 0x10D6A, 0x11726,
+ 0x0A94B, 0x0FE2D, 0x1DA50, 0x00A4B, 0x119DD, 0x0032F, 0x00A3F, 0x00C02, 0x11835, 0xE0128,
+ 0x11300, 0x01ACB, 0x1DA19, 0x0A802, 0x01DD5, 0x11C3A, 0x112E0, 0x0A8B7, 0x00EB7, 0x017DD,
+ 0x01A7B, 0x02DE5, 0x00EB1, 0x1DA69, 0x00FA9, 0x0A8E6, 0x00C3F, 0x0A8EA, 0xE0156, 0x1DAAD,
+ 0x0109B, 0xE017F, 0x11A90, 0x017BF, 0x02DF1, 0x01A66, 0x006D6, 0x007AC, 0xE01E9, 0x01934,
+ 0x0A92A, 0x1DA04, 0xE01CE, 0x111BE, 0x10A01, 0x01DFD, 0xE0141, 0x11236, 0x00D3E, 0x0FE25,
+ 0x00741, 0x1E947, 0xE0191, 0x00311, 0x16F82, 0x01A75, 0x02DEC, 0x00F3E, 0x020D7, 0x1DA48,
+ 0x1D182, 0x00303, 0x01B37, 0x1DA9F, 0x11A8F, 0x01036, 0x00AC0, 0x01BA1, 0xE0120, 0x116B6,
+ 0x110B7, 0x01DEC, 0x00351, 0x00B02, 0x16F61, 0x01A7C, 0x114B5, 0x16F80, 0x11182, 0x00CF3,
+ 0x11CAA, 0xE0198, 0x00DD8, 0x0A9B7, 0x00ECA, 0x02DF8, 0x0A8C5, 0x0AA4C, 0x008DC, 0x01064,
+ 0x01C29, 0x0093E, 0x009BC, 0x01CD1, 0x1145E, 0x1DA42, 0x1143D, 0x110B1, 0x1E08F, 0x11A04,
+ 0x1CF26, 0x1CF13, 0x00ACC, 0x10F4D, 0xE0104, 0x00823, 0xE01D4, 0x005A6, 0x11442, 0x00AC7,
+ 0x11C9A, 0x0AABE, 0x11369, 0x16F72, 0xE01C7, 0x10A0F, 0x01A76, 0x11A03, 0x0061A, 0x11044,
+ 0x01733, 0x00318, 0x0A826, 0x1CF31, 0x11F41, 0x10F4A, 0x00315, 0x00F37, 0x017B6, 0x111CA,
+ 0x1171F, 0x10D69, 0x01CD7, 0x00364, 0x10F48, 0x00C81, 0x01A5A, 0x1DA11, 0x01CF4, 0x01DEF,
+ 0x11937, 0x11A53, 0x0103A, 0x1CF32, 0x01082, 0xE018C, 0x01AC5, 0x11CB6, 0x11635, 0xE010D,
+ 0xE0164, 0x1DA33, 0x0180D, 0x01AB1, 0x11370, 0x11C3E, 0x11CAE, 0x0ABE7, 0x11C95, 0x112E6,
+ 0x0033D, 0x0A8EE, 0x1DA0F, 0x01773, 0x0033C, 0x020D5, 0x0034A, 0x1DA34, 0x00819, 0x11362,
+ 0x00301, 0x01DFB, 0x00488, 0xE0165, 0x017B8, 0xE015B, 0x16122, 0x01DD4, 0x00F94, 0x00F7F,
+ 0x1DA58, 0x11A8B, 0x01DDA, 0xE017A, 0x01BE6, 0x1DA5E, 0x00E4B, 0x11720, 0x0A9B8, 0x10F82,
+ 0x0A9B6, 0x00744, 0x00C63, 0x11231, 0x00327, 0x00E38, 0x01939, 0x11F37, 0x00F18, 0x00340,
+ 0x116B3, 0x11002, 0x02DFF, 0xE0183, 0x1CF1D, 0x00FAD, 0x1DA2E, 0x115BF, 0x02DF0, 0x00337,
+ 0x1CF2D, 0x00B03, 0x1143B, 0x11373, 0x113C9, 0x16F92, 0x005BB, 0x00CCC, 0x01AC0, 0x01DF1,
+ 0xE01A4, 0x017CD, 0x13455, 0x11CA5, 0x007EF, 0x1DA28, 0x01073, 0x00F71, 0x11C9F, 0xE018F,
+ 0x1E001, 0x01ABA, 0x01933, 0x110B0, 0x1E948, 0xE01BB, 0x10378, 0x01ACD, 0x1E8D0, 0x11038,
+ 0x00BC7, 0x0093A, 0x01CE0, 0x00F77, 0x16F64, 0x02DEF, 0x1E2AE, 0xE0134, 0x01BEC, 0x11146,
+ 0x1DA64, 0x00D02, 0x114B2, 0x0FE2B, 0x0A928, 0x00AC9, 0x020DE, 0x01BEE, 0xE013D, 0xE0114,
+ 0x0A94D, 0x11A34, 0x1DA0D, 0xE01D7, 0x113B9, 0x0081F, 0x116B4, 0x0A8E4, 0x10AE6, 0x017B7,
+ 0xE0103, 0x00940, 0x11636, 0x00C62, 0x119D6, 0x16FF1, 0x01DE1, 0x01A68, 0x0065B, 0x00316,
+ 0xE0154, 0x0081C, 0x0A670, 0x1DA4B, 0x1E945, 0x1D17B, 0x01920, 0x16F5A, 0x0A80B, 0xE0148,
+ 0x0A8F1, 0x1DA4D, 0x009BE, 0x017C6, 0x1CF0A, 0x01A5E, 0x112E5, 0x00BBF, 0xE01E8, 0x114BF,
+ 0x01AC6, 0x00746, 0x1DA75, 0x1112B, 0x1E000, 0x00ECC, 0x00822, 0x1D1AA, 0x16F77, 0x11348,
+ 0x00FAC, 0x017BA, 0x00AC1, 0x01DE3, 0x0059F, 0xE01A8, 0x01AC3, 0x00FAE, 0x111B3, 0x11728,
+ 0x0AABF, 0xE012A, 0x116AC, 0x00F76, 0x119E0, 0xE0106, 0x0030B, 0x02DF9, 0x005B3, 0x00341,
+ 0x1DA62, 0x01A60, 0x1E8D1, 0x01CF8, 0x1E5EF, 0x112E4, 0x1DA32, 0x1163E, 0x00F84, 0xE017C,
+ 0x00611, 0x008FD, 0x01ABF, 0x1DA53, 0x00483, 0x1CF41, 0x0085A, 0x017C4, 0x1DA1D, 0xE01E7,
+ 0x00326, 0x1DA10, 0xE01D8, 0x11C9E, 0x11832, 0x01DC4, 0x00366, 0x11D8C, 0x16AF2, 0x11C3F,
+ 0x11A8A, 0x0ABEC, 0x11D47, 0x01DE0, 0x00597, 0xE014F, 0x006DF, 0x111BC, 0x0AA2F, 0x0ABEA,
+ 0x01B42, 0x00D62, 0x01087, 0xE01D0, 0x1DA06, 0x115C0, 0x0089B, 0x11933, 0x017C2, 0x0A69F,
+ 0x01926, 0x110B5, 0x017CA, 0x11073, 0x11102, 0x1D180, 0x01B6F, 0x0AAEB, 0x00ABE, 0x10EFD,
+ 0x02DFB, 0x00AE3, 0x00C4D, 0x01930, 0x01ACC, 0x00ABC, 0x01032, 0x00DF3, 0xE01EF, 0x00A03,
+ 0x1DA57, 0x0030F, 0x1DAA1, 0x008F9, 0x020E5, 0x1DA23, 0x10F83, 0x008F5, 0x00343, 0x005B2,
+ 0x02D7F, 0x11932, 0x020E2, 0x11F39, 0x1E018, 0x00D00, 0x0031A, 0x017BE, 0x10D27, 0x01753,
+ 0x020D3, 0x00FB5, 0x02DEE, 0x00D82, 0x0033F, 0x00734, 0x1CF35, 0x11235, 0x116AE, 0xE016E,
+ 0x0036A, 0x16F65, 0xE01BD, 0x0AA43, 0x11D35, 0xE0195, 0x01DF8, 0x00B3E, 0x00F86, 0x113BD,
+ 0xE018E, 0x11A8E, 0x0A8BA, 0xE016C, 0x01A71, 0x11F34, 0x01084, 0x01DC9, 0x1CF37, 0x1CF1A,
+ 0x113BA, 0xE0122, 0x11C3C, 0x00304, 0x008E6, 0x11A35, 0x01CE4, 0x017B9, 0x0FE2C, 0x0FE0F,
+ 0x1DA27, 0x11A51, 0x1DA1B, 0x16AF0, 0x11A07, 0x00DDB, 0x1DAA5, 0x10A02, 0x0FE0C, 0x01DCF,
+ 0xE01DE, 0x006EC, 0x1DA14, 0x112E1, 0x0A927, 0x11A38, 0x007AB, 0x005B5, 0x1D244, 0x0A9BE,
+ 0x1E002, 0x11831, 0x01886, 0xE0169, 0xE0184, 0x1DA4A, 0x10A3F, 0x11128, 0x00595, 0x008DF,
+ 0x16B31, 0x113BC, 0x0064C, 0x00658, 0x01DC2, 0x1E020, 0x113CC, 0x02DE6, 0x006DB, 0x007A8,
+ 0x00821, 0x11633, 0x0A8B4, 0x008CF, 0xE0102, 0x0A823, 0x017D3, 0x01AC4, 0x11836, 0xE0151,
+ 0x005BD, 0xE0117, 0x01BA2, 0x1CF3C, 0x00CBC, 0x16F81, 0x1D18B, 0x017BD, 0x00346, 0x1DA5D,
+ 0x11CA7, 0xE0171, 0x0AAC1, 0x00CBE, 0x0A953, 0x01C30, 0x00329, 0x0089F, 0x008FA, 0x11725,
+ 0x1136B, 0x01CDC, 0x11070, 0x008F6, 0x00308, 0x01BEB, 0x11233, 0xE0136, 0x00F3F, 0x1CF09,
+ 0xE0100, 0x01DF3, 0x01035, 0x0102D, 0x00314, 0x008E1, 0x01DCE, 0x00A02, 0xE0157, 0xE0193,
+ 0x13451, 0x11D3A, 0x00CC4, 0x0034E, 0x00733, 0x11C2F, 0x16F62, 0x111BB, 0x01B72, 0x007AF,
+ 0x0036B, 0x00731, 0x008D3, 0x13453, 0x16F60, 0x01CF9, 0xE012D, 0xE0197, 0x00CCA, 0x00616,
+ 0x0FE01, 0x01BE7, 0xE0177, 0x10A0D, 0x01B6E, 0x01DCD, 0x1E004, 0x008D8, 0x11723, 0xE0168,
+ 0x11130, 0x01C28, 0x11C3D, 0x0064F, 0x0AAEC, 0x1DA40, 0x11C31, 0x01DCB, 0x01923, 0x11D34,
+ 0x008FF, 0xE01D5, 0x0034F, 0x16121, 0x01B44, 0x0A948, 0xE01DA, 0x1612F, 0x00650, 0x0AA35,
+ 0x00305, 0x020E8, 0x01752, 0x00AC4, 0x0A827, 0x1172A, 0x005AF, 0x01DC1, 0x11F3E, 0x1D189,
+ 0x1DA49, 0x11D45, 0x01C2E, 0x01037, 0xE01BE, 0xE01A3, 0x0A672, 0x0A8E3, 0x115B4, 0x11CAD,
+ 0x01DD2, 0x10EFF, 0x0064E, 0x0082C, 0x1611E, 0x0FE29, 0x00323, 0x00899, 0x00CD6, 0x00489,
+ 0x008CC, 0x01922, 0x00A82, 0x0ABE8, 0x01B01, 0x16F63, 0x0064D, 0x1DAAB, 0x017D2, 0x0FE26,
+ 0x00D3C, 0xE010A, 0x119DF, 0x1D171, 0x0A881, 0x01A56, 0x114C2, 0xE0113, 0x1D186, 0x11CB4,
+ 0x10377, 0x11A3C, 0x1E015, 0x00F9F, 0x0A8C1, 0x00B57, 0x16127, 0x0AA7C, 0x115BA, 0xE0127,
+ 0x00332, 0x11145, 0xE0179, 0xE0135, 0x00C4C, 0x008CE, 0x01A7F, 0x0031C, 0x006E1, 0x1E8D6,
+ 0xE0145, 0x00F93, 0x00362, 0x00596, 0x00347, 0x00317, 0x00670, 0xE0160, 0x00735, 0x10F4F,
+ 0x111C9, 0x11041, 0x1DA0E, 0x01928, 0x0FE06, 0x005C2, 0x005C4, 0x113E2, 0x1CF0D, 0x1CF1C,
+ 0x020DF, 0x00B4D, 0x0A67C, 0x00C41, 0xE0125, 0x11234, 0x0032C, 0x11D8E, 0x0106A, 0x00D3B,
+ 0x115DD, 0x00946, 0x00AC2, 0x01BAD, 0xE0196, 0x01714, 0x1344D, 0x0A94F, 0x1CF01, 0x00599,
+ 0x01ABB, 0x1DA29, 0x00FBA, 0x11437, 0x020EA, 0x00B3C, 0x10A39, 0x113C7, 0x1CF43, 0x005AB,
+ 0x00EC8, 0x020E1, 0x008D0, 0x1D168, 0xE0176, 0xE0133, 0x0192A, 0x0082A, 0x1193D, 0x01772,
+ 0x1E949, 0x00DD1, 0xE01E5, 0x0A980, 0x111CE, 0x01DC0, 0x1E8D3, 0x1DA02, 0xE01CC, 0x00FB0,
+ 0x0094B, 0x0135F, 0xE01B3, 0x008D7, 0x00313, 0x16F5B, 0x00E4A, 0x00610, 0x114BB, 0x00CCB,
+ 0x1171D, 0x1DA2C, 0x01C37, 0x0180C, 0x00FAB, 0x0065A, 0x115B2, 0x01A74, 0x113CE, 0x00CD5,
+ 0x00BD7, 0x0105F, 0x00C43, 0x00947, 0x0FE2F, 0x0032E, 0x1E4ED, 0xE010C, 0x01DC7, 0x01A18,
+ 0x1612A, 0x0A951, 0x006E7, 0x111B9, 0x00F90, 0x0032A, 0x02DEA, 0x16124, 0x0A8F0, 0x00FA1,
+ 0xE01A9, 0x0036F, 0x00ECB, 0x0093C, 0x110B8, 0x00BBE, 0x11C99, 0x008E8, 0x0A8B5, 0x01B39,
+ 0x0035C, 0x1DA4F, 0x0036E, 0x00740, 0x01A70, 0x01062, 0x0033A, 0x1E5EE, 0x1122D, 0x00FB9,
+ 0x11D42, 0x017CC, 0x1D166, 0x11D91, 0x00CC8, 0x01A6B, 0x119D4, 0x112E9, 0x017C9, 0x1CF2C,
+ 0xE0126, 0x00AFD, 0x1DA15, 0x1E010, 0x01B04, 0x0A8BE, 0x00BC0, 0x017B4, 0x01071, 0x11C94,
+ 0x119DC, 0x11371, 0x005C5, 0x11363, 0x11A54, 0x01CD4, 0x008D4, 0x11301, 0x1E2EC, 0x01A5B,
+ 0x11134, 0x005BF, 0x00B4C, 0x01A65, 0xE0180, 0x1182C, 0x16F73, 0x11C35, 0x00FA4, 0x01DCC,
+ 0x115BD, 0xE016D, 0xE0159, 0xE010E, 0x00D40, 0x1CF19, 0xE015F, 0x00903, 0x00C48, 0x01734,
+ 0x1DA43, 0x00825, 0x0FE22, 0x00ECD, 0x00333, 0x01B3A, 0x0089D, 0x018A9, 0x00E4D, 0x00312,
+ 0x1172B, 0x119DE, 0x0034C, 0x1103C, 0x00829, 0x1CF42, 0x1DAA2, 0x009C7, 0x00957, 0x119D1,
+ 0x11CA3, 0x1CF08, 0x00AC3, 0xE0166, 0x00D81, 0xE01D3, 0x1DA09, 0x00BCC, 0x02DED, 0x11A8D,
+ 0x008E4, 0x00FA0, 0x1E135, 0x00F7E, 0x102E0, 0x00659, 0x00D63, 0x16F66, 0x008EA, 0x00A3E,
+ 0x00732, 0xE01AB, 0x01072, 0x020ED, 0x00E35, 0x11639, 0x00F7B, 0x110C2, 0x01CDE, 0x1E028,
+ 0x113E1, 0x113BE, 0x11368, 0x114B0, 0x1136A, 0x008E7, 0x1DA66, 0x01088, 0x1E4EC, 0x0A952,
+ 0x0073C, 0x11374, 0x0073F, 0x1171E, 0x00B3F, 0xE01B5, 0x1182F, 0x11082, 0xE0146, 0x005B6,
+ 0x1E2ED, 0x11D8D, 0x01063, 0x1DAA6, 0x01B3F, 0x115B1, 0x00A3C, 0x01A5C, 0x113D2, 0x1D1AC,
+ 0x0A8EF, 0x0FE21, 0x115BB, 0x11830, 0x00FBB, 0x0ABED, 0x00C04, 0x020D4, 0x0A6F0, 0x0089E,
+ 0x0059B, 0x16B32, 0xE018B, 0x00FAA, 0x0109C, 0x00827, 0x01DD9, 0x13440, 0x01925, 0x0031B,
+ 0x01712, 0xE014A, 0x020D2, 0x0A677, 0x114C1, 0x1E003, 0x00CC1, 0x1112F, 0x00DCA, 0x1143F,
+ 0x11C30, 0x00613, 0x0AAF5, 0x10F4C, 0x02DE9, 0x1E131, 0xE018A, 0x1037A, 0x01DFF, 0x00816,
+ 0x16123, 0x00747, 0x00B47, 0x1136C, 0x111B8, 0x00D03, 0x112EA, 0x01038, 0xE01B9, 0x11133,
+ 0x1CF23, 0x0AA4D, 0x11230, 0x00C83, 0x00743, 0xE0150, 0x11F36, 0x0193A, 0x017CE, 0x01C31,
+ 0x01AB5, 0x11D94, 0x0A983, 0x00CCD, 0x00AFC, 0x11931, 0x1CF07, 0x1134B, 0x13452, 0x00CC3,
+ 0x0089C, 0x00F87, 0x00AC8, 0xE016B, 0x0102C, 0x1DA00, 0x00486, 0x00EB6, 0x11D43, 0x01031,
+ 0x114B9, 0x11040, 0x0A8FF, 0x11935, 0x1CF3D, 0x119D2, 0x10EAC, 0x11A08, 0x00F8E, 0x00DD0,
+ 0x00730, 0x0A9E5, 0xE0194, 0x00DD4, 0x11940, 0x1CF04, 0x1344E, 0xE0190, 0x017C8, 0xE01CF,
+ 0x00820, 0x009C2, 0x02DFE, 0x11080, 0x0A671, 0x1E009, 0x1DA61, 0x00C3C, 0x00944, 0x0034D,
+ 0x00FB3, 0x119DA, 0x0A9BB, 0x008F2, 0x01DF6, 0x00A42, 0x116B0, 0x11729, 0x0302C, 0x01A58,
+ 0x16F76, 0x1E00E, 0x01AB4, 0x01DE7, 0x020EC, 0x10A38, 0x00A51, 0xE01C5, 0x10F47, 0x01938,
+ 0x00D44, 0x005A2, 0x1E01D, 0x01DCA, 0x007AD, 0x1DA59, 0x1163C, 0x16F7B, 0x01C34, 0x116B5,
+ 0x00306, 0xE01CD, 0x02DFD, 0x1DAAE, 0x00E4C, 0x1CF1F, 0x00BCA, 0x1133F, 0x11938, 0x11344,
+ 0x16125, 0x1E944, 0x01DDE, 0xE010B, 0xE011D, 0x10F4B, 0x00B48, 0x00DDD, 0x11727, 0x00592,
+ 0x16B30, 0x005B7, 0x00355, 0x00D4B, 0x1D1AD, 0xE012B, 0x13447, 0xE0101, 0x01DF2, 0x02DFA,
+ 0x01C2B, 0x01B40, 0x11357, 0x11100, 0x008ED, 0xE0109, 0x1DA03, 0x0FE28, 0x11722, 0x01CE6,
+ 0x005B0, 0x00615, 0x1DAA8, 0x00342, 0x00BCB, 0x11042, 0x01CD8, 0x01A17, 0x01C2A, 0x00F79,
+ 0x1112A, 0x11C3B, 0x01CE8, 0x1DA24, 0xE0189, 0xE01EE, 0x11D3D, 0x00FBC, 0x00367, 0x116B1,
+ 0x11074, 0x0A66F, 0x0031F, 0x11237, 0x01DF9, 0x01DE5, 0x01ABE, 0x0074A, 0x00F75, 0x10376,
+ 0x115B3, 0x0AA2C, 0x00DCF, 0xE013A, 0xE019F, 0x11C38, 0x1183A, 0x00A75, 0x00484, 0x119D7,
+ 0x00D46, 0x008DB, 0x0032B, 0x0FB1E, 0x1123E, 0x110B4, 0x11C9D, 0x1CF46, 0x1D16D, 0x00AE2,
+ 0x01058, 0x0106D, 0x1143C, 0x01DDF, 0x16120, 0xE015A, 0x00338, 0x01CDA, 0x00591, 0x00B56,
+ 0x1D187, 0x00737, 0x00F9A, 0x00CC2, 0x01B6C, 0x01DD0, 0x00CC0, 0x00A83, 0x11D97, 0x006D8,
+ 0x01B34, 0x00FA6, 0x116AD, 0x00DF2, 0x1163D, 0x0192B, 0x020E4, 0x10F84, 0xE0119, 0x008DD,
+ 0x006EB, 0x01059, 0x16F75, 0x00983, 0x00963, 0x02CF1, 0x1E130, 0x00300, 0x113CD, 0x0A6F1,
+ 0xE0143, 0x0FE0B, 0x02DF2, 0x006ED, 0x017C1, 0x01C2C, 0x005A7, 0x16F86, 0x00952, 0x01A62,
+ 0x01A19, 0x16FE4, 0x01DEE, 0x0180F, 0x1DA65, 0x0109D, 0x03099, 0x11A91, 0x006E8, 0x01AB7,
+ 0x01DD3, 0x1D16E, 0x007B0, 0xE0105, 0x00352, 0x0A9BF, 0x1E017, 0x00D41, 0x0059D, 0x01DF7,
+ 0x0A8BC, 0x005C1, 0x0A8ED, 0x11101, 0x11438, 0x11EF5, 0x007A7, 0x1DA35, 0x11A59, 0x00307,
+ 0x1E008, 0x10A05, 0xE01C8, 0x1CF14, 0x11444, 0x0033E, 0x008E9, 0x00ACB, 0x16F58, 0xE01C1,
+ 0x16F6D, 0x00B62, 0x01A73, 0x01CE7, 0x16F57, 0x01C36, 0x01060, 0x11D93, 0x11C96, 0x0035E,
+ 0x00F9C, 0x11A92, 0xE0181, 0x16AF4, 0x1DAA9, 0x00F7C, 0x1DA55, 0x1E01E, 0x01ACE, 0x11CA4,
+ 0x0135D, 0x00357, 0x0094E, 0x020D0, 0x11343, 0xE01AD, 0x1D1AB, 0x00EB9, 0xE0172, 0x00593,
+ 0x00D4A, 0x0AA31, 0xE01ED, 0x0089A, 0xE01A0, 0x11D96, 0x00948, 0x0A67A, 0x1E4EF, 0x01BEF,
+ 0x00F8F, 0x0A824, 0xE017E, 0x1DA4E, 0x00B82, 0x00CC7, 0x020DB, 0x13448, 0x00A40, 0x0A94E,
+ 0x11837, 0x10F49, 0x01083, 0xE0188, 0x1DA1F, 0x1D17C, 0x0A678, 0x00DDA, 0x006D7, 0x110B2,
+ 0x00826, 0x0A82C, 0x01CDF, 0x0AA2D, 0x009C4, 0x008E5, 0xE011C, 0x00E4E, 0x0A8E0, 0x1612B,
+ 0xE015C, 0x11F00, 0x01B02, 0x0A9BD, 0x11443, 0x1E026, 0x0A9B9, 0x0A94A, 0xE01D6, 0x01B73,
+ 0x1DA63, 0x13454, 0x11A96, 0x1D167, 0x11001, 0x1DA51, 0x113C5, 0x11F3A, 0x1D17E, 0x11D3F,
+ 0x00D01, 0x01A1A, 0x11439, 0x11A06, 0x01DF0, 0xE013B, 0x00F19, 0x00DD6, 0xE0167, 0x16F6F,
+ 0x00F72, 0x16F79, 0x00F81, 0x00A71, 0x119D5, 0x1103D, 0x1DA41, 0x01DDB, 0x0093F, 0x0FE00,
+ 0x008F7, 0x00B40, 0x00949, 0x0A9C0, 0x1103A, 0xE014E, 0x0A67B, 0xE0118, 0x01DEA, 0xE0107,
+ 0x1193C, 0x115BC, 0x01BA3, 0x00E34, 0x11366, 0x1CF3A, 0xE01DB, 0x0A929, 0xE01B1, 0xE0163,
+ 0x119E4, 0x00324, 0x01B6D, 0x017C0, 0x020DD, 0x01DD8, 0x0FE27, 0x11A93, 0x10D24, 0x114BD,
+ 0x0302A, 0x1CF1B, 0x1344F, 0x0081B, 0x1DA2A, 0x00309, 0x1CF29, 0x01DE4, 0x0A8BB, 0x113BB,
+ 0x00FC6, 0x11045, 0xE0147, 0x00FA8, 0x017CF, 0x00EBC, 0x00C55, 0x01A6A, 0x0A92C, 0x00941,
+ 0x11046, 0x01DE8, 0xE019C, 0x10D6C, 0x11EF4, 0x020E9, 0x0059A, 0x00D4C, 0x0031D, 0x01C33,
+ 0xE0140, 0x1107F, 0x00E39, 0x01CED, 0x1DA47, 0x005AD, 0xE01C9, 0x01AC8, 0x00901, 0x1D185,
+ 0x1DA1A, 0x1D181, 0x01ACA, 0x11CA9, 0x10A0C, 0x11A3B, 0x00953, 0xE01E0, 0x00ABF, 0xE011F,
+ 0x009E2, 0xE0111, 0x005A0, 0x11833, 0x1DA05, 0x115AF, 0x0302D, 0x113C2, 0xE012C, 0x0082D,
+ 0x1143E, 0xE01D2, 0x00B41, 0x01A55, 0x00302, 0x113CF, 0x00FB4, 0x0AAB0, 0x16F87, 0x01DC6,
+ 0x0AA32, 0xE0130, 0x020E7, 0x008DE, 0x007A9, 0x00739, 0x10F46, 0xE01AE, 0x114BC, 0x02CF0,
+ 0x11A47, 0x01A67, 0x1D170, 0x01A61, 0x00DDE, 0x1E012, 0x0135E, 0x0065E, 0x00DD9, 0xE0199,
+ 0xE013C, 0x1DA68, 0x11A05, 0x01929, 0x16F6C, 0x11F03, 0x16B35, 0x0A8C0, 0x005AA, 0x10AE5,
+ 0x00B01, 0x16AF3, 0x0FE07, 0x00FAF, 0x1DA26, 0x10D26, 0x1E00C, 0x0081E, 0x1DA3F, 0x01CD0,
+ 0x01BAC, 0xE0178, 0x01B36, 0x00C47, 0x0180B, 0x00654, 0x01DDC, 0x008EC, 0x1DA5F, 0x16F90,
+ 0x01DFC, 0x0103E, 0x11F38, 0x16FF0, 0x01DD7, 0xE015E, 0x00B55, 0x00614, 0x0030A, 0x1163B,
+ 0x11D95, 0x01074, 0xE0142, 0x00F99, 0xE01A6, 0x1163A, 0x1CF45, 0x1CF0F, 0xE0158, 0x0FE0E,
+ 0x0A825, 0x0108B, 0x00E49, 0x020D9, 0x1E00A, 0x1CF16, 0x0AAEE, 0x1E01B, 0x16F78, 0x10F4E,
+ 0xE019E, 0x16B34, 0x008EE, 0xE01C3, 0x00320, 0x11C33, 0x16F69, 0xE0132, 0x1103E, 0x0ABE3,
+ 0x00945, 0x00902, 0x1DA5A, 0x11446, 0x00C40, 0x1DA30, 0x0073E, 0xE012F, 0x11C9B, 0x11C36,
+ 0x007FD, 0x00360, 0x00E3A, 0x116AF, 0x01C32, 0x0A8E2, 0x005B1, 0x1122C, 0x0103B, 0xE013F,
+ 0x00BC2, 0x11C34, 0x11081, 0x02DF4, 0x119DB, 0x11631, 0x01A6D, 0x16F55, 0x00B44, 0x16B36,
+ 0x01DFE, 0x11A02, 0x1E8D4, 0x0AAEF, 0x00AFE, 0x020EB, 0x005A5, 0x1CF18, 0x00ACD, 0x11445,
+ 0x115B5, 0x16F53, 0x005A1, 0x00F95, 0x0FE09, 0xE01E3, 0x111B6, 0x00EB8, 0x1CF10, 0x1DA3E,
+ 0x1E00B, 0x0102E, 0x006EA, 0x11A95, 0x11435, 0x00D47, 0x00CE2, 0x00F74, 0x11043, 0xE0124,
+ 0x113BF, 0x008D6, 0x11A52, 0x11A8C, 0xE01CA, 0x00FA3, 0x1E00F, 0x11EF6, 0x16F7A, 0x111BA,
+ 0x1CF2B, 0x0A8E7, 0x1E00D, 0x1CF3F, 0x0ABE6, 0x005A3, 0x00A70, 0x01885, 0x0034B, 0x1E011,
+ 0x00FB8, 0x01A6F, 0x01CD2, 0xE011A, 0x01030, 0x16F7E, 0x16F5D, 0x11D90, 0x00349, 0x01AB9,
+ 0x1E02A, 0x007EE, 0x01B3D, 0x0106C, 0x11CA6, 0x0033B, 0x01039, 0x020E3, 0x11A55, 0x00736,
+ 0x01B6B, 0x1344C, 0x007AA, 0x00BCD, 0x008CD, 0x11039, 0x01AB3, 0x1DAAA, 0x0030D, 0x01089,
+ 0x0302B, 0x01A6C, 0x11131, 0x0A8E9, 0xE01EB, 0x1DA21, 0x1DA45, 0x00C4B, 0x02DF3, 0x1DAAF,
+ 0x020D6, 0x0A94C, 0x00C03, 0x01A78, 0x00EB5, 0xE011B, 0x02DE7, 0xE0138, 0x11232, 0x16F56,
+ 0x1CF0B, 0xE0144, 0x13449, 0x1DA0C, 0x01BED, 0x0A982, 0xE01A5, 0x1CF06, 0x16F85, 0x0A679,
+ 0x008CB, 0x0A8BF, 0x0064B, 0x1DA3D, 0x1E8D5, 0x00E47, 0x01069, 0x008D2, 0x113B8, 0x00335,
+ 0x01713, 0x01A5D, 0x00C82, 0x0A67D, 0x1CF33, 0x11CB0, 0xE0153, 0x00897, 0x16F8F, 0x11A5A,
+ 0x11724, 0x1E016, 0x0103D, 0x01B3E, 0x01DC8, 0x16B33, 0x01937, 0x01A6E, 0x10A3A, 0x01BAA,
+ 0x01B43, 0x0FE0A, 0x020D8, 0xE014C, 0x02DF6, 0x1CF15, 0x020EE, 0x00942, 0xE0162, 0x009C1,
+ 0x00653, 0x0FE08, 0x1D17F, 0x017C5, 0x008CA, 0x1DA9B, 0x005BA, 0x00BC6, 0x00C42, 0x00738,
+ 0x11632, 0x1DA18, 0x008F8, 0x005AE, 0x116B7, 0x1134C, 0x11834, 0x0085B, 0x005C7, 0x11943,
+ 0x0A9B4, 0x1E029, 0x11A01, 0x020E0, 0x1103F, 0x00612, 0x01BA7, 0x00365, 0x0073B, 0x009D7,
+ 0x0193B, 0x11838, 0x01067, 0x0FE04, 0x11D32, 0x01DD6, 0x1DA2B, 0x0FE24, 0x01A7A, 0xE016A,
+ 0x0FE02, 0x16F6A, 0x1344B, 0x113CA, 0x11241, 0x110BA, 0x00C3E, 0x007AE, 0x0030C, 0xE0185,
+ 0x01AC9, 0x01C26, 0x1DA6A, 0x11436, 0x00331, 0x1CF27, 0x11367, 0xE0139, 0x00859, 0x01927,
+ 0x1CF02, 0x1DA9C, 0xE01B0, 0x111BF, 0x16128, 0x01DEB, 0x0AA30, 0xE0174, 0x1DAA4, 0x01ABC,
+ 0x00CC6, 0x01B38, 0x1DA5C, 0x020DC, 0x00C4A, 0x1CF34, 0x11D8B, 0x16129, 0x00955, 0x0AAED,
+ 0x10EAB, 0x017C7, 0x01BA8, 0x0AA2E, 0x1D16F, 0xE0116, 0x017BC, 0x0AAB3, 0xE01B7, 0x01BE9,
+ 0x1E006, 0x1E4EE, 0x01B70, 0x00325, 0xE0186, 0x0A92D, 0x11930, 0x111B5, 0x01A72, 0x1DA44,
+ 0xE01E6, 0x1DA1C, 0x005AC, 0x01B41, 0x10A03, 0x00363, 0x114C0, 0xE0123, 0x008E0, 0x01936,
+ 0x00D4D, 0x00C56, 0x00DDC, 0x11A39, 0x1E2EF, 0x006DC, 0x017D0, 0x1D242, 0x00359, 0x0A8E1,
+ 0x1CF05, 0x0094C, 0x01BF1, 0x008EF, 0x16AF1, 0x11634, 0xE0161, 0x1DA12, 0x020DA, 0x008D1,
+ 0x0094A, 0x008FB, 0x01BA6, 0x00D48, 0xE0108, 0x1E946, 0x00319, 0x017B5, 0x00339, 0x01DE2,
+ 0x11638, 0x0073A, 0x01057, 0x01CF7, 0x11173, 0x0309A, 0x1133B, 0x020EF, 0x112E2, 0x1E133,
+ 0x1DA52, 0x005B8, 0x00E37, 0x1D18A, 0x16F67, 0x1133C, 0x00598, 0x11A37, 0x00EBA, 0x111CB,
+ 0x0AAF6, 0x005B4, 0x02DF5, 0x11441, 0x114B7, 0x00353, 0x1163F, 0x008E3, 0x00651, 0x007F1,
+ 0x113D0, 0x0032D, 0x008FE, 0x115BE, 0x0AA34, 0x02DE1, 0x01B00, 0x006E4, 0x01CDB, 0x1CF03,
+ 0x01C25, 0x115B8, 0x11129, 0x00330, 0x00C01, 0x00943, 0x0A926, 0x1DA0A, 0x10D25, 0x008D9,
+ 0x0A9BC, 0x00322, 0x11C9C, 0xE0110, 0x13450, 0x00A47, 0x11F40, 0x01DC3, 0x01B3C, 0x1CF0E,
+ 0x01924, 0x0A676, 0x0036C, 0x007EC, 0x1D169, 0xE01E4, 0x00F7A, 0x00DD2, 0x1CF20, 0x11630,
+ 0x11347, 0x112E3, 0x01A59, 0x11D41, 0x11A36, 0xE0192, 0x0035B, 0x0065D, 0x00619, 0x00954,
+ 0xE0137, 0xE0149, 0x11F42, 0x00749, 0x01DF4, 0x1112D, 0x01CE1, 0x1CF3B, 0x1103B, 0x007F0,
+ 0xE01C0, 0x11D33, 0x00AFB, 0xE0175, 0x0AA33, 0x1DA3C, 0x0ABE5, 0x0ABE4, 0x02DE3, 0x1134D,
+ 0x009CC, 0x1DA9D, 0x01AC2, 0xE01A2, 0x11D44, 0xE0129, 0x11127, 0x115DC, 0x01B3B, 0x1CF36,
+ 0x00F97, 0x01CD5, 0x11D31, 0x00EB4, 0x1DA22, 0xE01EC, 0x10EFE, 0x00B63, 0x111C0, 0x1E013,
+ 0x11A56, 0x116B2, 0x0A947, 0x00BC8, 0x1DA16, 0x1DA6C, 0x008F0, 0x01BF2, 0x009BF, 0x11CA1,
+ 0x01CE2, 0xE01B4, 0xE012E, 0x01C2D, 0xE019D, 0x00F39, 0xE01AF, 0x1D188, 0x00D42, 0x01DD1,
+ 0x00BC1, 0x112DF, 0x0108A, 0x1182D, 0x1E014, 0xE01D1, 0x115B9, 0x16F4F, 0xE01C2, 0x11180,
+ 0xE017D, 0x01A57, 0x1CF00, 0x11A3D, 0x01921, 0x113C0, 0x00F82, 0xE01CB, 0x01CDD, 0x1DA01,
+ 0x0ABE9, 0x11303, 0x1E005, 0x11341, 0x00B4B, 0x11C39, 0x01AB2, 0x16F74, 0x114C3, 0x0A949,
+ 0x00617, 0x1CF17, 0x008EB, 0x005B9, 0x00745, 0x11CAB, 0x1DA36, 0x006E2, 0x16F54, 0x00C00,
+ 0x114BE, 0x01B81, 0x0102B, 0x1CF1E, 0x0A806, 0x0A880, 0x020E6, 0x01DF5, 0xE01D9, 0x0FE23,
+ 0x00487, 0x00F73, 0x01CE5, 0x11D36, 0x0081D, 0x1CF28, 0x11D40, 0x020D1, 0x0AA36, 0x0A8E5,
+ 0x110B6, 0x0A8C2, 0x11F5A, 0x11181, 0x00F35, 0x00D43, 0x0094D, 0x1193E, 0x1143A, 0xE0115,
+ 0x017D1, 0x1CF38, 0x0082B, 0x119D3, 0x00F80, 0x16F52, 0x005A4, 0xE0121, 0x008F4, 0xE01B2,
+ 0x00F83, 0x10EFC, 0x00ECE, 0x16F5E, 0x10A06, 0x11A98, 0x0A9BA, 0xE01B6, 0x1DA0B, 0x00F96,
+ 0x16F68, 0x00361, 0x00900, 0x16F7D, 0x00A81, 0x1612C, 0x1CF44, 0x0108C, 0x1DA60, 0x01B03,
+ 0x0A69E, 0x0094F, 0x11F01, 0x1CF24, 0x00951, 0x02DE4, 0x11A94, 0x11A58, 0x02DE8, 0xE01BF,
+ 0x111BD, 0x00EC9, 0x017C3, 0x0AA2A, 0x01B35, 0x00817, 0x1112C, 0x006DA, 0x009E3, 0x11372,
+ 0x00D83, 0x11CAC, 0x01BA9, 0x16F71, 0x1DAAC, 0x0AAB8, 0x00CE3, 0x00652, 0x11340, 0x16F5C,
+ 0x11000, 0x00FA7, 0x007A6, 0x11640, 0x11637, 0x11A3E, 0x008F1, 0x009FE, 0x11CA2, 0x0A8B9,
+ 0x01A79, 0x0A8BD, 0x01C2F, 0x01068, 0x01DE9, 0x0AA7D, 0x00A48, 0x01A77, 0x11132, 0x00345,
+ 0x110B9, 0x01931, 0x10379, 0x0FE2A, 0x1DA6B, 0x01AC1, 0xE01BC, 0x00354, 0x01085, 0x11942,
+ 0x11F35, 0x009C0, 0x00344, 0xE01EA, 0x1DA20, 0x0302F, 0x0031E, 0x00FA5, 0x1CF0C, 0xE01A1,
+ 0xE01C6, 0x00350, 0x01CE3, 0x0103C, 0x02DFC, 0x11342, 0x01A63, 0xE0173, 0x1CF21, 0xE019B,
+ 0x00A01, 0xE014D, 0x00DDF, 0xE019A, 0x01AC7, 0x1D243, 0xE01DF, 0x0FE0D, 0x11302, 0xE01E1,
+ 0x1D17D, 0x1DA17, 0x111CC, 0x0035F, 0x00962, 0x11D8A, 0x113C8, 0x0A9B3, 0x00818, 0x00356,
+ 0x00B43, 0x1DAA7, 0x11721, 0x0AAB7, 0x111CF, 0x00956, 0xE01C4, 0xE013E, 0x008DA, 0x00B42,
+ 0x1CF12, 0x0FE03, 0x11A99, 0x01DFA, 0x01DC5, 0x11CB3, 0x1DA67, 0xE0155, 0xE0131, 0x16F51,
+ 0x1182E, 0x1DAA3, 0x00657, 0x16F84, 0x00982, 0x114B3, 0x005BC, 0x00594, 0x008FC, 0x01B80,
+ 0xE017B, 0x01BF0, 0x02CEF, 0x007F2, 0x00D3F, 0x009C8, 0x01BAB, 0x1CF39, 0x00F91, 0x00AFA,
+ 0xE016F, 0x0109A, 0x16F7C, 0x005A9, 0x00FB6, 0x00A4D, 0x0A8C3, 0x008F3, 0x10F85, 0x1193B,
+ 0x00A4C, 0x11CA0, 0x0A9B5, 0x1E01C, 0x0A8E8, 0x0108D, 0x1DA46, 0x006D9, 0xE0152, 0x00711,
+ 0x01DE6, 0x01A64, 0x01AB0, 0x01CD9, 0x00F9B, 0x00F9D, 0x00E31, 0x110B3, 0xE011E, 0x10F50,
+ 0x01932, 0x00742, 0x0108F, 0x0AA2B, 0x01BA5, 0x1BC9D, 0x00E36, 0x00310, 0x1E134, 0x0065F,
+ 0x16F59, 0x0FE20, 0x1CF22, 0xE01A7, 0x0059C, 0x0035A, 0x1611F, 0x1E027, 0xE0182, 0x00321,
+ 0x0302E, 0x1CF30, 0xE015D, 0x00FB7, 0x01056, 0x00E48, 0xE01AC, 0x114B1, 0x01AB8, 0x00F92,
+ 0x1DA31, 0x16F6E, 0x11C92, 0x16126, 0x00368, 0x00C46, 0x00FB2, 0x11A33, 0x00655, 0x01A69,
+ 0x11440, 0x02DE2, 0x00369, 0x1344A, 0x1DA2D, 0x1E024, 0x0FE05, 0x112E8, 0x0A8B8, 0x0A92B,
+ 0x11839, 0x0059E, 0x116AB, 0x0AA29, 0x017BB, 0x01C35, 0x00336, 0x1DA25, 0x16F91, 0x00618,
+ 0x00F78, 0x0035D, 0x1DA2F, 0x0073D, 0x01033, 0x111B4, 0x1612E, 0x01715, 0x1DA54, 0x11CB5,
+ 0x1122F, 0x1DA13, 0xE01DD, 0x11C32, 0x1DA1E, 0x1DA56, 0x0AAB4, 0x00358, 0x11C97, 0x01DDD,
+ 0x00981, 0x00F8D, 0xE0187, 0x008D5, 0x01A1B, 0x00EBB, 0x00485, 0x11934, 0x02DE0, 0x1112E,
+ 0x01034, 0x11C93, 0x007ED, 0x0A674, 0x0A8B6, 0x00C44, 0x1CF2A, 0x115B0, 0x11A5B, 0x11D3C,
+ 0xE014B, 0x00DD3, 0xE01AA, 0xE01E2, 0x0A8EC, 0xE0170, 0xE01B8, 0x1122E, 0x10A0E, 0xE01BA,
+ 0x006E0, 0x00CBF, 0x005A8, 0xE018D, 0xE010F, 0x1DA4C, 0x007F3, 0x00F9E, 0x1E136, 0x1DA84,
+ 0x1E8D2, 0x11F3F, 0x00348, 0x1E132, 0x009C3, 0x1E2EE, 0x0030E, 0x0065C, 0x0036D, 0x11CB2,
+ 0x01BEA, 0x01935, 0x0AA7B, 0x01732, 0x11A09, 0x00AC5, 0x0A8C4, 0x01C24, 0x01AB6, 0x007EB,
+ 0x017CB, 0x01DED, 0x1DA3B, 0x1E021, 0x00F7D, 0x1E01F, 0x01086, 0x009CD, 0x10D6D, 0x1DA07,
+ 0x114B4, 0x01BE8, 0x16F83, 0x009CB, 0x01C27, 0x1DA9E, 0x114B6, 0x00AFF, 0x0AAB2, 0x1E94A,
+ 0x1E023,
];
-
-
#[inline]
pub fn is_public_assigned(c: char) -> bool {
match c {
@@ -33595,7 +20440,7 @@
| '\u{0860}'..='\u{086A}'
| '\u{0870}'..='\u{088E}'
| '\u{0890}'..='\u{0891}'
- | '\u{0898}'..='\u{0983}'
+ | '\u{0897}'..='\u{0983}'
| '\u{0985}'..='\u{098C}'
| '\u{098F}'..='\u{0990}'
| '\u{0993}'..='\u{09A8}'
@@ -33787,11 +20632,10 @@
| '\u{1AA0}'..='\u{1AAD}'
| '\u{1AB0}'..='\u{1ACE}'
| '\u{1B00}'..='\u{1B4C}'
- | '\u{1B50}'..='\u{1B7E}'
- | '\u{1B80}'..='\u{1BF3}'
+ | '\u{1B4E}'..='\u{1BF3}'
| '\u{1BFC}'..='\u{1C37}'
| '\u{1C3B}'..='\u{1C49}'
- | '\u{1C4D}'..='\u{1C88}'
+ | '\u{1C4D}'..='\u{1C8A}'
| '\u{1C90}'..='\u{1CBA}'
| '\u{1CBD}'..='\u{1CC7}'
| '\u{1CD0}'..='\u{1CFA}'
@@ -33818,7 +20662,7 @@
| '\u{20A0}'..='\u{20C0}'
| '\u{20D0}'..='\u{20F0}'
| '\u{2100}'..='\u{218B}'
- | '\u{2190}'..='\u{2426}'
+ | '\u{2190}'..='\u{2429}'
| '\u{2440}'..='\u{244A}'
| '\u{2460}'..='\u{2B73}'
| '\u{2B76}'..='\u{2B95}'
@@ -33841,22 +20685,21 @@
| '\u{2E80}'..='\u{2E99}'
| '\u{2E9B}'..='\u{2EF3}'
| '\u{2F00}'..='\u{2FD5}'
- | '\u{2FF0}'..='\u{2FFB}'
- | '\u{3000}'..='\u{303F}'
+ | '\u{2FF0}'..='\u{303F}'
| '\u{3041}'..='\u{3096}'
| '\u{3099}'..='\u{30FF}'
| '\u{3105}'..='\u{312F}'
| '\u{3131}'..='\u{318E}'
- | '\u{3190}'..='\u{31E3}'
- | '\u{31F0}'..='\u{321E}'
+ | '\u{3190}'..='\u{31E5}'
+ | '\u{31EF}'..='\u{321E}'
| '\u{3220}'..='\u{A48C}'
| '\u{A490}'..='\u{A4C6}'
| '\u{A4D0}'..='\u{A62B}'
| '\u{A640}'..='\u{A6F7}'
- | '\u{A700}'..='\u{A7CA}'
+ | '\u{A700}'..='\u{A7CD}'
| '\u{A7D0}'..='\u{A7D1}'
| '\u{A7D3}'
- | '\u{A7D5}'..='\u{A7D9}'
+ | '\u{A7D5}'..='\u{A7DC}'
| '\u{A7F2}'..='\u{A82C}'
| '\u{A830}'..='\u{A839}'
| '\u{A840}'..='\u{A877}'
@@ -33947,6 +20790,7 @@
| '\u{105A3}'..='\u{105B1}'
| '\u{105B3}'..='\u{105B9}'
| '\u{105BB}'..='\u{105BC}'
+ | '\u{105C0}'..='\u{105F3}'
| '\u{10600}'..='\u{10736}'
| '\u{10740}'..='\u{10755}'
| '\u{10760}'..='\u{10767}'
@@ -33990,11 +20834,15 @@
| '\u{10CC0}'..='\u{10CF2}'
| '\u{10CFA}'..='\u{10D27}'
| '\u{10D30}'..='\u{10D39}'
+ | '\u{10D40}'..='\u{10D65}'
+ | '\u{10D69}'..='\u{10D85}'
+ | '\u{10D8E}'..='\u{10D8F}'
| '\u{10E60}'..='\u{10E7E}'
| '\u{10E80}'..='\u{10EA9}'
| '\u{10EAB}'..='\u{10EAD}'
| '\u{10EB0}'..='\u{10EB1}'
- | '\u{10EFD}'..='\u{10F27}'
+ | '\u{10EC2}'..='\u{10EC4}'
+ | '\u{10EFC}'..='\u{10F27}'
| '\u{10F30}'..='\u{10F59}'
| '\u{10F70}'..='\u{10F89}'
| '\u{10FB0}'..='\u{10FCB}'
@@ -34034,6 +20882,17 @@
| '\u{1135D}'..='\u{11363}'
| '\u{11366}'..='\u{1136C}'
| '\u{11370}'..='\u{11374}'
+ | '\u{11380}'..='\u{11389}'
+ | '\u{1138B}'
+ | '\u{1138E}'
+ | '\u{11390}'..='\u{113B5}'
+ | '\u{113B7}'..='\u{113C0}'
+ | '\u{113C2}'
+ | '\u{113C5}'
+ | '\u{113C7}'..='\u{113CA}'
+ | '\u{113CC}'..='\u{113D5}'
+ | '\u{113D7}'..='\u{113D8}'
+ | '\u{113E1}'..='\u{113E2}'
| '\u{11400}'..='\u{1145B}'
| '\u{1145D}'..='\u{11461}'
| '\u{11480}'..='\u{114C7}'
@@ -34045,6 +20904,7 @@
| '\u{11660}'..='\u{1166C}'
| '\u{11680}'..='\u{116B9}'
| '\u{116C0}'..='\u{116C9}'
+ | '\u{116D0}'..='\u{116E3}'
| '\u{11700}'..='\u{1171A}'
| '\u{1171D}'..='\u{1172B}'
| '\u{11730}'..='\u{11746}'
@@ -34065,6 +20925,8 @@
| '\u{11A50}'..='\u{11AA2}'
| '\u{11AB0}'..='\u{11AF8}'
| '\u{11B00}'..='\u{11B09}'
+ | '\u{11BC0}'..='\u{11BE1}'
+ | '\u{11BF0}'..='\u{11BF9}'
| '\u{11C00}'..='\u{11C08}'
| '\u{11C0A}'..='\u{11C36}'
| '\u{11C38}'..='\u{11C45}'
@@ -34088,7 +20950,7 @@
| '\u{11EE0}'..='\u{11EF8}'
| '\u{11F00}'..='\u{11F10}'
| '\u{11F12}'..='\u{11F3A}'
- | '\u{11F3E}'..='\u{11F59}'
+ | '\u{11F3E}'..='\u{11F5A}'
| '\u{11FB0}'
| '\u{11FC0}'..='\u{11FF1}'
| '\u{11FFF}'..='\u{12399}'
@@ -34097,7 +20959,9 @@
| '\u{12480}'..='\u{12543}'
| '\u{12F90}'..='\u{12FF2}'
| '\u{13000}'..='\u{13455}'
+ | '\u{13460}'..='\u{143FA}'
| '\u{14400}'..='\u{14646}'
+ | '\u{16100}'..='\u{16139}'
| '\u{16800}'..='\u{16A38}'
| '\u{16A40}'..='\u{16A5E}'
| '\u{16A60}'..='\u{16A69}'
@@ -34110,6 +20974,7 @@
| '\u{16B5B}'..='\u{16B61}'
| '\u{16B63}'..='\u{16B77}'
| '\u{16B7D}'..='\u{16B8F}'
+ | '\u{16D40}'..='\u{16D79}'
| '\u{16E40}'..='\u{16E9A}'
| '\u{16F00}'..='\u{16F4A}'
| '\u{16F4F}'..='\u{16F87}'
@@ -34118,7 +20983,7 @@
| '\u{16FF0}'..='\u{16FF1}'
| '\u{17000}'..='\u{187F7}'
| '\u{18800}'..='\u{18CD5}'
- | '\u{18D00}'..='\u{18D08}'
+ | '\u{18CFF}'..='\u{18D08}'
| '\u{1AFF0}'..='\u{1AFF3}'
| '\u{1AFF5}'..='\u{1AFFB}'
| '\u{1AFFD}'..='\u{1AFFE}'
@@ -34133,6 +20998,8 @@
| '\u{1BC80}'..='\u{1BC88}'
| '\u{1BC90}'..='\u{1BC99}'
| '\u{1BC9C}'..='\u{1BCA3}'
+ | '\u{1CC00}'..='\u{1CCF9}'
+ | '\u{1CD00}'..='\u{1CEB3}'
| '\u{1CF00}'..='\u{1CF2D}'
| '\u{1CF30}'..='\u{1CF46}'
| '\u{1CF50}'..='\u{1CFC3}'
@@ -34184,6 +21051,8 @@
| '\u{1E2C0}'..='\u{1E2F9}'
| '\u{1E2FF}'
| '\u{1E4D0}'..='\u{1E4F9}'
+ | '\u{1E5D0}'..='\u{1E5FA}'
+ | '\u{1E5FF}'
| '\u{1E7E0}'..='\u{1E7E6}'
| '\u{1E7E8}'..='\u{1E7EB}'
| '\u{1E7ED}'..='\u{1E7EE}'
@@ -34253,53 +21122,51 @@
| '\u{1F850}'..='\u{1F859}'
| '\u{1F860}'..='\u{1F887}'
| '\u{1F890}'..='\u{1F8AD}'
- | '\u{1F8B0}'..='\u{1F8B1}'
+ | '\u{1F8B0}'..='\u{1F8BB}'
+ | '\u{1F8C0}'..='\u{1F8C1}'
| '\u{1F900}'..='\u{1FA53}'
| '\u{1FA60}'..='\u{1FA6D}'
| '\u{1FA70}'..='\u{1FA7C}'
- | '\u{1FA80}'..='\u{1FA88}'
- | '\u{1FA90}'..='\u{1FABD}'
- | '\u{1FABF}'..='\u{1FAC5}'
- | '\u{1FACE}'..='\u{1FADB}'
- | '\u{1FAE0}'..='\u{1FAE8}'
+ | '\u{1FA80}'..='\u{1FA89}'
+ | '\u{1FA8F}'..='\u{1FAC6}'
+ | '\u{1FACE}'..='\u{1FADC}'
+ | '\u{1FADF}'..='\u{1FAE9}'
| '\u{1FAF0}'..='\u{1FAF8}'
| '\u{1FB00}'..='\u{1FB92}'
- | '\u{1FB94}'..='\u{1FBCA}'
- | '\u{1FBF0}'..='\u{1FBF9}'
+ | '\u{1FB94}'..='\u{1FBF9}'
| '\u{20000}'..='\u{2A6DF}'
| '\u{2A700}'..='\u{2B739}'
| '\u{2B740}'..='\u{2B81D}'
| '\u{2B820}'..='\u{2CEA1}'
| '\u{2CEB0}'..='\u{2EBE0}'
+ | '\u{2EBF0}'..='\u{2EE5D}'
| '\u{2F800}'..='\u{2FA1D}'
| '\u{30000}'..='\u{3134A}'
| '\u{31350}'..='\u{323AF}'
| '\u{E0001}'
| '\u{E0020}'..='\u{E007F}'
- | '\u{E0100}'..='\u{E01EF}'
- => true,
+ | '\u{E0100}'..='\u{E01EF}' => true,
_ => false,
}
}
-
#[inline]
#[allow(ellipsis_inclusive_range_patterns)]
pub fn qc_nfc(c: char) -> IsNormalized {
match c {
- '\u{0340}'...'\u{0341}' => No,
- '\u{0343}'...'\u{0344}' => No,
+ '\u{0340}'..='\u{0341}' => No,
+ '\u{0343}'..='\u{0344}' => No,
'\u{0374}' => No,
'\u{037E}' => No,
'\u{0387}' => No,
- '\u{0958}'...'\u{095F}' => No,
- '\u{09DC}'...'\u{09DD}' => No,
+ '\u{0958}'..='\u{095F}' => No,
+ '\u{09DC}'..='\u{09DD}' => No,
'\u{09DF}' => No,
'\u{0A33}' => No,
'\u{0A36}' => No,
- '\u{0A59}'...'\u{0A5B}' => No,
+ '\u{0A59}'..='\u{0A5B}' => No,
'\u{0A5E}' => No,
- '\u{0B5C}'...'\u{0B5D}' => No,
+ '\u{0B5C}'..='\u{0B5D}' => No,
'\u{0F43}' => No,
'\u{0F4D}' => No,
'\u{0F52}' => No,
@@ -34307,7 +21174,7 @@
'\u{0F5C}' => No,
'\u{0F69}' => No,
'\u{0F73}' => No,
- '\u{0F75}'...'\u{0F76}' => No,
+ '\u{0F75}'..='\u{0F76}' => No,
'\u{0F78}' => No,
'\u{0F81}' => No,
'\u{0F93}' => No,
@@ -34331,49 +21198,49 @@
'\u{1FDB}' => No,
'\u{1FE3}' => No,
'\u{1FEB}' => No,
- '\u{1FEE}'...'\u{1FEF}' => No,
+ '\u{1FEE}'..='\u{1FEF}' => No,
'\u{1FF9}' => No,
'\u{1FFB}' => No,
'\u{1FFD}' => No,
- '\u{2000}'...'\u{2001}' => No,
+ '\u{2000}'..='\u{2001}' => No,
'\u{2126}' => No,
- '\u{212A}'...'\u{212B}' => No,
+ '\u{212A}'..='\u{212B}' => No,
'\u{2329}' => No,
'\u{232A}' => No,
'\u{2ADC}' => No,
- '\u{F900}'...'\u{FA0D}' => No,
+ '\u{F900}'..='\u{FA0D}' => No,
'\u{FA10}' => No,
'\u{FA12}' => No,
- '\u{FA15}'...'\u{FA1E}' => No,
+ '\u{FA15}'..='\u{FA1E}' => No,
'\u{FA20}' => No,
'\u{FA22}' => No,
- '\u{FA25}'...'\u{FA26}' => No,
- '\u{FA2A}'...'\u{FA6D}' => No,
- '\u{FA70}'...'\u{FAD9}' => No,
+ '\u{FA25}'..='\u{FA26}' => No,
+ '\u{FA2A}'..='\u{FA6D}' => No,
+ '\u{FA70}'..='\u{FAD9}' => No,
'\u{FB1D}' => No,
'\u{FB1F}' => No,
- '\u{FB2A}'...'\u{FB36}' => No,
- '\u{FB38}'...'\u{FB3C}' => No,
+ '\u{FB2A}'..='\u{FB36}' => No,
+ '\u{FB38}'..='\u{FB3C}' => No,
'\u{FB3E}' => No,
- '\u{FB40}'...'\u{FB41}' => No,
- '\u{FB43}'...'\u{FB44}' => No,
- '\u{FB46}'...'\u{FB4E}' => No,
- '\u{1D15E}'...'\u{1D164}' => No,
- '\u{1D1BB}'...'\u{1D1C0}' => No,
- '\u{2F800}'...'\u{2FA1D}' => No,
- '\u{0300}'...'\u{0304}' => Maybe,
- '\u{0306}'...'\u{030C}' => Maybe,
+ '\u{FB40}'..='\u{FB41}' => No,
+ '\u{FB43}'..='\u{FB44}' => No,
+ '\u{FB46}'..='\u{FB4E}' => No,
+ '\u{1D15E}'..='\u{1D164}' => No,
+ '\u{1D1BB}'..='\u{1D1C0}' => No,
+ '\u{2F800}'..='\u{2FA1D}' => No,
+ '\u{0300}'..='\u{0304}' => Maybe,
+ '\u{0306}'..='\u{030C}' => Maybe,
'\u{030F}' => Maybe,
'\u{0311}' => Maybe,
- '\u{0313}'...'\u{0314}' => Maybe,
+ '\u{0313}'..='\u{0314}' => Maybe,
'\u{031B}' => Maybe,
- '\u{0323}'...'\u{0328}' => Maybe,
- '\u{032D}'...'\u{032E}' => Maybe,
- '\u{0330}'...'\u{0331}' => Maybe,
+ '\u{0323}'..='\u{0328}' => Maybe,
+ '\u{032D}'..='\u{032E}' => Maybe,
+ '\u{0330}'..='\u{0331}' => Maybe,
'\u{0338}' => Maybe,
'\u{0342}' => Maybe,
'\u{0345}' => Maybe,
- '\u{0653}'...'\u{0655}' => Maybe,
+ '\u{0653}'..='\u{0655}' => Maybe,
'\u{093C}' => Maybe,
'\u{09BE}' => Maybe,
'\u{09D7}' => Maybe,
@@ -34384,30 +21251,36 @@
'\u{0BD7}' => Maybe,
'\u{0C56}' => Maybe,
'\u{0CC2}' => Maybe,
- '\u{0CD5}'...'\u{0CD6}' => Maybe,
+ '\u{0CD5}'..='\u{0CD6}' => Maybe,
'\u{0D3E}' => Maybe,
'\u{0D57}' => Maybe,
'\u{0DCA}' => Maybe,
'\u{0DCF}' => Maybe,
'\u{0DDF}' => Maybe,
'\u{102E}' => Maybe,
- '\u{1161}'...'\u{1175}' => Maybe,
- '\u{11A8}'...'\u{11C2}' => Maybe,
+ '\u{1161}'..='\u{1175}' => Maybe,
+ '\u{11A8}'..='\u{11C2}' => Maybe,
'\u{1B35}' => Maybe,
- '\u{3099}'...'\u{309A}' => Maybe,
+ '\u{3099}'..='\u{309A}' => Maybe,
'\u{110BA}' => Maybe,
'\u{11127}' => Maybe,
'\u{1133E}' => Maybe,
'\u{11357}' => Maybe,
+ '\u{113B8}' => Maybe,
+ '\u{113BB}' => Maybe,
+ '\u{113C2}' => Maybe,
+ '\u{113C5}' => Maybe,
+ '\u{113C7}'..='\u{113C9}' => Maybe,
'\u{114B0}' => Maybe,
'\u{114BA}' => Maybe,
'\u{114BD}' => Maybe,
'\u{115AF}' => Maybe,
'\u{11930}' => Maybe,
+ '\u{1611E}'..='\u{16129}' => Maybe,
+ '\u{16D67}'..='\u{16D68}' => Maybe,
_ => Yes,
}
}
-
#[inline]
#[allow(ellipsis_inclusive_range_patterns)]
pub fn qc_nfkc(c: char) -> IsNormalized {
@@ -34416,46 +21289,46 @@
'\u{00A8}' => No,
'\u{00AA}' => No,
'\u{00AF}' => No,
- '\u{00B2}'...'\u{00B3}' => No,
+ '\u{00B2}'..='\u{00B3}' => No,
'\u{00B4}' => No,
'\u{00B5}' => No,
'\u{00B8}' => No,
'\u{00B9}' => No,
'\u{00BA}' => No,
- '\u{00BC}'...'\u{00BE}' => No,
- '\u{0132}'...'\u{0133}' => No,
- '\u{013F}'...'\u{0140}' => No,
+ '\u{00BC}'..='\u{00BE}' => No,
+ '\u{0132}'..='\u{0133}' => No,
+ '\u{013F}'..='\u{0140}' => No,
'\u{0149}' => No,
'\u{017F}' => No,
- '\u{01C4}'...'\u{01CC}' => No,
- '\u{01F1}'...'\u{01F3}' => No,
- '\u{02B0}'...'\u{02B8}' => No,
- '\u{02D8}'...'\u{02DD}' => No,
- '\u{02E0}'...'\u{02E4}' => No,
- '\u{0340}'...'\u{0341}' => No,
- '\u{0343}'...'\u{0344}' => No,
+ '\u{01C4}'..='\u{01CC}' => No,
+ '\u{01F1}'..='\u{01F3}' => No,
+ '\u{02B0}'..='\u{02B8}' => No,
+ '\u{02D8}'..='\u{02DD}' => No,
+ '\u{02E0}'..='\u{02E4}' => No,
+ '\u{0340}'..='\u{0341}' => No,
+ '\u{0343}'..='\u{0344}' => No,
'\u{0374}' => No,
'\u{037A}' => No,
'\u{037E}' => No,
- '\u{0384}'...'\u{0385}' => No,
+ '\u{0384}'..='\u{0385}' => No,
'\u{0387}' => No,
- '\u{03D0}'...'\u{03D6}' => No,
- '\u{03F0}'...'\u{03F2}' => No,
- '\u{03F4}'...'\u{03F5}' => No,
+ '\u{03D0}'..='\u{03D6}' => No,
+ '\u{03F0}'..='\u{03F2}' => No,
+ '\u{03F4}'..='\u{03F5}' => No,
'\u{03F9}' => No,
'\u{0587}' => No,
- '\u{0675}'...'\u{0678}' => No,
- '\u{0958}'...'\u{095F}' => No,
- '\u{09DC}'...'\u{09DD}' => No,
+ '\u{0675}'..='\u{0678}' => No,
+ '\u{0958}'..='\u{095F}' => No,
+ '\u{09DC}'..='\u{09DD}' => No,
'\u{09DF}' => No,
'\u{0A33}' => No,
'\u{0A36}' => No,
- '\u{0A59}'...'\u{0A5B}' => No,
+ '\u{0A59}'..='\u{0A5B}' => No,
'\u{0A5E}' => No,
- '\u{0B5C}'...'\u{0B5D}' => No,
+ '\u{0B5C}'..='\u{0B5D}' => No,
'\u{0E33}' => No,
'\u{0EB3}' => No,
- '\u{0EDC}'...'\u{0EDD}' => No,
+ '\u{0EDC}'..='\u{0EDD}' => No,
'\u{0F0C}' => No,
'\u{0F43}' => No,
'\u{0F4D}' => No,
@@ -34464,7 +21337,7 @@
'\u{0F5C}' => No,
'\u{0F69}' => No,
'\u{0F73}' => No,
- '\u{0F75}'...'\u{0F79}' => No,
+ '\u{0F75}'..='\u{0F79}' => No,
'\u{0F81}' => No,
'\u{0F93}' => No,
'\u{0F9D}' => No,
@@ -34473,13 +21346,13 @@
'\u{0FAC}' => No,
'\u{0FB9}' => No,
'\u{10FC}' => No,
- '\u{1D2C}'...'\u{1D2E}' => No,
- '\u{1D30}'...'\u{1D3A}' => No,
- '\u{1D3C}'...'\u{1D4D}' => No,
- '\u{1D4F}'...'\u{1D6A}' => No,
+ '\u{1D2C}'..='\u{1D2E}' => No,
+ '\u{1D30}'..='\u{1D3A}' => No,
+ '\u{1D3C}'..='\u{1D4D}' => No,
+ '\u{1D4F}'..='\u{1D6A}' => No,
'\u{1D78}' => No,
- '\u{1D9B}'...'\u{1DBF}' => No,
- '\u{1E9A}'...'\u{1E9B}' => No,
+ '\u{1D9B}'..='\u{1DBF}' => No,
+ '\u{1E9A}'..='\u{1E9B}' => No,
'\u{1F71}' => No,
'\u{1F73}' => No,
'\u{1F75}' => No,
@@ -34490,142 +21363,142 @@
'\u{1FBB}' => No,
'\u{1FBD}' => No,
'\u{1FBE}' => No,
- '\u{1FBF}'...'\u{1FC1}' => No,
+ '\u{1FBF}'..='\u{1FC1}' => No,
'\u{1FC9}' => No,
'\u{1FCB}' => No,
- '\u{1FCD}'...'\u{1FCF}' => No,
+ '\u{1FCD}'..='\u{1FCF}' => No,
'\u{1FD3}' => No,
'\u{1FDB}' => No,
- '\u{1FDD}'...'\u{1FDF}' => No,
+ '\u{1FDD}'..='\u{1FDF}' => No,
'\u{1FE3}' => No,
'\u{1FEB}' => No,
- '\u{1FED}'...'\u{1FEF}' => No,
+ '\u{1FED}'..='\u{1FEF}' => No,
'\u{1FF9}' => No,
'\u{1FFB}' => No,
- '\u{1FFD}'...'\u{1FFE}' => No,
- '\u{2000}'...'\u{200A}' => No,
+ '\u{1FFD}'..='\u{1FFE}' => No,
+ '\u{2000}'..='\u{200A}' => No,
'\u{2011}' => No,
'\u{2017}' => No,
- '\u{2024}'...'\u{2026}' => No,
+ '\u{2024}'..='\u{2026}' => No,
'\u{202F}' => No,
- '\u{2033}'...'\u{2034}' => No,
- '\u{2036}'...'\u{2037}' => No,
+ '\u{2033}'..='\u{2034}' => No,
+ '\u{2036}'..='\u{2037}' => No,
'\u{203C}' => No,
'\u{203E}' => No,
- '\u{2047}'...'\u{2049}' => No,
+ '\u{2047}'..='\u{2049}' => No,
'\u{2057}' => No,
'\u{205F}' => No,
'\u{2070}' => No,
'\u{2071}' => No,
- '\u{2074}'...'\u{2079}' => No,
- '\u{207A}'...'\u{207C}' => No,
+ '\u{2074}'..='\u{2079}' => No,
+ '\u{207A}'..='\u{207C}' => No,
'\u{207D}' => No,
'\u{207E}' => No,
'\u{207F}' => No,
- '\u{2080}'...'\u{2089}' => No,
- '\u{208A}'...'\u{208C}' => No,
+ '\u{2080}'..='\u{2089}' => No,
+ '\u{208A}'..='\u{208C}' => No,
'\u{208D}' => No,
'\u{208E}' => No,
- '\u{2090}'...'\u{209C}' => No,
+ '\u{2090}'..='\u{209C}' => No,
'\u{20A8}' => No,
- '\u{2100}'...'\u{2101}' => No,
+ '\u{2100}'..='\u{2101}' => No,
'\u{2102}' => No,
'\u{2103}' => No,
- '\u{2105}'...'\u{2106}' => No,
+ '\u{2105}'..='\u{2106}' => No,
'\u{2107}' => No,
'\u{2109}' => No,
- '\u{210A}'...'\u{2113}' => No,
+ '\u{210A}'..='\u{2113}' => No,
'\u{2115}' => No,
'\u{2116}' => No,
- '\u{2119}'...'\u{211D}' => No,
- '\u{2120}'...'\u{2122}' => No,
+ '\u{2119}'..='\u{211D}' => No,
+ '\u{2120}'..='\u{2122}' => No,
'\u{2124}' => No,
'\u{2126}' => No,
'\u{2128}' => No,
- '\u{212A}'...'\u{212D}' => No,
- '\u{212F}'...'\u{2131}' => No,
- '\u{2133}'...'\u{2134}' => No,
- '\u{2135}'...'\u{2138}' => No,
+ '\u{212A}'..='\u{212D}' => No,
+ '\u{212F}'..='\u{2131}' => No,
+ '\u{2133}'..='\u{2134}' => No,
+ '\u{2135}'..='\u{2138}' => No,
'\u{2139}' => No,
'\u{213B}' => No,
- '\u{213C}'...'\u{213F}' => No,
+ '\u{213C}'..='\u{213F}' => No,
'\u{2140}' => No,
- '\u{2145}'...'\u{2149}' => No,
- '\u{2150}'...'\u{215F}' => No,
- '\u{2160}'...'\u{217F}' => No,
+ '\u{2145}'..='\u{2149}' => No,
+ '\u{2150}'..='\u{215F}' => No,
+ '\u{2160}'..='\u{217F}' => No,
'\u{2189}' => No,
- '\u{222C}'...'\u{222D}' => No,
- '\u{222F}'...'\u{2230}' => No,
+ '\u{222C}'..='\u{222D}' => No,
+ '\u{222F}'..='\u{2230}' => No,
'\u{2329}' => No,
'\u{232A}' => No,
- '\u{2460}'...'\u{249B}' => No,
- '\u{249C}'...'\u{24E9}' => No,
+ '\u{2460}'..='\u{249B}' => No,
+ '\u{249C}'..='\u{24E9}' => No,
'\u{24EA}' => No,
'\u{2A0C}' => No,
- '\u{2A74}'...'\u{2A76}' => No,
+ '\u{2A74}'..='\u{2A76}' => No,
'\u{2ADC}' => No,
- '\u{2C7C}'...'\u{2C7D}' => No,
+ '\u{2C7C}'..='\u{2C7D}' => No,
'\u{2D6F}' => No,
'\u{2E9F}' => No,
'\u{2EF3}' => No,
- '\u{2F00}'...'\u{2FD5}' => No,
+ '\u{2F00}'..='\u{2FD5}' => No,
'\u{3000}' => No,
'\u{3036}' => No,
- '\u{3038}'...'\u{303A}' => No,
- '\u{309B}'...'\u{309C}' => No,
+ '\u{3038}'..='\u{303A}' => No,
+ '\u{309B}'..='\u{309C}' => No,
'\u{309F}' => No,
'\u{30FF}' => No,
- '\u{3131}'...'\u{318E}' => No,
- '\u{3192}'...'\u{3195}' => No,
- '\u{3196}'...'\u{319F}' => No,
- '\u{3200}'...'\u{321E}' => No,
- '\u{3220}'...'\u{3229}' => No,
- '\u{322A}'...'\u{3247}' => No,
+ '\u{3131}'..='\u{318E}' => No,
+ '\u{3192}'..='\u{3195}' => No,
+ '\u{3196}'..='\u{319F}' => No,
+ '\u{3200}'..='\u{321E}' => No,
+ '\u{3220}'..='\u{3229}' => No,
+ '\u{322A}'..='\u{3247}' => No,
'\u{3250}' => No,
- '\u{3251}'...'\u{325F}' => No,
- '\u{3260}'...'\u{327E}' => No,
- '\u{3280}'...'\u{3289}' => No,
- '\u{328A}'...'\u{32B0}' => No,
- '\u{32B1}'...'\u{32BF}' => No,
- '\u{32C0}'...'\u{33FF}' => No,
- '\u{A69C}'...'\u{A69D}' => No,
+ '\u{3251}'..='\u{325F}' => No,
+ '\u{3260}'..='\u{327E}' => No,
+ '\u{3280}'..='\u{3289}' => No,
+ '\u{328A}'..='\u{32B0}' => No,
+ '\u{32B1}'..='\u{32BF}' => No,
+ '\u{32C0}'..='\u{33FF}' => No,
+ '\u{A69C}'..='\u{A69D}' => No,
'\u{A770}' => No,
- '\u{A7F2}'...'\u{A7F4}' => No,
- '\u{A7F8}'...'\u{A7F9}' => No,
- '\u{AB5C}'...'\u{AB5F}' => No,
+ '\u{A7F2}'..='\u{A7F4}' => No,
+ '\u{A7F8}'..='\u{A7F9}' => No,
+ '\u{AB5C}'..='\u{AB5F}' => No,
'\u{AB69}' => No,
- '\u{F900}'...'\u{FA0D}' => No,
+ '\u{F900}'..='\u{FA0D}' => No,
'\u{FA10}' => No,
'\u{FA12}' => No,
- '\u{FA15}'...'\u{FA1E}' => No,
+ '\u{FA15}'..='\u{FA1E}' => No,
'\u{FA20}' => No,
'\u{FA22}' => No,
- '\u{FA25}'...'\u{FA26}' => No,
- '\u{FA2A}'...'\u{FA6D}' => No,
- '\u{FA70}'...'\u{FAD9}' => No,
- '\u{FB00}'...'\u{FB06}' => No,
- '\u{FB13}'...'\u{FB17}' => No,
+ '\u{FA25}'..='\u{FA26}' => No,
+ '\u{FA2A}'..='\u{FA6D}' => No,
+ '\u{FA70}'..='\u{FAD9}' => No,
+ '\u{FB00}'..='\u{FB06}' => No,
+ '\u{FB13}'..='\u{FB17}' => No,
'\u{FB1D}' => No,
- '\u{FB1F}'...'\u{FB28}' => No,
+ '\u{FB1F}'..='\u{FB28}' => No,
'\u{FB29}' => No,
- '\u{FB2A}'...'\u{FB36}' => No,
- '\u{FB38}'...'\u{FB3C}' => No,
+ '\u{FB2A}'..='\u{FB36}' => No,
+ '\u{FB38}'..='\u{FB3C}' => No,
'\u{FB3E}' => No,
- '\u{FB40}'...'\u{FB41}' => No,
- '\u{FB43}'...'\u{FB44}' => No,
- '\u{FB46}'...'\u{FBB1}' => No,
- '\u{FBD3}'...'\u{FD3D}' => No,
- '\u{FD50}'...'\u{FD8F}' => No,
- '\u{FD92}'...'\u{FDC7}' => No,
- '\u{FDF0}'...'\u{FDFB}' => No,
+ '\u{FB40}'..='\u{FB41}' => No,
+ '\u{FB43}'..='\u{FB44}' => No,
+ '\u{FB46}'..='\u{FBB1}' => No,
+ '\u{FBD3}'..='\u{FD3D}' => No,
+ '\u{FD50}'..='\u{FD8F}' => No,
+ '\u{FD92}'..='\u{FDC7}' => No,
+ '\u{FDF0}'..='\u{FDFB}' => No,
'\u{FDFC}' => No,
- '\u{FE10}'...'\u{FE16}' => No,
+ '\u{FE10}'..='\u{FE16}' => No,
'\u{FE17}' => No,
'\u{FE18}' => No,
'\u{FE19}' => No,
'\u{FE30}' => No,
- '\u{FE31}'...'\u{FE32}' => No,
- '\u{FE33}'...'\u{FE34}' => No,
+ '\u{FE31}'..='\u{FE32}' => No,
+ '\u{FE33}'..='\u{FE34}' => No,
'\u{FE35}' => No,
'\u{FE36}' => No,
'\u{FE37}' => No,
@@ -34644,10 +21517,10 @@
'\u{FE44}' => No,
'\u{FE47}' => No,
'\u{FE48}' => No,
- '\u{FE49}'...'\u{FE4C}' => No,
- '\u{FE4D}'...'\u{FE4F}' => No,
- '\u{FE50}'...'\u{FE52}' => No,
- '\u{FE54}'...'\u{FE57}' => No,
+ '\u{FE49}'..='\u{FE4C}' => No,
+ '\u{FE4D}'..='\u{FE4F}' => No,
+ '\u{FE50}'..='\u{FE52}' => No,
+ '\u{FE54}'..='\u{FE57}' => No,
'\u{FE58}' => No,
'\u{FE59}' => No,
'\u{FE5A}' => No,
@@ -34655,38 +21528,38 @@
'\u{FE5C}' => No,
'\u{FE5D}' => No,
'\u{FE5E}' => No,
- '\u{FE5F}'...'\u{FE61}' => No,
+ '\u{FE5F}'..='\u{FE61}' => No,
'\u{FE62}' => No,
'\u{FE63}' => No,
- '\u{FE64}'...'\u{FE66}' => No,
+ '\u{FE64}'..='\u{FE66}' => No,
'\u{FE68}' => No,
'\u{FE69}' => No,
- '\u{FE6A}'...'\u{FE6B}' => No,
- '\u{FE70}'...'\u{FE72}' => No,
+ '\u{FE6A}'..='\u{FE6B}' => No,
+ '\u{FE70}'..='\u{FE72}' => No,
'\u{FE74}' => No,
- '\u{FE76}'...'\u{FEFC}' => No,
- '\u{FF01}'...'\u{FF03}' => No,
+ '\u{FE76}'..='\u{FEFC}' => No,
+ '\u{FF01}'..='\u{FF03}' => No,
'\u{FF04}' => No,
- '\u{FF05}'...'\u{FF07}' => No,
+ '\u{FF05}'..='\u{FF07}' => No,
'\u{FF08}' => No,
'\u{FF09}' => No,
'\u{FF0A}' => No,
'\u{FF0B}' => No,
'\u{FF0C}' => No,
'\u{FF0D}' => No,
- '\u{FF0E}'...'\u{FF0F}' => No,
- '\u{FF10}'...'\u{FF19}' => No,
- '\u{FF1A}'...'\u{FF1B}' => No,
- '\u{FF1C}'...'\u{FF1E}' => No,
- '\u{FF1F}'...'\u{FF20}' => No,
- '\u{FF21}'...'\u{FF3A}' => No,
+ '\u{FF0E}'..='\u{FF0F}' => No,
+ '\u{FF10}'..='\u{FF19}' => No,
+ '\u{FF1A}'..='\u{FF1B}' => No,
+ '\u{FF1C}'..='\u{FF1E}' => No,
+ '\u{FF1F}'..='\u{FF20}' => No,
+ '\u{FF21}'..='\u{FF3A}' => No,
'\u{FF3B}' => No,
'\u{FF3C}' => No,
'\u{FF3D}' => No,
'\u{FF3E}' => No,
'\u{FF3F}' => No,
'\u{FF40}' => No,
- '\u{FF41}'...'\u{FF5A}' => No,
+ '\u{FF41}'..='\u{FF5A}' => No,
'\u{FF5B}' => No,
'\u{FF5C}' => No,
'\u{FF5D}' => No,
@@ -34696,128 +21569,130 @@
'\u{FF61}' => No,
'\u{FF62}' => No,
'\u{FF63}' => No,
- '\u{FF64}'...'\u{FF65}' => No,
- '\u{FF66}'...'\u{FF6F}' => No,
+ '\u{FF64}'..='\u{FF65}' => No,
+ '\u{FF66}'..='\u{FF6F}' => No,
'\u{FF70}' => No,
- '\u{FF71}'...'\u{FF9D}' => No,
- '\u{FF9E}'...'\u{FF9F}' => No,
- '\u{FFA0}'...'\u{FFBE}' => No,
- '\u{FFC2}'...'\u{FFC7}' => No,
- '\u{FFCA}'...'\u{FFCF}' => No,
- '\u{FFD2}'...'\u{FFD7}' => No,
- '\u{FFDA}'...'\u{FFDC}' => No,
- '\u{FFE0}'...'\u{FFE1}' => No,
+ '\u{FF71}'..='\u{FF9D}' => No,
+ '\u{FF9E}'..='\u{FF9F}' => No,
+ '\u{FFA0}'..='\u{FFBE}' => No,
+ '\u{FFC2}'..='\u{FFC7}' => No,
+ '\u{FFCA}'..='\u{FFCF}' => No,
+ '\u{FFD2}'..='\u{FFD7}' => No,
+ '\u{FFDA}'..='\u{FFDC}' => No,
+ '\u{FFE0}'..='\u{FFE1}' => No,
'\u{FFE2}' => No,
'\u{FFE3}' => No,
'\u{FFE4}' => No,
- '\u{FFE5}'...'\u{FFE6}' => No,
+ '\u{FFE5}'..='\u{FFE6}' => No,
'\u{FFE8}' => No,
- '\u{FFE9}'...'\u{FFEC}' => No,
- '\u{FFED}'...'\u{FFEE}' => No,
- '\u{10781}'...'\u{10785}' => No,
- '\u{10787}'...'\u{107B0}' => No,
- '\u{107B2}'...'\u{107BA}' => No,
- '\u{1D15E}'...'\u{1D164}' => No,
- '\u{1D1BB}'...'\u{1D1C0}' => No,
- '\u{1D400}'...'\u{1D454}' => No,
- '\u{1D456}'...'\u{1D49C}' => No,
- '\u{1D49E}'...'\u{1D49F}' => No,
+ '\u{FFE9}'..='\u{FFEC}' => No,
+ '\u{FFED}'..='\u{FFEE}' => No,
+ '\u{10781}'..='\u{10785}' => No,
+ '\u{10787}'..='\u{107B0}' => No,
+ '\u{107B2}'..='\u{107BA}' => No,
+ '\u{1CCD6}'..='\u{1CCEF}' => No,
+ '\u{1CCF0}'..='\u{1CCF9}' => No,
+ '\u{1D15E}'..='\u{1D164}' => No,
+ '\u{1D1BB}'..='\u{1D1C0}' => No,
+ '\u{1D400}'..='\u{1D454}' => No,
+ '\u{1D456}'..='\u{1D49C}' => No,
+ '\u{1D49E}'..='\u{1D49F}' => No,
'\u{1D4A2}' => No,
- '\u{1D4A5}'...'\u{1D4A6}' => No,
- '\u{1D4A9}'...'\u{1D4AC}' => No,
- '\u{1D4AE}'...'\u{1D4B9}' => No,
+ '\u{1D4A5}'..='\u{1D4A6}' => No,
+ '\u{1D4A9}'..='\u{1D4AC}' => No,
+ '\u{1D4AE}'..='\u{1D4B9}' => No,
'\u{1D4BB}' => No,
- '\u{1D4BD}'...'\u{1D4C3}' => No,
- '\u{1D4C5}'...'\u{1D505}' => No,
- '\u{1D507}'...'\u{1D50A}' => No,
- '\u{1D50D}'...'\u{1D514}' => No,
- '\u{1D516}'...'\u{1D51C}' => No,
- '\u{1D51E}'...'\u{1D539}' => No,
- '\u{1D53B}'...'\u{1D53E}' => No,
- '\u{1D540}'...'\u{1D544}' => No,
+ '\u{1D4BD}'..='\u{1D4C3}' => No,
+ '\u{1D4C5}'..='\u{1D505}' => No,
+ '\u{1D507}'..='\u{1D50A}' => No,
+ '\u{1D50D}'..='\u{1D514}' => No,
+ '\u{1D516}'..='\u{1D51C}' => No,
+ '\u{1D51E}'..='\u{1D539}' => No,
+ '\u{1D53B}'..='\u{1D53E}' => No,
+ '\u{1D540}'..='\u{1D544}' => No,
'\u{1D546}' => No,
- '\u{1D54A}'...'\u{1D550}' => No,
- '\u{1D552}'...'\u{1D6A5}' => No,
- '\u{1D6A8}'...'\u{1D6C0}' => No,
+ '\u{1D54A}'..='\u{1D550}' => No,
+ '\u{1D552}'..='\u{1D6A5}' => No,
+ '\u{1D6A8}'..='\u{1D6C0}' => No,
'\u{1D6C1}' => No,
- '\u{1D6C2}'...'\u{1D6DA}' => No,
+ '\u{1D6C2}'..='\u{1D6DA}' => No,
'\u{1D6DB}' => No,
- '\u{1D6DC}'...'\u{1D6FA}' => No,
+ '\u{1D6DC}'..='\u{1D6FA}' => No,
'\u{1D6FB}' => No,
- '\u{1D6FC}'...'\u{1D714}' => No,
+ '\u{1D6FC}'..='\u{1D714}' => No,
'\u{1D715}' => No,
- '\u{1D716}'...'\u{1D734}' => No,
+ '\u{1D716}'..='\u{1D734}' => No,
'\u{1D735}' => No,
- '\u{1D736}'...'\u{1D74E}' => No,
+ '\u{1D736}'..='\u{1D74E}' => No,
'\u{1D74F}' => No,
- '\u{1D750}'...'\u{1D76E}' => No,
+ '\u{1D750}'..='\u{1D76E}' => No,
'\u{1D76F}' => No,
- '\u{1D770}'...'\u{1D788}' => No,
+ '\u{1D770}'..='\u{1D788}' => No,
'\u{1D789}' => No,
- '\u{1D78A}'...'\u{1D7A8}' => No,
+ '\u{1D78A}'..='\u{1D7A8}' => No,
'\u{1D7A9}' => No,
- '\u{1D7AA}'...'\u{1D7C2}' => No,
+ '\u{1D7AA}'..='\u{1D7C2}' => No,
'\u{1D7C3}' => No,
- '\u{1D7C4}'...'\u{1D7CB}' => No,
- '\u{1D7CE}'...'\u{1D7FF}' => No,
- '\u{1E030}'...'\u{1E06D}' => No,
- '\u{1EE00}'...'\u{1EE03}' => No,
- '\u{1EE05}'...'\u{1EE1F}' => No,
- '\u{1EE21}'...'\u{1EE22}' => No,
+ '\u{1D7C4}'..='\u{1D7CB}' => No,
+ '\u{1D7CE}'..='\u{1D7FF}' => No,
+ '\u{1E030}'..='\u{1E06D}' => No,
+ '\u{1EE00}'..='\u{1EE03}' => No,
+ '\u{1EE05}'..='\u{1EE1F}' => No,
+ '\u{1EE21}'..='\u{1EE22}' => No,
'\u{1EE24}' => No,
'\u{1EE27}' => No,
- '\u{1EE29}'...'\u{1EE32}' => No,
- '\u{1EE34}'...'\u{1EE37}' => No,
+ '\u{1EE29}'..='\u{1EE32}' => No,
+ '\u{1EE34}'..='\u{1EE37}' => No,
'\u{1EE39}' => No,
'\u{1EE3B}' => No,
'\u{1EE42}' => No,
'\u{1EE47}' => No,
'\u{1EE49}' => No,
'\u{1EE4B}' => No,
- '\u{1EE4D}'...'\u{1EE4F}' => No,
- '\u{1EE51}'...'\u{1EE52}' => No,
+ '\u{1EE4D}'..='\u{1EE4F}' => No,
+ '\u{1EE51}'..='\u{1EE52}' => No,
'\u{1EE54}' => No,
'\u{1EE57}' => No,
'\u{1EE59}' => No,
'\u{1EE5B}' => No,
'\u{1EE5D}' => No,
'\u{1EE5F}' => No,
- '\u{1EE61}'...'\u{1EE62}' => No,
+ '\u{1EE61}'..='\u{1EE62}' => No,
'\u{1EE64}' => No,
- '\u{1EE67}'...'\u{1EE6A}' => No,
- '\u{1EE6C}'...'\u{1EE72}' => No,
- '\u{1EE74}'...'\u{1EE77}' => No,
- '\u{1EE79}'...'\u{1EE7C}' => No,
+ '\u{1EE67}'..='\u{1EE6A}' => No,
+ '\u{1EE6C}'..='\u{1EE72}' => No,
+ '\u{1EE74}'..='\u{1EE77}' => No,
+ '\u{1EE79}'..='\u{1EE7C}' => No,
'\u{1EE7E}' => No,
- '\u{1EE80}'...'\u{1EE89}' => No,
- '\u{1EE8B}'...'\u{1EE9B}' => No,
- '\u{1EEA1}'...'\u{1EEA3}' => No,
- '\u{1EEA5}'...'\u{1EEA9}' => No,
- '\u{1EEAB}'...'\u{1EEBB}' => No,
- '\u{1F100}'...'\u{1F10A}' => No,
- '\u{1F110}'...'\u{1F12E}' => No,
- '\u{1F130}'...'\u{1F14F}' => No,
- '\u{1F16A}'...'\u{1F16C}' => No,
+ '\u{1EE80}'..='\u{1EE89}' => No,
+ '\u{1EE8B}'..='\u{1EE9B}' => No,
+ '\u{1EEA1}'..='\u{1EEA3}' => No,
+ '\u{1EEA5}'..='\u{1EEA9}' => No,
+ '\u{1EEAB}'..='\u{1EEBB}' => No,
+ '\u{1F100}'..='\u{1F10A}' => No,
+ '\u{1F110}'..='\u{1F12E}' => No,
+ '\u{1F130}'..='\u{1F14F}' => No,
+ '\u{1F16A}'..='\u{1F16C}' => No,
'\u{1F190}' => No,
- '\u{1F200}'...'\u{1F202}' => No,
- '\u{1F210}'...'\u{1F23B}' => No,
- '\u{1F240}'...'\u{1F248}' => No,
- '\u{1F250}'...'\u{1F251}' => No,
- '\u{1FBF0}'...'\u{1FBF9}' => No,
- '\u{2F800}'...'\u{2FA1D}' => No,
- '\u{0300}'...'\u{0304}' => Maybe,
- '\u{0306}'...'\u{030C}' => Maybe,
+ '\u{1F200}'..='\u{1F202}' => No,
+ '\u{1F210}'..='\u{1F23B}' => No,
+ '\u{1F240}'..='\u{1F248}' => No,
+ '\u{1F250}'..='\u{1F251}' => No,
+ '\u{1FBF0}'..='\u{1FBF9}' => No,
+ '\u{2F800}'..='\u{2FA1D}' => No,
+ '\u{0300}'..='\u{0304}' => Maybe,
+ '\u{0306}'..='\u{030C}' => Maybe,
'\u{030F}' => Maybe,
'\u{0311}' => Maybe,
- '\u{0313}'...'\u{0314}' => Maybe,
+ '\u{0313}'..='\u{0314}' => Maybe,
'\u{031B}' => Maybe,
- '\u{0323}'...'\u{0328}' => Maybe,
- '\u{032D}'...'\u{032E}' => Maybe,
- '\u{0330}'...'\u{0331}' => Maybe,
+ '\u{0323}'..='\u{0328}' => Maybe,
+ '\u{032D}'..='\u{032E}' => Maybe,
+ '\u{0330}'..='\u{0331}' => Maybe,
'\u{0338}' => Maybe,
'\u{0342}' => Maybe,
'\u{0345}' => Maybe,
- '\u{0653}'...'\u{0655}' => Maybe,
+ '\u{0653}'..='\u{0655}' => Maybe,
'\u{093C}' => Maybe,
'\u{09BE}' => Maybe,
'\u{09D7}' => Maybe,
@@ -34828,118 +21703,124 @@
'\u{0BD7}' => Maybe,
'\u{0C56}' => Maybe,
'\u{0CC2}' => Maybe,
- '\u{0CD5}'...'\u{0CD6}' => Maybe,
+ '\u{0CD5}'..='\u{0CD6}' => Maybe,
'\u{0D3E}' => Maybe,
'\u{0D57}' => Maybe,
'\u{0DCA}' => Maybe,
'\u{0DCF}' => Maybe,
'\u{0DDF}' => Maybe,
'\u{102E}' => Maybe,
- '\u{1161}'...'\u{1175}' => Maybe,
- '\u{11A8}'...'\u{11C2}' => Maybe,
+ '\u{1161}'..='\u{1175}' => Maybe,
+ '\u{11A8}'..='\u{11C2}' => Maybe,
'\u{1B35}' => Maybe,
- '\u{3099}'...'\u{309A}' => Maybe,
+ '\u{3099}'..='\u{309A}' => Maybe,
'\u{110BA}' => Maybe,
'\u{11127}' => Maybe,
'\u{1133E}' => Maybe,
'\u{11357}' => Maybe,
+ '\u{113B8}' => Maybe,
+ '\u{113BB}' => Maybe,
+ '\u{113C2}' => Maybe,
+ '\u{113C5}' => Maybe,
+ '\u{113C7}'..='\u{113C9}' => Maybe,
'\u{114B0}' => Maybe,
'\u{114BA}' => Maybe,
'\u{114BD}' => Maybe,
'\u{115AF}' => Maybe,
'\u{11930}' => Maybe,
+ '\u{1611E}'..='\u{16129}' => Maybe,
+ '\u{16D67}'..='\u{16D68}' => Maybe,
_ => Yes,
}
}
-
#[inline]
#[allow(ellipsis_inclusive_range_patterns)]
pub fn qc_nfd(c: char) -> IsNormalized {
match c {
- '\u{00C0}'...'\u{00C5}' => No,
- '\u{00C7}'...'\u{00CF}' => No,
- '\u{00D1}'...'\u{00D6}' => No,
- '\u{00D9}'...'\u{00DD}' => No,
- '\u{00E0}'...'\u{00E5}' => No,
- '\u{00E7}'...'\u{00EF}' => No,
- '\u{00F1}'...'\u{00F6}' => No,
- '\u{00F9}'...'\u{00FD}' => No,
- '\u{00FF}'...'\u{010F}' => No,
- '\u{0112}'...'\u{0125}' => No,
- '\u{0128}'...'\u{0130}' => No,
- '\u{0134}'...'\u{0137}' => No,
- '\u{0139}'...'\u{013E}' => No,
- '\u{0143}'...'\u{0148}' => No,
- '\u{014C}'...'\u{0151}' => No,
- '\u{0154}'...'\u{0165}' => No,
- '\u{0168}'...'\u{017E}' => No,
- '\u{01A0}'...'\u{01A1}' => No,
- '\u{01AF}'...'\u{01B0}' => No,
- '\u{01CD}'...'\u{01DC}' => No,
- '\u{01DE}'...'\u{01E3}' => No,
- '\u{01E6}'...'\u{01F0}' => No,
- '\u{01F4}'...'\u{01F5}' => No,
- '\u{01F8}'...'\u{021B}' => No,
- '\u{021E}'...'\u{021F}' => No,
- '\u{0226}'...'\u{0233}' => No,
- '\u{0340}'...'\u{0341}' => No,
- '\u{0343}'...'\u{0344}' => No,
+ '\u{00C0}'..='\u{00C5}' => No,
+ '\u{00C7}'..='\u{00CF}' => No,
+ '\u{00D1}'..='\u{00D6}' => No,
+ '\u{00D9}'..='\u{00DD}' => No,
+ '\u{00E0}'..='\u{00E5}' => No,
+ '\u{00E7}'..='\u{00EF}' => No,
+ '\u{00F1}'..='\u{00F6}' => No,
+ '\u{00F9}'..='\u{00FD}' => No,
+ '\u{00FF}'..='\u{010F}' => No,
+ '\u{0112}'..='\u{0125}' => No,
+ '\u{0128}'..='\u{0130}' => No,
+ '\u{0134}'..='\u{0137}' => No,
+ '\u{0139}'..='\u{013E}' => No,
+ '\u{0143}'..='\u{0148}' => No,
+ '\u{014C}'..='\u{0151}' => No,
+ '\u{0154}'..='\u{0165}' => No,
+ '\u{0168}'..='\u{017E}' => No,
+ '\u{01A0}'..='\u{01A1}' => No,
+ '\u{01AF}'..='\u{01B0}' => No,
+ '\u{01CD}'..='\u{01DC}' => No,
+ '\u{01DE}'..='\u{01E3}' => No,
+ '\u{01E6}'..='\u{01F0}' => No,
+ '\u{01F4}'..='\u{01F5}' => No,
+ '\u{01F8}'..='\u{021B}' => No,
+ '\u{021E}'..='\u{021F}' => No,
+ '\u{0226}'..='\u{0233}' => No,
+ '\u{0340}'..='\u{0341}' => No,
+ '\u{0343}'..='\u{0344}' => No,
'\u{0374}' => No,
'\u{037E}' => No,
'\u{0385}' => No,
'\u{0386}' => No,
'\u{0387}' => No,
- '\u{0388}'...'\u{038A}' => No,
+ '\u{0388}'..='\u{038A}' => No,
'\u{038C}' => No,
- '\u{038E}'...'\u{0390}' => No,
- '\u{03AA}'...'\u{03B0}' => No,
- '\u{03CA}'...'\u{03CE}' => No,
- '\u{03D3}'...'\u{03D4}' => No,
- '\u{0400}'...'\u{0401}' => No,
+ '\u{038E}'..='\u{0390}' => No,
+ '\u{03AA}'..='\u{03B0}' => No,
+ '\u{03CA}'..='\u{03CE}' => No,
+ '\u{03D3}'..='\u{03D4}' => No,
+ '\u{0400}'..='\u{0401}' => No,
'\u{0403}' => No,
'\u{0407}' => No,
- '\u{040C}'...'\u{040E}' => No,
+ '\u{040C}'..='\u{040E}' => No,
'\u{0419}' => No,
'\u{0439}' => No,
- '\u{0450}'...'\u{0451}' => No,
+ '\u{0450}'..='\u{0451}' => No,
'\u{0453}' => No,
'\u{0457}' => No,
- '\u{045C}'...'\u{045E}' => No,
- '\u{0476}'...'\u{0477}' => No,
- '\u{04C1}'...'\u{04C2}' => No,
- '\u{04D0}'...'\u{04D3}' => No,
- '\u{04D6}'...'\u{04D7}' => No,
- '\u{04DA}'...'\u{04DF}' => No,
- '\u{04E2}'...'\u{04E7}' => No,
- '\u{04EA}'...'\u{04F5}' => No,
- '\u{04F8}'...'\u{04F9}' => No,
- '\u{0622}'...'\u{0626}' => No,
+ '\u{045C}'..='\u{045E}' => No,
+ '\u{0476}'..='\u{0477}' => No,
+ '\u{04C1}'..='\u{04C2}' => No,
+ '\u{04D0}'..='\u{04D3}' => No,
+ '\u{04D6}'..='\u{04D7}' => No,
+ '\u{04DA}'..='\u{04DF}' => No,
+ '\u{04E2}'..='\u{04E7}' => No,
+ '\u{04EA}'..='\u{04F5}' => No,
+ '\u{04F8}'..='\u{04F9}' => No,
+ '\u{0622}'..='\u{0626}' => No,
'\u{06C0}' => No,
'\u{06C2}' => No,
'\u{06D3}' => No,
'\u{0929}' => No,
'\u{0931}' => No,
'\u{0934}' => No,
- '\u{0958}'...'\u{095F}' => No,
- '\u{09CB}'...'\u{09CC}' => No,
- '\u{09DC}'...'\u{09DD}' => No,
+ '\u{0958}'..='\u{095F}' => No,
+ '\u{09CB}'..='\u{09CC}' => No,
+ '\u{09DC}'..='\u{09DD}' => No,
'\u{09DF}' => No,
'\u{0A33}' => No,
'\u{0A36}' => No,
- '\u{0A59}'...'\u{0A5B}' => No,
+ '\u{0A59}'..='\u{0A5B}' => No,
'\u{0A5E}' => No,
'\u{0B48}' => No,
- '\u{0B4B}'...'\u{0B4C}' => No,
- '\u{0B5C}'...'\u{0B5D}' => No,
+ '\u{0B4B}'..='\u{0B4C}' => No,
+ '\u{0B5C}'..='\u{0B5D}' => No,
'\u{0B94}' => No,
- '\u{0BCA}'...'\u{0BCC}' => No,
+ '\u{0BCA}'..='\u{0BCC}' => No,
'\u{0C48}' => No,
'\u{0CC0}' => No,
- '\u{0CC7}'...'\u{0CC8}' => No,
- '\u{0CCA}'...'\u{0CCB}' => No,
- '\u{0D4A}'...'\u{0D4C}' => No,
+ '\u{0CC7}'..='\u{0CC8}' => No,
+ '\u{0CCA}'..='\u{0CCB}' => No,
+ '\u{0D4A}'..='\u{0D4C}' => No,
'\u{0DDA}' => No,
- '\u{0DDC}'...'\u{0DDE}' => No,
+ '\u{0DDC}'..='\u{0DDE}' => No,
'\u{0F43}' => No,
'\u{0F4D}' => No,
'\u{0F52}' => No,
@@ -34947,7 +21828,7 @@
'\u{0F5C}' => No,
'\u{0F69}' => No,
'\u{0F73}' => No,
- '\u{0F75}'...'\u{0F76}' => No,
+ '\u{0F75}'..='\u{0F76}' => No,
'\u{0F78}' => No,
'\u{0F81}' => No,
'\u{0F93}' => No,
@@ -34965,42 +21846,42 @@
'\u{1B12}' => No,
'\u{1B3B}' => No,
'\u{1B3D}' => No,
- '\u{1B40}'...'\u{1B41}' => No,
+ '\u{1B40}'..='\u{1B41}' => No,
'\u{1B43}' => No,
- '\u{1E00}'...'\u{1E99}' => No,
+ '\u{1E00}'..='\u{1E99}' => No,
'\u{1E9B}' => No,
- '\u{1EA0}'...'\u{1EF9}' => No,
- '\u{1F00}'...'\u{1F15}' => No,
- '\u{1F18}'...'\u{1F1D}' => No,
- '\u{1F20}'...'\u{1F45}' => No,
- '\u{1F48}'...'\u{1F4D}' => No,
- '\u{1F50}'...'\u{1F57}' => No,
+ '\u{1EA0}'..='\u{1EF9}' => No,
+ '\u{1F00}'..='\u{1F15}' => No,
+ '\u{1F18}'..='\u{1F1D}' => No,
+ '\u{1F20}'..='\u{1F45}' => No,
+ '\u{1F48}'..='\u{1F4D}' => No,
+ '\u{1F50}'..='\u{1F57}' => No,
'\u{1F59}' => No,
'\u{1F5B}' => No,
'\u{1F5D}' => No,
- '\u{1F5F}'...'\u{1F7D}' => No,
- '\u{1F80}'...'\u{1FB4}' => No,
- '\u{1FB6}'...'\u{1FBC}' => No,
+ '\u{1F5F}'..='\u{1F7D}' => No,
+ '\u{1F80}'..='\u{1FB4}' => No,
+ '\u{1FB6}'..='\u{1FBC}' => No,
'\u{1FBE}' => No,
'\u{1FC1}' => No,
- '\u{1FC2}'...'\u{1FC4}' => No,
- '\u{1FC6}'...'\u{1FCC}' => No,
- '\u{1FCD}'...'\u{1FCF}' => No,
- '\u{1FD0}'...'\u{1FD3}' => No,
- '\u{1FD6}'...'\u{1FDB}' => No,
- '\u{1FDD}'...'\u{1FDF}' => No,
- '\u{1FE0}'...'\u{1FEC}' => No,
- '\u{1FED}'...'\u{1FEF}' => No,
- '\u{1FF2}'...'\u{1FF4}' => No,
- '\u{1FF6}'...'\u{1FFC}' => No,
+ '\u{1FC2}'..='\u{1FC4}' => No,
+ '\u{1FC6}'..='\u{1FCC}' => No,
+ '\u{1FCD}'..='\u{1FCF}' => No,
+ '\u{1FD0}'..='\u{1FD3}' => No,
+ '\u{1FD6}'..='\u{1FDB}' => No,
+ '\u{1FDD}'..='\u{1FDF}' => No,
+ '\u{1FE0}'..='\u{1FEC}' => No,
+ '\u{1FED}'..='\u{1FEF}' => No,
+ '\u{1FF2}'..='\u{1FF4}' => No,
+ '\u{1FF6}'..='\u{1FFC}' => No,
'\u{1FFD}' => No,
- '\u{2000}'...'\u{2001}' => No,
+ '\u{2000}'..='\u{2001}' => No,
'\u{2126}' => No,
- '\u{212A}'...'\u{212B}' => No,
- '\u{219A}'...'\u{219B}' => No,
+ '\u{212A}'..='\u{212B}' => No,
+ '\u{219A}'..='\u{219B}' => No,
'\u{21AE}' => No,
'\u{21CD}' => No,
- '\u{21CE}'...'\u{21CF}' => No,
+ '\u{21CE}'..='\u{21CF}' => No,
'\u{2204}' => No,
'\u{2209}' => No,
'\u{220C}' => No,
@@ -35012,15 +21893,15 @@
'\u{2249}' => No,
'\u{2260}' => No,
'\u{2262}' => No,
- '\u{226D}'...'\u{2271}' => No,
- '\u{2274}'...'\u{2275}' => No,
- '\u{2278}'...'\u{2279}' => No,
- '\u{2280}'...'\u{2281}' => No,
- '\u{2284}'...'\u{2285}' => No,
- '\u{2288}'...'\u{2289}' => No,
- '\u{22AC}'...'\u{22AF}' => No,
- '\u{22E0}'...'\u{22E3}' => No,
- '\u{22EA}'...'\u{22ED}' => No,
+ '\u{226D}'..='\u{2271}' => No,
+ '\u{2274}'..='\u{2275}' => No,
+ '\u{2278}'..='\u{2279}' => No,
+ '\u{2280}'..='\u{2281}' => No,
+ '\u{2284}'..='\u{2285}' => No,
+ '\u{2288}'..='\u{2289}' => No,
+ '\u{22AC}'..='\u{22AF}' => No,
+ '\u{22E0}'..='\u{22E3}' => No,
+ '\u{22EA}'..='\u{22ED}' => No,
'\u{2329}' => No,
'\u{232A}' => No,
'\u{2ADC}' => No,
@@ -35039,11 +21920,11 @@
'\u{3065}' => No,
'\u{3067}' => No,
'\u{3069}' => No,
- '\u{3070}'...'\u{3071}' => No,
- '\u{3073}'...'\u{3074}' => No,
- '\u{3076}'...'\u{3077}' => No,
- '\u{3079}'...'\u{307A}' => No,
- '\u{307C}'...'\u{307D}' => No,
+ '\u{3070}'..='\u{3071}' => No,
+ '\u{3073}'..='\u{3074}' => No,
+ '\u{3076}'..='\u{3077}' => No,
+ '\u{3079}'..='\u{307A}' => No,
+ '\u{307C}'..='\u{307D}' => No,
'\u{3094}' => No,
'\u{309E}' => No,
'\u{30AC}' => No,
@@ -35061,48 +21942,57 @@
'\u{30C5}' => No,
'\u{30C7}' => No,
'\u{30C9}' => No,
- '\u{30D0}'...'\u{30D1}' => No,
- '\u{30D3}'...'\u{30D4}' => No,
- '\u{30D6}'...'\u{30D7}' => No,
- '\u{30D9}'...'\u{30DA}' => No,
- '\u{30DC}'...'\u{30DD}' => No,
+ '\u{30D0}'..='\u{30D1}' => No,
+ '\u{30D3}'..='\u{30D4}' => No,
+ '\u{30D6}'..='\u{30D7}' => No,
+ '\u{30D9}'..='\u{30DA}' => No,
+ '\u{30DC}'..='\u{30DD}' => No,
'\u{30F4}' => No,
- '\u{30F7}'...'\u{30FA}' => No,
+ '\u{30F7}'..='\u{30FA}' => No,
'\u{30FE}' => No,
- '\u{AC00}'...'\u{D7A3}' => No,
- '\u{F900}'...'\u{FA0D}' => No,
+ '\u{AC00}'..='\u{D7A3}' => No,
+ '\u{F900}'..='\u{FA0D}' => No,
'\u{FA10}' => No,
'\u{FA12}' => No,
- '\u{FA15}'...'\u{FA1E}' => No,
+ '\u{FA15}'..='\u{FA1E}' => No,
'\u{FA20}' => No,
'\u{FA22}' => No,
- '\u{FA25}'...'\u{FA26}' => No,
- '\u{FA2A}'...'\u{FA6D}' => No,
- '\u{FA70}'...'\u{FAD9}' => No,
+ '\u{FA25}'..='\u{FA26}' => No,
+ '\u{FA2A}'..='\u{FA6D}' => No,
+ '\u{FA70}'..='\u{FAD9}' => No,
'\u{FB1D}' => No,
'\u{FB1F}' => No,
- '\u{FB2A}'...'\u{FB36}' => No,
- '\u{FB38}'...'\u{FB3C}' => No,
+ '\u{FB2A}'..='\u{FB36}' => No,
+ '\u{FB38}'..='\u{FB3C}' => No,
'\u{FB3E}' => No,
- '\u{FB40}'...'\u{FB41}' => No,
- '\u{FB43}'...'\u{FB44}' => No,
- '\u{FB46}'...'\u{FB4E}' => No,
+ '\u{FB40}'..='\u{FB41}' => No,
+ '\u{FB43}'..='\u{FB44}' => No,
+ '\u{FB46}'..='\u{FB4E}' => No,
+ '\u{105C9}' => No,
+ '\u{105E4}' => No,
'\u{1109A}' => No,
'\u{1109C}' => No,
'\u{110AB}' => No,
- '\u{1112E}'...'\u{1112F}' => No,
- '\u{1134B}'...'\u{1134C}' => No,
- '\u{114BB}'...'\u{114BC}' => No,
+ '\u{1112E}'..='\u{1112F}' => No,
+ '\u{1134B}'..='\u{1134C}' => No,
+ '\u{11383}' => No,
+ '\u{11385}' => No,
+ '\u{1138E}' => No,
+ '\u{11391}' => No,
+ '\u{113C5}' => No,
+ '\u{113C7}'..='\u{113C8}' => No,
+ '\u{114BB}'..='\u{114BC}' => No,
'\u{114BE}' => No,
- '\u{115BA}'...'\u{115BB}' => No,
+ '\u{115BA}'..='\u{115BB}' => No,
'\u{11938}' => No,
- '\u{1D15E}'...'\u{1D164}' => No,
- '\u{1D1BB}'...'\u{1D1C0}' => No,
- '\u{2F800}'...'\u{2FA1D}' => No,
+ '\u{16121}'..='\u{16128}' => No,
+ '\u{16D68}'..='\u{16D6A}' => No,
+ '\u{1D15E}'..='\u{1D164}' => No,
+ '\u{1D1BB}'..='\u{1D1C0}' => No,
+ '\u{2F800}'..='\u{2FA1D}' => No,
_ => Yes,
}
}
-
#[inline]
#[allow(ellipsis_inclusive_range_patterns)]
pub fn qc_nfkd(c: char) -> IsNormalized {
@@ -35111,108 +22001,108 @@
'\u{00A8}' => No,
'\u{00AA}' => No,
'\u{00AF}' => No,
- '\u{00B2}'...'\u{00B3}' => No,
+ '\u{00B2}'..='\u{00B3}' => No,
'\u{00B4}' => No,
'\u{00B5}' => No,
'\u{00B8}' => No,
'\u{00B9}' => No,
'\u{00BA}' => No,
- '\u{00BC}'...'\u{00BE}' => No,
- '\u{00C0}'...'\u{00C5}' => No,
- '\u{00C7}'...'\u{00CF}' => No,
- '\u{00D1}'...'\u{00D6}' => No,
- '\u{00D9}'...'\u{00DD}' => No,
- '\u{00E0}'...'\u{00E5}' => No,
- '\u{00E7}'...'\u{00EF}' => No,
- '\u{00F1}'...'\u{00F6}' => No,
- '\u{00F9}'...'\u{00FD}' => No,
- '\u{00FF}'...'\u{010F}' => No,
- '\u{0112}'...'\u{0125}' => No,
- '\u{0128}'...'\u{0130}' => No,
- '\u{0132}'...'\u{0137}' => No,
- '\u{0139}'...'\u{0140}' => No,
- '\u{0143}'...'\u{0149}' => No,
- '\u{014C}'...'\u{0151}' => No,
- '\u{0154}'...'\u{0165}' => No,
- '\u{0168}'...'\u{017F}' => No,
- '\u{01A0}'...'\u{01A1}' => No,
- '\u{01AF}'...'\u{01B0}' => No,
- '\u{01C4}'...'\u{01DC}' => No,
- '\u{01DE}'...'\u{01E3}' => No,
- '\u{01E6}'...'\u{01F5}' => No,
- '\u{01F8}'...'\u{021B}' => No,
- '\u{021E}'...'\u{021F}' => No,
- '\u{0226}'...'\u{0233}' => No,
- '\u{02B0}'...'\u{02B8}' => No,
- '\u{02D8}'...'\u{02DD}' => No,
- '\u{02E0}'...'\u{02E4}' => No,
- '\u{0340}'...'\u{0341}' => No,
- '\u{0343}'...'\u{0344}' => No,
+ '\u{00BC}'..='\u{00BE}' => No,
+ '\u{00C0}'..='\u{00C5}' => No,
+ '\u{00C7}'..='\u{00CF}' => No,
+ '\u{00D1}'..='\u{00D6}' => No,
+ '\u{00D9}'..='\u{00DD}' => No,
+ '\u{00E0}'..='\u{00E5}' => No,
+ '\u{00E7}'..='\u{00EF}' => No,
+ '\u{00F1}'..='\u{00F6}' => No,
+ '\u{00F9}'..='\u{00FD}' => No,
+ '\u{00FF}'..='\u{010F}' => No,
+ '\u{0112}'..='\u{0125}' => No,
+ '\u{0128}'..='\u{0130}' => No,
+ '\u{0132}'..='\u{0137}' => No,
+ '\u{0139}'..='\u{0140}' => No,
+ '\u{0143}'..='\u{0149}' => No,
+ '\u{014C}'..='\u{0151}' => No,
+ '\u{0154}'..='\u{0165}' => No,
+ '\u{0168}'..='\u{017F}' => No,
+ '\u{01A0}'..='\u{01A1}' => No,
+ '\u{01AF}'..='\u{01B0}' => No,
+ '\u{01C4}'..='\u{01DC}' => No,
+ '\u{01DE}'..='\u{01E3}' => No,
+ '\u{01E6}'..='\u{01F5}' => No,
+ '\u{01F8}'..='\u{021B}' => No,
+ '\u{021E}'..='\u{021F}' => No,
+ '\u{0226}'..='\u{0233}' => No,
+ '\u{02B0}'..='\u{02B8}' => No,
+ '\u{02D8}'..='\u{02DD}' => No,
+ '\u{02E0}'..='\u{02E4}' => No,
+ '\u{0340}'..='\u{0341}' => No,
+ '\u{0343}'..='\u{0344}' => No,
'\u{0374}' => No,
'\u{037A}' => No,
'\u{037E}' => No,
- '\u{0384}'...'\u{0385}' => No,
+ '\u{0384}'..='\u{0385}' => No,
'\u{0386}' => No,
'\u{0387}' => No,
- '\u{0388}'...'\u{038A}' => No,
+ '\u{0388}'..='\u{038A}' => No,
'\u{038C}' => No,
- '\u{038E}'...'\u{0390}' => No,
- '\u{03AA}'...'\u{03B0}' => No,
- '\u{03CA}'...'\u{03CE}' => No,
- '\u{03D0}'...'\u{03D6}' => No,
- '\u{03F0}'...'\u{03F2}' => No,
- '\u{03F4}'...'\u{03F5}' => No,
+ '\u{038E}'..='\u{0390}' => No,
+ '\u{03AA}'..='\u{03B0}' => No,
+ '\u{03CA}'..='\u{03CE}' => No,
+ '\u{03D0}'..='\u{03D6}' => No,
+ '\u{03F0}'..='\u{03F2}' => No,
+ '\u{03F4}'..='\u{03F5}' => No,
'\u{03F9}' => No,
- '\u{0400}'...'\u{0401}' => No,
+ '\u{0400}'..='\u{0401}' => No,
'\u{0403}' => No,
'\u{0407}' => No,
- '\u{040C}'...'\u{040E}' => No,
+ '\u{040C}'..='\u{040E}' => No,
'\u{0419}' => No,
'\u{0439}' => No,
- '\u{0450}'...'\u{0451}' => No,
+ '\u{0450}'..='\u{0451}' => No,
'\u{0453}' => No,
'\u{0457}' => No,
- '\u{045C}'...'\u{045E}' => No,
- '\u{0476}'...'\u{0477}' => No,
- '\u{04C1}'...'\u{04C2}' => No,
- '\u{04D0}'...'\u{04D3}' => No,
- '\u{04D6}'...'\u{04D7}' => No,
- '\u{04DA}'...'\u{04DF}' => No,
- '\u{04E2}'...'\u{04E7}' => No,
- '\u{04EA}'...'\u{04F5}' => No,
- '\u{04F8}'...'\u{04F9}' => No,
+ '\u{045C}'..='\u{045E}' => No,
+ '\u{0476}'..='\u{0477}' => No,
+ '\u{04C1}'..='\u{04C2}' => No,
+ '\u{04D0}'..='\u{04D3}' => No,
+ '\u{04D6}'..='\u{04D7}' => No,
+ '\u{04DA}'..='\u{04DF}' => No,
+ '\u{04E2}'..='\u{04E7}' => No,
+ '\u{04EA}'..='\u{04F5}' => No,
+ '\u{04F8}'..='\u{04F9}' => No,
'\u{0587}' => No,
- '\u{0622}'...'\u{0626}' => No,
- '\u{0675}'...'\u{0678}' => No,
+ '\u{0622}'..='\u{0626}' => No,
+ '\u{0675}'..='\u{0678}' => No,
'\u{06C0}' => No,
'\u{06C2}' => No,
'\u{06D3}' => No,
'\u{0929}' => No,
'\u{0931}' => No,
'\u{0934}' => No,
- '\u{0958}'...'\u{095F}' => No,
- '\u{09CB}'...'\u{09CC}' => No,
- '\u{09DC}'...'\u{09DD}' => No,
+ '\u{0958}'..='\u{095F}' => No,
+ '\u{09CB}'..='\u{09CC}' => No,
+ '\u{09DC}'..='\u{09DD}' => No,
'\u{09DF}' => No,
'\u{0A33}' => No,
'\u{0A36}' => No,
- '\u{0A59}'...'\u{0A5B}' => No,
+ '\u{0A59}'..='\u{0A5B}' => No,
'\u{0A5E}' => No,
'\u{0B48}' => No,
- '\u{0B4B}'...'\u{0B4C}' => No,
- '\u{0B5C}'...'\u{0B5D}' => No,
+ '\u{0B4B}'..='\u{0B4C}' => No,
+ '\u{0B5C}'..='\u{0B5D}' => No,
'\u{0B94}' => No,
- '\u{0BCA}'...'\u{0BCC}' => No,
+ '\u{0BCA}'..='\u{0BCC}' => No,
'\u{0C48}' => No,
'\u{0CC0}' => No,
- '\u{0CC7}'...'\u{0CC8}' => No,
- '\u{0CCA}'...'\u{0CCB}' => No,
- '\u{0D4A}'...'\u{0D4C}' => No,
+ '\u{0CC7}'..='\u{0CC8}' => No,
+ '\u{0CCA}'..='\u{0CCB}' => No,
+ '\u{0D4A}'..='\u{0D4C}' => No,
'\u{0DDA}' => No,
- '\u{0DDC}'...'\u{0DDE}' => No,
+ '\u{0DDC}'..='\u{0DDE}' => No,
'\u{0E33}' => No,
'\u{0EB3}' => No,
- '\u{0EDC}'...'\u{0EDD}' => No,
+ '\u{0EDC}'..='\u{0EDD}' => No,
'\u{0F0C}' => No,
'\u{0F43}' => No,
'\u{0F4D}' => No,
@@ -35221,7 +22111,7 @@
'\u{0F5C}' => No,
'\u{0F69}' => No,
'\u{0F73}' => No,
- '\u{0F75}'...'\u{0F79}' => No,
+ '\u{0F75}'..='\u{0F79}' => No,
'\u{0F81}' => No,
'\u{0F93}' => No,
'\u{0F9D}' => No,
@@ -35239,134 +22129,134 @@
'\u{1B12}' => No,
'\u{1B3B}' => No,
'\u{1B3D}' => No,
- '\u{1B40}'...'\u{1B41}' => No,
+ '\u{1B40}'..='\u{1B41}' => No,
'\u{1B43}' => No,
- '\u{1D2C}'...'\u{1D2E}' => No,
- '\u{1D30}'...'\u{1D3A}' => No,
- '\u{1D3C}'...'\u{1D4D}' => No,
- '\u{1D4F}'...'\u{1D6A}' => No,
+ '\u{1D2C}'..='\u{1D2E}' => No,
+ '\u{1D30}'..='\u{1D3A}' => No,
+ '\u{1D3C}'..='\u{1D4D}' => No,
+ '\u{1D4F}'..='\u{1D6A}' => No,
'\u{1D78}' => No,
- '\u{1D9B}'...'\u{1DBF}' => No,
- '\u{1E00}'...'\u{1E9B}' => No,
- '\u{1EA0}'...'\u{1EF9}' => No,
- '\u{1F00}'...'\u{1F15}' => No,
- '\u{1F18}'...'\u{1F1D}' => No,
- '\u{1F20}'...'\u{1F45}' => No,
- '\u{1F48}'...'\u{1F4D}' => No,
- '\u{1F50}'...'\u{1F57}' => No,
+ '\u{1D9B}'..='\u{1DBF}' => No,
+ '\u{1E00}'..='\u{1E9B}' => No,
+ '\u{1EA0}'..='\u{1EF9}' => No,
+ '\u{1F00}'..='\u{1F15}' => No,
+ '\u{1F18}'..='\u{1F1D}' => No,
+ '\u{1F20}'..='\u{1F45}' => No,
+ '\u{1F48}'..='\u{1F4D}' => No,
+ '\u{1F50}'..='\u{1F57}' => No,
'\u{1F59}' => No,
'\u{1F5B}' => No,
'\u{1F5D}' => No,
- '\u{1F5F}'...'\u{1F7D}' => No,
- '\u{1F80}'...'\u{1FB4}' => No,
- '\u{1FB6}'...'\u{1FBC}' => No,
+ '\u{1F5F}'..='\u{1F7D}' => No,
+ '\u{1F80}'..='\u{1FB4}' => No,
+ '\u{1FB6}'..='\u{1FBC}' => No,
'\u{1FBD}' => No,
'\u{1FBE}' => No,
- '\u{1FBF}'...'\u{1FC1}' => No,
- '\u{1FC2}'...'\u{1FC4}' => No,
- '\u{1FC6}'...'\u{1FCC}' => No,
- '\u{1FCD}'...'\u{1FCF}' => No,
- '\u{1FD0}'...'\u{1FD3}' => No,
- '\u{1FD6}'...'\u{1FDB}' => No,
- '\u{1FDD}'...'\u{1FDF}' => No,
- '\u{1FE0}'...'\u{1FEC}' => No,
- '\u{1FED}'...'\u{1FEF}' => No,
- '\u{1FF2}'...'\u{1FF4}' => No,
- '\u{1FF6}'...'\u{1FFC}' => No,
- '\u{1FFD}'...'\u{1FFE}' => No,
- '\u{2000}'...'\u{200A}' => No,
+ '\u{1FBF}'..='\u{1FC1}' => No,
+ '\u{1FC2}'..='\u{1FC4}' => No,
+ '\u{1FC6}'..='\u{1FCC}' => No,
+ '\u{1FCD}'..='\u{1FCF}' => No,
+ '\u{1FD0}'..='\u{1FD3}' => No,
+ '\u{1FD6}'..='\u{1FDB}' => No,
+ '\u{1FDD}'..='\u{1FDF}' => No,
+ '\u{1FE0}'..='\u{1FEC}' => No,
+ '\u{1FED}'..='\u{1FEF}' => No,
+ '\u{1FF2}'..='\u{1FF4}' => No,
+ '\u{1FF6}'..='\u{1FFC}' => No,
+ '\u{1FFD}'..='\u{1FFE}' => No,
+ '\u{2000}'..='\u{200A}' => No,
'\u{2011}' => No,
'\u{2017}' => No,
- '\u{2024}'...'\u{2026}' => No,
+ '\u{2024}'..='\u{2026}' => No,
'\u{202F}' => No,
- '\u{2033}'...'\u{2034}' => No,
- '\u{2036}'...'\u{2037}' => No,
+ '\u{2033}'..='\u{2034}' => No,
+ '\u{2036}'..='\u{2037}' => No,
'\u{203C}' => No,
'\u{203E}' => No,
- '\u{2047}'...'\u{2049}' => No,
+ '\u{2047}'..='\u{2049}' => No,
'\u{2057}' => No,
'\u{205F}' => No,
'\u{2070}' => No,
'\u{2071}' => No,
- '\u{2074}'...'\u{2079}' => No,
- '\u{207A}'...'\u{207C}' => No,
+ '\u{2074}'..='\u{2079}' => No,
+ '\u{207A}'..='\u{207C}' => No,
'\u{207D}' => No,
'\u{207E}' => No,
'\u{207F}' => No,
- '\u{2080}'...'\u{2089}' => No,
- '\u{208A}'...'\u{208C}' => No,
+ '\u{2080}'..='\u{2089}' => No,
+ '\u{208A}'..='\u{208C}' => No,
'\u{208D}' => No,
'\u{208E}' => No,
- '\u{2090}'...'\u{209C}' => No,
+ '\u{2090}'..='\u{209C}' => No,
'\u{20A8}' => No,
- '\u{2100}'...'\u{2101}' => No,
+ '\u{2100}'..='\u{2101}' => No,
'\u{2102}' => No,
'\u{2103}' => No,
- '\u{2105}'...'\u{2106}' => No,
+ '\u{2105}'..='\u{2106}' => No,
'\u{2107}' => No,
'\u{2109}' => No,
- '\u{210A}'...'\u{2113}' => No,
+ '\u{210A}'..='\u{2113}' => No,
'\u{2115}' => No,
'\u{2116}' => No,
- '\u{2119}'...'\u{211D}' => No,
- '\u{2120}'...'\u{2122}' => No,
+ '\u{2119}'..='\u{211D}' => No,
+ '\u{2120}'..='\u{2122}' => No,
'\u{2124}' => No,
'\u{2126}' => No,
'\u{2128}' => No,
- '\u{212A}'...'\u{212D}' => No,
- '\u{212F}'...'\u{2131}' => No,
- '\u{2133}'...'\u{2134}' => No,
- '\u{2135}'...'\u{2138}' => No,
+ '\u{212A}'..='\u{212D}' => No,
+ '\u{212F}'..='\u{2131}' => No,
+ '\u{2133}'..='\u{2134}' => No,
+ '\u{2135}'..='\u{2138}' => No,
'\u{2139}' => No,
'\u{213B}' => No,
- '\u{213C}'...'\u{213F}' => No,
+ '\u{213C}'..='\u{213F}' => No,
'\u{2140}' => No,
- '\u{2145}'...'\u{2149}' => No,
- '\u{2150}'...'\u{215F}' => No,
- '\u{2160}'...'\u{217F}' => No,
+ '\u{2145}'..='\u{2149}' => No,
+ '\u{2150}'..='\u{215F}' => No,
+ '\u{2160}'..='\u{217F}' => No,
'\u{2189}' => No,
- '\u{219A}'...'\u{219B}' => No,
+ '\u{219A}'..='\u{219B}' => No,
'\u{21AE}' => No,
'\u{21CD}' => No,
- '\u{21CE}'...'\u{21CF}' => No,
+ '\u{21CE}'..='\u{21CF}' => No,
'\u{2204}' => No,
'\u{2209}' => No,
'\u{220C}' => No,
'\u{2224}' => No,
'\u{2226}' => No,
- '\u{222C}'...'\u{222D}' => No,
- '\u{222F}'...'\u{2230}' => No,
+ '\u{222C}'..='\u{222D}' => No,
+ '\u{222F}'..='\u{2230}' => No,
'\u{2241}' => No,
'\u{2244}' => No,
'\u{2247}' => No,
'\u{2249}' => No,
'\u{2260}' => No,
'\u{2262}' => No,
- '\u{226D}'...'\u{2271}' => No,
- '\u{2274}'...'\u{2275}' => No,
- '\u{2278}'...'\u{2279}' => No,
- '\u{2280}'...'\u{2281}' => No,
- '\u{2284}'...'\u{2285}' => No,
- '\u{2288}'...'\u{2289}' => No,
- '\u{22AC}'...'\u{22AF}' => No,
- '\u{22E0}'...'\u{22E3}' => No,
- '\u{22EA}'...'\u{22ED}' => No,
+ '\u{226D}'..='\u{2271}' => No,
+ '\u{2274}'..='\u{2275}' => No,
+ '\u{2278}'..='\u{2279}' => No,
+ '\u{2280}'..='\u{2281}' => No,
+ '\u{2284}'..='\u{2285}' => No,
+ '\u{2288}'..='\u{2289}' => No,
+ '\u{22AC}'..='\u{22AF}' => No,
+ '\u{22E0}'..='\u{22E3}' => No,
+ '\u{22EA}'..='\u{22ED}' => No,
'\u{2329}' => No,
'\u{232A}' => No,
- '\u{2460}'...'\u{249B}' => No,
- '\u{249C}'...'\u{24E9}' => No,
+ '\u{2460}'..='\u{249B}' => No,
+ '\u{249C}'..='\u{24E9}' => No,
'\u{24EA}' => No,
'\u{2A0C}' => No,
- '\u{2A74}'...'\u{2A76}' => No,
+ '\u{2A74}'..='\u{2A76}' => No,
'\u{2ADC}' => No,
- '\u{2C7C}'...'\u{2C7D}' => No,
+ '\u{2C7C}'..='\u{2C7D}' => No,
'\u{2D6F}' => No,
'\u{2E9F}' => No,
'\u{2EF3}' => No,
- '\u{2F00}'...'\u{2FD5}' => No,
+ '\u{2F00}'..='\u{2FD5}' => No,
'\u{3000}' => No,
'\u{3036}' => No,
- '\u{3038}'...'\u{303A}' => No,
+ '\u{3038}'..='\u{303A}' => No,
'\u{304C}' => No,
'\u{304E}' => No,
'\u{3050}' => No,
@@ -35382,13 +22272,13 @@
'\u{3065}' => No,
'\u{3067}' => No,
'\u{3069}' => No,
- '\u{3070}'...'\u{3071}' => No,
- '\u{3073}'...'\u{3074}' => No,
- '\u{3076}'...'\u{3077}' => No,
- '\u{3079}'...'\u{307A}' => No,
- '\u{307C}'...'\u{307D}' => No,
+ '\u{3070}'..='\u{3071}' => No,
+ '\u{3073}'..='\u{3074}' => No,
+ '\u{3076}'..='\u{3077}' => No,
+ '\u{3079}'..='\u{307A}' => No,
+ '\u{307C}'..='\u{307D}' => No,
'\u{3094}' => No,
- '\u{309B}'...'\u{309C}' => No,
+ '\u{309B}'..='\u{309C}' => No,
'\u{309E}' => No,
'\u{309F}' => No,
'\u{30AC}' => No,
@@ -35406,67 +22296,67 @@
'\u{30C5}' => No,
'\u{30C7}' => No,
'\u{30C9}' => No,
- '\u{30D0}'...'\u{30D1}' => No,
- '\u{30D3}'...'\u{30D4}' => No,
- '\u{30D6}'...'\u{30D7}' => No,
- '\u{30D9}'...'\u{30DA}' => No,
- '\u{30DC}'...'\u{30DD}' => No,
+ '\u{30D0}'..='\u{30D1}' => No,
+ '\u{30D3}'..='\u{30D4}' => No,
+ '\u{30D6}'..='\u{30D7}' => No,
+ '\u{30D9}'..='\u{30DA}' => No,
+ '\u{30DC}'..='\u{30DD}' => No,
'\u{30F4}' => No,
- '\u{30F7}'...'\u{30FA}' => No,
+ '\u{30F7}'..='\u{30FA}' => No,
'\u{30FE}' => No,
'\u{30FF}' => No,
- '\u{3131}'...'\u{318E}' => No,
- '\u{3192}'...'\u{3195}' => No,
- '\u{3196}'...'\u{319F}' => No,
- '\u{3200}'...'\u{321E}' => No,
- '\u{3220}'...'\u{3229}' => No,
- '\u{322A}'...'\u{3247}' => No,
+ '\u{3131}'..='\u{318E}' => No,
+ '\u{3192}'..='\u{3195}' => No,
+ '\u{3196}'..='\u{319F}' => No,
+ '\u{3200}'..='\u{321E}' => No,
+ '\u{3220}'..='\u{3229}' => No,
+ '\u{322A}'..='\u{3247}' => No,
'\u{3250}' => No,
- '\u{3251}'...'\u{325F}' => No,
- '\u{3260}'...'\u{327E}' => No,
- '\u{3280}'...'\u{3289}' => No,
- '\u{328A}'...'\u{32B0}' => No,
- '\u{32B1}'...'\u{32BF}' => No,
- '\u{32C0}'...'\u{33FF}' => No,
- '\u{A69C}'...'\u{A69D}' => No,
+ '\u{3251}'..='\u{325F}' => No,
+ '\u{3260}'..='\u{327E}' => No,
+ '\u{3280}'..='\u{3289}' => No,
+ '\u{328A}'..='\u{32B0}' => No,
+ '\u{32B1}'..='\u{32BF}' => No,
+ '\u{32C0}'..='\u{33FF}' => No,
+ '\u{A69C}'..='\u{A69D}' => No,
'\u{A770}' => No,
- '\u{A7F2}'...'\u{A7F4}' => No,
- '\u{A7F8}'...'\u{A7F9}' => No,
- '\u{AB5C}'...'\u{AB5F}' => No,
+ '\u{A7F2}'..='\u{A7F4}' => No,
+ '\u{A7F8}'..='\u{A7F9}' => No,
+ '\u{AB5C}'..='\u{AB5F}' => No,
'\u{AB69}' => No,
- '\u{AC00}'...'\u{D7A3}' => No,
- '\u{F900}'...'\u{FA0D}' => No,
+ '\u{AC00}'..='\u{D7A3}' => No,
+ '\u{F900}'..='\u{FA0D}' => No,
'\u{FA10}' => No,
'\u{FA12}' => No,
- '\u{FA15}'...'\u{FA1E}' => No,
+ '\u{FA15}'..='\u{FA1E}' => No,
'\u{FA20}' => No,
'\u{FA22}' => No,
- '\u{FA25}'...'\u{FA26}' => No,
- '\u{FA2A}'...'\u{FA6D}' => No,
- '\u{FA70}'...'\u{FAD9}' => No,
- '\u{FB00}'...'\u{FB06}' => No,
- '\u{FB13}'...'\u{FB17}' => No,
+ '\u{FA25}'..='\u{FA26}' => No,
+ '\u{FA2A}'..='\u{FA6D}' => No,
+ '\u{FA70}'..='\u{FAD9}' => No,
+ '\u{FB00}'..='\u{FB06}' => No,
+ '\u{FB13}'..='\u{FB17}' => No,
'\u{FB1D}' => No,
- '\u{FB1F}'...'\u{FB28}' => No,
+ '\u{FB1F}'..='\u{FB28}' => No,
'\u{FB29}' => No,
- '\u{FB2A}'...'\u{FB36}' => No,
- '\u{FB38}'...'\u{FB3C}' => No,
+ '\u{FB2A}'..='\u{FB36}' => No,
+ '\u{FB38}'..='\u{FB3C}' => No,
'\u{FB3E}' => No,
- '\u{FB40}'...'\u{FB41}' => No,
- '\u{FB43}'...'\u{FB44}' => No,
- '\u{FB46}'...'\u{FBB1}' => No,
- '\u{FBD3}'...'\u{FD3D}' => No,
- '\u{FD50}'...'\u{FD8F}' => No,
- '\u{FD92}'...'\u{FDC7}' => No,
- '\u{FDF0}'...'\u{FDFB}' => No,
+ '\u{FB40}'..='\u{FB41}' => No,
+ '\u{FB43}'..='\u{FB44}' => No,
+ '\u{FB46}'..='\u{FBB1}' => No,
+ '\u{FBD3}'..='\u{FD3D}' => No,
+ '\u{FD50}'..='\u{FD8F}' => No,
+ '\u{FD92}'..='\u{FDC7}' => No,
+ '\u{FDF0}'..='\u{FDFB}' => No,
'\u{FDFC}' => No,
- '\u{FE10}'...'\u{FE16}' => No,
+ '\u{FE10}'..='\u{FE16}' => No,
'\u{FE17}' => No,
'\u{FE18}' => No,
'\u{FE19}' => No,
'\u{FE30}' => No,
- '\u{FE31}'...'\u{FE32}' => No,
- '\u{FE33}'...'\u{FE34}' => No,
+ '\u{FE31}'..='\u{FE32}' => No,
+ '\u{FE33}'..='\u{FE34}' => No,
'\u{FE35}' => No,
'\u{FE36}' => No,
'\u{FE37}' => No,
@@ -35485,10 +22375,10 @@
'\u{FE44}' => No,
'\u{FE47}' => No,
'\u{FE48}' => No,
- '\u{FE49}'...'\u{FE4C}' => No,
- '\u{FE4D}'...'\u{FE4F}' => No,
- '\u{FE50}'...'\u{FE52}' => No,
- '\u{FE54}'...'\u{FE57}' => No,
+ '\u{FE49}'..='\u{FE4C}' => No,
+ '\u{FE4D}'..='\u{FE4F}' => No,
+ '\u{FE50}'..='\u{FE52}' => No,
+ '\u{FE54}'..='\u{FE57}' => No,
'\u{FE58}' => No,
'\u{FE59}' => No,
'\u{FE5A}' => No,
@@ -35496,38 +22386,38 @@
'\u{FE5C}' => No,
'\u{FE5D}' => No,
'\u{FE5E}' => No,
- '\u{FE5F}'...'\u{FE61}' => No,
+ '\u{FE5F}'..='\u{FE61}' => No,
'\u{FE62}' => No,
'\u{FE63}' => No,
- '\u{FE64}'...'\u{FE66}' => No,
+ '\u{FE64}'..='\u{FE66}' => No,
'\u{FE68}' => No,
'\u{FE69}' => No,
- '\u{FE6A}'...'\u{FE6B}' => No,
- '\u{FE70}'...'\u{FE72}' => No,
+ '\u{FE6A}'..='\u{FE6B}' => No,
+ '\u{FE70}'..='\u{FE72}' => No,
'\u{FE74}' => No,
- '\u{FE76}'...'\u{FEFC}' => No,
- '\u{FF01}'...'\u{FF03}' => No,
+ '\u{FE76}'..='\u{FEFC}' => No,
+ '\u{FF01}'..='\u{FF03}' => No,
'\u{FF04}' => No,
- '\u{FF05}'...'\u{FF07}' => No,
+ '\u{FF05}'..='\u{FF07}' => No,
'\u{FF08}' => No,
'\u{FF09}' => No,
'\u{FF0A}' => No,
'\u{FF0B}' => No,
'\u{FF0C}' => No,
'\u{FF0D}' => No,
- '\u{FF0E}'...'\u{FF0F}' => No,
- '\u{FF10}'...'\u{FF19}' => No,
- '\u{FF1A}'...'\u{FF1B}' => No,
- '\u{FF1C}'...'\u{FF1E}' => No,
- '\u{FF1F}'...'\u{FF20}' => No,
- '\u{FF21}'...'\u{FF3A}' => No,
+ '\u{FF0E}'..='\u{FF0F}' => No,
+ '\u{FF10}'..='\u{FF19}' => No,
+ '\u{FF1A}'..='\u{FF1B}' => No,
+ '\u{FF1C}'..='\u{FF1E}' => No,
+ '\u{FF1F}'..='\u{FF20}' => No,
+ '\u{FF21}'..='\u{FF3A}' => No,
'\u{FF3B}' => No,
'\u{FF3C}' => No,
'\u{FF3D}' => No,
'\u{FF3E}' => No,
'\u{FF3F}' => No,
'\u{FF40}' => No,
- '\u{FF41}'...'\u{FF5A}' => No,
+ '\u{FF41}'..='\u{FF5A}' => No,
'\u{FF5B}' => No,
'\u{FF5C}' => No,
'\u{FF5D}' => No,
@@ -35537,128 +22427,139 @@
'\u{FF61}' => No,
'\u{FF62}' => No,
'\u{FF63}' => No,
- '\u{FF64}'...'\u{FF65}' => No,
- '\u{FF66}'...'\u{FF6F}' => No,
+ '\u{FF64}'..='\u{FF65}' => No,
+ '\u{FF66}'..='\u{FF6F}' => No,
'\u{FF70}' => No,
- '\u{FF71}'...'\u{FF9D}' => No,
- '\u{FF9E}'...'\u{FF9F}' => No,
- '\u{FFA0}'...'\u{FFBE}' => No,
- '\u{FFC2}'...'\u{FFC7}' => No,
- '\u{FFCA}'...'\u{FFCF}' => No,
- '\u{FFD2}'...'\u{FFD7}' => No,
- '\u{FFDA}'...'\u{FFDC}' => No,
- '\u{FFE0}'...'\u{FFE1}' => No,
+ '\u{FF71}'..='\u{FF9D}' => No,
+ '\u{FF9E}'..='\u{FF9F}' => No,
+ '\u{FFA0}'..='\u{FFBE}' => No,
+ '\u{FFC2}'..='\u{FFC7}' => No,
+ '\u{FFCA}'..='\u{FFCF}' => No,
+ '\u{FFD2}'..='\u{FFD7}' => No,
+ '\u{FFDA}'..='\u{FFDC}' => No,
+ '\u{FFE0}'..='\u{FFE1}' => No,
'\u{FFE2}' => No,
'\u{FFE3}' => No,
'\u{FFE4}' => No,
- '\u{FFE5}'...'\u{FFE6}' => No,
+ '\u{FFE5}'..='\u{FFE6}' => No,
'\u{FFE8}' => No,
- '\u{FFE9}'...'\u{FFEC}' => No,
- '\u{FFED}'...'\u{FFEE}' => No,
- '\u{10781}'...'\u{10785}' => No,
- '\u{10787}'...'\u{107B0}' => No,
- '\u{107B2}'...'\u{107BA}' => No,
+ '\u{FFE9}'..='\u{FFEC}' => No,
+ '\u{FFED}'..='\u{FFEE}' => No,
+ '\u{105C9}' => No,
+ '\u{105E4}' => No,
+ '\u{10781}'..='\u{10785}' => No,
+ '\u{10787}'..='\u{107B0}' => No,
+ '\u{107B2}'..='\u{107BA}' => No,
'\u{1109A}' => No,
'\u{1109C}' => No,
'\u{110AB}' => No,
- '\u{1112E}'...'\u{1112F}' => No,
- '\u{1134B}'...'\u{1134C}' => No,
- '\u{114BB}'...'\u{114BC}' => No,
+ '\u{1112E}'..='\u{1112F}' => No,
+ '\u{1134B}'..='\u{1134C}' => No,
+ '\u{11383}' => No,
+ '\u{11385}' => No,
+ '\u{1138E}' => No,
+ '\u{11391}' => No,
+ '\u{113C5}' => No,
+ '\u{113C7}'..='\u{113C8}' => No,
+ '\u{114BB}'..='\u{114BC}' => No,
'\u{114BE}' => No,
- '\u{115BA}'...'\u{115BB}' => No,
+ '\u{115BA}'..='\u{115BB}' => No,
'\u{11938}' => No,
- '\u{1D15E}'...'\u{1D164}' => No,
- '\u{1D1BB}'...'\u{1D1C0}' => No,
- '\u{1D400}'...'\u{1D454}' => No,
- '\u{1D456}'...'\u{1D49C}' => No,
- '\u{1D49E}'...'\u{1D49F}' => No,
+ '\u{16121}'..='\u{16128}' => No,
+ '\u{16D68}'..='\u{16D6A}' => No,
+ '\u{1CCD6}'..='\u{1CCEF}' => No,
+ '\u{1CCF0}'..='\u{1CCF9}' => No,
+ '\u{1D15E}'..='\u{1D164}' => No,
+ '\u{1D1BB}'..='\u{1D1C0}' => No,
+ '\u{1D400}'..='\u{1D454}' => No,
+ '\u{1D456}'..='\u{1D49C}' => No,
+ '\u{1D49E}'..='\u{1D49F}' => No,
'\u{1D4A2}' => No,
- '\u{1D4A5}'...'\u{1D4A6}' => No,
- '\u{1D4A9}'...'\u{1D4AC}' => No,
- '\u{1D4AE}'...'\u{1D4B9}' => No,
+ '\u{1D4A5}'..='\u{1D4A6}' => No,
+ '\u{1D4A9}'..='\u{1D4AC}' => No,
+ '\u{1D4AE}'..='\u{1D4B9}' => No,
'\u{1D4BB}' => No,
- '\u{1D4BD}'...'\u{1D4C3}' => No,
- '\u{1D4C5}'...'\u{1D505}' => No,
- '\u{1D507}'...'\u{1D50A}' => No,
- '\u{1D50D}'...'\u{1D514}' => No,
- '\u{1D516}'...'\u{1D51C}' => No,
- '\u{1D51E}'...'\u{1D539}' => No,
- '\u{1D53B}'...'\u{1D53E}' => No,
- '\u{1D540}'...'\u{1D544}' => No,
+ '\u{1D4BD}'..='\u{1D4C3}' => No,
+ '\u{1D4C5}'..='\u{1D505}' => No,
+ '\u{1D507}'..='\u{1D50A}' => No,
+ '\u{1D50D}'..='\u{1D514}' => No,
+ '\u{1D516}'..='\u{1D51C}' => No,
+ '\u{1D51E}'..='\u{1D539}' => No,
+ '\u{1D53B}'..='\u{1D53E}' => No,
+ '\u{1D540}'..='\u{1D544}' => No,
'\u{1D546}' => No,
- '\u{1D54A}'...'\u{1D550}' => No,
- '\u{1D552}'...'\u{1D6A5}' => No,
- '\u{1D6A8}'...'\u{1D6C0}' => No,
+ '\u{1D54A}'..='\u{1D550}' => No,
+ '\u{1D552}'..='\u{1D6A5}' => No,
+ '\u{1D6A8}'..='\u{1D6C0}' => No,
'\u{1D6C1}' => No,
- '\u{1D6C2}'...'\u{1D6DA}' => No,
+ '\u{1D6C2}'..='\u{1D6DA}' => No,
'\u{1D6DB}' => No,
- '\u{1D6DC}'...'\u{1D6FA}' => No,
+ '\u{1D6DC}'..='\u{1D6FA}' => No,
'\u{1D6FB}' => No,
- '\u{1D6FC}'...'\u{1D714}' => No,
+ '\u{1D6FC}'..='\u{1D714}' => No,
'\u{1D715}' => No,
- '\u{1D716}'...'\u{1D734}' => No,
+ '\u{1D716}'..='\u{1D734}' => No,
'\u{1D735}' => No,
- '\u{1D736}'...'\u{1D74E}' => No,
+ '\u{1D736}'..='\u{1D74E}' => No,
'\u{1D74F}' => No,
- '\u{1D750}'...'\u{1D76E}' => No,
+ '\u{1D750}'..='\u{1D76E}' => No,
'\u{1D76F}' => No,
- '\u{1D770}'...'\u{1D788}' => No,
+ '\u{1D770}'..='\u{1D788}' => No,
'\u{1D789}' => No,
- '\u{1D78A}'...'\u{1D7A8}' => No,
+ '\u{1D78A}'..='\u{1D7A8}' => No,
'\u{1D7A9}' => No,
- '\u{1D7AA}'...'\u{1D7C2}' => No,
+ '\u{1D7AA}'..='\u{1D7C2}' => No,
'\u{1D7C3}' => No,
- '\u{1D7C4}'...'\u{1D7CB}' => No,
- '\u{1D7CE}'...'\u{1D7FF}' => No,
- '\u{1E030}'...'\u{1E06D}' => No,
- '\u{1EE00}'...'\u{1EE03}' => No,
- '\u{1EE05}'...'\u{1EE1F}' => No,
- '\u{1EE21}'...'\u{1EE22}' => No,
+ '\u{1D7C4}'..='\u{1D7CB}' => No,
+ '\u{1D7CE}'..='\u{1D7FF}' => No,
+ '\u{1E030}'..='\u{1E06D}' => No,
+ '\u{1EE00}'..='\u{1EE03}' => No,
+ '\u{1EE05}'..='\u{1EE1F}' => No,
+ '\u{1EE21}'..='\u{1EE22}' => No,
'\u{1EE24}' => No,
'\u{1EE27}' => No,
- '\u{1EE29}'...'\u{1EE32}' => No,
- '\u{1EE34}'...'\u{1EE37}' => No,
+ '\u{1EE29}'..='\u{1EE32}' => No,
+ '\u{1EE34}'..='\u{1EE37}' => No,
'\u{1EE39}' => No,
'\u{1EE3B}' => No,
'\u{1EE42}' => No,
'\u{1EE47}' => No,
'\u{1EE49}' => No,
'\u{1EE4B}' => No,
- '\u{1EE4D}'...'\u{1EE4F}' => No,
- '\u{1EE51}'...'\u{1EE52}' => No,
+ '\u{1EE4D}'..='\u{1EE4F}' => No,
+ '\u{1EE51}'..='\u{1EE52}' => No,
'\u{1EE54}' => No,
'\u{1EE57}' => No,
'\u{1EE59}' => No,
'\u{1EE5B}' => No,
'\u{1EE5D}' => No,
'\u{1EE5F}' => No,
- '\u{1EE61}'...'\u{1EE62}' => No,
+ '\u{1EE61}'..='\u{1EE62}' => No,
'\u{1EE64}' => No,
- '\u{1EE67}'...'\u{1EE6A}' => No,
- '\u{1EE6C}'...'\u{1EE72}' => No,
- '\u{1EE74}'...'\u{1EE77}' => No,
- '\u{1EE79}'...'\u{1EE7C}' => No,
+ '\u{1EE67}'..='\u{1EE6A}' => No,
+ '\u{1EE6C}'..='\u{1EE72}' => No,
+ '\u{1EE74}'..='\u{1EE77}' => No,
+ '\u{1EE79}'..='\u{1EE7C}' => No,
'\u{1EE7E}' => No,
- '\u{1EE80}'...'\u{1EE89}' => No,
- '\u{1EE8B}'...'\u{1EE9B}' => No,
- '\u{1EEA1}'...'\u{1EEA3}' => No,
- '\u{1EEA5}'...'\u{1EEA9}' => No,
- '\u{1EEAB}'...'\u{1EEBB}' => No,
- '\u{1F100}'...'\u{1F10A}' => No,
- '\u{1F110}'...'\u{1F12E}' => No,
- '\u{1F130}'...'\u{1F14F}' => No,
- '\u{1F16A}'...'\u{1F16C}' => No,
+ '\u{1EE80}'..='\u{1EE89}' => No,
+ '\u{1EE8B}'..='\u{1EE9B}' => No,
+ '\u{1EEA1}'..='\u{1EEA3}' => No,
+ '\u{1EEA5}'..='\u{1EEA9}' => No,
+ '\u{1EEAB}'..='\u{1EEBB}' => No,
+ '\u{1F100}'..='\u{1F10A}' => No,
+ '\u{1F110}'..='\u{1F12E}' => No,
+ '\u{1F130}'..='\u{1F14F}' => No,
+ '\u{1F16A}'..='\u{1F16C}' => No,
'\u{1F190}' => No,
- '\u{1F200}'...'\u{1F202}' => No,
- '\u{1F210}'...'\u{1F23B}' => No,
- '\u{1F240}'...'\u{1F248}' => No,
- '\u{1F250}'...'\u{1F251}' => No,
- '\u{1FBF0}'...'\u{1FBF9}' => No,
- '\u{2F800}'...'\u{2FA1D}' => No,
+ '\u{1F200}'..='\u{1F202}' => No,
+ '\u{1F210}'..='\u{1F23B}' => No,
+ '\u{1F240}'..='\u{1F248}' => No,
+ '\u{1F250}'..='\u{1F251}' => No,
+ '\u{1FBF0}'..='\u{1FBF9}' => No,
+ '\u{2F800}'..='\u{2FA1D}' => No,
_ => Yes,
}
}
-
#[inline]
pub fn stream_safe_leading_nonstarters(c: char) -> usize {
match c {
@@ -35676,2188 +22577,227 @@
}
pub(crate) const TRAILING_NONSTARTERS_SALT: &[u16] = &[
- 0x1bb,
- 0x0,
- 0x8,
- 0x162,
- 0x0,
- 0x5,
- 0x0,
- 0x75,
- 0x4,
- 0x0,
- 0x0,
- 0x5,
- 0x18,
- 0x2,
- 0x0,
- 0x1,
- 0x90,
- 0x0,
- 0x2,
- 0x5f,
- 0xc6,
- 0x0,
- 0x0,
- 0x20,
- 0x0,
- 0x0,
- 0x0,
- 0x6,
- 0x0,
- 0x39,
- 0x0,
- 0x0,
- 0x48,
- 0x3,
- 0x0,
- 0x95,
- 0xaf,
- 0x30,
- 0x6f,
- 0x0,
- 0x0,
- 0x4,
- 0x8,
- 0x10b,
- 0x13,
- 0x0,
- 0x2f,
- 0x16,
- 0x6d,
- 0x1,
- 0x3,
- 0xe,
- 0x0,
- 0x2c,
- 0x83,
- 0x37,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x6,
- 0x2,
- 0x46,
- 0xa,
- 0xb,
- 0x16,
- 0x4c,
- 0x0,
- 0x0,
- 0x0,
- 0xe,
- 0x1,
- 0x0,
- 0x7,
- 0xf,
- 0x26,
- 0x2,
- 0xb,
- 0xb,
- 0x3,
- 0x6,
- 0x1a,
- 0x0,
- 0x1,
- 0x6,
- 0x5,
- 0x5c,
- 0x6,
- 0x8,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x59,
- 0x9,
- 0x20,
- 0x3,
- 0x0,
- 0x4,
- 0x1a,
- 0x1,
- 0x0,
- 0xb,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x23,
- 0x2,
- 0x8,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x29,
- 0x1a,
- 0x20,
- 0x6,
- 0x15,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x13,
- 0x14,
- 0x3,
- 0x1,
- 0x14,
- 0x1,
- 0x1,
- 0x0,
- 0x3,
- 0x4,
- 0x0,
- 0x5,
- 0x8,
- 0x3,
- 0x2,
- 0x1c,
- 0x5,
- 0x1,
- 0x0,
- 0x17,
- 0x0,
- 0x0,
- 0x1b,
- 0x0,
- 0x6,
- 0x0,
- 0x3a,
- 0x0,
- 0x23,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x5,
- 0x1,
- 0x0,
- 0x0,
- 0x16,
- 0x2d,
- 0x3,
- 0x1,
- 0x4,
- 0x14,
- 0x0,
- 0x0,
- 0x16,
- 0x2,
- 0x3,
- 0x9,
- 0x0,
- 0x56,
- 0x0,
- 0xd,
- 0x0,
- 0x4,
- 0xd,
- 0x0,
- 0x2,
- 0x10,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x23,
- 0x0,
- 0x0,
- 0x0,
- 0x6,
- 0x13,
- 0x10,
- 0xd,
- 0x5c,
- 0x0,
- 0x9,
- 0xe,
- 0x5,
- 0x1,
- 0x0,
- 0xc,
- 0xd,
- 0x1,
- 0x4,
- 0x1,
- 0x2,
- 0x13,
- 0x0,
- 0x0,
- 0x1,
- 0xc,
- 0xb,
- 0x6,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0xc,
- 0x0,
- 0x7,
- 0x0,
- 0xf,
- 0x0,
- 0x5,
- 0x4,
- 0x4,
- 0x3,
- 0x2,
- 0x4,
- 0x1,
- 0x11,
- 0x11,
- 0xc,
- 0x5,
- 0x6,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x2,
- 0x2,
- 0xc,
- 0x0,
- 0x0,
- 0x11,
- 0x6,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x8,
- 0x0,
- 0x0,
- 0x2,
- 0x12,
- 0x9,
- 0x1,
- 0x0,
- 0x3,
- 0x9,
- 0x0,
- 0x0,
- 0x3,
- 0x9,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0xc,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x9,
- 0x2,
- 0x2,
- 0x8,
- 0x0,
- 0x0,
- 0x5,
- 0x13,
- 0x7,
- 0xc,
- 0x0,
- 0x9,
- 0x1,
- 0x3a,
- 0x1,
- 0x1,
- 0x9,
- 0x0,
- 0x0,
- 0x0,
- 0x9,
- 0x1,
- 0x4,
- 0x12,
- 0x0,
- 0x7,
- 0x4,
- 0x5,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x7,
- 0x1,
- 0x0,
- 0x12,
- 0x2,
- 0x1,
- 0x6,
- 0x1a,
- 0x4,
- 0x6,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x9,
- 0x3,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x5,
- 0xb,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0xb,
- 0x0,
- 0x0,
- 0x5,
- 0x0,
- 0x0,
- 0x8,
- 0x0,
- 0x5,
- 0x0,
- 0x0,
- 0x5,
- 0x4,
- 0xa,
- 0x0,
- 0x0,
- 0x9,
- 0x0,
- 0xa,
- 0x5,
- 0x8,
- 0x1,
- 0x0,
- 0x1c,
- 0x2,
- 0x1,
- 0x3,
- 0x0,
- 0x1a,
- 0x9,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x1,
- 0x3,
- 0x0,
- 0x5,
- 0x4,
- 0x4,
- 0xe,
- 0x0,
- 0x9,
- 0x1,
- 0x8,
- 0x2,
- 0x0,
- 0x0,
- 0x4,
- 0x3,
- 0x0,
- 0x4,
- 0xf,
- 0x1,
- 0x0,
- 0x2,
- 0x3,
- 0x6,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x10,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x7,
- 0x2,
- 0x5,
- 0x1,
- 0x6,
- 0x0,
- 0x4,
- 0x3,
- 0xa,
- 0x1,
- 0xa,
- 0x1,
- 0x0,
- 0x7,
- 0x2,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x2b,
- 0x8,
- 0x1,
- 0x0,
- 0xe,
- 0xa,
- 0x0,
- 0xb,
- 0x0,
- 0x0,
- 0x4,
- 0x1,
- 0xb,
- 0x6,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x1,
- 0x6,
- 0x2,
- 0x2,
- 0x0,
- 0x1,
- 0x1e,
- 0x5,
- 0xa,
- 0x5,
- 0x7,
- 0x9,
- 0x0,
- 0x0,
- 0x0,
- 0xa,
- 0x3,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x5,
- 0x4,
- 0x4,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x8,
- 0x1,
- 0x5,
- 0x6,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x4,
- 0x6,
- 0x1,
- 0x1,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x9,
- 0x1,
- 0xb,
- 0x0,
- 0x1,
- 0x0,
- 0x6,
- 0x1,
- 0x2,
- 0x3,
- 0x4,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x8,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x5,
- 0xa,
- 0x4,
- 0x1,
- 0x0,
- 0x1,
- 0x3,
- 0x1,
- 0x8,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x2,
- 0xc,
- 0x2,
- 0x2,
- 0x8,
- 0xd,
- 0x1,
- 0x1,
- 0x3,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x6,
- 0x4,
- 0x0,
- 0x0,
- 0x8,
- 0x6,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0xb,
- 0x3,
- 0x8,
- 0x5,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x7,
- 0x1,
- 0x5,
- 0x0,
- 0x0,
- 0x3,
- 0x1,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0xd,
- 0x0,
- 0x2,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x4,
- 0x8,
- 0x0,
- 0x3,
- 0x1,
- 0x0,
- 0x7,
- 0x0,
- 0x1,
- 0x2,
- 0x0,
- 0x3,
- 0x0,
- 0x7,
- 0x0,
- 0x1,
- 0x1,
- 0x9,
- 0x2,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x3,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x4,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x5,
- 0x0,
- 0x0,
- 0x2,
- 0x2,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x7,
- 0x6,
- 0x3,
- 0x0,
- 0x1,
- 0x1,
- 0x2,
- 0x7,
- 0x2,
- 0x0,
- 0x3,
- 0x0,
- 0x5,
- 0x3,
- 0x2,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x2,
- 0x3,
- 0x1,
- 0x0,
- 0x3,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x0,
- 0x6,
- 0x5,
- 0xa,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x2,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x3,
- 0x2,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x6,
- 0x1,
- 0x0,
- 0x3,
- 0x1,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x8,
- 0x0,
- 0x4,
- 0x5,
- 0x0,
- 0x0,
- 0x2,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x2,
- 0x9,
- 0x3,
- 0x0,
- 0x4,
- 0x1,
- 0x1,
- 0xc,
- 0x1,
- 0x1,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x2,
- 0x0,
- 0xa,
- 0x9,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x4,
- 0x0,
- 0x8,
- 0x0,
- 0x8,
- 0x2,
- 0x5,
- 0x6,
- 0x3,
- 0x1,
- 0x0,
- 0x6,
- 0x0,
- 0x6,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x2,
- 0x4,
- 0x0,
- 0x7,
- 0x3,
- 0x0,
- 0xb,
- 0x1,
- 0x0,
- 0x4,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x6,
- 0x6,
- 0x2,
- 0x1,
- 0x2,
- 0x1,
- 0x9,
- 0x0,
- 0x0,
- 0x0,
- 0x8,
- 0x12,
- 0x0,
- 0x9,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0x7,
- 0x0,
- 0x2,
- 0x1,
- 0x1,
- 0x3,
- 0x2,
- 0x1,
- 0x2,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x3,
- 0x1,
- 0x3,
- 0x5,
- 0x1,
- 0x0,
- 0x3,
- 0x7,
- 0x4,
- 0x1,
- 0x0,
- 0x1,
- 0x6,
- 0x3,
- 0x1,
- 0x0,
- 0x4,
- 0x2,
- 0x0,
- 0x1,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x0,
- 0x2,
- 0x0,
- 0x7,
- 0x1,
- 0x1,
- 0x0,
- 0x4,
- 0x3,
- 0x3,
- 0x4,
- 0x6,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x3,
- 0x3,
- 0x2,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0x8,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x0,
- 0x2,
- 0x3,
- 0x1,
- 0x2,
- 0x3,
- 0x3,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x3,
- 0x0,
- 0xe,
- 0x4,
- 0x5,
- 0x3,
- 0x0,
- 0x0,
- 0x3,
- 0x7,
- 0x1,
- 0x7,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x3,
- 0x3,
- 0x2,
- 0x3,
- 0x3,
- 0x5,
- 0x1,
- 0x4,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x0,
- 0x3,
- 0x6,
- 0x0,
- 0x3,
- 0x1,
- 0x0,
- 0x2,
- 0x2,
- 0x6,
- 0x3,
- 0x6,
- 0x4,
- 0x3,
- 0x0,
- 0x0,
- 0x2,
- 0x0,
- 0x3,
- 0x0,
- 0x1,
- 0x1,
- 0x2,
- 0x2,
- 0x4,
- 0x1,
- 0x2,
- 0x1,
- 0x0,
- 0x8,
- 0x1,
- 0x1,
- 0x2,
- 0x0,
- 0x0,
- 0x3,
- 0x1,
- 0x7,
- 0x6,
- 0x3,
- 0x9,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x5,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x3,
- 0x6,
- 0x0,
- 0x1,
- 0x4,
- 0x8,
- 0x0,
- 0x0,
- 0x5,
- 0x0,
- 0x3,
- 0x3,
- 0x1,
- 0x4,
- 0x1,
- 0x0,
- 0x1,
- 0x0,
- 0x4,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x2,
- 0x2,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x4,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x1,
- 0x0,
- 0x3,
- 0x1,
- 0x3,
- 0x1,
- 0x0,
- 0x0,
- 0x3,
- 0x1,
- 0x0,
- 0x2,
- 0x0,
- 0x1,
- 0x0,
- 0x1,
- 0x1,
- 0x2,
- 0x1,
- 0x1,
- 0x0,
- 0x2,
- 0x1,
- 0x3,
- 0x4,
- 0x0,
- 0x3,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x1,
- 0x1,
- 0x0,
- 0x5,
- 0x0,
- 0x0,
- 0x1,
- 0x3,
- 0x0,
- 0x0,
- 0x1,
- 0x0,
- 0x0,
- 0x2,
- 0x1,
- 0x5,
- 0x0,
- 0x4,
- 0x2,
- 0x1,
- 0x4,
- 0x3,
- 0x1,
- 0x0,
- 0x1,
- 0x2,
- 0x4,
+ 0x4B0, 0x000, 0x012, 0x151, 0x000, 0x051, 0x000, 0x166, 0x00E, 0x000, 0x000, 0x00A, 0x004,
+ 0x008, 0x000, 0x012, 0x002, 0x000, 0x002, 0x000, 0x00E, 0x000, 0x000, 0x127, 0x000, 0x000,
+ 0x000, 0x004, 0x18C, 0x019, 0x000, 0x000, 0x001, 0x005, 0x000, 0x06A, 0x001, 0x0C5, 0x010,
+ 0x000, 0x000, 0x002, 0x003, 0x011, 0x002, 0x000, 0x000, 0x003, 0x008, 0x026, 0x104, 0x0BC,
+ 0x033, 0x043, 0x033, 0x00E, 0x000, 0x000, 0x02D, 0x020, 0x000, 0x00D, 0x002, 0x000, 0x027,
+ 0x000, 0x023, 0x038, 0x008, 0x00D, 0x060, 0x026, 0x000, 0x01B, 0x000, 0x000, 0x05A, 0x002,
+ 0x000, 0x007, 0x048, 0x00F, 0x003, 0x001, 0x00F, 0x04A, 0x002, 0x003, 0x000, 0x003, 0x004,
+ 0x002, 0x037, 0x00C, 0x001, 0x044, 0x000, 0x000, 0x006, 0x012, 0x000, 0x001, 0x001, 0x000,
+ 0x035, 0x00C, 0x00B, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000, 0x00B, 0x000, 0x005, 0x00F,
+ 0x000, 0x000, 0x00F, 0x012, 0x000, 0x00B, 0x009, 0x001, 0x001, 0x016, 0x000, 0x000, 0x000,
+ 0x003, 0x02C, 0x007, 0x00C, 0x002, 0x001, 0x003, 0x002, 0x008, 0x00C, 0x002, 0x01B, 0x004,
+ 0x002, 0x002, 0x001, 0x005, 0x001, 0x000, 0x000, 0x015, 0x000, 0x000, 0x00D, 0x008, 0x000,
+ 0x000, 0x005, 0x026, 0x008, 0x000, 0x000, 0x000, 0x000, 0x013, 0x001, 0x001, 0x000, 0x032,
+ 0x000, 0x003, 0x00B, 0x006, 0x002, 0x000, 0x000, 0x000, 0x002, 0x003, 0x001, 0x002, 0x000,
+ 0x033, 0x000, 0x002, 0x004, 0x01D, 0x000, 0x001, 0x003, 0x000, 0x000, 0x000, 0x030, 0x00C,
+ 0x006, 0x000, 0x000, 0x000, 0x001, 0x000, 0x001, 0x001, 0x005, 0x000, 0x002, 0x001, 0x002,
+ 0x003, 0x00D, 0x008, 0x000, 0x003, 0x001, 0x000, 0x002, 0x000, 0x000, 0x000, 0x001, 0x008,
+ 0x000, 0x007, 0x000, 0x000, 0x000, 0x00A, 0x000, 0x003, 0x000, 0x019, 0x000, 0x006, 0x007,
+ 0x007, 0x005, 0x001, 0x001, 0x001, 0x001, 0x000, 0x004, 0x003, 0x006, 0x00A, 0x000, 0x000,
+ 0x000, 0x000, 0x001, 0x001, 0x000, 0x003, 0x000, 0x000, 0x002, 0x000, 0x000, 0x000, 0x003,
+ 0x00A, 0x012, 0x000, 0x000, 0x001, 0x000, 0x009, 0x002, 0x003, 0x001, 0x007, 0x000, 0x000,
+ 0x005, 0x005, 0x000, 0x002, 0x00C, 0x008, 0x016, 0x003, 0x000, 0x000, 0x000, 0x000, 0x007,
+ 0x009, 0x001, 0x000, 0x000, 0x00A, 0x000, 0x002, 0x000, 0x014, 0x000, 0x002, 0x001, 0x007,
+ 0x000, 0x004, 0x000, 0x000, 0x000, 0x004, 0x010, 0x002, 0x001, 0x00A, 0x00C, 0x004, 0x000,
+ 0x003, 0x000, 0x001, 0x00B, 0x000, 0x005, 0x001, 0x00B, 0x000, 0x005, 0x007, 0x005, 0x000,
+ 0x002, 0x008, 0x002, 0x000, 0x005, 0x006, 0x000, 0x000, 0x000, 0x001, 0x000, 0x006, 0x00C,
+ 0x021, 0x005, 0x004, 0x000, 0x003, 0x000, 0x000, 0x006, 0x003, 0x000, 0x00B, 0x000, 0x002,
+ 0x001, 0x000, 0x002, 0x000, 0x000, 0x007, 0x000, 0x001, 0x000, 0x006, 0x000, 0x000, 0x000,
+ 0x002, 0x004, 0x013, 0x000, 0x013, 0x001, 0x000, 0x007, 0x002, 0x005, 0x000, 0x000, 0x00A,
+ 0x001, 0x010, 0x009, 0x000, 0x001, 0x003, 0x001, 0x000, 0x000, 0x000, 0x001, 0x000, 0x00C,
+ 0x001, 0x003, 0x000, 0x009, 0x00E, 0x003, 0x006, 0x001, 0x003, 0x003, 0x000, 0x002, 0x003,
+ 0x004, 0x000, 0x00C, 0x002, 0x004, 0x010, 0x002, 0x005, 0x001, 0x000, 0x000, 0x004, 0x000,
+ 0x006, 0x000, 0x000, 0x006, 0x000, 0x000, 0x00C, 0x000, 0x002, 0x000, 0x000, 0x003, 0x000,
+ 0x004, 0x002, 0x003, 0x001, 0x001, 0x000, 0x001, 0x000, 0x002, 0x001, 0x001, 0x001, 0x000,
+ 0x001, 0x000, 0x000, 0x003, 0x000, 0x000, 0x004, 0x004, 0x003, 0x000, 0x003, 0x000, 0x000,
+ 0x010, 0x000, 0x000, 0x001, 0x006, 0x001, 0x003, 0x000, 0x004, 0x001, 0x000, 0x00F, 0x002,
+ 0x007, 0x001, 0x000, 0x000, 0x006, 0x003, 0x002, 0x000, 0x014, 0x002, 0x02B, 0x000, 0x000,
+ 0x00E, 0x000, 0x003, 0x000, 0x000, 0x00C, 0x000, 0x006, 0x004, 0x010, 0x007, 0x002, 0x006,
+ 0x00D, 0x000, 0x003, 0x001, 0x00C, 0x004, 0x001, 0x000, 0x005, 0x002, 0x000, 0x001, 0x00B,
+ 0x001, 0x001, 0x000, 0x001, 0x000, 0x000, 0x012, 0x000, 0x000, 0x007, 0x000, 0x000, 0x001,
+ 0x000, 0x004, 0x005, 0x004, 0x000, 0x001, 0x000, 0x002, 0x00C, 0x005, 0x00C, 0x001, 0x007,
+ 0x001, 0x003, 0x000, 0x005, 0x004, 0x001, 0x000, 0x000, 0x004, 0x000, 0x001, 0x005, 0x004,
+ 0x001, 0x000, 0x00A, 0x002, 0x001, 0x001, 0x000, 0x001, 0x001, 0x007, 0x000, 0x004, 0x001,
+ 0x006, 0x005, 0x003, 0x002, 0x001, 0x001, 0x003, 0x000, 0x004, 0x000, 0x005, 0x004, 0x000,
+ 0x006, 0x002, 0x000, 0x000, 0x007, 0x004, 0x002, 0x000, 0x000, 0x008, 0x000, 0x003, 0x002,
+ 0x007, 0x002, 0x003, 0x000, 0x000, 0x000, 0x002, 0x003, 0x003, 0x001, 0x000, 0x000, 0x004,
+ 0x002, 0x003, 0x002, 0x000, 0x000, 0x005, 0x000, 0x001, 0x000, 0x001, 0x000, 0x006, 0x002,
+ 0x001, 0x003, 0x001, 0x001, 0x000, 0x007, 0x001, 0x000, 0x005, 0x000, 0x001, 0x002, 0x000,
+ 0x004, 0x000, 0x001, 0x000, 0x004, 0x002, 0x003, 0x002, 0x001, 0x001, 0x003, 0x000, 0x000,
+ 0x000, 0x003, 0x000, 0x007, 0x002, 0x000, 0x008, 0x004, 0x001, 0x000, 0x001, 0x003, 0x000,
+ 0x000, 0x00A, 0x000, 0x000, 0x01D, 0x002, 0x000, 0x000, 0x011, 0x000, 0x001, 0x001, 0x003,
+ 0x000, 0x007, 0x001, 0x000, 0x001, 0x000, 0x002, 0x00B, 0x000, 0x002, 0x003, 0x003, 0x004,
+ 0x00D, 0x000, 0x001, 0x00A, 0x000, 0x002, 0x008, 0x001, 0x005, 0x001, 0x005, 0x001, 0x000,
+ 0x003, 0x005, 0x000, 0x002, 0x000, 0x000, 0x000, 0x003, 0x003, 0x001, 0x001, 0x000, 0x000,
+ 0x000, 0x000, 0x001, 0x000, 0x000, 0x001, 0x000, 0x000, 0x011, 0x001, 0x000, 0x003, 0x001,
+ 0x002, 0x004, 0x000, 0x004, 0x000, 0x000, 0x00A, 0x000, 0x001, 0x000, 0x001, 0x001, 0x002,
+ 0x001, 0x000, 0x00C, 0x000, 0x000, 0x001, 0x000, 0x000, 0x002, 0x004, 0x000, 0x000, 0x000,
+ 0x000, 0x003, 0x005, 0x001, 0x004, 0x000, 0x002, 0x005, 0x001, 0x003, 0x005, 0x001, 0x001,
+ 0x001, 0x00F, 0x000, 0x000, 0x001, 0x000, 0x001, 0x001, 0x002, 0x003, 0x003, 0x000, 0x005,
+ 0x003, 0x000, 0x000, 0x000, 0x00A, 0x000, 0x002, 0x003, 0x000, 0x001, 0x006, 0x000, 0x004,
+ 0x004, 0x000, 0x001, 0x002, 0x000, 0x003, 0x001, 0x000, 0x001, 0x003, 0x003, 0x003, 0x002,
+ 0x001, 0x007, 0x002, 0x002, 0x003, 0x000, 0x003, 0x001, 0x000, 0x000, 0x001, 0x000, 0x000,
+ 0x000, 0x000, 0x000, 0x006, 0x000, 0x001, 0x005, 0x002, 0x003, 0x003, 0x008, 0x000, 0x000,
+ 0x000, 0x002, 0x004, 0x001, 0x000, 0x003, 0x002, 0x006, 0x000, 0x00B, 0x002, 0x001, 0x000,
+ 0x001, 0x000, 0x001, 0x008, 0x004, 0x006, 0x001, 0x000, 0x000, 0x002, 0x009, 0x001, 0x005,
+ 0x003, 0x002, 0x000, 0x001, 0x001, 0x009, 0x001, 0x007, 0x001, 0x000, 0x001, 0x000, 0x001,
+ 0x000, 0x002, 0x007, 0x001, 0x002, 0x002, 0x003, 0x001, 0x000, 0x00A, 0x004, 0x000, 0x001,
+ 0x002, 0x001, 0x005, 0x000, 0x00B, 0x001, 0x000, 0x001, 0x002, 0x000, 0x001, 0x007, 0x000,
+ 0x001, 0x001, 0x001, 0x005, 0x003, 0x001, 0x000, 0x000, 0x001, 0x000, 0x001, 0x000, 0x000,
+ 0x000, 0x000, 0x003, 0x003, 0x000, 0x000, 0x001, 0x007, 0x001, 0x004, 0x001, 0x002, 0x001,
+ 0x000, 0x008, 0x000, 0x003, 0x000, 0x003, 0x004, 0x006, 0x002, 0x001, 0x000, 0x000, 0x000,
+ 0x001, 0x003, 0x003, 0x003, 0x005, 0x000, 0x002, 0x003, 0x003, 0x003, 0x001, 0x003, 0x003,
+ 0x001, 0x002, 0x000, 0x002, 0x000, 0x000, 0x000, 0x001, 0x001, 0x000, 0x001, 0x006, 0x002,
+ 0x001, 0x000, 0x000, 0x003, 0x001, 0x002, 0x008, 0x001, 0x002, 0x000, 0x000, 0x000, 0x002,
+ 0x000, 0x001, 0x001, 0x001, 0x001, 0x000, 0x002, 0x002, 0x003, 0x003, 0x003, 0x000, 0x003,
+ 0x001, 0x001, 0x006, 0x000, 0x000, 0x002, 0x002, 0x001, 0x001, 0x001, 0x005, 0x000, 0x003,
+ 0x002, 0x000, 0x004, 0x008, 0x000, 0x000, 0x001, 0x002, 0x000, 0x000, 0x004, 0x001, 0x002,
+ 0x000, 0x000, 0x001, 0x000, 0x001, 0x001, 0x001, 0x001, 0x000, 0x002, 0x001, 0x000, 0x001,
+ 0x000, 0x000, 0x001, 0x000, 0x004, 0x002, 0x000, 0x000, 0x002, 0x001, 0x003, 0x000, 0x000,
+ 0x000, 0x001, 0x003, 0x003, 0x000, 0x003, 0x004, 0x002, 0x002, 0x000, 0x000, 0x001, 0x001,
+ 0x000, 0x006, 0x000, 0x002, 0x000, 0x00C, 0x001, 0x001, 0x002, 0x001, 0x000, 0x002, 0x001,
+ 0x001, 0x000, 0x000, 0x002, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000, 0x005,
+ 0x001, 0x000, 0x005, 0x000, 0x000, 0x003, 0x001, 0x000, 0x000, 0x001, 0x000, 0x000, 0x005,
+ 0x001, 0x001, 0x000, 0x001, 0x001, 0x007, 0x003, 0x002, 0x004, 0x000, 0x003, 0x002, 0x001,
];
pub(crate) const TRAILING_NONSTARTERS_KV: &[u32] = &[
- 0x4EE01,
- 0x1E4B01,
- 0x1F1D02,
- 0x1E3C01,
- 0x224901,
- 0x1FB101,
- 0x1E6902,
- 0xFE8401,
- 0x1E1A01,
- 0x22901,
- 0xFC6202,
- 0xFE7101,
- 0x1E5A01,
- 0xEC01,
- 0x15001,
- 0x1E8901,
- 0x21CF01,
- 0x1F1101,
- 0x1E5002,
- 0x1E7201,
- 0x1FB901,
- 0x34301,
- 0x1FD901,
- 0x1FF801,
- 0x1F8C03,
- 0xDA01,
- 0x1E5302,
- 0x1FA203,
- 0x1FC202,
- 0x334E01,
- 0x1F4502,
- 0x12B01,
- 0xFB4401,
- 0x220401,
- 0x13E01,
- 0x12901,
- 0x1E9301,
- 0x1F001,
- 0x307701,
- 0xFE7D01,
- 0x21B01,
- 0x1EA802,
- 0x1E6402,
- 0x40301,
- 0x95801,
- 0x1E3902,
- 0x30AC01,
- 0x1F3502,
- 0x4F501,
- 0x1E7101,
- 0x4E701,
- 0x10801,
- 0x334B01,
- 0x14E01,
- 0x1EC901,
- 0x1FA02,
- 0x4ED01,
- 0x4EB01,
- 0x21701,
- 0x1FD001,
- 0x14601,
- 0x1D101,
- 0x34101,
- 0x1E3401,
- 0x304C01,
- 0xE901,
- 0x1F9403,
- 0x330701,
- 0x1E4001,
- 0x1E3601,
- 0x1E3101,
- 0x22AD01,
- 0x1E0701,
- 0x1F5202,
- 0xF601,
- 0x1FEB01,
- 0x1EE501,
- 0x1F7201,
- 0x1EAF02,
- 0x1F6D02,
- 0x1E2201,
- 0x1EEA02,
- 0x1E4D02,
- 0xA3301,
- 0x4F901,
- 0x17401,
- 0x11D01,
- 0xFB3601,
- 0x305C01,
- 0x12201,
- 0x1F8802,
- 0x1E5D02,
- 0x1EC102,
- 0x13D01,
- 0x1EF102,
- 0x30F401,
- 0x40701,
- 0x1FA802,
- 0x1EB402,
- 0x1E5801,
- 0x1E0501,
- 0xE001,
- 0xFB3301,
- 0xEB01,
- 0xA5E01,
- 0x1F3202,
- 0x20A01,
- 0x20801,
- 0x1FF702,
- 0x1FC901,
- 0x228001,
- 0xE401,
- 0x1F2101,
- 0x21CE01,
- 0xCB01,
- 0x1F9F03,
- 0x14301,
- 0x306701,
- 0x1E601,
- 0x1E4601,
- 0x45D01,
- 0x1E1001,
- 0x1E4801,
- 0x1FF402,
- 0x30D701,
- 0x22E301,
- 0x1EB801,
- 0x12C01,
- 0x331E01,
- 0x1F7001,
- 0x1F5D02,
- 0x21901,
- 0x10D01,
- 0x1FB402,
- 0xA801,
- 0x1FE801,
- 0x15401,
- 0x4D301,
- 0xFC01,
- 0x1EE401,
- 0x1F0901,
- 0x16B01,
- 0x1E1201,
- 0x1E2E02,
- 0x4C201,
- 0xFB1F01,
- 0x1F5602,
- 0x4DA01,
- 0x1EC02,
- 0x228801,
- 0x1ECB01,
- 0x16101,
- 0x1E9101,
- 0x1ECE01,
- 0x1F8002,
- 0x307401,
- 0xFE4901,
- 0x307101,
- 0x1D16202,
- 0x1FC001,
- 0x3CB01,
- 0x1FCF02,
- 0x1FBF01,
- 0x1FBD01,
- 0xFB3501,
- 0x1D15E01,
- 0xFE7F01,
- 0x22E01,
- 0x1E7701,
- 0xFBB001,
- 0xE101,
- 0x30B001,
- 0x22EA01,
- 0x1F3F02,
- 0x1C601,
- 0x1E1E01,
- 0x9DC01,
- 0x1F6302,
- 0x1FC01,
- 0x4D001,
- 0x1FDE02,
- 0x1E1301,
- 0x1FCE02,
- 0x4F101,
- 0x228101,
- 0x1F0101,
- 0xFB1D01,
- 0xDB01,
- 0x1E8701,
- 0x224101,
- 0xFB3A01,
- 0x40101,
- 0x1FC402,
- 0xFE7B01,
- 0x30BA01,
- 0xFBA501,
- 0x30F701,
- 0x1FF301,
- 0x14C01,
- 0x1D16302,
- 0x15701,
- 0x17801,
- 0x1F7901,
- 0x306201,
- 0x1EAE02,
- 0x30B801,
- 0x1F2302,
- 0x1F4D02,
- 0x17C01,
- 0x15601,
- 0x22D02,
- 0xFC9001,
- 0x1E3B01,
- 0x1E6A01,
- 0x1EBE02,
- 0x17301,
- 0x22ED01,
- 0x10E01,
- 0x1E8A01,
- 0x1F6B02,
- 0x6C201,
- 0xFEF901,
- 0x1EB901,
- 0x1EB102,
- 0x1F5702,
- 0x1F0D02,
- 0x305A01,
- 0x1FD702,
- 0x30AE01,
- 0x1E2001,
- 0x17601,
- 0xFB3401,
- 0x1F8E03,
- 0xFB4D01,
- 0xFE8101,
- 0x1E6101,
- 0x1FE302,
- 0x1D201,
- 0x1FA403,
- 0x1EE002,
- 0x1F7A01,
- 0xFB2F01,
- 0x1F5502,
- 0xFEFA01,
- 0x1D602,
- 0xFA01,
- 0xFE8501,
- 0x22F01,
- 0x4DB01,
- 0x1E5F01,
- 0x1E2701,
- 0x39002,
- 0x41901,
- 0x30F801,
- 0x16C01,
- 0x12401,
- 0xC701,
- 0x1F9503,
- 0x228401,
- 0x1E8C01,
- 0xF7502,
- 0x1FC301,
- 0x1F7C01,
- 0xFE7201,
- 0x20C01,
- 0xFB4901,
- 0x1FBB01,
- 0x10F01,
- 0x1FB601,
- 0x1F8902,
- 0x1FF01,
- 0x1F2402,
- 0x1F5302,
- 0x1E1702,
- 0x1D802,
- 0x309E01,
- 0xFE7A01,
- 0x305E01,
- 0x226E01,
- 0x1FE702,
- 0x1EBF02,
- 0x1F3801,
- 0x1E3201,
- 0x1FFB01,
- 0x1E6B01,
- 0x1F9D03,
- 0x222401,
- 0x201701,
- 0xF7601,
- 0x1FCC01,
- 0x1FA002,
- 0x1F7401,
- 0x1F2C02,
- 0x40D01,
- 0x1EEE02,
- 0x15C01,
- 0xE301,
- 0xCC01,
- 0xFB3801,
- 0x333201,
- 0x1E7501,
- 0x334001,
- 0x11501,
- 0x1E3001,
- 0x34402,
- 0x17701,
- 0x1E9201,
- 0x1E2D01,
- 0xCA01,
- 0x1E7D01,
- 0x13001,
- 0x1F6801,
- 0x3AA01,
- 0x309C01,
- 0x1F4001,
- 0x3AC01,
- 0x1EBA01,
- 0x43901,
- 0xFB4C01,
- 0x1E201,
- 0x1109A01,
- 0x1DB02,
- 0x1E4101,
- 0x1FE001,
- 0xCE01,
- 0x21F01,
- 0x4DF01,
- 0x47701,
- 0x1F0302,
- 0x3D401,
- 0x23201,
- 0x1E1101,
- 0x1FD202,
- 0x14401,
- 0x1F4C02,
- 0x1EF301,
- 0x10C01,
- 0x30D001,
- 0x1E4C02,
- 0x1E2C01,
- 0x1F1C02,
- 0xFC5F02,
- 0x1FE101,
- 0x1EC502,
- 0x22801,
- 0x22E101,
- 0x1EC002,
- 0xEA01,
- 0x1E0802,
- 0x95A01,
- 0x1F8303,
- 0x1EE302,
- 0x306901,
- 0x17101,
- 0x1E1602,
- 0x212B01,
- 0x1E6001,
- 0x22EC01,
- 0x219B01,
- 0x1E8F01,
- 0x1F4302,
- 0x4E501,
- 0x1FA303,
- 0x1F3C02,
- 0x16D01,
- 0x30BE01,
- 0x1FA603,
- 0x1E9601,
- 0xFD01,
- 0x1F0602,
- 0x1ED402,
- 0x1D502,
- 0x1A001,
- 0x222601,
- 0x9DF01,
- 0xFB3201,
- 0xFB4701,
- 0x1E6301,
- 0x1DC02,
- 0x1E4701,
- 0x30BC01,
- 0x1D1BB01,
- 0x1FC702,
- 0x1D1BC01,
- 0x309B01,
- 0xF7702,
- 0xFF9E01,
- 0x1EA702,
- 0x95901,
- 0xE501,
- 0x30B601,
- 0xFCF402,
- 0x21601,
- 0x4EA01,
- 0x20501,
- 0x4F001,
- 0xC4801,
- 0x14701,
- 0x1EF801,
- 0x1F5B02,
- 0x1EA001,
- 0xE201,
- 0x1F9303,
- 0x1F5901,
- 0xFB4B01,
- 0x1F3001,
- 0x1E8401,
- 0x62401,
- 0x1F9703,
- 0xDC01,
- 0x1E8B01,
- 0x1EDF02,
- 0x3B002,
- 0x1C401,
- 0x1ED502,
- 0x1F2901,
- 0x1F7D01,
- 0x1EE902,
- 0x30DA01,
- 0xD201,
- 0x1F6A02,
- 0x1EA402,
- 0x1EB01,
- 0xFEF801,
- 0x93101,
- 0x307601,
- 0x1F0A02,
- 0x1F2702,
- 0x1FD601,
- 0x3AB01,
- 0x1E0101,
- 0xFB2C02,
- 0x11C01,
- 0x203E01,
- 0x16001,
- 0x21001,
- 0x1E0B01,
- 0xFE8901,
- 0x1E1C02,
- 0x1E1801,
- 0x1F9102,
- 0x1E9501,
- 0x11901,
- 0x45C01,
- 0x30DC01,
- 0xFB2D02,
- 0x22B02,
- 0x2D901,
- 0x1D001,
- 0xDDA01,
- 0x15D01,
- 0x1E6E01,
- 0x1EA602,
- 0x1E4A01,
- 0x1EDA02,
- 0x306501,
- 0x4F401,
- 0x306001,
- 0x110AB01,
- 0x228501,
- 0x1E8E01,
- 0x227801,
- 0x4F301,
- 0x1F0502,
- 0x1F7101,
- 0x1E5C02,
- 0xAF01,
- 0x1EC302,
- 0xFE8C01,
- 0x1E8501,
- 0x1F9802,
- 0x1EA01,
- 0xFB4801,
- 0xC801,
- 0xFE7901,
- 0x62501,
- 0x16501,
- 0xF101,
- 0x11601,
- 0x1FDF02,
- 0x1FEC01,
- 0x1F3E02,
- 0x331001,
- 0xE701,
- 0x1FB202,
- 0x22601,
- 0x6D301,
- 0x1EAA02,
- 0x1E1B01,
- 0x12301,
- 0x1F7701,
- 0x1FAD03,
- 0x1EDC02,
- 0x11401,
- 0x1F8B03,
- 0x14501,
- 0x1FBC01,
- 0x1E7902,
- 0x95F01,
- 0x1F2801,
- 0xDDD01,
- 0x1FFA01,
- 0x1CD01,
- 0xFE4A01,
- 0xFE7E01,
- 0x1AF01,
- 0x17E01,
- 0x1F8603,
- 0x227401,
- 0x1FB301,
- 0x13401,
- 0xFB4A01,
- 0x1F2502,
- 0x1FD302,
- 0x1F21301,
- 0x20B01,
- 0x38C01,
- 0xFE8701,
- 0x1F3101,
- 0x1F1402,
- 0x1E1F01,
- 0x1FB02,
- 0x1E7E01,
- 0x1E0201,
- 0xFE4B01,
- 0xD901,
- 0x1F0001,
- 0xF7302,
- 0xC501,
- 0x4E401,
- 0xFCF302,
- 0x1F5101,
- 0x1FE601,
- 0x30C001,
- 0x4F801,
- 0x12801,
- 0x1EB202,
- 0x1E0A01,
- 0x1E0C01,
- 0x1E4401,
- 0xEE01,
- 0x30C201,
- 0x16F01,
- 0x1EA502,
- 0x30FA01,
- 0x1EB502,
- 0x1D1BE02,
- 0x22E001,
- 0x22E201,
- 0x1D1C002,
- 0x1EC402,
- 0x1F6702,
- 0x30FE01,
- 0x1F3402,
- 0xFE7001,
- 0x1E2101,
- 0x1F5F02,
- 0x220C01,
- 0x1D902,
- 0x1E0601,
- 0x13B01,
- 0x1ED802,
- 0x1EEB02,
- 0xC201,
- 0x45001,
- 0x1FDD02,
- 0x1E7601,
- 0x1D16402,
- 0x1B001,
- 0x20401,
- 0x11201,
- 0x21301,
- 0x3D301,
- 0x1EC202,
- 0x1EAB02,
- 0x1FAE03,
- 0x1EE01,
- 0x1ED602,
- 0x1E3701,
- 0x309401,
- 0xD401,
- 0x1E5E01,
- 0x1E0D01,
- 0x30D601,
- 0x1ED702,
- 0x1F5001,
- 0x1D401,
- 0x1FFD01,
- 0xFB3C01,
- 0x1E8D01,
- 0x21501,
- 0x3AF01,
- 0x224701,
- 0x1ECA01,
- 0x305801,
- 0x1E7F01,
- 0x22AC01,
- 0x15B01,
- 0x4D601,
- 0x17A01,
- 0x1ED02,
- 0x1E6702,
- 0x1E2801,
- 0x20D01,
- 0x1EBD01,
- 0x1FD01,
- 0xFB2E01,
- 0x1E4501,
- 0x1EF701,
- 0x45E01,
- 0x1F3B02,
- 0x20001,
- 0x1FCD02,
- 0x38502,
- 0x13601,
- 0x20301,
- 0x21201,
- 0x1E9B01,
- 0x1F401,
- 0x1E8001,
- 0x1FC102,
- 0x1F7601,
- 0x3CA01,
- 0x16301,
- 0x1FCB01,
- 0x95C01,
- 0x21101,
- 0x1EF901,
- 0x1E7B02,
- 0x1E901,
- 0x1E1D02,
- 0x1EDE02,
- 0x15F01,
- 0x1F6402,
- 0x10001,
- 0x20F01,
- 0x1E6602,
- 0x40E01,
- 0x38E01,
- 0x1F0801,
- 0x11801,
- 0xFB3101,
- 0x1D702,
- 0x1ED102,
- 0x305201,
- 0x1E2A01,
- 0x227001,
- 0x1F8503,
- 0x1FFE01,
- 0x1EF002,
- 0x4DD01,
- 0x95D01,
- 0x1F6502,
- 0xF401,
- 0x4D701,
- 0x38601,
- 0x2D801,
- 0x1EC801,
- 0x45701,
- 0xFF01,
- 0x22AF01,
- 0x1EBC01,
- 0x11E01,
- 0x45301,
- 0xFE7801,
- 0x21E01,
- 0xB5D01,
- 0x12A01,
- 0xF501,
- 0xD301,
- 0x1E6502,
- 0x21A01,
- 0x1F6E02,
- 0x1FB001,
- 0x62201,
- 0x333B01,
- 0x30D301,
- 0x1EA101,
- 0x226F01,
- 0x1E0E01,
- 0x15E01,
- 0x1FF202,
- 0x21801,
- 0x1F8203,
- 0x20901,
- 0x1FD101,
- 0x2DB01,
- 0xF201,
- 0xF7902,
- 0xA5A01,
- 0x1F0E02,
- 0x1F1801,
- 0x307C01,
- 0xFC5C01,
- 0x2ADC01,
- 0xE801,
- 0x15801,
- 0x1FDB01,
- 0x1F6C02,
- 0x1EB002,
- 0x1E2301,
- 0x1F1502,
- 0x11F01,
- 0xFC6002,
- 0x1FA902,
- 0x1E5501,
- 0x23102,
- 0x1FE01,
- 0x1E3D01,
- 0x21AE01,
- 0xFD3C01,
- 0x38401,
- 0x1EE701,
- 0x13701,
- 0xFB3001,
- 0xEF01,
- 0x1FA703,
- 0x10A01,
- 0x1F2B02,
- 0x1D16002,
- 0xF901,
- 0xFEF501,
- 0x40C01,
- 0x22A02,
- 0xF301,
- 0x12D01,
- 0x1F9A03,
- 0x1E4201,
- 0x1E102,
- 0xA5B01,
- 0x1EAC02,
- 0x1E1502,
- 0x1F9E03,
- 0x1FD801,
- 0x1F4A02,
- 0x20201,
- 0x1E9801,
- 0x1E2401,
- 0x1EE601,
- 0x304E01,
- 0x1E6C01,
- 0xFE8A01,
- 0xFB4001,
- 0x1F2D02,
- 0xFD3D01,
- 0x1FC801,
- 0x1FB801,
- 0x1F3D02,
- 0x1EF501,
- 0x13901,
- 0x1E8101,
- 0x1F9C03,
- 0x10301,
- 0xA5901,
- 0x1F9002,
- 0x1ED902,
- 0x1EF201,
- 0x4E301,
- 0xFEF701,
- 0x1ECD01,
- 0x11A01,
- 0xFB2A01,
- 0x1E301,
- 0x1F6602,
- 0x1FB702,
- 0x1E2501,
- 0x30C701,
- 0x1F8102,
- 0xCF01,
- 0x1EEF02,
- 0x1E9701,
- 0x1F6F02,
- 0x1F2A02,
- 0x10901,
- 0x1E5601,
- 0x1E0001,
- 0xFB4E01,
- 0x1FC601,
- 0xC001,
- 0x220901,
- 0xFE8801,
- 0x1CE01,
- 0xED01,
- 0x15901,
- 0x15A01,
- 0x37A01,
- 0x227501,
- 0xD501,
- 0x4C101,
- 0x1E1901,
- 0x30D101,
- 0x10701,
- 0x1FAC03,
- 0x1EA301,
- 0x1F2E02,
- 0x14D01,
- 0x1F4901,
- 0x1E8801,
- 0x1EB302,
- 0x20701,
- 0x1F7801,
- 0x1F8D03,
- 0xFBA401,
- 0x1F9902,
- 0x38801,
- 0x1F2001,
- 0xFB4101,
- 0x1EC602,
- 0x40001,
- 0x1EB602,
- 0x1E2B01,
- 0x1E3A01,
- 0x1C501,
- 0x16201,
- 0x17D01,
- 0x1E8201,
- 0x1F1B02,
- 0x17001,
- 0x224401,
- 0x23301,
- 0x1E2601,
- 0x1F3302,
- 0x10401,
- 0x30D901,
- 0x30F901,
- 0x1F8A03,
- 0x93401,
- 0x3CD01,
- 0x1FFC01,
- 0x10101,
- 0x1F5402,
- 0xFB4601,
- 0x3AD01,
- 0x1F0402,
- 0x1FF601,
- 0x30B201,
- 0x1F1001,
- 0x1E7301,
- 0x20E01,
- 0x1E0301,
- 0x1F6901,
- 0xFEF601,
- 0x95B01,
- 0x227101,
- 0x22701,
- 0x1E3501,
- 0x34001,
- 0x1F0B02,
- 0x1E701,
- 0x1ED302,
- 0x1F8403,
- 0x1F2F02,
- 0x1E8301,
- 0x1F6001,
- 0x62301,
- 0xFC5D01,
- 0x226001,
- 0x22C02,
- 0x1E3F01,
- 0x1F7501,
- 0x226201,
- 0x1FDA01,
- 0x20601,
- 0xFE7701,
- 0x305601,
- 0x12101,
- 0x1F2602,
- 0x1E9001,
- 0x95E01,
- 0x12F01,
- 0x1F9603,
- 0x1E4901,
- 0x10B01,
- 0x1DF02,
- 0x1D16102,
- 0xFB2B01,
- 0x1E0902,
- 0x11701,
- 0xFF9F01,
- 0x1F7B01,
- 0x1E9901,
- 0x1F9203,
- 0x1FCA01,
- 0xB801,
- 0x1A101,
- 0x1F3901,
- 0xFE7401,
- 0xFC6102,
- 0x1E5B01,
- 0x92901,
- 0xFE8301,
- 0x1FE202,
- 0x305401,
- 0x1CF01,
- 0x2DC01,
- 0xFB01,
- 0x307A01,
- 0xFB3901,
- 0x17501,
- 0x305001,
- 0x1E801,
- 0x1FE901,
- 0x1D301,
- 0x307D01,
- 0x1E2F02,
- 0xFE4C01,
- 0xF8102,
- 0x1FA503,
- 0x1FAB03,
- 0x1EDB02,
- 0x1F4801,
- 0x1EED02,
- 0x1F4402,
- 0x1DA02,
- 0xD101,
- 0x1E6802,
- 0x2DA01,
- 0x30B401,
- 0x1ECF01,
- 0x1E5901,
- 0x1E002,
- 0x1E5701,
- 0x1F0F02,
- 0x17201,
- 0x1FEE02,
- 0x1E5401,
- 0xC901,
- 0xA3601,
- 0x228901,
- 0x1ECC01,
- 0xB401,
- 0x16901,
- 0x1EF601,
- 0x10501,
- 0x1E7C01,
- 0x1F8F03,
- 0x1E3301,
- 0x14F01,
- 0x1EE802,
- 0x1F4202,
- 0x1E3E01,
- 0xFC6302,
- 0x1F501,
- 0x16401,
- 0x4F201,
- 0x1F0202,
- 0x1E0F01,
- 0x1FEA01,
- 0x1F1901,
- 0xFC5B01,
- 0x1D1BD02,
- 0xC101,
- 0x38A01,
- 0x1EE102,
- 0xD601,
- 0x1E7802,
- 0x1F7301,
- 0x1E7A02,
- 0x1EA902,
- 0xFCD901,
- 0x1F9B03,
- 0x1F2202,
- 0x10601,
- 0x38F01,
- 0xF7801,
- 0x1D15F01,
- 0x1F8703,
- 0x1FE501,
- 0x1EE202,
- 0x1F801,
- 0x307901,
- 0xFE8201,
- 0x1ED002,
- 0x4E201,
- 0x13501,
- 0x1109C01,
- 0xFCF202,
- 0x1E6F01,
- 0x21CD01,
- 0x1EB702,
- 0x4EF01,
- 0x1E6201,
- 0x1EDD02,
- 0xFC5E02,
- 0xDD01,
- 0x1F6202,
- 0x1F4B02,
- 0x4E601,
- 0x14801,
- 0x1F3A02,
- 0x1FAF03,
- 0xC401,
- 0x1EEC02,
- 0x1F4101,
- 0x1EC702,
- 0x4DC01,
- 0x16E01,
- 0x1F1A02,
- 0x307301,
- 0x22AE01,
- 0x38901,
- 0x23002,
- 0x13C01,
- 0x1FF901,
- 0x1F0702,
- 0x1EBB01,
- 0x12501,
- 0x1F1202,
- 0x1E2901,
- 0x1E4301,
- 0x10201,
- 0x330401,
- 0x6C001,
- 0x11301,
- 0x1EA201,
- 0x1F3702,
- 0x1FED02,
- 0x4D201,
- 0xFFE301,
- 0x30D401,
- 0x15101,
- 0x307001,
- 0x3AE01,
- 0x1F901,
- 0x1FA102,
- 0x1E9401,
- 0x332101,
- 0xC301,
- 0x17901,
- 0x1DE02,
- 0xFB3E01,
- 0x1E5102,
- 0x4DE01,
- 0x62601,
- 0x3CC01,
- 0x2DD01,
- 0x1F6101,
- 0x15501,
- 0x3CE01,
- 0x30C901,
- 0x1E7001,
- 0x227901,
- 0x30C501,
- 0x12001,
- 0xFE8601,
- 0x1E4F02,
- 0x13A01,
- 0x1E7401,
- 0x1F1302,
- 0x1D1BF02,
- 0x11B01,
- 0x9DD01,
- 0x22EB01,
- 0x1E6D01,
- 0x1E5202,
- 0x1ED202,
- 0x1F3602,
- 0x1EAD02,
- 0x1FE401,
- 0xB5C01,
- 0x1FBA01,
- 0x1E4E02,
- 0x16801,
- 0xFE7C01,
- 0x1FAA03,
- 0x1E0401,
- 0x20101,
- 0x1EF01,
- 0x12E01,
- 0x1F0C02,
- 0x1E1402,
- 0xFE7601,
- 0x1E3802,
- 0xFB3B01,
- 0xCD01,
- 0x226D01,
- 0x4D101,
- 0x1E8601,
- 0x45101,
- 0x17B01,
- 0x47601,
- 0x4EC01,
- 0x21401,
- 0x1EF401,
- 0x16A01,
- 0x30DD01,
- 0xFE8B01,
- 0xFBB101,
- 0x219A01,
- 0xFB4301,
+ 0x030D401, 0x01F2E02, 0x01F1D02, 0x0227801, 0x0224901, 0x000E101, 0x01FFE01, 0x001A001,
+ 0x01F0A02, 0x0022901, 0x0307401, 0x01F6C02, 0x01E7601, 0x030B001, 0x004D001, 0x0FB3801,
+ 0x01EA902, 0x0FEF901, 0x0038F01, 0x01F3101, 0x0011701, 0x0034301, 0x0226201, 0x01FF801,
+ 0x00F7302, 0x0FE8B01, 0x0307601, 0x003AE01, 0x01FC202, 0x0FC6002, 0x0224101, 0x0012B01,
+ 0x01F0402, 0x0220401, 0x003B002, 0x01F9A03, 0x01EB702, 0x01E9301, 0x00A5B01, 0x01F5602,
+ 0x0021B01, 0x1D1C002, 0x1D16102, 0x0016E01, 0x01FD202, 0x01EEF02, 0x030AC01, 0x01F3502,
+ 0x01FE101, 0x01E6802, 0x004E701, 0x0010801, 0x0309E01, 0x01F3302, 0x01EC901, 0x001FA02,
+ 0x01E7B02, 0x01EDE02, 0x01FE702, 0x01FD001, 0x01E2E02, 0x01EBF02, 0x0034101, 0x0227001,
+ 0x01FBF01, 0x001C401, 0x01F9403, 0x01FAB03, 0x01E5102, 0x01F0101, 0x001AF01, 0x0045101,
+ 0x004F001, 0x0038E01, 0x0016401, 0x01F4801, 0x004EA01, 0x01EBB01, 0x01EAF02, 0x0FB4801,
+ 0x01E2201, 0x01EEA02, 0x01F7A01, 0x0FB4A01, 0x000E701, 0x01E1B01, 0x0011D01, 0x0FB3601,
+ 0x0017901, 0x0012201, 0x0FB3B01, 0x01E5D02, 0x0012A01, 0x0FC5F02, 0x01EF102, 0x003D301,
+ 0x0227401, 0x01FA802, 0x01FC301, 0x0FEF501, 0x0047601, 0x0022D02, 0x004DC01, 0x001FB02,
+ 0x0014D01, 0x030DA01, 0x0020A01, 0x01FFC01, 0x0016201, 0x01FC901, 0x0FC5C01, 0x01FB202,
+ 0x030BA01, 0x01F2702, 0x000CB01, 0x01FEA01, 0x003CA01, 0x0021601, 0x0015601, 0x003AC01,
+ 0x004D301, 0x0045D01, 0x01E4801, 0x01EAD02, 0x030D701, 0x022E301, 0x01F9303, 0x001DA02,
+ 0x01FC702, 0x0017501, 0x030BC01, 0x01E6602, 0x0010D01, 0x01FB402, 0x030FE01, 0x0FC6102,
+ 0x01FE801, 0x01FFB01, 0x000FC01, 0x01EE401, 0x000C301, 0x01E3701, 0x000EB01, 0x001D301,
+ 0x000CD01, 0x0FB1F01, 0x01E0802, 0x0FE8C01, 0x0FB4701, 0x01EE002, 0x01E6402, 0x01E9801,
+ 0x0FB4101, 0x01ECE01, 0x0011201, 0x01EF301, 0x001D001, 0x0307101, 0x01E3C01, 0x01FC001,
+ 0x0FCD901, 0x01E8401, 0x01E8201, 0x0FB3301, 0x01F8703, 0x01E6C01, 0x0FB4001, 0x01F6901,
+ 0x01E7701, 0x01FBB01, 0x0FE7D01, 0x01E8D01, 0x0220901, 0x01E5C02, 0x0011301, 0x01E1E01,
+ 0x009DC01, 0x01F1A02, 0x01FCD02, 0x0FCF202, 0x0309C01, 0x01E4D02, 0x030C701, 0x01FCE02,
+ 0x01E8101, 0x000E301, 0x01E5601, 0x0FB1D01, 0x00F8102, 0x01E8701, 0x01E6201, 0x0040101,
+ 0x01F2202, 0x0062601, 0x0015B01, 0x01F3901, 0x01FB901, 0x0020B01, 0x0014C01, 0x01F9203,
+ 0x01E0902, 0x01E3F01, 0x01F7901, 0x01F2F02, 0x0226E01, 0x01F3B02, 0x030D101, 0x004EF01,
+ 0x000B801, 0x0227901, 0x01E6001, 0x000D601, 0x0017B01, 0x01E6A01, 0x0015101, 0x01F4B02,
+ 0x0010001, 0x022ED01, 0x030D601, 0x01FCB01, 0x01E3902, 0x0040701, 0x004ED01, 0x01ED202,
+ 0x01EE202, 0x0304E01, 0x0FB3901, 0x0305A01, 0x01ECF01, 0x0011601, 0x01E2001, 0x0017601,
+ 0x0FB3401, 0x0093101, 0x004EE01, 0x0330401, 0x0012301, 0x01FE302, 0x0020F01, 0x01FA403,
+ 0x01F8F03, 0x00F7702, 0x01F5502, 0x001EF01, 0x000EA01, 0x01FAF03, 0x000FA01, 0x0022F01,
+ 0x01E2901, 0x004E201, 0x004C201, 0x004EC01, 0x0039002, 0x01FB702, 0x0FC5E02, 0x0012401,
+ 0x01F3A02, 0x0FB2C02, 0x01F9102, 0x0228401, 0x01EC102, 0x000F901, 0x000E801, 0x01EA101,
+ 0x004E401, 0x0021A01, 0x0FB4901, 0x0017A01, 0x0010F01, 0x01FB601, 0x001FF01, 0x001E201,
+ 0x004D701, 0x01F5302, 0x01EB801, 0x01FAA03, 0x0FCF402, 0x01F0901, 0x0017801, 0x0305401,
+ 0x01F6202, 0x01F6E02, 0x000A801, 0x01EAB02, 0x0016B01, 0x01EA201, 0x01F9D03, 0x01F2101,
+ 0x00F7601, 0x01FCC01, 0x01E3A01, 0x0013C01, 0x01E5A01, 0x001EC02, 0x0021401, 0x01EEE02,
+ 0x01F8503, 0x0307901, 0x0015E01, 0x0FE8401, 0x01E7501, 0x0306501, 0x0013B01, 0x0305801,
+ 0x01E8901, 0x0FC6202, 0x01E9201, 0x0011A01, 0x105E401, 0x0222601, 0x0010401, 0x01F2602,
+ 0x0227501, 0x0095901, 0x01F7301, 0x0014E01, 0x01EF701, 0x0043901, 0x01E2501, 0x0FB4C01,
+ 0x1109A01, 0x01F6101, 0x01E4101, 0x0010E01, 0x01FED02, 0x01EA402, 0x0021F01, 0x004D201,
+ 0x01F0302, 0x003D401, 0x0307701, 0x01FB101, 0x01E1101, 0x01F1402, 0x0014401, 0x0332101,
+ 0x0010C01, 0x01F4402, 0x0038502, 0x0305C01, 0x01E4301, 0x001DE02, 0x01F3702, 0x01EC502,
+ 0x004DE01, 0x0306001, 0x01FE601, 0x01EC002, 0x001ED02, 0x0015401, 0x000E001, 0x01F9C03,
+ 0x0021701, 0x1D15F01, 0x01E1602, 0x01ED902, 0x0FB2D02, 0x0FB3E01, 0x0020101, 0x01E4F02,
+ 0x01E4001, 0x0015501, 0x004E501, 0x01FA303, 0x01EE501, 0x0020701, 0x0FC6302, 0x01E9601,
+ 0x01FCF02, 0x0228001, 0x001A101, 0x0017301, 0x0022E01, 0x01F0F02, 0x01F9F03, 0x001D602,
+ 0x0FB3201, 0x1D1BD02, 0x00F7902, 0x003AB01, 0x01EC202, 0x01F0B02, 0x000E401, 0x0016A01,
+ 0x01F7001, 0x030D301, 0x01FA203, 0x0FF9E01, 0x01EE802, 0x01FF202, 0x01F6A02, 0x01E4E02,
+ 0x01E0E01, 0x01E2701, 0x0201701, 0x030DD01, 0x00C4801, 0x01EAC02, 0x01E9B01, 0x01EF801,
+ 0x021CD01, 0x00B5C01, 0x0305201, 0x0034402, 0x01F5901, 0x030B801, 0x0045301, 0x01E2B01,
+ 0x0016801, 0x01F9703, 0x01FA902, 0x01EDF02, 0x030F401, 0x0FBB101, 0x01F6302, 0x01E7F01,
+ 0x01EB002, 0x0017001, 0x01EE902, 0x0224401, 0x000C701, 0x01EEC02, 0x01FEC01, 0x0FE7F01,
+ 0x0FEF801, 0x01EB402, 0x01EBD01, 0x01F8902, 0x01FA002, 0x01EAE02, 0x0034001, 0x01F1B02,
+ 0x0010301, 0x0011C01, 0x01E1201, 0x0020E01, 0x0021001, 0x01F4001, 0x0FE8901, 0x01E1C02,
+ 0x0011E01, 0x00A5901, 0x004DF01, 0x0307C01, 0x0020601, 0x003CB01, 0x0FB3A01, 0x0022B02,
+ 0x002D901, 0x01F6F02, 0x00DDA01, 0x0015D01, 0x0047701, 0x030F701, 0x0FD3D01, 0x0FE7B01,
+ 0x000CE01, 0x0023102, 0x0FB3001, 0x110AB01, 0x0228501, 0x0334001, 0x01E5801, 0x004F301,
+ 0x001F801, 0x01F7101, 0x0017401, 0x001C601, 0x0040301, 0x01E4B01, 0x000D401, 0x01F9802,
+ 0x004D601, 0x01F1101, 0x030BE01, 0x0FE7901, 0x001E102, 0x000DD01, 0x000F101, 0x01EA001,
+ 0x002DA01, 0x01F3E02, 0x022AD01, 0x01F8403, 0x0045C01, 0x01EF401, 0x01E3601, 0x006D301,
+ 0x01E6301, 0x004F401, 0x01E3101, 0x01E8001, 0x01FAD03, 0x01F4302, 0x0011401, 0x0016F01,
+ 0x01F1202, 0x0013901, 0x01F9E03, 0x00A3301, 0x01EA502, 0x0011801, 0x01F0E02, 0x01E9101,
+ 0x0203E01, 0x01E5B01, 0x000C401, 0x0021E01, 0x0017C01, 0x0226001, 0x0FEF701, 0x01F8802,
+ 0x0334E01, 0x01F2502, 0x01FD302, 0x0095D01, 0x0038C01, 0x0012F01, 0x0040001, 0x01E7C01,
+ 0x0017201, 0x0FB4D01, 0x01E6702, 0x00F7502, 0x01E0201, 0x0045701, 0x000D901, 0x01F0001,
+ 0x01E1D02, 0x000C501, 0x0FCF302, 0x0333B01, 0x000B401, 0x01FBD01, 0x030C001, 0x004F801,
+ 0x022AF01, 0x004D101, 0x001F901, 0x01E0C01, 0x0FE7001, 0x000EE01, 0x01EDD02, 0x01E7D01,
+ 0x01F7801, 0x1D15E01, 0x01EB502, 0x0FB4401, 0x000E901, 0x022E201, 0x001EB01, 0x0015A01,
+ 0x01F6702, 0x0219B01, 0x002DD01, 0x0017D01, 0x01E2101, 0x0022C02, 0x01E1001, 0x01E5002,
+ 0x01E0601, 0x01E3001, 0x01F7601, 0x001D802, 0x0095E01, 0x0045001, 0x004F101, 0x01FDD02,
+ 0x0307301, 0x004EB01, 0x01E8E01, 0x1D1BE02, 0x0020501, 0x000DC01, 0x0FE8601, 0x01F7401,
+ 0x0FE4901, 0x01FA703, 0x030B201, 0x01E5501, 0x01FF301, 0x01E4901, 0x01E5E01, 0x01EB901,
+ 0x01E0D01, 0x01F7C01, 0x01F5001, 0x0FBB001, 0x01ED002, 0x0FB3C01, 0x0222401, 0x003AA01,
+ 0x003AF01, 0x01FB301, 0x01ECA01, 0x01E4C02, 0x0015701, 0x0040C01, 0x01EDA02, 0x01E3401,
+ 0x01E1301, 0x01F0502, 0x0020C01, 0x01FEE02, 0x01F5B02, 0x004F901, 0x01FD601, 0x0FB2E01,
+ 0x01E4501, 0x000ED01, 0x0045E01, 0x01FE901, 0x0020001, 0x0012101, 0x01E8F01, 0x0013601,
+ 0x0020301, 0x1D16302, 0x001E801, 0x001F401, 0x01E8A01, 0x01FC102, 0x01EDB02, 0x01F2D02,
+ 0x0016301, 0x01F2801, 0x000E201, 0x000C201, 0x01EF901, 0x01FBC01, 0x01FB801, 0x021CF01,
+ 0x009DF01, 0x01E3D01, 0x01EB602, 0x01F8603, 0x0022A02, 0x0010501, 0x01FC801, 0x0040E01,
+ 0x0037A01, 0x01F8B03, 0x01F4A02, 0x01F0D02, 0x01ED102, 0x01E8C01, 0x01EB102, 0x01E3B01,
+ 0x0FC5B01, 0x021CE01, 0x01E3E01, 0x004DD01, 0x01E4401, 0x01F6502, 0x0FEF601, 0x004F201,
+ 0x030F801, 0x002D801, 0x01EC801, 0x01EE701, 0x000FD01, 0x01ED702, 0x01EBC01, 0x0011501,
+ 0x01F5F02, 0x0FE7801, 0x01E7802, 0x1D16002, 0x0038901, 0x1D1BB01, 0x0010701, 0x0306901,
+ 0x0FB4301, 0x0016C01, 0x01EF501, 0x01FB001, 0x01F3801, 0x0228801, 0x01FDE02, 0x0226F01,
+ 0x0FE8501, 0x0FE7201, 0x003CD01, 0x0021801, 0x0013501, 0x01F8203, 0x0020901, 0x01FD101,
+ 0x000F201, 0x0021101, 0x0014601, 0x1D16202, 0x01E5F01, 0x004DB01, 0x0015F01, 0x02ADC01,
+ 0x0095B01, 0x01F6001, 0x01FDB01, 0x0FB4E01, 0x0228901, 0x01E2301, 0x0305601, 0x022AC01,
+ 0x01E7301, 0x01E7A02, 0x01E7401, 0x01FBA01, 0x001FE01, 0x01EB302, 0x01F2402, 0x0FD3C01,
+ 0x01E7201, 0x0038401, 0x0012E01, 0x0013701, 0x000EF01, 0x01E0101, 0x021AE01, 0x0333201,
+ 0x000DA01, 0x001DB02, 0x001F001, 0x01E5202, 0x0307D01, 0x000F301, 0x001EA01, 0x0012D01,
+ 0x01ED802, 0x01F2001, 0x00B5D01, 0x0021901, 0x01E1502, 0x0FE4A01, 0x01FD801, 0x01F1C02,
+ 0x0020201, 0x000C801, 0x01EEB02, 0x01E2401, 0x004F501, 0x01FAC03, 0x030DC01, 0x022AE01,
+ 0x030F901, 0x01E2A01, 0x01EF002, 0x01E0701, 0x01F3D02, 0x01FE001, 0x01F7201, 0x01ED402,
+ 0x001FC01, 0x0012001, 0x01F7701, 0x0304C01, 0x01E4201, 0x0062201, 0x004E301, 0x01FEB01,
+ 0x01ECD01, 0x01FC402, 0x01E8501, 0x01F5202, 0x01F6D02, 0x01EA301, 0x030C201, 0x0095A01,
+ 0x01F3202, 0x01F8102, 0x01E2801, 0x006C201, 0x01E9901, 0x0017101, 0x01F2A02, 0x01ED602,
+ 0x001E601, 0x01F3001, 0x01F3F02, 0x000C001, 0x000DB01, 0x000F601, 0x1D16402, 0x01EBA01,
+ 0x0015901, 0x0331E01, 0x000C901, 0x030C901, 0x0FC5D01, 0x01F8A03, 0x0020401, 0x01E1901,
+ 0x01F4D02, 0x01F2C02, 0x01FF901, 0x0013401, 0x01EB202, 0x0015C01, 0x01E6F01, 0x0FE8301,
+ 0x001D401, 0x001F501, 0x01F8D03, 0x0093401, 0x0041901, 0x0038801, 0x009DD01, 0x01EBE02,
+ 0x01EC602, 0x01F5702, 0x01E6101, 0x0010A01, 0x002DB01, 0x001C501, 0x001E002, 0x0014701,
+ 0x0306701, 0x0012C01, 0x022E101, 0x01F4202, 0x004DA01, 0x0023301, 0x01E2601, 0x01F1302,
+ 0x01F8C03, 0x022EC01, 0x0062501, 0x01F5D02, 0x01E8B01, 0x1F21301, 0x0010101, 0x01ED502,
+ 0x01FE202, 0x003AD01, 0x000D201, 0x01FF601, 0x001E901, 0x000C101, 0x01F1001, 0x01E9701,
+ 0x01E0301, 0x030B601, 0x01E1A01, 0x001CE01, 0x001B001, 0x0011F01, 0x0022701, 0x01E3501,
+ 0x01F0602, 0x001E701, 0x01ED302, 0x01FFD01, 0x01E2D01, 0x0092901, 0x01E8301, 0x0062301,
+ 0x01E6E01, 0x0306201, 0x0021501, 0x0228101, 0x000CA01, 0x01E5701, 0x01FDA01, 0x01F4502,
+ 0x0FE8101, 0x01E5302, 0x0022601, 0x000E501, 0x0FE8A01, 0x01E9001, 0x022E001, 0x01F9603,
+ 0x01EA602, 0x001D902, 0x01F2901, 0x01F5402, 0x0FB2B01, 0x01FD702, 0x001D502, 0x0FF9F01,
+ 0x0FE7101, 0x001E301, 0x000CF01, 0x01FCA01, 0x01F8E03, 0x01E4701, 0x000AF01, 0x0FE7E01,
+ 0x0FE7401, 0x0FB2A01, 0x01F7501, 0x0334B01, 0x001D201, 0x022EA01, 0x001CF01, 0x01E6502,
+ 0x002DC01, 0x01F3C02, 0x0307A01, 0x001DF02, 0x001EE01, 0x0305001, 0x01E7902, 0x00DDD01,
+ 0x01EA802, 0x0021201, 0x01E2F02, 0x0FE4C01, 0x0040D01, 0x01F4101, 0x0023201, 0x01E8801,
+ 0x01F2302, 0x01EED02, 0x01F0C02, 0x0FB4601, 0x01F6801, 0x0062401, 0x01E2C01, 0x01ECB01,
+ 0x0FE8701, 0x01E5901, 0x01E0A01, 0x01E1F01, 0x00A5A01, 0x0017701, 0x01E5401, 0x0FB2F01,
+ 0x01FAE03, 0x00A3601, 0x01ECC01, 0x0FB3501, 0x000D301, 0x01EF601, 0x01F8303, 0x0FEFA01,
+ 0x0095F01, 0x01FFA01, 0x01E3301, 0x01E1801, 0x0FB4B01, 0x01E7E01, 0x00A5E01, 0x0330701,
+ 0x01E6D01, 0x030FA01, 0x000EC01, 0x01F0202, 0x0038601, 0x01F5101, 0x01F1901, 0x01F1502,
+ 0x0016001, 0x01E4601, 0x0038A01, 0x0FC9001, 0x0016901, 0x01F1801, 0x0220C01, 0x01E0B01,
+ 0x030C501, 0x0020D01, 0x01F9B03, 0x0021301, 0x0010601, 0x0FE7A01, 0x00F7801, 0x0013A01,
+ 0x01E6B01, 0x01FE501, 0x0012801, 0x001FD01, 0x01E6902, 0x0FE8201, 0x01F4901, 0x01E3201,
+ 0x01E0001, 0x1109C01, 0x01F7B01, 0x0FE8801, 0x0FE4B01, 0x0010B01, 0x000D501, 0x01F6402,
+ 0x001CD01, 0x01E1702, 0x01FA503, 0x01FD901, 0x01EC402, 0x004E601, 0x0014801, 0x001D101,
+ 0x01F9902, 0x01F6B02, 0x01F8002, 0x0FBA501, 0x01EC702, 0x01F6602, 0x0015001, 0x0212B01,
+ 0x0013E01, 0x01EDC02, 0x01EA702, 0x0023002, 0x004C101, 0x0016D01, 0x01F0702, 0x01F2B02,
+ 0x0012501, 0x01F4C02, 0x030D001, 0x0305E01, 0x0010201, 0x006C001, 0x0309401, 0x0012901,
+ 0x0016101, 0x0224701, 0x0011901, 0x0FFE301, 0x01E0501, 0x105C901, 0x1D1BC01, 0x0307001,
+ 0x0017E01, 0x01FA603, 0x01FA102, 0x01E9401, 0x0309B01, 0x0022801, 0x01E0F01, 0x0016501,
+ 0x01EC302, 0x0020801, 0x000CC01, 0x01F9002, 0x003CC01, 0x01FC601, 0x01EE302, 0x01E4A01,
+ 0x003CE01, 0x0095C01, 0x01FF702, 0x001D702, 0x0227101, 0x01EE102, 0x01E7101, 0x000FB01,
+ 0x0095801, 0x01EAA02, 0x000F501, 0x1D1BF02, 0x0011B01, 0x01F7D01, 0x022EB01, 0x0013D01,
+ 0x01F0801, 0x0014F01, 0x01F3602, 0x0FB3101, 0x01FE401, 0x01F9503, 0x0014301, 0x0015801,
+ 0x01EE601, 0x0FE7C01, 0x01FDF02, 0x01E0401, 0x01E7001, 0x0331001, 0x000F401, 0x0FE7701,
+ 0x01E1402, 0x0FE7601, 0x01E3802, 0x030B401, 0x01F3402, 0x0226D01, 0x000FF01, 0x01E8601,
+ 0x0014501, 0x0013001, 0x030D901, 0x001DC02, 0x01EF201, 0x0FBA401, 0x01FF402, 0x01E9501,
+ 0x030AE01, 0x0010901, 0x0219A01, 0x000D101,
];
-
-
diff --git a/crates/unicode-normalization/src/test.rs b/crates/unicode-normalization/src/test.rs
index 4c37149..cd1d958 100644
--- a/crates/unicode-normalization/src/test.rs
+++ b/crates/unicode-normalization/src/test.rs
@@ -13,7 +13,7 @@
use core::char;
#[cfg(not(feature = "std"))]
-use crate::no_std_prelude::*;
+use alloc::string::{String, ToString};
#[test]
fn test_nfd() {
diff --git a/crates/uniffi_checksum_derive/.android-checksum.json b/crates/uniffi_checksum_derive/.android-checksum.json
new file mode 100644
index 0000000..afe1c96
--- /dev/null
+++ b/crates/uniffi_checksum_derive/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"cargo_embargo.json":"aa45a963da01d3f018be316cd5b7646a5b413ce2611c5218f2914d2e8a9efd0e","METADATA":"3cc77205d0eb0c55c3803c9db6b0be6c67cac8c972feb6e312d57c25e73b33e9","README.md":"bd32a92f1fa622e318f77b7ddfff8737bdbbe2e0df26dc9f1fde0705f3a9c18d","LICENSE":"eb272adec43829624ef944827cee5edc5896c80ceaccea3e8e471dadeaeee408","Cargo.toml":"d93ef126d7c68f76635059863633ffa5710ababa4b3c118003205b64f45e1d7b",".cargo-checksum.json":"07326c062a9496cbb64cbf846bf79f0346f34f8c2fb40d1ade0bb56be70e45f6","src/lib.rs":"aada73e8c5d693e82160d6712fb6ce86a3c158ee5527abe84ecb400f649b772e","Android.bp":"0ea0d8b9a9025021c0755e3b7fc1f970255f929c7baf3d57827df3c88129b08e","patches/LICENSE.patch":"cfb7d0c0c947397e0cf46698509020438a9a3305875ecf9b75fafeb30815ac80","MODULE_LICENSE_MPL":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a"}}
\ No newline at end of file
diff --git a/crates/uniffi_checksum_derive/.cargo-checksum.json b/crates/uniffi_checksum_derive/.cargo-checksum.json
index 5e21137..7eab913 100644
--- a/crates/uniffi_checksum_derive/.cargo-checksum.json
+++ b/crates/uniffi_checksum_derive/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"da89504b9007c2a1ea0e498a2e8ec6baeb0ff7391363cd9007e383247637792c","README.md":"37c1af00ec81a9f1bc206ab3578356e5f9ad4077dc46dd1bb623d81d804948b8","src/lib.rs":"44d2e2c595b14d33d16c71dfe4ef42ad0b9e010a878ee2ec49c2e929d60275ba"},"package":"ae7e5a6c33b1dec3f255f57ec0b6af0f0b2bb3021868be1d5eec7a38e2905ebc"}
\ No newline at end of file
+{"files":{"Cargo.toml":"ac014f3069d42e6b486aae8a602cf023c36661d123364574c8307cb6825b8abb","README.md":"1163018760cf0243c8f6fc8a497852f4357db23c22e48fe243abd27b500bc95d","src/lib.rs":"3301ac9be2750c348f677c1fcf721daa37945901434d6cd6958d7926c987e4ea"},"package":"802d2051a700e3ec894c79f80d2705b69d85844dafbbe5d1a92776f8f48b563a"}
\ No newline at end of file
diff --git a/crates/uniffi_checksum_derive/Android.bp b/crates/uniffi_checksum_derive/Android.bp
index eaf0d9c..2eff054 100644
--- a/crates/uniffi_checksum_derive/Android.bp
+++ b/crates/uniffi_checksum_derive/Android.bp
@@ -17,7 +17,7 @@
name: "libuniffi_checksum_derive",
crate_name: "uniffi_checksum_derive",
cargo_env_compat: true,
- cargo_pkg_version: "0.27.1",
+ cargo_pkg_version: "0.28.3",
crate_root: "src/lib.rs",
edition: "2021",
features: ["default"],
diff --git a/crates/uniffi_checksum_derive/Cargo.toml b/crates/uniffi_checksum_derive/Cargo.toml
index 681c884..a25112f 100644
--- a/crates/uniffi_checksum_derive/Cargo.toml
+++ b/crates/uniffi_checksum_derive/Cargo.toml
@@ -12,7 +12,7 @@
[package]
edition = "2021"
name = "uniffi_checksum_derive"
-version = "0.27.1"
+version = "0.28.3"
authors = ["Firefox Sync Team <[email protected]>"]
description = "a multi-language bindings generator for rust (checksum custom derive)"
homepage = "https://mozilla.github.io/uniffi-rs"
diff --git a/crates/uniffi_checksum_derive/METADATA b/crates/uniffi_checksum_derive/METADATA
index d9804c5..8f57a2f 100644
--- a/crates/uniffi_checksum_derive/METADATA
+++ b/crates/uniffi_checksum_derive/METADATA
@@ -1,17 +1,17 @@
name: "uniffi_checksum_derive"
description: "a multi-language bindings generator for rust (checksum custom derive)"
third_party {
- version: "0.27.1"
+ version: "0.28.3"
license_type: RECIPROCAL
last_upgrade_date {
year: 2024
- month: 5
- day: 6
+ month: 12
+ day: 20
}
homepage: "https://crates.io/crates/uniffi_checksum_derive"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/uniffi_checksum_derive/uniffi_checksum_derive-0.27.1.crate"
- version: "0.27.1"
+ value: "https://static.crates.io/crates/uniffi_checksum_derive/uniffi_checksum_derive-0.28.3.crate"
+ version: "0.28.3"
}
}
diff --git a/crates/uniffi_checksum_derive/README.md b/crates/uniffi_checksum_derive/README.md
index 64ac348..50348a9 100644
--- a/crates/uniffi_checksum_derive/README.md
+++ b/crates/uniffi_checksum_derive/README.md
@@ -43,8 +43,7 @@
Other tools we know of which try and solve a similarly shaped problem are:
-* [Diplomat](https://github.com/rust-diplomat/diplomat/) - see our [writeup of
- the different approach taken by that tool](docs/diplomat-and-macros.md)
+* [Diplomat](https://github.com/rust-diplomat/diplomat/), which is focused more on C/C++ interop.
* [Interoptopus](https://github.com/ralfbiedert/interoptopus/)
(Please open a PR if you think other tools should be listed!)
diff --git a/crates/uniffi_checksum_derive/src/lib.rs b/crates/uniffi_checksum_derive/src/lib.rs
index e600982..449183d 100644
--- a/crates/uniffi_checksum_derive/src/lib.rs
+++ b/crates/uniffi_checksum_derive/src/lib.rs
@@ -108,14 +108,13 @@
.fields
.iter()
.enumerate()
- .filter_map(|(num, field)| {
- (!has_ignore_attribute(&field.attrs)).then(|| match field.ident.as_ref() {
- Some(ident) => quote! { Checksum::checksum(&self.#ident, state); },
- None => {
- let i = Index::from(num);
- quote! { Checksum::checksum(&self.#i, state); }
- }
- })
+ .filter(|&(_num, field)| (!has_ignore_attribute(&field.attrs)))
+ .map(|(num, field)| match field.ident.as_ref() {
+ Some(ident) => quote! { Checksum::checksum(&self.#ident, state); },
+ None => {
+ let i = Index::from(num);
+ quote! { Checksum::checksum(&self.#i, state); }
+ }
});
quote! {
#(#stmts)*
diff --git a/crates/zerocopy/.android-checksum.json b/crates/zerocopy/.android-checksum.json
index eb31fe3..60fd85e 100644
--- a/crates/zerocopy/.android-checksum.json
+++ b/crates/zerocopy/.android-checksum.json
@@ -1 +1 @@
-{"package":null,"files":{"tests/ui-msrv/try_transmute_ref-alignment-increase.rs":"4401c8ae85558b388627f60a60960b33bf4df8eae28437ffa4d20bb668f47036","tests/ui-stable/transmute-size-decrease.rs":"ef04ab5d6ed074c0d0ab0f979fba4b5a580e1ebeab431b7a432a4348194a67b9","tests/ui-nightly/try_transmute_ref-src-not-immutable-intobytes.rs":"da8b40f0ffb13a891a0a3a76217532da81e7b71d5c6f9c1ebe78cff5c9fcc177","tests/ui-nightly/diagnostic-not-implemented-issue-1296.stderr":"668d4470b770ebb67f3afa1faadff16234a6fd68961aa4732eb60d3e24a5d845","tests/ui-stable/transmute-ref-src-not-nocell.rs":"cdd5eeb40f42963e7bec7b45283a53f4322df4a7068398089d0ddc18402ec0a9","tests/ui-stable/transmute-mut-src-dst-not-references.stderr":"a584f368fa4929a88f51cb67003cb2b15fdbe109e393606eea70cf1e0b878e32","tests/ui-stable/transmute-ref-src-not-nocell.stderr":"9179263979f422b52d1f9c999328464b7e4cee3be49f3f358d4783082544a34a","tests/ui-stable/try_transmute_mut-dst-not-tryfrombytes.rs":"aeb4371e28787b0a2e75e616441a55129cd299d9681a81095c72e6e7f7b9512a","tests/ui-nightly/transmute-size-increase.rs":"d57c9f23ba23313236a84809b6a1e1d0fdfc67c1d64db8143f5762671eb68ca9","tests/ui-nightly/transmute-dst-not-frombytes.stderr":"27131268c9a6d1908bd399e7c02b0e54e12f00f56ef6f45e4fb007a2e2f814d4","tests/ui-nightly/transmute-ref-dst-not-a-reference.rs":"6829c16de2e2dcae944f846235e2f76fca742a24c6970559fc4d10bbf214f96b","tests/ui-nightly/try_transmute-size-increase.stderr":"3e21640a804b7ab375eff3c3b8f9d802b2a4da4551b29dd83489faedb021b54a","tests/ui-msrv/transmute-ref-dst-not-a-reference.rs":"6829c16de2e2dcae944f846235e2f76fca742a24c6970559fc4d10bbf214f96b","tests/ui-nightly/try_transmute_mut-size-decrease.rs":"35886c88a716734e77c05775d5a0766e9b637b9ed4cc76a9cfbba2aa262e1d13","tests/ui-stable/diagnostic-not-implemented-try-from-bytes.rs":"272d0a53001ba1145b6389077fa9d4b494d56651088ed1e929b7591ca4d76048","ci/release_crate_version.sh":"eead8dd30d3b86dc2a0821deedaa99e32d25373cd6e7f935ac7f9de6c1938c84","tests/ui-stable/transmute-src-not-intobytes.rs":"e39129733ec5406376c1cd79a0eb2b66d89ee89e0cd629cf8ba5c8c6fe0c0cd1","tests/ui-msrv/try_transmute_ref-dst-not-immutable-tryfrombytes.rs":"9308e38dd814b2bab53b5912207cc7621635a5c547e621f947ba0d66e2601730","tests/ui-nightly/try_transmute_mut-alignment-increase.rs":"6f16a7e4753153e84581902d3d42fc4f0cb2d7ef4b01b71bcaccb0d434dc0f9c","tests/ui-nightly/transmute-mut-src-generic.stderr":"d34b17cc3c86a3b9ade3f48979091690f7628ac1c5a741d52cfe751db0809abb","tests/ui-stable/transmute-mut-src-dst-generic.stderr":"13cf4024744134f35e2dbd75921023a0d9f89b7ba16005b4b2b15ac35d9b7003","rustfmt.toml":"5c169706acf81062608764052838eafc68fe950d12d8ccda6013af5b446d63fe","tests/ui-msrv/transmute-mut-src-immutable.rs":"1cb591944d85bb526f182fdc476a0ba965dade3dfbaac8a29a648045d9ac5a21","tests/ui-nightly/transmute-ref-src-unsized.rs":"cbb75ec9eb3729442f57afc55758f4b638687ed0677e58a5e784b5f53e6a82ee","tests/ui-msrv/transmute-mut-dst-generic.rs":"41e6addb7da9fde8c3f93182b3cc484d3a2b5c1cfc077ecc66c0a6f27e22f647","tests/ui-stable/transmute-mut-size-decrease.rs":"9ab9c03ccf1546957e3412911564a9dad6f0940d55c5285945548f76186fec56","tests/ui-stable/try_transmute-size-increase.rs":"5b085b4eb85a46d70ce03799652ba49bc4d51e861e821eddebd94919bcb0ad30","tests/ui-nightly/transmute-ref-dst-not-frombytes.stderr":"569b2104c13b482bab2733aab462e05d0b7c59b5daae2fefdb8a4a1aa32a6a11","tests/ui-stable/transmute-ref-dst-unsized.stderr":"4464ba575fdef73a3e673f45f290bff488fc393703074cee4d47ebbc01c164d7","src/util/macro_util.rs":"10df86d960f9f051200c4b05d70fda5eab07a312b28e90634bf455875b7d02d6","tests/ui-nightly/transmute-mut-dst-unsized.rs":"5c040c3eec4b360b4b65a948bcfe1220567cf5bb1939eeefd5bf200cd73d3b96","tests/ui-nightly/transmute-ref-src-dst-generic.rs":"2d25888552996fd964461247b07cf1a5974e6fc0dffed2464b795bdf56e7e518","tests/ui-nightly/include_value_not_from_bytes.rs":"a08295e6ec9c4fc6fe0f6a90d7227acb444ce4680e64efb2c53c4ffbd7029dba","tests/ui-nightly/transmute-mut-alignment-increase.stderr":"6953ae0f33bcd9e911b263d56c3a82702ac22deee81c854e23d79b5edf26db4c","tests/ui-nightly/transmute-mut-src-dst-not-references.rs":"cbb01caa49218ce6e4914b03ad1b8bb99a648d7867152577add772de9f0a705e","tests/ui-nightly/transmute-mut-src-not-frombytes.rs":"049b386c8bf296d45e8a1a1f020a763df4ea480a3e1027ccc8f6c31b05889c79","tests/ui-msrv/try_transmute-size-decrease.stderr":"d42b2c8fdd44d6b5172d5bb507b8c45bf44b3feb98501940d7e37d16b07aebca","tests/ui-msrv/transmute-mut-illegal-lifetime.stderr":"914c16f19c5ad3418e08e3701fb693f4dae1ed844dd2d357a4d861d3df8704c3","tests/ui-nightly/transmute-mut-dst-not-frombytes.rs":"f51acc153ec92e2ac81b383e8ae662dd8ab253c0a62cd9d846f6d1e2ed76f5a2","CHANGELOG.md":"e2b2be60932270ea30707700e553a050b044ffbb6303df84feaad6a729aebc07","tests/ui-nightly/transmute-ref-dst-mutable.rs":"4283c537172971fda2c3c529c0971bbac66a4ac844bb6f0356f24284d4084b77","tests/ui-msrv/transmute-ref-dst-mutable.rs":"4283c537172971fda2c3c529c0971bbac66a4ac844bb6f0356f24284d4084b77","tests/trybuild.rs":"921ec22964a75a8354b4c94f95093b8f854655b71251d7858f583708511f7d77","tests/ui-msrv/try_transmute_ref-size-increase.stderr":"6898694893e788813173aeade8233ee48ad3b8eda57cc9b412ebc06af586d129","tests/ui-nightly/transmute-ref-dst-not-nocell.stderr":"962c54606c4b7f7e3c96b88efeb713c31881d43e8bf92be4fcd6e6c17df1ea05","tests/ui-nightly/transmute-ptr-to-usize.rs":"d8aabb58133988be7c282ec9771906b8f199418e69762c92ffc167305890d353","tests/ui-msrv/transmute-ref-src-not-intobytes.rs":"dd932cdde770d1ad0c0e5c147cb53aebdbfe6a023a6873e807f2429a14bc654d","tests/ui-nightly/transmute-ref-src-not-intobytes.stderr":"b551efcfe51676842fbcdfa9cbc7044470cbe1289adcd731f486ebaadf4d47aa","tests/ui-msrv/transmute-mut-src-not-frombytes.stderr":"034da485616c2a7430868b6827bcef2e5c9c39fe4c89ac577eb58f4dc63091d9","tests/ui-nightly/transmute-mut-src-not-a-reference.stderr":"d17b2875a1dc1d904f8dbb6001dad080100b653673f5cc6ee192825666400fe9","tests/ui-msrv/try_transmute-src-not-intobytes.stderr":"20985ea4dbaa60825db12cb0db36d3919175ed046c8dd786ab08612bec91e24a","tests/ui-stable/try_transmute_ref-size-decrease.rs":"084d0983a7855e3d1eb8a08b0ca9838b1e0b8a07fc88d867a2a7b4519f1057ab","tests/ui-stable/transmute-mut-src-dst-unsized.stderr":"ce6a6fc09bf90254871bae8f67e008031ef46c2d3ea81b38c140ab6fd6c8b1df","tests/ui-stable/transmute-ref-dst-mutable.stderr":"feb9f6b46c17d408830fda2f2a9a2498e55cac8f2f29c024704e9ab438de3aad","tests/ui-nightly/transmute-ref-src-not-a-reference.stderr":"0018c74a5285cafdfd06d4453abec66692bd39f5926b4e8e25f9592c8c3adc12","tests/ui-msrv/try_transmute_mut-size-decrease.stderr":"60c65a6a4062ddf51aa878d60ed048d2580bc0da0085281c4cf1d7b0bafd451c","tests/ui-stable/transmute-mut-const.rs":"726368515b62c5a4e8c54c91239f28f77ccee01eb384893ac7797e7f47189455","tests/ui-stable/transmute-mut-src-dst-generic.rs":"880430db77b417304756e0244ac8187c4392a9b1887bdb9683246376a7a557a0","tests/ui-nightly/try_transmute_ref-dst-mutable.stderr":"3ecd55adfd0ebd1d1f91444cd41776e052e1bf85d0f17dca454fd1b5889f03d5","tests/ui-msrv/try_transmute_mut-size-increase.stderr":"4eda49b143d847bc6679d478edd985bfc470b1f7a81b443aa7f4cc60087cf524","tests/ui-nightly/transmute-ref-src-dst-not-references.rs":"b44e925cca270c67fc7f9c4dc18207acd90f77231f8cf79ec965b592586a890f","tests/ui-msrv/transmute-mut-src-unsized.rs":"128a9f55a7b83c98e3bfafdd6a714e60ff545a322cecdef81f8702da3b1e3eb9","tests/ui-msrv/include_value_wrong_size.stderr":"7f501791ea006e3df03d9b3e0dcccc46f5d9bdbb5c64fcaaa31d126311318bb4","tests/ui-msrv/transmute-ref-dst-not-frombytes.rs":"a989f7f680cd3072ee1a0dd631fab02caa30c64c53ced9b5719d79dbcfbcf97f","tests/ui-stable/transmute-mut-size-increase.stderr":"b099797a8b28ac074ba077f06ccb5b1f8d155ea34d2ccb9821b8aaf7f74cbc49","tests/ui-msrv/transmute-ref-dst-not-nocell.rs":"51ecd363ef66bbcf0d8daa3376667b8a9ad35b61d78765d502644c1183cbdf1c","tests/ui-msrv/try_transmute_ref-alignment-increase.stderr":"94c5c47b77019bf307e009b38589317eb3308ba8b6706b920d5fcadf550a3b8e","tests/ui-nightly/diagnostic-not-implemented-unaligned.rs":"2966d1c424ddade377afc988dbf2bbc323011d222784a0869c6f804eba4d6cbc","tests/ui-msrv/diagnostic-not-implemented-unaligned.stderr":"c8e633af41e48e2d7d2c89629b01a00a8019bc15726b03e2202065484a82b55e","tests/ui-msrv/transmute-src-not-intobytes.rs":"e39129733ec5406376c1cd79a0eb2b66d89ee89e0cd629cf8ba5c8c6fe0c0cd1","tests/ui-msrv/transmute-mut-dst-unsized.rs":"5c040c3eec4b360b4b65a948bcfe1220567cf5bb1939eeefd5bf200cd73d3b96","tests/ui-stable/transmute-mut-src-not-a-reference.rs":"a854a05999caebc97a08e37d037c4905a859e3a1f4f6d5e5803ff03af0bb5470","tests/ui-stable/transmute-mut-src-unsized.rs":"128a9f55a7b83c98e3bfafdd6a714e60ff545a322cecdef81f8702da3b1e3eb9","tests/ui-msrv/include_value_wrong_size.rs":"4993458b5a5df4dabf7668203d30f01b756dbce7b27e2bd3fc6998987d673fcd","tests/ui-msrv/transmute-ref-src-dst-not-references.stderr":"b58f31a729ee4a90f8c30ff950c02d49d6ca340d882b431f7764120b0ff8d829","githooks/pre-push":"8f58f384a52f14baaae2cb06b687a0feccfc5df24d0ae817823b1bbc4d78dbf5","tests/ui-stable/try_transmute_ref-src-not-immutable-intobytes.stderr":"c39785a948572187b7202282400095230656c1cccace9da3219184f20e3a6b8c","tests/ui-stable/transmute-dst-not-frombytes.rs":"532de6fb9bb6df56a8621a5f1abb4c58d957650461d266a59581deb36ee77316","tests/ui-msrv/diagnostic-not-implemented-issue-1296.stderr":"2d7be324e42e09c9e6fce03d2b66cce55a2ee69e5a0aa07de0f71ec18baed1ba","tests/ui-stable/diagnostic-not-implemented-from-bytes.stderr":"00d55d5070a77d60947a488bc88be730d16ec1f0f14f5b01ac8bbd69d1a1d4dc","tests/ui-nightly/transmute-ref-alignment-increase.stderr":"db8bc6a0ac55ed87f35ddeb22965c7259b6a076d7616b56fe4fa0db4e201cd1b","tests/ui-stable/transmute-mut-dst-generic.stderr":"bd6e980582dbdacc490fbe7fa43c388b6fa6a6da60d911f08b77c316295f665d","tests/ui-nightly/invalid-impls/invalid-impls.rs":"d135ef15bca8d0e7b2c3bf1596c57dbf4b5a98923089b4e5c060a830dd76ff3e","tests/ui-nightly/transmute-ref-src-generic.stderr":"6df8948f70d9677198b6065cd8f62d5cd652f00bda556a9d88ed0d22fd24f772","tests/ui-nightly/transmute-mut-dst-unsized.stderr":"896a128d004daf46732047d051e3240a6449f863b151027f3733626bd9336c75","tests/ui-stable/transmute-ref-dst-not-a-reference.stderr":"155e4b584557ec874e926e64ebe136ee7702b35b6f54a21338f96c481d34ee02","ci/check_readme.sh":"7360da9fef9a0b97d81badb52016f78c2e0e5e2960229e0696956ef566626e54","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","tests/ui-nightly/transmute-ref-size-increase.stderr":"744c7b543f417246d7fde6dd5680c4f293e577a6ce7b005742ece6ecba98d552","tests/ui-nightly/transmute-ref-illegal-lifetime.rs":"771b734779b00309b7ab112891e5fa76af2d7b5a822b4db2f34b3edebf1f7b9d","tests/ui-nightly/diagnostic-not-implemented-try-from-bytes.stderr":"ccf8320bbd97bd44406934ee837a84790ab8f05822f87f5f3ed816d047cdf9c8","tests/ui-msrv/transmute-dst-not-frombytes.stderr":"84e2b67c3c9f73b7d561c97a91048ae9eb91f5e2737b1723bbe6ae1ba05cd9d4","tests/ui-msrv/transmute-size-increase.rs":"d57c9f23ba23313236a84809b6a1e1d0fdfc67c1d64db8143f5762671eb68ca9","src/util/macros.rs":"28b6b8da66bed57374e874511e5b3497c53d58ea85e82bd502bdee360cb89e66","tests/ui-nightly/transmute-ref-dst-unsized.rs":"e3beead5f1b51a62ad8974c024fb0db3ed0611c05e5ab05a65ee284e150b3ff8","tests/ui-nightly/transmute-mut-src-immutable.rs":"1cb591944d85bb526f182fdc476a0ba965dade3dfbaac8a29a648045d9ac5a21","tests/ui-nightly/transmute-mut-src-unsized.rs":"128a9f55a7b83c98e3bfafdd6a714e60ff545a322cecdef81f8702da3b1e3eb9","cargo.sh":"dac54d3a35b77498b165a902b948ab1a4e61ce6d80cdb4fb1cb99b061554f9b1","tests/ui-nightly/transmute-mut-src-not-intobytes.stderr":"77e790c7036ea63560945d06816232c6e04b864a5d16b6a19418dd984bd099b9","tests/ui-msrv/transmute-ref-dst-not-a-reference.stderr":"b94916f2a4fddd7280cfc4114be176479ecefd8030891791d38760a475e688f7","tests/ui-stable/diagnostic-not-implemented-known-layout.stderr":"c6c580eb089d6b3e72f84be6af84727cc8db2f8d6e9cc18baa8542f31d89bd8d","tests/ui-msrv/diagnostic-not-implemented-issue-1296.rs":"2f603de3cd80439cf2d50bb36fcc5b9d40c3bd06475273e6f135d9da335866d9","tests/ui-nightly/transmute-ref-src-dst-generic.stderr":"4b8d7f7106f4c0a1e527d3bbf6879104d87aa9d17e53c7304b6c27b3480fbd7d","tests/ui-msrv/try_transmute-size-increase.stderr":"0ef17b0ea081da61831dfccfdc47532278955eaffc1ba2981cec7333d93b8f93","tests/ui-msrv/try_transmute_mut-src-not-intobytes.stderr":"13aed6a3078e732fc281710798e0f5440bfc2f3516f237d8e1164904f756a977","tests/ui-nightly/max-align.rs":"cdca9a14834aa08b1dea1a59baddd126a77cb7dffe9b90c9f9feb6b490c31594","tests/ui-msrv/max-align.rs":"cdca9a14834aa08b1dea1a59baddd126a77cb7dffe9b90c9f9feb6b490c31594","tests/ui-msrv/try_transmute_mut-dst-not-tryfrombytes.rs":"aeb4371e28787b0a2e75e616441a55129cd299d9681a81095c72e6e7f7b9512a","tests/ui-stable/transmute-mut-illegal-lifetime.rs":"cd95f98b5a7f43c9b9f20d53bedbfa0cc3d8b6ba2af182abf6a2098b31dc6c6e","src/byteorder.rs":"6dff8fb8c04fb054431eee5a9ae1fce1746b840edd26a3bd98e59988b85b823a","tests/ui-stable/transmute-ref-src-dst-generic.rs":"2d25888552996fd964461247b07cf1a5974e6fc0dffed2464b795bdf56e7e518","tests/ui-msrv/diagnostic-not-implemented-unaligned.rs":"2966d1c424ddade377afc988dbf2bbc323011d222784a0869c6f804eba4d6cbc","tests/ui-stable/try_transmute_mut-alignment-increase.stderr":"4e70576de4934ae1243020cd94c012e6a875d8f6f41f0683495cf780e74ba270","src/pointer/ptr.rs":"51ae8675f62b8b59e375f5910a36578e2e31a67fbea8b1ece961961930e6de73","tests/ui-stable/transmute-ref-src-dst-not-references.stderr":"32a5ecd8509eebcc08ea529cade80ebef706b3c1a5c6f8c498c997b426b5d6a6","tests/ui-msrv/diagnostic-not-implemented-from-zeros.stderr":"7fee78190af015710d94d5c3534bc8dc75157c462a32c4a89a2f4b932d4cb7f4","tests/ui-msrv/diagnostic-not-implemented-try-from-bytes.rs":"272d0a53001ba1145b6389077fa9d4b494d56651088ed1e929b7591ca4d76048","tests/ui-msrv/transmute-ref-size-increase.stderr":"809749bdc3acfb0d0575962659aff3f15e1c464a6d9e421448d674c2230b3c49","tests/ui-msrv/try_transmute-src-not-intobytes.rs":"83ab8176279f90930b9548592114343d724b5af57999ed04cb5b5c32f56f5aad","tests/ui-nightly/transmute-ref-dst-generic.rs":"fceea5349611147b46a0d897ff4df4353ef2d2550c45a5ee14a74bba9fa272c1","tests/ui-msrv/transmute-ref-dst-unsized.rs":"e3beead5f1b51a62ad8974c024fb0db3ed0611c05e5ab05a65ee284e150b3ff8","tests/ui-stable/diagnostic-not-implemented-immutable.rs":"df176f71d385efe46108dfc2d676c7fedddb48f0a9f53ec5fa903e6b7761cf92","tests/ui-nightly/try_transmute-dst-not-tryfrombytes.stderr":"93f81521554ae4ca5f38a5448834c3cb9fd33e7038e44cee5fa8dc78fa095288","tests/ui-msrv/transmute-ref-dst-unsized.stderr":"c1c57f34ec8166ce885fd244afce0a70898563e9b4966d07f1c0e4713c8ed906","build.rs":"fdbbfba1fb64dadc4a4e0fc89c8eb2bcb71889ff737290c042be1ab14d447180","tests/ui-stable/diagnostic-not-implemented-into-bytes.stderr":"2e93a0ee06f0fa6552cc6addfb0d7432879cd77b6c480680e99ba225e9436db9","tests/ui-stable/transmute-ref-dst-not-frombytes.stderr":"dd1f3d8b3297f488212b9207eabfb08ad16b04e970db298307097b8517575e7c","tests/ui-nightly/transmute-ref-alignment-increase.rs":"adea0a036330e7d60a2fa663ca873dc24596fd81383545ef945d76adcca1c2ab","tests/ui-msrv/transmute-ref-size-decrease.stderr":"76f3e04b668db7118c8914877d57e6d79d8812d50fc98e651252de6319309e25","tests/ui-nightly/transmute-ref-src-not-nocell.stderr":"1bbe3c1eef6b73c67a08299825451071dafbc8e73de3807624a635c4233b2dd3","tests/ui-msrv/transmute-mut-src-dst-generic.stderr":"369d3e3947e81de8f3e2fa49ade8e8263e7b493bc4e7d5560e44796a960fe87b","tests/ui-stable/transmute-ref-dst-generic.stderr":"f710dfa3c427743804369b1003ae63ce28ce29dc99265e24a8d77efbfbfad590","tests/ui-msrv/transmute-mut-const.rs":"726368515b62c5a4e8c54c91239f28f77ccee01eb384893ac7797e7f47189455","tests/ui-stable/transmute-ref-src-generic.stderr":"3c5348f553baf2161a48edce631097e21cf7ad79e5c3d5482b175101dc877c5c","tests/ui-nightly/transmute-size-decrease.rs":"ef04ab5d6ed074c0d0ab0f979fba4b5a580e1ebeab431b7a432a4348194a67b9","tests/ui-nightly/transmute-ref-dst-unsized.stderr":"1de78a9ba5821e82f4a18a8a846cfcd24ea66c78d0b4c54e25da3ad40c1f99a0","tests/ui-msrv/try_transmute_ref-size-decrease.rs":"084d0983a7855e3d1eb8a08b0ca9838b1e0b8a07fc88d867a2a7b4519f1057ab","tests/ui-msrv/transmute-mut-alignment-increase.rs":"4c898b19c904440672c87b7b9ee5b15d996eb312e65b595abfdfcb03cff53345","tests/ui-stable/try_transmute_mut-src-not-intobytes.rs":"6d426e7cd765e9b633e6bb0585db7cad22c90ddb7ba403d7894d8bf6848395ed","tests/ui-stable/transmute-ref-dst-not-frombytes.rs":"a989f7f680cd3072ee1a0dd631fab02caa30c64c53ced9b5719d79dbcfbcf97f","tests/ui-msrv/transmute-mut-dst-not-a-reference.stderr":"b10e6b76150168288a9ad5a494a93d2c92e31b74cfb9517d93ed82e9d06f1abb","tests/ui-stable/max-align.rs":"cdca9a14834aa08b1dea1a59baddd126a77cb7dffe9b90c9f9feb6b490c31594","tests/ui-stable/transmute-mut-const.stderr":"2d4dc99784abe6e6aa94adb1db2863387997893a92504f8a74a7f940e27654a4","tests/ui-nightly/diagnostic-not-implemented-unaligned.stderr":"74b52b9885291dc3268a07006abd52dbb08ee4bb81342753a87afe0150f3662a","tests/ui-nightly/transmute-ref-src-dst-unsized.stderr":"f9db33200fe5eb498ae50246b685334126a52c856f1ca17929bc15a766468469","tests/ui-nightly/diagnostic-not-implemented-try-from-bytes.rs":"272d0a53001ba1145b6389077fa9d4b494d56651088ed1e929b7591ca4d76048","tests/ui-nightly/try_transmute_ref-alignment-increase.stderr":"7e5091f376fa99eeb8240dfdee4a18f73101e54ffd85c058900ce46906b36ac4","tests/ui-msrv/transmute-ref-illegal-lifetime.stderr":"6fee6a359ec36d57358d73a87af9ed45b380f10a6a07212fc711c7671828ec82","tests/ui-msrv/transmute-ref-dst-not-nocell.stderr":"7626fce7a73436c76c9fedb695a35cf05a749b131ec39ff6e664b80c5f47506a","tests/ui-stable/diagnostic-not-implemented-immutable.stderr":"f518f79ce9ad326613859ad0c5abc5ed035e0e0a15ce2f3a643182d4ac20dc5b","tests/ui-stable/transmute-ref-alignment-increase.rs":"adea0a036330e7d60a2fa663ca873dc24596fd81383545ef945d76adcca1c2ab","src/ref.rs":"8b39604079965342da67c8727ca57fe078f0b95d2c02c9aec4183790a4ad68a8","tests/ui-msrv/max-align.stderr":"eef0eaf82a223fe5b406e2b507478474b47d323cd8cab32a730dcc230dfa4969","tests/ui-msrv/invalid-impls/invalid-impls.stderr":"ff24c7a5c75cdbbd9cd8919934cb922efb295104dae41490987e6f129977ab05","tests/ui-nightly/transmute-ref-src-dst-not-references.stderr":"4ee1f130bdc0e185d1cd0a180976bd099db162a11ad51e6eb8730353c253ea44","tests/ui-msrv/diagnostic-not-implemented-known-layout.rs":"fa78a576df6c568a5ad8517efac60f5953a4d58b233e33e135638bcdfff43ae2","tests/ui-nightly/transmute-mut-dst-not-intobytes.stderr":"5f4b571e0531c8b00a1eefa31553f7b21fb6efe26929393b96af6a14dc79daae","src/deprecated.rs":"9361d398426a3e834b065fe188e592c7504f1335552d7863918a8f75a793db8e","tests/ui-stable/transmute-ref-dst-mutable.rs":"4283c537172971fda2c3c529c0971bbac66a4ac844bb6f0356f24284d4084b77","tests/ui-nightly/try_transmute-size-decrease.stderr":"1ad2968f1243db577e85892b652bbc151f3602828c3a4e68b860cbf178d1e694","tests/ui-stable/try_transmute_mut-size-decrease.rs":"35886c88a716734e77c05775d5a0766e9b637b9ed4cc76a9cfbba2aa262e1d13","tests/ui-nightly/transmute-src-not-intobytes.rs":"e39129733ec5406376c1cd79a0eb2b66d89ee89e0cd629cf8ba5c8c6fe0c0cd1","ci/check_job_dependencies.sh":"7a48930c53d0c4500fcd6ddadbd2bcbed217c91de1a697ff9eae6012ad1cf85f","tests/ui-nightly/include_value_wrong_size.rs":"4993458b5a5df4dabf7668203d30f01b756dbce7b27e2bd3fc6998987d673fcd","tests/ui-nightly/transmute-size-decrease.stderr":"daa5aa155c5018eb91ec289c1675fc253140607c36922393668f4ab0d0b4401e","tests/ui-stable/transmute-mut-src-not-a-reference.stderr":"9e1ec4f9523ba33500f6d7cc6ceb754f0ff171c266239790397d143ea2490d16","tests/ui-msrv/transmute-ref-size-decrease.rs":"318b336f688eaeb7ddcb574cf750b7e1cc728b1db3ae97b5d025a325bcc95747","tests/ui-msrv/try_transmute_ref-size-increase.rs":"4d0fea16788077a938b14852a93c110b7791aa0013bfa12c1cfb4c6689b8eb24","tests/ui-nightly/transmute-mut-const.rs":"726368515b62c5a4e8c54c91239f28f77ccee01eb384893ac7797e7f47189455","tests/ui-nightly/transmute-ref-size-decrease.rs":"318b336f688eaeb7ddcb574cf750b7e1cc728b1db3ae97b5d025a325bcc95747","tests/ui-msrv/transmute-size-increase.stderr":"73a98194a0dcf4af4eb3f5b3e06ff9c1fc3710f4a629e1c51abff165642e12aa","tests/ui-stable/try_transmute_ref-dst-mutable.rs":"cc0497f618bc155ea07bb7538dc570c7e3bba708ad8e52189ea6e10fd63e40bf","tests/ui-stable/include_value_wrong_size.stderr":"69cb54abc7ee3df7a9ebd4606efc36bb714239b8a24dc2db1d7b93291c65ca4e","tests/ui-msrv/diagnostic-not-implemented-from-bytes.stderr":"4089215b1df5a3c6bb2614000378bc4b4555d5e9b09008eb4f5a3d89deabdbb3","tests/ui-msrv/try_transmute_mut-size-decrease.rs":"35886c88a716734e77c05775d5a0766e9b637b9ed4cc76a9cfbba2aa262e1d13","win-cargo.bat":"cb0d4c835875e854253a11ae8d28ab0e00070096dcc4bfba6d7ab06c6790a759","tests/ui-nightly/transmute-mut-size-decrease.rs":"9ab9c03ccf1546957e3412911564a9dad6f0940d55c5285945548f76186fec56","patches/std.patch":"80675065f3023bfd79728621b7e4a54c4df17179238ec29f2a59ee282b25b182","tests/ui-stable/transmute-mut-dst-generic.rs":"41e6addb7da9fde8c3f93182b3cc484d3a2b5c1cfc077ecc66c0a6f27e22f647","tests/ui-stable/try_transmute_mut-alignment-increase.rs":"6f16a7e4753153e84581902d3d42fc4f0cb2d7ef4b01b71bcaccb0d434dc0f9c","tests/ui-stable/diagnostic-not-implemented-known-layout.rs":"fa78a576df6c568a5ad8517efac60f5953a4d58b233e33e135638bcdfff43ae2","tests/ui-stable/try_transmute_ref-size-increase.rs":"4d0fea16788077a938b14852a93c110b7791aa0013bfa12c1cfb4c6689b8eb24","tests/ui-msrv/transmute-mut-dst-not-frombytes.rs":"f51acc153ec92e2ac81b383e8ae662dd8ab253c0a62cd9d846f6d1e2ed76f5a2","tests/ui-stable/diagnostic-not-implemented-from-bytes.rs":"4bb5386f54737e163bc7240f1c06b43e82e943e42745fe7de14bca9ef0ea50c1","clippy.toml":"24577ed72d5ec356b0bd79a5ae1d38a79e8b15ae7b6e5b187cf0ef87ac2ef7f2","tests/ui-nightly/try_transmute_ref-dst-mutable.rs":"cc0497f618bc155ea07bb7538dc570c7e3bba708ad8e52189ea6e10fd63e40bf","tests/ui-msrv/transmute-mut-src-unsized.stderr":"8bbcb2bde1a1257a087a7fc240ad897508c371b90478586a6b8cadb0e8594218","tests/ui-stable/max-align.stderr":"19d3f22fa84379f9ac3a66f5133f429dbacd6e484f844546a5cf90f9141df52a","tests/ui-msrv/diagnostic-not-implemented-immutable.stderr":"4bcf0cba8c816a7a5e7f13256b273e0b83c4da317a7fe6b8e61e4909b509af02","LICENSE":"d28a77dc4dd456fe1000194260fb4bdf9b97c02e58ff3202c24b1abfdf858f06","tests/ui-nightly/transmute-mut-src-dst-unsized.stderr":"5e2f582c22507e8ee21947b3f6fde213e3c282c700a9b9fb52662ce5f7d2ac7b","tests/ui-nightly/try_transmute_mut-size-decrease.stderr":"02ba457b8a97a46a75af4fd26a621c6387fd020c42e4123dff4e072bf068ccdb","tests/ui-nightly/transmute-mut-dst-not-intobytes.rs":"b9ab140926cae46e0f253eddfa332a0845b25b49ffbe60a17694d06580235066","tests/ui-nightly/transmute-ref-src-not-nocell.rs":"cdd5eeb40f42963e7bec7b45283a53f4322df4a7068398089d0ddc18402ec0a9","tests/ui-msrv/transmute-ref-size-increase.rs":"7f3a5897b73dd9272eac08c4a43e3946fdf527761c3fb376a266e945ddb96448","tests/ui-nightly/invalid-impls/invalid-impls.stderr":"78696f82238459ae50851e30a89bd8bcf6c2a07edb09e79055cd92561c494949","tests/ui-nightly/transmute-mut-dst-generic.stderr":"4c57933cb9db077d9be42b1c52f7371d13a04d1a385a297e63f543477961a00c","tests/ui-nightly/transmute-mut-size-decrease.stderr":"d2b080797a83dfb2168e2641483bac5672a033d3a8a90bbc8732d2f062bad7a9","tests/ui-stable/transmute-mut-src-dst-not-references.rs":"cbb01caa49218ce6e4914b03ad1b8bb99a648d7867152577add772de9f0a705e","tests/ui-nightly/transmute-mut-src-not-a-reference.rs":"a854a05999caebc97a08e37d037c4905a859e3a1f4f6d5e5803ff03af0bb5470","tests/ui-nightly/include_value_wrong_size.stderr":"cf7ab76adbdcde63f4b12b7f97724d5a929788afde3dfe27afcc06841cacd364","tests/ui-msrv/try_transmute_mut-alignment-increase.stderr":"f9f50bf211cd30ac6eb653dea5b654a747ce2af13c5e84535c0db078bbf5f09f","tests/ui-nightly/try_transmute-src-not-intobytes.stderr":"cae4cec519a3b8067f5fc75288cbc850283123c577b37ed726de0a1b8b6e2655","tests/ui-stable/include_value_wrong_size.rs":"4993458b5a5df4dabf7668203d30f01b756dbce7b27e2bd3fc6998987d673fcd","tests/ui-stable/try_transmute_mut-size-increase.rs":"56fbb3134ebc173dc2d959515400b3a9cb9341835337ef3f554f350e316abdb2","tests/ui-msrv/diagnostic-not-implemented-into-bytes.stderr":"2ee6d51b0355f8387542230e22aa748dc9bec684c285d448189afc66f2da01ed","tests/ui-msrv/transmute-mut-src-dst-generic.rs":"880430db77b417304756e0244ac8187c4392a9b1887bdb9683246376a7a557a0","tests/ui-msrv/try_transmute_ref-src-not-immutable-intobytes.stderr":"e59012471cdd2b69bc96b5d9e146058ab30e6bbbe0e432b22158d3a45caacb03","tests/ui-msrv/transmute-size-decrease.stderr":"bb3ba97e5f733b67714bc2502be26096eecdc1aada43ade0e1bb5baaebbc1be0","tests/ui-nightly/transmute-ref-dst-mutable.stderr":"0c11986772b58a910ac8a7d601002afc02cd378f45382827ce21b25ed64e7ab9","tests/ui-stable/try_transmute_mut-size-increase.stderr":"92f8a071e9d6c5bfc7efd38f85cc23d8dc69f810e42d6e95855162f5d6d89e42","tests/ui-msrv/transmute-mut-src-dst-not-references.stderr":"93584326ab2fd8dd8e4ebef465bc3541761ea43ff5aac3a7794aa4ee52eaca2f","tests/ui-nightly/try_transmute_ref-size-decrease.stderr":"b9b37df32c91aa8574ffcac50f3bccf12747af3c823a71f6df9f2c1bf912a40b","tests/ui-stable/try_transmute-src-not-intobytes.rs":"83ab8176279f90930b9548592114343d724b5af57999ed04cb5b5c32f56f5aad","POLICIES.md":"2c88a1c9779bd76926e57478ecb54f633f7ed71b5dceb95a8aff1168e3cd708a","Cargo.toml":"7285899c3240496522e6b3fb932bdab3f6a598ffc7b401f7521aee10464a4f58","tests/ui-nightly/transmute-ref-dst-generic.stderr":"9d5f318f064a2f5f4a23d27ace8757b38db048badfde9f3a8ec8a45b2c272506","tests/ui-nightly/try_transmute-src-not-intobytes.rs":"83ab8176279f90930b9548592114343d724b5af57999ed04cb5b5c32f56f5aad","tests/ui-msrv/transmute-ref-src-not-nocell.rs":"cdd5eeb40f42963e7bec7b45283a53f4322df4a7068398089d0ddc18402ec0a9","tests/ui-stable/diagnostic-not-implemented-try-from-bytes.stderr":"70d8c7ce6cf862f5859c6559b4dac7104d2cc7d852af6b7cc62ba6d20dc03882","tests/ui-nightly/include_value_not_from_bytes.stderr":"b9f9fcd0eb2d39704970c8f86bd3ce4eaf33b4c4a9eda58d0414cc5408c6b61c","tests/ui-nightly/transmute-ref-src-not-intobytes.rs":"dd932cdde770d1ad0c0e5c147cb53aebdbfe6a023a6873e807f2429a14bc654d","tests/ui-msrv/try_transmute_mut-alignment-increase.rs":"6f16a7e4753153e84581902d3d42fc4f0cb2d7ef4b01b71bcaccb0d434dc0f9c","tests/ui-stable/try_transmute-dst-not-tryfrombytes.stderr":"ce765b88e96411278c1a724c24bee01620b82b8b0e3473a3be4fe3583167ae88","tests/ui-stable/try_transmute_ref-size-increase.stderr":"b06ee4233f86ee4de04d85b04fb7c31dce84bb328b727a3c5bb36389b5325584","tests/ui-nightly/try_transmute-dst-not-tryfrombytes.rs":"9b4b6b062a4f1a0f29df9754c87b0ec0dfc75cc026ecbf57f67e48acf8ed3b0e","tests/ui-msrv/diagnostic-not-implemented-from-bytes.rs":"4bb5386f54737e163bc7240f1c06b43e82e943e42745fe7de14bca9ef0ea50c1","tests/ui-msrv/transmute-ref-src-unsized.rs":"cbb75ec9eb3729442f57afc55758f4b638687ed0677e58a5e784b5f53e6a82ee","tests/ui-nightly/transmute-mut-illegal-lifetime.rs":"cd95f98b5a7f43c9b9f20d53bedbfa0cc3d8b6ba2af182abf6a2098b31dc6c6e","tests/ui-stable/transmute-ref-dst-generic.rs":"fceea5349611147b46a0d897ff4df4353ef2d2550c45a5ee14a74bba9fa272c1","tests/ui-msrv/diagnostic-not-implemented-known-layout.stderr":"b4ff1049ca82c188053454f208c3003014a5bedd782fd03d7aa748dcdbf656ab","tests/ui-msrv/transmute-mut-illegal-lifetime.rs":"cd95f98b5a7f43c9b9f20d53bedbfa0cc3d8b6ba2af182abf6a2098b31dc6c6e","tests/ui-msrv/try_transmute_ref-dst-not-immutable-tryfrombytes.stderr":"9a3b289fff477333baf68bb61bec4e167d02cb177be3803b42001dc256f3f453","tests/ui-msrv/try_transmute_mut-src-not-intobytes.rs":"6d426e7cd765e9b633e6bb0585db7cad22c90ddb7ba403d7894d8bf6848395ed","tests/ui-stable/transmute-ref-src-dst-unsized.stderr":"00b9db39d0d09378a0c97a13b3afa1aa9e5e49a3b5ffaf2b8423d195d176c334","tests/ui-stable/try_transmute_ref-dst-mutable.stderr":"d29cc786d1994b6aebac2258aeeaa3bbf03723ab2f21e855d18c63ecc5980f28","tests/ui-msrv/transmute-ref-dst-generic.stderr":"1e4429d9600ff4cb5f729779c32cd239cc39e6cd7a1b20bb2e52824bc0d7c804","tests/ui-msrv/transmute-mut-size-increase.stderr":"79ffa82f2d0c53fe5b2e55f0f358c7d20f8452cf892f3866716e08b4ea6322bd","tests/ui-msrv/try_transmute_ref-dst-mutable.rs":"cc0497f618bc155ea07bb7538dc570c7e3bba708ad8e52189ea6e10fd63e40bf","tests/ui-nightly/try_transmute_ref-dst-not-immutable-tryfrombytes.rs":"9308e38dd814b2bab53b5912207cc7621635a5c547e621f947ba0d66e2601730","tests/ui-nightly/try_transmute_mut-src-not-intobytes.rs":"6d426e7cd765e9b633e6bb0585db7cad22c90ddb7ba403d7894d8bf6848395ed","tests/ui-msrv/transmute-mut-src-generic.stderr":"2978625f4a64e19ab7c90daa94053ea3e57012e4e42de1aed645c8dfe1ad9221","tests/ui-nightly/try_transmute_mut-src-not-intobytes.stderr":"1ee8ee3b5baf3992d671dd4f07d3eab31ac1b48e7b012f8b5ad83070651c01d1","tests/ui-msrv/try_transmute-size-decrease.rs":"7ec7d4c829f2a2df74149b880686371c2a64e293dcb6f5ec10a0c09c4f8229c0","tests/ui-nightly/max-align.stderr":"0382389bea42134ee3fb73e79cdde8821264fd21c9f8da91dd98b240d4e592a4","tests/ui-nightly/try_transmute_mut-dst-not-tryfrombytes.stderr":"321e83acf340e4ec84f3558b962c8ceed1cbc90d9587e755989023b613c30d8a","tests/ui-nightly/transmute-ptr-to-usize.stderr":"52244e5fdd1f8c620c745cca54f594eebea3408101ac77def8b2889e4a86c8de","tests/ui-msrv/invalid-impls/invalid-impls.rs":"d135ef15bca8d0e7b2c3bf1596c57dbf4b5a98923089b4e5c060a830dd76ff3e","tests/ui-nightly/try_transmute-size-increase.rs":"5b085b4eb85a46d70ce03799652ba49bc4d51e861e821eddebd94919bcb0ad30","tests/ui-msrv/transmute-mut-size-decrease.rs":"9ab9c03ccf1546957e3412911564a9dad6f0940d55c5285945548f76186fec56","tests/ui-msrv/transmute-ref-src-dst-not-references.rs":"b44e925cca270c67fc7f9c4dc18207acd90f77231f8cf79ec965b592586a890f","tests/ui-msrv/transmute-mut-src-generic.rs":"a013a66dfe3ca9fbf349c85794ec8a68a980929a56520df305e7a5a4f9922202","tests/ui-msrv/transmute-mut-alignment-increase.stderr":"9714d77cb5dad09b24f116c4018e8179d1c4fe7a130147cb6838b8d06b905f9c","tests/ui-stable/transmute-ref-size-decrease.stderr":"433f5558c024581efb54991e8ebee97aedbff06b9b6f2c8581d34039ff671ed4","tests/ui-stable/transmute-ref-src-not-intobytes.rs":"dd932cdde770d1ad0c0e5c147cb53aebdbfe6a023a6873e807f2429a14bc654d","tests/ui-stable/transmute-mut-src-immutable.stderr":"c8a0e3107e1805329d83ad742067dbe9a794a7fdbec7da30e8a0622d6398e719","tests/ui-msrv/transmute-ptr-to-usize.stderr":"80764029a66325c51dffca8961dfaae3b0c9b3723d8c1d53933942ffac6deb2f","tests/ui-msrv/transmute-mut-dst-not-intobytes.rs":"b9ab140926cae46e0f253eddfa332a0845b25b49ffbe60a17694d06580235066","tests/ui-stable/transmute-mut-dst-not-intobytes.stderr":"81ab8da4af0b9c234bdc35062f8ba5864846c3690970acb31857d8bd44fa4065","tests/ui-nightly/transmute-mut-dst-not-a-reference.rs":"6c0fecf8e2bfb51f2d5b46f0b6d6c454b235b26bf63a09e95e01d874125053cd","tests/ui-msrv/transmute-ref-dst-generic.rs":"fceea5349611147b46a0d897ff4df4353ef2d2550c45a5ee14a74bba9fa272c1","tests/ui-stable/transmute-mut-size-increase.rs":"70fa56ad32004364710f2c711859bf601aef0ab61ff5264b8f071d9d06769a63","tests/ui-stable/invalid-impls/invalid-impls.rs":"d135ef15bca8d0e7b2c3bf1596c57dbf4b5a98923089b4e5c060a830dd76ff3e","tests/ui-nightly/try_transmute_ref-dst-not-immutable-tryfrombytes.stderr":"b59f2818bb1e3b145a86bf05c5c780153bf5e3cb30e25b2f39563bafd85f7af1","tests/ui-stable/try_transmute_ref-dst-not-immutable-tryfrombytes.rs":"9308e38dd814b2bab53b5912207cc7621635a5c547e621f947ba0d66e2601730","tests/ui-nightly/transmute-ref-size-increase.rs":"7f3a5897b73dd9272eac08c4a43e3946fdf527761c3fb376a266e945ddb96448","TEST_MAPPING":"20cde0a7b53544a9f3a65e3d60b64b01ae54892de9762cc8e51d38a5f8ceea4d","tests/ui-stable/transmute-mut-src-generic.rs":"a013a66dfe3ca9fbf349c85794ec8a68a980929a56520df305e7a5a4f9922202","tests/ui-msrv/diagnostic-not-implemented-try-from-bytes.stderr":"a62b9bd963ca08819e43c531340f7b7bdc289041b653335879a23cb78289eaba","tests/ui-stable/transmute-ref-src-not-a-reference.stderr":"f1fac4e3ca8cf71fcc05d3cb4780b7a1084615d6f1bc763a99fa18c06615c9d8","Android.bp":"e66b3b874599d6b337e834e8d24a13d1d6434e18b3cf1239917533b525801514","tests/ui-stable/transmute-mut-size-decrease.stderr":"991baa632937d8acbfc9caa58a9ec659f2dcaa412e2b92ea57a1df9edf977099","tests/ui-stable/try_transmute_ref-src-not-immutable-intobytes.rs":"da8b40f0ffb13a891a0a3a76217532da81e7b71d5c6f9c1ebe78cff5c9fcc177","tests/ui-msrv/transmute-mut-src-dst-unsized.rs":"d52aec2bc815fac314a4ca5819d730a0d1dbac13b51bf2b844701d77ce969a8e","tests/ui-msrv/transmute-ref-src-not-a-reference.stderr":"da596f7aa5e826b171e3bea5b39cc7c5c19d232d9b575095943e83af802dee08","CONTRIBUTING.md":"85209a827d866e207cdc1ed0110192a41c8371af86cbd6d1f2010dce88ae7a49","tests/ui-nightly/transmute-mut-src-not-frombytes.stderr":"8ec2e28872ba7d08e597ecbc5bea5ba4875846c4e0bef3583f67beebeba8b470","tests/ui-stable/transmute-ref-src-generic.rs":"57c4bbd0ec820778dcfdd40645741e2251f981ca4e98de9ac344c7dbb5381e16","tests/ui-stable/try_transmute-size-decrease.rs":"7ec7d4c829f2a2df74149b880686371c2a64e293dcb6f5ec10a0c09c4f8229c0","tests/ui-stable/transmute-ref-src-dst-generic.stderr":"8053da1dc7d7d4cc9cdf1deeb9218aeb876794df5cf69df4d62cfd1b78613059","tests/ui-stable/transmute-mut-dst-not-frombytes.rs":"f51acc153ec92e2ac81b383e8ae662dd8ab253c0a62cd9d846f6d1e2ed76f5a2","tests/ui-nightly/transmute-ref-dst-not-a-reference.stderr":"718ffdabf82ebe3f12e6f592efe4016cadf2c1da3d749c2701ab8a32438f1837","tests/ui-nightly/transmute-ref-size-decrease.stderr":"ed1304243850ab7a06427cff1d1216f306be94d389bad35f9d048129640d3586","tests/ui-stable/try_transmute_ref-size-decrease.stderr":"7c5f55445dc2e4dda5230b54103fc0abca4b9bf626c0a846a5a0f5c60b95d441","tests/ui-nightly/transmute-mut-src-dst-generic.stderr":"822747c6985827da75680660c52db65a28c8ebd97ffabda1060d7c04e61ef1ef","ci/check_fmt.sh":"65a2a98c251f61d5804a0c2f3bfd16551eefef9c703324c603a14683c5a9baf2","tests/ui-msrv/transmute-ref-src-not-a-reference.rs":"69dc6327b77a6cfe806b3493a4287bdfa88d8b353256673ff1e4bc2e28c8eb28","tests/ui-nightly/diagnostic-not-implemented-into-bytes.rs":"5edc2bf1c76f28376eb17613d79025624efbb3465b471b317edb7d399c110e6e","tests/ui-nightly/try_transmute_ref-size-decrease.rs":"084d0983a7855e3d1eb8a08b0ca9838b1e0b8a07fc88d867a2a7b4519f1057ab","tests/ui-stable/try_transmute-src-not-intobytes.stderr":"c6c8bcd7e21daa541e99d1706d1dcbe5ffa4d6cfc9a7c1dfac1ef9b49932dbb8","tests/ui-nightly/diagnostic-not-implemented-from-bytes.rs":"4bb5386f54737e163bc7240f1c06b43e82e943e42745fe7de14bca9ef0ea50c1","tests/ui-msrv/try_transmute_ref-src-not-immutable-intobytes.rs":"da8b40f0ffb13a891a0a3a76217532da81e7b71d5c6f9c1ebe78cff5c9fcc177","tests/ui-nightly/diagnostic-not-implemented-into-bytes.stderr":"a0a9e604da0412a7cea16c649196a045b6a2f0cb69f43c961b5a08eea76fe74c","tests/ui-nightly/diagnostic-not-implemented-known-layout.rs":"fa78a576df6c568a5ad8517efac60f5953a4d58b233e33e135638bcdfff43ae2","tests/ui-nightly/transmute-dst-not-frombytes.rs":"532de6fb9bb6df56a8621a5f1abb4c58d957650461d266a59581deb36ee77316","tests/ui-stable/diagnostic-not-implemented-from-zeros.rs":"504fdc193b662116cad680d8354433aae2afd12650b7ce149c5d6c1b280ff650","tests/ui-nightly/transmute-mut-src-dst-generic.rs":"880430db77b417304756e0244ac8187c4392a9b1887bdb9683246376a7a557a0","tests/ui-msrv/transmute-dst-not-frombytes.rs":"532de6fb9bb6df56a8621a5f1abb4c58d957650461d266a59581deb36ee77316","testdata/include_value/data":"87c24be7c86405fd019739c0e6362147a7e45b70d4a704282719ff9a4b62dd36","tests/ui-nightly/transmute-mut-src-immutable.stderr":"39535092fe08383c4c3402e45d1a77f375dd023a2d8a751a902bed545534a55f","tests/ui-stable/transmute-mut-src-generic.stderr":"b8dbf4dc993b9204b9e532f8ceb63cb655ac0ed99e95cfe6ba206cbd68fae94d","src/macros.rs":"9fb37d94e970ed890bbeab98ef7e234b9e33704f7a2dc3413ee204b394200d00","tests/ui-msrv/try_transmute-size-increase.rs":"5b085b4eb85a46d70ce03799652ba49bc4d51e861e821eddebd94919bcb0ad30","tests/ui-stable/diagnostic-not-implemented-into-bytes.rs":"5edc2bf1c76f28376eb17613d79025624efbb3465b471b317edb7d399c110e6e","tests/ui-msrv/diagnostic-not-implemented-into-bytes.rs":"5edc2bf1c76f28376eb17613d79025624efbb3465b471b317edb7d399c110e6e","tests/ui-stable/try_transmute-size-increase.stderr":"abfe4c810d8997fd3a38d1045d77f508a5ff160621fb02648afd67d9947c0479","LICENSE-MIT":"3e24ce9879b9a289b7413493fe10221df3551f197741ceeef6c38680dd1bf44f","tests/ui-nightly/diagnostic-not-implemented-from-bytes.stderr":"d0e6bf4707a48c1f8c75527edd27735f0bfe04b562c00c88c6e43b43af029e8b","tests/ui-stable/transmute-mut-src-immutable.rs":"1cb591944d85bb526f182fdc476a0ba965dade3dfbaac8a29a648045d9ac5a21","tests/ui-msrv/diagnostic-not-implemented-from-zeros.rs":"504fdc193b662116cad680d8354433aae2afd12650b7ce149c5d6c1b280ff650","src/error.rs":"15ad121a811b4111d10e6fac9e12152cc6ff8d7a1f2149377feba4fb49d60d00","tests/ui-stable/transmute-mut-dst-not-a-reference.rs":"6c0fecf8e2bfb51f2d5b46f0b6d6c454b235b26bf63a09e95e01d874125053cd","tests/ui-nightly/transmute-mut-src-dst-unsized.rs":"d52aec2bc815fac314a4ca5819d730a0d1dbac13b51bf2b844701d77ce969a8e","tests/ui-msrv/transmute-ref-illegal-lifetime.rs":"771b734779b00309b7ab112891e5fa76af2d7b5a822b4db2f34b3edebf1f7b9d","tests/ui-msrv/transmute-mut-src-immutable.stderr":"48ddd05834acde5456f6b6e9e389098995a837562dbde288d813b0c9233900b0","tests/ui-msrv/transmute-mut-size-decrease.stderr":"b7ee92e76faa4129d75d9f986ce2e5ef50f8924fef485ace3e0ad732062e28cd","tests/ui-msrv/transmute-ptr-to-usize.rs":"d8aabb58133988be7c282ec9771906b8f199418e69762c92ffc167305890d353","tests/ui-stable/try_transmute_mut-src-not-intobytes.stderr":"654aff1409a747300684b85bcb36f3c88b06afaab5e01d7f8c5cf71ca42d7356","tests/ui-stable/transmute-ref-dst-unsized.rs":"e3beead5f1b51a62ad8974c024fb0db3ed0611c05e5ab05a65ee284e150b3ff8","tests/ui-stable/transmute-size-decrease.stderr":"d3853ca2545ca6e68315f1282aca6949d98d65a932789ad25feac2b827712bff","tests/ui-stable/transmute-mut-src-not-frombytes.rs":"049b386c8bf296d45e8a1a1f020a763df4ea480a3e1027ccc8f6c31b05889c79","tests/ui-stable/try_transmute_ref-alignment-increase.rs":"4401c8ae85558b388627f60a60960b33bf4df8eae28437ffa4d20bb668f47036","tests/ui-nightly/transmute-ref-dst-not-nocell.rs":"51ecd363ef66bbcf0d8daa3376667b8a9ad35b61d78765d502644c1183cbdf1c","tests/ui-stable/include_value_not_from_bytes.stderr":"e89055768f51ec6d74a2f2477795951759ea58f1b46442b14d8ef5e22bfbf3c5","src/pointer/mod.rs":"425bf5082767fe98d041e2dd95e705eec7629d94dcd36a3ed5dc6523d7f0400d","tests/ui-stable/include_value_not_from_bytes.rs":"a08295e6ec9c4fc6fe0f6a90d7227acb444ce4680e64efb2c53c4ffbd7029dba","tests/ui-stable/transmute-ref-illegal-lifetime.rs":"771b734779b00309b7ab112891e5fa76af2d7b5a822b4db2f34b3edebf1f7b9d","tests/ui-stable/transmute-mut-src-unsized.stderr":"55c8d44cf3104779738bc7b7d8ee177582ecb07435f44c0bd4376b22f00f5c4f","tests/ui-stable/transmute-mut-src-not-frombytes.stderr":"9fb887dab214fd94560f2031f626663f73ec6984079bca5fccb3b0e775626a6f","tests/ui-msrv/try_transmute_ref-dst-mutable.stderr":"598902a4e5023ffe5758c362abfedad411e027b4473c76e894a361d2c2f22ec6","tests/ui-nightly/transmute-mut-dst-generic.rs":"41e6addb7da9fde8c3f93182b3cc484d3a2b5c1cfc077ecc66c0a6f27e22f647","tests/ui-msrv/transmute-ref-src-dst-generic.stderr":"199483e82b59ad8724485d64062c623124714a31a4a4aa38fd2808521d7f9eb4","tests/ui-stable/transmute-ptr-to-usize.rs":"d8aabb58133988be7c282ec9771906b8f199418e69762c92ffc167305890d353","tests/ui-stable/transmute-ref-size-decrease.rs":"318b336f688eaeb7ddcb574cf750b7e1cc728b1db3ae97b5d025a325bcc95747","tests/ui-msrv/transmute-mut-src-not-intobytes.rs":"12adc96a6bce75e01456c50e5fa08a93290a0b48ed13ef8571b0cad1211cbc8f","tests/ui-msrv/diagnostic-not-implemented-immutable.rs":"df176f71d385efe46108dfc2d676c7fedddb48f0a9f53ec5fa903e6b7761cf92","tests/ui-msrv/transmute-mut-dst-not-intobytes.stderr":"6e170000866643500d9711b7002779d2d8fffbe06a3bc8632e6e9a4a8bdc1979","tests/ui-msrv/try_transmute_ref-size-decrease.stderr":"bf5148e7b5bcbb3fbbf83ada9b3f79e4ea0c40105b21720f9d1115773e371ee7","tests/ui-stable/diagnostic-not-implemented-issue-1296.stderr":"fd05a6126ee99c97bf588bc1945dee217ec6b1ebd6c5f9bc2e86d1568db5f21c","tests/ui-nightly/transmute-mut-size-increase.rs":"70fa56ad32004364710f2c711859bf601aef0ab61ff5264b8f071d9d06769a63","tests/ui-msrv/transmute-mut-src-dst-not-references.rs":"cbb01caa49218ce6e4914b03ad1b8bb99a648d7867152577add772de9f0a705e","README.md":"11b7d40320fe792a2a9e536116032a23cdd3a38c8508834a0fe85c5dd72b08be","tests/ui-msrv/try_transmute_mut-size-increase.rs":"56fbb3134ebc173dc2d959515400b3a9cb9341835337ef3f554f350e316abdb2","tests/ui-stable/transmute-mut-src-not-intobytes.rs":"12adc96a6bce75e01456c50e5fa08a93290a0b48ed13ef8571b0cad1211cbc8f","tests/ui-stable/try_transmute_ref-alignment-increase.stderr":"8fddf60d179378ce74bf4b885627ecdf916c00e13f1eeedee463a428123e6da0","tests/ui-msrv/transmute-src-not-intobytes.stderr":"a92c335cdf37ad91e524b31ba674e8ac60f7a46934d14da39ba8ce05fbe134a2","tests/ui-stable/transmute-mut-alignment-increase.rs":"4c898b19c904440672c87b7b9ee5b15d996eb312e65b595abfdfcb03cff53345","tests/ui-nightly/try_transmute_mut-dst-not-tryfrombytes.rs":"aeb4371e28787b0a2e75e616441a55129cd299d9681a81095c72e6e7f7b9512a","tests/ui-nightly/transmute-ref-illegal-lifetime.stderr":"fe0f7131d3d794f5ffaee93c324e29c73f2f6bf82cfa1f9105bd999af81bf497","tests/ui-stable/transmute-ref-dst-not-nocell.rs":"51ecd363ef66bbcf0d8daa3376667b8a9ad35b61d78765d502644c1183cbdf1c","tests/ui-msrv/transmute-mut-dst-generic.stderr":"4f1d49ba0b043741e8881e6f53922e5b0b60dcadf8148a141395e471766a7679","ci/check_versions.sh":"12c44efae36aeed4e4fc655d8f99a0b17194eba8716e589d81f8063fceb4d721","tests/ui-nightly/try_transmute_ref-src-not-immutable-intobytes.stderr":"0fd957d785b6fa2c9084c09aeef120f5b0dbb4ec6c4aa1f810b54a3efbdb1bca","tests/ui-msrv/transmute-ref-dst-not-frombytes.stderr":"aef30d5527db0585fcc4cd9ceef91a49b31ebff3c3e6c8d385616fde1dac2b0f","tests/ui-msrv/transmute-mut-dst-unsized.stderr":"73ccc44398fa6320a8e830313c812619072cfbc9e1a694c6f88a5fa06d7e0124","tests/ui-stable/transmute-ref-src-unsized.stderr":"09fab516d92566d8f8f4a288a692bc67899ed9dad25df226e6ddf0b5253dd5bb","tests/ui-msrv/try_transmute-dst-not-tryfrombytes.stderr":"2bec587fd16b99c1d3e4cc42031f00fd7b6381ff4baba56c937c3d819eff1ac4","tests/ui-msrv/transmute-ref-src-generic.rs":"57c4bbd0ec820778dcfdd40645741e2251f981ca4e98de9ac344c7dbb5381e16","tests/ui-stable/transmute-ref-src-not-intobytes.stderr":"18fe85f152de5f32f96380e83d770879304585a3add66022e59efb1a17ae8017","tests/ui-nightly/transmute-ref-dst-not-frombytes.rs":"a989f7f680cd3072ee1a0dd631fab02caa30c64c53ced9b5719d79dbcfbcf97f","tests/ui-msrv/transmute-ref-src-dst-generic.rs":"2d25888552996fd964461247b07cf1a5974e6fc0dffed2464b795bdf56e7e518","tests/ui-nightly/transmute-ref-src-unsized.stderr":"0095536d93fd5e48b95ce51beeb90e7d5ba595e9d1d39a0baff4352ea4e29f58","tests/ui-nightly/diagnostic-not-implemented-immutable.stderr":"ce7e567bd10fedfdf7d33e088805d955a66d8388ee65988a3e574e12eac6270a","tests/ui-stable/transmute-size-increase.stderr":"b94a3c90f34369921022a8018730a3cd79f8bd32cd6a2e2fb8afb0417a7011d4","tests/ui-stable/transmute-mut-illegal-lifetime.stderr":"030e0a765ec0b8c8b0a928451ec1c783ca395c65c8e445684a22a432cbd7af9a","tests/ui-msrv/transmute-mut-src-not-intobytes.stderr":"b693b1af440fc684c9cbebe580d58ba3f1909e8ee52a7b27234e2b3d6fb9b2e1","tests/ui-msrv/transmute-size-decrease.rs":"ef04ab5d6ed074c0d0ab0f979fba4b5a580e1ebeab431b7a432a4348194a67b9","tests/ui-msrv/transmute-mut-src-not-a-reference.rs":"a854a05999caebc97a08e37d037c4905a859e3a1f4f6d5e5803ff03af0bb5470","tests/ui-msrv/transmute-ref-src-unsized.stderr":"c0c284ae12d1e66006238c401ebc695b3b6c53dfc4ea203c5634a397c4e9f499","patches/LICENSE.patch":"fcafb83042215e4a906214694a50d4a76f333aadb3fcd6bee8547f3831c0b1a4","tests/ui-msrv/transmute-ref-src-dst-unsized.stderr":"e419f9725cf4a4dd8df13335ede12fff4b8eaba1ae0537831df8e39e46992c29","tests/ui-msrv/transmute-mut-const.stderr":"d08ac7260d7d425e66fb273dc61f01dc7726b475d2912caabd62cffa912d48ba","tests/ui-msrv/transmute-mut-src-not-a-reference.stderr":"10a77e576756bdeb3867c5f8b54687c8ef68660b3ebc15265acc2d0c4234577c","tests/ui-nightly/transmute-ref-src-dst-unsized.rs":"902e8182ea6b3de7b6e548ae03abc54b5bb8b8a01057e25d1c5e12838876349d","tests/ui-nightly/transmute-mut-dst-not-a-reference.stderr":"39a9aa400068c67a5121d594ccbf775161328e2d96703ec557259a0967a873f3","tests/ui-msrv/transmute-ref-alignment-increase.rs":"adea0a036330e7d60a2fa663ca873dc24596fd81383545ef945d76adcca1c2ab","tests/ui-stable/transmute-mut-dst-not-frombytes.stderr":"c99505cca64e65a8dc87b390cf85d94cd953de0e1d775821029a7ceb004ebfb9","tests/ui-stable/transmute-mut-src-not-intobytes.stderr":"2190c114527bb2891ed924173d1cef491189c8b7d6837705eaa69c83d30fcd47","tests/ui-nightly/try_transmute_mut-size-increase.stderr":"855253b0ca5e6e0a46b88077f1c4d43938b07c42d71f3c09d94cae3d83730a04","cargo_embargo.json":"792bdc4cb9c45d02735ac45e2066c70cfa56a4454a2db0f60c4e8ebedfba9991","tests/ui-msrv/transmute-ref-alignment-increase.stderr":"396fd42941a0259a13d868554e6bf7e9a72753ebf3198d13eb3faa6efcc3f81c","tests/ui-nightly/try_transmute_mut-alignment-increase.stderr":"74a715b6f48e41a43d74e2a6645cf42957a2201d15d91e00f7778fe390af7504","tests/ui-stable/transmute-mut-dst-unsized.rs":"5c040c3eec4b360b4b65a948bcfe1220567cf5bb1939eeefd5bf200cd73d3b96","tests/ui-stable/transmute-ref-src-unsized.rs":"cbb75ec9eb3729442f57afc55758f4b638687ed0677e58a5e784b5f53e6a82ee","src/impls.rs":"6f87145ff343afb93b947782d1ed9954905723074c88c152b95635397ac871b2",".cargo-checksum.json":"43fad3a7e45434221414bf24b48052ef973a28adbdf71127977f156360cbfa29","tests/ui-stable/try_transmute-size-decrease.stderr":"41e44f6ad37677ef271540c0095f18273ae97c87302e49fb6aa821b19bbffd33","src/byte_slice.rs":"3e5dd3a8dbc6556c8d9a035c7cf8ce4127b81d45d12a21e8e3e28587d7aa2a50","tests/ui-stable/diagnostic-not-implemented-from-zeros.stderr":"b1e6fe06699c7be7fc49f987e6b985905e44c26a547907b58d1867751b3c1c9e","src/wrappers.rs":"d6f5fea4cb462e0208bdbe82abc3191f268ee7d24f3737937270ec84cdb6e5a3","tests/ui-stable/invalid-impls/invalid-impls.stderr":"b686b789a657c0cdf0e1b3223234811337b4f3485a654e195afccd4fa6165161","tests/ui-stable/transmute-mut-alignment-increase.stderr":"73d0e4eaacca1da4ba0986164ec4ea8a16231bc28501b890e55ccac6a418bfc5","tests/ui-stable/transmute-ref-src-dst-not-references.rs":"b44e925cca270c67fc7f9c4dc18207acd90f77231f8cf79ec965b592586a890f","tests/ui-nightly/try_transmute_ref-size-increase.rs":"4d0fea16788077a938b14852a93c110b7791aa0013bfa12c1cfb4c6689b8eb24","tests/ui-stable/transmute-ref-size-increase.stderr":"f23c4fcaa3f1b97338d9c46a51e046bafd8d025a0049984995f75c5f7de0169d","tests/ui-nightly/transmute-ref-src-not-a-reference.rs":"69dc6327b77a6cfe806b3493a4287bdfa88d8b353256673ff1e4bc2e28c8eb28","tests/ui-nightly/transmute-ref-src-generic.rs":"57c4bbd0ec820778dcfdd40645741e2251f981ca4e98de9ac344c7dbb5381e16","tests/ui-nightly/transmute-mut-src-dst-not-references.stderr":"107640628a6e6c0cd9358de8d1841a1442409cd39ce789870d07cd62eb825e02","tests/ui-msrv/transmute-ref-src-not-intobytes.stderr":"b6837722a77618c0a5e3adf04250a381eb0fe45563e231c658a306ca3e373847","tests/ui-msrv/transmute-ref-src-not-nocell.stderr":"2c3929245c9435c725724839cec07e38dfd1e77927931005bf9f14e3aad794b3","tests/ui-stable/transmute-ref-alignment-increase.stderr":"0c60d8a409adead884cf475502bd38e8b364ac4de5d4fb340538b82c143ba3ad","tests/ui-msrv/transmute-ref-src-generic.stderr":"06042e71a9b709923edd9ea77ba9c71d1d1564445a15a7971fdaf284abe552a0","tests/ui-msrv/transmute-mut-size-increase.rs":"70fa56ad32004364710f2c711859bf601aef0ab61ff5264b8f071d9d06769a63","tests/ui-stable/try_transmute_mut-dst-not-tryfrombytes.stderr":"73bac4be5a9f3e15ee5ffa07b506d39bc06b91cb025e74cf89bd8c9a32d879d5","tests/ui-stable/transmute-ref-size-increase.rs":"7f3a5897b73dd9272eac08c4a43e3946fdf527761c3fb376a266e945ddb96448","tests/ui-stable/try_transmute-dst-not-tryfrombytes.rs":"9b4b6b062a4f1a0f29df9754c87b0ec0dfc75cc026ecbf57f67e48acf8ed3b0e","tests/ui-msrv/transmute-mut-src-dst-unsized.stderr":"881f46cb6943f842351be5c0c76ef2ddc87e4a194dac8959d280b68cd7250fe2","tests/ui-stable/transmute-mut-src-dst-unsized.rs":"d52aec2bc815fac314a4ca5819d730a0d1dbac13b51bf2b844701d77ce969a8e","tests/ui-stable/transmute-ref-dst-not-a-reference.rs":"6829c16de2e2dcae944f846235e2f76fca742a24c6970559fc4d10bbf214f96b","tests/ui-stable/transmute-ptr-to-usize.stderr":"5b2df5a1e61b169b7fa627963fc5a9801e33f05553bc15a827b2af19067c8d63","tests/ui-stable/diagnostic-not-implemented-unaligned.rs":"2966d1c424ddade377afc988dbf2bbc323011d222784a0869c6f804eba4d6cbc","tests/ui-nightly/transmute-mut-illegal-lifetime.stderr":"4a0979b14505f84ef7c6a701bb0134251c720ae78d398e0e467ac5c3f4dbbd4e","tests/ui-nightly/transmute-mut-src-generic.rs":"a013a66dfe3ca9fbf349c85794ec8a68a980929a56520df305e7a5a4f9922202","tests/ui-stable/try_transmute_mut-size-decrease.stderr":"cfe3243c374b7acd446add73a94cda56f83c1a3e22ce6b6fb932e2020037f68b","tests/ui-nightly/diagnostic-not-implemented-immutable.rs":"df176f71d385efe46108dfc2d676c7fedddb48f0a9f53ec5fa903e6b7761cf92","tests/ui-msrv/include_value_not_from_bytes.stderr":"04cbcdc040f649d03cd9ebce8a1e6158645f836f44a72195bb153b9043ac34a8","tests/ui-msrv/try_transmute_mut-dst-not-tryfrombytes.stderr":"14ff79216efe8ec2c47daa4799f6aa4bdb8757556b9582492034b75cec5bf766","tests/ui-nightly/diagnostic-not-implemented-from-zeros.stderr":"b09ff91579e1b467aca6c217251ee0f197257838923ad4e832d0ecd71fb9a283","tests/ui-stable/transmute-dst-not-frombytes.stderr":"2dfb06fcf3f62d9450dd3838abec66207f3affc63b0ec5d69a9dda3a87b5d764","tests/ui-nightly/transmute-size-increase.stderr":"3c2cf176db54b8e9f0a8c2a6d0764454a9504e6ff95fdc9acc12f71a7b57a280","tests/ui-stable/transmute-ref-src-dst-unsized.rs":"902e8182ea6b3de7b6e548ae03abc54b5bb8b8a01057e25d1c5e12838876349d","tests/ui-stable/diagnostic-not-implemented-issue-1296.rs":"2f603de3cd80439cf2d50bb36fcc5b9d40c3bd06475273e6f135d9da335866d9","tests/ui-stable/transmute-ref-src-not-a-reference.rs":"69dc6327b77a6cfe806b3493a4287bdfa88d8b353256673ff1e4bc2e28c8eb28","tests/ui-msrv/include_value_not_from_bytes.rs":"a08295e6ec9c4fc6fe0f6a90d7227acb444ce4680e64efb2c53c4ffbd7029dba","tests/ui-nightly/diagnostic-not-implemented-known-layout.stderr":"fe85103ea5bed6073f5f9be9f96e99be91af4a0d1665e1929c21c57d631180ef","METADATA":"44e3a52ca24ed57c2b1cd93005ee8acc4a478f66aabd99121451a96559a49ef4","tests/ui-stable/transmute-mut-dst-not-a-reference.stderr":"ccabfdc69e4b2c5224050a9b5520b2bdc9d6652dc1b78de61d07cad3edb82daa","tests/ui-stable/transmute-mut-dst-unsized.stderr":"64084a80c8bcb1864c611a6186ebf6d02006aea18d5fbc8ab3020c77f23ad889","tests/ui-nightly/transmute-mut-alignment-increase.rs":"4c898b19c904440672c87b7b9ee5b15d996eb312e65b595abfdfcb03cff53345","src/pointer/aliasing_safety.rs":"483198df1f9b2bca14a1630954e9ea0e1275963ff383afedfaf8d87a397f2740","tests/ui-stable/transmute-src-not-intobytes.stderr":"274484264462420d063df81263b57454c140dd36ac9a8f1362dc4f34f834b964","tests/ui-stable/transmute-ref-dst-not-nocell.stderr":"0dd070ab85aa2fe6787ac95dcaac5c31f5984d76394ef50898e42900cbeb3ae3","tests/ui-nightly/transmute-src-not-intobytes.stderr":"bd9283266ac9c30cfea3d1a6f91e52a5972ed3bf83d8421a7c64f2911b805a92","tests/ui-msrv/transmute-mut-dst-not-frombytes.stderr":"05000ba72ea1747a1c12806404dbb124edb068a39d85904d314acfdf412cdee1","src/util/mod.rs":"d5e69ec37a8414ce237fd1aa7ade4f709382c12bf12c161fef0109d6b93a371a","tests/ui-nightly/try_transmute-size-decrease.rs":"7ec7d4c829f2a2df74149b880686371c2a64e293dcb6f5ec10a0c09c4f8229c0","tests/ui-nightly/diagnostic-not-implemented-issue-1296.rs":"2f603de3cd80439cf2d50bb36fcc5b9d40c3bd06475273e6f135d9da335866d9","tests/ui-msrv/transmute-ref-dst-mutable.stderr":"bce1331bebdebfbc253e8945f68897d9f0abd1a2eff9259e6657daba1bdae9fd","tests/ui-msrv/try_transmute-dst-not-tryfrombytes.rs":"9b4b6b062a4f1a0f29df9754c87b0ec0dfc75cc026ecbf57f67e48acf8ed3b0e","tests/ui-nightly/transmute-mut-src-not-intobytes.rs":"12adc96a6bce75e01456c50e5fa08a93290a0b48ed13ef8571b0cad1211cbc8f","tests/ui-stable/transmute-ref-illegal-lifetime.stderr":"541cbc3da9e96328ede88f6cbf6793a9bfeaa3b69a3adfc67aa1d401779b74bb","tests/ui-stable/transmute-mut-dst-not-intobytes.rs":"b9ab140926cae46e0f253eddfa332a0845b25b49ffbe60a17694d06580235066","tests/ui-nightly/transmute-mut-const.stderr":"173ffdf5487393ba533c3c3e939c2b86738b6203d1718e9f7a8ff2a68cd4d50c","tests/ui-nightly/diagnostic-not-implemented-from-zeros.rs":"504fdc193b662116cad680d8354433aae2afd12650b7ce149c5d6c1b280ff650","tests/ui-nightly/transmute-mut-size-increase.stderr":"f884f89285f7b4fdbf97ac8af67a47d3b3f14da8d4effde160f6fa34ccbd9077","tests/ui-stable/try_transmute_ref-dst-not-immutable-tryfrombytes.stderr":"411bdc19ef5c4690a70eadecb2991590370bca6df61891b0cf861f5173e4ebf6","LICENSE-BSD":"d28a77dc4dd456fe1000194260fb4bdf9b97c02e58ff3202c24b1abfdf858f06","tests/ui-stable/diagnostic-not-implemented-unaligned.stderr":"7d0aba840e75ae397534090e22dddebcf6a2895e92acfa4ca3b122dd0894b37f","tests/ui-msrv/transmute-ref-src-dst-unsized.rs":"902e8182ea6b3de7b6e548ae03abc54b5bb8b8a01057e25d1c5e12838876349d","tests/ui-nightly/try_transmute_ref-alignment-increase.rs":"4401c8ae85558b388627f60a60960b33bf4df8eae28437ffa4d20bb668f47036","tests/ui-msrv/transmute-mut-dst-not-a-reference.rs":"6c0fecf8e2bfb51f2d5b46f0b6d6c454b235b26bf63a09e95e01d874125053cd","tests/ui-nightly/transmute-mut-dst-not-frombytes.stderr":"ac49fe2fd04c795f75791d6456fbd8d96b1ff81161c05fc587e24e29f8aa2647","tests/ui-stable/transmute-size-increase.rs":"d57c9f23ba23313236a84809b6a1e1d0fdfc67c1d64db8143f5762671eb68ca9","tests/ui-msrv/transmute-mut-src-not-frombytes.rs":"049b386c8bf296d45e8a1a1f020a763df4ea480a3e1027ccc8f6c31b05889c79","tests/ui-nightly/try_transmute_ref-size-increase.stderr":"72391b2609791208e4ad07cf50aadf25ec86413027563c91890c2b4aba7bce0a","LICENSE-APACHE":"06f9864e3037a400a7f71dc1aa0f21e02424bc6a1e64830f099968dd03829208","tests/ui-nightly/try_transmute_mut-size-increase.rs":"56fbb3134ebc173dc2d959515400b3a9cb9341835337ef3f554f350e316abdb2","tests/ui-nightly/transmute-mut-src-unsized.stderr":"5918d349eb2d8ec0452728ec16440bb9a3ee8fe2c45ddb8efa08e36b7a38b62d","src/lib.rs":"fc472c68184eda3596c200b659e0a3aa82498d668463ad45565e06cec2ca6f70","ci/check_all_toolchains_tested.sh":"65277017a3b96017036eab505921c30b789cff519fc10fa20ce1b00fe068eab8","src/layout.rs":"21a840004a6919ad6c74a721af1edc59bc0558b0853ffcc110c20252136a23f6"}}
\ No newline at end of file
+{"package":null,"files":{"tests/ui-nightly/transmute-ptr-to-usize.rs":"d8aabb58133988be7c282ec9771906b8f199418e69762c92ffc167305890d353","tests/trybuild.rs":"921ec22964a75a8354b4c94f95093b8f854655b71251d7858f583708511f7d77","tests/ui-stable/transmute-ref-dst-mutable.rs":"4283c537172971fda2c3c529c0971bbac66a4ac844bb6f0356f24284d4084b77","tests/ui-msrv/transmute-size-increase.rs":"d57c9f23ba23313236a84809b6a1e1d0fdfc67c1d64db8143f5762671eb68ca9","tests/ui-msrv/diagnostic-not-implemented-known-layout.stderr":"b4ff1049ca82c188053454f208c3003014a5bedd782fd03d7aa748dcdbf656ab","tests/ui-stable/transmute-ref-dst-not-nocell.rs":"51ecd363ef66bbcf0d8daa3376667b8a9ad35b61d78765d502644c1183cbdf1c","tests/ui-stable/try_transmute_ref-size-increase.rs":"4d0fea16788077a938b14852a93c110b7791aa0013bfa12c1cfb4c6689b8eb24","tests/ui-msrv/transmute-mut-dst-unsized.stderr":"73ccc44398fa6320a8e830313c812619072cfbc9e1a694c6f88a5fa06d7e0124","CONTRIBUTING.md":"85209a827d866e207cdc1ed0110192a41c8371af86cbd6d1f2010dce88ae7a49","tests/ui-nightly/try_transmute_mut-dst-not-tryfrombytes.stderr":"321e83acf340e4ec84f3558b962c8ceed1cbc90d9587e755989023b613c30d8a","tests/ui-nightly/try_transmute-size-decrease.stderr":"1ad2968f1243db577e85892b652bbc151f3602828c3a4e68b860cbf178d1e694","tests/ui-nightly/try_transmute_mut-alignment-increase.rs":"6f16a7e4753153e84581902d3d42fc4f0cb2d7ef4b01b71bcaccb0d434dc0f9c","tests/ui-nightly/transmute-mut-src-unsized.stderr":"5918d349eb2d8ec0452728ec16440bb9a3ee8fe2c45ddb8efa08e36b7a38b62d","tests/ui-stable/transmute-mut-src-not-intobytes.stderr":"2190c114527bb2891ed924173d1cef491189c8b7d6837705eaa69c83d30fcd47","tests/ui-nightly/diagnostic-not-implemented-from-bytes.stderr":"d0e6bf4707a48c1f8c75527edd27735f0bfe04b562c00c88c6e43b43af029e8b","tests/ui-stable/transmute-mut-src-unsized.rs":"128a9f55a7b83c98e3bfafdd6a714e60ff545a322cecdef81f8702da3b1e3eb9","tests/ui-msrv/transmute-mut-dst-not-intobytes.stderr":"6e170000866643500d9711b7002779d2d8fffbe06a3bc8632e6e9a4a8bdc1979","testdata/include_value/data":"87c24be7c86405fd019739c0e6362147a7e45b70d4a704282719ff9a4b62dd36","tests/ui-stable/transmute-ref-src-generic.rs":"57c4bbd0ec820778dcfdd40645741e2251f981ca4e98de9ac344c7dbb5381e16","tests/ui-msrv/transmute-ref-src-generic.stderr":"06042e71a9b709923edd9ea77ba9c71d1d1564445a15a7971fdaf284abe552a0","tests/ui-nightly/diagnostic-not-implemented-unaligned.stderr":"74b52b9885291dc3268a07006abd52dbb08ee4bb81342753a87afe0150f3662a","tests/ui-msrv/try_transmute_ref-size-increase.rs":"4d0fea16788077a938b14852a93c110b7791aa0013bfa12c1cfb4c6689b8eb24","tests/ui-stable/transmute-mut-const.rs":"726368515b62c5a4e8c54c91239f28f77ccee01eb384893ac7797e7f47189455","tests/ui-msrv/transmute-src-not-intobytes.stderr":"a92c335cdf37ad91e524b31ba674e8ac60f7a46934d14da39ba8ce05fbe134a2","src/deprecated.rs":"9361d398426a3e834b065fe188e592c7504f1335552d7863918a8f75a793db8e","tests/ui-stable/include_value_not_from_bytes.stderr":"e89055768f51ec6d74a2f2477795951759ea58f1b46442b14d8ef5e22bfbf3c5","tests/ui-nightly/transmute-mut-size-increase.stderr":"f884f89285f7b4fdbf97ac8af67a47d3b3f14da8d4effde160f6fa34ccbd9077","tests/ui-nightly/transmute-mut-src-not-intobytes.stderr":"77e790c7036ea63560945d06816232c6e04b864a5d16b6a19418dd984bd099b9","tests/ui-stable/transmute-mut-size-increase.stderr":"b099797a8b28ac074ba077f06ccb5b1f8d155ea34d2ccb9821b8aaf7f74cbc49","tests/ui-stable/transmute-ref-src-not-a-reference.rs":"69dc6327b77a6cfe806b3493a4287bdfa88d8b353256673ff1e4bc2e28c8eb28","tests/ui-stable/transmute-ref-src-dst-not-references.rs":"b44e925cca270c67fc7f9c4dc18207acd90f77231f8cf79ec965b592586a890f","tests/ui-stable/transmute-mut-dst-not-frombytes.rs":"f51acc153ec92e2ac81b383e8ae662dd8ab253c0a62cd9d846f6d1e2ed76f5a2","tests/ui-stable/transmute-ref-size-increase.stderr":"f23c4fcaa3f1b97338d9c46a51e046bafd8d025a0049984995f75c5f7de0169d","tests/ui-nightly/diagnostic-not-implemented-try-from-bytes.stderr":"ccf8320bbd97bd44406934ee837a84790ab8f05822f87f5f3ed816d047cdf9c8","tests/ui-stable/diagnostic-not-implemented-issue-1296.rs":"2f603de3cd80439cf2d50bb36fcc5b9d40c3bd06475273e6f135d9da335866d9","tests/ui-nightly/try_transmute-dst-not-tryfrombytes.rs":"9b4b6b062a4f1a0f29df9754c87b0ec0dfc75cc026ecbf57f67e48acf8ed3b0e","githooks/pre-push":"8f58f384a52f14baaae2cb06b687a0feccfc5df24d0ae817823b1bbc4d78dbf5","tests/ui-stable/try_transmute_mut-alignment-increase.stderr":"4e70576de4934ae1243020cd94c012e6a875d8f6f41f0683495cf780e74ba270","tests/ui-nightly/try_transmute_mut-src-not-intobytes.stderr":"1ee8ee3b5baf3992d671dd4f07d3eab31ac1b48e7b012f8b5ad83070651c01d1","CHANGELOG.md":"e2b2be60932270ea30707700e553a050b044ffbb6303df84feaad6a729aebc07","src/util/mod.rs":"d5e69ec37a8414ce237fd1aa7ade4f709382c12bf12c161fef0109d6b93a371a","tests/ui-msrv/diagnostic-not-implemented-unaligned.stderr":"c8e633af41e48e2d7d2c89629b01a00a8019bc15726b03e2202065484a82b55e","tests/ui-nightly/transmute-mut-dst-not-a-reference.rs":"6c0fecf8e2bfb51f2d5b46f0b6d6c454b235b26bf63a09e95e01d874125053cd","tests/ui-stable/transmute-mut-src-not-frombytes.stderr":"9fb887dab214fd94560f2031f626663f73ec6984079bca5fccb3b0e775626a6f","tests/ui-stable/transmute-mut-alignment-increase.stderr":"73d0e4eaacca1da4ba0986164ec4ea8a16231bc28501b890e55ccac6a418bfc5","tests/ui-msrv/try_transmute_ref-alignment-increase.rs":"4401c8ae85558b388627f60a60960b33bf4df8eae28437ffa4d20bb668f47036","tests/ui-stable/try_transmute-dst-not-tryfrombytes.rs":"9b4b6b062a4f1a0f29df9754c87b0ec0dfc75cc026ecbf57f67e48acf8ed3b0e","tests/ui-msrv/transmute-dst-not-frombytes.rs":"532de6fb9bb6df56a8621a5f1abb4c58d957650461d266a59581deb36ee77316","tests/ui-stable/transmute-ref-src-not-nocell.stderr":"9179263979f422b52d1f9c999328464b7e4cee3be49f3f358d4783082544a34a","tests/ui-nightly/try_transmute_ref-src-not-immutable-intobytes.stderr":"0fd957d785b6fa2c9084c09aeef120f5b0dbb4ec6c4aa1f810b54a3efbdb1bca","tests/ui-stable/transmute-mut-size-increase.rs":"70fa56ad32004364710f2c711859bf601aef0ab61ff5264b8f071d9d06769a63","tests/ui-stable/transmute-ref-size-decrease.stderr":"433f5558c024581efb54991e8ebee97aedbff06b9b6f2c8581d34039ff671ed4","tests/ui-msrv/transmute-ref-alignment-increase.rs":"adea0a036330e7d60a2fa663ca873dc24596fd81383545ef945d76adcca1c2ab","tests/ui-nightly/transmute-mut-size-increase.rs":"70fa56ad32004364710f2c711859bf601aef0ab61ff5264b8f071d9d06769a63","tests/ui-nightly/transmute-size-increase.rs":"d57c9f23ba23313236a84809b6a1e1d0fdfc67c1d64db8143f5762671eb68ca9","tests/ui-nightly/transmute-mut-dst-unsized.stderr":"896a128d004daf46732047d051e3240a6449f863b151027f3733626bd9336c75","tests/ui-nightly/transmute-mut-src-dst-generic.rs":"880430db77b417304756e0244ac8187c4392a9b1887bdb9683246376a7a557a0","tests/ui-stable/transmute-mut-src-dst-not-references.rs":"cbb01caa49218ce6e4914b03ad1b8bb99a648d7867152577add772de9f0a705e","tests/ui-msrv/transmute-ref-size-increase.rs":"7f3a5897b73dd9272eac08c4a43e3946fdf527761c3fb376a266e945ddb96448","tests/ui-msrv/diagnostic-not-implemented-into-bytes.rs":"5edc2bf1c76f28376eb17613d79025624efbb3465b471b317edb7d399c110e6e","ci/release_crate_version.sh":"eead8dd30d3b86dc2a0821deedaa99e32d25373cd6e7f935ac7f9de6c1938c84","tests/ui-msrv/transmute-mut-const.stderr":"d08ac7260d7d425e66fb273dc61f01dc7726b475d2912caabd62cffa912d48ba","tests/ui-nightly/transmute-mut-dst-not-a-reference.stderr":"39a9aa400068c67a5121d594ccbf775161328e2d96703ec557259a0967a873f3","tests/ui-msrv/transmute-ref-src-dst-not-references.stderr":"b58f31a729ee4a90f8c30ff950c02d49d6ca340d882b431f7764120b0ff8d829","tests/ui-nightly/transmute-mut-src-dst-not-references.stderr":"107640628a6e6c0cd9358de8d1841a1442409cd39ce789870d07cd62eb825e02","tests/ui-stable/transmute-ref-src-not-nocell.rs":"cdd5eeb40f42963e7bec7b45283a53f4322df4a7068398089d0ddc18402ec0a9","tests/ui-nightly/transmute-ref-dst-not-a-reference.rs":"6829c16de2e2dcae944f846235e2f76fca742a24c6970559fc4d10bbf214f96b","tests/ui-msrv/try_transmute_mut-size-decrease.rs":"35886c88a716734e77c05775d5a0766e9b637b9ed4cc76a9cfbba2aa262e1d13","tests/ui-nightly/include_value_wrong_size.stderr":"cf7ab76adbdcde63f4b12b7f97724d5a929788afde3dfe27afcc06841cacd364","tests/ui-msrv/try_transmute_mut-size-increase.stderr":"4eda49b143d847bc6679d478edd985bfc470b1f7a81b443aa7f4cc60087cf524","ci/check_all_toolchains_tested.sh":"65277017a3b96017036eab505921c30b789cff519fc10fa20ce1b00fe068eab8","tests/ui-msrv/try_transmute-dst-not-tryfrombytes.rs":"9b4b6b062a4f1a0f29df9754c87b0ec0dfc75cc026ecbf57f67e48acf8ed3b0e","tests/ui-msrv/transmute-mut-src-dst-unsized.rs":"d52aec2bc815fac314a4ca5819d730a0d1dbac13b51bf2b844701d77ce969a8e","tests/ui-nightly/try_transmute_ref-src-not-immutable-intobytes.rs":"da8b40f0ffb13a891a0a3a76217532da81e7b71d5c6f9c1ebe78cff5c9fcc177","tests/ui-stable/try_transmute-src-not-intobytes.rs":"83ab8176279f90930b9548592114343d724b5af57999ed04cb5b5c32f56f5aad","tests/ui-stable/transmute-ref-src-not-intobytes.stderr":"18fe85f152de5f32f96380e83d770879304585a3add66022e59efb1a17ae8017","tests/ui-stable/transmute-ref-src-not-a-reference.stderr":"f1fac4e3ca8cf71fcc05d3cb4780b7a1084615d6f1bc763a99fa18c06615c9d8","tests/ui-msrv/transmute-mut-src-immutable.rs":"1cb591944d85bb526f182fdc476a0ba965dade3dfbaac8a29a648045d9ac5a21","tests/ui-stable/transmute-ref-dst-not-frombytes.stderr":"dd1f3d8b3297f488212b9207eabfb08ad16b04e970db298307097b8517575e7c","tests/ui-nightly/transmute-ref-dst-generic.stderr":"9d5f318f064a2f5f4a23d27ace8757b38db048badfde9f3a8ec8a45b2c272506","tests/ui-stable/transmute-mut-dst-not-frombytes.stderr":"c99505cca64e65a8dc87b390cf85d94cd953de0e1d775821029a7ceb004ebfb9","ci/check_job_dependencies.sh":"7a48930c53d0c4500fcd6ddadbd2bcbed217c91de1a697ff9eae6012ad1cf85f","tests/ui-stable/transmute-mut-src-dst-unsized.rs":"d52aec2bc815fac314a4ca5819d730a0d1dbac13b51bf2b844701d77ce969a8e","tests/ui-stable/transmute-mut-dst-not-intobytes.rs":"b9ab140926cae46e0f253eddfa332a0845b25b49ffbe60a17694d06580235066","TEST_MAPPING":"20cde0a7b53544a9f3a65e3d60b64b01ae54892de9762cc8e51d38a5f8ceea4d","src/error.rs":"15ad121a811b4111d10e6fac9e12152cc6ff8d7a1f2149377feba4fb49d60d00","tests/ui-stable/try_transmute_ref-src-not-immutable-intobytes.rs":"da8b40f0ffb13a891a0a3a76217532da81e7b71d5c6f9c1ebe78cff5c9fcc177","tests/ui-stable/diagnostic-not-implemented-try-from-bytes.rs":"272d0a53001ba1145b6389077fa9d4b494d56651088ed1e929b7591ca4d76048","tests/ui-nightly/transmute-ref-src-not-nocell.rs":"cdd5eeb40f42963e7bec7b45283a53f4322df4a7068398089d0ddc18402ec0a9","src/util/macro_util.rs":"10df86d960f9f051200c4b05d70fda5eab07a312b28e90634bf455875b7d02d6","tests/ui-msrv/transmute-mut-src-not-intobytes.rs":"12adc96a6bce75e01456c50e5fa08a93290a0b48ed13ef8571b0cad1211cbc8f","tests/ui-msrv/transmute-ref-dst-mutable.stderr":"bce1331bebdebfbc253e8945f68897d9f0abd1a2eff9259e6657daba1bdae9fd","tests/ui-msrv/transmute-ref-src-generic.rs":"57c4bbd0ec820778dcfdd40645741e2251f981ca4e98de9ac344c7dbb5381e16","tests/ui-stable/transmute-ptr-to-usize.stderr":"5b2df5a1e61b169b7fa627963fc5a9801e33f05553bc15a827b2af19067c8d63","tests/ui-nightly/transmute-mut-dst-unsized.rs":"5c040c3eec4b360b4b65a948bcfe1220567cf5bb1939eeefd5bf200cd73d3b96","tests/ui-msrv/diagnostic-not-implemented-from-zeros.rs":"504fdc193b662116cad680d8354433aae2afd12650b7ce149c5d6c1b280ff650","tests/ui-msrv/try_transmute_ref-size-decrease.stderr":"bf5148e7b5bcbb3fbbf83ada9b3f79e4ea0c40105b21720f9d1115773e371ee7","tests/ui-nightly/transmute-ref-src-generic.rs":"57c4bbd0ec820778dcfdd40645741e2251f981ca4e98de9ac344c7dbb5381e16","tests/ui-stable/diagnostic-not-implemented-immutable.rs":"df176f71d385efe46108dfc2d676c7fedddb48f0a9f53ec5fa903e6b7761cf92","tests/ui-stable/try_transmute_mut-size-decrease.rs":"35886c88a716734e77c05775d5a0766e9b637b9ed4cc76a9cfbba2aa262e1d13","tests/ui-msrv/transmute-size-increase.stderr":"73a98194a0dcf4af4eb3f5b3e06ff9c1fc3710f4a629e1c51abff165642e12aa","tests/ui-msrv/transmute-mut-dst-generic.stderr":"4f1d49ba0b043741e8881e6f53922e5b0b60dcadf8148a141395e471766a7679","tests/ui-msrv/transmute-mut-src-unsized.rs":"128a9f55a7b83c98e3bfafdd6a714e60ff545a322cecdef81f8702da3b1e3eb9","tests/ui-stable/try_transmute_ref-size-decrease.rs":"084d0983a7855e3d1eb8a08b0ca9838b1e0b8a07fc88d867a2a7b4519f1057ab","tests/ui-msrv/transmute-mut-size-decrease.rs":"9ab9c03ccf1546957e3412911564a9dad6f0940d55c5285945548f76186fec56","POLICIES.md":"2c88a1c9779bd76926e57478ecb54f633f7ed71b5dceb95a8aff1168e3cd708a","tests/ui-nightly/transmute-mut-src-not-intobytes.rs":"12adc96a6bce75e01456c50e5fa08a93290a0b48ed13ef8571b0cad1211cbc8f","tests/ui-nightly/diagnostic-not-implemented-issue-1296.stderr":"668d4470b770ebb67f3afa1faadff16234a6fd68961aa4732eb60d3e24a5d845","tests/ui-msrv/transmute-mut-src-dst-unsized.stderr":"881f46cb6943f842351be5c0c76ef2ddc87e4a194dac8959d280b68cd7250fe2","tests/ui-msrv/transmute-mut-alignment-increase.stderr":"9714d77cb5dad09b24f116c4018e8179d1c4fe7a130147cb6838b8d06b905f9c","ci/check_fmt.sh":"65a2a98c251f61d5804a0c2f3bfd16551eefef9c703324c603a14683c5a9baf2","tests/ui-nightly/diagnostic-not-implemented-try-from-bytes.rs":"272d0a53001ba1145b6389077fa9d4b494d56651088ed1e929b7591ca4d76048","tests/ui-stable/transmute-ref-alignment-increase.stderr":"0c60d8a409adead884cf475502bd38e8b364ac4de5d4fb340538b82c143ba3ad","tests/ui-msrv/try_transmute_ref-dst-mutable.stderr":"598902a4e5023ffe5758c362abfedad411e027b4473c76e894a361d2c2f22ec6","tests/ui-nightly/include_value_wrong_size.rs":"4993458b5a5df4dabf7668203d30f01b756dbce7b27e2bd3fc6998987d673fcd","tests/ui-stable/transmute-ref-src-generic.stderr":"3c5348f553baf2161a48edce631097e21cf7ad79e5c3d5482b175101dc877c5c","tests/ui-msrv/include_value_wrong_size.rs":"4993458b5a5df4dabf7668203d30f01b756dbce7b27e2bd3fc6998987d673fcd","tests/ui-stable/try_transmute_mut-dst-not-tryfrombytes.stderr":"73bac4be5a9f3e15ee5ffa07b506d39bc06b91cb025e74cf89bd8c9a32d879d5","tests/ui-msrv/transmute-mut-dst-not-intobytes.rs":"b9ab140926cae46e0f253eddfa332a0845b25b49ffbe60a17694d06580235066","tests/ui-msrv/transmute-mut-dst-not-frombytes.stderr":"05000ba72ea1747a1c12806404dbb124edb068a39d85904d314acfdf412cdee1","tests/ui-msrv/try_transmute-size-increase.rs":"5b085b4eb85a46d70ce03799652ba49bc4d51e861e821eddebd94919bcb0ad30","tests/ui-stable/transmute-mut-src-not-intobytes.rs":"12adc96a6bce75e01456c50e5fa08a93290a0b48ed13ef8571b0cad1211cbc8f","tests/ui-nightly/transmute-ref-src-not-nocell.stderr":"1bbe3c1eef6b73c67a08299825451071dafbc8e73de3807624a635c4233b2dd3","tests/ui-msrv/include_value_wrong_size.stderr":"7f501791ea006e3df03d9b3e0dcccc46f5d9bdbb5c64fcaaa31d126311318bb4","tests/ui-msrv/transmute-mut-size-increase.rs":"70fa56ad32004364710f2c711859bf601aef0ab61ff5264b8f071d9d06769a63","tests/ui-stable/try_transmute-size-increase.stderr":"abfe4c810d8997fd3a38d1045d77f508a5ff160621fb02648afd67d9947c0479","tests/ui-stable/transmute-mut-dst-unsized.stderr":"64084a80c8bcb1864c611a6186ebf6d02006aea18d5fbc8ab3020c77f23ad889","tests/ui-nightly/try_transmute_ref-dst-not-immutable-tryfrombytes.rs":"9308e38dd814b2bab53b5912207cc7621635a5c547e621f947ba0d66e2601730","tests/ui-stable/diagnostic-not-implemented-unaligned.stderr":"7d0aba840e75ae397534090e22dddebcf6a2895e92acfa4ca3b122dd0894b37f","tests/ui-msrv/include_value_not_from_bytes.stderr":"04cbcdc040f649d03cd9ebce8a1e6158645f836f44a72195bb153b9043ac34a8","Cargo.toml":"7285899c3240496522e6b3fb932bdab3f6a598ffc7b401f7521aee10464a4f58","tests/ui-nightly/transmute-mut-src-dst-unsized.stderr":"5e2f582c22507e8ee21947b3f6fde213e3c282c700a9b9fb52662ce5f7d2ac7b","tests/ui-stable/transmute-mut-src-immutable.rs":"1cb591944d85bb526f182fdc476a0ba965dade3dfbaac8a29a648045d9ac5a21","tests/ui-msrv/try_transmute_mut-src-not-intobytes.rs":"6d426e7cd765e9b633e6bb0585db7cad22c90ddb7ba403d7894d8bf6848395ed","tests/ui-msrv/transmute-ref-alignment-increase.stderr":"396fd42941a0259a13d868554e6bf7e9a72753ebf3198d13eb3faa6efcc3f81c","tests/ui-msrv/transmute-ref-src-dst-generic.stderr":"199483e82b59ad8724485d64062c623124714a31a4a4aa38fd2808521d7f9eb4","tests/ui-stable/try_transmute_mut-dst-not-tryfrombytes.rs":"aeb4371e28787b0a2e75e616441a55129cd299d9681a81095c72e6e7f7b9512a","tests/ui-stable/try_transmute_mut-src-not-intobytes.stderr":"654aff1409a747300684b85bcb36f3c88b06afaab5e01d7f8c5cf71ca42d7356","tests/ui-nightly/invalid-impls/invalid-impls.stderr":"78696f82238459ae50851e30a89bd8bcf6c2a07edb09e79055cd92561c494949","win-cargo.bat":"cb0d4c835875e854253a11ae8d28ab0e00070096dcc4bfba6d7ab06c6790a759","tests/ui-msrv/try_transmute-size-decrease.stderr":"d42b2c8fdd44d6b5172d5bb507b8c45bf44b3feb98501940d7e37d16b07aebca","tests/ui-stable/try_transmute_ref-alignment-increase.stderr":"8fddf60d179378ce74bf4b885627ecdf916c00e13f1eeedee463a428123e6da0","tests/ui-nightly/diagnostic-not-implemented-immutable.rs":"df176f71d385efe46108dfc2d676c7fedddb48f0a9f53ec5fa903e6b7761cf92","tests/ui-nightly/transmute-ref-src-not-intobytes.rs":"dd932cdde770d1ad0c0e5c147cb53aebdbfe6a023a6873e807f2429a14bc654d","tests/ui-stable/try_transmute_mut-size-increase.stderr":"92f8a071e9d6c5bfc7efd38f85cc23d8dc69f810e42d6e95855162f5d6d89e42","tests/ui-stable/max-align.rs":"cdca9a14834aa08b1dea1a59baddd126a77cb7dffe9b90c9f9feb6b490c31594","tests/ui-msrv/max-align.rs":"cdca9a14834aa08b1dea1a59baddd126a77cb7dffe9b90c9f9feb6b490c31594","tests/ui-nightly/transmute-mut-src-dst-generic.stderr":"822747c6985827da75680660c52db65a28c8ebd97ffabda1060d7c04e61ef1ef","tests/ui-msrv/try_transmute_mut-dst-not-tryfrombytes.stderr":"14ff79216efe8ec2c47daa4799f6aa4bdb8757556b9582492034b75cec5bf766","tests/ui-nightly/try_transmute-dst-not-tryfrombytes.stderr":"93f81521554ae4ca5f38a5448834c3cb9fd33e7038e44cee5fa8dc78fa095288","tests/ui-nightly/transmute-ref-alignment-increase.rs":"adea0a036330e7d60a2fa663ca873dc24596fd81383545ef945d76adcca1c2ab","tests/ui-nightly/transmute-ref-src-dst-unsized.rs":"902e8182ea6b3de7b6e548ae03abc54b5bb8b8a01057e25d1c5e12838876349d","tests/ui-msrv/transmute-ptr-to-usize.rs":"d8aabb58133988be7c282ec9771906b8f199418e69762c92ffc167305890d353","tests/ui-msrv/transmute-mut-src-immutable.stderr":"48ddd05834acde5456f6b6e9e389098995a837562dbde288d813b0c9233900b0","tests/ui-nightly/transmute-mut-src-generic.stderr":"d34b17cc3c86a3b9ade3f48979091690f7628ac1c5a741d52cfe751db0809abb","tests/ui-stable/try_transmute_ref-size-decrease.stderr":"7c5f55445dc2e4dda5230b54103fc0abca4b9bf626c0a846a5a0f5c60b95d441","tests/ui-stable/try_transmute_mut-size-increase.rs":"56fbb3134ebc173dc2d959515400b3a9cb9341835337ef3f554f350e316abdb2","src/wrappers.rs":"d6f5fea4cb462e0208bdbe82abc3191f268ee7d24f3737937270ec84cdb6e5a3","tests/ui-stable/diagnostic-not-implemented-from-zeros.stderr":"b1e6fe06699c7be7fc49f987e6b985905e44c26a547907b58d1867751b3c1c9e","tests/ui-nightly/try_transmute-src-not-intobytes.rs":"83ab8176279f90930b9548592114343d724b5af57999ed04cb5b5c32f56f5aad","tests/ui-msrv/transmute-ref-src-dst-generic.rs":"2d25888552996fd964461247b07cf1a5974e6fc0dffed2464b795bdf56e7e518","src/pointer/mod.rs":"425bf5082767fe98d041e2dd95e705eec7629d94dcd36a3ed5dc6523d7f0400d","tests/ui-stable/transmute-ref-size-increase.rs":"7f3a5897b73dd9272eac08c4a43e3946fdf527761c3fb376a266e945ddb96448","tests/ui-nightly/transmute-ref-size-decrease.rs":"318b336f688eaeb7ddcb574cf750b7e1cc728b1db3ae97b5d025a325bcc95747","src/ref.rs":"8b39604079965342da67c8727ca57fe078f0b95d2c02c9aec4183790a4ad68a8","tests/ui-stable/transmute-dst-not-frombytes.rs":"532de6fb9bb6df56a8621a5f1abb4c58d957650461d266a59581deb36ee77316","tests/ui-msrv/transmute-ref-size-decrease.stderr":"76f3e04b668db7118c8914877d57e6d79d8812d50fc98e651252de6319309e25","tests/ui-nightly/transmute-mut-illegal-lifetime.rs":"cd95f98b5a7f43c9b9f20d53bedbfa0cc3d8b6ba2af182abf6a2098b31dc6c6e","tests/ui-nightly/transmute-mut-alignment-increase.rs":"4c898b19c904440672c87b7b9ee5b15d996eb312e65b595abfdfcb03cff53345","tests/ui-nightly/transmute-ref-dst-not-a-reference.stderr":"718ffdabf82ebe3f12e6f592efe4016cadf2c1da3d749c2701ab8a32438f1837","tests/ui-stable/transmute-ptr-to-usize.rs":"d8aabb58133988be7c282ec9771906b8f199418e69762c92ffc167305890d353","tests/ui-nightly/transmute-ref-size-decrease.stderr":"ed1304243850ab7a06427cff1d1216f306be94d389bad35f9d048129640d3586","tests/ui-stable/diagnostic-not-implemented-known-layout.rs":"fa78a576df6c568a5ad8517efac60f5953a4d58b233e33e135638bcdfff43ae2","tests/ui-stable/transmute-mut-src-immutable.stderr":"c8a0e3107e1805329d83ad742067dbe9a794a7fdbec7da30e8a0622d6398e719","tests/ui-msrv/diagnostic-not-implemented-known-layout.rs":"fa78a576df6c568a5ad8517efac60f5953a4d58b233e33e135638bcdfff43ae2","tests/ui-msrv/transmute-dst-not-frombytes.stderr":"84e2b67c3c9f73b7d561c97a91048ae9eb91f5e2737b1723bbe6ae1ba05cd9d4","tests/ui-nightly/try_transmute_ref-dst-not-immutable-tryfrombytes.stderr":"b59f2818bb1e3b145a86bf05c5c780153bf5e3cb30e25b2f39563bafd85f7af1","LICENSE-APACHE":"06f9864e3037a400a7f71dc1aa0f21e02424bc6a1e64830f099968dd03829208","tests/ui-stable/transmute-ref-src-not-intobytes.rs":"dd932cdde770d1ad0c0e5c147cb53aebdbfe6a023a6873e807f2429a14bc654d","tests/ui-stable/transmute-mut-size-decrease.stderr":"991baa632937d8acbfc9caa58a9ec659f2dcaa412e2b92ea57a1df9edf977099","tests/ui-nightly/transmute-mut-src-not-a-reference.stderr":"d17b2875a1dc1d904f8dbb6001dad080100b653673f5cc6ee192825666400fe9","tests/ui-msrv/transmute-mut-size-decrease.stderr":"b7ee92e76faa4129d75d9f986ce2e5ef50f8924fef485ace3e0ad732062e28cd","patches/LICENSE.patch":"fcafb83042215e4a906214694a50d4a76f333aadb3fcd6bee8547f3831c0b1a4","tests/ui-nightly/try_transmute_ref-alignment-increase.rs":"4401c8ae85558b388627f60a60960b33bf4df8eae28437ffa4d20bb668f47036","tests/ui-stable/try_transmute_mut-size-decrease.stderr":"cfe3243c374b7acd446add73a94cda56f83c1a3e22ce6b6fb932e2020037f68b","tests/ui-nightly/transmute-ref-src-dst-unsized.stderr":"f9db33200fe5eb498ae50246b685334126a52c856f1ca17929bc15a766468469","tests/ui-stable/transmute-mut-dst-not-intobytes.stderr":"81ab8da4af0b9c234bdc35062f8ba5864846c3690970acb31857d8bd44fa4065","tests/ui-msrv/transmute-ptr-to-usize.stderr":"80764029a66325c51dffca8961dfaae3b0c9b3723d8c1d53933942ffac6deb2f","tests/ui-msrv/transmute-mut-src-dst-not-references.rs":"cbb01caa49218ce6e4914b03ad1b8bb99a648d7867152577add772de9f0a705e","tests/ui-nightly/transmute-dst-not-frombytes.rs":"532de6fb9bb6df56a8621a5f1abb4c58d957650461d266a59581deb36ee77316","tests/ui-msrv/transmute-src-not-intobytes.rs":"e39129733ec5406376c1cd79a0eb2b66d89ee89e0cd629cf8ba5c8c6fe0c0cd1","tests/ui-nightly/transmute-ref-dst-not-nocell.rs":"51ecd363ef66bbcf0d8daa3376667b8a9ad35b61d78765d502644c1183cbdf1c","tests/ui-msrv/try_transmute_ref-size-decrease.rs":"084d0983a7855e3d1eb8a08b0ca9838b1e0b8a07fc88d867a2a7b4519f1057ab","tests/ui-nightly/transmute-mut-src-not-a-reference.rs":"a854a05999caebc97a08e37d037c4905a859e3a1f4f6d5e5803ff03af0bb5470","tests/ui-nightly/transmute-mut-src-immutable.rs":"1cb591944d85bb526f182fdc476a0ba965dade3dfbaac8a29a648045d9ac5a21","tests/ui-stable/try_transmute-dst-not-tryfrombytes.stderr":"ce765b88e96411278c1a724c24bee01620b82b8b0e3473a3be4fe3583167ae88","tests/ui-msrv/transmute-ref-src-not-a-reference.rs":"69dc6327b77a6cfe806b3493a4287bdfa88d8b353256673ff1e4bc2e28c8eb28","src/impls.rs":"6f87145ff343afb93b947782d1ed9954905723074c88c152b95635397ac871b2","tests/ui-nightly/transmute-size-decrease.stderr":"daa5aa155c5018eb91ec289c1675fc253140607c36922393668f4ab0d0b4401e","tests/ui-msrv/try_transmute_mut-alignment-increase.rs":"6f16a7e4753153e84581902d3d42fc4f0cb2d7ef4b01b71bcaccb0d434dc0f9c","tests/ui-nightly/transmute-ref-src-not-a-reference.rs":"69dc6327b77a6cfe806b3493a4287bdfa88d8b353256673ff1e4bc2e28c8eb28","tests/ui-nightly/try_transmute_ref-size-increase.stderr":"72391b2609791208e4ad07cf50aadf25ec86413027563c91890c2b4aba7bce0a","tests/ui-stable/transmute-ref-dst-mutable.stderr":"feb9f6b46c17d408830fda2f2a9a2498e55cac8f2f29c024704e9ab438de3aad","tests/ui-stable/transmute-ref-illegal-lifetime.stderr":"541cbc3da9e96328ede88f6cbf6793a9bfeaa3b69a3adfc67aa1d401779b74bb","tests/ui-nightly/try_transmute_ref-size-decrease.rs":"084d0983a7855e3d1eb8a08b0ca9838b1e0b8a07fc88d867a2a7b4519f1057ab","tests/ui-stable/transmute-mut-src-not-a-reference.stderr":"9e1ec4f9523ba33500f6d7cc6ceb754f0ff171c266239790397d143ea2490d16","tests/ui-stable/transmute-size-increase.rs":"d57c9f23ba23313236a84809b6a1e1d0fdfc67c1d64db8143f5762671eb68ca9","tests/ui-stable/transmute-size-increase.stderr":"b94a3c90f34369921022a8018730a3cd79f8bd32cd6a2e2fb8afb0417a7011d4","tests/ui-nightly/transmute-mut-const.stderr":"173ffdf5487393ba533c3c3e939c2b86738b6203d1718e9f7a8ff2a68cd4d50c","tests/ui-stable/try_transmute_ref-src-not-immutable-intobytes.stderr":"c39785a948572187b7202282400095230656c1cccace9da3219184f20e3a6b8c","tests/ui-stable/transmute-src-not-intobytes.rs":"e39129733ec5406376c1cd79a0eb2b66d89ee89e0cd629cf8ba5c8c6fe0c0cd1","src/macros.rs":"9fb37d94e970ed890bbeab98ef7e234b9e33704f7a2dc3413ee204b394200d00","tests/ui-nightly/try_transmute_ref-alignment-increase.stderr":"7e5091f376fa99eeb8240dfdee4a18f73101e54ffd85c058900ce46906b36ac4","tests/ui-nightly/transmute-mut-alignment-increase.stderr":"6953ae0f33bcd9e911b263d56c3a82702ac22deee81c854e23d79b5edf26db4c","tests/ui-msrv/transmute-ref-dst-generic.rs":"fceea5349611147b46a0d897ff4df4353ef2d2550c45a5ee14a74bba9fa272c1","tests/ui-nightly/include_value_not_from_bytes.rs":"a08295e6ec9c4fc6fe0f6a90d7227acb444ce4680e64efb2c53c4ffbd7029dba","tests/ui-msrv/transmute-mut-src-not-a-reference.rs":"a854a05999caebc97a08e37d037c4905a859e3a1f4f6d5e5803ff03af0bb5470","tests/ui-stable/transmute-ref-dst-not-a-reference.stderr":"155e4b584557ec874e926e64ebe136ee7702b35b6f54a21338f96c481d34ee02","tests/ui-msrv/try_transmute_mut-size-decrease.stderr":"60c65a6a4062ddf51aa878d60ed048d2580bc0da0085281c4cf1d7b0bafd451c","tests/ui-msrv/transmute-ref-src-not-nocell.stderr":"2c3929245c9435c725724839cec07e38dfd1e77927931005bf9f14e3aad794b3","tests/ui-nightly/transmute-src-not-intobytes.stderr":"bd9283266ac9c30cfea3d1a6f91e52a5972ed3bf83d8421a7c64f2911b805a92","tests/ui-nightly/try_transmute-size-increase.stderr":"3e21640a804b7ab375eff3c3b8f9d802b2a4da4551b29dd83489faedb021b54a","tests/ui-stable/try_transmute_ref-dst-not-immutable-tryfrombytes.rs":"9308e38dd814b2bab53b5912207cc7621635a5c547e621f947ba0d66e2601730","tests/ui-nightly/transmute-mut-dst-not-frombytes.rs":"f51acc153ec92e2ac81b383e8ae662dd8ab253c0a62cd9d846f6d1e2ed76f5a2","tests/ui-stable/transmute-ref-src-unsized.stderr":"09fab516d92566d8f8f4a288a692bc67899ed9dad25df226e6ddf0b5253dd5bb","tests/ui-msrv/transmute-mut-src-dst-generic.stderr":"369d3e3947e81de8f3e2fa49ade8e8263e7b493bc4e7d5560e44796a960fe87b","tests/ui-nightly/diagnostic-not-implemented-from-zeros.rs":"504fdc193b662116cad680d8354433aae2afd12650b7ce149c5d6c1b280ff650","tests/ui-nightly/invalid-impls/invalid-impls.rs":"d135ef15bca8d0e7b2c3bf1596c57dbf4b5a98923089b4e5c060a830dd76ff3e","tests/ui-nightly/transmute-ref-src-not-intobytes.stderr":"b551efcfe51676842fbcdfa9cbc7044470cbe1289adcd731f486ebaadf4d47aa","tests/ui-stable/invalid-impls/invalid-impls.rs":"d135ef15bca8d0e7b2c3bf1596c57dbf4b5a98923089b4e5c060a830dd76ff3e","tests/ui-msrv/try_transmute_mut-size-increase.rs":"56fbb3134ebc173dc2d959515400b3a9cb9341835337ef3f554f350e316abdb2","LICENSE":"d28a77dc4dd456fe1000194260fb4bdf9b97c02e58ff3202c24b1abfdf858f06","tests/ui-nightly/try_transmute_ref-dst-mutable.stderr":"3ecd55adfd0ebd1d1f91444cd41776e052e1bf85d0f17dca454fd1b5889f03d5","tests/ui-stable/transmute-ref-dst-not-a-reference.rs":"6829c16de2e2dcae944f846235e2f76fca742a24c6970559fc4d10bbf214f96b","tests/ui-nightly/transmute-ref-size-increase.rs":"7f3a5897b73dd9272eac08c4a43e3946fdf527761c3fb376a266e945ddb96448","tests/ui-stable/diagnostic-not-implemented-into-bytes.rs":"5edc2bf1c76f28376eb17613d79025624efbb3465b471b317edb7d399c110e6e","tests/ui-nightly/try_transmute_ref-size-decrease.stderr":"b9b37df32c91aa8574ffcac50f3bccf12747af3c823a71f6df9f2c1bf912a40b","tests/ui-nightly/transmute-mut-src-dst-not-references.rs":"cbb01caa49218ce6e4914b03ad1b8bb99a648d7867152577add772de9f0a705e","tests/ui-nightly/try_transmute_mut-src-not-intobytes.rs":"6d426e7cd765e9b633e6bb0585db7cad22c90ddb7ba403d7894d8bf6848395ed","tests/ui-nightly/transmute-ref-src-generic.stderr":"6df8948f70d9677198b6065cd8f62d5cd652f00bda556a9d88ed0d22fd24f772","tests/ui-stable/transmute-ref-dst-unsized.rs":"e3beead5f1b51a62ad8974c024fb0db3ed0611c05e5ab05a65ee284e150b3ff8","tests/ui-stable/transmute-ref-src-dst-generic.rs":"2d25888552996fd964461247b07cf1a5974e6fc0dffed2464b795bdf56e7e518","tests/ui-nightly/transmute-size-increase.stderr":"3c2cf176db54b8e9f0a8c2a6d0764454a9504e6ff95fdc9acc12f71a7b57a280","tests/ui-stable/diagnostic-not-implemented-issue-1296.stderr":"fd05a6126ee99c97bf588bc1945dee217ec6b1ebd6c5f9bc2e86d1568db5f21c","tests/ui-stable/transmute-ref-alignment-increase.rs":"adea0a036330e7d60a2fa663ca873dc24596fd81383545ef945d76adcca1c2ab","tests/ui-msrv/transmute-ref-dst-not-nocell.stderr":"7626fce7a73436c76c9fedb695a35cf05a749b131ec39ff6e664b80c5f47506a","LICENSE-BSD":"d28a77dc4dd456fe1000194260fb4bdf9b97c02e58ff3202c24b1abfdf858f06","tests/ui-nightly/transmute-mut-src-immutable.stderr":"39535092fe08383c4c3402e45d1a77f375dd023a2d8a751a902bed545534a55f","tests/ui-nightly/try_transmute_ref-size-increase.rs":"4d0fea16788077a938b14852a93c110b7791aa0013bfa12c1cfb4c6689b8eb24","cargo_embargo.json":"8dadca62fb893eebf3315c2bd5c6faf68509954c1dae3d43fbb4b7ba3a9adc52","tests/ui-stable/transmute-mut-src-not-frombytes.rs":"049b386c8bf296d45e8a1a1f020a763df4ea480a3e1027ccc8f6c31b05889c79","tests/ui-nightly/transmute-ref-src-unsized.stderr":"0095536d93fd5e48b95ce51beeb90e7d5ba595e9d1d39a0baff4352ea4e29f58","tests/ui-nightly/transmute-ref-illegal-lifetime.stderr":"fe0f7131d3d794f5ffaee93c324e29c73f2f6bf82cfa1f9105bd999af81bf497","tests/ui-nightly/try_transmute_mut-size-decrease.stderr":"02ba457b8a97a46a75af4fd26a621c6387fd020c42e4123dff4e072bf068ccdb","tests/ui-nightly/transmute-ptr-to-usize.stderr":"52244e5fdd1f8c620c745cca54f594eebea3408101ac77def8b2889e4a86c8de","tests/ui-msrv/try_transmute_ref-alignment-increase.stderr":"94c5c47b77019bf307e009b38589317eb3308ba8b6706b920d5fcadf550a3b8e","tests/ui-stable/transmute-mut-const.stderr":"2d4dc99784abe6e6aa94adb1db2863387997893a92504f8a74a7f940e27654a4","tests/ui-msrv/try_transmute-size-decrease.rs":"7ec7d4c829f2a2df74149b880686371c2a64e293dcb6f5ec10a0c09c4f8229c0","tests/ui-msrv/max-align.stderr":"eef0eaf82a223fe5b406e2b507478474b47d323cd8cab32a730dcc230dfa4969","tests/ui-msrv/transmute-mut-alignment-increase.rs":"4c898b19c904440672c87b7b9ee5b15d996eb312e65b595abfdfcb03cff53345","tests/ui-nightly/transmute-ref-src-dst-generic.rs":"2d25888552996fd964461247b07cf1a5974e6fc0dffed2464b795bdf56e7e518","tests/ui-nightly/diagnostic-not-implemented-immutable.stderr":"ce7e567bd10fedfdf7d33e088805d955a66d8388ee65988a3e574e12eac6270a","tests/ui-stable/transmute-ref-dst-not-frombytes.rs":"a989f7f680cd3072ee1a0dd631fab02caa30c64c53ced9b5719d79dbcfbcf97f","tests/ui-msrv/transmute-ref-src-dst-unsized.rs":"902e8182ea6b3de7b6e548ae03abc54b5bb8b8a01057e25d1c5e12838876349d","tests/ui-msrv/transmute-mut-dst-not-frombytes.rs":"f51acc153ec92e2ac81b383e8ae662dd8ab253c0a62cd9d846f6d1e2ed76f5a2","tests/ui-msrv/transmute-ref-size-decrease.rs":"318b336f688eaeb7ddcb574cf750b7e1cc728b1db3ae97b5d025a325bcc95747","tests/ui-msrv/transmute-mut-src-not-a-reference.stderr":"10a77e576756bdeb3867c5f8b54687c8ef68660b3ebc15265acc2d0c4234577c","tests/ui-stable/try_transmute-size-decrease.stderr":"41e44f6ad37677ef271540c0095f18273ae97c87302e49fb6aa821b19bbffd33","tests/ui-stable/try_transmute_ref-dst-not-immutable-tryfrombytes.stderr":"411bdc19ef5c4690a70eadecb2991590370bca6df61891b0cf861f5173e4ebf6","tests/ui-stable/transmute-mut-src-generic.rs":"a013a66dfe3ca9fbf349c85794ec8a68a980929a56520df305e7a5a4f9922202","tests/ui-msrv/transmute-ref-src-dst-not-references.rs":"b44e925cca270c67fc7f9c4dc18207acd90f77231f8cf79ec965b592586a890f","tests/ui-stable/transmute-dst-not-frombytes.stderr":"2dfb06fcf3f62d9450dd3838abec66207f3affc63b0ec5d69a9dda3a87b5d764","tests/ui-stable/transmute-mut-src-dst-unsized.stderr":"ce6a6fc09bf90254871bae8f67e008031ef46c2d3ea81b38c140ab6fd6c8b1df","tests/ui-nightly/transmute-ref-dst-not-frombytes.rs":"a989f7f680cd3072ee1a0dd631fab02caa30c64c53ced9b5719d79dbcfbcf97f","tests/ui-msrv/try_transmute_ref-dst-not-immutable-tryfrombytes.stderr":"9a3b289fff477333baf68bb61bec4e167d02cb177be3803b42001dc256f3f453","tests/ui-stable/transmute-src-not-intobytes.stderr":"274484264462420d063df81263b57454c140dd36ac9a8f1362dc4f34f834b964","tests/ui-msrv/transmute-mut-size-increase.stderr":"79ffa82f2d0c53fe5b2e55f0f358c7d20f8452cf892f3866716e08b4ea6322bd","tests/ui-msrv/transmute-size-decrease.rs":"ef04ab5d6ed074c0d0ab0f979fba4b5a580e1ebeab431b7a432a4348194a67b9","tests/ui-nightly/transmute-mut-src-unsized.rs":"128a9f55a7b83c98e3bfafdd6a714e60ff545a322cecdef81f8702da3b1e3eb9","rustfmt.toml":"5c169706acf81062608764052838eafc68fe950d12d8ccda6013af5b446d63fe","tests/ui-nightly/transmute-ref-illegal-lifetime.rs":"771b734779b00309b7ab112891e5fa76af2d7b5a822b4db2f34b3edebf1f7b9d","tests/ui-stable/transmute-ref-src-dst-unsized.stderr":"00b9db39d0d09378a0c97a13b3afa1aa9e5e49a3b5ffaf2b8423d195d176c334","tests/ui-msrv/transmute-ref-src-dst-unsized.stderr":"e419f9725cf4a4dd8df13335ede12fff4b8eaba1ae0537831df8e39e46992c29","tests/ui-stable/transmute-mut-dst-generic.stderr":"bd6e980582dbdacc490fbe7fa43c388b6fa6a6da60d911f08b77c316295f665d","tests/ui-stable/try_transmute-size-decrease.rs":"7ec7d4c829f2a2df74149b880686371c2a64e293dcb6f5ec10a0c09c4f8229c0","tests/ui-msrv/transmute-ref-src-not-intobytes.stderr":"b6837722a77618c0a5e3adf04250a381eb0fe45563e231c658a306ca3e373847","tests/ui-nightly/transmute-src-not-intobytes.rs":"e39129733ec5406376c1cd79a0eb2b66d89ee89e0cd629cf8ba5c8c6fe0c0cd1","tests/ui-nightly/transmute-ref-alignment-increase.stderr":"db8bc6a0ac55ed87f35ddeb22965c7259b6a076d7616b56fe4fa0db4e201cd1b","tests/ui-nightly/diagnostic-not-implemented-issue-1296.rs":"2f603de3cd80439cf2d50bb36fcc5b9d40c3bd06475273e6f135d9da335866d9","tests/ui-stable/transmute-mut-src-unsized.stderr":"55c8d44cf3104779738bc7b7d8ee177582ecb07435f44c0bd4376b22f00f5c4f","tests/ui-stable/diagnostic-not-implemented-from-zeros.rs":"504fdc193b662116cad680d8354433aae2afd12650b7ce149c5d6c1b280ff650","tests/ui-msrv/transmute-ref-dst-not-nocell.rs":"51ecd363ef66bbcf0d8daa3376667b8a9ad35b61d78765d502644c1183cbdf1c","tests/ui-nightly/transmute-mut-size-decrease.stderr":"d2b080797a83dfb2168e2641483bac5672a033d3a8a90bbc8732d2f062bad7a9","tests/ui-msrv/transmute-mut-illegal-lifetime.rs":"cd95f98b5a7f43c9b9f20d53bedbfa0cc3d8b6ba2af182abf6a2098b31dc6c6e","Android.bp":"8105a4e78532d0899ee8db7bfa76bef9d2a511e92719789949efb99049a3f1be",".cargo-checksum.json":"43fad3a7e45434221414bf24b48052ef973a28adbdf71127977f156360cbfa29","tests/ui-nightly/try_transmute-size-increase.rs":"5b085b4eb85a46d70ce03799652ba49bc4d51e861e821eddebd94919bcb0ad30","tests/ui-msrv/transmute-ref-src-unsized.stderr":"c0c284ae12d1e66006238c401ebc695b3b6c53dfc4ea203c5634a397c4e9f499","tests/ui-stable/include_value_not_from_bytes.rs":"a08295e6ec9c4fc6fe0f6a90d7227acb444ce4680e64efb2c53c4ffbd7029dba","tests/ui-msrv/transmute-mut-dst-not-a-reference.rs":"6c0fecf8e2bfb51f2d5b46f0b6d6c454b235b26bf63a09e95e01d874125053cd","src/pointer/aliasing_safety.rs":"483198df1f9b2bca14a1630954e9ea0e1275963ff383afedfaf8d87a397f2740","tests/ui-msrv/transmute-ref-dst-not-a-reference.stderr":"b94916f2a4fddd7280cfc4114be176479ecefd8030891791d38760a475e688f7","tests/ui-msrv/diagnostic-not-implemented-immutable.stderr":"4bcf0cba8c816a7a5e7f13256b273e0b83c4da317a7fe6b8e61e4909b509af02","tests/ui-stable/transmute-ref-illegal-lifetime.rs":"771b734779b00309b7ab112891e5fa76af2d7b5a822b4db2f34b3edebf1f7b9d","README.md":"11b7d40320fe792a2a9e536116032a23cdd3a38c8508834a0fe85c5dd72b08be","tests/ui-nightly/transmute-mut-dst-generic.stderr":"4c57933cb9db077d9be42b1c52f7371d13a04d1a385a297e63f543477961a00c","tests/ui-stable/diagnostic-not-implemented-unaligned.rs":"2966d1c424ddade377afc988dbf2bbc323011d222784a0869c6f804eba4d6cbc","tests/ui-msrv/transmute-mut-dst-generic.rs":"41e6addb7da9fde8c3f93182b3cc484d3a2b5c1cfc077ecc66c0a6f27e22f647","tests/ui-msrv/diagnostic-not-implemented-try-from-bytes.stderr":"a62b9bd963ca08819e43c531340f7b7bdc289041b653335879a23cb78289eaba","tests/ui-msrv/try_transmute_mut-alignment-increase.stderr":"f9f50bf211cd30ac6eb653dea5b654a747ce2af13c5e84535c0db078bbf5f09f","tests/ui-nightly/try_transmute_mut-alignment-increase.stderr":"74a715b6f48e41a43d74e2a6645cf42957a2201d15d91e00f7778fe390af7504","tests/ui-nightly/try_transmute_mut-size-increase.rs":"56fbb3134ebc173dc2d959515400b3a9cb9341835337ef3f554f350e316abdb2","tests/ui-nightly/include_value_not_from_bytes.stderr":"b9f9fcd0eb2d39704970c8f86bd3ce4eaf33b4c4a9eda58d0414cc5408c6b61c","tests/ui-stable/transmute-mut-src-dst-generic.stderr":"13cf4024744134f35e2dbd75921023a0d9f89b7ba16005b4b2b15ac35d9b7003","tests/ui-stable/try_transmute_ref-dst-mutable.stderr":"d29cc786d1994b6aebac2258aeeaa3bbf03723ab2f21e855d18c63ecc5980f28","tests/ui-msrv/transmute-mut-src-not-frombytes.rs":"049b386c8bf296d45e8a1a1f020a763df4ea480a3e1027ccc8f6c31b05889c79","tests/ui-msrv/diagnostic-not-implemented-unaligned.rs":"2966d1c424ddade377afc988dbf2bbc323011d222784a0869c6f804eba4d6cbc","tests/ui-msrv/transmute-ref-illegal-lifetime.stderr":"6fee6a359ec36d57358d73a87af9ed45b380f10a6a07212fc711c7671828ec82","tests/ui-stable/diagnostic-not-implemented-immutable.stderr":"f518f79ce9ad326613859ad0c5abc5ed035e0e0a15ce2f3a643182d4ac20dc5b","tests/ui-msrv/transmute-mut-const.rs":"726368515b62c5a4e8c54c91239f28f77ccee01eb384893ac7797e7f47189455","tests/ui-msrv/transmute-ref-src-unsized.rs":"cbb75ec9eb3729442f57afc55758f4b638687ed0677e58a5e784b5f53e6a82ee","tests/ui-nightly/transmute-ref-src-dst-not-references.rs":"b44e925cca270c67fc7f9c4dc18207acd90f77231f8cf79ec965b592586a890f","tests/ui-stable/include_value_wrong_size.stderr":"69cb54abc7ee3df7a9ebd4606efc36bb714239b8a24dc2db1d7b93291c65ca4e","tests/ui-nightly/transmute-mut-size-decrease.rs":"9ab9c03ccf1546957e3412911564a9dad6f0940d55c5285945548f76186fec56","src/pointer/ptr.rs":"51ae8675f62b8b59e375f5910a36578e2e31a67fbea8b1ece961961930e6de73","tests/ui-stable/transmute-ref-dst-unsized.stderr":"4464ba575fdef73a3e673f45f290bff488fc393703074cee4d47ebbc01c164d7","tests/ui-stable/transmute-mut-dst-not-a-reference.rs":"6c0fecf8e2bfb51f2d5b46f0b6d6c454b235b26bf63a09e95e01d874125053cd","cargo.sh":"dac54d3a35b77498b165a902b948ab1a4e61ce6d80cdb4fb1cb99b061554f9b1","tests/ui-msrv/transmute-mut-src-generic.stderr":"2978625f4a64e19ab7c90daa94053ea3e57012e4e42de1aed645c8dfe1ad9221","tests/ui-stable/transmute-mut-illegal-lifetime.stderr":"030e0a765ec0b8c8b0a928451ec1c783ca395c65c8e445684a22a432cbd7af9a","tests/ui-stable/diagnostic-not-implemented-known-layout.stderr":"c6c580eb089d6b3e72f84be6af84727cc8db2f8d6e9cc18baa8542f31d89bd8d","tests/ui-stable/diagnostic-not-implemented-from-bytes.stderr":"00d55d5070a77d60947a488bc88be730d16ec1f0f14f5b01ac8bbd69d1a1d4dc","tests/ui-nightly/max-align.rs":"cdca9a14834aa08b1dea1a59baddd126a77cb7dffe9b90c9f9feb6b490c31594","tests/ui-msrv/transmute-mut-src-unsized.stderr":"8bbcb2bde1a1257a087a7fc240ad897508c371b90478586a6b8cadb0e8594218","tests/ui-stable/transmute-size-decrease.stderr":"d3853ca2545ca6e68315f1282aca6949d98d65a932789ad25feac2b827712bff","tests/ui-stable/transmute-mut-src-generic.stderr":"b8dbf4dc993b9204b9e532f8ceb63cb655ac0ed99e95cfe6ba206cbd68fae94d","tests/ui-stable/max-align.stderr":"19d3f22fa84379f9ac3a66f5133f429dbacd6e484f844546a5cf90f9141df52a","tests/ui-msrv/diagnostic-not-implemented-from-zeros.stderr":"7fee78190af015710d94d5c3534bc8dc75157c462a32c4a89a2f4b932d4cb7f4","tests/ui-nightly/try_transmute-size-decrease.rs":"7ec7d4c829f2a2df74149b880686371c2a64e293dcb6f5ec10a0c09c4f8229c0","tests/ui-stable/transmute-ref-src-dst-generic.stderr":"8053da1dc7d7d4cc9cdf1deeb9218aeb876794df5cf69df4d62cfd1b78613059","tests/ui-msrv/transmute-ref-dst-mutable.rs":"4283c537172971fda2c3c529c0971bbac66a4ac844bb6f0356f24284d4084b77","tests/ui-stable/diagnostic-not-implemented-into-bytes.stderr":"2e93a0ee06f0fa6552cc6addfb0d7432879cd77b6c480680e99ba225e9436db9","tests/ui-stable/include_value_wrong_size.rs":"4993458b5a5df4dabf7668203d30f01b756dbce7b27e2bd3fc6998987d673fcd","tests/ui-nightly/transmute-mut-dst-generic.rs":"41e6addb7da9fde8c3f93182b3cc484d3a2b5c1cfc077ecc66c0a6f27e22f647","tests/ui-msrv/try_transmute-src-not-intobytes.stderr":"20985ea4dbaa60825db12cb0db36d3919175ed046c8dd786ab08612bec91e24a","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","tests/ui-msrv/invalid-impls/invalid-impls.stderr":"ff24c7a5c75cdbbd9cd8919934cb922efb295104dae41490987e6f129977ab05","src/util/macros.rs":"28b6b8da66bed57374e874511e5b3497c53d58ea85e82bd502bdee360cb89e66","tests/ui-stable/diagnostic-not-implemented-try-from-bytes.stderr":"70d8c7ce6cf862f5859c6559b4dac7104d2cc7d852af6b7cc62ba6d20dc03882","tests/ui-msrv/try_transmute_ref-size-increase.stderr":"6898694893e788813173aeade8233ee48ad3b8eda57cc9b412ebc06af586d129","tests/ui-msrv/try_transmute-size-increase.stderr":"0ef17b0ea081da61831dfccfdc47532278955eaffc1ba2981cec7333d93b8f93","tests/ui-nightly/transmute-ref-dst-generic.rs":"fceea5349611147b46a0d897ff4df4353ef2d2550c45a5ee14a74bba9fa272c1","tests/ui-nightly/transmute-ref-dst-not-nocell.stderr":"962c54606c4b7f7e3c96b88efeb713c31881d43e8bf92be4fcd6e6c17df1ea05","tests/ui-stable/try_transmute_ref-size-increase.stderr":"b06ee4233f86ee4de04d85b04fb7c31dce84bb328b727a3c5bb36389b5325584","tests/ui-nightly/transmute-ref-src-dst-not-references.stderr":"4ee1f130bdc0e185d1cd0a180976bd099db162a11ad51e6eb8730353c253ea44","tests/ui-nightly/transmute-mut-src-generic.rs":"a013a66dfe3ca9fbf349c85794ec8a68a980929a56520df305e7a5a4f9922202","tests/ui-nightly/try_transmute-src-not-intobytes.stderr":"cae4cec519a3b8067f5fc75288cbc850283123c577b37ed726de0a1b8b6e2655","tests/ui-nightly/diagnostic-not-implemented-from-zeros.stderr":"b09ff91579e1b467aca6c217251ee0f197257838923ad4e832d0ecd71fb9a283","tests/ui-nightly/try_transmute_mut-size-increase.stderr":"855253b0ca5e6e0a46b88077f1c4d43938b07c42d71f3c09d94cae3d83730a04","tests/ui-nightly/transmute-mut-src-not-frombytes.rs":"049b386c8bf296d45e8a1a1f020a763df4ea480a3e1027ccc8f6c31b05889c79","tests/ui-stable/transmute-mut-src-dst-not-references.stderr":"a584f368fa4929a88f51cb67003cb2b15fdbe109e393606eea70cf1e0b878e32","tests/ui-msrv/invalid-impls/invalid-impls.rs":"d135ef15bca8d0e7b2c3bf1596c57dbf4b5a98923089b4e5c060a830dd76ff3e","tests/ui-stable/transmute-ref-size-decrease.rs":"318b336f688eaeb7ddcb574cf750b7e1cc728b1db3ae97b5d025a325bcc95747","tests/ui-stable/try_transmute-size-increase.rs":"5b085b4eb85a46d70ce03799652ba49bc4d51e861e821eddebd94919bcb0ad30","tests/ui-stable/try_transmute-src-not-intobytes.stderr":"c6c8bcd7e21daa541e99d1706d1dcbe5ffa4d6cfc9a7c1dfac1ef9b49932dbb8","tests/ui-msrv/diagnostic-not-implemented-from-bytes.stderr":"4089215b1df5a3c6bb2614000378bc4b4555d5e9b09008eb4f5a3d89deabdbb3","tests/ui-nightly/transmute-mut-const.rs":"726368515b62c5a4e8c54c91239f28f77ccee01eb384893ac7797e7f47189455","tests/ui-nightly/transmute-ref-dst-unsized.stderr":"1de78a9ba5821e82f4a18a8a846cfcd24ea66c78d0b4c54e25da3ad40c1f99a0","tests/ui-nightly/transmute-mut-src-dst-unsized.rs":"d52aec2bc815fac314a4ca5819d730a0d1dbac13b51bf2b844701d77ce969a8e","tests/ui-stable/transmute-ref-src-unsized.rs":"cbb75ec9eb3729442f57afc55758f4b638687ed0677e58a5e784b5f53e6a82ee","tests/ui-msrv/try_transmute-src-not-intobytes.rs":"83ab8176279f90930b9548592114343d724b5af57999ed04cb5b5c32f56f5aad","tests/ui-msrv/try_transmute_ref-src-not-immutable-intobytes.stderr":"e59012471cdd2b69bc96b5d9e146058ab30e6bbbe0e432b22158d3a45caacb03","tests/ui-msrv/transmute-mut-src-dst-generic.rs":"880430db77b417304756e0244ac8187c4392a9b1887bdb9683246376a7a557a0","tests/ui-msrv/transmute-ref-src-not-a-reference.stderr":"da596f7aa5e826b171e3bea5b39cc7c5c19d232d9b575095943e83af802dee08","tests/ui-stable/transmute-ref-src-dst-unsized.rs":"902e8182ea6b3de7b6e548ae03abc54b5bb8b8a01057e25d1c5e12838876349d","tests/ui-stable/transmute-mut-illegal-lifetime.rs":"cd95f98b5a7f43c9b9f20d53bedbfa0cc3d8b6ba2af182abf6a2098b31dc6c6e","tests/ui-msrv/include_value_not_from_bytes.rs":"a08295e6ec9c4fc6fe0f6a90d7227acb444ce4680e64efb2c53c4ffbd7029dba","tests/ui-msrv/transmute-ref-src-not-intobytes.rs":"dd932cdde770d1ad0c0e5c147cb53aebdbfe6a023a6873e807f2429a14bc654d","tests/ui-stable/transmute-mut-dst-generic.rs":"41e6addb7da9fde8c3f93182b3cc484d3a2b5c1cfc077ecc66c0a6f27e22f647","tests/ui-nightly/diagnostic-not-implemented-into-bytes.rs":"5edc2bf1c76f28376eb17613d79025624efbb3465b471b317edb7d399c110e6e","tests/ui-nightly/transmute-dst-not-frombytes.stderr":"27131268c9a6d1908bd399e7c02b0e54e12f00f56ef6f45e4fb007a2e2f814d4","tests/ui-msrv/transmute-mut-dst-not-a-reference.stderr":"b10e6b76150168288a9ad5a494a93d2c92e31b74cfb9517d93ed82e9d06f1abb","build.rs":"fdbbfba1fb64dadc4a4e0fc89c8eb2bcb71889ff737290c042be1ab14d447180","tests/ui-stable/try_transmute_ref-alignment-increase.rs":"4401c8ae85558b388627f60a60960b33bf4df8eae28437ffa4d20bb668f47036","tests/ui-msrv/transmute-ref-dst-not-frombytes.stderr":"aef30d5527db0585fcc4cd9ceef91a49b31ebff3c3e6c8d385616fde1dac2b0f","clippy.toml":"24577ed72d5ec356b0bd79a5ae1d38a79e8b15ae7b6e5b187cf0ef87ac2ef7f2","tests/ui-msrv/try_transmute_ref-dst-not-immutable-tryfrombytes.rs":"9308e38dd814b2bab53b5912207cc7621635a5c547e621f947ba0d66e2601730","tests/ui-msrv/transmute-mut-illegal-lifetime.stderr":"914c16f19c5ad3418e08e3701fb693f4dae1ed844dd2d357a4d861d3df8704c3","tests/ui-msrv/try_transmute_mut-dst-not-tryfrombytes.rs":"aeb4371e28787b0a2e75e616441a55129cd299d9681a81095c72e6e7f7b9512a","tests/ui-nightly/try_transmute_mut-size-decrease.rs":"35886c88a716734e77c05775d5a0766e9b637b9ed4cc76a9cfbba2aa262e1d13","tests/ui-stable/transmute-mut-dst-not-a-reference.stderr":"ccabfdc69e4b2c5224050a9b5520b2bdc9d6652dc1b78de61d07cad3edb82daa","tests/ui-stable/try_transmute_mut-src-not-intobytes.rs":"6d426e7cd765e9b633e6bb0585db7cad22c90ddb7ba403d7894d8bf6848395ed","tests/ui-nightly/transmute-size-decrease.rs":"ef04ab5d6ed074c0d0ab0f979fba4b5a580e1ebeab431b7a432a4348194a67b9","tests/ui-msrv/try_transmute_mut-src-not-intobytes.stderr":"13aed6a3078e732fc281710798e0f5440bfc2f3516f237d8e1164904f756a977","tests/ui-nightly/diagnostic-not-implemented-known-layout.rs":"fa78a576df6c568a5ad8517efac60f5953a4d58b233e33e135638bcdfff43ae2","tests/ui-nightly/transmute-ref-src-dst-generic.stderr":"4b8d7f7106f4c0a1e527d3bbf6879104d87aa9d17e53c7304b6c27b3480fbd7d","tests/ui-nightly/transmute-mut-dst-not-intobytes.stderr":"5f4b571e0531c8b00a1eefa31553f7b21fb6efe26929393b96af6a14dc79daae","tests/ui-nightly/transmute-ref-src-not-a-reference.stderr":"0018c74a5285cafdfd06d4453abec66692bd39f5926b4e8e25f9592c8c3adc12","tests/ui-stable/transmute-ref-dst-generic.stderr":"f710dfa3c427743804369b1003ae63ce28ce29dc99265e24a8d77efbfbfad590","src/layout.rs":"21a840004a6919ad6c74a721af1edc59bc0558b0853ffcc110c20252136a23f6","tests/ui-msrv/transmute-size-decrease.stderr":"bb3ba97e5f733b67714bc2502be26096eecdc1aada43ade0e1bb5baaebbc1be0","src/lib.rs":"fc472c68184eda3596c200b659e0a3aa82498d668463ad45565e06cec2ca6f70","tests/ui-msrv/transmute-ref-illegal-lifetime.rs":"771b734779b00309b7ab112891e5fa76af2d7b5a822b4db2f34b3edebf1f7b9d","tests/ui-nightly/transmute-mut-src-not-frombytes.stderr":"8ec2e28872ba7d08e597ecbc5bea5ba4875846c4e0bef3583f67beebeba8b470","tests/ui-msrv/transmute-ref-dst-unsized.stderr":"c1c57f34ec8166ce885fd244afce0a70898563e9b4966d07f1c0e4713c8ed906","tests/ui-msrv/transmute-ref-dst-not-a-reference.rs":"6829c16de2e2dcae944f846235e2f76fca742a24c6970559fc4d10bbf214f96b","tests/ui-nightly/try_transmute_ref-dst-mutable.rs":"cc0497f618bc155ea07bb7538dc570c7e3bba708ad8e52189ea6e10fd63e40bf","tests/ui-msrv/try_transmute_ref-dst-mutable.rs":"cc0497f618bc155ea07bb7538dc570c7e3bba708ad8e52189ea6e10fd63e40bf","tests/ui-msrv/transmute-ref-dst-generic.stderr":"1e4429d9600ff4cb5f729779c32cd239cc39e6cd7a1b20bb2e52824bc0d7c804","tests/ui-msrv/transmute-mut-dst-unsized.rs":"5c040c3eec4b360b4b65a948bcfe1220567cf5bb1939eeefd5bf200cd73d3b96","tests/ui-msrv/diagnostic-not-implemented-issue-1296.stderr":"2d7be324e42e09c9e6fce03d2b66cce55a2ee69e5a0aa07de0f71ec18baed1ba","tests/ui-stable/try_transmute_mut-alignment-increase.rs":"6f16a7e4753153e84581902d3d42fc4f0cb2d7ef4b01b71bcaccb0d434dc0f9c","src/byteorder.rs":"6dff8fb8c04fb054431eee5a9ae1fce1746b840edd26a3bd98e59988b85b823a","tests/ui-stable/transmute-mut-alignment-increase.rs":"4c898b19c904440672c87b7b9ee5b15d996eb312e65b595abfdfcb03cff53345","tests/ui-nightly/transmute-ref-src-unsized.rs":"cbb75ec9eb3729442f57afc55758f4b638687ed0677e58a5e784b5f53e6a82ee","tests/ui-stable/transmute-ref-dst-generic.rs":"fceea5349611147b46a0d897ff4df4353ef2d2550c45a5ee14a74bba9fa272c1","tests/ui-msrv/diagnostic-not-implemented-into-bytes.stderr":"2ee6d51b0355f8387542230e22aa748dc9bec684c285d448189afc66f2da01ed","tests/ui-nightly/diagnostic-not-implemented-into-bytes.stderr":"a0a9e604da0412a7cea16c649196a045b6a2f0cb69f43c961b5a08eea76fe74c","tests/ui-nightly/diagnostic-not-implemented-from-bytes.rs":"4bb5386f54737e163bc7240f1c06b43e82e943e42745fe7de14bca9ef0ea50c1","tests/ui-nightly/diagnostic-not-implemented-unaligned.rs":"2966d1c424ddade377afc988dbf2bbc323011d222784a0869c6f804eba4d6cbc","tests/ui-nightly/max-align.stderr":"0382389bea42134ee3fb73e79cdde8821264fd21c9f8da91dd98b240d4e592a4","tests/ui-msrv/transmute-mut-src-not-intobytes.stderr":"b693b1af440fc684c9cbebe580d58ba3f1909e8ee52a7b27234e2b3d6fb9b2e1","tests/ui-msrv/diagnostic-not-implemented-issue-1296.rs":"2f603de3cd80439cf2d50bb36fcc5b9d40c3bd06475273e6f135d9da335866d9","tests/ui-msrv/diagnostic-not-implemented-try-from-bytes.rs":"272d0a53001ba1145b6389077fa9d4b494d56651088ed1e929b7591ca4d76048","tests/ui-stable/transmute-mut-size-decrease.rs":"9ab9c03ccf1546957e3412911564a9dad6f0940d55c5285945548f76186fec56","tests/ui-stable/transmute-mut-src-dst-generic.rs":"880430db77b417304756e0244ac8187c4392a9b1887bdb9683246376a7a557a0","tests/ui-stable/transmute-mut-dst-unsized.rs":"5c040c3eec4b360b4b65a948bcfe1220567cf5bb1939eeefd5bf200cd73d3b96","src/byte_slice.rs":"3e5dd3a8dbc6556c8d9a035c7cf8ce4127b81d45d12a21e8e3e28587d7aa2a50","tests/ui-stable/transmute-size-decrease.rs":"ef04ab5d6ed074c0d0ab0f979fba4b5a580e1ebeab431b7a432a4348194a67b9","tests/ui-stable/transmute-ref-src-dst-not-references.stderr":"32a5ecd8509eebcc08ea529cade80ebef706b3c1a5c6f8c498c997b426b5d6a6","tests/ui-nightly/transmute-ref-dst-mutable.stderr":"0c11986772b58a910ac8a7d601002afc02cd378f45382827ce21b25ed64e7ab9","tests/ui-msrv/diagnostic-not-implemented-immutable.rs":"df176f71d385efe46108dfc2d676c7fedddb48f0a9f53ec5fa903e6b7761cf92","ci/check_versions.sh":"12c44efae36aeed4e4fc655d8f99a0b17194eba8716e589d81f8063fceb4d721","ci/check_readme.sh":"7360da9fef9a0b97d81badb52016f78c2e0e5e2960229e0696956ef566626e54","tests/ui-msrv/transmute-ref-dst-not-frombytes.rs":"a989f7f680cd3072ee1a0dd631fab02caa30c64c53ced9b5719d79dbcfbcf97f","tests/ui-nightly/transmute-ref-size-increase.stderr":"744c7b543f417246d7fde6dd5680c4f293e577a6ce7b005742ece6ecba98d552","tests/ui-stable/transmute-ref-dst-not-nocell.stderr":"0dd070ab85aa2fe6787ac95dcaac5c31f5984d76394ef50898e42900cbeb3ae3","tests/ui-nightly/transmute-mut-dst-not-intobytes.rs":"b9ab140926cae46e0f253eddfa332a0845b25b49ffbe60a17694d06580235066","tests/ui-msrv/try_transmute-dst-not-tryfrombytes.stderr":"2bec587fd16b99c1d3e4cc42031f00fd7b6381ff4baba56c937c3d819eff1ac4","tests/ui-msrv/transmute-ref-size-increase.stderr":"809749bdc3acfb0d0575962659aff3f15e1c464a6d9e421448d674c2230b3c49","tests/ui-stable/invalid-impls/invalid-impls.stderr":"b686b789a657c0cdf0e1b3223234811337b4f3485a654e195afccd4fa6165161","tests/ui-nightly/transmute-mut-dst-not-frombytes.stderr":"ac49fe2fd04c795f75791d6456fbd8d96b1ff81161c05fc587e24e29f8aa2647","tests/ui-stable/diagnostic-not-implemented-from-bytes.rs":"4bb5386f54737e163bc7240f1c06b43e82e943e42745fe7de14bca9ef0ea50c1","tests/ui-nightly/try_transmute_mut-dst-not-tryfrombytes.rs":"aeb4371e28787b0a2e75e616441a55129cd299d9681a81095c72e6e7f7b9512a","tests/ui-nightly/diagnostic-not-implemented-known-layout.stderr":"fe85103ea5bed6073f5f9be9f96e99be91af4a0d1665e1929c21c57d631180ef","tests/ui-stable/transmute-mut-src-not-a-reference.rs":"a854a05999caebc97a08e37d037c4905a859e3a1f4f6d5e5803ff03af0bb5470","METADATA":"44e3a52ca24ed57c2b1cd93005ee8acc4a478f66aabd99121451a96559a49ef4","tests/ui-nightly/transmute-ref-dst-unsized.rs":"e3beead5f1b51a62ad8974c024fb0db3ed0611c05e5ab05a65ee284e150b3ff8","tests/ui-nightly/transmute-mut-illegal-lifetime.stderr":"4a0979b14505f84ef7c6a701bb0134251c720ae78d398e0e467ac5c3f4dbbd4e","LICENSE-MIT":"3e24ce9879b9a289b7413493fe10221df3551f197741ceeef6c38680dd1bf44f","tests/ui-msrv/transmute-mut-src-not-frombytes.stderr":"034da485616c2a7430868b6827bcef2e5c9c39fe4c89ac577eb58f4dc63091d9","tests/ui-stable/try_transmute_ref-dst-mutable.rs":"cc0497f618bc155ea07bb7538dc570c7e3bba708ad8e52189ea6e10fd63e40bf","tests/ui-msrv/transmute-mut-src-generic.rs":"a013a66dfe3ca9fbf349c85794ec8a68a980929a56520df305e7a5a4f9922202","patches/std.patch":"80675065f3023bfd79728621b7e4a54c4df17179238ec29f2a59ee282b25b182","tests/ui-nightly/transmute-ref-dst-not-frombytes.stderr":"569b2104c13b482bab2733aab462e05d0b7c59b5daae2fefdb8a4a1aa32a6a11","tests/ui-msrv/transmute-ref-src-not-nocell.rs":"cdd5eeb40f42963e7bec7b45283a53f4322df4a7068398089d0ddc18402ec0a9","tests/ui-msrv/transmute-ref-dst-unsized.rs":"e3beead5f1b51a62ad8974c024fb0db3ed0611c05e5ab05a65ee284e150b3ff8","tests/ui-msrv/diagnostic-not-implemented-from-bytes.rs":"4bb5386f54737e163bc7240f1c06b43e82e943e42745fe7de14bca9ef0ea50c1","tests/ui-msrv/transmute-mut-src-dst-not-references.stderr":"93584326ab2fd8dd8e4ebef465bc3541761ea43ff5aac3a7794aa4ee52eaca2f","tests/ui-msrv/try_transmute_ref-src-not-immutable-intobytes.rs":"da8b40f0ffb13a891a0a3a76217532da81e7b71d5c6f9c1ebe78cff5c9fcc177","tests/ui-nightly/transmute-ref-dst-mutable.rs":"4283c537172971fda2c3c529c0971bbac66a4ac844bb6f0356f24284d4084b77"}}
\ No newline at end of file
diff --git a/crates/zerocopy/Android.bp b/crates/zerocopy/Android.bp
index bde32a7..152b3be 100644
--- a/crates/zerocopy/Android.bp
+++ b/crates/zerocopy/Android.bp
@@ -22,8 +22,10 @@
crate_root: "src/lib.rs",
edition: "2021",
features: [
+ "alloc",
"derive",
"simd",
+ "std",
"zerocopy-derive",
],
proc_macros: ["libzerocopy_derive"],
diff --git a/crates/zerocopy/cargo_embargo.json b/crates/zerocopy/cargo_embargo.json
index 0a78458..36d38c4 100644
--- a/crates/zerocopy/cargo_embargo.json
+++ b/crates/zerocopy/cargo_embargo.json
@@ -4,7 +4,8 @@
{
"features": [
"derive",
- "simd"
+ "simd",
+ "std"
]
},
{
diff --git a/crates/zeroize/.android-checksum.json b/crates/zeroize/.android-checksum.json
new file mode 100644
index 0000000..7933c5a
--- /dev/null
+++ b/crates/zeroize/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"LICENSE-MIT":"3177d5b864ee607a73e881826267a64ca12153728b9a7079f36df2c0083fb445","src/aarch64.rs":"a42c04a3d4ef8e0b1f21b0c532a790e3670abfe16a7284e9a37f6a6e7d6d687b","Cargo.toml":"1f39b13b74b9db2577c2ae6cb4f761e6561d090e97722644f95055f27fba735b","tests/zeroize_derive.rs":"20ac553944910e803785a251ca7d6f0270acb56c917fbac440e7918eb2d7a96e","TEST_MAPPING":"255fb3c80ec6bc8d2b05124b2b8ced24fb11e80372873dc8875280145a2fc23a","tests/zeroize.rs":"a6e921a4f65e3c6ba156b97453308d024b92ca20756976012cbbc5d41830cc5b","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","patches/rules.mk.diff":"3d843d7ec19d1513be20177a1b4243714b13eec0b7ea65d799932a879b373a0d","patches/std.diff":"09ac4a66b433a39e0347a5e0a3cbb15a418c899832460cb8f6dddd14dd8e1d30",".cargo-checksum.json":"9e24da1de1ddafaf8b8cbade18367782bd9e9bbda6016f4c56ec449216d28bb6","rules.mk":"e1ff8b51da077adc54ff01f153914d2f74ed03bf54a5b6096169aa85479ed91d","CHANGELOG.md":"0dcf308142a908d81a411155c61c3cf3846f021c9d185d4d0dc01e839f2b565a","Android.bp":"bb52fc17ecee9e43696ab4dc506bd4ec17033ef1323846fb459824754fa9f853","METADATA":"82420071c2efe1cba92d4bef79a5bd49b1dddb89ad620ad70fdf81d6f48d4954","LICENSE-APACHE":"7c6512d88b3127990067585f24881ba1f182c5c49a04cb1975b226b7be95709e","README.md":"c74ad5abca8c549e069ec2219f1a55dcc1e2d6efedee22559b2b00b9f2da27f2","src/lib.rs":"4f0bbeb9d57d784593fd86fee9e0c53c6611e0f3534a6963c622176d78f05752","src/x86.rs":"cb577aa9259c393ee6a7c2ad2036fa884bd0729378e8d6629b663c54eab7bb08","LICENSE":"7c6512d88b3127990067585f24881ba1f182c5c49a04cb1975b226b7be95709e","cargo_embargo.json":"43b527a179b95b53f6ded2b389c5103aa9a357feb838e514e3fe2e26746d7d4a"}}
\ No newline at end of file
diff --git a/crates/zeroize/.cargo-checksum.json b/crates/zeroize/.cargo-checksum.json
index 4f4328b..f8786d6 100644
--- a/crates/zeroize/.cargo-checksum.json
+++ b/crates/zeroize/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"CHANGELOG.md":"93f0b7b36489514024533b93cf62bbd7bd79334e59cf594e8be8df6bbd1dd5b7","Cargo.toml":"eacbb4937ccf5203b3ae31882dc7cd38856f328738e6aa75ccca24be777b0d51","LICENSE-APACHE":"cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30","LICENSE-MIT":"0b04ee3ce0021a922f43f37a17fee09a5a1ee6d1f4e149d5bf75b72395a49c72","README.md":"d0b58a7c997147431e4c0ac252452db94d99c837ae02e30067a3b3de7446806b","src/aarch64.rs":"10ae9e8f0fd942d2e5379ad83d394d8b91fe9a4679794052e3d5f1ae4be0aeab","src/lib.rs":"16866f64ae5ac4c1d8023724839b6c6d66134337d848e453dfee55969d381149","src/x86.rs":"a6e42d07dfba710e6f44010b952e42c3f1f115ec990a35dc6104a004be1eb301","tests/zeroize.rs":"afb60596bbe60130fa18f79a6e8407e2dab71eecf6382593dd114f2111918f9d","tests/zeroize_derive.rs":"cc688a52714588b19ee38faa11e7d8a6dfa42a0d8a0a41ec2bf2a08764ed14b3"},"package":"2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"}
\ No newline at end of file
+{"files":{"CHANGELOG.md":"d3edd9a3dffc77d9fdcaae5c8bc21cce1ed15a67594c16a5a315951dcd1c312a","Cargo.toml":"5ef1741913fd7ade98e1f1960f24dacacfc69947bc14a8247c2e22c7d8f44465","LICENSE-APACHE":"cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30","LICENSE-MIT":"0b04ee3ce0021a922f43f37a17fee09a5a1ee6d1f4e149d5bf75b72395a49c72","README.md":"6584a94c6eb56a1b62e4e0a6f92cb6e1de6dd9bb8d8fd41225603af248e0bdd7","src/aarch64.rs":"6f26844bb4a9bc15cff77b79923e562a0e5799346f2581ea6d7ef95a8513aea6","src/lib.rs":"9f59308c21265a2fb46935a6468d8bc2e86e4613c9a942fcfc91d61bec8cc878","src/x86.rs":"63105231e70717638ca881a2c520ad70f37804e9d4c2e0b0f63ae9438705892b","tests/zeroize.rs":"afb60596bbe60130fa18f79a6e8407e2dab71eecf6382593dd114f2111918f9d","tests/zeroize_derive.rs":"5c59668d753dca8f2af2bece584f2a229ada934d320b1ceb078b7d20958d6f7f"},"package":"ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"}
\ No newline at end of file
diff --git a/crates/zeroize/Android.bp b/crates/zeroize/Android.bp
index 61edf87..d574778 100644
--- a/crates/zeroize/Android.bp
+++ b/crates/zeroize/Android.bp
@@ -18,7 +18,7 @@
host_supported: true,
crate_name: "zeroize",
cargo_env_compat: true,
- cargo_pkg_version: "1.6.0",
+ cargo_pkg_version: "1.8.1",
crate_root: "src/lib.rs",
edition: "2021",
features: [
@@ -40,7 +40,7 @@
host_supported: true,
crate_name: "zeroize",
cargo_env_compat: true,
- cargo_pkg_version: "1.6.0",
+ cargo_pkg_version: "1.8.1",
crate_root: "tests/zeroize.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -61,7 +61,7 @@
host_supported: true,
crate_name: "zeroize_derive",
cargo_env_compat: true,
- cargo_pkg_version: "1.6.0",
+ cargo_pkg_version: "1.8.1",
crate_root: "tests/zeroize_derive.rs",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -81,7 +81,7 @@
name: "libzeroize_nostd",
crate_name: "zeroize",
cargo_env_compat: true,
- cargo_pkg_version: "1.6.0",
+ cargo_pkg_version: "1.8.1",
crate_root: "src/lib.rs",
edition: "2021",
features: [
diff --git a/crates/zeroize/CHANGELOG.md b/crates/zeroize/CHANGELOG.md
index 12fded9..048f4b7 100644
--- a/crates/zeroize/CHANGELOG.md
+++ b/crates/zeroize/CHANGELOG.md
@@ -4,6 +4,50 @@
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## 1.8.1 (2024-05-25)
+### Changed
+- Feature-gate AVX-512 support under `simd`; restores MSRV 1.60 ([#1073])
+
+[#1073]: https://github.com/RustCrypto/utils/pull/1073
+
+## 1.8.0 (2024-04-24) [YANKED]
+
+NOTE: yanked due concerns over the MSRV bump. See [#1067].
+
+### Added
+- Unsafe `zeroize_flat_type` function ([#1045])
+- `Zeroize` impls for `__m512` types on `x86`/`x86_64` targets ([#1052])
+
+### Changed
+- Bump MSRV to 1.72 ([#1052])
+- Always enable AArch64 support ([#1064])
+
+### Fixed
+- Nightly warnings ([#1055])
+
+[#1045]: https://github.com/RustCrypto/utils/pull/1045
+[#1052]: https://github.com/RustCrypto/utils/pull/1052
+[#1055]: https://github.com/RustCrypto/utils/pull/1055
+[#1064]: https://github.com/RustCrypto/utils/pull/1064
+[#1067]: https://github.com/RustCrypto/utils/pull/1067
+
+## 1.7.0 (2023-11-16)
+### Changed
+- Bump MSRV to 1.60 ([#900])
+
+## 1.6.1 (2023-11-15) [YANKED]
+
+NOTE: yanked because [#900] bumped MSRV to 1.60, which vioates our MSRV policy.
+
+### Added
+- Impl `Zeroize` for `MaybeUninit` ([#900])
+
+### Removed
+- Unnecessary `cfg`s on SIMD type impls ([#930])
+
+[#900]: https://github.com/RustCrypto/utils/pull/900
+[#930]: https://github.com/RustCrypto/utils/pull/930
+
## 1.6.0 (2023-03-26)
### Added
- Impl `Zeroize` for `core::num::Wrapping` ([#818])
diff --git a/crates/zeroize/Cargo.toml b/crates/zeroize/Cargo.toml
index 636d969..707c2f9 100644
--- a/crates/zeroize/Cargo.toml
+++ b/crates/zeroize/Cargo.toml
@@ -11,9 +11,9 @@
[package]
edition = "2021"
-rust-version = "1.56"
+rust-version = "1.60"
name = "zeroize"
-version = "1.6.0"
+version = "1.8.1"
authors = ["The RustCrypto Project Developers"]
description = """
Securely clear secrets from memory with a simple trait built on
@@ -38,7 +38,6 @@
]
license = "Apache-2.0 OR MIT"
repository = "https://github.com/RustCrypto/utils/tree/master/zeroize"
-resolver = "1"
[package.metadata.docs.rs]
all-features = true
@@ -61,4 +60,5 @@
alloc = []
default = ["alloc"]
derive = ["zeroize_derive"]
+simd = []
std = ["alloc"]
diff --git a/crates/zeroize/METADATA b/crates/zeroize/METADATA
index bb2cfd8..074d060 100644
--- a/crates/zeroize/METADATA
+++ b/crates/zeroize/METADATA
@@ -1,17 +1,17 @@
name: "zeroize"
description: "Securely zero memory while avoiding compiler optimizations."
third_party {
- version: "1.6.0"
+ version: "1.8.1"
license_type: NOTICE
last_upgrade_date {
- year: 2023
- month: 3
- day: 30
+ year: 2024
+ month: 12
+ day: 20
}
homepage: "https://crates.io/crates/zeroize"
identifier {
type: "Archive"
- value: "https://static.crates.io/crates/zeroize/zeroize-1.6.0.crate"
- version: "1.6.0"
+ value: "https://static.crates.io/crates/zeroize/zeroize-1.8.1.crate"
+ version: "1.8.1"
}
}
diff --git a/crates/zeroize/README.md b/crates/zeroize/README.md
index 0156ac0..03b93ab 100644
--- a/crates/zeroize/README.md
+++ b/crates/zeroize/README.md
@@ -36,7 +36,7 @@
## Minimum Supported Rust Version
-Rust **1.56** or newer.
+Rust **1.60** or newer.
In the future, we reserve the right to change MSRV (i.e. MSRV is out-of-scope
for this crate's SemVer guarantees), however when we do it will be accompanied by
@@ -64,7 +64,7 @@
[docs-image]: https://docs.rs/zeroize/badge.svg
[docs-link]: https://docs.rs/zeroize/
[license-image]: https://img.shields.io/badge/license-Apache2.0/MIT-blue.svg
-[rustc-image]: https://img.shields.io/badge/rustc-1.56+-blue.svg
+[rustc-image]: https://img.shields.io/badge/rustc-1.60+-blue.svg
[build-image]: https://github.com/RustCrypto/utils/actions/workflows/zeroize.yml/badge.svg
[build-link]: https://github.com/RustCrypto/utils/actions/workflows/zeroize.yml
diff --git a/crates/zeroize/src/aarch64.rs b/crates/zeroize/src/aarch64.rs
index 956f648..e9e1565 100644
--- a/crates/zeroize/src/aarch64.rs
+++ b/crates/zeroize/src/aarch64.rs
@@ -1,20 +1,16 @@
//! [`Zeroize`] impls for ARM64 SIMD registers.
-//!
-//! Gated behind the `aarch64` feature: MSRV 1.59
-//! (the overall crate is MSRV 1.51)
use crate::{atomic_fence, volatile_write, Zeroize};
use core::arch::aarch64::*;
macro_rules! impl_zeroize_for_simd_register {
- ($(($type:ty, $vdupq:ident)),+) => {
+ ($($type:ty),* $(,)?) => {
$(
- #[cfg_attr(docsrs, doc(cfg(target_arch = "aarch64")))]
- #[cfg_attr(docsrs, doc(cfg(target_feature = "neon")))]
impl Zeroize for $type {
+ #[inline]
fn zeroize(&mut self) {
- volatile_write(self, unsafe { $vdupq(0) });
+ volatile_write(self, unsafe { core::mem::zeroed() });
atomic_fence();
}
}
@@ -24,12 +20,12 @@
// TODO(tarcieri): other NEON register types?
impl_zeroize_for_simd_register! {
- (uint8x8_t, vdup_n_u8),
- (uint8x16_t, vdupq_n_u8),
- (uint16x4_t, vdup_n_u16),
- (uint16x8_t, vdupq_n_u16),
- (uint32x2_t, vdup_n_u32),
- (uint32x4_t, vdupq_n_u32),
- (uint64x1_t, vdup_n_u64),
- (uint64x2_t, vdupq_n_u64)
+ uint8x8_t,
+ uint8x16_t,
+ uint16x4_t,
+ uint16x8_t,
+ uint32x2_t,
+ uint32x4_t,
+ uint64x1_t,
+ uint64x2_t,
}
diff --git a/crates/zeroize/src/lib.rs b/crates/zeroize/src/lib.rs
index 1dd35f2..7e748ee 100644
--- a/crates/zeroize/src/lib.rs
+++ b/crates/zeroize/src/lib.rs
@@ -1,5 +1,5 @@
#![no_std]
-#![cfg_attr(docsrs, feature(doc_cfg))]
+#![cfg_attr(docsrs, feature(doc_auto_cfg))]
#![doc(
html_logo_url = "https://raw.githubusercontent.com/RustCrypto/media/6ee8e381/logo.svg",
html_favicon_url = "https://raw.githubusercontent.com/RustCrypto/media/6ee8e381/logo.svg"
@@ -30,7 +30,7 @@
//!
//! ## Minimum Supported Rust Version
//!
-//! Requires Rust **1.51** or newer.
+//! Requires Rust **1.72** or newer.
//!
//! In the future, we reserve the right to change MSRV (i.e. MSRV is out-of-scope
//! for this crate's SemVer guarantees), however when we do it will be accompanied
@@ -41,15 +41,13 @@
//! ```
//! use zeroize::Zeroize;
//!
-//! fn main() {
-//! // Protip: don't embed secrets in your source code.
-//! // This is just an example.
-//! let mut secret = b"Air shield password: 1,2,3,4,5".to_vec();
-//! // [ ... ] open the air shield here
+//! // Protip: don't embed secrets in your source code.
+//! // This is just an example.
+//! let mut secret = b"Air shield password: 1,2,3,4,5".to_vec();
+//! // [ ... ] open the air shield here
//!
-//! // Now that we're done using the secret, zero it out.
-//! secret.zeroize();
-//! }
+//! // Now that we're done using the secret, zero it out.
+//! secret.zeroize();
//! ```
//!
//! The [`Zeroize`] trait is impl'd on all of Rust's core scalar types including
@@ -68,6 +66,7 @@
//! memory is zeroed by converting it to a `Vec<u8>` and back into a `CString`.
//! (NOTE: see "Stack/Heap Zeroing Notes" for important `Vec`/`String`/`CString` details)
//!
+//! [`CString`]: https://doc.rust-lang.org/std/ffi/struct.CString.html
//!
//! The [`DefaultIsZeroes`] marker trait can be impl'd on types which also
//! impl [`Default`], which implements [`Zeroize`] by overwriting a value with
@@ -143,7 +142,7 @@
//! ```
//! use zeroize::Zeroizing;
//!
-//! fn main() {
+//! fn use_secret() {
//! let mut secret = Zeroizing::new([0u8; 5]);
//!
//! // Set the air shield password
@@ -153,6 +152,8 @@
//!
//! // The contents of `secret` will be automatically zeroized on drop
//! }
+//!
+//! # use_secret()
//! ```
//!
//! ## What guarantees does this crate provide?
@@ -246,10 +247,9 @@
extern crate std;
#[cfg(feature = "zeroize_derive")]
-#[cfg_attr(docsrs, doc(cfg(feature = "zeroize_derive")))]
pub use zeroize_derive::{Zeroize, ZeroizeOnDrop};
-#[cfg(all(feature = "aarch64", target_arch = "aarch64"))]
+#[cfg(target_arch = "aarch64")]
mod aarch64;
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
mod x86;
@@ -267,10 +267,7 @@
};
#[cfg(feature = "alloc")]
-use {
- alloc::{boxed::Box, string::String, vec::Vec},
- core::slice,
-};
+use alloc::{boxed::Box, string::String, vec::Vec};
#[cfg(feature = "std")]
use std::ffi::CString;
@@ -319,18 +316,28 @@
#[rustfmt::skip]
impl_zeroize_with_default! {
- bool, char,
+ PhantomPinned, (), bool, char,
f32, f64,
i8, i16, i32, i64, i128, isize,
u8, u16, u32, u64, u128, usize
}
+/// `PhantomPinned` is zero sized so provide a ZeroizeOnDrop implementation.
+impl ZeroizeOnDrop for PhantomPinned {}
+
+/// `()` is zero sized so provide a ZeroizeOnDrop implementation.
+impl ZeroizeOnDrop for () {}
+
macro_rules! impl_zeroize_for_non_zero {
($($type:ty),+) => {
$(
impl Zeroize for $type {
fn zeroize(&mut self) {
- volatile_write(self, unsafe { <$type>::new_unchecked(1) });
+ const ONE: $type = match <$type>::new(1) {
+ Some(one) => one,
+ None => unreachable!(),
+ };
+ volatile_write(self, ONE);
atomic_fence();
}
}
@@ -375,7 +382,7 @@
/// Impl [`ZeroizeOnDrop`] on arrays of types that impl [`ZeroizeOnDrop`].
impl<Z, const N: usize> ZeroizeOnDrop for [Z; N] where Z: ZeroizeOnDrop {}
-impl<'a, Z> Zeroize for IterMut<'a, Z>
+impl<Z> Zeroize for IterMut<'_, Z>
where
Z: Zeroize,
{
@@ -409,18 +416,18 @@
// The memory pointed to by `self` is valid for `mem::size_of::<Self>()` bytes.
// It is also properly aligned, because `u8` has an alignment of `1`.
unsafe {
- volatile_set(self as *mut _ as *mut u8, 0, mem::size_of::<Self>());
+ volatile_set((self as *mut Self).cast::<u8>(), 0, mem::size_of::<Self>());
}
- // Ensures self is overwritten with the default bit pattern. volatile_write can't be
+ // Ensures self is overwritten with the `None` bit pattern. volatile_write can't be
// used because Option<Z> is not copy.
//
// Safety:
//
- // self is safe to replace with the default, which the take() call above should have
+ // self is safe to replace with `None`, which the take() call above should have
// already done semantically. Any value which needed to be dropped will have been
// done so by take().
- unsafe { ptr::write_volatile(self, Option::default()) }
+ unsafe { ptr::write_volatile(self, None) }
atomic_fence();
}
@@ -428,6 +435,20 @@
impl<Z> ZeroizeOnDrop for Option<Z> where Z: ZeroizeOnDrop {}
+/// Impl [`Zeroize`] on [`MaybeUninit`] types.
+///
+/// This fills the memory with zeroes.
+/// Note that this ignore invariants that `Z` might have, because
+/// [`MaybeUninit`] removes all invariants.
+impl<Z> Zeroize for MaybeUninit<Z> {
+ fn zeroize(&mut self) {
+ // Safety:
+ // `MaybeUninit` is valid for any byte pattern, including zeros.
+ unsafe { ptr::write_volatile(self, MaybeUninit::zeroed()) }
+ atomic_fence();
+ }
+}
+
/// Impl [`Zeroize`] on slices of [`MaybeUninit`] types.
///
/// This impl can eventually be optimized using an memset intrinsic,
@@ -439,7 +460,7 @@
/// [`MaybeUninit`] removes all invariants.
impl<Z> Zeroize for [MaybeUninit<Z>] {
fn zeroize(&mut self) {
- let ptr = self.as_mut_ptr() as *mut MaybeUninit<u8>;
+ let ptr = self.as_mut_ptr().cast::<MaybeUninit<u8>>();
let size = self.len().checked_mul(mem::size_of::<Z>()).unwrap();
assert!(size <= isize::MAX as usize);
@@ -449,7 +470,7 @@
// and it is backed by a single allocated object for at least `self.len() * size_pf::<Z>()` bytes.
// and 0 is a valid value for `MaybeUninit<Z>`
// The memory of the slice should not wrap around the address space.
- unsafe { volatile_set(ptr, MaybeUninit::new(0), size) }
+ unsafe { volatile_set(ptr, MaybeUninit::zeroed(), size) }
atomic_fence();
}
}
@@ -496,47 +517,22 @@
/// [`PhantomData` is always zero sized so provide a ZeroizeOnDrop implementation.
impl<Z> ZeroizeOnDrop for PhantomData<Z> {}
-/// `PhantomPinned` is zero sized so provide a Zeroize implementation.
-impl Zeroize for PhantomPinned {
- fn zeroize(&mut self) {}
-}
-
-/// `PhantomPinned` is zero sized so provide a ZeroizeOnDrop implementation.
-impl ZeroizeOnDrop for PhantomPinned {}
-
-/// `()` is zero sized so provide a Zeroize implementation.
-impl Zeroize for () {
- fn zeroize(&mut self) {}
-}
-
-/// `()` is zero sized so provide a ZeroizeOnDrop implementation.
-impl ZeroizeOnDrop for () {}
-
-/// Generic implementation of Zeroize for tuples up to 10 parameters.
-impl<A: Zeroize> Zeroize for (A,) {
- fn zeroize(&mut self) {
- self.0.zeroize();
- }
-}
-
-/// Generic implementation of ZeroizeOnDrop for tuples up to 10 parameters.
-impl<A: ZeroizeOnDrop> ZeroizeOnDrop for (A,) {}
-
macro_rules! impl_zeroize_tuple {
( $( $type_name:ident ),+ ) => {
- impl<$($type_name: Zeroize),+> Zeroize for ($($type_name),+) {
+ impl<$($type_name: Zeroize),+> Zeroize for ($($type_name,)+) {
fn zeroize(&mut self) {
#[allow(non_snake_case)]
- let ($($type_name),+) = self;
+ let ($($type_name,)+) = self;
$($type_name.zeroize());+
}
}
- impl<$($type_name: ZeroizeOnDrop),+> ZeroizeOnDrop for ($($type_name),+) { }
+ impl<$($type_name: ZeroizeOnDrop),+> ZeroizeOnDrop for ($($type_name,)+) { }
}
}
// Generic implementations for tuples up to 10 parameters.
+impl_zeroize_tuple!(A);
impl_zeroize_tuple!(A, B);
impl_zeroize_tuple!(A, B, C);
impl_zeroize_tuple!(A, B, C, D);
@@ -548,7 +544,6 @@
impl_zeroize_tuple!(A, B, C, D, E, F, G, H, I, J);
#[cfg(feature = "alloc")]
-#[cfg_attr(docsrs, doc(cfg(feature = "alloc")))]
impl<Z> Zeroize for Vec<Z>
where
Z: Zeroize,
@@ -565,26 +560,14 @@
self.clear();
// Zero the full capacity of `Vec`.
- // Safety:
- //
- // This is safe, because `Vec` never allocates more than `isize::MAX` bytes.
- // This exact use case is even mentioned in the documentation of `pointer::add`.
- // This is safe because MaybeUninit ignores all invariants,
- // so we can create a slice of MaybeUninit<Z> using the full capacity of the Vec
- let uninit_slice = unsafe {
- slice::from_raw_parts_mut(self.as_mut_ptr() as *mut MaybeUninit<Z>, self.capacity())
- };
-
- uninit_slice.zeroize();
+ self.spare_capacity_mut().zeroize();
}
}
#[cfg(feature = "alloc")]
-#[cfg_attr(docsrs, doc(cfg(feature = "alloc")))]
impl<Z> ZeroizeOnDrop for Vec<Z> where Z: ZeroizeOnDrop {}
#[cfg(feature = "alloc")]
-#[cfg_attr(docsrs, doc(cfg(feature = "alloc")))]
impl<Z> Zeroize for Box<[Z]>
where
Z: Zeroize,
@@ -597,11 +580,9 @@
}
#[cfg(feature = "alloc")]
-#[cfg_attr(docsrs, doc(cfg(feature = "alloc")))]
impl<Z> ZeroizeOnDrop for Box<[Z]> where Z: ZeroizeOnDrop {}
#[cfg(feature = "alloc")]
-#[cfg_attr(docsrs, doc(cfg(feature = "alloc")))]
impl Zeroize for Box<str> {
fn zeroize(&mut self) {
self.as_mut().zeroize();
@@ -609,7 +590,6 @@
}
#[cfg(feature = "alloc")]
-#[cfg_attr(docsrs, doc(cfg(feature = "alloc")))]
impl Zeroize for String {
fn zeroize(&mut self) {
unsafe { self.as_mut_vec() }.zeroize();
@@ -617,7 +597,6 @@
}
#[cfg(feature = "std")]
-#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
impl Zeroize for CString {
fn zeroize(&mut self) {
// mem::take uses replace internally to swap the pointer
@@ -625,11 +604,11 @@
// contain a trailing zero byte
let this = mem::take(self);
- // - CString::into_bytes calls ::into_vec which takes ownership of the heap pointer
+ // - CString::into_bytes_with_nul calls ::into_vec which takes ownership of the heap pointer
// as a Vec<u8>
// - Calling .zeroize() on the resulting vector clears out the bytes
// From: https://github.com/RustCrypto/utils/pull/759#issuecomment-1087976570
- let mut buf = this.into_bytes();
+ let mut buf = this.into_bytes_with_nul();
buf.zeroize();
// expect() should never fail, because zeroize() truncates the Vec
@@ -813,6 +792,64 @@
}
}
+/// Zeroizes a flat type/struct. Only zeroizes the values that it owns, and it does not work on
+/// dynamically sized values or trait objects. It would be inefficient to use this function on a
+/// type that already implements `ZeroizeOnDrop`.
+///
+/// # Safety
+/// - The type must not contain references to outside data or dynamically sized data, such as
+/// `Vec<T>` or `String`.
+/// - Values stored in the type must not have `Drop` impls.
+/// - This function can invalidate the type if it is used after this function is called on it.
+/// It is advisable to call this function only in `impl Drop`.
+/// - The bit pattern of all zeroes must be valid for the data being zeroized. This may not be
+/// true for enums and pointers.
+///
+/// # Incompatible data types
+/// Some data types that cannot be safely zeroized using `zeroize_flat_type` include,
+/// but are not limited to:
+/// - References: `&T` and `&mut T`
+/// - Non-nullable types: `NonNull<T>`, `NonZeroU32`, etc.
+/// - Enums with explicit non-zero tags.
+/// - Smart pointers and collections: `Arc<T>`, `Box<T>`, `Vec<T>`, `HashMap<K, V>`, `String`, etc.
+///
+/// # Examples
+/// Safe usage for a struct containing strictly flat data:
+/// ```
+/// use zeroize::{ZeroizeOnDrop, zeroize_flat_type};
+///
+/// struct DataToZeroize {
+/// flat_data_1: [u8; 32],
+/// flat_data_2: SomeMoreFlatData,
+/// }
+///
+/// struct SomeMoreFlatData(u64);
+///
+/// impl Drop for DataToZeroize {
+/// fn drop(&mut self) {
+/// unsafe { zeroize_flat_type(self as *mut Self) }
+/// }
+/// }
+/// impl ZeroizeOnDrop for DataToZeroize {}
+///
+/// let mut data = DataToZeroize {
+/// flat_data_1: [3u8; 32],
+/// flat_data_2: SomeMoreFlatData(123u64)
+/// };
+///
+/// // data gets zeroized when dropped
+/// ```
+#[inline(always)]
+pub unsafe fn zeroize_flat_type<F: Sized>(data: *mut F) {
+ let size = mem::size_of::<F>();
+ // Safety:
+ //
+ // This is safe because `mem::size_of<T>()` returns the exact size of the object in memory, and
+ // `data_ptr` points directly to the first byte of the data.
+ volatile_set(data as *mut u8, 0, size);
+ atomic_fence()
+}
+
/// Internal module used as support for `AssertZeroizeOnDrop`.
#[doc(hidden)]
pub mod __internal {
diff --git a/crates/zeroize/src/x86.rs b/crates/zeroize/src/x86.rs
index a66cf36..ea671ea 100644
--- a/crates/zeroize/src/x86.rs
+++ b/crates/zeroize/src/x86.rs
@@ -9,32 +9,21 @@
use core::arch::x86_64::*;
macro_rules! impl_zeroize_for_simd_register {
- ($type:ty, $feature:expr, $zero_value:ident) => {
- #[cfg_attr(docsrs, doc(cfg(target_arch = "x86")))] // also `x86_64`
- #[cfg_attr(docsrs, doc(cfg(target_feature = $feature)))]
- impl Zeroize for $type {
- fn zeroize(&mut self) {
- volatile_write(self, unsafe { $zero_value() });
- atomic_fence();
+ ($($type:ty),* $(,)?) => {
+ $(
+ impl Zeroize for $type {
+ #[inline]
+ fn zeroize(&mut self) {
+ volatile_write(self, unsafe { core::mem::zeroed() });
+ atomic_fence();
+ }
}
- }
+ )*
};
}
-#[cfg(target_feature = "sse")]
-impl_zeroize_for_simd_register!(__m128, "sse", _mm_setzero_ps);
+impl_zeroize_for_simd_register!(__m128, __m128d, __m128i, __m256, __m256d, __m256i);
-#[cfg(target_feature = "sse2")]
-impl_zeroize_for_simd_register!(__m128d, "sse2", _mm_setzero_pd);
-
-#[cfg(target_feature = "sse2")]
-impl_zeroize_for_simd_register!(__m128i, "sse2", _mm_setzero_si128);
-
-#[cfg(target_feature = "avx")]
-impl_zeroize_for_simd_register!(__m256, "avx", _mm256_setzero_ps);
-
-#[cfg(target_feature = "avx")]
-impl_zeroize_for_simd_register!(__m256d, "avx", _mm256_setzero_pd);
-
-#[cfg(target_feature = "avx")]
-impl_zeroize_for_simd_register!(__m256i, "avx", _mm256_setzero_si256);
+// NOTE: MSRV 1.72
+#[cfg(feature = "simd")]
+impl_zeroize_for_simd_register!(__m512, __m512d, __m512i);
diff --git a/crates/zeroize/tests/zeroize_derive.rs b/crates/zeroize/tests/zeroize_derive.rs
index 96c10c3..1ab83e2 100644
--- a/crates/zeroize/tests/zeroize_derive.rs
+++ b/crates/zeroize/tests/zeroize_derive.rs
@@ -1,4 +1,5 @@
//! Integration tests for `zeroize_derive` proc macros
+
#![cfg(feature = "zeroize_derive")]
use zeroize::{Zeroize, ZeroizeOnDrop};
@@ -318,6 +319,7 @@
#[test]
#[cfg(feature = "alloc")]
+#[allow(dead_code)]
fn derive_zeroize_on_drop_generic() {
#[derive(ZeroizeOnDrop)]
struct Y<T: Zeroize>(Box<T>);
@@ -325,3 +327,42 @@
#[derive(ZeroizeOnDrop)]
struct Z<T: Zeroize>(Vec<T>);
}
+
+#[test]
+#[allow(dead_code)]
+fn derive_zeroize_unused_param() {
+ #[derive(Zeroize)]
+ struct Z<T> {
+ arr: [u32; 5],
+ #[zeroize(skip)]
+ skipped: T,
+ }
+}
+
+#[test]
+#[allow(dead_code)]
+// Issue #878
+fn derive_zeroize_with_marker() {
+ #[derive(ZeroizeOnDrop, Zeroize)]
+ struct Test<A: Marker> {
+ #[zeroize(skip)]
+ field: Option<A>,
+ }
+
+ #[allow(dead_code)]
+ trait Secret: ZeroizeOnDrop + Zeroize {}
+
+ impl<A: Marker> Secret for Test<A> {}
+
+ trait Marker {}
+}
+
+#[test]
+#[allow(dead_code)]
+// Issue #878
+fn derive_zeroize_used_param() {
+ #[derive(Zeroize)]
+ struct Z<T> {
+ used: T,
+ }
+}
diff --git a/pseudo_crate/Cargo.lock b/pseudo_crate/Cargo.lock
index a647388..a5521cc 100644
--- a/pseudo_crate/Cargo.lock
+++ b/pseudo_crate/Cargo.lock
@@ -338,7 +338,7 @@
"predicates",
"predicates-core",
"predicates-tree",
- "prettyplease 0.2.17",
+ "prettyplease 0.2.25",
"proc-macro2 1.0.92",
"protobuf 3.2.0",
"protobuf-codegen",
@@ -403,7 +403,7 @@
"tempfile",
"termcolor",
"termtree",
- "textwrap 0.16.0",
+ "textwrap 0.16.1",
"thiserror 2.0.6",
"thiserror-impl 2.0.6",
"thread_local",
@@ -447,7 +447,7 @@
"unicode-width",
"unicode-xid 0.2.4",
"uniffi",
- "uniffi_checksum_derive",
+ "uniffi_checksum_derive 0.28.3",
"uniffi_core",
"uniffi_macros",
"uniffi_meta",
@@ -893,7 +893,7 @@
"lazy_static",
"lazycell",
"log",
- "prettyplease 0.2.17",
+ "prettyplease 0.2.25",
"proc-macro2 1.0.92",
"quote 1.0.36",
"regex",
@@ -1184,7 +1184,7 @@
"bitflags 1.3.2",
"clap_lex 0.2.4",
"indexmap 1.9.3",
- "textwrap 0.16.0",
+ "textwrap 0.16.1",
]
[[package]]
@@ -1497,18 +1497,18 @@
[[package]]
name = "crossbeam-queue"
-version = "0.3.11"
+version = "0.3.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35"
+checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115"
dependencies = [
"crossbeam-utils",
]
[[package]]
name = "crossbeam-utils"
-version = "0.8.20"
+version = "0.8.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
+checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
[[package]]
name = "crunchy"
@@ -2228,9 +2228,9 @@
[[package]]
name = "gdbstub_arch"
-version = "0.3.0"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e3b1357bd3203fc09a6601327ae0ab38865d14231d0b65d3143f5762cc7977d"
+checksum = "328a9e9425db13770d0d11de6332a608854266e44c53d12776be7b4aa427e3de"
dependencies = [
"gdbstub",
"num-traits",
@@ -2248,9 +2248,9 @@
[[package]]
name = "getrandom"
-version = "0.2.12"
+version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5"
+checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
dependencies = [
"cfg-if",
"js-sys",
@@ -2553,9 +2553,9 @@
[[package]]
name = "hyper"
-version = "0.14.28"
+version = "0.14.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80"
+checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7"
dependencies = [
"bytes",
"futures-channel",
@@ -2780,9 +2780,9 @@
[[package]]
name = "itoa"
-version = "1.0.10"
+version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
+checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674"
[[package]]
name = "jni"
@@ -3787,7 +3787,7 @@
"heck",
"pest",
"pest_derive",
- "prettyplease 0.2.17",
+ "prettyplease 0.2.25",
"proc-macro2 1.0.92",
"quote 1.0.36",
"serde",
@@ -4088,9 +4088,9 @@
[[package]]
name = "prettyplease"
-version = "0.2.17"
+version = "0.2.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d3928fb5db768cb86f891ff014f0144589297e3c6a1aba6ed7cecfdace270c7"
+checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033"
dependencies = [
"proc-macro2 1.0.92",
"syn 2.0.90",
@@ -4351,9 +4351,9 @@
[[package]]
name = "rayon"
-version = "1.8.1"
+version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051"
+checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
dependencies = [
"either",
"rayon-core",
@@ -4417,9 +4417,9 @@
[[package]]
name = "remain"
-version = "0.2.12"
+version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ad5e011230cad274d0532460c5ab69828ea47ae75681b42a841663efffaf794"
+checksum = "46aef80f842736de545ada6ec65b81ee91504efd6853f4b96de7414c42ae7443"
dependencies = [
"proc-macro2 1.0.92",
"quote 1.0.36",
@@ -4502,9 +4502,9 @@
[[package]]
name = "rustc-demangle"
-version = "0.1.23"
+version = "0.1.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
[[package]]
name = "rustc-demangle-capi"
@@ -4551,9 +4551,9 @@
[[package]]
name = "ryu"
-version = "1.0.16"
+version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
+checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
[[package]]
name = "safer-ffi"
@@ -4645,9 +4645,9 @@
[[package]]
name = "semver"
-version = "1.0.23"
+version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
+checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba"
[[package]]
name = "serde"
@@ -4714,9 +4714,9 @@
[[package]]
name = "serde_spanned"
-version = "0.6.5"
+version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"
+checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1"
dependencies = [
"serde",
]
@@ -4744,9 +4744,9 @@
[[package]]
name = "serde_yaml"
-version = "0.9.31"
+version = "0.9.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "adf8a49373e98a4c5f0ceb5d05aa7c648d75f63774981ed95b7c7443bbd50c6e"
+checksum = "8fd075d994154d4a774f95b51fb96bdc2832b0ea48425c92546073816cda1f2f"
dependencies = [
"indexmap 2.4.0",
"itoa",
@@ -4794,12 +4794,12 @@
[[package]]
name = "shared_child"
-version = "1.0.0"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef"
+checksum = "09fa9338aed9a1df411814a5b2252f7cd206c55ae9bf2fa763f8de84603aa60c"
dependencies = [
"libc",
- "winapi",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -4847,9 +4847,9 @@
[[package]]
name = "smallvec"
-version = "1.13.1"
+version = "1.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"
+checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
dependencies = [
"serde",
]
@@ -4868,12 +4868,12 @@
[[package]]
name = "socket2"
-version = "0.5.5"
+version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
+checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8"
dependencies = [
"libc",
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -4962,9 +4962,9 @@
[[package]]
name = "strum_macros"
-version = "0.25.3"
+version = "0.26.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0"
+checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946"
dependencies = [
"heck",
"proc-macro2 1.0.92",
@@ -5037,14 +5037,13 @@
[[package]]
name = "synstructure"
-version = "0.12.6"
+version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
dependencies = [
"proc-macro2 1.0.92",
"quote 1.0.36",
- "syn 1.0.109",
- "unicode-xid 0.2.4",
+ "syn 2.0.90",
]
[[package]]
@@ -5086,9 +5085,9 @@
[[package]]
name = "textwrap"
-version = "0.16.0"
+version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9"
dependencies = [
"smawk",
"unicode-linebreak",
@@ -5267,9 +5266,9 @@
[[package]]
name = "tokio-stream"
-version = "0.1.16"
+version = "0.1.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1"
+checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047"
dependencies = [
"futures-core",
"pin-project-lite",
@@ -5416,9 +5415,9 @@
[[package]]
name = "tower-layer"
-version = "0.3.2"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
+checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
[[package]]
name = "tower-service"
@@ -5440,9 +5439,9 @@
[[package]]
name = "tracing-attributes"
-version = "0.1.27"
+version = "0.1.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
dependencies = [
"proc-macro2 1.0.92",
"quote 1.0.36",
@@ -5498,9 +5497,9 @@
[[package]]
name = "tungstenite"
-version = "0.21.0"
+version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1"
+checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a"
dependencies = [
"byteorder",
"bytes",
@@ -5511,7 +5510,6 @@
"rand",
"sha1",
"thiserror 1.0.49",
- "url",
"utf-8",
]
@@ -5534,9 +5532,9 @@
[[package]]
name = "ucd-trie"
-version = "0.1.6"
+version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
+checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971"
[[package]]
name = "ucs2"
@@ -5611,9 +5609,9 @@
[[package]]
name = "unicode-normalization"
-version = "0.1.22"
+version = "0.1.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956"
dependencies = [
"tinyvec",
]
@@ -5664,6 +5662,16 @@
]
[[package]]
+name = "uniffi_checksum_derive"
+version = "0.28.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "802d2051a700e3ec894c79f80d2705b69d85844dafbbe5d1a92776f8f48b563a"
+dependencies = [
+ "quote 1.0.36",
+ "syn 2.0.90",
+]
+
+[[package]]
name = "uniffi_core"
version = "0.27.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -5706,7 +5714,7 @@
"anyhow",
"bytes",
"siphasher 0.3.11",
- "uniffi_checksum_derive",
+ "uniffi_checksum_derive 0.27.1",
]
[[package]]
@@ -6575,9 +6583,9 @@
[[package]]
name = "zeroize"
-version = "1.6.0"
+version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
+checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
dependencies = [
"zeroize_derive",
]
diff --git a/pseudo_crate/Cargo.toml b/pseudo_crate/Cargo.toml
index db9b75d..18fce31 100644
--- a/pseudo_crate/Cargo.toml
+++ b/pseudo_crate/Cargo.toml
@@ -74,8 +74,8 @@
crossbeam-channel = "=0.5.14"
crossbeam-deque = "=0.8.6"
crossbeam-epoch = "=0.9.18"
-crossbeam-queue = "=0.3.11"
-crossbeam-utils = "=0.8.20"
+crossbeam-queue = "=0.3.12"
+crossbeam-utils = "=0.8.21"
csv = "=1.3.1"
csv-core = "=0.1.11"
darling = "0.20.10"
@@ -126,8 +126,8 @@
fxhash = "=0.2.1"
gbm = "=0.15.0"
gdbstub = "=0.7.3"
-gdbstub_arch = "=0.3.0"
-getrandom = "=0.2.12"
+gdbstub_arch = "=0.3.1"
+getrandom = "=0.2.15"
glam = "=0.29.2"
glob = "=0.3.1"
googletest = "=0.11.0"
@@ -147,7 +147,7 @@
http-body = "=0.4.6"
httparse = "=1.9.5"
httpdate = "=1.0.3"
-hyper = "=0.14.28"
+hyper = "=0.14.32"
hyper-timeout = "=0.4.1"
ident_case = "=1.0.1"
idna = "=0.5.0"
@@ -157,7 +157,7 @@
instant = "=0.1.12"
intrusive-collections = "=0.9.7"
itertools = "=0.13.0"
-itoa = "=1.0.10"
+itoa = "=1.0.14"
jni = "=0.21.1"
jni-sys = "=0.3.0"
kernlog = "=0.3.1"
@@ -253,7 +253,7 @@
predicates = "=3.0.4"
predicates-core = "=1.0.6"
predicates-tree = "=1.0.9"
-prettyplease = "=0.2.17"
+prettyplease = "=0.2.25"
proc-macro2 = "=1.0.92"
protobuf = "=3.2.0"
protobuf-codegen = "=3.2.0"
@@ -269,56 +269,56 @@
rand_chacha = "=0.3.1"
rand_core = "=0.6.4"
rand_xorshift = "=0.3.0"
-rayon = "=1.8.1"
+rayon = "=1.10.0"
rayon-core = "=1.12.1"
regex = "=1.7.3"
regex-automata = "=0.1.10"
regex-syntax = "=0.6.29"
-remain = "=0.2.12"
+remain = "=0.2.14"
ring = "=0.17.2"
rusb = "=0.9.4"
rusqlite = "=0.29.0"
-rustc-demangle = "=0.1.23"
+rustc-demangle = "=0.1.24"
rustc-demangle-capi = "=0.1.0"
rustc-hash = "=1.1.0"
rustix = "=0.38.31"
rustversion = "=1.0.14"
-ryu = "=1.0.16"
+ryu = "=1.0.18"
same-file = "=1.0.6"
scopeguard = "=1.2.0"
sec1 = "=0.7.3"
-semver = "=1.0.23"
+semver = "=1.0.24"
serde = "=1.0.195"
serde-xml-rs = "=0.6.0"
serde_cbor = "=0.11.2"
serde_derive = "=1.0.195"
serde_json = "=1.0.94"
-serde_spanned = "=0.6.5"
+serde_spanned = "=0.6.8"
serde_test = "=1.0.176"
-serde_yaml = "=0.9.31"
+serde_yaml = "=0.9.32"
sharded-slab = "=0.1.7"
-shared_child = "=1.0.0"
+shared_child = "=1.0.1"
shared_library = "=0.1.9"
shlex = "=1.3.0"
siphasher = "=1.0.1"
slab = "=0.4.9"
-smallvec = "=1.13.1"
+smallvec = "=1.13.2"
smccc = "=0.1.1"
-socket2 = "=0.5.5"
+socket2 = "=0.5.8"
spin = "=0.9.8"
spki = "=0.7.3"
static_assertions = "=1.1.0"
strsim = "=0.11.1"
strum = "=0.25.0"
-strum_macros = "=0.25.3"
+strum_macros = "=0.26.2"
syn = "=2.0.90"
syn-mid = "=0.6.0"
sync_wrapper = "=1.0.1"
-synstructure = "=0.12.6"
+synstructure = "=0.13.1"
tempfile = "=3.12.0"
termcolor = "=1.4.1"
termtree = "=0.4.1"
-textwrap = "=0.16.0"
+textwrap = "=0.16.1"
thiserror = "=2.0.6"
thiserror-impl = "=2.0.6"
thread_local = "=1.1.7"
@@ -332,7 +332,7 @@
tokio-io-timeout = "=1.2.0"
tokio-macros = "=2.4.0"
tokio-openssl = "=0.6.5"
-tokio-stream = "=0.1.16"
+tokio-stream = "=0.1.17"
tokio-test = "=0.4.2"
tokio-util = "=0.7.13"
toml = "=0.8.10"
@@ -340,16 +340,16 @@
toml_edit = "=0.22.4"
tonic = "=0.11.0"
tower = "=0.4.13"
-tower-layer = "=0.3.2"
+tower-layer = "=0.3.3"
tower-service = "=0.3.2"
tracing = "=0.1.40"
-tracing-attributes = "=0.1.27"
+tracing-attributes = "=0.1.28"
tracing-core = "=0.1.32"
tracing-subscriber = "=0.3.18"
try-lock = "=0.2.5"
-tungstenite = "=0.21.0"
+tungstenite = "=0.24.0"
twox-hash = "=1.6.3"
-ucd-trie = "=0.1.6"
+ucd-trie = "=0.1.7"
ucs2 = "=0.3.3"
uefi = "=0.33.0"
uefi-macros = "=0.17.0"
@@ -357,12 +357,12 @@
uguid = "=2.2.0"
unicode-bidi = "=0.3.15"
unicode-ident = "=1.0.8"
-unicode-normalization = "=0.1.22"
+unicode-normalization = "=0.1.24"
unicode-segmentation = "=1.10.1"
unicode-width = "=0.1.11"
unicode-xid = "=0.2.4"
uniffi = "=0.27.1"
-uniffi_checksum_derive = "=0.27.1"
+uniffi_checksum_derive = "=0.28.3"
uniffi_core = "=0.27.1"
uniffi_macros = "=0.27.1"
uniffi_meta = "=0.27.1"
@@ -395,6 +395,6 @@
yaml-rust = "=0.4.5"
zerocopy = "=0.8.13"
zerocopy-derive = "=0.8.13"
-zeroize = "=1.6.0"
+zeroize = "=1.8.1"
zeroize_derive = "=1.4.2"
zip = "=0.6.6"