From 432d803d9f0ecf78c88bfa293050fa6bc7fdcfe5 Mon Sep 17 00:00:00 2001 From: "Conrado P. L. Gouvea" Date: Thu, 6 May 2021 22:05:21 -0300 Subject: [PATCH 1/9] Add ZIP-0244 TxId Digest support --- zebra-chain/src/primitives.rs | 1 + .../src/primitives/zcash_primitives.rs | 46 + zebra-chain/src/transaction.rs | 1 + zebra-chain/src/transaction/hash.rs | 13 +- zebra-chain/src/transaction/tests/vectors.rs | 126 +- zebra-chain/src/transaction/txidhash.rs | 54 + zebra-test/src/lib.rs | 1 + zebra-test/src/zip0244.rs | 1535 +++++++++++++++++ 8 files changed, 1760 insertions(+), 17 deletions(-) create mode 100644 zebra-chain/src/primitives/zcash_primitives.rs create mode 100644 zebra-chain/src/transaction/txidhash.rs create mode 100644 zebra-test/src/zip0244.rs diff --git a/zebra-chain/src/primitives.rs b/zebra-chain/src/primitives.rs index d0f4214b915..fd0a7db0702 100644 --- a/zebra-chain/src/primitives.rs +++ b/zebra-chain/src/primitives.rs @@ -15,3 +15,4 @@ pub use x25519_dalek as x25519; pub use proofs::{Bctv14Proof, Groth16Proof, Halo2Proof, ZkSnarkProof}; pub mod zcash_history; +mod zcash_primitives; diff --git a/zebra-chain/src/primitives/zcash_primitives.rs b/zebra-chain/src/primitives/zcash_primitives.rs new file mode 100644 index 00000000000..95a30697f7b --- /dev/null +++ b/zebra-chain/src/primitives/zcash_primitives.rs @@ -0,0 +1,46 @@ +//! Contains code that interfaces with the zcash_primitives crate from +//! librustzcash. + +use std::{ + convert::{TryFrom, TryInto}, + io, +}; + +use crate::{serialization::ZcashSerialize, transaction::Transaction}; + +impl TryFrom<&Transaction> for zcash_primitives::transaction::Transaction { + type Error = io::Error; + + /// Convert a Zebra transaction into a librustzcash one. + /// + /// # Panics + /// + /// If the transaction is not V5. (Currently there is no need for this + /// conversion for other versions.) + fn try_from(trans: &Transaction) -> Result { + let network_upgrade = match trans { + Transaction::V5 { + network_upgrade, .. + } => network_upgrade, + Transaction::V1 { .. } + | Transaction::V2 { .. } + | Transaction::V3 { .. } + | Transaction::V4 { .. } => panic!("Zebra only uses librustzcash for V5 transactions"), + }; + + let serialized_tx = trans.zcash_serialize_to_vec()?; + // The `read` method currently ignores the BranchId for V5 transactions; + // but we use the correct BranchId anyway. + let branch_id: u32 = network_upgrade + .branch_id() + .expect("Network upgrade must have a Branch ID") + .into(); + // We've already parsed this transaction, so its network upgrade must be valid. + let branch_id: zcash_primitives::consensus::BranchId = branch_id + .try_into() + .expect("zcash_primitives and Zebra have the same branch ids"); + let alt_tx = + zcash_primitives::transaction::Transaction::read(&serialized_tx[..], branch_id)?; + Ok(alt_tx) + } +} diff --git a/zebra-chain/src/transaction.rs b/zebra-chain/src/transaction.rs index b86b990edb8..97bc10530aa 100644 --- a/zebra-chain/src/transaction.rs +++ b/zebra-chain/src/transaction.rs @@ -8,6 +8,7 @@ mod lock_time; mod memo; mod serialize; mod sighash; +mod txidhash; #[cfg(any(test, feature = "proptest-impl"))] pub mod arbitrary; diff --git a/zebra-chain/src/transaction/hash.rs b/zebra-chain/src/transaction/hash.rs index ae1e9ea8caf..65f4fe3292a 100644 --- a/zebra-chain/src/transaction/hash.rs +++ b/zebra-chain/src/transaction/hash.rs @@ -5,9 +5,9 @@ use std::fmt; use proptest_derive::Arbitrary; use serde::{Deserialize, Serialize}; -use crate::serialization::{sha256d, SerializationError, ZcashSerialize}; +use crate::serialization::SerializationError; -use super::Transaction; +use super::{txidhash::TxIdHasher, Transaction}; /// A transaction hash. /// @@ -19,11 +19,10 @@ pub struct Hash(pub [u8; 32]); impl<'a> From<&'a Transaction> for Hash { fn from(transaction: &'a Transaction) -> Self { - let mut hash_writer = sha256d::Writer::default(); - transaction - .zcash_serialize(&mut hash_writer) - .expect("Transactions must serialize into the hash."); - Self(hash_writer.finish()) + let hasher = TxIdHasher::new(&transaction); + hasher + .txid() + .expect("zcash_primitives and Zebra transaction formats must be compatible") } } diff --git a/zebra-chain/src/transaction/tests/vectors.rs b/zebra-chain/src/transaction/tests/vectors.rs index b7bbe4d2449..9b0e2f8b70b 100644 --- a/zebra-chain/src/transaction/tests/vectors.rs +++ b/zebra-chain/src/transaction/tests/vectors.rs @@ -1,13 +1,32 @@ +use lazy_static::lazy_static; + +use zebra_test::zip0244; + use super::super::*; use crate::{ block::{Block, Height, MAX_BLOCK_BYTES}, parameters::{Network, NetworkUpgrade}, serialization::{SerializationError, ZcashDeserialize, ZcashDeserializeInto, ZcashSerialize}, + transaction::txidhash::TxIdHasher, }; +use color_eyre::eyre::Result; + use std::convert::TryInto; +lazy_static! { + pub static ref EMPTY_V5_TX: Transaction = Transaction::V5 { + network_upgrade: NetworkUpgrade::Nu5, + lock_time: LockTime::min_lock_time(), + expiry_height: block::Height(0), + inputs: Vec::new(), + outputs: Vec::new(), + sapling_shielded_data: None, + orchard_shielded_data: None, + }; +} + #[test] fn librustzcash_tx_deserialize_and_round_trip() { zebra_test::init(); @@ -133,18 +152,10 @@ fn zip243_deserialize_and_round_trip() { fn empty_v5_round_trip() { zebra_test::init(); - let tx = Transaction::V5 { - network_upgrade: NetworkUpgrade::Nu5, - lock_time: LockTime::min_lock_time(), - expiry_height: block::Height(0), - inputs: Vec::new(), - outputs: Vec::new(), - sapling_shielded_data: None, - orchard_shielded_data: None, - }; + let tx: &Transaction = &*EMPTY_V5_TX; let data = tx.zcash_serialize_to_vec().expect("tx should serialize"); - let tx2 = data + let tx2: &Transaction = &data .zcash_deserialize_into() .expect("tx should deserialize"); @@ -188,6 +199,17 @@ fn empty_v4_round_trip() { assert_eq!(data, data2, "data must be equal if structs are equal"); } +/// Check if an empty V5 transaction can be deserialized by librustzcash too. +#[test] +fn empty_v5_librustzcash_round_trip() { + zebra_test::init(); + + let tx: &Transaction = &*EMPTY_V5_TX; + let _alt_tx: zcash_primitives::transaction::Transaction = tx + .try_into() + .expect("librustzcash deserialization might work for empty zebra serialized transactions. Hint: if empty transactions fail, but other transactions work, delete this test"); +} + /// Do a round-trip test on fake v5 transactions created from v4 transactions /// in the block test vectors. /// @@ -341,3 +363,87 @@ fn invalid_orchard_nullifier() { SerializationError::Parse("Invalid pallas::Base value for orchard Nullifier").to_string() ); } + +/// Do a round-trip test via librustzcash on fake v5 transactions created from v4 transactions +/// in the block test vectors. +/// Makes sure that zebra-serialized transactions can be deserialized by librustzcash. +#[test] +fn fake_v5_librustzcash_round_trip() { + zebra_test::init(); + + fake_v5_librustzcash_round_trip_for_network(Network::Mainnet); + fake_v5_librustzcash_round_trip_for_network(Network::Testnet); +} + +fn fake_v5_librustzcash_round_trip_for_network(network: Network) { + let block_iter = match network { + Network::Mainnet => zebra_test::vectors::MAINNET_BLOCKS.iter(), + Network::Testnet => zebra_test::vectors::TESTNET_BLOCKS.iter(), + }; + + for (height, original_bytes) in block_iter { + let original_block = original_bytes + .zcash_deserialize_into::() + .expect("block is structurally valid"); + + // skip blocks that are before overwinter as they will not have a valid consensus branch id + if *height + < NetworkUpgrade::Overwinter + .activation_height(network) + .expect("a valid height") + .0 + { + continue; + } + + let mut fake_block = original_block.clone(); + fake_block.transactions = fake_block + .transactions + .iter() + .map(AsRef::as_ref) + .map(|t| arbitrary::transaction_to_fake_v5(t, network, Height(*height))) + .map(Into::into) + .collect(); + + // test each transaction + for (original_tx, fake_tx) in original_block + .transactions + .iter() + .zip(fake_block.transactions.iter()) + { + assert_ne!( + &original_tx, &fake_tx, + "v1-v4 transactions must change when converted to fake v5" + ); + + let fake_bytes = fake_tx + .zcash_serialize_to_vec() + .expect("vec serialization is infallible"); + + assert_ne!( + &original_bytes[..], + fake_bytes, + "v1-v4 transaction data must change when converted to fake v5" + ); + + let _alt_tx: zcash_primitives::transaction::Transaction = fake_tx + .as_ref() + .try_into() + .expect("librustzcash deserialization must work for zebra serialized transactions"); + } + } +} + +#[test] +fn zip244_txid() -> Result<()> { + zebra_test::init(); + + for test in zip0244::TEST_VECTORS.iter() { + let transaction = test.tx.zcash_deserialize_into::()?; + let hasher = TxIdHasher::new(&transaction); + let txid = hasher.txid()?; + assert_eq!(txid.0, test.txid); + } + + Ok(()) +} diff --git a/zebra-chain/src/transaction/txidhash.rs b/zebra-chain/src/transaction/txidhash.rs new file mode 100644 index 00000000000..196d6a6f9a6 --- /dev/null +++ b/zebra-chain/src/transaction/txidhash.rs @@ -0,0 +1,54 @@ +//! Transaction ID hashing. Contains code for generating the Transaction ID +//! from the transaction, using hashing. +use std::{convert::TryInto, io}; + +use super::Transaction; + +use crate::serialization::{sha256d, ZcashSerialize}; + +use super::Hash; + +/// A Transaction ID hasher. It computes the transaction ID by hashing +/// different parts of the transaction, depending on the transaction version. +/// For V5 transactions, it follows ZIP-244 and ZIP-225. +pub(super) struct TxIdHasher<'a> { + trans: &'a Transaction, +} + +impl<'a> TxIdHasher<'a> { + /// Return a new TxIdHasher for the given transaction. + pub fn new(trans: &'a Transaction) -> Self { + TxIdHasher { trans } + } + + /// Compute the Transaction ID for the previously specified transaction. + pub(super) fn txid(self) -> Result { + match self.trans { + Transaction::V1 { .. } + | Transaction::V2 { .. } + | Transaction::V3 { .. } + | Transaction::V4 { .. } => self.txid_v1_to_v4(), + Transaction::V5 { .. } => self.txid_v5(), + } + } + + /// Compute the Transaction ID for transactions V1 to V4. + /// In these cases it's simply the hash of the serialized transaction. + fn txid_v1_to_v4(self) -> Result { + let mut hash_writer = sha256d::Writer::default(); + self.trans + .zcash_serialize(&mut hash_writer) + .expect("Transactions must serialize into the hash."); + Ok(Hash(hash_writer.finish())) + } + + /// Compute the Transaction ID for a V5 transaction in the given network upgrade. + /// In this case it's the hash of a tree of hashes of specific parts of the + /// transaction, as specified in ZIP-244 and ZIP-225. + fn txid_v5(self) -> Result { + // The v5 txid (from ZIP-244) is computed using librustzcash. Convert the zebra + // transaction to a librustzcash transaction. + let alt_tx: zcash_primitives::transaction::Transaction = self.trans.try_into()?; + Ok(Hash(*alt_tx.txid().as_ref())) + } +} diff --git a/zebra-test/src/lib.rs b/zebra-test/src/lib.rs index 389affe0522..6ed277423a4 100644 --- a/zebra-test/src/lib.rs +++ b/zebra-test/src/lib.rs @@ -24,6 +24,7 @@ pub mod net; pub mod prelude; pub mod transcript; pub mod vectors; +pub mod zip0244; /// A multi-threaded Tokio runtime that can be shared between tests. /// diff --git a/zebra-test/src/zip0244.rs b/zebra-test/src/zip0244.rs new file mode 100644 index 00000000000..8c78d4682a3 --- /dev/null +++ b/zebra-test/src/zip0244.rs @@ -0,0 +1,1535 @@ +//! Contains test vectors for ZIP-0244 data (transaction IDs, signature hashes). +use lazy_static::lazy_static; + +/// A ZIP-244 test vector with the transaction input and expected outputs. +pub struct TestVector { + /// The serialized transaction. + pub tx: Vec, + /// The expected transaction ID. + pub txid: [u8; 32], + /// Which transparent input the ID refers to, if any. + pub transparent_input: Option, + /// The script code for the given transparent input, if any. + pub script_code: Option>, + /// The amount of the transparent input, if any. + pub amount: Option, + /// The signature hash for the SIGHASH_ALL type. + pub sighash_all: [u8; 32], + /// The signature hash for the SIGHASH_NONE type. + pub sighash_none: Option<[u8; 32]>, + /// The signature hash for the SIGHASH_SINGLE type. + pub sighash_single: Option<[u8; 32]>, + /// The signature hash for the SIGHASH_ALL type with SIGHASH_ANYONECANPAY set. + pub sighash_all_anyone: Option<[u8; 32]>, + /// The signature hash for the SIGHASH_NONE type with SIGHASH_ANYONECANPAY set. + pub sighash_none_anyone: Option<[u8; 32]>, + /// The signature hash for the SIGHASH_SINGLE type with SIGHASH_ANYONECANPAY set. + pub sighash_single_anyone: Option<[u8; 32]>, +} + +lazy_static! { + /// Array of ZIP-244 test vectors. + /// From https://github.com/zcash-hackworks/zcash-test-vectors/blob/master/zip_0244.py + pub static ref TEST_VECTORS: Vec = vec![ + TestVector { + tx: vec![ + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0x98, 0xa1, 0x19, 0xf9, 0x7a, 0x8f, + 0x73, 0x9a, 0x2d, 0x6f, 0x2c, 0x02, 0x01, 0xe1, 0x52, 0xa8, 0x04, 0x9e, 0x29, 0x4c, + 0x4d, 0x6e, 0x66, 0xb1, 0x64, 0x93, 0x9d, 0xaf, 0xfa, 0x2e, 0xf6, 0xee, 0x69, 0x21, + 0x48, 0x1c, 0xdd, 0x86, 0xb3, 0xcc, 0x43, 0x18, 0xd9, 0x61, 0x4f, 0xc8, 0x20, 0x90, + 0x5d, 0x04, 0x53, 0x51, 0x6a, 0xac, 0xa3, 0xf2, 0x49, 0x88, 0x00, 0x01, 0x9f, 0x33, + 0xbf, 0x3a, 0x10, 0x9b, 0xdd, 0x1b, 0x23, 0x2b, 0x47, 0xb1, 0x64, 0x6d, 0x91, 0xe1, + 0x29, 0x66, 0x34, 0xeb, 0xde, 0x5c, 0xca, 0xd5, 0x72, 0x88, 0xb5, 0xb2, 0x22, 0x81, + 0x86, 0xe5, 0x4b, 0x69, 0x68, 0x91, 0x2a, 0x63, 0x81, 0xce, 0x3d, 0xc1, 0x66, 0xd5, + 0x6a, 0x1d, 0x62, 0xf5, 0xa8, 0xd7, 0x55, 0x1d, 0xb5, 0xfd, 0x93, 0x13, 0xe8, 0xc7, + 0x20, 0x3d, 0x99, 0x6a, 0xf7, 0xd4, 0x1a, 0x38, 0xe0, 0x1d, 0x94, 0x90, 0x3d, 0x3c, + 0x3e, 0x0a, 0xd3, 0x36, 0x0c, 0x1d, 0x37, 0x10, 0xac, 0xd2, 0x0b, 0x18, 0x3e, 0x31, + 0xd4, 0x9f, 0x25, 0xc9, 0xa1, 0x38, 0xf4, 0x9b, 0x1a, 0x53, 0x01, 0x46, 0x6b, 0x3d, + 0xa6, 0x12, 0x14, 0x9d, 0xf5, 0xed, 0xa0, 0xf1, 0x4f, 0x2e, 0xfc, 0x5c, 0x6a, 0xc0, + 0x38, 0x84, 0x42, 0x8a, 0x31, 0x5d, 0xc9, 0x1f, 0x8d, 0x7b, 0x49, 0x2e, 0xbc, 0x57, + 0xe4, 0x75, 0xa4, 0xa6, 0xf2, 0x65, 0x72, 0x50, 0x4b, 0x19, 0x22, 0x32, 0xec, 0xb9, + 0xf0, 0xc0, 0x24, 0x11, 0xe5, 0x25, 0x96, 0xbc, 0x5e, 0x90, 0x45, 0x7e, 0x74, 0x59, + 0x39, 0xff, 0xed, 0xbd, 0x12, 0x1e, 0x37, 0xec, 0x1e, 0x9d, 0xdd, 0xc3, 0x1b, 0x06, + 0xdc, 0x95, 0x76, 0xa1, 0x73, 0x8e, 0xf7, 0x3e, 0x6b, 0xa7, 0x16, 0x48, 0x91, 0x3d, + 0xbf, 0x75, 0xa7, 0x79, 0xfd, 0xd4, 0x88, 0xd8, 0x3f, 0x85, 0x7d, 0xee, 0xcc, 0x40, + 0xa9, 0x8d, 0x5f, 0x29, 0x35, 0x39, 0x5e, 0xe4, 0x76, 0x2d, 0xd2, 0x1a, 0xfd, 0xbb, + 0x5d, 0x47, 0xfa, 0x9a, 0x6d, 0xd9, 0x84, 0xd5, 0x67, 0xdb, 0x28, 0x57, 0xb9, 0x27, + 0xb7, 0xfa, 0xe2, 0xdb, 0x58, 0x71, 0x05, 0x41, 0x5d, 0x46, 0x42, 0x78, 0x9d, 0x38, + 0xf5, 0x0b, 0x8d, 0xbc, 0xc1, 0x29, 0xca, 0xb3, 0xd1, 0x7d, 0x19, 0xf3, 0x35, 0x5b, + 0xcf, 0x73, 0xce, 0xcb, 0x8c, 0xb8, 0xa5, 0xda, 0x01, 0x30, 0x71, 0x52, 0xf1, 0x39, + 0x36, 0xa2, 0x70, 0x57, 0x26, 0x70, 0xdc, 0x82, 0xd3, 0x90, 0x26, 0xc6, 0xcb, 0x4c, + 0xd4, 0xb0, 0xf7, 0xf5, 0xaa, 0x2a, 0x4f, 0x5a, 0x53, 0x41, 0xec, 0x5d, 0xd7, 0x15, + 0x40, 0x6f, 0x2f, 0xdd, 0x2a, 0xfa, 0x73, 0x3f, 0x5f, 0x64, 0x1c, 0x8c, 0x21, 0x86, + 0x2a, 0x1b, 0xaf, 0xce, 0x26, 0x09, 0xd9, 0xee, 0xcf, 0xa1, 0x58, 0xcf, 0xb5, 0xcd, + 0x79, 0xf8, 0x80, 0x08, 0xe3, 0x15, 0xdc, 0x7d, 0x83, 0x88, 0xe7, 0x6c, 0x17, 0x82, + 0xfd, 0x27, 0x95, 0xd1, 0x8a, 0x76, 0x36, 0x24, 0xc2, 0x5f, 0xa9, 0x59, 0xcc, 0x97, + 0x48, 0x9c, 0xe7, 0x57, 0x45, 0x82, 0x4b, 0x77, 0x86, 0x8c, 0x53, 0x23, 0x9c, 0xfb, + 0xdf, 0x73, 0xca, 0xec, 0x65, 0x60, 0x40, 0x37, 0x31, 0x4f, 0xaa, 0xce, 0xb5, 0x62, + 0x18, 0xc6, 0xbd, 0x30, 0xf8, 0x37, 0x4a, 0xc1, 0x33, 0x86, 0x79, 0x3f, 0x21, 0xa9, + 0xfb, 0x80, 0xad, 0x03, 0xbc, 0x0c, 0xda, 0x4a, 0x44, 0x94, 0x6c, 0x00, 0xe1, 0xb1, + 0xa1, 0xdf, 0x0e, 0x5b, 0x87, 0xb5, 0xbe, 0xce, 0x47, 0x7a, 0x70, 0x96, 0x49, 0xe9, + 0x50, 0x06, 0x05, 0x91, 0x39, 0x48, 0x12, 0x95, 0x1e, 0x1f, 0xe3, 0x89, 0x5b, 0x8c, + 0xc3, 0xd1, 0x4d, 0x2c, 0xf6, 0x55, 0x6d, 0xf6, 0xed, 0x4b, 0x4d, 0xdd, 0x3d, 0x9a, + 0x69, 0xf5, 0x33, 0x57, 0xd7, 0x76, 0x7f, 0x4f, 0x5c, 0xcb, 0xdb, 0xc5, 0x96, 0x63, + 0x12, 0x77, 0xf8, 0xfe, 0xcd, 0x08, 0xcb, 0x05, 0x6b, 0x95, 0xe3, 0x02, 0x5b, 0x97, + 0x92, 0xff, 0xf7, 0xf2, 0x44, 0xfc, 0x71, 0x62, 0x69, 0xb9, 0x26, 0xd6, 0x2e, 0x95, + 0x96, 0xfa, 0x82, 0x5c, 0x6b, 0xf2, 0x1a, 0xff, 0x9e, 0x68, 0x62, 0x5a, 0x19, 0x24, + 0x40, 0xea, 0x06, 0x82, 0x81, 0x23, 0xd9, 0x78, 0x84, 0x80, 0x6f, 0x15, 0xfa, 0x08, + 0xda, 0x52, 0x75, 0x4a, 0x10, 0x95, 0xe3, 0xff, 0x1a, 0xbd, 0x5c, 0xe4, 0xfd, 0xdf, + 0xcc, 0xfc, 0x3a, 0x61, 0x28, 0xae, 0xf7, 0x84, 0xa6, 0x46, 0x10, 0xa8, 0x9d, 0x1a, + 0x70, 0x99, 0x21, 0x6d, 0x08, 0x14, 0xd3, 0xa2, 0xd4, 0x52, 0x43, 0x1c, 0x32, 0xd4, + 0x11, 0xac, 0x1c, 0xce, 0x82, 0xad, 0x02, 0x29, 0x40, 0x7b, 0xbc, 0x48, 0x98, 0x56, + 0x75, 0xe3, 0xf8, 0x74, 0xa4, 0x53, 0x3f, 0x1d, 0x63, 0xa8, 0x4d, 0xfa, 0x3e, 0x0f, + 0x46, 0x0f, 0xe2, 0xf5, 0x7e, 0x34, 0xfb, 0xc7, 0x54, 0x23, 0xc3, 0x73, 0x7f, 0x5b, + 0x2a, 0x06, 0x15, 0xf5, 0x72, 0x2d, 0xb0, 0x41, 0xa3, 0xef, 0x66, 0xfa, 0x48, 0x3a, + 0xfd, 0x3c, 0x2e, 0x19, 0xe5, 0x94, 0x44, 0xa6, 0x4a, 0xdd, 0x6d, 0xf1, 0xd9, 0x63, + 0xf5, 0xdd, 0x5b, 0x50, 0x10, 0xd3, 0xd0, 0x25, 0xf0, 0x28, 0x7c, 0x4c, 0xf1, 0x9c, + 0x75, 0xf3, 0x3d, 0x51, 0xdd, 0xdd, 0xba, 0x5d, 0x65, 0x7b, 0x43, 0xee, 0x8d, 0xa6, + 0x45, 0x44, 0x38, 0x14, 0xcc, 0x73, 0x29, 0xf3, 0xe9, 0xb4, 0xe5, 0x4c, 0x23, 0x6c, + 0x29, 0xaf, 0x39, 0x23, 0x10, 0x17, 0x56, 0xd9, 0xfa, 0x4b, 0xd0, 0xf7, 0xd2, 0xdd, + 0xaa, 0xcb, 0x6b, 0x0f, 0x86, 0xa2, 0x65, 0x8e, 0x0a, 0x07, 0xa0, 0x5a, 0xc5, 0xb9, + 0x50, 0x05, 0x1c, 0xd2, 0x4c, 0x47, 0xa8, 0x8d, 0x13, 0xd6, 0x59, 0xba, 0x2a, 0x46, + 0xca, 0x18, 0x30, 0x81, 0x6d, 0x09, 0xcd, 0x76, 0x46, 0xf7, 0x6f, 0x71, 0x6a, 0xbe, + 0xc5, 0xde, 0x07, 0xfe, 0x9b, 0x52, 0x34, 0x10, 0x80, 0x6e, 0xa6, 0xf2, 0x88, 0xf8, + 0x73, 0x6c, 0x23, 0x35, 0x7c, 0x85, 0xf4, 0x57, 0x91, 0xe1, 0x70, 0x80, 0x29, 0xd9, + 0x82, 0x4d, 0x90, 0x70, 0x46, 0x07, 0xf3, 0x87, 0xa0, 0x3e, 0x49, 0xbf, 0x98, 0x36, + 0x57, 0x44, 0x31, 0x34, 0x5a, 0x78, 0x77, 0xef, 0xaa, 0x8a, 0x08, 0xe7, 0x30, 0x81, + 0xef, 0x8d, 0x62, 0xcb, 0x78, 0x0a, 0xb6, 0x88, 0x3a, 0x50, 0xa0, 0xd4, 0x70, 0x19, + 0x0d, 0xfb, 0xa1, 0x0a, 0x85, 0x7f, 0x82, 0x84, 0x2d, 0x38, 0x25, 0xb3, 0xd6, 0xda, + 0x05, 0x73, 0xd3, 0x16, 0xeb, 0x16, 0x0d, 0xc0, 0xb7, 0x16, 0xc4, 0x8f, 0xbd, 0x46, + 0x7f, 0x75, 0xb7, 0x80, 0x14, 0x9a, 0xe8, 0x80, 0x8f, 0x4e, 0x68, 0xf5, 0x0c, 0x05, + 0x36, 0xac, 0xdd, 0xf6, 0xf1, 0xae, 0xab, 0x01, 0x6b, 0x6b, 0xc1, 0xa5, 0x1e, 0xd4, + 0x4c, 0xfa, 0xb7, 0x00, 0x00, 0xc7, 0xb3, 0x53, 0x42, 0x01, 0xcf, 0xb1, 0xcd, 0x8d, + 0xbf, 0x69, 0xb8, 0x25, 0x0c, 0x18, 0xef, 0x41, 0x29, 0x4c, 0xa9, 0x79, 0x93, 0xdb, + 0x54, 0x6c, 0x1f, 0xe0, 0x1f, 0x7e, 0x9c, 0x8e, 0x36, 0x7e, 0xdc, 0xf0, 0x4b, 0xe3, + 0x4a, 0x98, 0x51, 0xa7, 0xaf, 0x9d, 0xb6, 0x99, 0x0e, 0xd8, 0x3d, 0xd6, 0x4a, 0xf3, + 0x59, 0x7c, 0x04, 0x32, 0x3e, 0xa5, 0x1b, 0x00, 0x52, 0xad, 0x80, 0x84, 0xa8, 0xb9, + 0xda, 0x94, 0x8d, 0x32, 0x0d, 0xad, 0xd6, 0x4f, 0x54, 0x31, 0xe6, 0x1d, 0xdf, 0x65, + 0x8d, 0x24, 0xae, 0x67, 0xc2, 0x2c, 0x8d, 0x13, 0x09, 0x13, 0x1f, 0xc0, 0x0f, 0xe7, + 0xf2, 0x35, 0x73, 0x42, 0x76, 0xd3, 0x8d, 0x47, 0xf1, 0xe1, 0x91, 0xe0, 0x0c, 0x7a, + 0x1d, 0x48, 0xaf, 0x04, 0x68, 0x27, 0x59, 0x1e, 0x97, 0x33, 0xa9, 0x7f, 0xa6, 0xb6, + 0x79, 0xf3, 0xdc, 0x60, 0x1d, 0x00, 0x82, 0x85, 0xed, 0xcb, 0xda, 0xe6, 0x9c, 0xe8, + 0xfc, 0x1b, 0xe4, 0xaa, 0xc0, 0x0f, 0xf2, 0x71, 0x1e, 0xbd, 0x93, 0x1d, 0xe5, 0x18, + 0x85, 0x68, 0x78, 0xf7, 0x34, 0x76, 0xf2, 0x1a, 0x48, 0x2e, 0xc9, 0x37, 0x83, 0x65, + 0xc8, 0xf7, 0x39, 0x3c, 0x94, 0xe2, 0x88, 0x53, 0x15, 0xeb, 0x46, 0x71, 0x09, 0x8b, + 0x79, 0x53, 0x5e, 0x79, 0x0f, 0xe5, 0x3e, 0x29, 0xfe, 0xf2, 0xb3, 0x76, 0x66, 0x97, + 0xac, 0x32, 0xb4, 0xf4, 0x73, 0xf4, 0x68, 0xa0, 0x08, 0xe7, 0x23, 0x89, 0xfc, 0x03, + 0x88, 0x0d, 0x78, 0x0c, 0xb0, 0x7f, 0xcf, 0xaa, 0xbe, 0x3f, 0x1a, 0x84, 0xb2, 0x7d, + 0xb5, 0x9a, 0x4a, 0x15, 0x3d, 0x10, 0x70, 0x68, 0x9f, 0x2c, 0xcf, 0x97, 0x5b, 0x2b, + 0x17, 0x6e, 0x1c, 0x69, 0xdb, 0xe3, 0x81, 0x34, 0x0e, 0xf1, 0xf9, 0x8f, 0xdc, 0x4b, + 0x45, 0x3a, 0xbd, 0xa3, 0xa2, 0xbf, 0xac, 0x30, 0x69, 0xba, 0x7f, 0x1c, 0xc5, 0x0a, + 0x81, 0xc2, 0x52, 0x0e, 0x41, 0x2f, 0xab, 0x4e, 0x5d, 0x39, 0x7e, 0xcf, 0x73, 0x9f, + 0x28, 0x0d, 0x5b, 0x68, 0x45, 0x33, 0xd5, 0xd2, 0x9c, 0xfe, 0x7e, 0x73, 0x02, 0xec, + 0x14, 0x4b, 0x4e, 0x55, 0x3a, 0xcf, 0xd6, 0x70, 0xf7, 0x7e, 0x75, 0x5f, 0xc8, 0x8e, + 0x06, 0x77, 0xe3, 0x1b, 0xa4, 0x59, 0xb4, 0x4e, 0x30, 0x77, 0x68, 0x95, 0x8f, 0xe3, + 0x78, 0x9d, 0x41, 0xc2, 0xb1, 0xff, 0x43, 0x4c, 0xb3, 0x0e, 0x15, 0x91, 0x4f, 0x01, + 0xbc, 0x6b, 0xc2, 0x30, 0x7b, 0x48, 0x8d, 0x25, 0x56, 0xd7, 0xb7, 0x38, 0x0e, 0xa4, + 0xff, 0xd7, 0x12, 0xf6, 0xb0, 0x2f, 0xe8, 0x06, 0xb9, 0x45, 0x69, 0xcd, 0x40, 0x59, + 0xf3, 0x96, 0xbf, 0x29, 0xb9, 0x9d, 0x0a, 0x40, 0xe5, 0xe1, 0x71, 0x1c, 0xa9, 0x44, + 0xf7, 0x2d, 0x43, 0x6a, 0x10, 0x2f, 0xca, 0x4b, 0x97, 0x69, 0x3d, 0xa0, 0xb0, 0x86, + 0xfe, 0x9d, 0x2e, 0x71, 0x62, 0x47, 0x0d, 0x02, 0xe0, 0xf0, 0x5d, 0x4b, 0xec, 0x95, + 0x12, 0xbf, 0xb3, 0xf3, 0x83, 0x27, 0x29, 0x6e, 0xfa, 0xa7, 0x43, 0x28, 0xb1, 0x18, + 0xc2, 0x74, 0x02, 0xc7, 0x0c, 0x3a, 0x90, 0xb4, 0x9a, 0xd4, 0xbb, 0xc6, 0x8e, 0x37, + 0xc0, 0xaa, 0x7d, 0x9b, 0x3f, 0xe1, 0x77, 0x99, 0xd7, 0x3b, 0x84, 0x1e, 0x75, 0x17, + 0x13, 0xa0, 0x29, 0x43, 0x90, 0x5a, 0xae, 0x08, 0x03, 0xfd, 0x69, 0x44, 0x2e, 0xb7, + 0x68, 0x1e, 0xc2, 0xa0, 0x56, 0x00, 0x05, 0x4e, 0x92, 0xee, 0xd5, 0x55, 0x02, 0x8f, + 0x21, 0xb6, 0xa1, 0x55, 0x26, 0x8a, 0x2d, 0xd6, 0x64, 0x05, 0x25, 0x28, 0xa5, 0xf8, + 0xed, 0x02, 0x8f, 0x59, 0xaf, 0x98, 0x5a, 0xd1, 0x31, 0x5c, 0x2e, 0x25, 0xae, 0xb9, + 0xd7, 0xf1, 0x34, 0xe4, 0xbf, 0x47, 0x86, 0x42, 0xab, 0x96, 0xb1, 0x5d, 0x3b, 0x3e, + 0x13, 0xce, 0x23, 0x87, 0xac, 0x84, 0xdc, 0x08, 0x19, 0xe8, 0x12, 0x60, 0xe1, 0x1d, + 0x39, 0x2a, 0x5f, 0x06, 0xdb, 0x8b, 0x56, 0x33, 0xde, 0x28, 0x1a, 0x0e, 0x9c, 0x95, + 0x8c, 0x24, 0x06, 0x02, 0x97, 0xf6, 0x08, 0xaf, 0x1d, 0xc5, 0x16, 0x16, 0x56, 0x2b, + 0x1f, 0xff, 0xf6, 0xe2, 0xa2, 0x8b, 0xab, 0x1f, 0x77, 0x72, 0x71, 0x3a, 0x0a, 0x4b, + 0x56, 0xfe, 0x47, 0xfb, 0x5a, 0x7b, 0x73, 0xae, 0xee, 0x53, 0x45, 0x56, 0x6e, 0xcf, + 0x3e, 0x95, 0xe8, 0x25, 0xf9, 0x2e, 0xb4, 0x69, 0xeb, 0x5d, 0x69, 0x16, 0x42, 0x06, + 0xa0, 0xea, 0x1c, 0xe7, 0x3b, 0xfb, 0x2a, 0x94, 0x2e, 0x73, 0x70, 0x32, 0x14, 0xd2, + 0x70, 0xd8, 0x05, 0x34, 0x38, 0x9b, 0x1a, 0x1e, 0x2b, 0xba, 0x67, 0x48, 0x1e, 0xb3, + 0x66, 0x7d, 0x6d, 0x38, 0x25, 0x4a, 0xc4, 0xb4, 0x45, 0x59, 0xb4, 0x70, 0x8c, 0xdd, + 0x12, 0x89, 0x89, 0x72, 0xa8, 0x95, 0xbf, 0x0f, 0xb0, 0x55, 0xcf, 0x1f, 0xb9, 0xb7, + 0x30, 0x29, 0xd6, 0xbf, 0xb2, 0x7d, 0xa2, 0xb5, 0x29, 0x4f, 0x5c, 0xb3, 0x54, 0xa8, + 0x94, 0x32, 0x28, 0x48, 0xcc, 0x3d, 0x35, 0xb9, 0x55, 0x4a, 0x5f, 0x62, 0xb4, 0x4a, + 0x7d, 0xcb, 0x25, 0x40, 0x6e, 0x5b, 0xa0, 0x78, 0x82, 0xcb, 0x64, 0x73, 0x71, 0x4e, + 0x77, 0xa0, 0x51, 0xa7, 0xdc, 0xd2, 0x9f, 0xea, 0x0a, 0x94, 0x37, 0x85, 0xb3, 0x25, + 0xcd, 0xab, 0x95, 0x40, 0x4f, 0xc7, 0xae, 0xd7, 0x05, 0x25, 0xcd, 0xdb, 0x41, 0x87, + 0x2c, 0xfc, 0xc2, 0x14, 0xb1, 0x32, 0x32, 0xed, 0xc7, 0x86, 0x09, 0x75, 0x3d, 0xbf, + 0xf9, 0x30, 0xeb, 0x0d, 0xc1, 0x56, 0x61, 0x2b, 0x9c, 0xb4, 0x34, 0xbc, 0x4b, 0x69, + 0x33, 0x92, 0xde, 0xb8, 0x7c, 0x53, 0x04, 0x35, 0x31, 0x2e, 0xdc, 0xed, 0xc6, 0xa9, + 0x61, 0x13, 0x33, 0x38, 0xd7, 0x86, 0xc4, 0xa3, 0xe1, 0x03, 0xf6, 0x01, 0x10, 0xa1, + 0x6b, 0x13, 0x37, 0x12, 0x97, 0x04, 0xbf, 0x47, 0x54, 0xff, 0x6b, 0xa9, 0xfb, 0xe6, + 0x59, 0x51, 0xe6, 0x10, 0x62, 0x0f, 0x71, 0xcd, 0xa8, 0xfc, 0x87, 0x76, 0x25, 0xf2, + 0xc5, 0xbb, 0x04, 0xcb, 0xe1, 0x22, 0x8b, 0x1e, 0x88, 0x6f, 0x40, 0x50, 0xaf, 0xd8, + 0xfe, 0x94, 0xe9, 0x7d, 0x2e, 0x9e, 0x85, 0xc6, 0xbb, 0x74, 0x8c, 0x00, 0x42, 0xd3, + 0x24, 0x9a, 0xbb, 0x13, 0x42, 0xbb, 0x0e, 0xeb, 0xf6, 0x20, 0x58, 0xbf, 0x3d, 0xe0, + 0x80, 0xd9, 0x46, 0x11, 0xa3, 0x75, 0x09, 0x15, 0xb5, 0xdc, 0x6c, 0x0b, 0x38, 0x99, + 0xd4, 0x12, 0x22, 0xba, 0xce, 0x76, 0x0e, 0xe9, 0xc8, 0x81, 0x8d, 0xed, 0x59, 0x9e, + 0x34, 0xc5, 0x6d, 0x73, 0x72, 0xaf, 0x1e, 0xb8, 0x68, 0x52, 0xf2, 0xa7, 0x32, 0x10, + 0x4b, 0xdb, 0x75, 0x07, 0x39, 0xde, 0x6c, 0x2c, 0x6e, 0x0f, 0x9e, 0xb7, 0xcb, 0x17, + 0xf1, 0x94, 0x2b, 0xfc, 0x9f, 0x4f, 0xd6, 0xeb, 0xb6, 0xb4, 0xcd, 0xd4, 0xda, 0x2b, + 0xca, 0x26, 0xfa, 0xc4, 0x57, 0x8e, 0x9f, 0x54, 0x34, 0x05, 0xac, 0xc7, 0xd8, 0x6f, + 0xf5, 0x91, 0x58, 0xbd, 0x0c, 0xba, 0x3a, 0xef, 0x6f, 0x4a, 0x84, 0x72, 0xd1, 0x44, + 0xd9, 0x9f, 0x8b, 0x8d, 0x1d, 0xed, 0xaa, 0x90, 0x77, 0xd4, 0xf0, 0x1d, 0x4b, 0xb2, + 0x7b, 0xbe, 0x31, 0xd8, 0x8f, 0xbe, 0xfa, 0xc3, 0xdc, 0xd4, 0x79, 0x75, 0x63, 0xa2, + 0x6b, 0x1d, 0x61, 0xfc, 0xd9, 0xa4, 0x64, 0xab, 0x21, 0xed, 0x55, 0x0f, 0xe6, 0xfa, + 0x09, 0x69, 0x5b, 0xa0, 0xb2, 0xf1, 0x0e, 0xea, 0x64, 0x68, 0xcc, 0x6e, 0x20, 0xa6, + 0x6f, 0x82, 0x6e, 0x3d, 0x14, 0xc5, 0x00, 0x6f, 0x05, 0x63, 0x88, 0x7f, 0x5e, 0x12, + 0x89, 0xbe, 0x1b, 0x20, 0x04, 0xca, 0xca, 0x8d, 0x3f, 0x34, 0xd6, 0xe8, 0x4b, 0xf5, + 0x9c, 0x1e, 0x04, 0x61, 0x9a, 0x7c, 0x23, 0xa9, 0x96, 0x94, 0x1d, 0x88, 0x9e, 0x46, + 0x22, 0xa9, 0xb9, 0xb1, 0xd5, 0x9d, 0x5e, 0x31, 0x90, 0x94, 0x31, 0x8c, 0xd4, 0x05, + 0xba, 0x27, 0xb7, 0xe2, 0xc0, 0x84, 0x76, 0x2d, 0x31, 0x45, 0x3e, 0xc4, 0x54, 0x9a, + 0x4d, 0x97, 0x72, 0x9d, 0x03, 0x34, 0x60, 0xfc, 0xf8, 0x9d, 0x64, 0x94, 0xf2, 0xff, + 0xd7, 0x89, 0xe9, 0x80, 0x82, 0xea, 0x5c, 0xe9, 0x53, 0x4b, 0x3a, 0xcd, 0x60, 0xfe, + 0x49, 0xe3, 0x7e, 0x4f, 0x66, 0x69, 0x31, 0x67, 0x73, 0x19, 0xed, 0x89, 0xf8, 0x55, + 0x88, 0x74, 0x1b, 0x31, 0x28, 0x90, 0x1a, 0x93, 0xbd, 0x78, 0xe4, 0xbe, 0x02, 0x25, + 0xa9, 0xe2, 0x69, 0x2c, 0x77, 0xc9, 0x69, 0xed, 0x01, 0x76, 0xbd, 0xf9, 0x55, 0x59, + 0x48, 0xcb, 0xd5, 0xa3, 0x32, 0xd0, 0x45, 0xde, 0x6b, 0xa6, 0xbf, 0x44, 0x90, 0xad, + 0xfe, 0x74, 0x44, 0xcd, 0x46, 0x7a, 0x09, 0x07, 0x54, 0x17, 0xfc, 0xc0, 0x06, 0x2e, + 0x49, 0xf0, 0x08, 0xc5, 0x1a, 0xd4, 0x22, 0x74, 0x39, 0xc1, 0xb4, 0x47, 0x6c, 0xcd, + 0x8e, 0x97, 0x86, 0x2d, 0xab, 0x7b, 0xe1, 0xe8, 0xd3, 0x99, 0xc0, 0x5e, 0xf2, 0x7c, + 0x6e, 0x22, 0xee, 0x27, 0x3e, 0x15, 0x78, 0x6e, 0x39, 0x4c, 0x8f, 0x1b, 0xe3, 0x16, + 0x82, 0xa3, 0x01, 0x47, 0x96, 0x3a, 0xc8, 0xda, 0x8d, 0x41, 0xd8, 0x04, 0x25, 0x84, + 0x26, 0xa3, 0xf7, 0x02, 0x89, 0xb8, 0xad, 0x19, 0xd8, 0xde, 0x13, 0xbe, 0x4e, 0xeb, + 0xe3, 0xbd, 0x4c, 0x8a, 0x6f, 0x55, 0xd6, 0xe0, 0xc3, 0x73, 0xd4, 0x56, 0x85, 0x18, + 0x79, 0xf5, 0xfb, 0xc2, 0x82, 0xdb, 0x9e, 0x13, 0x48, 0x06, 0xbf, 0xf7, 0x1e, 0x11, + 0xbc, 0x33, 0xab, 0x75, 0xdd, 0x6c, 0xa0, 0x67, 0xfb, 0x73, 0xa0, 0x43, 0xb6, 0x46, + 0xa7, 0xcf, 0x39, 0xca, 0xb4, 0x92, 0x83, 0x86, 0x78, 0x6d, 0x2f, 0x24, 0x14, 0x1e, + 0xe1, 0x20, 0xfd, 0xc3, 0x4d, 0x67, 0x64, 0xea, 0xfc, 0x66, 0x88, 0x0e, 0xe0, 0x20, + 0x4f, 0x53, 0xcc, 0x11, 0x67, 0xed, 0x20, 0xb4, 0x3a, 0x52, 0xde, 0xa3, 0xca, 0x7c, + 0xff, 0x8e, 0xf3, 0x5c, 0xd8, 0xe6, 0xd7, 0xc1, 0x11, 0xa6, 0x8e, 0xf4, 0x4b, 0xcd, + 0x0c, 0x15, 0x13, 0xad, 0x47, 0xca, 0x61, 0xc6, 0x59, 0xcc, 0x5d, 0x32, 0x5b, 0x44, + 0x0f, 0x6b, 0x9f, 0x59, 0xaf, 0xf6, 0x68, 0x79, 0xbb, 0x66, 0x88, 0xfd, 0xb4, 0x62, + 0xaf, 0x43, 0x58, 0x2b, 0x98, 0x3f, 0x92, 0xb5, 0x69, 0x8b, 0x87, 0xdb, 0x46, 0xe4, + 0xb0, 0x2d, 0xd8, 0xe8, 0x1e, 0xca, 0x55, 0x5a, 0x44, 0xf2, 0xf1, 0xae, 0xf1, 0x1d, + 0x88, 0xa0, 0xbc, 0xee, 0x76, 0xaf, 0x9a, 0xd3, 0xf9, 0xc4, 0x6a, 0x67, 0x06, 0x2e, + 0x1a, 0x9c, 0xa7, 0xea, 0x5c, 0x01, 0x43, 0x84, 0xaf, 0x07, 0x21, 0x9c, 0x7c, 0x0e, + 0xe7, 0xfc, 0x7b, 0xfc, 0x79, 0x33, 0xd1, 0x74, 0x65, 0x0f, 0x46, 0xb4, 0xcc, 0x00, + 0x01, 0x90, 0xc1, 0x9b, 0x44, 0xc5, 0x7a, 0xe8, 0x91, 0xaa, 0x86, 0x64, 0x6c, 0x10, + 0xa1, 0x77, 0xa8, 0x62, 0x6b, 0xe0, 0x64, 0x40, 0x99, 0x31, 0xc3, 0x7d, 0x9e, 0x8b, + 0xdc, 0x43, 0x3b, 0x7d, 0x79, 0xe0, 0x8a, 0x12, 0xf7, 0x38, 0xa8, 0xf0, 0xdb, 0xdd, + 0xfe, 0xf2, 0xf2, 0x65, 0x7e, 0xf3, 0xe4, 0x7d, 0x1b, 0x0f, 0xd1, 0x1e, 0x6a, 0x13, + 0x65, 0x4d, 0xb2, 0x85, 0x4f, 0xcb, 0xff, 0x49, 0xaa, 0x0d, 0xad, 0xaf, 0xec, 0x32, + 0x0b, 0x6e, 0xd2, 0xd4, 0xb2, 0x79, 0xae, 0xe9, 0x06, 0x0c, 0x1b, 0x22, 0x1e, 0x2e, + 0xb2, 0xf1, 0x3b, 0x06, 0x91, 0xc4, 0xd8, 0x42, 0x40, 0x6d, 0x0e, 0xc4, 0x28, 0x2c, + 0x95, 0x26, 0x17, 0x4a, 0x09, 0x87, 0x8f, 0xe8, 0xfd, 0xde, 0x33, 0xa2, 0x96, 0x04, + 0xe5, 0xe5, 0xe7, 0xb2, 0xa0, 0x25, 0xd6, 0x65, 0x0b, 0x97, 0xdb, 0xb5, 0x2b, 0xef, + 0xb5, 0x9b, 0x1d, 0x30, 0xa5, 0x74, 0x33, 0xb0, 0xa3, 0x51, 0x47, 0x44, 0x44, 0x09, + 0x9d, 0xaa, 0x37, 0x10, 0x46, 0x61, 0x32, 0x60, 0xcf, 0x33, 0x54, 0xcf, 0xcd, 0xad, + 0xa6, 0x63, 0xec, 0xe8, 0x24, 0xff, 0xd7, 0xe4, 0x43, 0x93, 0x88, 0x6a, 0x86, 0x16, + 0x5d, 0xdd, 0xdf, 0x2b, 0x4c, 0x41, 0x77, 0x35, 0x54, 0xc8, 0x69, 0x95, 0x26, 0x94, + 0x08, 0xb1, 0x1e, 0x67, 0x37, 0xa4, 0xc4, 0x47, 0x58, 0x6f, 0x69, 0x17, 0x34, 0x46, + 0xd8, 0xe4, 0x8b, 0xf8, 0x4c, 0xbc, 0x00, 0x0a, 0x80, 0x78, 0x99, 0x97, 0x3e, 0xb9, + 0x3c, 0x5e, 0x81, 0x9a, 0xad, 0x66, 0x94, 0x13, 0xf8, 0x38, 0x79, 0x33, 0xad, 0x15, + 0x84, 0xaa, 0x35, 0xe4, 0x3f, 0x4e, 0xcd, 0x1e, 0x2d, 0x04, 0x07, 0xc0, 0xb1, 0xb8, + 0x99, 0x20, 0xff, 0xdf, 0xdb, 0x9b, 0xea, 0x51, 0xac, 0x95, 0xb5, 0x57, 0xaf, 0x71, + 0xb8, 0x9f, 0x90, 0x3f, 0x5d, 0x98, 0x48, 0xf1, 0x4f, 0xcb, 0xeb, 0x18, 0x37, 0x57, + 0x0f, 0x54, 0x4d, 0x63, 0x59, 0xeb, 0x23, 0xfa, 0xf3, 0x8a, 0x08, 0x22, 0xda, 0x36, + 0xce, 0x42, 0x6c, 0x4a, 0x2f, 0xbe, 0xff, 0xeb, 0x0a, 0x8a, 0x2e, 0x29, 0x7a, 0x9d, + 0x19, 0xba, 0x15, 0x02, 0x45, 0x90, 0xe3, 0x32, 0x9d, 0x9f, 0xa9, 0x26, 0x1f, 0x99, + 0x38, 0xa4, 0x03, 0x2d, 0xd3, 0x46, 0x06, 0xc9, 0xcf, 0x9f, 0x3d, 0xd3, 0x3e, 0x57, + 0x6f, 0x05, 0xcd, 0x1d, 0xd6, 0x81, 0x1c, 0x62, 0x98, 0x75, 0x7d, 0x77, 0xd9, 0xe8, + 0x10, 0xab, 0xdb, 0x22, 0x6a, 0xfc, 0xaa, 0x43, 0x46, 0xa6, 0x56, 0x0f, 0x89, 0x32, + 0xb3, 0x18, 0x1f, 0xd3, 0x55, 0xd5, 0xd3, 0x91, 0x97, 0x61, 0x83, 0xf8, 0xd9, 0x93, + 0x88, 0x83, 0x96, 0x32, 0xd6, 0x35, 0x4f, 0x66, 0x6d, 0x09, 0xd3, 0xe5, 0x62, 0x9e, + 0xa1, 0x97, 0x37, 0x38, 0x86, 0x13, 0xd3, 0x8a, 0x34, 0xfd, 0x0f, 0x6e, 0x50, 0xee, + 0x5a, 0x0c, 0xc9, 0x67, 0x71, 0x77, 0xf5, 0x00, 0x28, 0xc1, 0x41, 0x37, 0x81, 0x87, + 0xbd, 0x28, 0x19, 0x40, 0x3f, 0xc5, 0x34, 0xf8, 0x00, 0x76, 0xe9, 0x38, 0x0c, 0xb4, + 0x96, 0x4d, 0x3b, 0x6b, 0x45, 0x81, 0x9d, 0x3b, 0x8e, 0x9c, 0xaf, 0x54, 0xf0, 0x51, + 0x85, 0x2d, 0x67, 0x1b, 0xf8, 0xc1, 0xff, 0xde, 0x2d, 0x15, 0x10, 0x75, 0x64, 0x18, + 0xcb, 0x48, 0x10, 0x93, 0x6a, 0xa5, 0x7e, 0x69, 0x65, 0xd6, 0xfb, 0x65, 0x6a, 0x76, + 0x0b, 0x7f, 0x19, 0xad, 0xf9, 0x6c, 0x17, 0x34, 0x88, 0x55, 0x21, 0x93, 0xb1, 0x47, + 0xee, 0x58, 0x85, 0x80, 0x33, 0xda, 0xc7, 0xcd, 0x0e, 0xb2, 0x04, 0xc0, 0x64, 0x90, + 0xbb, 0xde, 0xdf, 0x5f, 0x75, 0x71, 0xac, 0xb2, 0xeb, 0xe7, 0x6a, 0xce, 0xf3, 0xf2, + 0xa0, 0x1e, 0xe9, 0x87, 0x48, 0x6d, 0xfe, 0x6c, 0x3f, 0x0a, 0x5e, 0x23, 0x4c, 0x12, + 0x72, 0x58, 0xf9, 0x7a, 0x28, 0xfb, 0x5d, 0x16, 0x4a, 0x81, 0x76, 0xbe, 0x94, 0x6b, + 0x80, 0x97, 0xd0, 0xe3, 0x17, 0x28, 0x7f, 0x33, 0xbf, 0x9c, 0x16, 0xf9, 0xa5, 0x45, + 0x40, 0x9c, 0xe2, 0x9b, 0x1f, 0x42, 0x73, 0x72, 0x5f, 0xc0, 0xdf, 0x02, 0xa0, 0x4e, + 0xba, 0xe1, 0x78, 0xb3, 0x41, 0x4f, 0xb0, 0xa8, 0x2d, 0x50, 0xde, 0xb0, 0x9f, 0xcf, + 0x4e, 0x6e, 0xe9, 0xd1, 0x80, 0xff, 0x4f, 0x56, 0xff, 0x3b, 0xc1, 0xd3, 0x60, 0x1f, + 0xc2, 0xdc, 0x90, 0xd8, 0x14, 0xc3, 0x25, 0x6f, 0x49, 0x67, 0xd3, 0xa8, 0xd6, 0x4c, + 0x83, 0xfe, 0xa3, 0x39, 0xc5, 0x1f, 0x5a, 0x8e, 0x58, 0x01, 0xfb, 0xb9, 0x78, 0x35, + 0x58, 0x1b, 0x60, 0x24, 0x65, 0xde, 0xe0, 0x4b, 0x59, 0x22, 0xc2, 0x76, 0x1b, 0x54, + 0x24, 0x5b, 0xec, 0x0c, 0x9e, 0xef, 0x2d, 0xb9, 0x7d, 0x22, 0xb2, 0xb3, 0x55, 0x6c, + 0xc9, 0x69, 0xfb, 0xb1, 0x3d, 0x06, 0x50, 0x97, 0x65, 0xa5, 0x2b, 0x3f, 0xac, 0x54, + 0xb9, 0x3f, 0x42, 0x1b, 0xf0, 0x8e, 0x18, 0xd5, 0x2d, 0xdd, 0x52, 0xcc, 0x1c, 0x8c, + 0xa8, 0xad, 0xfa, 0xcc, 0xab, 0x7e, 0x5c, 0xc2, 0xf4, 0x57, 0x3f, 0xbb, 0xf8, 0x23, + 0x9b, 0xb0, 0xb8, 0xae, 0xdb, 0xf8, 0xda, 0xd1, 0x62, 0x82, 0xda, 0x5c, 0x91, 0x25, + 0xdb, 0xa1, 0xc0, 0x59, 0xd0, 0xdf, 0x8a, 0xbf, 0x62, 0x10, 0x78, 0xf0, 0x2d, 0x6c, + 0x4b, 0xc8, 0x6d, 0x40, 0x84, 0x5a, 0xc1, 0xd5, 0x97, 0x10, 0xc4, 0x5f, 0x07, 0xd5, + 0x85, 0xeb, 0x48, 0xb3, 0x2f, 0xc0, 0x16, 0x7b, 0xa2, 0x56, 0xe7, 0x3c, 0xa3, 0xb9, + 0x31, 0x1c, 0x62, 0xd1, 0x09, 0x49, 0x03, 0x57, 0x05, 0x19, 0xd4, 0x44, 0x2f, 0x02, + 0x00, 0xe6, 0xad, 0x11, 0xf2, 0x45, 0x2d, 0xc9, 0xae, 0x85, 0xae, 0xc0, 0x1f, 0xc5, + 0x6f, 0x8c, 0xbf, 0xda, 0x75, 0xa7, 0x72, 0x7b, 0x75, 0xeb, 0xbd, 0x6b, 0xbf, 0xfb, + 0x43, 0xb6, 0x3a, 0x3b, 0x1b, 0x87, 0x1e, 0x40, 0xfe, 0xb0, 0xdb, 0x00, 0x29, 0x74, + 0xa3, 0xc3, 0xb1, 0xa7, 0x88, 0x56, 0x72, 0x31, 0xbf, 0x63, 0x99, 0xff, 0x89, 0x23, + 0x69, 0x81, 0x14, 0x9d, 0x42, 0x38, 0x02, 0xd2, 0x34, 0x1a, 0x3b, 0xed, 0xb9, 0xdd, + 0xcb, 0xac, 0x1f, 0xe7, 0xb6, 0x43, 0x5e, 0x14, 0x79, 0xc7, 0x2e, 0x70, 0x89, 0xd0, + 0x29, 0xe7, 0xfb, 0xba, 0xf3, 0xcf, 0x37, 0xe9, 0xb9, 0xa6, 0xb7, 0x76, 0x79, 0x1e, + 0x4c, 0x5e, 0x6f, 0xda, 0x57, 0xe8, 0xd5, 0xf1, 0x4c, 0x8c, 0x35, 0xa2, 0xd2, 0x70, + 0x84, 0x6b, 0x9d, 0xbe, 0x00, 0x5c, 0xda, 0x16, 0xaf, 0x44, 0x08, 0xf3, 0xab, 0x06, + 0xa9, 0x16, 0xee, 0xeb, 0x9c, 0x95, 0x94, 0xb7, 0x04, 0x24, 0xa4, 0xc1, 0xd1, 0x71, + 0x29, 0x5b, 0x67, 0x63, 0xb2, 0x2f, 0x47, 0xf8, 0x0b, 0x53, 0xcc, 0xbb, 0x90, 0x4b, + 0xd6, 0x8f, 0xd6, 0x5f, 0xbd, 0x3f, 0xbd, 0xea, 0x10, 0x35, 0xe9, 0x8c, 0x21, 0xa7, + 0xdb, 0xa5, 0xfe, 0x10, 0x89, 0xf7, 0xd1, 0xc0, 0x32, 0xf2, 0x4d, 0x36, 0x83, 0x5a, + 0xa8, 0x81, 0x52, 0x66, 0xe8, 0x97, 0xff, 0x82, 0x94, 0x03, 0xcf, 0xac, 0x3a, 0x71, + 0x59, 0x54, 0xb9, 0xb6, 0x89, 0x58, 0xa0, 0x11, 0x1a, 0x2c, 0x92, 0x65, 0x63, 0x3b, + 0xa2, 0x83, 0x1a, 0x2e, 0x86, 0xb9, 0x41, 0xe5, 0x69, 0xd5, 0x8d, 0x99, 0xc1, 0x38, + 0x35, 0x97, 0xfa, 0xd8, 0x11, 0x93, 0xc4, 0xc1, 0x31, 0x51, 0xf4, 0x0a, 0xed, 0xb4, + 0x87, 0xb5, 0xc0, 0x4a, 0xe3, 0xb1, 0xdd, 0xfb, 0xaf, 0xa2, 0x6e, 0x72, 0x00, 0x99, + 0xf2, 0x6d, 0x5a, 0x75, 0x35, 0xae, 0xe5, 0x73, 0x06, 0xfd, 0x2c, 0x4f, 0x30, 0x67, + 0x3c, 0xd9, 0xb6, 0x98, 0xfe, 0xcf, 0x32, 0xfa, 0xf8, 0x8f, 0x62, 0xe2, 0x1c, 0x90, + 0x66, 0x58, 0x59, 0xdd, 0x26, 0x83, 0x3d, 0x21, 0xd9, 0xbc, 0x54, 0x52, 0xbd, 0x19, + 0x51, 0x5d, 0x3f, 0xa5, 0xc1, 0xe6, 0x8b, 0xc2, 0x09, 0xb9, 0xdc, 0x2a, 0x10, 0xae, + 0x6b, 0x63, 0x07, 0x26, 0xa6, 0x7b, 0x33, 0x60, 0x3c, 0x69, 0x1f, 0xaf, 0xc2, 0x81, + 0xdd, 0x94, 0xdc, 0x98, 0x88, 0xa6, 0x8c, 0x4f, 0x45, 0x15, 0x5a, 0xa7, 0x89, 0x7c, + 0x04, 0x5a, 0xaf, 0xd9, 0x33, 0x5b, 0xe2, 0xe0, 0xdd, 0xcf, 0x5f, 0x58, 0x6d, 0x7f, + 0x6b, 0x4f, 0xe1, 0x2d, 0xad, 0x9a, 0x17, 0xf5, 0xdb, 0x70, 0x31, + ], + txid: [ + 0xbf, 0x6c, 0x7d, 0x19, 0xf7, 0xc5, 0x65, 0xb1, 0xd4, 0xd9, 0x6d, 0xfb, 0xd0, 0x69, + 0x8b, 0x3c, 0x87, 0xc7, 0x4a, 0x2a, 0x63, 0xa2, 0x89, 0xd3, 0x00, 0x05, 0xda, 0xd6, + 0x98, 0x3d, 0x95, 0x44, + ], + transparent_input: Some(0), + script_code: Some(vec![0x65, 0x00, 0x51]), + amount: Some(570688904498311), + sighash_all: [ + 0xf8, 0xff, 0x73, 0xee, 0x09, 0xf6, 0x4e, 0x10, 0xd8, 0x80, 0x97, 0x39, 0x62, 0x10, + 0xe8, 0x67, 0xf9, 0x25, 0x4f, 0xf7, 0x40, 0xfd, 0x4f, 0x7d, 0x1f, 0xb7, 0xa6, 0x37, + 0x60, 0xef, 0x01, 0x64, + ], + sighash_none: Some([ + 0x89, 0xe6, 0x1b, 0x4b, 0x75, 0x83, 0xea, 0x3d, 0x23, 0xeb, 0x60, 0x2b, 0x82, 0x8c, + 0x5e, 0xf5, 0x89, 0x32, 0x1b, 0xd6, 0xf6, 0xe3, 0x96, 0x85, 0xa2, 0x44, 0xf6, 0x40, + 0xd8, 0x75, 0xbe, 0x86, + ]), + sighash_single: Some([ + 0x89, 0xe6, 0x1b, 0x4b, 0x75, 0x83, 0xea, 0x3d, 0x23, 0xeb, 0x60, 0x2b, 0x82, 0x8c, + 0x5e, 0xf5, 0x89, 0x32, 0x1b, 0xd6, 0xf6, 0xe3, 0x96, 0x85, 0xa2, 0x44, 0xf6, 0x40, + 0xd8, 0x75, 0xbe, 0x86, + ]), + sighash_all_anyone: Some([ + 0xf7, 0x59, 0xd3, 0x65, 0x04, 0x80, 0xf4, 0x52, 0xc9, 0x10, 0x3b, 0x71, 0x4f, 0x11, + 0x38, 0xdd, 0x35, 0x15, 0x53, 0xf0, 0x38, 0x10, 0x8a, 0xba, 0x4d, 0xe2, 0xb0, 0x29, + 0x33, 0xbe, 0x7b, 0x23, + ]), + sighash_none_anyone: Some([ + 0xf7, 0x59, 0xd3, 0x65, 0x04, 0x80, 0xf4, 0x52, 0xc9, 0x10, 0x3b, 0x71, 0x4f, 0x11, + 0x38, 0xdd, 0x35, 0x15, 0x53, 0xf0, 0x38, 0x10, 0x8a, 0xba, 0x4d, 0xe2, 0xb0, 0x29, + 0x33, 0xbe, 0x7b, 0x23, + ]), + sighash_single_anyone: Some([ + 0xf7, 0x59, 0xd3, 0x65, 0x04, 0x80, 0xf4, 0x52, 0xc9, 0x10, 0x3b, 0x71, 0x4f, 0x11, + 0x38, 0xdd, 0x35, 0x15, 0x53, 0xf0, 0x38, 0x10, 0x8a, 0xba, 0x4d, 0xe2, 0xb0, 0x29, + 0x33, 0xbe, 0x7b, 0x23, + ]), + }, + TestVector { + tx: vec![ + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0x98, 0xa1, 0x19, 0xf9, 0x1f, 0xc9, + 0x98, 0xc3, 0x1f, 0x4d, 0xd2, 0x08, 0x00, 0x01, 0x50, 0x58, 0xe5, 0x75, 0x4c, 0x21, + 0x04, 0x00, 0x07, 0x53, 0xac, 0x51, 0x53, 0x00, 0x51, 0x52, 0x02, 0xf8, 0x9d, 0x32, + 0x26, 0xfb, 0x53, 0x29, 0x2b, 0xfb, 0x5d, 0xbb, 0xf7, 0xff, 0x01, 0x3a, 0xf3, 0x34, + 0x1e, 0xa7, 0xa3, 0x5f, 0x55, 0x3f, 0x6d, 0x7a, 0x02, 0x21, 0xae, 0x19, 0x5e, 0xa8, + 0x4e, 0xb9, 0x7a, 0x14, 0x94, 0x36, 0x49, 0x30, 0x55, 0x21, 0x32, 0x6b, 0xde, 0x08, + 0x56, 0x30, 0x86, 0x46, 0x29, 0x29, 0x1b, 0xae, 0x25, 0xff, 0x88, 0x22, 0xa1, 0x4c, + 0x4b, 0x66, 0x6a, 0x92, 0x59, 0xbe, 0xa6, 0xfa, 0x0b, 0xf2, 0x99, 0x99, 0x56, 0xfb, + 0xfd, 0x0e, 0xe6, 0x8e, 0xc3, 0x6e, 0x46, 0x88, 0x80, 0x9a, 0xe2, 0x31, 0xeb, 0x8b, + 0xc4, 0x36, 0x9f, 0x5f, 0xe1, 0x57, 0x3f, 0x57, 0xe0, 0x68, 0x54, 0x06, 0x99, 0x4d, + 0x28, 0x26, 0x4e, 0x4d, 0x74, 0xd5, 0xa2, 0x5f, 0xa3, 0xfa, 0x38, 0xfe, 0xd8, 0x13, + 0xc5, 0x05, 0xdd, 0x90, 0x28, 0x9f, 0x30, 0x1c, 0x75, 0xe5, 0x3a, 0x71, 0x6c, 0x5b, + 0x54, 0xa4, 0x5e, 0xb3, 0x2c, 0x16, 0x54, 0x48, 0xd4, 0xd5, 0xd6, 0x1c, 0xa2, 0x85, + 0x95, 0x85, 0x36, 0x9f, 0x53, 0xf1, 0xa1, 0x37, 0xe9, 0xe8, 0x2b, 0x67, 0xb8, 0xfd, + 0xaf, 0x01, 0xbd, 0xa5, 0x4a, 0x31, 0x73, 0x11, 0x89, 0x6a, 0xe1, 0x02, 0x80, 0xa0, + 0x32, 0x44, 0x0c, 0x42, 0x0a, 0x42, 0x1e, 0x94, 0x4d, 0x1e, 0x95, 0x2b, 0x70, 0xd5, + 0x82, 0x6c, 0xd3, 0xb0, 0x8b, 0x7d, 0xb9, 0x01, 0xe5, 0x84, 0x9f, 0x96, 0xba, 0xe6, + 0xf2, 0x05, 0x6f, 0x33, 0xab, 0x1e, 0x69, 0x89, 0xd7, 0xd2, 0x64, 0xad, 0xc9, 0x78, + 0x55, 0xa9, 0x90, 0x10, 0x3b, 0x4d, 0x1e, 0x63, 0x50, 0xd5, 0xc3, 0x1a, 0x39, 0xc3, + 0xca, 0xf6, 0x94, 0x59, 0xe4, 0x62, 0xf1, 0x41, 0xbe, 0x8b, 0x39, 0x03, 0x7f, 0xfa, + 0x25, 0x5c, 0xe2, 0x7e, 0x4a, 0xd7, 0xb5, 0x66, 0xa2, 0x96, 0x20, 0xa9, 0xf0, 0x11, + 0xab, 0x08, 0xfb, 0x2a, 0xd3, 0x05, 0x06, 0x52, 0xb3, 0xf6, 0x5b, 0x8e, 0x34, 0x52, + 0x6a, 0x2a, 0x15, 0xfc, 0x2d, 0xdc, 0x5b, 0x51, 0x13, 0xe4, 0x88, 0x2c, 0x7c, 0xca, + 0x0d, 0xd5, 0x57, 0x7b, 0xe0, 0x67, 0xba, 0x7a, 0x17, 0x5d, 0xae, 0x4b, 0xbe, 0x3e, + 0xf4, 0x86, 0x3d, 0x53, 0x70, 0x89, 0x15, 0x09, 0x0f, 0x47, 0xa0, 0x68, 0xe2, 0x27, + 0x43, 0x3f, 0x9e, 0x49, 0xd3, 0xaa, 0x09, 0xe3, 0x56, 0xd8, 0xd6, 0x6d, 0x0c, 0x01, + 0x21, 0xe9, 0x1a, 0x3c, 0x4a, 0xa3, 0xf2, 0x7f, 0xa1, 0xb6, 0x33, 0x96, 0xe2, 0xb4, + 0x1d, 0xb9, 0x08, 0xfd, 0xab, 0x8b, 0x18, 0xcc, 0x73, 0x04, 0xe9, 0x4e, 0x97, 0x05, + 0x68, 0xf9, 0x42, 0x1c, 0x0d, 0xbb, 0xba, 0xf8, 0x45, 0x98, 0xd9, 0x72, 0xb0, 0x53, + 0x4f, 0x48, 0xa5, 0xe5, 0x26, 0x70, 0x43, 0x6a, 0xaa, 0x77, 0x6e, 0xd2, 0x48, 0x2a, + 0xd7, 0x03, 0x43, 0x02, 0x01, 0xe5, 0x34, 0x43, 0xc3, 0x6d, 0xcf, 0xd3, 0x4a, 0x0c, + 0xb6, 0x63, 0x78, 0x76, 0x10, 0x5e, 0x79, 0xbf, 0x3b, 0xd5, 0x8e, 0xc1, 0x48, 0xcb, + 0x64, 0x97, 0x0e, 0x32, 0x23, 0xa9, 0x1f, 0x71, 0xdf, 0xcf, 0xd5, 0xa0, 0x4b, 0x66, + 0x7f, 0xba, 0xf3, 0xd4, 0xb3, 0xb9, 0x08, 0xb9, 0x82, 0x88, 0x20, 0xdf, 0xec, 0xdd, + 0x75, 0x37, 0x50, 0xb5, 0xf9, 0xd2, 0x21, 0x6e, 0x56, 0xc6, 0x15, 0x27, 0x2f, 0x85, + 0x44, 0x64, 0xc0, 0xca, 0x4b, 0x1e, 0x85, 0xae, 0xdd, 0x03, 0x82, 0x92, 0xc4, 0xe1, + 0xa5, 0x77, 0x44, 0xeb, 0xba, 0x01, 0x0b, 0x9e, 0xbf, 0xbb, 0x01, 0x1b, 0xd6, 0xf0, + 0xb7, 0x88, 0x05, 0x02, 0x5d, 0x27, 0xf3, 0xc1, 0x77, 0x46, 0xba, 0xe1, 0x16, 0xc1, + 0x5d, 0x9f, 0x47, 0x1f, 0x0f, 0x62, 0x88, 0xa1, 0x50, 0x64, 0x7b, 0x2a, 0xfe, 0x9d, + 0xf7, 0xcc, 0xcf, 0x01, 0xf5, 0xcd, 0xe5, 0xf0, 0x46, 0x80, 0xbb, 0xfe, 0xd8, 0x7f, + 0x6c, 0xf4, 0x29, 0xfb, 0x27, 0xad, 0x6b, 0xab, 0xe7, 0x91, 0x76, 0x66, 0x11, 0xcf, + 0x5b, 0xc2, 0x0e, 0x48, 0xbe, 0xf1, 0x19, 0x25, 0x9b, 0x9b, 0x8a, 0x0e, 0x39, 0xc3, + 0xdf, 0x28, 0xcb, 0x95, 0x82, 0xea, 0x33, 0x86, 0x01, 0xcd, 0xc4, 0x81, 0xb3, 0x2f, + 0xb8, 0x2a, 0xde, 0xeb, 0xb3, 0xda, 0xde, 0x25, 0xd1, 0xa3, 0xdf, 0x20, 0xc3, 0x7e, + 0x71, 0x25, 0x06, 0xb5, 0xd9, 0x96, 0xc4, 0x9a, 0x9f, 0x0f, 0x30, 0xdd, 0xcb, 0x91, + 0xfe, 0x90, 0x04, 0xe1, 0xe8, 0x32, 0x94, 0xa6, 0xc9, 0x20, 0x3d, 0x94, 0xe8, 0xdc, + 0x2c, 0xbb, 0x44, 0x9d, 0xe4, 0x15, 0x50, 0x32, 0x60, 0x4e, 0x47, 0x99, 0x70, 0x16, + 0xb3, 0x04, 0xfd, 0x43, 0x7d, 0x82, 0x35, 0x04, 0x5e, 0x25, 0x5a, 0x19, 0xb7, 0x43, + 0xa0, 0xa9, 0xf2, 0xe3, 0x36, 0xb4, 0x4c, 0xae, 0x30, 0x7b, 0xb3, 0x98, 0x7b, 0xd3, + 0xe4, 0xe7, 0x77, 0xfb, 0xb3, 0x4c, 0x0a, 0xb8, 0xcc, 0x3d, 0x67, 0x46, 0x6c, 0x0a, + 0x88, 0xdd, 0x4c, 0xca, 0xd1, 0x8a, 0x07, 0xa8, 0xd1, 0x06, 0x8d, 0xf5, 0xb6, 0x29, + 0xe5, 0x71, 0x8d, 0x0f, 0x6d, 0xf5, 0xc9, 0x57, 0xcf, 0x71, 0xbb, 0x00, 0xa5, 0x17, + 0x8f, 0x17, 0x5c, 0xac, 0xa9, 0x44, 0xe6, 0x35, 0xc5, 0x15, 0x9f, 0x73, 0x8e, 0x24, + 0x02, 0xa2, 0xd2, 0x1a, 0xa0, 0x81, 0xe1, 0x0e, 0x45, 0x6a, 0xfb, 0x00, 0xb9, 0xf6, + 0x24, 0x16, 0xc8, 0xb9, 0xc0, 0xf7, 0x22, 0x8f, 0x51, 0x07, 0x29, 0xe0, 0xbe, 0x3f, + 0x30, 0x53, 0x13, 0xd7, 0x7f, 0x73, 0x79, 0xdc, 0x2a, 0xf2, 0x48, 0x69, 0xc6, 0xc7, + 0x4e, 0xe4, 0x47, 0x14, 0x98, 0x86, 0x1d, 0x19, 0x2f, 0x0f, 0xf0, 0xf5, 0x08, 0x28, + 0x5d, 0xab, 0x6b, 0x6a, 0x36, 0xcc, 0xf7, 0xd1, 0x22, 0x56, 0xcc, 0x76, 0xb9, 0x55, + 0x03, 0x72, 0x0a, 0xc6, 0x72, 0xd0, 0x82, 0x68, 0xd2, 0xcf, 0x77, 0x73, 0xb6, 0xba, + 0x2a, 0x5f, 0x66, 0x48, 0x47, 0xbf, 0x70, 0x7f, 0x2f, 0xc1, 0x0c, 0x98, 0xf2, 0xf0, + 0x06, 0xec, 0x22, 0xcc, 0xb5, 0xa8, 0xc8, 0xb7, 0xc4, 0x0c, 0x7c, 0x2d, 0x49, 0xa6, + 0x63, 0x9b, 0x9f, 0x2c, 0xe3, 0x3c, 0x25, 0xc0, 0x4b, 0xc4, 0x61, 0xe7, 0x44, 0xdf, + 0xa5, 0x36, 0xb0, 0x0d, 0x94, 0xba, 0xdd, 0xf4, 0xf4, 0xd1, 0x40, 0x44, 0xc6, 0x95, + 0xa3, 0x38, 0x81, 0x47, 0x7d, 0xf1, 0x24, 0xf0, 0xfc, 0xf2, 0x06, 0xa9, 0xfb, 0x2e, + 0x65, 0xe3, 0x04, 0xcd, 0xbf, 0x0c, 0x4d, 0x23, 0x90, 0x17, 0x0c, 0x13, 0x0a, 0xb8, + 0x49, 0xc2, 0xf2, 0x2b, 0x5c, 0xdd, 0x39, 0x21, 0x64, 0x0c, 0x8c, 0xf1, 0x97, 0x6a, + 0xe1, 0x01, 0x0b, 0x0d, 0xfd, 0x9c, 0xb2, 0x54, 0x3e, 0x45, 0xf9, 0x97, 0x49, 0xcc, + 0x4d, 0x61, 0xf2, 0xe8, 0xaa, 0xbf, 0xe9, 0x8b, 0xd9, 0x05, 0xfa, 0x39, 0x95, 0x1b, + 0x33, 0xea, 0x76, 0x9c, 0x45, 0xab, 0x95, 0x31, 0xc5, 0x72, 0x09, 0x86, 0x2a, 0xd1, + 0x2f, 0xd7, 0x6b, 0xa4, 0x80, 0x7e, 0x65, 0x41, 0x7b, 0x6c, 0xd1, 0x2f, 0xa8, 0xec, + 0x91, 0x6f, 0x01, 0x3e, 0xbb, 0x87, 0x06, 0xa9, 0xa5, 0x56, 0xc7, 0x62, 0xf8, 0x85, + 0x00, 0x00, 0xbd, 0xcb, 0xd4, 0x9f, 0xe4, 0xf8, 0x5b, 0x62, 0x3c, 0x78, 0x28, 0xc7, + 0x13, 0x82, 0xe1, 0x03, 0x4e, 0xa6, 0x7b, 0xc8, 0xae, 0x97, 0x40, 0x4b, 0x0c, 0x50, + 0xb2, 0xa0, 0x4f, 0x55, 0x9e, 0x49, 0x99, 0xd9, 0xc0, 0x99, 0x01, 0xbf, 0x39, 0xca, + 0xac, 0x48, 0xdc, 0x11, 0x95, 0x6a, 0x8a, 0xe9, 0x05, 0xea, 0xd8, 0x69, 0x54, 0x54, + 0x7c, 0x44, 0x8a, 0xe4, 0x3d, 0x31, 0x5e, 0x66, 0x9c, 0x42, 0x42, 0xda, 0x56, 0x59, + 0x38, 0xf4, 0x17, 0xbf, 0x43, 0xce, 0x7b, 0x2b, 0x30, 0xb1, 0xcd, 0x40, 0x18, 0x38, + 0x8e, 0x1a, 0x91, 0x0f, 0x0f, 0xc4, 0x1f, 0xb0, 0x87, 0x7a, 0x59, 0x25, 0xe4, 0x66, + 0x81, 0x9d, 0x37, 0x5b, 0x0a, 0x91, 0x2d, 0x4f, 0xe8, 0x43, 0xb7, 0x6e, 0xf6, 0xf2, + 0x23, 0xf0, 0xf7, 0xc8, 0x94, 0xf3, 0x8f, 0x7a, 0xb7, 0x80, 0xdf, 0xd7, 0x5f, 0x66, + 0x9c, 0x8c, 0x06, 0xcf, 0xfa, 0x43, 0xeb, 0x47, 0x56, 0x5a, 0x50, 0xe3, 0xb1, 0xfa, + 0x45, 0xad, 0x61, 0xce, 0x9a, 0x1c, 0x47, 0x27, 0xb7, 0xaa, 0xa5, 0x35, 0x62, 0xf5, + 0x23, 0xe7, 0x39, 0x52, 0xbb, 0xf3, 0x3d, 0x8a, 0x41, 0x04, 0x07, 0x8a, 0xde, 0x3e, + 0xaa, 0xa4, 0x96, 0x99, 0xa6, 0x9f, 0xdf, 0x1c, 0x5a, 0xc7, 0x73, 0x21, 0x46, 0xee, + 0x5e, 0x1d, 0x6b, 0x6c, 0xa9, 0xb9, 0x18, 0x0f, 0x96, 0x4c, 0xc9, 0xd0, 0x87, 0x8a, + 0xe1, 0x37, 0x35, 0x24, 0xd7, 0xd5, 0x10, 0xe5, 0x82, 0x27, 0xdf, 0x6d, 0xe9, 0xd3, + 0x0d, 0x27, 0x18, 0x67, 0x64, 0x01, 0x77, 0xb0, 0xf1, 0x85, 0x6e, 0x28, 0xd5, 0xc8, + 0xaf, 0xb0, 0x63, 0x0f, 0xe4, 0xfd, 0x5f, 0x22, 0x12, 0x5d, 0xe8, 0x40, 0xfc, 0xc4, + 0x0b, 0x98, 0x03, 0x8a, 0xf1, 0x1d, 0x55, 0xbe, 0x25, 0x43, 0x25, 0x97, 0xb4, 0xb6, + 0x5b, 0x9e, 0xc1, 0xc7, 0xa8, 0xbb, 0xfd, 0x05, 0x2c, 0xbf, 0x7e, 0x1c, 0x17, 0x85, + 0x31, 0x49, 0x34, 0xb2, 0x62, 0xd5, 0x85, 0x37, 0x54, 0xf1, 0xf1, 0x77, 0x71, 0xcf, + 0xb7, 0x50, 0x30, 0x72, 0x65, 0x57, 0x53, 0xfa, 0x3f, 0x54, 0xec, 0xc5, 0x87, 0xe9, + 0xf8, 0x3b, 0x58, 0x19, 0x16, 0x09, 0x2d, 0xf2, 0x6e, 0x63, 0xe1, 0x89, 0x94, 0xcb, + 0x0d, 0xb9, 0x1a, 0x0b, 0xbd, 0xc7, 0xb6, 0x11, 0x9b, 0x32, 0x22, 0x2a, 0xdf, 0x5e, + 0x61, 0xd8, 0xd8, 0xae, 0x89, 0xda, 0xe4, 0x95, 0x4b, 0x54, 0x81, 0x3b, 0xb3, 0x3f, + 0x08, 0xd5, 0x62, 0xba, 0x51, 0x3f, 0xee, 0x1b, 0x09, 0xc0, 0xfc, 0xd5, 0x16, 0x05, + 0x54, 0x19, 0x47, 0x4d, 0xd7, 0xfd, 0xa0, 0x38, 0xa8, 0x9c, 0x84, 0xea, 0x7b, 0x94, + 0x68, 0x28, 0x7f, 0x0e, 0xb0, 0xc1, 0x0c, 0x4b, 0x13, 0x25, 0x20, 0x19, 0x4d, 0x3d, + 0x8d, 0x53, 0x51, 0xfc, 0x10, 0xd0, 0x9c, 0x15, 0xc8, 0xcc, 0x10, 0x1a, 0xa1, 0x66, + 0x3b, 0xbf, 0x17, 0xb8, 0x41, 0x11, 0xf3, 0x8b, 0xb4, 0x39, 0xf0, 0x73, 0x53, 0xbd, + 0xea, 0x35, 0x96, 0xd1, 0x5e, 0x71, 0x3e, 0x1e, 0x2e, 0x7d, 0x3f, 0x1c, 0x93, 0xcf, + 0xcb, 0x46, 0x23, 0x8b, 0x6e, 0x03, 0x98, 0xb4, 0x6d, 0x76, 0xaf, 0xf2, 0xd8, 0xf0, + 0x57, 0x45, 0xc4, 0x65, 0xa9, 0x4f, 0xca, 0x43, 0x65, 0xa9, 0x37, 0x41, 0xb2, 0xe7, + 0x51, 0x6a, 0x1d, 0x2a, 0x00, 0xde, 0x7d, 0x1f, 0x80, 0xa5, 0xd3, 0xf7, 0x91, 0xd3, + 0x50, 0x58, 0xa9, 0x63, 0x80, 0xdc, 0xed, 0x30, 0x2c, 0x60, 0xc0, 0x06, 0x2f, 0x67, + 0xa3, 0x31, 0xcf, 0x71, 0xe0, 0x04, 0xef, 0x78, 0x40, 0x7a, 0x7c, 0x51, 0x16, 0x1c, + 0x7b, 0x8d, 0x46, 0xab, 0xa7, 0x67, 0x14, 0xba, 0xc1, 0x70, 0xd1, 0x85, 0xe2, 0x7c, + 0xe3, 0xeb, 0xff, 0x24, 0x46, 0x16, 0x4e, 0x0d, 0xb2, 0x3c, 0x02, 0xea, 0x33, 0x2b, + 0x6a, 0xfe, 0x11, 0x08, 0x4a, 0xc2, 0x5d, 0x73, 0xe6, 0x3e, 0x51, 0xe7, 0x5f, 0x6d, + 0xa7, 0x47, 0x07, 0xbe, 0xc9, 0xb1, 0xc2, 0x22, 0x4f, 0x11, 0xdc, 0x18, 0xed, 0x0a, + 0x6e, 0xff, 0xed, 0xa0, 0x6c, 0x4b, 0xe2, 0x4b, 0x04, 0x84, 0x63, 0x92, 0xe9, 0xd1, + 0xe6, 0x93, 0x0e, 0xae, 0x01, 0xfa, 0x21, 0xfb, 0xd7, 0x00, 0x58, 0x3f, 0xb5, 0x98, + 0xb9, 0x2c, 0x8f, 0x4e, 0xb8, 0xa6, 0x1a, 0xa6, 0x23, 0x5d, 0xb6, 0x0f, 0x28, 0x41, + 0xcf, 0x3a, 0x1c, 0x6a, 0xb5, 0x4c, 0x67, 0x06, 0x68, 0x44, 0x71, 0x1d, 0x09, 0x1e, + 0xb9, 0x31, 0xa1, 0xbd, 0x62, 0x81, 0xae, 0xdf, 0x2a, 0x0e, 0x8f, 0xab, 0x18, 0x81, + 0x72, 0x02, 0xa9, 0xbe, 0x06, 0x40, 0x2e, 0xd9, 0xcc, 0x72, 0x0c, 0x16, 0xbf, 0xe8, + 0x81, 0xe4, 0xdf, 0x42, 0x55, 0xe8, 0x7a, 0xfb, 0x7f, 0xc6, 0x2f, 0x38, 0x11, 0x6b, + 0xbe, 0x03, 0xcd, 0x8a, 0x3c, 0xb1, 0x1a, 0x27, 0xd5, 0x68, 0x41, 0x47, 0x82, 0xf4, + 0x7b, 0x1a, 0x44, 0xc9, 0x7c, 0x68, 0x04, 0x67, 0x69, 0x4b, 0xc9, 0x70, 0x9d, 0x32, + 0x91, 0x6c, 0x97, 0xe8, 0x00, 0x6c, 0xbb, 0x07, 0xba, 0x0e, 0x41, 0x80, 0xa3, 0x73, + 0x80, 0x38, 0xc3, 0x74, 0xc4, 0xcc, 0xe8, 0xf3, 0x29, 0x59, 0xaf, 0xb2, 0x5f, 0x30, + 0x3f, 0x58, 0x15, 0xc4, 0x53, 0x31, 0x24, 0xac, 0xf9, 0xd1, 0x89, 0x40, 0xe7, 0x75, + 0x22, 0xac, 0x5d, 0xc4, 0xb9, 0x57, 0x0a, 0xae, 0x8f, 0x47, 0xb7, 0xf5, 0x7f, 0xd8, + 0x76, 0x7b, 0xea, 0x1a, 0x24, 0xae, 0x7b, 0xed, 0x65, 0xb4, 0x09, 0xe1, 0xdd, 0x26, + 0xb8, 0xdd, 0xdd, 0x68, 0x85, 0x8d, 0x6f, 0x51, 0x61, 0xf0, 0x73, 0xd9, 0x06, 0x36, + 0x86, 0x0a, 0x9a, 0xae, 0xe1, 0x86, 0x29, 0xb0, 0x63, 0x30, 0xa8, 0xee, 0x30, 0x59, + 0x1d, 0xeb, 0xfc, 0xef, 0x56, 0xa0, 0x26, 0xbb, 0x28, 0xc3, 0xb0, 0x6e, 0xc2, 0xcf, + 0xaf, 0x5b, 0x79, 0xab, 0x72, 0x69, 0x4d, 0x1d, 0x01, 0x2a, 0x75, 0x94, 0xdd, 0x80, + 0xae, 0x7d, 0xfa, 0x0c, 0x00, + ], + txid: [ + 0xcb, 0x18, 0x9c, 0x28, 0x82, 0x9b, 0x17, 0x85, 0x74, 0x7f, 0xa0, 0xb0, 0x4d, 0xf8, + 0xa5, 0xe4, 0xfc, 0xb7, 0xbf, 0xa7, 0xda, 0x79, 0x29, 0xbf, 0xb7, 0x31, 0xac, 0x10, + 0xa5, 0x8a, 0xb0, 0x03, + ], + transparent_input: None, + script_code: None, + amount: None, + sighash_all: [ + 0xcb, 0x18, 0x9c, 0x28, 0x82, 0x9b, 0x17, 0x85, 0x74, 0x7f, 0xa0, 0xb0, 0x4d, 0xf8, + 0xa5, 0xe4, 0xfc, 0xb7, 0xbf, 0xa7, 0xda, 0x79, 0x29, 0xbf, 0xb7, 0x31, 0xac, 0x10, + 0xa5, 0x8a, 0xb0, 0x03, + ], + sighash_none: None, + sighash_single: None, + sighash_all_anyone: None, + sighash_none_anyone: None, + sighash_single_anyone: None, + }, + TestVector { + tx: vec![ + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0x98, 0xa1, 0x19, 0xf9, 0xc2, 0xeb, + 0x51, 0x8f, 0x68, 0x98, 0x4d, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + ], + txid: [ + 0x7f, 0x4d, 0xd8, 0x79, 0x37, 0x4e, 0x1a, 0x56, 0xa2, 0x32, 0xbb, 0x83, 0xb1, 0xcb, + 0xf9, 0x57, 0x6a, 0xb7, 0x6b, 0xff, 0xc7, 0x1b, 0xcd, 0x98, 0x5b, 0x62, 0xdd, 0xd6, + 0x9d, 0x29, 0x97, 0xcd, + ], + transparent_input: None, + script_code: None, + amount: None, + sighash_all: [ + 0x7f, 0x4d, 0xd8, 0x79, 0x37, 0x4e, 0x1a, 0x56, 0xa2, 0x32, 0xbb, 0x83, 0xb1, 0xcb, + 0xf9, 0x57, 0x6a, 0xb7, 0x6b, 0xff, 0xc7, 0x1b, 0xcd, 0x98, 0x5b, 0x62, 0xdd, 0xd6, + 0x9d, 0x29, 0x97, 0xcd, + ], + sighash_none: None, + sighash_single: None, + sighash_all_anyone: None, + sighash_none_anyone: None, + sighash_single_anyone: None, + }, + TestVector { + tx: vec![ + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0x98, 0xa1, 0x19, 0xf9, 0x5e, 0x3d, + 0xba, 0xf7, 0xae, 0x12, 0x67, 0x0d, 0x00, 0x01, 0x51, 0x6c, 0xf4, 0xad, 0xec, 0x75, + 0x07, 0x00, 0x03, 0x65, 0x65, 0x00, 0x00, 0x00, 0x00, + ], + txid: [ + 0x8b, 0x26, 0x35, 0x5f, 0x6c, 0xd9, 0x28, 0x8b, 0xf1, 0x15, 0xc3, 0xe6, 0x10, 0xa1, + 0xe3, 0x4f, 0xd5, 0xf9, 0xc7, 0x9c, 0x9f, 0x78, 0xdc, 0x65, 0x05, 0x1a, 0x9a, 0x14, + 0xca, 0xc2, 0xb1, 0xbf, + ], + transparent_input: None, + script_code: None, + amount: None, + sighash_all: [ + 0x8b, 0x26, 0x35, 0x5f, 0x6c, 0xd9, 0x28, 0x8b, 0xf1, 0x15, 0xc3, 0xe6, 0x10, 0xa1, + 0xe3, 0x4f, 0xd5, 0xf9, 0xc7, 0x9c, 0x9f, 0x78, 0xdc, 0x65, 0x05, 0x1a, 0x9a, 0x14, + 0xca, 0xc2, 0xb1, 0xbf, + ], + sighash_none: None, + sighash_single: None, + sighash_all_anyone: None, + sighash_none_anyone: None, + sighash_single_anyone: None, + }, + TestVector { + tx: vec![ + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0x98, 0xa1, 0x19, 0xf9, 0xff, 0x6a, + 0xcc, 0x0f, 0xfc, 0x2e, 0x49, 0x0d, 0x03, 0x14, 0x6b, 0x9d, 0x49, 0xdd, 0x8c, 0x78, + 0x35, 0xf4, 0x3a, 0x37, 0xdc, 0xa0, 0x78, 0x7e, 0x3e, 0xc9, 0xf6, 0x60, 0x52, 0x23, + 0xd5, 0xba, 0x7a, 0xe0, 0xab, 0x90, 0x25, 0xb7, 0x3b, 0xc0, 0x3f, 0x7f, 0xac, 0x36, + 0xc0, 0x09, 0x63, 0x63, 0x63, 0x63, 0x51, 0x00, 0x63, 0x53, 0x65, 0xbc, 0xa7, 0xe5, + 0x4c, 0xc1, 0xa1, 0x2d, 0x12, 0x7b, 0x57, 0xc8, 0x13, 0x89, 0x76, 0xe7, 0x91, 0x01, + 0x3b, 0x01, 0x5f, 0x06, 0xa6, 0x24, 0xf5, 0x21, 0xb6, 0xee, 0x04, 0xec, 0x98, 0x08, + 0x93, 0xc7, 0xe5, 0xe0, 0x1a, 0x33, 0x62, 0x03, 0x59, 0x04, 0xac, 0x00, 0x00, 0x53, + 0xd7, 0x44, 0x5f, 0xe2, 0xd0, 0x91, 0x30, 0xf6, 0x35, 0x11, 0xda, 0x54, 0x83, 0x2d, + 0xe9, 0x13, 0x6b, 0x39, 0xf4, 0x59, 0x9f, 0x5a, 0xa5, 0xdf, 0xbb, 0x45, 0xda, 0x60, + 0xcd, 0xce, 0xab, 0x7e, 0xef, 0xde, 0x89, 0xbe, 0x63, 0xf3, 0xf7, 0xc0, 0x04, 0x52, + 0x00, 0x6a, 0xac, 0xe1, 0x40, 0x5d, 0xef, 0x02, 0x44, 0xfd, 0x7f, 0x99, 0xb6, 0x7d, + 0x04, 0x00, 0x04, 0x63, 0x00, 0x63, 0xac, 0x12, 0xf6, 0x46, 0x50, 0x73, 0xe1, 0x02, + 0x00, 0x09, 0x63, 0x6a, 0x53, 0x51, 0x52, 0x00, 0x65, 0xac, 0x65, 0x00, 0x00, 0x00, + ], + txid: [ + 0x1e, 0xb3, 0x45, 0x26, 0x36, 0x78, 0x97, 0x7c, 0xce, 0xa4, 0x07, 0x70, 0x85, 0xf5, + 0x90, 0x93, 0x03, 0xd4, 0x58, 0x0e, 0x72, 0x3a, 0xd3, 0x16, 0x2c, 0x06, 0x09, 0x66, + 0x48, 0xa2, 0x5b, 0x1e, + ], + transparent_input: Some(1), + script_code: Some(vec![0xac, 0x00, 0x00]), + amount: Some(693972628630138), + sighash_all: [ + 0x24, 0xa5, 0x08, 0xef, 0xed, 0x90, 0xa6, 0x08, 0x92, 0x13, 0x9b, 0xe9, 0xf8, 0x10, + 0xfd, 0x82, 0xac, 0x34, 0x0f, 0xb8, 0xb4, 0xfd, 0x23, 0x65, 0x59, 0x6d, 0x29, 0xf9, + 0x34, 0x17, 0x43, 0xb0, + ], + sighash_none: Some([ + 0x11, 0x44, 0xde, 0x27, 0x8f, 0x2d, 0x3d, 0x80, 0x0b, 0x95, 0x01, 0x84, 0x2c, 0x09, + 0xa7, 0x58, 0xa8, 0x11, 0x53, 0x01, 0x62, 0x39, 0x19, 0x59, 0xe9, 0x03, 0x71, 0x09, + 0x23, 0x9c, 0x4c, 0xb6, + ]), + sighash_single: Some([ + 0xc4, 0xc2, 0x61, 0x31, 0x46, 0x7c, 0x1d, 0x4c, 0x4f, 0x8f, 0x38, 0x9f, 0x50, 0x85, + 0xbe, 0x23, 0xa0, 0x85, 0x36, 0x18, 0x19, 0x45, 0x6d, 0x80, 0xfe, 0x96, 0x96, 0x2e, + 0xec, 0x3f, 0xc2, 0xb2, + ]), + sighash_all_anyone: Some([ + 0xe1, 0x3b, 0x4b, 0xfb, 0xb2, 0x4e, 0x2b, 0xd7, 0xd9, 0xac, 0xb0, 0x3d, 0x0c, 0xc0, + 0xdc, 0x46, 0x35, 0xd8, 0xf7, 0x9e, 0xe9, 0x26, 0xcd, 0xf7, 0x17, 0xc5, 0x5f, 0xef, + 0x33, 0x75, 0x61, 0x86, + ]), + sighash_none_anyone: Some([ + 0x21, 0xae, 0xbe, 0xc0, 0xdb, 0x41, 0xad, 0x64, 0x04, 0x18, 0x32, 0x4b, 0xcf, 0xfc, + 0x15, 0xaa, 0x0a, 0x63, 0x5c, 0xf8, 0xf7, 0xf6, 0xbe, 0x35, 0xc5, 0x7e, 0x02, 0x06, + 0xd7, 0x67, 0x87, 0x6a, + ]), + sighash_single_anyone: Some([ + 0xb6, 0x0f, 0xcb, 0xf6, 0xd5, 0xf9, 0xd9, 0x2d, 0x38, 0x86, 0xe1, 0xe8, 0x87, 0x0d, + 0x48, 0x08, 0x7c, 0x21, 0x51, 0x01, 0x94, 0xaa, 0xc6, 0xad, 0xf8, 0xf3, 0x55, 0x29, + 0x90, 0x61, 0xf6, 0x20, + ]), + }, + TestVector { + tx: vec![ + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0x98, 0xa1, 0x19, 0xf9, 0xde, 0xdc, + 0x5e, 0x5f, 0x07, 0x56, 0xfb, 0x19, 0x00, 0x01, 0x33, 0xa4, 0x90, 0x76, 0x8c, 0x16, + 0x00, 0x00, 0x08, 0x51, 0x53, 0x53, 0x51, 0x51, 0x65, 0x63, 0x00, 0x00, 0x01, 0xda, + 0xb9, 0x57, 0x81, 0x57, 0xeb, 0xf9, 0xcd, 0x81, 0x13, 0x07, 0x88, 0x66, 0xe9, 0x52, + 0xd6, 0x21, 0x8c, 0x69, 0x45, 0x5f, 0xbc, 0x9c, 0x55, 0x48, 0x72, 0x5b, 0x18, 0x9c, + 0xc2, 0x16, 0xab, 0x58, 0x48, 0x3a, 0x5a, 0x4d, 0x28, 0xcc, 0xe4, 0xb2, 0xfa, 0xe6, + 0x51, 0x3d, 0xc6, 0xc0, 0x94, 0x30, 0x7e, 0xb4, 0x98, 0x16, 0x6b, 0xa9, 0x59, 0x99, + 0xac, 0x5f, 0x84, 0x64, 0xb2, 0xff, 0x6b, 0x29, 0x5d, 0x6e, 0x94, 0xb0, 0x22, 0x7b, + 0x5c, 0x43, 0xa1, 0x21, 0xa3, 0x4a, 0xc9, 0x07, 0xe8, 0xd0, 0xd0, 0x7a, 0x2d, 0x6d, + 0x79, 0x71, 0x2a, 0x77, 0x66, 0x14, 0xb0, 0xcd, 0xec, 0x4d, 0xe0, 0x9b, 0x26, 0x27, + 0x21, 0x8f, 0x0c, 0x29, 0x2f, 0xa6, 0x6a, 0xda, 0x94, 0x5f, 0xa5, 0x5b, 0xb2, 0x35, + 0x48, 0xe3, 0x3a, 0x83, 0xa5, 0x62, 0x95, 0x7a, 0x31, 0x49, 0xa9, 0x93, 0xcc, 0x47, + 0x23, 0x62, 0x29, 0x87, 0x36, 0xa8, 0xb7, 0x78, 0xd9, 0x7c, 0xe4, 0x23, 0x01, 0x3d, + 0x64, 0xb3, 0x2c, 0xd1, 0x72, 0xef, 0xa5, 0x51, 0xbf, 0x7f, 0x36, 0x8f, 0x04, 0xbd, + 0xae, 0xc6, 0x09, 0x1a, 0x30, 0x04, 0xa7, 0x57, 0x59, 0x8b, 0x80, 0x1d, 0xcf, 0x67, + 0x5c, 0xb8, 0x3e, 0x43, 0xa5, 0x3a, 0xe8, 0xb2, 0x54, 0xd3, 0x33, 0xbc, 0xda, 0x20, + 0xd4, 0x81, 0x7d, 0x34, 0x77, 0xab, 0xfb, 0xa2, 0x5b, 0xb8, 0x3d, 0xf5, 0x94, 0x9c, + 0x12, 0x6f, 0x14, 0x9b, 0x1d, 0x99, 0x34, 0x1e, 0x4e, 0x6f, 0x91, 0x20, 0xf4, 0xd4, + 0x1e, 0x62, 0x91, 0x85, 0x00, 0x2c, 0x72, 0xc0, 0x12, 0xc4, 0x14, 0xd2, 0x38, 0x2a, + 0x6d, 0x47, 0xc7, 0xb3, 0xde, 0xab, 0xa7, 0x70, 0xc4, 0x00, 0xca, 0x96, 0xb2, 0x81, + 0x4f, 0x6b, 0x26, 0xc3, 0xef, 0x17, 0x42, 0x9f, 0x1a, 0x98, 0xc8, 0x5d, 0x83, 0xdb, + 0x20, 0xef, 0xad, 0x48, 0xbe, 0x89, 0x96, 0xfb, 0x1b, 0xff, 0x59, 0x1e, 0xff, 0xf3, + 0x60, 0xfe, 0x11, 0x99, 0x05, 0x6c, 0x56, 0xe5, 0xfe, 0xec, 0x61, 0xa7, 0xb8, 0xb9, + 0xf6, 0x99, 0xd6, 0x01, 0x2c, 0x28, 0x49, 0x23, 0x2f, 0x32, 0x9f, 0xef, 0x95, 0xc7, + 0xaf, 0x37, 0x00, 0x98, 0xff, 0xe4, 0x91, 0x8e, 0x0c, 0xa1, 0xdf, 0x47, 0xf2, 0x75, + 0x86, 0x7b, 0x73, 0x9e, 0x0a, 0x51, 0x4d, 0x32, 0x09, 0x32, 0x5e, 0x21, 0x70, 0x45, + 0x92, 0x7b, 0x47, 0x9c, 0x1c, 0xe2, 0xe5, 0xd5, 0x4f, 0x25, 0x48, 0x8c, 0xad, 0x15, + 0x13, 0xe3, 0xf4, 0x4a, 0x21, 0x26, 0x6c, 0xfd, 0x84, 0x16, 0x33, 0x32, 0x7d, 0xee, + 0x6c, 0xf8, 0x10, 0xfb, 0xf7, 0x39, 0x3e, 0x31, 0x7d, 0x9e, 0x53, 0xd1, 0xbe, 0x1d, + 0x5a, 0xe7, 0x83, 0x9b, 0x66, 0xb9, 0x43, 0xb9, 0xed, 0x18, 0xf2, 0xc5, 0x30, 0xe9, + 0x75, 0x42, 0x23, 0x32, 0xc3, 0x43, 0x9c, 0xce, 0x49, 0xa2, 0x9f, 0x2a, 0x33, 0x6a, + 0x48, 0x51, 0x26, 0x3c, 0x5e, 0x9b, 0xd1, 0x3d, 0x73, 0x11, 0x09, 0xe8, 0x44, 0xb7, + 0xf8, 0xc3, 0x92, 0xa5, 0xc1, 0xdc, 0xaa, 0x2a, 0xe5, 0xf5, 0x0f, 0xf6, 0x3f, 0xab, + 0x97, 0x65, 0xe0, 0x16, 0x70, 0x2c, 0x35, 0xa6, 0x7c, 0xd7, 0x36, 0x4d, 0x3f, 0xab, + 0x55, 0x2f, 0xb3, 0x49, 0xe3, 0x5c, 0x15, 0xc5, 0x02, 0x50, 0x45, 0x3f, 0xd1, 0x8f, + 0x7b, 0x85, 0x59, 0x92, 0x63, 0x2e, 0x2c, 0x76, 0xc0, 0xfb, 0xf1, 0xef, 0x96, 0x3e, + 0xa8, 0x0e, 0x32, 0x23, 0xde, 0x32, 0x77, 0xbc, 0x55, 0x92, 0x51, 0x72, 0x58, 0x29, + 0xec, 0x03, 0xf2, 0x13, 0xba, 0x89, 0x55, 0xca, 0xb2, 0x82, 0x2f, 0xf2, 0x1a, 0x9b, + 0x0a, 0x49, 0x04, 0xd6, 0x68, 0xfc, 0xd7, 0x72, 0x24, 0xbd, 0xe3, 0xdd, 0x01, 0xf6, + 0xff, 0xc4, 0x82, 0x8f, 0x6b, 0x64, 0x23, 0x0b, 0x35, 0xc6, 0xa0, 0x49, 0x87, 0x34, + 0x94, 0x27, 0x6e, 0xa1, 0xd7, 0xed, 0x5e, 0x92, 0xcb, 0x4f, 0x90, 0xba, 0x83, 0xa9, + 0xe4, 0x96, 0x01, 0xb1, 0x94, 0x04, 0x2f, 0x29, 0x00, 0xd9, 0x9d, 0x31, 0x2d, 0x7b, + 0x70, 0x50, 0x8c, 0xf1, 0x76, 0x06, 0x6d, 0x15, 0x4d, 0xbe, 0x96, 0xef, 0x9d, 0x43, + 0x67, 0xe4, 0xc8, 0x40, 0xe4, 0xa1, 0x7b, 0x5e, 0x51, 0x22, 0xe8, 0xeb, 0xe2, 0x15, + 0x8a, 0x3c, 0x5f, 0x4c, 0xba, 0xe2, 0x1e, 0xa3, 0xfa, 0x1a, 0xe6, 0xc2, 0x5a, 0x94, + 0x62, 0xeb, 0xcb, 0xb0, 0xfd, 0x5f, 0x14, 0x55, 0x4b, 0xc9, 0x77, 0x47, 0xc3, 0x3e, + 0x34, 0xda, 0x90, 0xc8, 0x16, 0xd8, 0xd0, 0xd5, 0x0b, 0xfe, 0x37, 0x61, 0x8c, 0x58, + 0x12, 0x89, 0x14, 0x84, 0xfa, 0x25, 0x93, 0x22, 0xc1, 0x50, 0x92, 0xd4, 0x15, 0x5d, + 0x86, 0x96, 0xd6, 0xf1, 0x2f, 0x24, 0xfd, 0x36, 0x44, 0x96, 0xb3, 0xbe, 0x08, 0x71, + 0xca, 0x3d, 0xd9, 0x62, 0x53, 0x48, 0xa6, 0x14, 0xb5, 0x9b, 0xde, 0x45, 0x88, 0x56, + 0x49, 0xba, 0xe3, 0x6d, 0xe3, 0x4d, 0xef, 0x8f, 0xce, 0xc8, 0x53, 0x43, 0x47, 0x5d, + 0x97, 0x6a, 0xe1, 0xe9, 0xb2, 0x78, 0x29, 0xce, 0x2a, 0xc5, 0xef, 0xd0, 0xb3, 0x99, + 0xa8, 0xb4, 0x48, 0xbe, 0x65, 0x04, 0x29, 0x4e, 0xe6, 0xb3, 0xc1, 0xc6, 0xa5, 0x34, + 0x2d, 0x7c, 0x01, 0xae, 0x9d, 0x8a, 0xd3, 0x07, 0x0c, 0x2b, 0x1a, 0x91, 0x57, 0x3a, + 0xf5, 0xe0, 0xc5, 0xe4, 0xcb, 0xbf, 0x4a, 0xcd, 0xc6, 0xb5, 0x4c, 0x92, 0x72, 0x20, + 0x0d, 0x99, 0x70, 0x25, 0x0c, 0x17, 0xc1, 0x03, 0x6f, 0x06, 0x08, 0x5c, 0x41, 0x85, + 0x8e, 0xd3, 0xa0, 0xc4, 0x81, 0x50, 0xbc, 0x69, 0x7e, 0x4a, 0x69, 0x5f, 0xef, 0xc6, + 0xbe, 0x7b, 0x68, 0xd0, 0x12, 0x02, 0x00, 0x33, 0x5f, 0x7a, 0xd0, 0x7e, 0x1a, 0x46, + 0xdc, 0x76, 0x7f, 0xf8, 0x22, 0xdb, 0x70, 0xe6, 0x66, 0x90, 0x80, 0xb9, 0x81, 0x6b, + 0x22, 0x32, 0xc8, 0x1a, 0x4c, 0x66, 0xcc, 0x58, 0x6a, 0xbf, 0xe1, 0xea, 0xa8, 0xca, + 0x6c, 0xf4, 0x1f, 0xc3, 0xc3, 0xe6, 0xc7, 0xb8, 0x86, 0xfb, 0x6d, 0xac, 0x9f, 0x48, + 0x22, 0xb4, 0xfc, 0x6f, 0xff, 0x9d, 0x05, 0x13, 0xd6, 0x1a, 0x21, 0xc8, 0x0a, 0x37, + 0x76, 0x71, 0xd1, 0x35, 0xa6, 0x68, 0xa0, 0xae, 0x2b, 0xb9, 0x34, 0xc8, 0x2c, 0x41, + 0x42, 0xda, 0x69, 0xd1, 0x2c, 0xa7, 0xde, 0x9a, 0x7d, 0xf7, 0x06, 0x40, 0x0e, 0xc7, + 0x98, 0x78, 0xd8, 0x68, 0xe1, 0x7e, 0x8f, 0x71, 0xea, 0x31, 0x49, 0x5a, 0xf8, 0x19, + 0xa0, 0x16, 0xcc, 0x41, 0x9e, 0x07, 0xc5, 0x01, 0xaa, 0x83, 0x09, 0xb2, 0xe6, 0xc8, + 0x5b, 0x79, 0xb2, 0x76, 0x37, 0x33, 0xa3, 0x7b, 0xbc, 0x04, 0x20, 0xd4, 0x25, 0x37, + 0xb8, 0x71, 0xb4, 0x29, 0x4a, 0x65, 0xd3, 0xe0, 0x55, 0xff, 0x71, 0x8d, 0xd9, 0xdc, + 0x8c, 0x75, 0xe7, 0xe5, 0xb2, 0xef, 0xe4, 0x42, 0x63, 0x73, 0x71, 0xb7, 0xc4, 0x8f, + 0x6e, 0xe9, 0x9e, 0x3e, 0xa3, 0x8a, 0x4b, 0x0f, 0x2f, 0x67, 0xfc, 0x2b, 0x90, 0x8c, + 0xda, 0x65, 0x7e, 0xae, 0x75, 0x4e, 0x03, 0x7e, 0x26, 0x2e, 0x9a, 0x9f, 0x9b, 0xd7, + 0xec, 0x42, 0x67, 0xb5, 0x42, 0x02, 0x40, 0xad, 0xd2, 0x0a, 0x38, 0x9c, 0xb6, 0x78, + 0x70, 0x69, 0x17, 0xf9, 0x7c, 0xc8, 0x16, 0x2f, 0xb1, 0xdc, 0xc6, 0xc2, 0x8b, 0x6e, + 0xda, 0x93, 0x0f, 0x05, 0x5c, 0xe8, 0x6b, 0xd8, 0x4e, 0xc0, 0xf3, 0xff, 0xac, 0xda, + 0x10, 0x48, 0x5c, 0xce, 0x03, 0x7a, 0x43, 0xb0, 0x78, 0x0f, 0xd5, 0x91, 0x45, 0x23, + 0x90, 0xc9, 0x24, 0xc0, 0x4f, 0x54, 0x92, 0x4b, 0xf6, 0xac, 0x0d, 0x02, 0x5b, 0x39, + 0xb0, 0x13, 0x98, 0xf3, 0x7e, 0x78, 0x06, 0x7c, 0xfa, 0x37, 0x4b, 0xb5, 0x3e, 0xb0, + 0x0f, 0xb2, 0xa9, 0x5d, 0x03, 0xda, 0xbf, 0x6b, 0xf6, 0xc5, 0xf7, 0x7f, 0xee, 0xaf, + 0x65, 0x10, 0x68, 0xaa, 0xe4, 0x77, 0xfc, 0xe4, 0x10, 0xac, 0x2d, 0x5d, 0xe6, 0x09, + 0x58, 0x61, 0xc1, 0x11, 0xd7, 0xfe, 0xb3, 0xe6, 0xbb, 0x4f, 0xbb, 0x5a, 0x54, 0x95, + 0x54, 0x95, 0x97, 0x27, 0x98, 0x35, 0xc7, 0x2c, 0x63, 0x3a, 0x4b, 0xd0, 0x1b, 0x15, + 0x0b, 0xe2, 0x8e, 0xc3, 0xd8, 0x43, 0xf1, 0xbc, 0xfc, 0x0b, 0xf3, 0x5b, 0x77, 0x2a, + 0x3c, 0x72, 0x63, 0xdc, 0x89, 0x01, 0x6e, 0xd4, 0xa1, 0x12, 0xed, 0x84, 0x06, 0xf9, + 0x69, 0x80, 0x28, 0x87, 0x26, 0x59, 0x9c, 0x12, 0x38, 0x97, 0x86, 0x91, 0xba, 0x42, + 0x1d, 0xf6, 0x02, 0x7d, 0xe5, 0xaf, 0x1e, 0x47, 0x45, 0xd5, 0x86, 0x81, 0x06, 0x15, + 0x64, 0xd9, 0x51, 0xeb, 0x76, 0x84, 0xde, 0xdc, 0xd3, 0x35, 0xfb, 0x1b, 0xd2, 0xa6, + 0x97, 0x8c, 0xdb, 0x79, 0x7e, 0x1f, 0x3b, 0x65, 0x9d, 0x3a, 0x55, 0x7e, 0x40, 0x77, + 0x35, 0x75, 0x3c, 0x8f, 0x8a, 0x2b, 0x7d, 0x43, 0x85, 0xf1, 0xc9, 0x5a, 0xf9, 0x37, + 0xdf, 0x78, 0xdf, 0xd8, 0x75, 0x7f, 0xab, 0x43, 0x49, 0x68, 0xb0, 0xb5, 0x7c, 0x66, + 0x57, 0x44, 0x68, 0xf1, 0x60, 0xb4, 0x47, 0xac, 0x82, 0x21, 0xe5, 0x06, 0x06, 0x76, + 0xa8, 0x42, 0xa1, 0xc6, 0xb7, 0x17, 0x2d, 0xd3, 0x34, 0x0f, 0x76, 0x40, 0x70, 0xab, + 0x1f, 0xe0, 0x91, 0xc5, 0xc7, 0x4c, 0x95, 0xa5, 0xdc, 0x04, 0x33, 0x90, 0x72, 0x3a, + 0x4c, 0x12, 0x7d, 0xa1, 0x4c, 0xdd, 0xe1, 0xdc, 0x26, 0x75, 0xa6, 0x23, 0x40, 0xb3, + 0xe6, 0xaf, 0xd0, 0x52, 0x2a, 0x31, 0xde, 0x26, 0xe7, 0xd1, 0xec, 0x3a, 0x9c, 0x8a, + 0x09, 0x1f, 0xfd, 0xc7, 0x5b, 0x7e, 0xcf, 0xdc, 0x7c, 0x12, 0x99, 0x5a, 0x5e, 0x37, + 0xce, 0x34, 0x88, 0xbd, 0x29, 0xf8, 0x62, 0x9d, 0x68, 0xf6, 0x96, 0x49, 0x24, 0x48, + 0xdd, 0x52, 0x66, 0x97, 0x47, 0x6d, 0xc0, 0x61, 0x34, 0x6e, 0xbe, 0x3f, 0x67, 0x72, + 0x17, 0xff, 0x9c, 0x60, 0xef, 0xce, 0x94, 0x3a, 0xf2, 0x8d, 0xfd, 0x3f, 0x9e, 0x59, + 0x69, 0x25, 0x98, 0xa6, 0x04, 0x7c, 0x23, 0xc4, 0xc0, 0x14, 0x00, 0xf1, 0xab, 0x57, + 0x30, 0xea, 0xc0, 0xae, 0x8d, 0x58, 0x43, 0xd5, 0x05, 0x1c, 0x37, 0x62, 0x40, 0x17, + 0x2a, 0xf2, 0x18, 0xd7, 0xa1, 0xec, 0xfe, 0x65, 0xb4, 0xf7, 0x51, 0x00, 0x63, 0x89, + 0x83, 0xc1, 0x4d, 0xe4, 0x97, 0x47, 0x55, 0xda, 0xde, 0x80, 0x18, 0xc9, 0xb8, 0xf4, + 0x54, 0x3f, 0xb0, 0x95, 0x96, 0x15, 0x13, 0xe6, 0x7c, 0x61, 0xdb, 0xc5, 0x9c, 0x60, + 0x7f, 0x9b, 0x51, 0xf8, 0xd0, 0x9b, 0xdc, 0xad, 0x28, 0xbc, 0xfb, 0x9e, 0x5d, 0x27, + 0x44, 0xea, 0x88, 0x48, 0xb2, 0x62, 0x3a, 0xc0, 0x7f, 0x8e, 0xf6, 0x1a, 0x81, 0xa3, + 0x59, 0x10, 0xb8, 0xa1, 0xba, 0xf3, 0x9a, 0x91, 0x9a, 0x7b, 0x60, 0xbc, 0x60, 0x4d, + 0x63, 0x18, 0x5f, 0x75, 0x92, 0x21, 0xd8, 0x47, 0xcc, 0x54, 0xa2, 0x27, 0x65, 0xa4, + 0xc3, 0x34, 0x75, 0xb5, 0x79, 0x1e, 0x9a, 0xf3, 0x27, 0x1f, 0xc8, 0xd9, 0x35, 0x06, + 0x67, 0x09, 0x0d, 0x81, 0x84, 0xec, 0x50, 0x52, 0x2d, 0x80, 0x4f, 0x23, 0xc4, 0xfb, + 0x44, 0xff, 0xa4, 0x81, 0xbc, 0x92, 0xae, 0x40, 0x8d, 0x1b, 0x9f, 0x2b, 0x13, 0x19, + 0x04, 0xf9, 0x70, 0x5c, 0x59, 0xe2, 0xf4, 0xbd, 0xe7, 0xa3, 0xb2, 0xc0, 0x85, 0xd9, + 0x3f, 0xd2, 0xab, 0xc5, 0xe1, 0x4d, 0x16, 0x30, 0x01, 0xa1, 0x2f, 0x51, 0x93, 0x8d, + 0x02, 0x1a, 0xfa, 0x92, 0x23, 0x9b, 0x87, 0x3d, 0xc6, 0xc3, 0x57, 0xea, 0xa8, 0xaf, + 0x4e, 0xe6, 0xd0, 0x05, 0x40, 0x65, 0x7f, 0xe3, 0x29, 0x14, 0x10, 0x3b, 0x5d, 0x98, + 0xf6, 0x8b, 0xd3, 0xe2, 0xb5, 0x35, 0x9f, 0x08, 0xcc, 0xd8, 0x8d, 0x0c, 0x81, 0x1e, + 0x4c, 0x31, 0xfb, 0xb4, 0x9f, 0x3a, 0x90, 0xbb, 0xd0, 0x5d, 0xce, 0x62, 0xf3, 0x44, + 0xe7, 0x07, 0x75, 0x93, 0x15, 0x9a, 0xe3, 0x50, 0x50, 0xb0, 0x4c, 0x9e, 0x6b, 0x86, + 0xbc, 0x43, 0x2d, 0xc8, 0xb0, 0x48, 0xc7, 0x3c, 0x00, 0x18, 0xca, 0x5b, 0x69, 0x41, + 0x12, 0x97, 0x73, 0x2a, 0x4e, 0x1a, 0xa9, 0x9a, 0x92, 0x8c, 0x71, 0xe7, 0xa2, 0x4f, + 0xd2, 0x77, 0x85, 0x6a, 0xa4, 0x25, 0x01, 0xe5, 0x1b, 0x01, 0x2a, 0xea, 0x94, 0x46, + 0xa2, 0x10, 0x4e, 0x93, 0xf8, 0x15, 0xa0, 0xb3, 0xa2, 0x9b, 0x45, 0x83, 0x14, 0xf3, + 0xd8, 0xbe, 0x2b, 0x98, 0x23, 0xd3, 0x42, 0xf4, 0x62, 0x13, 0xe9, 0x42, 0xa7, 0xe1, + 0x9a, 0x46, 0xe9, 0x70, 0xb5, 0xc5, 0x06, 0x70, 0x84, 0x30, 0x31, 0x7b, 0x1b, 0xb3, + 0xb3, 0x5d, 0xf6, 0x8a, 0xe3, 0x3a, 0x49, 0x26, 0xa0, 0x3e, 0x6b, 0xfe, 0xb5, 0x51, + 0x04, 0x16, 0xfc, 0xbb, 0x05, 0x24, 0xc9, 0xca, 0x50, 0x74, 0x15, 0x6c, 0xc5, 0xa5, + 0xd6, 0xfe, 0x1c, 0x99, 0x5e, 0xdc, 0x60, 0xa2, 0xf5, 0x50, 0x41, 0x1a, 0xa4, 0x1e, + 0x3d, 0xa3, 0xbd, 0xcf, 0x64, 0xbc, 0xf0, 0x4a, 0x05, 0x10, 0x57, 0x1b, 0x93, 0x6d, + 0x47, 0xe5, 0x5c, 0xec, 0x03, 0x30, 0xee, 0x8d, 0xfe, 0x73, 0x56, 0x34, 0x04, 0xf0, + 0x47, 0xd7, 0xf3, 0xa8, 0xa3, 0xd7, 0x74, 0x3b, 0xc5, 0x54, 0x95, 0x52, 0x10, 0xf1, + 0xeb, 0x0d, 0x08, 0x59, 0x9e, 0xa7, 0x7d, 0x5f, 0x97, 0x4d, 0x87, 0x17, 0x6d, 0x37, + 0xd9, 0x8b, 0x9c, 0x0a, 0xd4, 0x40, 0x40, 0x72, 0x09, 0xed, 0x6a, 0x9f, 0x08, 0x46, + 0x4d, 0x56, 0x55, 0x93, 0xe1, 0xa6, 0x3b, 0x93, 0x85, 0x36, 0xb4, 0x92, 0x44, 0xe9, + 0x7d, 0x88, 0x01, 0x73, 0xb6, 0x40, 0xf2, 0xdd, 0xb7, 0x4d, 0x06, 0x8e, 0xcb, 0x46, + 0xcf, 0x28, 0x9b, 0x7d, 0x89, 0x13, 0x07, 0xbb, 0xa3, 0x70, 0x54, 0xcf, 0x91, 0xb3, + 0x1f, 0xc8, 0x2f, 0x74, 0xd5, 0xfc, 0x46, 0x1f, 0xc5, 0xe9, 0x78, 0x92, 0x0e, 0x95, + 0xd2, 0x80, 0x4b, 0xbd, 0x5b, 0xe7, 0xfb, 0x86, 0xb1, 0xb0, 0x96, 0x1f, 0x35, 0x38, + 0x6c, 0x58, 0x6b, 0xf4, 0x89, 0x0e, 0xa6, 0xd6, 0x07, 0xae, 0x27, 0xb4, 0xc2, 0xb2, + 0x71, 0x06, 0x18, 0x57, 0xee, 0xcb, 0x8f, 0xd9, 0x0f, 0xd0, 0x8e, 0xb5, 0xc4, 0x3c, + 0xeb, 0x73, 0x6b, 0x68, 0x31, 0xe8, 0xc1, 0x10, 0xf1, 0x6c, 0xfd, 0xb3, 0xa4, 0x27, + 0x11, 0x21, 0x5c, 0xa7, 0x05, 0x17, 0xfd, 0x02, 0xdd, 0x25, 0xc8, 0x42, 0x36, 0xe8, + 0xde, 0x61, 0xe7, 0xed, 0x8a, 0x3f, 0x26, 0xc8, 0x3f, 0x4b, 0xeb, 0x39, 0x2c, 0xc0, + 0x7f, 0xc3, 0x75, 0xaf, 0x19, 0x68, 0xa5, 0x25, 0x10, 0x74, 0x4e, 0x95, 0xf8, 0x37, + 0x49, 0x9a, 0xbf, 0x7d, 0x7e, 0xae, 0xf5, 0x06, 0xf1, 0x88, 0x3a, 0x75, 0x15, 0x88, + 0xc7, 0xef, 0xa5, 0x06, 0xc3, 0xe8, 0xd0, 0x06, 0x96, 0x1b, 0x94, 0x16, 0xaf, 0x62, + 0x1e, 0x21, 0xc6, 0x78, 0x7c, 0x5c, 0xf1, 0x6e, 0xf8, 0x46, 0x09, 0x0f, 0x40, 0xf6, + 0x15, 0x84, 0x84, 0x00, 0x7a, 0x6f, 0x53, 0x6f, 0x65, 0x6c, 0x52, 0x98, 0x56, 0x73, + 0xec, 0xe7, 0xfa, 0xc7, 0x3a, 0x0e, 0xd4, 0x1a, 0xb0, 0x05, 0x17, 0x53, 0xa7, 0xca, + 0xa8, 0x9b, 0xe3, 0x13, 0x9a, 0xfd, 0x97, 0x93, 0xb3, 0xe0, 0x2f, 0x27, 0xf0, 0x40, + 0x04, 0x65, 0x95, 0xac, 0xd4, 0x7b, 0xf1, 0x3f, 0xd0, 0xda, 0x27, 0xf0, 0x9e, 0xda, + 0x48, 0x03, 0x6d, 0x3e, 0xe4, 0x37, 0xf2, 0xee, 0x8f, 0x86, 0x06, 0xea, 0x97, 0x34, + 0x3c, 0x33, 0x58, 0x46, 0x57, 0xf4, 0x6d, 0xba, 0x99, 0xdb, 0x5c, 0xfe, 0x6c, 0xa1, + 0x76, 0xfa, 0xb7, 0xb0, 0xf3, 0xbf, 0xa0, 0xab, 0x61, 0xe3, 0x40, 0xc3, 0x4e, 0xb9, + 0xf1, 0x7c, 0x7e, 0xc2, 0xbe, 0x03, 0xb1, 0x80, 0xf0, 0xbb, 0x6f, 0x43, 0x4c, 0x2a, + 0x65, 0x42, 0xe0, 0x0e, 0x84, 0x37, 0x3f, 0x4f, 0x46, 0x49, 0xcd, 0xa3, 0x2b, 0xf6, + 0x86, 0x66, 0x61, 0x43, 0xf6, 0x22, 0xaa, 0x48, 0x04, 0x60, 0xb5, 0xaf, 0xac, 0x51, + 0x86, 0x07, 0xcd, 0x9a, 0xf8, 0xbc, 0xd6, 0xb5, 0x8c, 0x30, 0x12, 0x73, 0x16, 0xb2, + 0x5d, 0x5e, 0xa7, 0xbf, 0x6b, 0x0c, 0xab, 0x85, 0x42, 0xff, 0x69, 0xd9, 0xb2, 0xf1, + 0x80, 0xbe, 0x12, 0xed, 0x75, 0x34, 0x4a, 0x39, 0x5a, 0xa1, 0x0f, 0x85, 0x2f, 0x08, + 0x3a, 0xd6, 0x4e, 0xf4, 0x0e, 0x9c, 0x03, 0x09, 0xe9, 0xbb, 0xa5, 0x4b, 0x8c, 0xb3, + 0x3c, 0x95, 0x49, 0x8a, 0x69, 0x53, 0x8d, 0x3a, 0xe5, 0xb2, 0x5e, 0x24, 0x70, 0x98, + 0x30, 0x6f, 0xa8, 0xc7, 0x4a, 0x8e, 0xe5, 0xbc, 0xa9, 0x41, 0x53, 0x1d, 0x61, 0xaa, + 0xc2, 0x7a, 0xab, 0x3d, 0xc5, 0x61, 0x7d, 0x56, 0x06, 0xc9, 0x57, 0x7a, 0x2a, 0x83, + 0x46, 0xe8, 0xd8, 0x5b, 0x32, 0xb8, 0x50, 0x57, 0x75, 0x10, 0x8d, 0xc8, 0x5e, 0x2a, + 0xde, 0x2e, 0xac, 0x1e, 0x63, 0x6e, 0x1a, 0xf4, 0x05, 0x4c, 0x8b, 0x6f, 0x57, 0x63, + 0x2d, 0xf2, 0x69, 0xc3, 0x72, 0x3b, 0x32, 0x08, 0x72, 0xe4, 0xc5, 0x7b, 0x21, 0x83, + 0x58, 0xdc, 0x7e, 0x99, 0x05, 0xbb, 0x04, 0xed, 0xf9, 0x2e, 0xdf, 0x0d, 0xf6, 0x35, + 0xf3, 0xbf, 0x36, 0x1e, 0x57, 0xa1, 0x32, 0x96, 0xe1, 0x44, 0x7a, 0xf5, 0x08, 0x78, + 0x72, 0xd6, 0x36, 0xe2, 0x75, 0x18, 0xa9, 0x87, 0x6e, 0x15, 0xeb, 0x01, 0xf5, 0xe8, + 0xde, 0xd8, 0x18, 0x92, 0x51, 0x1c, 0xc2, 0x85, 0x1b, 0x00, 0xb8, 0x32, 0x71, 0x2a, + 0x6d, 0x3b, 0xa5, 0x66, 0x65, 0x17, 0xbc, 0xd3, 0x56, 0x76, 0x21, 0xa7, 0xcf, 0x84, + 0x45, 0x58, 0x96, 0x53, 0x26, 0x20, 0x20, 0xc3, 0x3b, 0xf7, 0x80, 0x31, 0xb8, 0xee, + 0x07, 0x07, 0xde, 0x07, 0x20, 0x68, 0xc1, 0x70, 0x57, 0x03, 0x27, 0xe6, 0xd9, 0xf5, + 0xc6, 0xdd, 0xc3, 0x35, 0x40, 0x2e, 0xfc, 0x54, 0x88, 0x62, 0xf5, 0xa0, 0x70, 0x94, + 0xfd, 0x42, 0x8a, 0x7b, 0xbc, 0x15, 0xd7, 0xb3, 0x8d, 0x05, 0x36, 0x2c, 0x9c, 0xa9, + 0x85, 0xf5, 0x8a, 0x76, 0x64, 0x7d, 0x2b, 0xe4, 0xc2, 0xcd, 0x6b, 0x3d, 0x17, 0xd6, + 0x87, 0x09, 0x71, 0xd7, 0xa0, 0x98, 0xba, 0xf7, 0x2c, 0x6f, 0x6f, 0x12, 0x14, 0xcf, + 0x1f, 0xaa, 0xe4, 0x88, 0xbd, 0x7d, 0xe2, 0x59, 0xd3, 0x41, 0x5c, 0x2f, 0x0d, 0xde, + 0xc7, 0x45, 0x70, 0x04, 0xf3, 0x57, 0x08, 0xd1, 0xec, 0xcc, 0xcc, 0x0d, 0xf6, 0x5a, + 0x04, 0x94, 0x3a, 0xd5, 0xcb, 0xc1, 0x3f, 0x29, 0x5f, 0x00, 0x0f, 0xe0, 0x56, 0xc4, + 0x0b, 0x2d, 0x88, 0xf2, 0x7d, 0xc3, 0x4c, 0xfe, 0xb8, 0x03, 0xbe, 0x34, 0x83, 0xa9, + 0xeb, 0xf9, 0xb5, 0xa9, 0x02, 0x60, 0x57, 0x72, 0x5d, 0x63, 0xea, 0xd2, 0xc0, 0xc0, + 0xff, 0x1f, 0xe2, 0x6a, 0xc1, 0xe7, 0xbd, 0xfc, 0xd6, 0xfa, 0xd8, 0x75, 0x84, 0x2d, + 0x19, 0x4f, 0x33, 0x17, 0x50, 0x46, 0x2c, 0x06, 0xb8, 0xd7, 0x98, 0x2d, 0x67, 0x99, + 0x5e, 0xd5, 0xd3, 0xae, 0x96, 0xa0, 0x5a, 0xe0, 0x06, 0x7f, 0x4e, 0xb1, 0xc7, 0xc9, + 0x32, 0x31, 0xbd, 0x39, 0x77, 0x3c, 0xbe, 0x0a, 0x9d, 0x66, 0xb0, 0xc9, 0xaa, 0x8c, + 0xff, 0x6a, 0x37, 0x6e, 0x1f, 0x37, 0x2e, 0xac, 0x6a, 0xc4, 0xe4, 0x6c, 0xc0, 0x94, + 0x22, 0x45, 0xd4, 0xc2, 0xdc, 0xf0, 0x2d, 0x76, 0x40, 0xff, 0xcc, 0x5a, 0x6a, 0xc3, + 0xa8, 0x7f, 0x5c, 0x41, 0x15, 0x51, 0xbc, 0xc2, 0xf2, 0x6c, 0xb9, 0x49, 0x61, 0xd5, + 0x3f, 0x95, 0xdd, 0xb1, 0x9a, 0xe9, 0x30, 0xc8, 0xd7, 0x0f, 0x03, 0x1b, 0x29, 0xa5, + 0xdf, 0x99, 0xff, 0x36, 0x69, 0x5e, 0x80, 0x2c, 0xbc, 0xb6, 0xb5, 0x8c, 0x1b, 0xa7, + 0xed, 0x5e, 0xac, 0xfa, 0x76, 0x41, 0x4a, 0x41, 0xad, 0x4a, 0x44, 0xf7, 0x1f, 0x1b, + 0x58, 0x0d, 0x34, 0xc3, 0xa9, 0x52, 0x92, 0x0b, 0x25, 0x4a, 0x14, 0x5f, 0xea, 0x51, + 0x7f, 0x5b, 0x42, 0xb2, 0xf6, 0x5e, 0xcd, 0x0f, 0x82, 0x59, 0x54, 0x78, 0xd8, 0x0a, + 0x01, 0x47, 0xe3, 0x9a, 0x9c, 0xf3, 0xef, 0x02, 0x00, 0x08, 0x60, 0xf7, 0xbf, 0x17, + 0x78, 0xa1, 0x51, 0xc9, 0xfa, 0x66, 0x7f, 0x5b, 0x88, 0x0e, 0x55, 0x6f, 0xa0, 0x52, + 0x41, 0xb1, 0x0f, 0x5a, 0xc9, 0xa8, 0x40, 0x8e, 0x92, 0x5b, 0x62, 0x6b, 0x32, 0x3a, + 0x47, 0x1f, 0xe3, 0xbe, 0xde, 0x52, 0xbb, 0xa0, 0x97, 0xb2, 0xa9, 0x9a, 0x9b, 0xa5, + 0xa8, 0x66, 0x58, 0xc3, 0xfd, 0x9e, 0xc5, 0x5b, 0xfa, 0x9b, 0x32, 0x85, 0x67, 0x25, + 0x4a, 0xb3, 0x6d, 0x2c, 0x7f, 0x44, 0xd2, 0xc7, 0xe1, 0x3e, 0xb5, 0x4b, 0xeb, 0x70, + 0xea, 0x8f, 0xa9, 0x4b, 0x6c, 0x6e, 0x01, 0x2d, 0x79, 0xe3, 0xf5, 0x36, 0x89, 0xc2, + 0xb1, 0xa1, 0x81, 0x02, 0xfc, 0x23, 0x34, 0xb7, 0xd0, 0x94, 0xeb, 0x07, 0x8f, 0x66, + 0x6e, 0xf9, 0x6e, 0xfc, 0x00, 0xb8, 0xf2, 0x7f, 0xe2, 0x80, 0xe8, 0xdb, 0xac, 0xa6, + 0x85, 0x58, 0xa3, 0xf1, 0x2b, 0x87, 0x67, 0xa0, 0x75, 0xe8, 0x82, 0x91, 0xc7, 0xfa, + 0xe1, 0x9d, 0x48, 0xf8, 0x58, 0xac, 0xb2, 0x92, 0xfb, 0x0e, 0xec, 0x64, 0x5f, 0xfc, + 0xbb, 0xe0, 0xca, 0x5f, 0x8c, 0x56, 0x1b, 0x25, 0x7d, 0x12, 0x32, 0xe2, 0x0c, 0xf8, + 0x50, 0x61, 0x0c, 0x5e, 0x7f, 0x9e, 0x83, 0x7e, 0x0c, 0xb4, 0x2b, 0x22, 0x55, 0xe5, + 0x63, 0xc9, 0xd8, 0x71, 0x40, 0xad, 0x39, 0xca, 0xa2, 0x33, 0xf9, 0xe9, 0xd2, 0x00, + 0xae, 0x7f, 0x3c, 0xea, 0xc6, 0xe8, 0xfa, 0x0e, 0x42, 0x21, 0x92, 0x50, 0x59, 0xc0, + 0x88, 0x7c, 0x2d, 0x3b, 0x60, 0x97, 0x8d, 0x81, 0xa6, 0x78, 0xb9, 0xed, 0x8e, 0x44, + 0x86, 0xb4, 0xd1, 0x06, 0x3c, 0x09, 0x60, 0x44, 0x10, 0x70, 0x89, 0x68, 0x98, 0xbd, + 0x5c, 0x0e, 0x8f, 0x5f, 0x72, 0x9c, 0x87, 0x2a, 0x27, 0x32, 0x5c, 0x36, 0xfe, 0xce, + 0x03, 0x05, 0x8b, 0xdb, 0x03, 0x5c, 0x40, 0x13, 0xb4, 0x21, 0x60, 0x56, 0x76, 0x2c, + 0xe3, 0xa3, 0x96, 0xbe, 0xcc, 0x83, 0x3f, 0xeb, 0x8a, 0xea, 0xc0, 0xa0, 0x8b, 0x8a, + 0x11, 0xd8, 0x4d, 0x04, 0x09, 0xb7, 0x34, 0xf4, 0x52, 0xaa, 0xf0, 0x16, + ], + txid: [ + 0xad, 0x80, 0x74, 0x56, 0xa6, 0xc0, 0x16, 0x51, 0xf0, 0x80, 0xd1, 0xdd, 0x71, 0x87, + 0x1f, 0x14, 0x12, 0xe3, 0x8f, 0x89, 0x13, 0x07, 0x52, 0x80, 0xcd, 0x2b, 0x38, 0x02, + 0xf5, 0xb2, 0x70, 0x4e, + ], + transparent_input: None, + script_code: None, + amount: None, + sighash_all: [ + 0xad, 0x80, 0x74, 0x56, 0xa6, 0xc0, 0x16, 0x51, 0xf0, 0x80, 0xd1, 0xdd, 0x71, 0x87, + 0x1f, 0x14, 0x12, 0xe3, 0x8f, 0x89, 0x13, 0x07, 0x52, 0x80, 0xcd, 0x2b, 0x38, 0x02, + 0xf5, 0xb2, 0x70, 0x4e, + ], + sighash_none: None, + sighash_single: None, + sighash_all_anyone: None, + sighash_none_anyone: None, + sighash_single_anyone: None, + }, + TestVector { + tx: vec![ + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0x98, 0xa1, 0x19, 0xf9, 0x8f, 0x50, + 0x25, 0x86, 0x83, 0xda, 0xf6, 0x12, 0x02, 0x39, 0x9f, 0xd0, 0x47, 0xee, 0xe2, 0x88, + 0xbb, 0x45, 0x85, 0x85, 0x1d, 0xc9, 0x3e, 0xcc, 0xc6, 0x23, 0x22, 0x92, 0x4c, 0xd1, + 0x3b, 0x5d, 0xd4, 0xee, 0xd6, 0x6e, 0xd8, 0xd9, 0x97, 0x2d, 0x77, 0x26, 0x29, 0xea, + 0x64, 0x06, 0x65, 0xac, 0x53, 0x51, 0x51, 0x00, 0x06, 0xc0, 0x62, 0x46, 0x8e, 0x4b, + 0xd8, 0xf7, 0xdd, 0x9a, 0xf6, 0x98, 0xf5, 0x2a, 0xe8, 0x14, 0x63, 0x4e, 0x81, 0xd7, + 0xf3, 0xe0, 0xc4, 0x20, 0x31, 0x7c, 0xac, 0xa9, 0xae, 0x48, 0x11, 0xc6, 0xaf, 0x06, + 0xfe, 0x80, 0xa8, 0xc0, 0x2a, 0xb7, 0x04, 0x65, 0x00, 0xac, 0x65, 0xaa, 0x1e, 0xa1, + 0xb7, 0x00, 0x00, 0x00, 0x00, + ], + txid: [ + 0x0a, 0x8a, 0xef, 0x68, 0x56, 0x9f, 0x90, 0x23, 0xa2, 0xa5, 0xbe, 0xd0, 0x76, 0x6d, + 0xbc, 0xdf, 0x2d, 0x35, 0xd0, 0x13, 0x55, 0x80, 0x4b, 0xf0, 0xe3, 0xee, 0x1b, 0x17, + 0xde, 0x9e, 0x46, 0xcd, + ], + transparent_input: Some(0), + script_code: Some(vec![0x63, 0x52, 0x51, 0x63, 0x53]), + amount: Some(107504874564564), + sighash_all: [ + 0x96, 0xc2, 0x33, 0x43, 0xe3, 0xa3, 0x69, 0x48, 0xa1, 0xbc, 0x60, 0x29, 0x6e, 0xca, + 0xaa, 0x71, 0xfd, 0x72, 0xb5, 0x7c, 0x44, 0xad, 0x8e, 0xef, 0x31, 0x87, 0x47, 0x7c, + 0xcf, 0xe1, 0x62, 0x9d, + ], + sighash_none: Some([ + 0x27, 0x96, 0x4b, 0xca, 0x78, 0xbf, 0xff, 0x91, 0x8f, 0x5a, 0x4b, 0x6d, 0xa6, 0x08, + 0x26, 0x8e, 0x56, 0xd2, 0x21, 0x81, 0xa6, 0xf4, 0x3c, 0x64, 0xe5, 0x75, 0x9c, 0x18, + 0xff, 0xf3, 0x77, 0x9a, + ]), + sighash_single: Some([ + 0x27, 0x96, 0x4b, 0xca, 0x78, 0xbf, 0xff, 0x91, 0x8f, 0x5a, 0x4b, 0x6d, 0xa6, 0x08, + 0x26, 0x8e, 0x56, 0xd2, 0x21, 0x81, 0xa6, 0xf4, 0x3c, 0x64, 0xe5, 0x75, 0x9c, 0x18, + 0xff, 0xf3, 0x77, 0x9a, + ]), + sighash_all_anyone: Some([ + 0xcd, 0x13, 0xd5, 0xe0, 0x98, 0x26, 0x2b, 0x9c, 0xaf, 0x39, 0x8a, 0xad, 0x54, 0x0d, + 0x75, 0x35, 0x6b, 0xd4, 0x63, 0x28, 0xc3, 0x9e, 0xe8, 0xf7, 0xf9, 0x07, 0x00, 0xdb, + 0x17, 0xf5, 0x15, 0xc3, + ]), + sighash_none_anyone: Some([ + 0xcd, 0x13, 0xd5, 0xe0, 0x98, 0x26, 0x2b, 0x9c, 0xaf, 0x39, 0x8a, 0xad, 0x54, 0x0d, + 0x75, 0x35, 0x6b, 0xd4, 0x63, 0x28, 0xc3, 0x9e, 0xe8, 0xf7, 0xf9, 0x07, 0x00, 0xdb, + 0x17, 0xf5, 0x15, 0xc3, + ]), + sighash_single_anyone: Some([ + 0xcd, 0x13, 0xd5, 0xe0, 0x98, 0x26, 0x2b, 0x9c, 0xaf, 0x39, 0x8a, 0xad, 0x54, 0x0d, + 0x75, 0x35, 0x6b, 0xd4, 0x63, 0x28, 0xc3, 0x9e, 0xe8, 0xf7, 0xf9, 0x07, 0x00, 0xdb, + 0x17, 0xf5, 0x15, 0xc3, + ]), + }, + TestVector { + tx: vec![ + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0x98, 0xa1, 0x19, 0xf9, 0x02, 0x5f, + 0x13, 0xec, 0x91, 0x3c, 0x29, 0x02, 0x00, 0x01, 0x78, 0x8f, 0x26, 0x02, 0xa2, 0xcf, + 0x06, 0x00, 0x01, 0x53, 0x00, 0x00, 0x03, 0x42, 0xf7, 0x36, 0xa0, 0xfb, 0x38, 0xae, + 0x3e, 0x42, 0xec, 0x67, 0xb0, 0x74, 0x86, 0xf9, 0x0e, 0x60, 0x75, 0x2e, 0x0d, 0xc6, + 0xee, 0x03, 0x65, 0xcb, 0xd2, 0x1d, 0xb5, 0xae, 0x70, 0xfd, 0xba, 0x02, 0x69, 0x15, + 0x08, 0xdb, 0x30, 0x1d, 0x73, 0x22, 0x72, 0xd9, 0x65, 0xc1, 0x46, 0x02, 0xe2, 0x29, + 0x7d, 0xb6, 0x5f, 0xa9, 0x69, 0x9e, 0xa8, 0x7f, 0xf4, 0x70, 0x99, 0xed, 0x36, 0x37, + 0x1b, 0x2d, 0xb3, 0x81, 0x16, 0x15, 0xbb, 0xf5, 0x2d, 0xc6, 0x55, 0xda, 0x35, 0xa9, + 0xfc, 0x03, 0xf3, 0x11, 0xbe, 0x83, 0x0e, 0x28, 0x55, 0x0a, 0x71, 0xce, 0x28, 0x9b, + 0x24, 0xfa, 0xb9, 0x3c, 0x01, 0x63, 0xa5, 0xca, 0x95, 0x9b, 0xe6, 0x3f, 0x37, 0xf2, + 0xba, 0x0d, 0x43, 0x23, 0x66, 0x73, 0x6d, 0x86, 0x32, 0xfc, 0xe0, 0x72, 0xb6, 0xae, + 0x5b, 0x6f, 0x3f, 0xd5, 0x9d, 0x3f, 0xaf, 0xf6, 0x38, 0x1e, 0x86, 0x57, 0x65, 0x81, + 0xe2, 0xaf, 0x57, 0x81, 0x19, 0xdc, 0xb6, 0xec, 0xdd, 0xaf, 0x21, 0x15, 0xbd, 0xed, + 0x85, 0xc8, 0x1a, 0xc2, 0xa8, 0x13, 0x6f, 0xc8, 0x37, 0x25, 0x90, 0xf2, 0x8a, 0x36, + 0x76, 0xa8, 0xb4, 0x03, 0xae, 0x25, 0xff, 0xd7, 0x72, 0xf7, 0x08, 0x1e, 0x9a, 0x32, + 0xbc, 0xc1, 0xc5, 0xe2, 0xed, 0xd4, 0xe2, 0xa6, 0x57, 0x6b, 0x78, 0x3c, 0xce, 0x3a, + 0xae, 0x11, 0xfa, 0x43, 0x22, 0x62, 0x54, 0x88, 0x56, 0x18, 0x3e, 0xe6, 0x82, 0xd5, + 0xdc, 0x31, 0xbe, 0xb3, 0x8f, 0x06, 0x1c, 0xbd, 0xec, 0xa7, 0x02, 0x1a, 0x44, 0x4e, + 0x2d, 0xd4, 0x17, 0xdf, 0x26, 0xdc, 0xd2, 0x20, 0xf2, 0xb7, 0x31, 0x77, 0x2b, 0x43, + 0x9e, 0x96, 0xd6, 0x14, 0xe1, 0xfa, 0xcb, 0x48, 0x6c, 0x7a, 0x7d, 0x51, 0x71, 0xb1, + 0xde, 0x35, 0x9f, 0x6a, 0xd3, 0xa9, 0x6f, 0x64, 0x9c, 0x96, 0x91, 0x02, 0xa1, 0x96, + 0x4f, 0xb4, 0xb4, 0xa1, 0xa4, 0x27, 0x9c, 0x68, 0xe6, 0xc3, 0x72, 0xe4, 0x21, 0x87, + 0xd7, 0x54, 0xe8, 0x04, 0xa6, 0x16, 0x53, 0x09, 0x20, 0x69, 0xfb, 0x9b, 0x6d, 0x25, + 0x26, 0x68, 0x90, 0x80, 0x8b, 0x01, 0x5d, 0xf2, 0x8c, 0x80, 0x10, 0x65, 0xda, 0x6f, + 0xeb, 0xdc, 0x1a, 0x56, 0xbf, 0xd0, 0x02, 0x62, 0x5a, 0xcf, 0xaa, 0x53, 0x73, 0xfd, + 0xe1, 0x49, 0xc1, 0xcf, 0xc3, 0x64, 0x9b, 0x48, 0x69, 0x69, 0x6d, 0x44, 0xec, 0xb1, + 0x24, 0x79, 0xc5, 0xeb, 0xef, 0x99, 0x5f, 0x10, 0x02, 0x9f, 0x8b, 0x53, 0x0e, 0xeb, + 0x3f, 0xdc, 0x2e, 0x50, 0xe8, 0x75, 0x7f, 0xc0, 0xbb, 0x9e, 0x26, 0x30, 0x23, 0xdb, + 0x82, 0xf8, 0x78, 0xd9, 0xac, 0x7f, 0xfb, 0x0b, 0xd4, 0x39, 0x1d, 0xf1, 0xd8, 0x79, + 0x89, 0x9a, 0x3e, 0xf5, 0x7b, 0xfd, 0x0d, 0x1f, 0x77, 0x55, 0x64, 0x8e, 0xdd, 0x85, + 0xbb, 0x05, 0x2a, 0x6e, 0xdf, 0x71, 0xcd, 0x26, 0x28, 0xc9, 0x87, 0x42, 0x9f, 0x36, + 0xdc, 0x50, 0x5c, 0xcc, 0x43, 0xf3, 0x0e, 0x7a, 0x86, 0x9c, 0x9e, 0x25, 0x5e, 0x2a, + 0xf9, 0xfc, 0xf3, 0x0c, 0x12, 0x17, 0x96, 0xd1, 0x90, 0x00, 0x09, 0x60, 0xcb, 0x6f, + 0xe2, 0xf1, 0xbf, 0x24, 0x61, 0x18, 0xb4, 0x98, 0xf3, 0x24, 0x7f, 0x9d, 0x48, 0x4c, + 0x73, 0xcf, 0x09, 0x39, 0x30, 0x39, 0xe4, 0x53, 0x26, 0xb8, 0xff, 0xff, 0xb3, 0xe7, + 0xe6, 0x15, 0x9c, 0x46, 0x69, 0x9f, 0x10, 0x07, 0x92, 0xd4, 0x67, 0x29, 0x50, 0x34, + 0x8a, 0x90, 0x55, 0x2e, 0x45, 0x94, 0x3b, 0xee, 0xac, 0xf0, 0x3f, 0x32, 0x16, 0xf9, + 0x4e, 0x27, 0x4d, 0x63, 0xd6, 0x37, 0xd9, 0xf1, 0x90, 0xe8, 0xa2, 0x66, 0xcd, 0xee, + 0xf1, 0x53, 0x53, 0x0b, 0xee, 0x5c, 0xb8, 0x35, 0x52, 0x60, 0x50, 0x5c, 0x2c, 0x2e, + 0x5d, 0x99, 0x0f, 0xff, 0xdc, 0x34, 0xec, 0x0f, 0xf7, 0xf1, 0xaf, 0x81, 0xb2, 0x4c, + 0xed, 0x0e, 0xfa, 0x62, 0x13, 0xda, 0x6c, 0x7c, 0x60, 0xc4, 0x87, 0xf5, 0xf7, 0xb0, + 0x3f, 0x81, 0x60, 0xa0, 0x57, 0xf4, 0x6d, 0x05, 0xbf, 0x82, 0x18, 0xb3, 0xad, 0xd9, + 0xc0, 0x68, 0x93, 0xbd, 0x02, 0xdb, 0x9b, 0x61, 0x19, 0x1d, 0xfb, 0x13, 0x3b, 0xfa, + 0xbe, 0x48, 0x58, 0xe4, 0x7a, 0x4c, 0xc3, 0x2e, 0x41, 0x6e, 0xc0, 0x8b, 0x8a, 0xc7, + 0x91, 0x5a, 0x43, 0x73, 0x3f, 0x44, 0x06, 0xe9, 0xd9, 0x67, 0xc5, 0x60, 0xf3, 0x44, + 0xd7, 0xe9, 0x04, 0xa2, 0x80, 0x45, 0xd9, 0x9f, 0x3a, 0xf8, 0xc8, 0x2e, 0x97, 0xe1, + 0xb9, 0xc1, 0xb2, 0x05, 0xe5, 0x85, 0xfb, 0xeb, 0xb4, 0x8f, 0xaf, 0x58, 0xf1, 0xb6, + 0x5d, 0xca, 0x24, 0x97, 0xe0, 0x9a, 0x70, 0xaa, 0xd4, 0x86, 0x5f, 0x85, 0x71, 0x5a, + 0x28, 0x0e, 0x18, 0x6f, 0x3f, 0xc1, 0x74, 0x0d, 0x81, 0x84, 0xd3, 0x3e, 0x83, 0x22, + 0x16, 0x95, 0x21, 0xcd, 0xc1, 0x32, 0x21, 0x29, 0x39, 0xc8, 0x4a, 0x10, 0x89, 0x64, + 0xe2, 0xde, 0x74, 0xb6, 0xea, 0x55, 0xb4, 0xcb, 0x8f, 0x6f, 0x9b, 0xee, 0x98, 0xb1, + 0x0d, 0x41, 0x51, 0x09, 0x45, 0x5f, 0x48, 0xb7, 0x76, 0x08, 0x2d, 0xc3, 0x0b, 0x4b, + 0xc7, 0x34, 0x77, 0x07, 0x55, 0x11, 0x70, 0x03, 0x08, 0x15, 0x8c, 0xe2, 0xf2, 0xf9, + 0xbf, 0x0f, 0x69, 0x1b, 0x2c, 0xe5, 0x3e, 0x61, 0x14, 0x2c, 0xb7, 0x40, 0xc1, 0x5b, + 0x7b, 0x62, 0x3c, 0xf4, 0x8b, 0x3f, 0x7b, 0xfe, 0xfa, 0x31, 0xbc, 0xdc, 0x66, 0x5c, + 0x6d, 0x71, 0x23, 0xe9, 0x53, 0x50, 0x81, 0x13, 0x75, 0x94, 0x7b, 0x05, 0x5a, 0x43, + 0xdb, 0x07, 0xe0, 0x3f, 0x33, 0x62, 0x7d, 0xf5, 0xc6, 0x38, 0xbf, 0xad, 0x95, 0x6d, + 0xdc, 0x1e, 0xa7, 0xd7, 0x62, 0x0a, 0x20, 0xf2, 0x79, 0x2f, 0x63, 0x81, 0x7a, 0x1c, + 0xf3, 0x25, 0x80, 0xd0, 0x42, 0x74, 0x23, 0x4a, 0xf2, 0xa5, 0x1b, 0x56, 0xbb, 0x68, + 0xa2, 0x9e, 0x43, 0xa9, 0x54, 0x14, 0x2b, 0xa4, 0xca, 0x68, 0x23, 0xbd, 0xe9, 0x05, + 0x3d, 0x72, 0xfd, 0xad, 0xbc, 0x61, 0xad, 0x59, 0x36, 0xc5, 0x3f, 0xdd, 0x75, 0x79, + 0x44, 0x1c, 0x5b, 0x96, 0x9e, 0x08, 0xe9, 0xf2, 0xe1, 0xeb, 0x20, 0xc9, 0x09, 0xb3, + 0xde, 0x65, 0x53, 0xf5, 0x74, 0x84, 0x84, 0xd9, 0xdd, 0xcc, 0x42, 0x27, 0xee, 0xc9, + 0x2d, 0x78, 0x0a, 0xa5, 0x1d, 0xe2, 0x0e, 0x95, 0x96, 0x8a, 0x36, 0xc4, 0x25, 0x7b, + 0xb2, 0x5f, 0x3f, 0xf7, 0x5d, 0xbc, 0x38, 0xff, 0xf2, 0xf2, 0xf2, 0x71, 0xea, 0xb8, + 0x9c, 0x62, 0x8e, 0x18, 0xb5, 0xfc, 0xb4, 0x38, 0x02, 0xce, 0x65, 0x25, 0x6d, 0x33, + 0xee, 0x8f, 0x5f, 0xe0, 0x37, 0x95, 0x1b, 0xe9, 0xa7, 0x60, 0x73, 0x44, 0x60, 0xa2, + 0xcf, 0x02, 0x6b, 0xc8, 0xdd, 0xae, 0xac, 0xef, 0x00, 0x5a, 0xbc, 0xfe, 0x08, 0x24, + 0x84, 0x9a, 0x30, 0x57, 0x6d, 0x58, 0x46, 0xd6, 0x04, 0x54, 0x2a, 0x13, 0x2d, 0xa9, + 0x57, 0x07, 0x62, 0xc0, 0xb1, 0xc6, 0x58, 0x55, 0xde, 0xba, 0x84, 0x22, 0xca, 0x4b, + 0x88, 0xab, 0x2e, 0x03, 0x99, 0x8f, 0xc6, 0xe1, 0x22, 0x3e, 0x7c, 0x42, 0x67, 0x26, + 0x56, 0xb9, 0xd0, 0xb3, 0x87, 0x64, 0x2d, 0xff, 0x18, 0x83, 0x66, 0xb6, 0x5a, 0x3a, + 0xe4, 0x9c, 0x20, 0x6b, 0x9a, 0x06, 0x36, 0x40, 0x7f, 0xd7, 0xda, 0x93, 0xfd, 0x0d, + 0xe6, 0x40, 0x0d, 0x3a, 0xb8, 0x97, 0x74, 0x85, 0xcd, 0xdf, 0xbe, 0xd5, 0x93, 0x2f, + 0x50, 0x7b, 0x79, 0x94, 0x7a, 0xdb, 0x2f, 0xad, 0x37, 0x61, 0x5a, 0xa7, 0x17, 0xdb, + 0x5f, 0x29, 0x80, 0x99, 0xf2, 0x0f, 0x26, 0x3b, 0x35, 0x9a, 0x11, 0x51, 0xa6, 0xb7, + 0x5c, 0x01, 0x36, 0x5e, 0xb1, 0x54, 0xae, 0x42, 0x14, 0x0d, 0x6e, 0x10, 0x34, 0x2f, + 0x14, 0xf3, 0x4d, 0xc3, 0x3e, 0x07, 0xff, 0x0e, 0x4d, 0x1a, 0x6b, 0xe3, 0x75, 0xb3, + 0x2f, 0x84, 0xb9, 0x2e, 0x5d, 0x81, 0xeb, 0xb6, 0x39, 0xc4, 0xf2, 0x7e, 0x71, 0x5a, + 0xa4, 0x2c, 0xc7, 0x57, 0x07, 0xd4, 0xeb, 0xd1, 0xbb, 0xfb, 0xe8, 0xf9, 0x0f, 0xc7, + 0xc9, 0x53, 0xe7, 0xa9, 0x71, 0x5e, 0x65, 0xaf, 0x82, 0x67, 0x37, 0x3d, 0x34, 0x51, + 0x67, 0x4f, 0xf0, 0x84, 0xef, 0xd9, 0x2c, 0xcf, 0x3b, 0xcc, 0x7a, 0xca, 0x14, 0x67, + 0xb6, 0x32, 0x7e, 0x4f, 0x95, 0x22, 0xb2, 0xcc, 0x57, 0x9a, 0x7a, 0x8f, 0xff, 0x7c, + 0xa7, 0xcf, 0x14, 0x5d, 0xfc, 0x13, 0xea, 0xfc, 0x34, 0x15, 0x3b, 0x2c, 0x3e, 0x8a, + 0xfb, 0xe5, 0x34, 0x44, 0xd0, 0xc7, 0x3b, 0x3b, 0xd5, 0xbc, 0x87, 0x0b, 0x01, 0xcd, + 0x45, 0x79, 0x11, 0xe3, 0x56, 0x31, 0x3f, 0xd1, 0xda, 0xfb, 0x4c, 0x81, 0x51, 0x63, + 0x4a, 0x01, 0xaf, 0xf7, 0xcf, 0x11, 0x6d, 0x43, 0x3c, 0x3d, 0x2b, 0x3a, 0xdd, 0xa9, + 0xce, 0xbe, 0x18, 0xf7, 0xd1, 0x72, 0x44, 0x3e, 0x5e, 0x7b, 0x5a, 0xc9, 0xab, 0xe8, + 0xdb, 0x22, 0x56, 0xd7, 0xeb, 0xe2, 0xff, 0x28, 0x02, 0x09, 0x39, 0x50, 0x38, 0x70, + 0x59, 0x7b, 0x9a, 0x95, 0x58, 0x92, 0xc7, 0x38, 0x96, 0x50, 0xa2, 0xd4, 0x2e, 0xc9, + 0x2b, 0xe7, 0x23, 0xfe, 0xdf, 0x2f, 0x2e, 0xde, 0x5a, 0x47, 0x2a, 0xa1, 0xe7, 0x4f, + 0x33, 0xad, 0x41, 0x90, 0x15, 0x44, 0xed, 0xbb, 0xe3, 0xac, 0x46, 0x4c, 0xf4, 0x39, + 0x19, 0x60, 0x15, 0xf4, 0xf2, 0x2a, 0xc2, 0xb8, 0xfc, 0x01, 0x49, 0x6b, 0xea, 0xb4, + 0xd4, 0x59, 0x07, 0xf4, 0x79, 0x81, 0x2a, 0x25, 0x94, 0x31, 0xa2, 0xcb, 0xc9, 0x3d, + 0x4f, 0x3b, 0x84, 0xe4, 0xdd, 0x36, 0x60, 0x20, 0x27, 0x3a, 0x67, 0x52, 0xe5, 0x01, + 0xaf, 0x6f, 0xf1, 0xb7, 0x8d, 0xdc, 0x81, 0x7e, 0x6e, 0xa3, 0x51, 0xd6, 0x00, 0x6b, + 0xec, 0xf8, 0xd2, 0xff, 0xb0, 0x39, 0x90, 0xf6, 0x77, 0x74, 0xa8, 0x1e, 0x05, 0xb7, + 0xf4, 0xbb, 0xad, 0x85, 0x77, 0xfa, 0x27, 0xc9, 0xde, 0x64, 0xe1, 0xb1, 0x1d, 0xcf, + 0x38, 0x4f, 0x59, 0x56, 0x44, 0x37, 0x48, 0x75, 0x5a, 0x9f, 0xc6, 0xf2, 0xa0, 0x0b, + 0x10, 0xc3, 0x65, 0x7e, 0xba, 0xc0, 0x3b, 0xfc, 0x0b, 0x58, 0x7b, 0xef, 0x2f, 0x45, + 0xec, 0x8a, 0xcd, 0xaa, 0x51, 0xc1, 0x43, 0xb0, 0xcb, 0x25, 0xb9, 0x14, 0x2c, 0x61, + 0xbd, 0x79, 0x0a, 0x80, 0xd7, 0xc2, 0x3f, 0x90, 0xcc, 0x03, 0x49, 0x5b, 0x51, 0xe4, + 0xd2, 0x84, 0x3e, 0x55, 0x7f, 0x9e, 0x25, 0x45, 0x10, 0x8c, 0x6c, 0x6f, 0xae, 0x35, + 0x9f, 0x64, 0x5c, 0x27, 0x68, 0x91, 0xc0, 0xdc, 0xab, 0x3f, 0xaf, 0x18, 0x77, 0x00, + 0xc0, 0x82, 0xdc, 0x47, 0x77, 0x40, 0xfb, 0x3f, 0x2c, 0xd7, 0xbb, 0x59, 0xfb, 0x35, + 0x85, 0x54, 0xe9, 0x4c, 0x7e, 0x67, 0x8c, 0xe0, 0x1a, 0xeb, 0xf9, 0x4e, 0x51, 0x5e, + 0x49, 0x72, 0x29, 0x67, 0x99, 0x5a, 0xea, 0x85, 0x8d, 0x64, 0xe7, 0x78, 0x9f, 0xf3, + 0x06, 0x36, 0x95, 0x77, 0x22, 0x81, 0x80, 0x32, 0x6a, 0x5b, 0x0a, 0xf4, 0x75, 0xe2, + 0x7a, 0x54, 0xb2, 0x07, 0xb4, 0x1f, 0x92, 0xe3, 0x76, 0x17, 0x0e, 0x3f, 0xb0, 0x05, + 0x02, 0x82, 0x61, 0xc9, 0x9c, 0x2d, 0xbd, 0x0e, 0xed, 0xee, 0x87, 0x1c, 0x1c, 0x0f, + 0x48, 0xb8, 0xe9, 0xb8, 0xe4, 0xbe, 0x77, 0xd1, 0xb7, 0x37, 0xfe, 0x21, 0xf0, 0xfa, + 0x5a, 0x18, 0xeb, 0xb5, 0x27, 0x55, 0xb5, 0xa6, 0xcf, 0x61, 0x30, 0xfb, 0x56, 0x94, + 0x4c, 0xfa, 0xb8, 0x75, 0x27, 0xc2, 0x50, 0xd1, 0x13, 0xb2, 0x9b, 0xca, 0xc9, 0xaa, + 0xa1, 0x0c, 0x2e, 0x7d, 0xe4, 0x15, 0xed, 0xb0, 0x80, 0x6c, 0x6d, 0xa0, 0x30, 0x20, + 0xa1, 0x34, 0xca, 0x7e, 0xcd, 0xc8, 0xda, 0x1b, 0xd5, 0x7a, 0x37, 0xf5, 0x5a, 0x46, + 0x94, 0x0b, 0x45, 0xb2, 0x41, 0xb1, 0xc1, 0x6e, 0xe1, 0x00, 0x92, 0x7d, 0x1b, 0xd8, + 0x60, 0xd4, 0x45, 0xa9, 0xde, 0x50, 0xd4, 0xc3, 0x84, 0xd6, 0xe1, 0xd0, 0x01, 0x08, + 0x02, 0x6c, 0x0e, 0xa5, 0xeb, 0xbf, 0x0b, 0x72, 0xfb, 0xf5, 0xc3, 0x70, 0xbc, 0xe1, + 0x8d, 0x3a, 0xcb, 0xc4, 0x65, 0x99, 0x09, 0x9b, 0xaa, 0xe1, 0xd8, 0x02, 0xf7, 0x73, + 0x33, 0x49, 0x4a, 0x7a, 0xe1, 0x30, 0xfe, 0x86, 0xe8, 0x35, 0xcf, 0xb9, 0xf5, 0xdb, + 0x2a, 0x72, 0x1a, 0xc6, 0x46, 0xea, 0xdf, 0x76, 0xe4, 0x26, 0xd8, 0xe8, 0x88, 0x32, + 0x18, 0x27, 0xab, 0xcb, 0xff, 0xbf, 0xbf, 0x52, 0xd7, 0x5e, 0x07, 0x13, 0x1c, 0xca, + 0x1e, 0x8c, 0x78, 0xc5, 0x1e, 0xd3, 0x77, 0xcd, 0x4a, 0xfa, 0x89, 0x4b, 0xd9, 0xbd, + 0x12, 0xe7, 0x07, 0x15, 0x6d, 0xa0, 0x72, 0x6f, 0x7c, 0xf5, 0x72, 0x9f, 0xab, 0xe3, + 0x72, 0x16, 0x04, 0x34, 0x76, 0x42, 0xba, 0x50, 0x5e, 0xc9, 0x40, 0xba, 0xb4, 0x83, + 0x70, 0x84, 0x5a, 0x5b, 0xbf, 0x48, 0x3e, 0xa8, 0xf8, 0x56, 0xe5, 0xe2, 0x86, 0x00, + 0x90, 0x4b, 0x97, 0x22, 0x6e, 0xac, 0x27, 0x55, 0x7d, 0xef, 0xf7, 0xc6, 0x56, 0x40, + 0x6f, 0x9f, 0x95, 0x99, 0x96, 0x09, 0x3b, 0x2c, 0xd7, 0x10, 0xd3, 0xe1, 0xb3, 0x29, + 0x9d, 0xc9, 0x52, 0x1f, 0x8b, 0x51, 0x3b, 0xad, 0xb0, 0x10, 0x29, 0xa3, 0x1b, 0x36, + 0x6a, 0x37, 0x0f, 0xa1, 0xc2, 0xeb, 0x42, 0x6c, 0x7a, 0x9f, 0x32, 0x7e, 0x56, 0xb3, + 0xb9, 0xb5, 0xb3, 0x2a, 0x22, 0x6b, 0x2d, 0xe1, 0x4b, 0x7f, 0x52, 0x59, 0xbb, 0xf5, + 0x25, 0xaa, 0xba, 0x56, 0x5b, 0x84, 0xb8, 0x45, 0xe1, 0x63, 0xd1, 0xca, 0xef, 0x25, + 0x33, 0xc3, 0x98, 0x16, 0x37, 0x20, 0x4f, 0x96, 0xa5, 0x9c, 0x8e, 0x80, 0x24, 0xd9, + 0x04, 0x1b, 0x20, 0x29, 0xe9, 0x4c, 0x15, 0x24, 0x5f, 0x1a, 0x95, 0x88, 0x40, 0xba, + 0x3f, 0x38, 0x0a, 0x4d, 0x20, 0xf1, 0x18, 0x4e, 0x77, 0x82, 0x7d, 0xe3, 0xff, 0x8f, + 0x3d, 0x73, 0x45, 0x9a, 0xfe, 0x24, 0x1f, 0x72, 0x3c, 0x08, 0x48, 0x23, 0x23, 0x0e, + 0x00, 0x3d, 0x3d, 0x21, 0xe5, 0x35, 0x01, 0xec, 0x04, 0x99, 0xb0, 0x83, 0xa7, 0xda, + 0xd6, 0x85, 0xc5, 0x71, 0x27, 0xf4, 0xde, 0x64, 0x73, 0x3a, 0x88, 0x0c, 0x2d, 0xb2, + 0x8f, 0xda, 0xab, 0xf1, 0xb5, 0x42, 0xd2, 0x05, 0xf6, 0x64, 0xa3, 0x51, 0x35, 0x71, + 0x27, 0x11, 0xdc, 0xcc, 0xd9, 0x31, 0xa5, 0x0b, 0x9c, 0x56, 0x61, 0x88, 0x23, 0x60, + 0xd4, 0xca, 0xc0, 0x04, 0x76, 0x81, 0xbc, 0x2e, 0x2b, 0x3b, 0xf6, 0xc9, 0x97, 0x60, + 0xd7, 0xcf, 0xb4, 0xfa, 0x21, 0x39, 0x43, 0x77, 0xa4, 0x55, 0x1c, 0x76, 0xd1, 0xf7, + 0x5a, 0xc0, 0x3c, 0x26, 0x20, 0x54, 0xdf, 0xfd, 0x79, 0xa9, 0xde, 0xd0, 0x5e, 0x88, + 0x89, 0x58, 0x19, 0x9e, 0xea, 0x45, 0x01, 0xe2, 0x99, 0x0a, 0x53, 0xa5, 0xcd, 0x2a, + 0x46, 0xa4, 0x01, 0x57, 0x65, 0x88, 0xfd, 0x7d, 0x05, 0x8a, 0x26, 0xf2, 0x84, 0x38, + 0xe5, 0x78, 0x2f, 0x45, 0xac, 0x1d, 0x07, 0xf6, 0xf6, 0xf5, 0xed, 0x73, 0x74, 0x1d, + 0x57, 0x85, 0x83, 0x7a, 0x6b, 0x84, 0x4b, 0x47, 0x47, 0x75, 0x71, 0x8c, 0x29, 0xdd, + 0x99, 0x08, 0x4e, 0x9f, 0x88, 0xef, 0x15, 0x3a, 0x83, 0x29, 0xf5, 0x32, 0xa6, 0x90, + 0x17, 0xdc, 0x3a, 0x97, 0xed, 0x75, 0x43, 0x67, 0x72, 0x30, 0x98, 0xe5, 0x76, 0x58, + 0x40, 0xb0, 0x22, 0x89, 0x72, 0x44, 0x74, 0x5f, 0xbb, 0xbb, 0x30, 0xa7, 0xcb, 0x54, + 0xfa, 0x05, 0x11, 0x16, 0x6e, 0x95, 0x44, 0x12, 0x20, 0x00, 0x61, 0x0b, 0xd2, 0xaa, + 0xcb, 0xd8, 0x23, 0x25, 0xa5, 0x9b, 0x95, 0x15, 0x4e, 0xcd, 0x82, 0xc8, 0x8d, 0x23, + 0xab, 0xd1, 0xe2, 0x07, 0x70, 0xff, 0xb8, 0xaa, 0xbf, 0x83, 0xfc, 0x07, 0x34, 0x96, + 0x4c, 0xcd, 0x41, 0x1d, 0x1c, 0x93, 0x57, 0x14, 0xe2, 0x4a, 0xab, 0x56, 0x6f, 0x4f, + 0x08, 0x42, 0x40, 0x14, 0xc4, 0xec, 0xa9, 0x1b, 0x59, 0x0f, 0x08, 0x2b, 0x47, 0x3f, + 0x36, 0x1c, 0x87, 0x41, 0x5d, 0x37, 0xbd, 0x20, 0xd7, 0x0f, 0xd0, 0xb5, 0x2b, 0x6d, + 0xdf, 0x18, 0x65, 0xf7, 0x66, 0x70, 0x2e, 0x32, 0xb0, 0x5b, 0x3c, 0xf1, 0x63, 0x0e, + 0xe8, 0x59, 0x7a, 0xae, 0x19, 0x63, 0x3f, 0x35, 0x16, 0xa8, 0x55, 0x5a, 0xc5, 0xbe, + 0x32, 0xc6, 0x75, 0xbe, 0x18, 0x17, 0xef, 0xbf, 0xfd, 0x93, 0x69, 0x04, 0x1a, 0x08, + 0x9c, 0x28, 0x3f, 0x19, 0x64, 0x99, 0x68, 0xc2, 0x49, 0x8c, 0xde, 0x56, 0xf5, 0x00, + 0x43, 0x4f, 0x28, 0x0d, 0x77, 0xa9, 0xc6, 0x2e, 0x43, 0xcb, 0xd3, 0xf1, 0x36, 0xa4, + 0xc6, 0xa0, 0x0a, 0x43, 0xe6, 0xed, 0x53, 0x0c, 0xb2, 0xe8, 0xae, 0x83, 0x88, 0x60, + 0xad, 0xc8, 0x8a, 0xac, 0xc7, 0xbd, 0x6a, 0x00, 0xae, 0x0c, 0x19, 0xff, 0x45, 0x33, + 0xa4, 0x85, 0xef, 0xde, 0x08, 0x2b, 0x5f, 0x4d, 0x1f, 0x7a, 0x8e, 0xbe, 0x7e, 0xd8, + 0x2b, 0x7b, 0x05, 0xa8, 0xcf, 0xe1, 0xe3, 0x73, 0x45, 0x9f, 0x1b, 0xdc, 0xbf, 0x95, + 0x25, 0x74, 0x7e, 0x8c, 0x95, 0x08, 0xa5, 0x55, 0xfa, 0xcb, 0x79, 0x87, 0x40, 0xe0, + 0xbd, 0xf9, 0x94, 0xd9, 0x73, 0x9b, 0xbe, 0x55, 0x38, 0xa0, 0xae, 0x0f, 0x07, 0x6c, + 0x58, 0x2c, 0x0f, 0x5b, 0xa8, 0x78, 0xb9, 0x9b, 0x82, 0x49, 0xdb, 0x1d, 0x7e, 0x95, + 0x05, 0x6c, 0x98, 0xaf, 0x08, 0x3d, 0x98, 0xcb, 0x0e, 0xd9, 0xe3, 0xf7, 0x43, 0x6e, + 0x1c, 0x76, 0x43, 0x76, 0x6f, 0x96, 0x6b, 0x83, 0xe9, 0x99, 0x20, 0x6e, 0xbd, 0x13, + 0x93, 0xb9, 0xb2, 0xa7, 0xf4, 0x14, 0x48, 0x0f, 0xa0, 0x17, 0x48, 0x00, 0x69, 0xf8, + 0x5c, 0x77, 0x49, 0xc4, 0x35, 0xae, 0x2f, 0xba, 0x2d, 0xdc, 0x10, 0x38, 0xd5, 0x47, + 0xd8, 0x48, 0x54, 0x81, 0x7e, 0xf3, 0x96, 0x35, 0xc2, 0x98, 0x27, 0xaa, 0xd8, 0x67, + 0x26, 0xc9, 0xad, 0xe3, 0xb2, 0x65, 0xb9, 0x08, 0x6c, 0x8b, 0x5b, 0x75, 0xef, 0x56, + 0xfe, 0x4b, 0xd8, 0xb4, 0xd6, 0x28, 0x93, 0x89, 0x5b, 0x3f, 0xd2, 0x73, 0x4f, 0xda, + 0xc4, 0x64, 0x15, 0x6d, 0x7e, 0x5e, 0xbc, 0x7e, 0xcf, 0x1d, 0x83, 0xb8, 0x6f, 0x65, + 0x96, 0x37, 0xe3, 0xb1, 0x42, 0xc1, 0x64, 0x96, 0x3b, 0x8c, 0xdc, 0xf4, 0xba, 0x4f, + 0x40, 0x35, 0xdf, 0xfc, 0x5a, 0x78, 0x94, 0x58, 0x84, 0x77, 0x81, 0x91, 0x8a, 0xc7, + 0x2f, 0xc1, 0x8b, 0x01, 0x95, 0x4e, 0xa6, 0xbf, 0x46, 0x50, 0x02, 0x00, 0xe2, 0xf7, + 0x90, 0xfb, 0xba, 0xc4, 0xc4, 0x5b, 0xc3, 0x2d, 0x24, 0x0a, 0xc1, 0x63, 0x91, 0x20, + 0x28, 0x22, 0x33, 0x0b, 0x32, 0xd5, 0x8e, 0x67, 0x77, 0x76, 0x5f, 0x22, 0xa4, 0x11, + 0x63, 0x04, 0xfd, 0x0e, 0x01, 0xb6, 0x5b, 0x2e, 0xc5, 0x16, 0x39, 0x3a, 0xb3, 0x75, + 0x1b, 0x53, 0x56, 0xd2, 0xb0, 0xc9, 0x50, 0x0c, 0x0f, 0x3e, 0x46, 0x91, 0x81, 0x03, + 0x5b, 0xc3, 0x66, 0x0f, 0x0b, 0x8f, 0x9f, 0xbe, 0x6e, 0x40, 0xb5, 0xe8, 0x9c, 0xb7, + 0x9b, 0x06, 0x37, 0x14, 0xca, 0x75, 0xe7, 0x2e, 0x2e, 0x10, 0x0a, 0x10, 0xd6, 0x3b, + 0xf7, 0x84, 0xdf, 0x08, 0x20, 0xef, 0x25, 0xf8, 0xef, 0x40, 0xfe, 0x5f, 0x05, 0xfb, + 0x95, 0x68, 0x3f, 0x91, 0x05, 0xff, 0x3c, 0xb2, 0xd2, 0x19, 0xab, 0x76, 0x60, 0x5a, + 0x06, 0x4f, 0x69, 0x21, 0x9f, 0x1d, 0xc0, 0xd0, 0x0b, 0x3b, 0x48, 0x64, 0x2f, 0x97, + 0x0d, 0xc0, 0x0c, 0xca, 0x4b, 0x8b, 0x43, 0x30, 0x8b, 0xe1, 0x82, 0x86, 0xec, 0x5a, + 0x42, 0x88, 0xd6, 0x00, 0xa3, 0x78, 0x5c, 0xb6, 0x22, 0xd4, 0x68, 0xa4, 0xc6, 0x96, + 0x9b, 0x37, 0x92, 0xf2, 0x48, 0x50, 0x27, 0xd0, 0xad, 0x9a, 0xa4, 0xa9, 0xc2, 0xcc, + 0x97, 0x2f, 0x9e, 0xe5, 0x19, 0x0a, 0x95, 0xb1, 0xeb, 0x05, 0x8d, 0xdd, 0xd8, 0xc0, + 0x8e, 0x7d, 0x75, 0x3f, 0x5e, 0x01, 0x1b, 0x2b, 0xcf, 0xee, 0x1d, 0x52, 0xc1, 0xc4, + 0xf2, 0xca, 0xcd, 0xa3, 0x0b, 0xdb, 0x69, 0x30, 0x65, 0x3c, 0x0c, 0xc4, 0x48, 0x6e, + 0x60, 0xe8, 0x9f, 0xa8, 0x49, 0xb3, 0x20, 0x83, 0xba, 0x9d, 0xb4, 0x53, 0xfb, 0x8d, + 0xf6, 0x83, 0xcd, 0x68, 0x75, 0x4c, 0x87, 0xda, 0xa7, 0x31, 0xf5, 0x70, 0xa7, 0xa4, + 0x06, 0x0a, 0xf0, 0xce, 0x70, 0x0d, 0x31, 0xbc, 0xa7, 0xe7, 0x4b, 0x3e, 0x3b, 0xa3, + 0xd0, 0xe8, 0xa6, 0x39, 0x2a, 0x06, 0x2b, 0x8e, 0x86, 0xd9, 0xd7, 0xd0, 0x0b, 0x21, + 0x70, 0x1e, 0x7b, 0x06, 0x2e, 0x06, 0xb1, 0xbc, 0xd8, 0x2a, 0x01, 0xd3, 0x75, 0x62, + 0x6f, 0xbf, 0x87, 0x2d, 0x27, 0xfa, 0x45, 0x11, 0xf5, 0xf8, 0xcf, 0x8c, 0x9a, 0xbc, + 0xef, 0x2a, 0x99, 0x01, 0x76, 0xae, 0x33, 0x93, 0x25, 0x30, 0x2e, 0x42, 0x23, 0x6a, + 0x1e, 0xb1, 0x05, 0x72, 0x88, 0xce, 0x53, 0x22, 0x1f, 0xb6, 0x08, 0xa5, 0x47, 0xf2, + 0xcf, 0xa5, 0x12, 0x16, 0x33, 0x8d, 0x4e, 0xa1, 0x33, 0x0d, 0x6b, 0xad, 0x84, 0x7f, + 0xa8, 0x8c, 0x1e, 0x1a, 0xa3, 0xe1, 0x56, 0x5d, 0x64, 0x77, 0x79, 0xbb, 0xd0, 0xf7, + 0x0e, 0x85, 0xf8, 0xc7, 0xd3, 0xaa, 0x5c, 0x20, 0x82, 0xb2, 0x65, 0x24, 0x9d, 0xf0, + 0x57, 0x01, 0x1a, 0x79, 0x53, 0x5e, 0x36, 0xc4, 0x4f, 0xe9, 0xea, 0xe8, 0x46, 0xfa, + 0x19, 0xc2, 0x25, 0x37, 0x46, 0xbc, 0x55, 0x89, 0x25, 0x94, 0x4f, 0x89, 0x8b, 0xb2, + 0xcf, 0x44, 0x49, 0x60, 0x4b, 0xcc, 0xb2, 0x3c, 0x74, 0x04, 0xfe, 0x99, 0x5e, 0x00, + 0x35, 0xa3, 0xd0, 0x0b, 0xb2, 0xa2, 0x46, 0xe9, 0x5b, 0xfc, 0x60, 0x14, 0x5c, 0x6a, + 0x00, 0x96, 0x87, 0x68, 0x44, 0x60, 0x27, 0x1e, 0xe1, 0x33, 0x24, 0x41, 0xce, 0x68, + 0xdb, 0x5c, 0x8e, 0x80, 0x2e, 0x0d, 0xf3, 0x5b, 0x93, 0xbb, 0xd7, 0xf3, 0x87, 0x3e, + 0xa0, 0x0d, 0x19, 0x16, 0x12, 0xa1, 0x80, 0x42, 0xb2, 0x55, 0x20, 0xc6, 0xe5, 0xdc, + 0x0e, 0xa4, 0x52, 0xf3, 0x73, 0x1c, 0x8c, 0xb6, 0x50, 0x82, 0xa6, 0x22, 0xa7, 0xc2, + 0xe0, 0x01, 0x3e, 0xa4, 0x7d, 0x0b, 0xdd, 0x42, 0xd6, 0x99, 0x04, 0x66, 0x64, 0x9a, + 0x90, 0x5c, 0x68, 0x4c, 0x32, 0x00, 0xe4, 0x77, 0xea, 0x16, 0x53, 0x00, 0xaa, 0xa4, + 0xcf, 0x6a, 0xdf, 0x8e, 0x7d, 0x13, 0xb0, 0xfb, 0xa2, 0x9f, 0x44, 0x99, 0x01, 0x6e, + 0xf5, 0x3c, 0x10, 0x43, 0xb4, 0x38, 0x91, 0xe7, 0x34, 0xb6, 0xa4, 0x35, 0x1a, 0xec, + 0xe9, 0xb0, 0xe9, 0x29, 0x7f, 0x06, 0x40, 0x3d, 0x19, 0x78, 0xea, 0xd2, 0xda, 0x0d, + 0xff, 0x82, 0xcd, 0x1f, 0x55, 0xeb, 0xca, 0x57, 0xb6, 0x33, 0x7c, 0x85, 0x13, + ], + txid: [ + 0x80, 0xbb, 0x70, 0x2d, 0x71, 0x23, 0x5b, 0xec, 0xbb, 0xa2, 0xa2, 0x51, 0x43, 0x51, + 0x2a, 0xd9, 0x06, 0x50, 0x34, 0x22, 0x5d, 0xad, 0x9c, 0x89, 0xbf, 0xcb, 0x73, 0x32, + 0x8d, 0x3d, 0x4f, 0xe6, + ], + transparent_input: None, + script_code: None, + amount: None, + sighash_all: [ + 0x80, 0xbb, 0x70, 0x2d, 0x71, 0x23, 0x5b, 0xec, 0xbb, 0xa2, 0xa2, 0x51, 0x43, 0x51, + 0x2a, 0xd9, 0x06, 0x50, 0x34, 0x22, 0x5d, 0xad, 0x9c, 0x89, 0xbf, 0xcb, 0x73, 0x32, + 0x8d, 0x3d, 0x4f, 0xe6, + ], + sighash_none: None, + sighash_single: None, + sighash_all_anyone: None, + sighash_none_anyone: None, + sighash_single_anyone: None, + }, + TestVector { + tx: vec![ + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0x98, 0xa1, 0x19, 0xf9, 0x79, 0x81, + 0x3d, 0x20, 0x21, 0x0c, 0x6f, 0x10, 0x00, 0x03, 0x31, 0xef, 0xba, 0xa1, 0xcc, 0xfd, + 0x05, 0x00, 0x08, 0x51, 0x53, 0x00, 0xac, 0x52, 0x65, 0xac, 0x65, 0x65, 0x7c, 0x6e, + 0x39, 0x0e, 0xcf, 0x04, 0x00, 0x09, 0x51, 0x6a, 0xac, 0xac, 0x52, 0x51, 0x65, 0x65, + 0x63, 0x94, 0x26, 0x6f, 0xd6, 0x49, 0x6e, 0x06, 0x00, 0x01, 0xac, 0x00, 0x00, 0x01, + 0xbb, 0xdf, 0x18, 0x6d, 0x8c, 0x75, 0xd0, 0xfb, 0x19, 0x1a, 0x1b, 0x11, 0x9b, 0x2a, + 0x4a, 0xc4, 0xa4, 0x41, 0x81, 0x3f, 0x92, 0x55, 0x1d, 0x94, 0x1f, 0x63, 0x36, 0xc8, + 0x7a, 0x6e, 0xe0, 0x1e, 0xd7, 0x99, 0x2c, 0xff, 0x3e, 0xca, 0x24, 0xde, 0x3e, 0x09, + 0x84, 0xe1, 0x0e, 0x68, 0xae, 0x38, 0x75, 0x34, 0xb9, 0x6c, 0xde, 0x37, 0x92, 0xf1, + 0x35, 0xbf, 0x5f, 0x68, 0x78, 0x7d, 0x37, 0x0c, 0xa4, 0x4e, 0x77, 0xb3, 0xed, 0x5c, + 0xcd, 0x60, 0x36, 0x9c, 0x0f, 0x47, 0x60, 0xaa, 0x05, 0xc0, 0xa6, 0xf6, 0x2f, 0xf8, + 0x90, 0x55, 0x8d, 0x72, 0x21, 0xf9, 0x20, 0xbf, 0x1f, 0x1b, 0x77, 0x8a, 0x06, 0xe5, + 0x7a, 0x85, 0x30, 0x2d, 0xe1, 0xd6, 0x91, 0x97, 0x19, 0xf3, 0x8d, 0xd1, 0x80, 0xe9, + 0x72, 0xa1, 0x5d, 0x5c, 0xd0, 0xfc, 0xc5, 0x74, 0x39, 0xa4, 0x35, 0x0e, 0xaf, 0x09, + 0x8d, 0x3b, 0x85, 0xba, 0x3d, 0xbe, 0xcc, 0xfc, 0xc2, 0x95, 0xfd, 0x49, 0x00, 0x51, + 0xdb, 0x41, 0xe2, 0xc4, 0xd1, 0x81, 0x44, 0x37, 0x08, 0xb1, 0x9a, 0x4d, 0x0d, 0x0e, + 0x2e, 0xfa, 0x1d, 0x79, 0xe0, 0x0f, 0x66, 0xe4, 0xc0, 0x15, 0x5a, 0x9c, 0x74, 0xa7, + 0xa5, 0x7c, 0xcf, 0x34, 0xc4, 0x83, 0xac, 0x7d, 0xa1, 0x58, 0x8a, 0x1b, 0x6b, 0x99, + 0x41, 0xf1, 0x10, 0x40, 0xf9, 0x4c, 0xf7, 0x8f, 0xad, 0x89, 0xbf, 0x11, 0xfe, 0xd6, + 0x9a, 0xa0, 0xd8, 0x31, 0x05, 0xad, 0xac, 0xdd, 0x4e, 0x5f, 0x04, 0xa6, 0x24, 0x24, + 0x02, 0x3c, 0x9b, 0x9e, 0x33, 0xc4, 0xfb, 0x7f, 0x12, 0xbd, 0xf2, 0x1f, 0x07, 0xf2, + 0x65, 0xc5, 0x37, 0xd5, 0x1c, 0x65, 0x51, 0xf4, 0x61, 0x7b, 0x91, 0x5d, 0x21, 0x99, + 0x18, 0x39, 0xc3, 0xd0, 0xd3, 0x63, 0x93, 0xd6, 0x46, 0xe0, 0xa8, 0xa4, 0x15, 0x09, + 0x21, 0x7d, 0x0e, 0x7d, 0x2c, 0xa1, 0xa0, 0xa0, 0xd6, 0x77, 0xa3, 0xea, 0xca, 0x23, + 0xed, 0xeb, 0x07, 0xb7, 0x4e, 0x65, 0x2a, 0x0b, 0xc5, 0x0c, 0x6c, 0x08, 0x3a, 0x55, + 0xd6, 0xc7, 0x30, 0x6e, 0x74, 0x08, 0x6f, 0x47, 0x68, 0x93, 0x3a, 0xa2, 0x48, 0x73, + 0x68, 0x18, 0x67, 0xa7, 0x89, 0x3d, 0x77, 0xcb, 0x7f, 0x29, 0xb8, 0xc8, 0x47, 0xc5, + 0x83, 0xf2, 0xd0, 0x71, 0xa6, 0x86, 0x61, 0x6e, 0x20, 0x67, 0x19, 0xf7, 0x61, 0xae, + 0x39, 0xc1, 0x10, 0x44, 0x2e, 0x06, 0x16, 0x3d, 0x2b, 0x84, 0x59, 0x03, 0x60, 0x69, + 0x5d, 0x4e, 0x19, 0x84, 0x9e, 0x63, 0x4f, 0x24, 0xd9, 0xad, 0x39, 0x6c, 0x19, 0xff, + 0x83, 0xce, 0x74, 0xf4, 0x6e, 0x64, 0x5f, 0x93, 0x2e, 0x14, 0x1a, 0x41, 0x19, 0x59, + 0x36, 0xc8, 0x5d, 0x51, 0x44, 0x14, 0xf1, 0x12, 0xe6, 0x0b, 0x1a, 0x25, 0x37, 0xc3, + 0x8d, 0x6d, 0xc6, 0xc4, 0x63, 0x83, 0x05, 0xc9, 0xbd, 0x6c, 0x62, 0xe3, 0x66, 0xbc, + 0x63, 0x12, 0x3e, 0x3e, 0x6d, 0xd3, 0x6e, 0xed, 0xd3, 0x13, 0x6f, 0xce, 0x8d, 0xee, + 0xca, 0x2a, 0xa0, 0x9a, 0x32, 0x98, 0xa3, 0x9d, 0x83, 0x85, 0x9e, 0xfc, 0x9b, 0x2b, + 0x69, 0xcf, 0x9a, 0x7d, 0xee, 0x08, 0xa9, 0x8e, 0x4b, 0xe5, 0x58, 0xac, 0x79, 0x12, + 0xfd, 0xcb, 0x42, 0x20, 0x90, 0x75, 0x42, 0x02, 0x60, 0xf7, 0xca, 0xd0, 0xf2, 0xc0, + 0x1f, 0x2a, 0xfe, 0x33, 0x07, 0x3f, 0x26, 0x24, 0x9d, 0x94, 0x4f, 0x7a, 0x50, 0xdd, + 0x84, 0x83, 0x9b, 0xc3, 0xea, 0x7f, 0xde, 0xe4, 0xed, 0x71, 0x44, 0x9c, 0xf0, 0x75, + 0x33, 0xd2, 0x6e, 0x1e, 0x27, 0xa3, 0xef, 0xb0, 0x32, 0xc3, 0xa3, 0xb3, 0x4b, 0xd3, + 0x09, 0x26, 0x22, 0xd2, 0x06, 0x2a, 0xe5, 0x36, 0xef, 0x51, 0x49, 0xc4, 0x9b, 0x5b, + 0xc9, 0x47, 0x5e, 0xaf, 0xab, 0x6e, 0x67, 0x57, 0x61, 0x00, 0x8b, 0x0d, 0xad, 0xde, + 0xec, 0xaa, 0x60, 0x44, 0x70, 0xbb, 0xe0, 0xfa, 0xda, 0x25, 0x5d, 0x29, 0x0e, 0x92, + 0xb1, 0x90, 0xc2, 0xc2, 0xd8, 0xc2, 0xde, 0xe5, 0x45, 0x5d, 0x1f, 0xa9, 0xa9, 0xf3, + 0xdb, 0x77, 0x79, 0xb5, 0x84, 0x64, 0x34, 0x64, 0xaa, 0x80, 0x14, 0xba, 0x66, 0x99, + 0x4d, 0xe2, 0x55, 0x17, 0xf8, 0x39, 0x80, 0xe6, 0x6e, 0xe4, 0xf6, 0x23, 0x14, 0xae, + 0x6d, 0xbe, 0xf4, 0x52, 0xd5, 0xd3, 0x8b, 0x0a, 0x16, 0xf3, 0x99, 0x1f, 0x36, 0xd8, + 0xa8, 0xb3, 0x9d, 0xdc, 0x0d, 0x55, 0x95, 0xee, 0xd9, 0x87, 0x62, 0x87, 0x8c, 0xdf, + 0x3f, 0x4a, 0x2e, 0xdc, 0x5c, 0xda, 0x77, 0xd5, 0xfe, 0x4f, 0xaf, 0x63, 0xa1, 0x5f, + 0x56, 0x8a, 0x54, 0x0d, 0xa5, 0x7d, 0xd9, 0xbe, 0xb6, 0xfb, 0x1a, 0x97, 0x7c, 0xcb, + 0x91, 0xb4, 0xd7, 0x9c, 0xb3, 0x9b, 0x28, 0x91, 0x1a, 0x29, 0xe7, 0xbf, 0x02, 0x8a, + 0xc6, 0x10, 0x37, 0x96, 0xdf, 0xb6, 0xb2, 0x09, 0x67, 0x23, 0x9a, 0xd3, 0x73, 0xc3, + 0x8c, 0x53, 0xf6, 0xdf, 0x18, 0x23, 0xd4, 0x95, 0x0a, 0x02, 0x83, 0xe9, 0x9b, 0x9c, + 0x06, 0xab, 0x29, 0x66, 0x66, 0x7c, 0x9d, 0xf6, 0x77, 0x71, 0x6b, 0x0c, 0xad, 0xed, + 0x81, 0x8d, 0xf9, 0xe4, 0x49, 0xc0, 0x72, 0xe2, 0x2f, 0x9d, 0x98, 0xbb, 0x0f, 0x9b, + 0x03, 0xbd, 0x5f, 0xd0, 0x13, 0xfc, 0xef, 0x3e, 0xd6, 0xa4, 0x9a, 0xeb, 0x98, 0x72, + 0x02, 0x54, 0x08, 0x7e, 0xf7, 0x28, 0xe3, 0x19, 0x47, 0xff, 0xe8, 0xf7, 0x66, 0xe6, + 0x3e, 0xe4, 0x6f, 0xf2, 0x08, 0x16, 0xd5, 0xfa, 0x8f, 0xf5, 0x5a, 0x26, 0x39, 0x89, + 0x61, 0x49, 0x0a, 0xb9, 0xae, 0x36, 0x6f, 0xc5, 0xa2, 0xd1, 0x99, 0x6e, 0xd6, 0x93, + 0xcc, 0xca, 0x82, 0x35, 0x6f, 0x60, 0x0a, 0xb0, 0x99, 0xf6, 0xec, 0xa8, 0xbf, 0xe6, + 0x45, 0x27, 0x0d, 0x3f, 0x95, 0xed, 0xba, 0x5b, 0x0d, 0xe7, 0xa3, 0x28, 0x19, 0x23, + 0x3b, 0xcc, 0x75, 0x4a, 0x5c, 0xe2, 0xe5, 0xea, 0x07, 0x84, 0x2e, 0x5f, 0xf2, 0xce, + 0xbe, 0x62, 0xad, 0x76, 0xe8, 0xef, 0xf8, 0xd1, 0x5e, 0xa4, 0xc2, 0x4a, 0x5f, 0x20, + 0x78, 0x68, 0x31, 0x9a, 0x5a, 0xf6, 0xb0, 0x35, 0x00, 0x69, 0x89, 0x62, 0x4f, 0x8f, + 0xf7, 0x03, 0x00, 0x92, 0x1a, 0x63, 0xb5, 0xda, 0x5f, 0x25, 0x53, 0xb8, 0x3a, 0x94, + 0x7b, 0x16, 0x42, 0x4b, 0xbf, 0x5f, 0x7c, 0xbc, 0x70, 0xb4, 0xcd, 0x7e, 0x8e, 0x3c, + 0x95, 0x1f, 0x35, 0x85, 0x72, 0xe3, 0x37, 0x87, 0xe7, 0xd5, 0x27, 0x04, 0xa6, 0x72, + 0x1b, 0x30, 0xef, 0xc4, 0x10, 0x17, 0xae, 0x4d, 0x23, 0x15, 0x58, 0xc5, 0xc8, 0x2c, + 0xc7, 0xdd, 0x7e, 0x33, 0x56, 0xc0, 0x9d, 0xc2, 0x49, 0x06, 0xf0, 0x43, 0x8d, 0xfc, + 0xc3, 0x00, 0x85, 0x6a, 0xc2, 0xce, 0xd8, 0xf7, 0x7f, 0xa8, 0x01, 0x57, 0x36, 0xc6, + 0x61, 0xe8, 0x02, 0x48, 0xae, 0xeb, 0x77, 0x48, 0x74, 0xaa, 0x79, 0xd2, 0x90, 0xb8, + 0xf5, 0x02, 0x7a, 0x0a, 0x50, 0x95, 0x37, 0xfc, 0x7c, 0x68, 0x9b, 0x7a, 0xd8, 0x61, + 0x16, 0xcf, 0xec, 0x26, 0x47, 0xcc, 0xaa, 0xe1, 0xc7, 0x4b, 0x41, 0x6f, 0x3e, 0x6a, + 0xe8, 0xf7, 0xcc, 0x60, 0xea, 0xaf, 0x7b, 0x6a, 0x59, 0x0d, 0x51, 0x54, 0x41, 0x38, + 0xe1, 0x73, 0x29, 0x45, 0x60, 0x3a, 0x53, 0x46, 0x2c, 0x60, 0xe1, 0xf6, 0xcb, 0x0c, + 0x9c, 0xa0, 0x39, 0x0c, 0x48, 0x82, 0x24, 0xc3, 0x13, 0x26, 0x9f, 0xcd, 0x59, 0xfc, + 0xb6, 0x11, 0xfb, 0x20, 0x49, 0xdd, 0x4b, 0xe6, 0x8c, 0x3c, 0xda, 0xe9, 0xae, 0xdc, + 0x88, 0xad, 0x2c, 0xc8, 0xe3, 0x7f, 0xd8, 0x95, 0x01, 0x7f, 0x67, 0x27, 0x54, 0x1a, + 0x8e, 0x35, 0xdf, 0xaf, 0x48, 0x78, 0x1e, 0xa3, 0x54, 0x44, 0x89, 0xb9, 0x47, 0x0b, + 0x0d, 0xc6, 0x2e, 0xe1, 0x63, 0xc0, 0x5f, 0x94, 0x12, 0xfc, 0x97, 0x13, 0xaa, 0xac, + 0x25, 0xb4, 0xc2, 0x6e, 0xb0, 0x3f, 0x71, 0x66, 0x46, 0x61, 0x1a, 0xd7, 0xc2, 0xed, + 0x9b, 0xe4, 0xc8, 0x5e, 0x42, 0xf7, 0x34, 0xb5, 0x78, 0x6a, 0x82, 0xce, 0x41, 0x77, + 0xa3, 0xc4, 0x76, 0x47, 0x60, 0x35, 0x5a, 0xdf, 0xbf, 0xc3, 0xf0, 0xc8, 0x46, 0x65, + 0xbd, 0x6a, 0x1e, 0xbf, 0x89, 0x5f, 0x67, 0xe1, 0x10, 0x53, 0x88, 0x34, 0x49, 0xf7, + 0x06, 0x95, 0xd0, 0xc4, 0xe9, 0x51, 0xd7, 0x13, 0x05, 0xef, 0x33, 0xd9, 0x73, 0x71, + 0x26, 0xd0, 0xe6, 0x62, 0x10, + ], + txid: [ + 0x2f, 0x2a, 0xb7, 0xee, 0xe4, 0xae, 0x1d, 0x52, 0x49, 0xf1, 0x2e, 0xe8, 0x16, 0x49, + 0x01, 0x54, 0xeb, 0x2d, 0xeb, 0x76, 0x78, 0x74, 0xa3, 0x1b, 0x5d, 0x10, 0xaa, 0xf7, + 0x6b, 0xa8, 0x4f, 0xae, + ], + transparent_input: None, + script_code: None, + amount: None, + sighash_all: [ + 0x2f, 0x2a, 0xb7, 0xee, 0xe4, 0xae, 0x1d, 0x52, 0x49, 0xf1, 0x2e, 0xe8, 0x16, 0x49, + 0x01, 0x54, 0xeb, 0x2d, 0xeb, 0x76, 0x78, 0x74, 0xa3, 0x1b, 0x5d, 0x10, 0xaa, 0xf7, + 0x6b, 0xa8, 0x4f, 0xae, + ], + sighash_none: None, + sighash_single: None, + sighash_all_anyone: None, + sighash_none_anyone: None, + sighash_single_anyone: None, + }, + TestVector { + tx: vec![ + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0x98, 0xa1, 0x19, 0xf9, 0x12, 0x50, + 0x92, 0x6f, 0x6a, 0x8e, 0x63, 0x19, 0x03, 0x8f, 0x69, 0xad, 0x9a, 0x91, 0x92, 0xb3, + 0x02, 0xf2, 0x6b, 0xdd, 0xa4, 0x65, 0xd9, 0x0b, 0x94, 0xb1, 0x2c, 0x57, 0xfa, 0x3f, + 0xd6, 0x93, 0x00, 0x83, 0xf1, 0x84, 0x43, 0x8d, 0x8a, 0x88, 0x9d, 0x3f, 0x5e, 0xce, + 0xa2, 0x02, 0x52, 0x63, 0x67, 0x36, 0xf2, 0xa0, 0xf1, 0x8e, 0x26, 0xf4, 0xfa, 0x45, + 0xd1, 0xbe, 0x8f, 0x3d, 0xc4, 0xa7, 0x07, 0x13, 0x7e, 0x95, 0xd2, 0xad, 0x59, 0x4f, + 0x6c, 0x03, 0xd2, 0x49, 0x23, 0x06, 0x7a, 0xe4, 0x7f, 0xd6, 0x42, 0x5e, 0xfb, 0x9c, + 0x1d, 0x50, 0x08, 0x6a, 0x63, 0x6a, 0x53, 0x00, 0xac, 0x65, 0x51, 0xfe, 0x80, 0x6f, + 0x57, 0x56, 0xac, 0xb5, 0x62, 0xf1, 0x3c, 0x0c, 0xa1, 0xd8, 0x03, 0xa1, 0x95, 0xc2, + 0xeb, 0xb2, 0xef, 0x02, 0xac, 0x33, 0xe6, 0xa8, 0x8d, 0xea, 0x07, 0x5b, 0xa9, 0x96, + 0xd3, 0xc3, 0x36, 0x64, 0x8e, 0x86, 0x94, 0xd3, 0xa1, 0x01, 0x63, 0xca, 0x53, 0x1b, + 0xeb, 0x03, 0x1a, 0xa2, 0x37, 0x7f, 0xca, 0x6c, 0x00, 0x00, 0x07, 0x00, 0xac, 0x6a, + 0x6a, 0xac, 0xac, 0x53, 0xd4, 0xe9, 0x59, 0xaf, 0x4a, 0x2e, 0x02, 0x00, 0x02, 0xac, + 0xac, 0xb7, 0x57, 0x47, 0xfc, 0x90, 0x3c, 0x05, 0x00, 0x03, 0x00, 0xac, 0x00, 0x02, + 0x75, 0x61, 0x49, 0x34, 0xb7, 0xeb, 0x2b, 0xef, 0x27, 0x9e, 0x31, 0xb9, 0x65, 0xe6, + 0xd3, 0x38, 0x74, 0xb4, 0xe1, 0x1b, 0x25, 0x7f, 0x89, 0x60, 0x31, 0x6c, 0x9a, 0x17, + 0xc6, 0xa5, 0x73, 0xa5, 0x8f, 0x57, 0x01, 0x5c, 0xa4, 0x02, 0xc6, 0x7d, 0x92, 0x5c, + 0x99, 0xac, 0xea, 0x3e, 0xe8, 0xcc, 0x4b, 0x00, 0x8c, 0x5c, 0xb4, 0x39, 0x66, 0xe7, + 0x14, 0xef, 0x48, 0x0f, 0xd0, 0x5e, 0x07, 0xc7, 0xb2, 0xdd, 0xa9, 0xaa, 0x39, 0x66, + 0x11, 0x3e, 0xaa, 0x29, 0x3d, 0x3f, 0x62, 0x2b, 0x30, 0x9d, 0x64, 0x80, 0x3c, 0xe1, + 0xe6, 0x37, 0x8b, 0x6a, 0xac, 0x4f, 0xab, 0x52, 0x7c, 0x43, 0xcd, 0x45, 0xdb, 0xad, + 0x57, 0xe9, 0xd2, 0x59, 0x69, 0xbf, 0x43, 0xd0, 0x14, 0x3b, 0x76, 0xc8, 0x5c, 0xa0, + 0x95, 0xa9, 0x0d, 0xac, 0x4b, 0xa0, 0x78, 0x17, 0xf0, 0x26, 0x31, 0xd7, 0x2e, 0xe5, + 0xda, 0xc1, 0xe1, 0x6d, 0x0b, 0x77, 0xf0, 0x20, 0x28, 0xda, 0x46, 0x41, 0x00, 0xfd, + 0xe7, 0x6d, 0x83, 0xdd, 0x0b, 0xb2, 0x24, 0xf7, 0xb5, 0x7a, 0x00, 0xc0, 0x2f, 0x68, + 0xae, 0x64, 0x8f, 0xdc, 0x52, 0x99, 0x57, 0xa1, 0x04, 0x90, 0xdc, 0xe1, 0xfd, 0xdb, + 0xb0, 0x90, 0x4f, 0x0d, 0x51, 0x8b, 0xb3, 0x87, 0x54, 0x40, 0x19, 0x98, 0x3b, 0x61, + 0x69, 0x75, 0xa7, 0x8e, 0x74, 0xd8, 0x54, 0xfd, 0xdc, 0x49, 0x00, 0xf7, 0x53, 0xdb, + 0x06, 0xf5, 0x10, 0x01, 0x00, 0x7c, 0x57, 0xec, 0x89, 0x0a, 0xff, 0x51, 0xa4, 0xd1, + 0xd3, 0x9e, 0xcd, 0x0e, 0x75, 0x7f, 0x29, 0x17, 0xc7, 0x38, 0xdd, 0x99, 0x9b, 0x5c, + 0x6e, 0x77, 0xda, 0x0b, 0x6b, 0x40, 0xa8, 0x70, 0x06, 0xed, 0x0a, 0x3c, 0x1a, 0x4b, + 0x9f, 0xb1, 0x8d, 0xcc, 0xcf, 0xcd, 0xb6, 0xac, 0x0c, 0x24, 0x21, 0x63, 0x9c, 0xda, + 0x00, 0x75, 0xa2, 0x0d, 0xc5, 0x11, 0x1b, 0x8d, 0x3d, 0x31, 0x99, 0x49, 0x5b, 0xd9, + 0x13, 0x3d, 0xba, 0xb9, 0x45, 0x41, 0x41, 0x0e, 0x4f, 0xba, 0x92, 0xc7, 0xb6, 0x06, + 0xa5, 0xcb, 0x12, 0x2f, 0x14, 0x0c, 0xf1, 0xa3, 0x59, 0x6f, 0x27, 0x88, 0xf3, 0xc8, + 0xb9, 0x26, 0x60, 0xf1, 0x4c, 0xb6, 0x5a, 0xf5, 0xdd, 0x23, 0xdf, 0xdb, 0xac, 0x13, + 0x71, 0xec, 0xf4, 0xb3, 0x37, 0x12, 0xfe, 0xd2, 0x29, 0x2c, 0x44, 0xf7, 0x08, 0x34, + 0xcf, 0x96, 0xc0, 0x5d, 0x58, 0x82, 0x7e, 0x69, 0xbf, 0xc2, 0xe6, 0x96, 0xfa, 0x08, + 0x74, 0x86, 0x9c, 0x02, 0xf3, 0xdc, 0xa1, 0x1c, 0x3b, 0x90, 0xcb, 0x21, 0x4e, 0x68, + 0xbc, 0x1c, 0xae, 0x03, 0x9d, 0x7a, 0x14, 0x6c, 0xdc, 0x1d, 0x60, 0x9d, 0x7a, 0x6b, + 0x3f, 0xd5, 0xd4, 0x61, 0xb0, 0x95, 0x1c, 0x82, 0xcf, 0xb3, 0xe7, 0x63, 0xfa, 0xd2, + 0xd1, 0xbc, 0x76, 0x78, 0xcd, 0xf8, 0x27, 0x79, 0xf8, 0xfd, 0x5a, 0x1c, 0xe2, 0x2a, + 0x8d, 0x3c, 0x45, 0x47, 0xab, 0xd9, 0x59, 0x83, 0x8a, 0x46, 0xfb, 0x80, 0xaf, 0xe0, + 0x1f, 0x8e, 0xcc, 0x99, 0x31, 0x51, 0x3b, 0x19, 0x62, 0xec, 0x54, 0x08, 0x56, 0xcb, + 0x18, 0x93, 0x87, 0xcf, 0xbf, 0xb2, 0x55, 0x16, 0x7b, 0x55, 0xef, 0x4b, 0xee, 0x46, + 0x56, 0x68, 0xb2, 0x0e, 0xa4, 0x11, 0x8c, 0xa5, 0x69, 0xae, 0x48, 0x0e, 0x0f, 0x6e, + 0x5e, 0x04, 0x3a, 0x35, 0x7b, 0x36, 0xd3, 0xab, 0x36, 0xc8, 0x61, 0xf2, 0x27, 0x83, + 0x01, 0xdc, 0xe5, 0x76, 0x74, 0xd5, 0x07, 0x3b, 0x3a, 0x6f, 0x51, 0x03, 0xa0, 0x79, + 0x3a, 0xf1, 0xb7, 0xd4, 0x6f, 0x95, 0x7e, 0x22, 0xd8, 0xd2, 0x58, 0x3b, 0xf1, 0x81, + 0x83, 0x6c, 0x3b, 0xe9, 0x93, 0x0b, 0xac, 0x8f, 0xa4, 0x60, 0xe9, 0x68, 0xaa, 0x71, + 0x09, 0x87, 0x0b, 0xbe, 0xd1, 0x7d, 0xf5, 0xf8, 0x88, 0xc8, 0xca, 0x14, 0x67, 0xae, + 0x17, 0xdb, 0xbc, 0xde, 0x31, 0xc1, 0x10, 0x5c, 0xb5, 0xbd, 0xa8, 0x8a, 0xc6, 0xc6, + 0x27, 0x00, 0x2c, 0xe2, 0x1c, 0x02, 0x14, 0x0f, 0xfe, 0x81, 0xec, 0x58, 0xbf, 0x1e, + 0x6d, 0x1b, 0xb7, 0xaa, 0xad, 0xa4, 0x1f, 0xba, 0x0b, 0xb5, 0x88, 0x77, 0x8a, 0x7f, + 0x65, 0x20, 0x2a, 0xd8, 0x11, 0xea, 0x73, 0xd2, 0x6c, 0x74, 0x55, 0x03, 0x95, 0xaf, + 0xf7, 0x53, 0x25, 0x10, 0x7c, 0x9b, 0x3f, 0x9a, 0xe9, 0xdc, 0xdc, 0xd8, 0x6e, 0xd0, + 0x81, 0xa2, 0xe7, 0x42, 0x47, 0x19, 0xa3, 0xd1, 0x85, 0xb7, 0xe0, 0xa4, 0x3a, 0x47, + 0x2e, 0x29, 0x8a, 0xc0, 0xaf, 0xdc, 0x52, 0x87, 0xd7, 0xad, 0x12, 0x4c, 0xd9, 0x40, + 0x5a, 0x65, 0x50, 0x59, 0xe1, 0x83, 0xe9, 0x64, 0xe7, 0xfc, 0x98, 0xbb, 0x48, 0xe3, + 0x67, 0xbb, 0xd6, 0x8d, 0x8c, 0x9e, 0xce, 0x7b, 0x6b, 0xd2, 0x13, 0x62, 0x48, 0x56, + 0x08, 0x3f, 0xbf, 0x92, 0x0c, 0xa5, 0x3f, 0xfc, 0x83, 0x35, 0xf0, 0x72, 0xaf, 0x59, + 0x3b, 0xc9, 0x91, 0xe8, 0x05, 0xc3, 0x89, 0x2b, 0x93, 0x96, 0x32, 0x44, 0x95, 0x54, + 0xe4, 0x0a, 0xe3, 0xc7, 0xa9, 0x96, 0xc0, 0xee, 0x02, 0xfc, 0x62, 0x66, 0x03, 0xde, + 0xf3, 0x06, 0xfd, 0x1f, 0xf4, 0x11, 0x8b, 0x1c, 0x8e, 0x06, 0x69, 0xef, 0xe1, 0xb1, + 0x0f, 0xc1, 0x60, 0x87, 0x19, 0x98, 0x15, 0x43, 0x0b, 0xf8, 0x15, 0xa7, 0x18, 0xba, + 0xb9, 0x1d, 0x8c, 0xf2, 0x95, 0x0d, 0xbf, 0x25, 0xb4, 0x2e, 0xc4, 0x9a, 0x1f, 0x33, + 0x5d, 0xdf, 0xd5, 0xca, 0xd4, 0xbb, 0xaf, 0xc1, 0xdc, 0xba, 0x2c, 0xd1, 0xc3, 0xd2, + 0x2b, 0x56, 0x05, 0xb9, 0x16, 0x9e, 0x4a, 0xb2, 0x1f, 0xf8, 0x1d, 0xc3, 0x6b, 0x21, + 0xec, 0x34, 0x9b, 0x66, 0xbd, 0x88, 0xff, 0xe7, 0xff, 0x46, 0xee, 0x18, 0xec, 0xe4, + 0x9e, 0x64, 0x19, 0x87, 0x58, 0x93, 0x8b, 0xc0, 0x52, 0x15, 0xdb, 0xd8, 0x35, 0x46, + 0x13, 0xa0, 0x02, 0x94, 0x89, 0xfe, 0x7b, 0x1d, 0xfe, 0xbd, 0xa9, 0xda, 0x98, 0x01, + 0x47, 0x39, 0x7e, 0x97, 0xaa, 0x45, 0xd0, 0x94, 0x51, 0x12, 0x08, 0x03, 0x13, 0x57, + 0x01, 0xb8, 0x59, 0x5c, 0x6e, 0x0f, 0x17, 0x64, 0xc3, 0x33, 0x6e, 0x48, 0xe7, 0xf7, + 0x74, 0x67, 0x54, 0x36, 0x50, 0x2e, 0xdd, 0xa9, 0xcc, 0x00, 0xc7, 0xf2, 0x4c, 0xb6, + 0x09, 0x0a, 0x80, 0xd0, 0xa6, 0x19, 0x49, 0x60, 0x8b, 0xa6, 0x73, 0x71, 0x0e, 0x93, + 0x14, 0x06, 0x30, 0xbf, 0x86, 0x72, 0xc4, 0x14, 0x3d, 0x8b, 0x7a, 0xcf, 0xd7, 0x4e, + 0x72, 0xc0, 0x4d, 0x89, 0x24, 0x0d, 0x22, 0xd6, 0x7c, 0x92, 0xd7, 0x91, 0x3f, 0x99, + 0x06, 0xf0, 0x21, 0x9e, 0x84, 0xff, 0xd3, 0x93, 0x2f, 0x8b, 0x41, 0x44, 0x46, 0x1d, + 0x07, 0x00, 0xcb, 0x7a, 0xd6, 0xcf, 0x94, 0x17, 0x53, 0x3c, 0x26, 0xd2, 0x05, 0x0d, + 0x25, 0xb7, 0x4b, 0x0e, 0x7b, 0x5a, 0x54, 0xdf, 0x51, 0x15, 0x7d, 0xc9, 0xe6, 0x2d, + 0x5f, 0x6c, 0x4a, 0xbe, 0x5c, 0xe9, 0x0a, 0x7f, 0xe2, 0xe5, 0x2a, 0x8d, 0x78, 0x06, + 0x78, 0xcf, 0xcb, 0xdc, 0x0d, 0x5d, 0x9e, 0x43, 0x66, 0x5a, 0xf0, 0xfd, 0xbf, 0x5c, + 0x4b, 0x77, 0x27, 0x68, 0x0f, 0x4c, 0x53, 0x4b, 0x54, 0xf9, 0xd5, 0xe9, 0xa3, 0x57, + 0xc8, 0x36, 0xe0, 0x85, 0xe1, 0x0c, 0x1e, 0x3f, 0xac, 0x40, 0x58, 0xb6, 0x82, 0xc6, + 0x8e, 0x54, 0xfa, 0xca, 0xe0, 0xf9, 0xc2, 0xdd, 0x4d, 0x64, 0xd9, 0x04, 0x61, 0x52, + 0xb4, 0x76, 0x23, 0x32, 0x93, 0x9f, 0x17, 0xe6, 0xaa, 0xf7, 0xd8, 0xb9, 0xd3, 0x58, + 0xe2, 0x21, 0x8d, 0x4e, 0x0d, 0x69, 0xa4, 0xf1, 0x19, 0xe1, 0xc6, 0x4e, 0xec, 0x4c, + 0x8b, 0x53, 0x28, 0x09, 0x70, 0x71, 0x31, 0xf0, 0x1f, 0x55, 0xc7, 0xad, 0x04, 0xcf, + 0xb6, 0x3f, 0x7c, 0x4a, 0x3d, 0x0a, 0x2b, 0x0f, 0xfb, 0x0b, 0x05, 0xa6, 0xbe, 0x05, + 0x5b, 0x8c, 0x94, 0xca, 0x80, 0xbb, 0x0a, 0x1d, 0x13, 0xcd, 0x4c, 0xd6, 0x9a, 0xb9, + 0x83, 0x04, 0xae, 0x25, 0x15, 0xd5, 0xf7, 0x69, 0x9d, 0x4a, 0xbe, 0xe5, 0xc2, 0x0b, + 0xe6, 0x09, 0xd8, 0x73, 0x51, 0x10, 0x12, 0xf2, 0x34, 0xbd, 0x85, 0xa7, 0xef, 0xf5, + 0xfb, 0x63, 0x4c, 0xff, 0x26, 0x58, 0xba, 0x65, 0x16, 0x04, 0x85, 0x63, 0x09, 0x5e, + 0xce, 0xfb, 0x30, 0x15, 0xee, 0x3f, 0x03, 0xca, 0x52, 0xa1, 0x77, 0xf2, 0x61, 0xec, + 0xdc, 0x26, 0xbc, 0x08, 0x9d, 0x34, 0xc6, 0x40, 0x48, 0x46, 0xe9, 0xc6, 0x47, 0xfc, + 0xfe, 0x98, 0xcc, 0x6a, 0xcd, 0xbb, 0x46, 0x4f, 0x64, 0x27, 0x8a, 0xd8, 0xce, 0x9d, + 0x1a, 0xe0, 0xd4, 0x15, 0xbc, 0x0c, 0x05, 0x24, 0x5f, 0xdd, 0xaf, 0x4e, 0xbc, 0x8d, + 0xc7, 0x03, 0xa8, 0x5c, 0xb2, 0x70, 0xf7, 0x96, 0xad, 0x2d, 0x93, 0x7e, 0x2a, 0xc0, + 0xd5, 0xe0, 0xa3, 0x48, 0x21, 0x75, 0x80, 0x00, 0xaa, 0x59, 0xc9, 0xd4, 0x65, 0x24, + 0x85, 0x29, 0x4e, 0xe0, 0xab, 0x29, 0x69, 0x6b, 0x21, 0x43, 0x0f, 0xa5, 0x4d, 0xcf, + 0xbf, 0x2b, 0x9c, 0x49, 0xd1, 0x42, 0x06, 0x42, 0x09, 0xee, 0xee, 0xd4, 0xd4, 0x71, + 0xff, 0xc0, 0x17, 0xd4, 0xe2, 0x0a, 0x79, 0x6b, 0x09, 0x27, 0x80, 0x4c, 0x06, 0x1b, + 0x9f, 0x4a, 0x70, 0x91, 0xfe, 0x01, 0x5a, 0xda, 0x68, 0xfd, 0x84, 0x42, 0xe0, 0x18, + 0x25, 0xc8, 0x8d, 0xfe, 0x55, 0xcf, 0x5d, 0xe3, 0x89, 0x36, 0xf7, 0xce, 0x25, 0x31, + 0x1b, 0x90, 0x2b, 0xa9, 0x7a, 0x3c, 0x12, 0xa9, 0x5c, 0xfa, 0x1c, 0x3a, 0x59, 0x1b, + 0x81, 0x8f, 0x60, 0x83, 0x27, 0x09, 0xd9, 0xe4, 0x83, 0x9e, 0x41, 0x0f, 0xb3, 0x6b, + 0x84, 0xf3, 0xac, 0x4f, 0x07, 0x0f, 0xc3, 0x5e, 0x16, 0x19, 0x78, 0x25, 0x9e, 0x5b, + 0x8e, 0xdc, 0x74, 0x4d, 0x90, 0x91, 0x9a, 0xa7, 0x70, 0xbb, 0x36, 0x21, 0x51, 0x28, + 0xe5, 0x82, 0xb5, 0x96, 0x41, 0xe2, 0x38, 0x52, 0xe9, 0x58, 0xeb, 0x8f, 0xc3, 0xc0, + 0xaa, 0x96, 0x15, 0x2b, 0xa4, 0xf7, 0x7f, 0x13, 0x8d, 0x6a, 0x67, 0x12, 0xa3, 0xae, + 0x32, 0x26, 0x01, 0x58, 0x83, 0xf8, 0x1d, 0xb2, 0x3e, 0x58, 0x3c, 0x86, 0x9c, 0x4c, + 0x71, 0x14, 0x3a, 0x6f, 0xff, 0xd6, 0x5e, 0x8d, 0xfd, 0xc5, 0x0c, 0x99, 0xa2, 0xf1, + 0xf3, 0x14, 0xcd, 0xcc, 0x71, 0x35, 0x9e, 0x23, 0x5f, 0x1d, 0x7d, 0xc2, 0xb5, 0xf3, + 0x8e, 0xf7, 0xb9, 0x70, 0x84, 0x31, 0x63, 0xc0, 0x3f, 0x9d, 0xd4, 0x0a, 0x80, 0x15, + 0xef, 0xdc, 0x87, 0x91, 0x95, 0x6a, 0x3f, 0x3c, 0xed, 0xd9, 0xea, 0x64, 0xf8, 0xef, + 0xa7, 0xa0, 0x81, 0x5a, 0x70, 0x38, 0x1d, 0x71, 0x46, 0x78, 0x17, 0xbd, 0x04, 0xca, + 0x52, 0x9a, 0xed, 0xe0, 0x7f, 0xf6, 0x0d, 0x17, 0x6a, 0xed, 0x0f, 0x85, 0x5a, 0x2e, + 0xae, 0xa8, 0x9e, 0xae, 0xac, 0xa8, 0x93, 0x58, 0xc0, 0x81, 0x82, 0x6a, 0x08, 0x12, + 0xa5, 0xbc, 0xa2, 0x8b, 0xe1, 0x37, 0x3f, 0x08, 0x6d, 0xbd, 0xba, 0x7e, 0x43, 0xe2, + 0x03, 0x21, 0x2c, 0x9f, 0xed, 0x21, 0x47, 0x4b, 0xa1, 0x9a, 0x05, 0x5f, 0xfc, 0xc1, + 0x79, 0x41, 0x2e, 0x89, 0x3a, 0x74, 0x48, 0x32, 0x29, 0x8c, 0x5f, 0xe2, 0x4c, 0xc6, + 0xb1, 0x86, 0x67, 0xf4, 0x9b, 0x34, 0xdf, 0xb1, 0x23, 0x79, 0x26, 0x74, 0x19, 0xa9, + 0xcb, 0x94, 0x03, 0xd8, 0x16, 0x7d, 0x8d, 0x1e, 0x91, 0xd2, 0x81, 0x1a, 0x04, 0x3b, + 0x29, 0x24, 0x3b, 0x06, 0x9b, 0x37, 0x58, 0x78, 0x47, 0xdc, 0x6f, 0xcd, 0xdb, 0x18, + 0x31, 0xbd, 0x1c, 0xc2, 0x56, 0x7c, 0xa0, 0x33, 0xac, 0x40, 0xf7, 0x4a, 0xb6, 0x95, + 0x5f, 0x68, 0x3b, 0x12, 0xe4, 0xe8, 0x25, 0x4e, 0x4e, 0xa7, 0x60, 0xd3, 0x8b, 0x3f, + 0x46, 0x79, 0x1c, 0x5c, 0x4c, 0xb1, 0x2b, 0xc7, 0xcc, 0xb0, 0xed, 0x18, 0x65, 0xf2, + 0x5d, 0x60, 0x1c, 0x30, 0x3f, 0x81, 0xfb, 0x1f, 0xa1, 0xdb, 0x48, 0x53, 0x3d, 0x3d, + 0x6b, 0x28, 0x8e, 0x4d, 0x9a, 0x4d, 0xff, 0x8e, 0xc2, 0x1c, 0x96, 0xf5, 0x78, 0x39, + 0x97, 0x10, 0xc8, 0x25, 0xfe, 0x7e, 0x32, 0xf9, 0x3a, 0x8c, 0x07, 0x43, 0xf9, 0xeb, + 0xd5, 0x4c, 0xc1, 0x51, 0xc7, 0x61, 0xcb, 0x66, 0x38, 0xeb, 0xa3, 0xa1, 0xfe, 0xa6, + 0xb9, 0xa9, 0x72, 0xaa, 0x26, 0x1b, 0x13, 0x7d, 0x01, 0x58, 0x61, 0xe1, 0x4c, 0x59, + 0xec, 0x3a, 0x6f, 0x4c, 0x6d, 0x8e, 0x19, 0xe6, 0x46, 0x3f, 0xa1, 0xe4, 0x30, 0x4f, + 0x49, 0xe4, 0x3a, 0xe0, 0x65, 0xe3, 0xfb, 0x19, 0x6f, 0x76, 0xd9, 0xb8, 0x79, 0xc7, + 0x20, 0x08, 0x62, 0xea, 0xd1, 0x8d, 0xea, 0x5f, 0xb6, 0xa1, 0x7a, 0xce, 0xa3, 0x33, + 0x88, 0x70, 0xbd, 0xe6, 0x64, 0x49, 0x89, 0x1b, 0x3e, 0xb0, 0x51, 0xda, 0x40, 0x7e, + 0x71, 0x05, 0xcd, 0xa2, 0x0d, 0x73, 0x59, 0x11, 0x39, 0xe9, 0xb2, 0xa2, 0xc7, 0x29, + 0x06, 0x0c, 0x4a, 0x9f, 0xce, 0x5c, 0x0b, 0x6e, 0xac, 0xb9, 0x36, 0x2d, 0xdc, 0xd7, + 0x74, 0xa0, 0xf2, 0xe1, 0x47, 0xc3, 0x07, 0x07, 0xa2, 0xcb, 0x66, 0x80, 0xa2, 0x49, + 0xea, 0x9c, 0x72, 0x24, 0x39, 0x2c, 0xbc, 0x0a, 0x9d, 0x58, 0xac, 0xdc, 0x4b, 0xa5, + 0x62, 0x3c, 0x49, 0x8c, 0x72, 0xd7, 0xba, 0xc4, 0xf3, 0x01, 0x3d, 0x09, 0x38, 0xbc, + 0xda, 0x4f, 0x45, 0x16, 0x66, 0x57, 0xe1, 0xf0, 0xd7, 0x9d, 0x50, 0x8b, 0x17, 0x78, + 0x52, 0xaf, 0xd0, 0xab, 0xb9, 0x0a, 0xde, 0x1d, 0x68, 0x27, 0x26, 0xf4, 0x20, 0x08, + 0xb4, 0x6a, 0xd7, 0xf8, 0xab, 0xdb, 0x18, 0x11, 0x7f, 0x72, 0x64, 0x13, 0x90, 0xf0, + 0x86, 0xb6, 0xe1, 0x49, 0x8b, 0xe6, 0x95, 0x48, 0x52, 0x7e, 0x6a, 0xda, 0x2b, 0x38, + 0xb9, 0xfe, 0x12, 0x1e, 0xf6, 0x70, 0xaf, 0x74, 0x37, 0xd3, 0x25, 0x36, 0xd5, 0xcf, + 0x5c, 0x4a, 0xb1, 0x9d, 0xd9, 0x97, 0x71, 0x58, 0x2d, 0x03, 0x81, 0x04, 0xb7, 0xe0, + 0x39, 0xa3, 0x76, 0xf7, 0xac, 0xbb, 0xea, 0xdb, 0x34, 0xf9, 0x45, 0xbe, 0xb9, 0xd7, + 0xca, 0x0e, 0x4e, 0x3d, 0x5c, 0x5e, 0x4e, 0xb1, 0xd8, 0x52, 0x6e, 0xbd, 0x13, 0xda, + 0xcb, 0x1b, 0xa3, 0x57, 0x35, 0xc6, 0xd0, 0x4a, 0x45, 0x55, 0xac, 0xf4, 0xbf, 0x11, + 0x76, 0x26, 0x50, 0x0d, 0x77, 0xb3, 0x81, 0x89, 0xdd, 0x48, 0x88, 0x04, 0x12, 0x25, + 0xac, 0xbe, 0x38, 0x74, 0xa4, 0xc0, 0xf6, 0x07, 0xfe, 0x67, 0x45, 0xf9, 0x35, 0x5b, + 0x3f, 0xa1, 0x88, 0xf1, 0xd6, 0x5c, 0x09, 0xf3, 0x89, 0xaf, 0x1b, 0x9d, 0x62, 0x32, + 0xaa, 0x79, 0x44, 0x79, 0x19, 0xc5, 0x50, 0xf6, 0xf3, 0x1f, 0xec, 0x35, 0x48, 0x1c, + 0xb9, 0x22, 0xde, 0x2d, 0xb5, 0xb4, 0xda, 0x2f, 0x81, 0x94, 0x86, 0x17, 0x02, 0x8e, + 0x32, 0x17, 0x06, 0xa3, 0xa7, 0x78, 0xc1, 0x93, 0x8c, 0x44, 0x3b, 0xb0, 0x0e, 0x5b, + 0x0f, 0xf0, 0x6a, 0xd8, 0xab, 0x9b, 0x1a, 0xb0, 0xc1, 0x14, 0x77, 0x67, 0x3f, 0x85, + 0xdf, 0x95, 0x61, 0xdb, 0xea, 0x45, 0xd5, 0xf9, 0x78, 0x1e, 0xbe, 0x31, 0x7a, 0x07, + 0x10, 0xae, 0x54, 0x61, 0xe3, 0x4f, 0xe6, 0xf1, 0xb1, 0xaa, 0x9b, 0x4e, 0x67, 0xb1, + 0x49, 0x10, 0x98, 0x48, 0x02, 0xc2, 0xa7, 0xe3, 0x81, 0x93, 0xbc, 0x7b, 0xdc, 0x8b, + 0xa3, 0xe4, 0xe3, 0xd1, 0xd9, 0x33, 0xbf, 0xb5, 0x80, 0xf5, 0xb3, 0xe8, 0x7a, 0x2a, + 0x06, 0x51, 0x70, 0x51, 0x41, 0x0f, 0xe1, 0xb4, 0xff, 0x1e, 0xa0, 0xad, 0xe8, 0x24, + 0xf3, 0x38, 0x51, 0x54, 0x56, 0xa5, 0x7c, 0x7a, 0x91, 0x6a, 0x74, 0x38, 0x8e, 0xe8, + 0xf1, 0x28, 0x1f, 0x9a, 0xde, 0x0a, 0xe2, 0xa2, 0x61, 0x3a, 0x06, 0x12, 0xc4, 0x69, + 0xdf, 0x79, 0x2b, 0x8d, 0xf4, 0xca, 0xe4, 0xfc, 0x25, 0xc1, 0xca, 0xdb, 0xa9, 0x5a, + 0x80, 0x7c, 0xe6, 0x1e, 0x5a, 0x53, 0x03, 0xfa, 0xaf, 0x9e, 0x14, 0x65, 0x39, 0x96, + 0xb5, 0xa8, 0xad, 0xc3, 0x4f, 0xd4, 0x75, 0xef, 0x14, 0x99, 0x09, 0x4b, 0xab, 0xaf, + 0x1f, 0x3f, 0x07, 0xda, 0x9a, 0x39, 0x0b, 0x1d, 0x9f, 0xc9, 0xa0, 0x83, 0x27, 0x98, + 0x7a, 0xdf, 0xe9, 0x56, 0x48, 0x63, 0xfb, 0xdf, 0xa8, 0xf6, 0xb4, 0x6a, 0x88, 0x41, + 0x58, 0x30, 0x99, 0xaf, 0xb7, 0x87, 0x01, 0x18, 0xfa, 0xce, 0x76, 0x34, 0x7e, 0x40, + 0xb6, 0xfd, 0x8c, 0xd1, 0x55, 0x82, 0xae, 0x8e, 0x23, 0xbe, 0x9a, 0x02, 0x19, 0xbc, + 0x3e, 0x4e, 0x45, 0x46, 0xa3, 0x0d, 0x3b, 0xbb, 0xbd, 0x16, 0x86, 0x08, 0x68, 0x76, + 0xbe, 0x0e, 0x4c, 0x85, 0x9b, 0xe7, 0x1f, 0xb5, 0x8f, 0x4f, 0xab, 0x3d, 0x28, 0xc0, + 0xb4, 0xf7, 0xe7, 0x5a, 0xd1, 0xed, 0xb7, 0xf8, 0x89, 0x46, 0xfb, 0x40, 0xcf, 0xa5, + 0x78, 0x6a, 0x0f, 0xcb, 0xa1, 0x30, 0x3c, 0x83, 0x47, 0xec, 0xee, 0x93, 0xd4, 0x6d, + 0x14, 0x0b, 0xb5, 0xf6, 0x95, 0x31, 0xd6, 0x66, 0x54, 0x8b, 0x10, 0x9c, 0xe7, 0x64, + 0xbe, 0xad, 0x7c, 0x87, 0xbd, 0x4c, 0x87, 0x64, 0x94, 0xde, 0x82, 0xdb, 0x6e, 0x50, + 0x73, 0xa6, 0xc9, 0x4f, 0x7c, 0x09, 0x9a, 0x40, 0xd7, 0xa3, 0x1c, 0x4a, 0x04, 0xb6, + 0x9c, 0x9f, 0xcc, 0xf3, 0xc7, 0xdd, 0x56, 0xf5, 0x54, 0x47, 0x76, 0xc5, 0x3b, 0x4d, + 0xf7, 0x95, 0x39, 0x81, 0xd5, 0x5a, 0x96, 0xa6, 0xdc, 0xff, 0x99, 0x04, 0xa9, 0x08, + 0x42, 0xe5, 0xba, 0xfe, 0xc8, 0x84, 0x0c, 0x2d, 0x25, 0x5b, 0xf5, 0xad, 0x61, 0xc4, + 0x60, 0xf9, 0x8f, 0xeb, 0x82, 0xa1, 0x0f, 0xa1, 0xc0, 0x99, 0xf6, 0x27, 0x76, 0x79, + 0x82, 0x36, 0xc5, 0xca, 0x7f, 0x1e, 0x46, 0xeb, 0xdb, 0x2b, 0x14, 0x4d, 0x87, 0x13, + 0xe5, 0x6c, 0x77, 0x2f, 0x2c, 0x3b, 0x86, 0x0e, 0xa5, 0xb0, 0x3a, 0x88, 0x54, 0xbc, + 0x6e, 0x65, 0x90, 0xd6, 0x3c, 0xc0, 0xea, 0x54, 0xf1, 0x0b, 0x73, 0xba, 0x24, 0x1b, + 0xf7, 0x4b, 0x63, 0x55, 0x51, 0xa2, 0xaa, 0xca, 0x96, 0x87, 0xac, 0x52, 0x69, 0xfd, + 0x36, 0x8b, 0x26, 0xd7, 0x0a, 0x73, 0x7f, 0x26, 0x76, 0x85, 0x99, 0x8a, 0x3f, 0x7d, + 0x26, 0x37, 0x91, 0x49, 0x09, 0xc7, 0x46, 0x49, 0x5d, 0x24, 0xc4, 0x98, 0x63, 0x5e, + 0xf9, 0x7a, 0xc6, 0x6a, 0x40, 0x08, 0x94, 0xc0, 0x9f, 0x73, 0x48, 0x8e, 0xb7, 0xcf, + 0x77, 0x92, 0x37, 0xdb, 0x2a, 0xc1, 0x4e, 0x22, 0x65, 0x8b, 0xe2, 0x8a, 0xe9, 0x88, + 0xce, 0xc4, 0xa6, 0x71, 0x65, 0x3b, 0x57, 0x5f, 0xde, 0xa4, 0x4f, 0x7d, 0xe6, 0x9c, + 0xb7, 0xe3, 0x96, 0x82, 0x1e, 0x7c, 0x66, 0x17, 0x39, 0xf9, 0xf0, 0x28, 0xa9, 0x26, + 0x2b, 0xd8, 0x0e, 0xbf, 0x9c, 0xe8, 0xc4, 0xa9, 0x38, 0x2c, 0x6b, 0x03, 0xe7, 0xd8, + 0x08, 0x5e, 0x90, 0x6c, 0xf8, 0x4c, 0xa2, 0x01, 0x73, 0xfc, 0x57, 0xbe, 0x19, 0x36, + 0x1a, 0x83, 0xa7, 0xe3, 0x77, 0x5f, 0x5b, 0x01, 0x3a, 0x9a, 0x04, 0xb1, 0xa5, 0x06, + 0xfc, 0x59, 0x80, 0x2c, 0xfc, 0x3c, 0xac, 0xfb, 0x63, 0x5b, 0xeb, 0x0b, 0x76, 0x39, + 0x5c, 0xba, 0x74, 0x3c, 0x36, 0x27, 0x9b, 0xa3, 0xb4, 0xf2, 0xc8, 0xba, 0x4a, 0xdb, + 0x5b, 0x87, 0x63, 0xfb, 0x96, 0xd7, 0xca, 0x33, 0x3a, 0x12, 0xde, 0x3c, 0xef, 0xa9, + 0x1c, 0x2c, 0x96, 0x59, 0x99, 0x19, 0xa4, 0xdf, 0xe8, 0x40, 0x8a, 0xcb, 0x99, 0x10, + 0x5e, 0xe5, 0x4b, 0x79, 0xf2, 0x27, 0xb6, 0xcb, 0x7e, 0x33, 0x7b, 0xab, 0x04, 0x98, + 0x98, 0x57, 0xfe, 0x4f, 0x44, 0x37, 0xdd, 0xfa, 0xbb, 0x7b, 0x65, 0x54, 0x3b, 0x5f, + 0x39, 0xcb, 0x20, 0x23, 0xd4, 0x67, 0x89, 0xeb, 0x7d, 0x98, 0x9a, 0xf7, 0x79, 0xe5, + 0xb8, 0xd2, 0x83, 0x85, 0xa8, 0x5b, 0x0d, 0xa2, 0xab, 0xe0, 0x7f, 0x0c, 0x2b, 0xb4, + 0x25, 0x5f, 0xce, 0xa0, 0x31, 0x88, 0x52, 0x7a, 0x30, 0x7d, 0x40, 0x91, 0x59, 0xe9, + 0x01, 0x66, 0xfa, 0xc6, 0xa0, 0x70, 0xba, 0x05, 0xb3, 0xe4, 0xdb, 0xfd, 0x3a, 0x2b, + 0xfc, 0xc9, 0xee, 0x6e, 0xd0, 0x16, 0xc0, 0xf6, 0x65, 0xbe, 0x81, 0x33, 0xb7, 0xdc, + 0x1d, 0x86, 0x04, 0x4d, 0xb0, 0xf9, 0xdb, 0x40, 0xfb, 0x0e, 0x9f, 0x8b, 0xc2, 0xe4, + 0xdb, 0x53, 0x82, 0xa8, 0xb4, 0xf8, 0x15, 0xb4, 0xe8, 0x43, 0x4a, 0xd0, 0xdf, 0xbc, + 0x51, 0xa5, 0xe9, 0xb1, 0x45, 0xe1, 0x59, 0x6c, 0xbf, 0x46, 0x70, 0xb7, 0xe0, 0x5d, + 0xfd, 0xaf, 0xbb, 0x0c, 0xf3, 0xdd, 0xee, 0x28, 0xd7, 0x6a, 0x82, 0x42, 0x8e, 0x8a, + 0xba, 0x43, 0x64, 0xe8, 0x4b, 0xac, 0x37, 0x92, 0x98, 0xdf, 0x29, 0x32, 0xe6, 0x9b, + 0xb5, 0xd0, 0x45, 0x51, 0x6e, 0xfc, 0x33, 0xae, 0x6c, 0xc3, 0x94, 0x7c, 0xeb, 0x09, + 0xed, 0x37, 0x16, 0x67, 0x21, 0x2a, 0x83, 0x1b, 0x54, 0x85, 0xea, 0xfc, 0xe8, 0x48, + 0x81, 0x88, 0xea, 0x4e, 0x27, 0xd0, 0xcd, 0xf7, 0xdd, 0xd3, 0x48, 0xab, 0xff, 0x77, + 0x7f, 0x4a, 0x13, 0xbb, 0xc7, 0x16, 0xb6, 0xa5, 0x94, 0x4e, 0xe7, 0x27, 0x96, 0x56, + 0x90, 0xe2, 0x09, 0xb4, 0x9e, 0xb9, 0x62, 0xc0, 0x39, 0x97, 0x5f, 0x93, 0x9e, 0xd5, + 0xc6, 0xe4, 0xc4, 0x00, 0xd8, 0x87, 0x75, 0x94, 0x33, 0xd3, 0xad, 0x71, 0x6d, 0xa0, + 0xcb, 0x44, 0x61, 0x13, 0xc7, 0x72, 0x7a, 0x64, 0xb5, 0x8c, 0x3f, 0x8a, 0x0f, 0x81, + 0x18, 0x9f, 0x98, 0x00, 0x52, 0x33, 0xa8, 0x13, 0x66, 0xae, 0xe7, 0x3c, 0xec, 0x85, + 0x22, 0x8e, 0xbc, 0xfd, 0x5e, 0xe3, 0xc3, 0xfb, 0x44, 0xdb, 0x76, 0xba, 0x24, 0x3f, + 0x28, 0x42, 0xb7, 0xb5, 0xfc, 0x74, 0x6a, 0xe5, 0x1b, 0x0b, 0xc4, 0xbd, 0x4f, 0xc9, + 0xfd, 0x83, 0x35, 0x65, 0xea, 0x85, 0x2b, 0x92, 0xb2, 0x24, 0xf6, 0x99, 0x03, 0x18, + 0xad, 0x8c, 0x7d, 0x94, 0x37, 0xe2, 0x0e, 0x2a, 0x1f, 0x20, 0xe8, 0x18, 0xf9, 0x05, + 0x7c, 0x5a, 0xba, 0xaa, 0x2e, 0x5c, 0x15, 0xb9, 0x49, 0x45, 0xcd, 0x42, 0x4c, 0x28, + 0xa5, 0xfa, 0x38, 0x5d, 0xad, 0xfe, 0x49, 0x07, 0xb2, 0x74, 0xd8, 0x42, 0x70, 0x7d, + 0xb3, 0x69, 0x7a, 0x5a, 0xe6, 0xc8, 0xf5, 0x42, 0xe5, 0xec, 0xc0, 0x7f, 0xe4, 0x73, + 0x50, 0xd1, 0x01, 0x46, 0x70, 0x21, 0x2e, 0xfe, 0x81, 0xfb, 0x7c, 0x73, 0xe8, 0x45, + 0x0d, 0xf8, 0x14, 0xef, 0x62, 0x32, 0xf7, 0x49, 0x0f, 0x63, 0xcc, 0xf0, 0x74, 0x80, + 0xf8, 0x84, 0xa6, 0x6e, 0xaf, 0xfc, 0x28, 0xfe, 0xa4, 0x48, 0xd7, 0xb4, 0x01, 0xcd, + 0xae, 0x10, 0xe7, 0xc0, 0xc7, 0xf9, 0xa7, 0xb1, 0x53, 0x31, 0x96, 0x9f, 0xc8, 0xcb, + 0x36, 0x39, 0x67, 0x73, 0xde, 0x19, 0x19, 0x31, 0xc7, 0x50, 0xf6, 0xce, 0x5c, 0xaa, + 0xf2, 0x97, 0x68, 0xeb, 0xb2, 0x7d, 0xac, 0xc7, 0x38, 0x05, 0x6a, 0x81, 0x25, 0xb4, + 0x77, 0x2b, 0xf8, 0x7a, 0xe1, 0x0a, 0x8a, 0x30, 0x9b, 0x9b, 0xd6, 0x55, 0x04, 0x3c, + 0xfc, 0x31, 0x59, 0x49, 0x43, 0x68, 0xc5, 0xab, 0x8c, 0xad, 0xb7, 0xf6, 0x71, 0xe9, + 0x62, 0x6b, 0xd2, 0x63, 0xe3, 0x11, 0x81, 0xa6, 0x04, 0xb5, 0x06, 0xa0, 0x3b, 0x43, + 0x9a, 0x7f, 0xfe, 0x43, 0x55, 0x89, 0x24, 0x77, 0xe2, 0xbd, 0xf3, 0x38, 0xc6, 0x2c, + 0x39, 0x22, 0xf7, 0xd3, 0xc9, 0xa5, 0x6c, 0x71, 0x03, 0xd9, 0x11, 0x94, 0x8a, 0x84, + 0xb5, 0xae, 0x2d, 0xbb, 0x16, 0xa3, 0x76, 0x1a, 0xdd, 0x05, 0x3a, 0x0f, 0x96, 0x7e, + 0x6b, 0x5b, 0xc9, 0x42, 0x11, 0xb6, 0x54, 0x71, 0x53, 0x26, 0x7c, 0x6e, 0xe1, 0xca, + 0xd0, 0xd9, 0x74, 0xa7, 0x10, 0x88, 0x58, 0x37, 0x35, 0xe4, 0xf6, 0x3d, 0x33, 0x15, + 0x6d, 0xad, 0xd5, 0x4c, 0x2f, 0xaf, 0x89, 0x11, 0x4a, 0x12, 0x7b, 0x97, 0xb9, 0x4c, + 0xc2, 0xa2, 0x2e, 0xf3, 0x03, 0xf4, 0x59, 0xd0, 0x4f, 0xc0, 0xb5, 0x3a, 0xce, 0x59, + 0x18, 0xd4, 0x7f, 0xf3, 0x3a, 0x55, 0x8b, 0xd7, 0x1a, 0x75, 0xf3, 0x55, 0xfb, 0xd0, + 0x6b, 0xbc, 0xcf, 0x4e, 0x02, 0xc3, 0xc0, 0xa4, 0xb6, 0x3d, 0x0c, 0xc9, 0x49, 0x80, + 0x1d, 0x63, 0xa6, 0x4c, 0xb2, 0xd3, 0x23, 0x73, 0xb2, 0xc7, 0xb2, 0x74, 0xab, 0x2d, + 0xb4, 0x68, 0x21, 0x42, 0xc8, 0xb2, 0x1d, 0x84, 0xc4, 0x81, 0xf5, 0xef, 0x21, 0xe4, + 0xb5, 0xe3, 0x60, 0x34, 0x51, 0xbf, 0x94, 0x77, 0x4d, 0x0e, 0xf4, 0x7f, 0x63, 0xfa, + 0x6a, 0xbb, 0x78, 0xd2, 0x1c, 0x19, 0x3c, 0xbe, 0x00, 0x4d, 0x43, 0x55, 0x23, 0x1d, + 0xfd, 0x03, 0x00, 0x3d, 0xa4, 0xea, 0x2a, 0x4c, 0x88, 0xbf, 0x67, 0x7c, 0xf9, 0x75, + 0x4f, 0x0c, 0x47, 0xef, 0x82, 0xe2, 0x09, 0x75, 0xba, 0xae, 0xcb, 0x02, 0x32, 0xdf, + 0x88, 0x0b, 0xd7, 0xd1, 0xde, 0x13, 0x21, 0x54, 0x94, 0x62, 0xec, 0x8d, 0x5d, 0xf3, + 0xe7, 0x80, 0xff, 0xa7, 0x2e, 0xba, 0x8a, 0x8d, 0xf7, 0xfc, 0xf3, 0x98, 0xec, 0x23, + 0x05, 0x13, 0xca, 0x9d, 0x61, 0x23, 0xf8, 0xb9, 0xd8, 0x17, 0x85, 0x60, 0xda, 0xf9, + 0x75, 0x11, 0x19, 0x55, 0xa2, 0xbc, 0xa3, 0x42, 0x3e, 0xee, 0xfc, 0x52, 0x7b, 0xe3, + 0xa8, 0x54, 0x3e, 0xb9, 0x0a, 0x5e, 0xc0, 0x2f, 0x35, 0xa7, 0xc6, 0x4b, 0x7d, 0xd5, + 0x9a, 0x72, 0xda, 0x00, 0x74, 0x63, 0x4e, 0x01, 0xd2, 0xab, 0xf3, 0x63, 0x7a, 0xdd, + 0x77, 0xc7, 0x35, 0x0f, 0x12, 0xb0, 0x11, 0xb2, 0xb2, 0x44, 0x61, 0x3c, 0x3f, 0x63, + 0x8d, 0xfb, 0xc0, 0x36, 0xc4, 0x55, 0x41, 0x59, 0x0a, 0x6f, 0x07, 0x05, 0x34, 0xb1, + 0x3f, 0x4d, 0x4e, 0xc0, 0x99, 0x5a, 0x08, 0x23, 0x37, 0x43, 0x8d, 0x04, 0xea, 0x53, + 0xf4, 0x92, 0x07, 0x0e, 0x20, 0x1c, 0xdb, 0xb1, 0xdc, 0x5b, 0xd1, 0x94, 0xd4, 0x91, + 0x9f, 0x91, 0x1d, 0xfa, 0x72, 0x41, 0xc8, 0xd5, 0x79, 0x2d, 0x43, 0xc4, 0x57, 0xd5, + 0xde, 0x16, 0x67, 0xc6, 0x2e, 0xc0, 0x9f, 0x08, 0xcb, 0x58, 0xf7, 0x35, 0xe5, 0xe3, + 0x5e, 0xfe, 0xd1, 0x84, 0xa5, 0x00, 0x10, 0x18, 0xc1, 0x0f, 0x8c, 0xb6, 0x4b, 0x0a, + 0x7b, 0x76, 0x81, 0x4b, 0xe1, 0x17, 0xfa, 0xe2, 0x04, 0xa5, 0x20, 0x08, 0xdb, 0xef, + 0xce, 0xc9, 0xfc, 0x34, 0xc0, 0xe5, 0xbe, 0x77, 0xfc, 0x8b, 0x5b, 0x5c, 0xd0, 0x77, + 0x11, 0x5a, 0xfd, 0xe1, 0x84, 0x05, 0x05, 0x4e, 0x5d, 0x29, 0x1a, 0xa8, 0xeb, 0x16, + 0x19, 0xc0, 0x49, 0xa6, 0x05, 0x76, 0xb8, 0x78, 0x67, 0x93, 0x6b, 0x8c, 0x9b, 0x29, + 0x68, 0x88, 0xa8, 0x60, 0x34, 0x8e, 0x53, 0xc1, 0x5f, 0x73, 0x41, 0xd8, 0xf1, 0xac, + 0xdd, 0x0d, 0xde, 0x23, 0x07, 0x55, 0xb4, 0xce, 0x86, 0x0f, 0x9f, 0x65, 0x0f, 0xe4, + 0x0a, 0xf6, 0x41, 0x36, 0x40, 0xb8, 0x1e, 0x4f, 0x63, 0x1c, 0x98, 0x1c, 0x11, 0xa2, + 0xe1, 0xd1, 0x84, 0x06, 0xf1, 0xec, 0x93, 0xae, 0x09, 0x7d, 0x4c, 0x4c, 0x15, 0x9a, + 0xb6, 0xc4, 0xe6, 0xf5, 0x27, 0xe8, 0x0a, 0x8a, 0x7f, 0xaf, 0xf9, 0x1d, 0x41, 0x0d, + 0xe4, 0x44, 0x38, 0xdb, 0x1c, 0x7e, 0x9d, 0x2f, 0x17, 0xca, 0xd2, 0x42, 0xfa, 0x9c, + 0x31, 0x79, 0xc1, 0xa3, 0xaa, 0x81, 0xf7, 0x36, 0x16, 0x49, 0x57, 0x2c, 0x71, 0x5c, + 0x25, 0xa1, 0xf6, 0xcd, 0x5a, 0xce, 0x82, 0xc0, 0x0a, 0xb2, 0x34, 0x2b, + ], + txid: [ + 0x16, 0x46, 0x65, 0x05, 0x5e, 0xd5, 0x01, 0x5d, 0xd9, 0xa5, 0x72, 0x47, 0xc2, 0x77, + 0xde, 0x07, 0x15, 0x27, 0x5d, 0x15, 0x6c, 0xda, 0xb9, 0x6f, 0x68, 0xdc, 0x70, 0x10, + 0x58, 0x3b, 0x02, 0xaa, + ], + transparent_input: Some(0), + script_code: Some(vec![]), + amount: Some(1405243945822387), + sighash_all: [ + 0xc7, 0x07, 0xc7, 0x8f, 0x48, 0x49, 0xc5, 0x49, 0x87, 0x8a, 0xf6, 0x41, 0x50, 0x9d, + 0xa5, 0x97, 0x87, 0xde, 0x72, 0xff, 0x4e, 0xcd, 0x08, 0xe2, 0x4c, 0x2b, 0xa1, 0x0d, + 0x11, 0x7b, 0x14, 0xc0, + ], + sighash_none: Some([ + 0x99, 0xc0, 0xcc, 0x62, 0xe2, 0xa0, 0xb4, 0xf1, 0xb2, 0x83, 0xeb, 0x93, 0x86, 0xc9, + 0x25, 0x80, 0x41, 0x5a, 0x3a, 0xf1, 0x25, 0x5b, 0xf2, 0x81, 0x74, 0x51, 0x9a, 0x3f, + 0x07, 0x8a, 0xff, 0x4c, + ]), + sighash_single: Some([ + 0x06, 0x7b, 0x18, 0x22, 0x92, 0xe5, 0x7c, 0xcc, 0x81, 0x0c, 0x01, 0x66, 0x0d, 0xf2, + 0xdb, 0x4b, 0xda, 0x02, 0x30, 0x1e, 0x3a, 0xf6, 0x6f, 0x87, 0xc9, 0x09, 0xda, 0x0a, + 0x4f, 0x25, 0x09, 0x86, + ]), + sighash_all_anyone: Some([ + 0xe3, 0xcb, 0xb8, 0x37, 0x82, 0x5a, 0x1a, 0x34, 0x19, 0x74, 0x39, 0x4b, 0x07, 0x2d, + 0x8d, 0x1b, 0x1e, 0x6a, 0xa2, 0xab, 0x2b, 0x87, 0xc2, 0x0e, 0x93, 0xf7, 0x13, 0x77, + 0x2e, 0x3b, 0x3d, 0x9d, + ]), + sighash_none_anyone: Some([ + 0xad, 0x36, 0x1a, 0xe8, 0xcd, 0x02, 0x78, 0xf5, 0xe8, 0xf2, 0x30, 0xf8, 0x1a, 0x3a, + 0xb4, 0x21, 0x9c, 0xf1, 0x56, 0x2d, 0xb6, 0xb4, 0x13, 0x65, 0x44, 0xeb, 0xb4, 0x7d, + 0x53, 0x73, 0x56, 0xc3, + ]), + sighash_single_anyone: Some([ + 0x00, 0x21, 0x5f, 0x2a, 0xe5, 0x57, 0xfa, 0xca, 0x3b, 0xe0, 0xbb, 0xdd, 0xdc, 0x62, + 0x69, 0x12, 0x4f, 0x23, 0x26, 0xc7, 0xc0, 0x43, 0xcc, 0xcd, 0xeb, 0x46, 0x4c, 0x62, + 0x5e, 0x0b, 0xff, 0x56, + ]), + }, + ]; +} From 1e46971c85eceeceb0ec54b1ec8c1f819c79c77f Mon Sep 17 00:00:00 2001 From: "Conrado P. L. Gouvea" Date: Wed, 30 Jun 2021 15:12:23 -0300 Subject: [PATCH 2/9] Implement Arbitrary for Sapling and Orchard verification keys, Sapling root --- Cargo.lock | 1 + zebra-chain/Cargo.toml | 1 + zebra-chain/src/orchard/arbitrary.rs | 43 +++++++++----- zebra-chain/src/sapling/arbitrary.rs | 85 +++++++++++++++++++++------- zebra-chain/src/sapling/tree.rs | 6 +- 5 files changed, 99 insertions(+), 37 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bc6390e45a6..a98d0b98b6a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4492,6 +4492,7 @@ dependencies = [ "bitvec", "blake2b_simd", "blake2s_simd", + "bls12_381", "bs58", "byteorder", "chrono", diff --git a/zebra-chain/Cargo.toml b/zebra-chain/Cargo.toml index c6602d74539..91e303b7dbd 100644 --- a/zebra-chain/Cargo.toml +++ b/zebra-chain/Cargo.toml @@ -45,6 +45,7 @@ zcash_history = { git = "https://github.com/zcash/librustzcash.git", rev = "0c3e zcash_primitives = { git = "https://github.com/zcash/librustzcash.git", rev = "0c3ed159985affa774e44d10172d4471d798a85a" } bigint = "4" uint = "0.9.1" +bls12_381 = "0.5.0" proptest = { version = "0.10", optional = true } proptest-derive = { version = "0.3.0", optional = true } diff --git a/zebra-chain/src/orchard/arbitrary.rs b/zebra-chain/src/orchard/arbitrary.rs index 5f1cedcf7fa..d1ec14bb292 100644 --- a/zebra-chain/src/orchard/arbitrary.rs +++ b/zebra-chain/src/orchard/arbitrary.rs @@ -2,7 +2,7 @@ use group::prime::PrimeCurveAffine; use halo2::pasta::pallas; use proptest::{arbitrary::any, array, collection::vec, prelude::*}; -use crate::primitives::redpallas::{Signature, SpendAuth, VerificationKeyBytes}; +use crate::primitives::redpallas::{Signature, SpendAuth, VerificationKey, VerificationKeyBytes}; use super::{keys, note, tree, Action, AuthorizedAction, Flags, NoteCommitment, ValueCommitment}; @@ -17,21 +17,19 @@ impl Arbitrary for Action { fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy { ( any::(), - array::uniform32(any::()), + any::>(), any::(), any::(), ) - .prop_map( - |(nullifier, rpk_bytes, enc_ciphertext, out_ciphertext)| Self { - cv: ValueCommitment(pallas::Affine::identity()), - nullifier, - rk: VerificationKeyBytes::from(rpk_bytes), - cm_x: NoteCommitment(pallas::Affine::identity()).extract_x(), - ephemeral_key: keys::EphemeralPublicKey(pallas::Affine::identity()), - enc_ciphertext, - out_ciphertext, - }, - ) + .prop_map(|(nullifier, rk, enc_ciphertext, out_ciphertext)| Self { + cv: ValueCommitment(pallas::Affine::identity()), + nullifier, + rk, + cm_x: NoteCommitment(pallas::Affine::identity()).extract_x(), + ephemeral_key: keys::EphemeralPublicKey(pallas::Affine::identity()), + enc_ciphertext, + out_ciphertext, + }) .boxed() } @@ -87,6 +85,25 @@ impl Arbitrary for Signature { type Strategy = BoxedStrategy; } +impl Arbitrary for VerificationKeyBytes { + type Parameters = (); + + fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy { + (vec(any::(), 32)) + .prop_filter_map("invalid verification key", |bytes| { + let bytes: [u8; 32] = bytes.try_into().expect("vec is the correct length"); + let vkb = Self::try_from(bytes).expect("a valid generated verification key bytes"); + // Convert to a VerificationKey to make sure it's valid; + // but return the underlying bytes if it works. + let r = VerificationKey::::try_from(vkb); + r.ok().map(|_| vkb) + }) + .boxed() + } + + type Strategy = BoxedStrategy; +} + impl Arbitrary for Flags { type Parameters = (); diff --git a/zebra-chain/src/sapling/arbitrary.rs b/zebra-chain/src/sapling/arbitrary.rs index f899e3e69c7..2ca2d324cf9 100644 --- a/zebra-chain/src/sapling/arbitrary.rs +++ b/zebra-chain/src/sapling/arbitrary.rs @@ -1,5 +1,8 @@ +use std::convert::{TryFrom, TryInto}; + +use group::ff::PrimeField; use jubjub::AffinePoint; -use proptest::{arbitrary::any, array, collection::vec, prelude::*}; +use proptest::{arbitrary::any, collection::vec, prelude::*}; use crate::primitives::Groth16Proof; @@ -15,24 +18,22 @@ impl Arbitrary for Spend { ( any::(), any::(), - array::uniform32(any::()), + any::(), any::(), vec(any::(), 64), ) - .prop_map( - |(per_spend_anchor, nullifier, rpk_bytes, proof, sig_bytes)| Self { - per_spend_anchor, - cv: ValueCommitment(AffinePoint::identity()), - nullifier, - rk: redjubjub::VerificationKeyBytes::from(rpk_bytes), - zkproof: proof, - spend_auth_sig: redjubjub::Signature::from({ - let mut b = [0u8; 64]; - b.copy_from_slice(sig_bytes.as_slice()); - b - }), - }, - ) + .prop_map(|(per_spend_anchor, nullifier, rk, proof, sig_bytes)| Self { + per_spend_anchor, + cv: ValueCommitment(AffinePoint::identity()), + nullifier, + rk: rk.0, + zkproof: proof, + spend_auth_sig: redjubjub::Signature::from({ + let mut b = [0u8; 64]; + b.copy_from_slice(sig_bytes.as_slice()); + b + }), + }) .boxed() } @@ -45,15 +46,15 @@ impl Arbitrary for Spend { fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy { ( any::(), - array::uniform32(any::()), + any::(), any::(), vec(any::(), 64), ) - .prop_map(|(nullifier, rpk_bytes, proof, sig_bytes)| Self { + .prop_map(|(nullifier, rk, proof, sig_bytes)| Self { per_spend_anchor: FieldNotPresent, cv: ValueCommitment(AffinePoint::identity()), nullifier, - rk: redjubjub::VerificationKeyBytes::from(rpk_bytes), + rk: rk.0, zkproof: proof, spend_auth_sig: redjubjub::Signature::from({ let mut b = [0u8; 64]; @@ -99,3 +100,49 @@ impl Arbitrary for OutputInTransactionV4 { type Strategy = BoxedStrategy; } + +/// A wrapper for a RedJubJub spending verification key. +/// +/// This is used by proptests since we can't implement Arbitrary for the +/// redjubjub::VerificationKeyBytes (it's in another crate). +/// We then implement it for the wrapper type instead. +#[derive(Debug)] +struct SpendVerificationKeyBytesWrapper(redjubjub::VerificationKeyBytes); + +impl Arbitrary for SpendVerificationKeyBytesWrapper { + type Parameters = (); + + fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy { + (vec(any::(), 32)) + .prop_filter_map("invalid verification key", |bytes| { + let bytes: [u8; 32] = bytes.try_into().expect("vec is the correct length"); + let vkb = redjubjub::VerificationKeyBytes::::try_from(bytes) + .expect("a valid generated verification key bytes"); + // Convert to a VerificationKey to make sure it's valid; + // but return the underlying bytes if it works. + let r = redjubjub::VerificationKey::::try_from(vkb); + r.ok().map(|_| SpendVerificationKeyBytesWrapper(vkb)) + }) + .boxed() + } + + type Strategy = BoxedStrategy; +} + +impl Arbitrary for tree::Root { + type Parameters = (); + + fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy { + (vec(any::(), 32)) + .prop_filter_map("invalid Sapling nore commitment tree root", |bytes| { + let bytes = bytes.try_into().expect("vec is the correct length"); + // Convert to a Scalar to make sure it's valid; + // but return the underlying bytes if it works. + let r = bls12_381::Scalar::from_repr(bytes); + r.map(|_| Self(bytes)) + }) + .boxed() + } + + type Strategy = BoxedStrategy; +} diff --git a/zebra-chain/src/sapling/tree.rs b/zebra-chain/src/sapling/tree.rs index 52ee75ca7d6..bca513d9704 100644 --- a/zebra-chain/src/sapling/tree.rs +++ b/zebra-chain/src/sapling/tree.rs @@ -15,12 +15,9 @@ use std::{collections::VecDeque, fmt}; +use super::commitment::{pedersen_hashes::pedersen_hash, NoteCommitment}; use bitvec::prelude::*; use lazy_static::lazy_static; -#[cfg(any(test, feature = "proptest-impl"))] -use proptest_derive::Arbitrary; - -use super::commitment::{pedersen_hashes::pedersen_hash, NoteCommitment}; const MERKLE_DEPTH: usize = 32; @@ -75,7 +72,6 @@ pub struct Position(pub(crate) u64); /// this block. A root of a note commitment tree is associated with /// each treestate. #[derive(Clone, Copy, Default, Eq, PartialEq, Serialize, Deserialize, Hash)] -#[cfg_attr(any(test, feature = "proptest-impl"), derive(Arbitrary))] pub struct Root(pub [u8; 32]); impl fmt::Debug for Root { From ba7119acd1e93b45dc50921234c82aad8e454e03 Mon Sep 17 00:00:00 2001 From: "Conrado P. L. Gouvea" Date: Thu, 1 Jul 2021 12:15:49 -0300 Subject: [PATCH 3/9] improve Arbitrary implementations to avoid prop_filter --- zebra-chain/Cargo.toml | 4 +++- zebra-chain/src/orchard/arbitrary.rs | 20 +++++++++++--------- zebra-chain/src/sapling/arbitrary.rs | 28 ++++++++++++---------------- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/zebra-chain/Cargo.toml b/zebra-chain/Cargo.toml index 91e303b7dbd..10b6b9bef7c 100644 --- a/zebra-chain/Cargo.toml +++ b/zebra-chain/Cargo.toml @@ -9,7 +9,7 @@ edition = "2018" [features] default = [] -proptest-impl = ["proptest", "proptest-derive", "itertools", "zebra-test"] +proptest-impl = ["proptest", "proptest-derive", "itertools", "zebra-test", "rand", "rand_chacha"] bench = ["zebra-test"] [dependencies] @@ -50,6 +50,8 @@ bls12_381 = "0.5.0" proptest = { version = "0.10", optional = true } proptest-derive = { version = "0.3.0", optional = true } itertools = { version = "0.10.1", optional = true } +rand = { version = "0.8", optional = true } +rand_chacha = { version = "0.3", optional = true } # ZF deps ed25519-zebra = "2" diff --git a/zebra-chain/src/orchard/arbitrary.rs b/zebra-chain/src/orchard/arbitrary.rs index d1ec14bb292..1006bf89eee 100644 --- a/zebra-chain/src/orchard/arbitrary.rs +++ b/zebra-chain/src/orchard/arbitrary.rs @@ -1,8 +1,12 @@ use group::prime::PrimeCurveAffine; use halo2::pasta::pallas; use proptest::{arbitrary::any, array, collection::vec, prelude::*}; +use rand::SeedableRng; +use rand_chacha::ChaChaRng; -use crate::primitives::redpallas::{Signature, SpendAuth, VerificationKey, VerificationKeyBytes}; +use crate::primitives::redpallas::{ + Signature, SigningKey, SpendAuth, VerificationKey, VerificationKeyBytes, +}; use super::{keys, note, tree, Action, AuthorizedAction, Flags, NoteCommitment, ValueCommitment}; @@ -89,14 +93,12 @@ impl Arbitrary for VerificationKeyBytes { type Parameters = (); fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy { - (vec(any::(), 32)) - .prop_filter_map("invalid verification key", |bytes| { - let bytes: [u8; 32] = bytes.try_into().expect("vec is the correct length"); - let vkb = Self::try_from(bytes).expect("a valid generated verification key bytes"); - // Convert to a VerificationKey to make sure it's valid; - // but return the underlying bytes if it works. - let r = VerificationKey::::try_from(vkb); - r.ok().map(|_| vkb) + (prop::array::uniform32(any::())) + .prop_map(|bytes| { + let mut rng = ChaChaRng::from_seed(bytes); + let sk = SigningKey::::new(&mut rng); + let pk = VerificationKey::from(&sk); + pk.into() }) .boxed() } diff --git a/zebra-chain/src/sapling/arbitrary.rs b/zebra-chain/src/sapling/arbitrary.rs index 2ca2d324cf9..434b5e5d1d7 100644 --- a/zebra-chain/src/sapling/arbitrary.rs +++ b/zebra-chain/src/sapling/arbitrary.rs @@ -1,8 +1,10 @@ -use std::convert::{TryFrom, TryInto}; +use std::convert::TryInto; use group::ff::PrimeField; use jubjub::AffinePoint; use proptest::{arbitrary::any, collection::vec, prelude::*}; +use rand::SeedableRng; +use rand_chacha::ChaChaRng; use crate::primitives::Groth16Proof; @@ -113,15 +115,12 @@ impl Arbitrary for SpendVerificationKeyBytesWrapper { type Parameters = (); fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy { - (vec(any::(), 32)) - .prop_filter_map("invalid verification key", |bytes| { - let bytes: [u8; 32] = bytes.try_into().expect("vec is the correct length"); - let vkb = redjubjub::VerificationKeyBytes::::try_from(bytes) - .expect("a valid generated verification key bytes"); - // Convert to a VerificationKey to make sure it's valid; - // but return the underlying bytes if it works. - let r = redjubjub::VerificationKey::::try_from(vkb); - r.ok().map(|_| SpendVerificationKeyBytesWrapper(vkb)) + (prop::array::uniform32(any::())) + .prop_map(|bytes| { + let mut rng = ChaChaRng::from_seed(bytes); + let sk = redjubjub::SigningKey::::new(&mut rng); + let pk = redjubjub::VerificationKey::::from(&sk); + SpendVerificationKeyBytesWrapper(pk.into()) }) .boxed() } @@ -133,13 +132,10 @@ impl Arbitrary for tree::Root { type Parameters = (); fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy { - (vec(any::(), 32)) - .prop_filter_map("invalid Sapling nore commitment tree root", |bytes| { + (vec(any::(), 64)) + .prop_map(|bytes| { let bytes = bytes.try_into().expect("vec is the correct length"); - // Convert to a Scalar to make sure it's valid; - // but return the underlying bytes if it works. - let r = bls12_381::Scalar::from_repr(bytes); - r.map(|_| Self(bytes)) + bls12_381::Scalar::from_bytes_wide(&bytes).to_repr().into() }) .boxed() } From 17a0afc229918b79e95741f9288bf8ad96ec5050 Mon Sep 17 00:00:00 2001 From: Conrado Gouvea Date: Fri, 2 Jul 2021 11:10:21 -0300 Subject: [PATCH 4/9] Apply suggestions from code review Co-authored-by: Janito Vaqueiro Ferreira Filho Co-authored-by: Deirdre Connolly --- zebra-chain/src/transaction/tests/vectors.rs | 8 +++----- zebra-chain/src/transaction/txidhash.rs | 10 +++++----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/zebra-chain/src/transaction/tests/vectors.rs b/zebra-chain/src/transaction/tests/vectors.rs index 9b0e2f8b70b..e147264e8d2 100644 --- a/zebra-chain/src/transaction/tests/vectors.rs +++ b/zebra-chain/src/transaction/tests/vectors.rs @@ -1,9 +1,11 @@ +use std::convert::TryInto; + +use color_eyre::eyre::Result; use lazy_static::lazy_static; use zebra_test::zip0244; use super::super::*; - use crate::{ block::{Block, Height, MAX_BLOCK_BYTES}, parameters::{Network, NetworkUpgrade}, @@ -11,10 +13,6 @@ use crate::{ transaction::txidhash::TxIdHasher, }; -use color_eyre::eyre::Result; - -use std::convert::TryInto; - lazy_static! { pub static ref EMPTY_V5_TX: Transaction = Transaction::V5 { network_upgrade: NetworkUpgrade::Nu5, diff --git a/zebra-chain/src/transaction/txidhash.rs b/zebra-chain/src/transaction/txidhash.rs index 196d6a6f9a6..0b68dd45db8 100644 --- a/zebra-chain/src/transaction/txidhash.rs +++ b/zebra-chain/src/transaction/txidhash.rs @@ -2,15 +2,15 @@ //! from the transaction, using hashing. use std::{convert::TryInto, io}; -use super::Transaction; - +use super::{Hash, Transaction}; use crate::serialization::{sha256d, ZcashSerialize}; -use super::Hash; - /// A Transaction ID hasher. It computes the transaction ID by hashing /// different parts of the transaction, depending on the transaction version. -/// For V5 transactions, it follows ZIP-244 and ZIP-225. +/// For V5 transactions, it follows [ZIP-244] and [ZIP-225]. +/// +/// [ZIP-244]: https://zips.z.cash/zip-0244 +/// [ZIP-225]: https://zips.z.cash/zip-0225 pub(super) struct TxIdHasher<'a> { trans: &'a Transaction, } From 9529d8778aa27d4863fe9042f2cbd964cc2dbba6 Mon Sep 17 00:00:00 2001 From: Conrado Gouvea Date: Fri, 2 Jul 2021 11:17:04 -0300 Subject: [PATCH 5/9] Apply suggestions from code review Co-authored-by: Janito Vaqueiro Ferreira Filho --- zebra-chain/src/transaction/tests/vectors.rs | 22 ++++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/zebra-chain/src/transaction/tests/vectors.rs b/zebra-chain/src/transaction/tests/vectors.rs index e147264e8d2..35e6cedcabd 100644 --- a/zebra-chain/src/transaction/tests/vectors.rs +++ b/zebra-chain/src/transaction/tests/vectors.rs @@ -379,21 +379,21 @@ fn fake_v5_librustzcash_round_trip_for_network(network: Network) { Network::Testnet => zebra_test::vectors::TESTNET_BLOCKS.iter(), }; - for (height, original_bytes) in block_iter { + let overwinter_activation_height = NetworkUpgrade + .activation_height(network) + .expect("a valid height") + .0; + + // skip blocks that are before overwinter as they will not have a valid consensus branch id + let blocks_after_overwinter = blocks_iter.skip_while(|(height, _)| { + *height < overwinter_activation_height + }); + + for (height, original_bytes) in blocks_after_overwinter { let original_block = original_bytes .zcash_deserialize_into::() .expect("block is structurally valid"); - // skip blocks that are before overwinter as they will not have a valid consensus branch id - if *height - < NetworkUpgrade::Overwinter - .activation_height(network) - .expect("a valid height") - .0 - { - continue; - } - let mut fake_block = original_block.clone(); fake_block.transactions = fake_block .transactions From 29b13a05b9c33b6e190d47edffc3f9dabe437a73 Mon Sep 17 00:00:00 2001 From: "Conrado P. L. Gouvea" Date: Fri, 2 Jul 2021 11:53:07 -0300 Subject: [PATCH 6/9] Improvements from code review --- zebra-chain/src/orchard/arbitrary.rs | 20 +++------ zebra-chain/src/sapling/arbitrary.rs | 43 +++++++------------- zebra-chain/src/transaction/tests/vectors.rs | 28 ++++++------- 3 files changed, 33 insertions(+), 58 deletions(-) diff --git a/zebra-chain/src/orchard/arbitrary.rs b/zebra-chain/src/orchard/arbitrary.rs index 1006bf89eee..5d3ae697609 100644 --- a/zebra-chain/src/orchard/arbitrary.rs +++ b/zebra-chain/src/orchard/arbitrary.rs @@ -1,12 +1,8 @@ use group::prime::PrimeCurveAffine; -use halo2::pasta::pallas; +use halo2::{arithmetic::FieldExt, pasta::pallas}; use proptest::{arbitrary::any, array, collection::vec, prelude::*}; -use rand::SeedableRng; -use rand_chacha::ChaChaRng; -use crate::primitives::redpallas::{ - Signature, SigningKey, SpendAuth, VerificationKey, VerificationKeyBytes, -}; +use crate::primitives::redpallas::{Signature, SpendAuth, VerificationKey, VerificationKeyBytes}; use super::{keys, note, tree, Action, AuthorizedAction, Flags, NoteCommitment, ValueCommitment}; @@ -44,8 +40,6 @@ impl Arbitrary for note::Nullifier { type Parameters = (); fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy { - use halo2::arithmetic::FieldExt; - (vec(any::(), 64)) .prop_map(|bytes| { let bytes = bytes.try_into().expect("vec is the correct length"); @@ -93,11 +87,11 @@ impl Arbitrary for VerificationKeyBytes { type Parameters = (); fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy { - (prop::array::uniform32(any::())) + (vec(any::(), 64)) .prop_map(|bytes| { - let mut rng = ChaChaRng::from_seed(bytes); - let sk = SigningKey::::new(&mut rng); - let pk = VerificationKey::from(&sk); + let bytes = bytes.try_into().expect("vec is the correct length"); + let sk = pallas::Scalar::from_bytes_wide(&bytes); + let pk = VerificationKey::from_scalar(&sk); pk.into() }) .boxed() @@ -120,8 +114,6 @@ impl Arbitrary for tree::Root { type Parameters = (); fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy { - use halo2::arithmetic::FieldExt; - (vec(any::(), 64)) .prop_map(|bytes| { let bytes = bytes.try_into().expect("vec is the correct length"); diff --git a/zebra-chain/src/sapling/arbitrary.rs b/zebra-chain/src/sapling/arbitrary.rs index 434b5e5d1d7..dbc664cbffc 100644 --- a/zebra-chain/src/sapling/arbitrary.rs +++ b/zebra-chain/src/sapling/arbitrary.rs @@ -1,6 +1,5 @@ use std::convert::TryInto; -use group::ff::PrimeField; use jubjub::AffinePoint; use proptest::{arbitrary::any, collection::vec, prelude::*}; use rand::SeedableRng; @@ -20,7 +19,7 @@ impl Arbitrary for Spend { ( any::(), any::(), - any::(), + spendauth_verification_key_bytes(), any::(), vec(any::(), 64), ) @@ -28,7 +27,7 @@ impl Arbitrary for Spend { per_spend_anchor, cv: ValueCommitment(AffinePoint::identity()), nullifier, - rk: rk.0, + rk, zkproof: proof, spend_auth_sig: redjubjub::Signature::from({ let mut b = [0u8; 64]; @@ -48,7 +47,7 @@ impl Arbitrary for Spend { fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy { ( any::(), - any::(), + spendauth_verification_key_bytes(), any::(), vec(any::(), 64), ) @@ -56,7 +55,7 @@ impl Arbitrary for Spend { per_spend_anchor: FieldNotPresent, cv: ValueCommitment(AffinePoint::identity()), nullifier, - rk: rk.0, + rk, zkproof: proof, spend_auth_sig: redjubjub::Signature::from({ let mut b = [0u8; 64]; @@ -103,29 +102,15 @@ impl Arbitrary for OutputInTransactionV4 { type Strategy = BoxedStrategy; } -/// A wrapper for a RedJubJub spending verification key. -/// -/// This is used by proptests since we can't implement Arbitrary for the -/// redjubjub::VerificationKeyBytes (it's in another crate). -/// We then implement it for the wrapper type instead. -#[derive(Debug)] -struct SpendVerificationKeyBytesWrapper(redjubjub::VerificationKeyBytes); - -impl Arbitrary for SpendVerificationKeyBytesWrapper { - type Parameters = (); - - fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy { - (prop::array::uniform32(any::())) - .prop_map(|bytes| { - let mut rng = ChaChaRng::from_seed(bytes); - let sk = redjubjub::SigningKey::::new(&mut rng); - let pk = redjubjub::VerificationKey::::from(&sk); - SpendVerificationKeyBytesWrapper(pk.into()) - }) - .boxed() - } - - type Strategy = BoxedStrategy; +/// Creates Strategy for generation VerificationKeyBytes, since the `redjubjub` +/// create does not provide an Arbitrary implementation for it. +fn spendauth_verification_key_bytes( +) -> impl Strategy> { + prop::array::uniform32(any::()).prop_map(|bytes| { + let mut rng = ChaChaRng::from_seed(bytes); + let sk = redjubjub::SigningKey::::new(&mut rng); + redjubjub::VerificationKey::::from(&sk).into() + }) } impl Arbitrary for tree::Root { @@ -135,7 +120,7 @@ impl Arbitrary for tree::Root { (vec(any::(), 64)) .prop_map(|bytes| { let bytes = bytes.try_into().expect("vec is the correct length"); - bls12_381::Scalar::from_bytes_wide(&bytes).to_repr().into() + jubjub::Fq::from_bytes_wide(&bytes).to_bytes().into() }) .boxed() } diff --git a/zebra-chain/src/transaction/tests/vectors.rs b/zebra-chain/src/transaction/tests/vectors.rs index 35e6cedcabd..14f456c038d 100644 --- a/zebra-chain/src/transaction/tests/vectors.rs +++ b/zebra-chain/src/transaction/tests/vectors.rs @@ -227,21 +227,20 @@ fn fake_v5_round_trip_for_network(network: Network) { Network::Testnet => zebra_test::vectors::TESTNET_BLOCKS.iter(), }; - for (height, original_bytes) in block_iter { + let overwinter_activation_height = NetworkUpgrade::Overwinter + .activation_height(network) + .expect("a valid height") + .0; + + // skip blocks that are before overwinter as they will not have a valid consensus branch id + let blocks_after_overwinter = + block_iter.skip_while(|(height, _)| **height < overwinter_activation_height); + + for (height, original_bytes) in blocks_after_overwinter { let original_block = original_bytes .zcash_deserialize_into::() .expect("block is structurally valid"); - // skip blocks that are before overwinter as they will not have a valid consensus branch id - if *height - < NetworkUpgrade::Overwinter - .activation_height(network) - .expect("a valid height") - .0 - { - continue; - } - // skip this block if it only contains v5 transactions, // the block round-trip test covers it already if original_block @@ -379,15 +378,14 @@ fn fake_v5_librustzcash_round_trip_for_network(network: Network) { Network::Testnet => zebra_test::vectors::TESTNET_BLOCKS.iter(), }; - let overwinter_activation_height = NetworkUpgrade + let overwinter_activation_height = NetworkUpgrade::Overwinter .activation_height(network) .expect("a valid height") .0; // skip blocks that are before overwinter as they will not have a valid consensus branch id - let blocks_after_overwinter = blocks_iter.skip_while(|(height, _)| { - *height < overwinter_activation_height - }); + let blocks_after_overwinter = + block_iter.skip_while(|(height, _)| **height < overwinter_activation_height); for (height, original_bytes) in blocks_after_overwinter { let original_block = original_bytes From 92378a6b9e802a270bc3e0346f73ddee7a0745c2 Mon Sep 17 00:00:00 2001 From: "Conrado P. L. Gouvea" Date: Fri, 2 Jul 2021 11:59:32 -0300 Subject: [PATCH 7/9] Rename txidhash.rs -> txid.rs; TxIdHasher -> TxIdBuilder --- zebra-chain/src/transaction.rs | 2 +- zebra-chain/src/transaction/hash.rs | 4 ++-- zebra-chain/src/transaction/tests/vectors.rs | 4 ++-- .../src/transaction/{txidhash.rs => txid.rs} | 14 +++++++------- 4 files changed, 12 insertions(+), 12 deletions(-) rename zebra-chain/src/transaction/{txidhash.rs => txid.rs} (84%) diff --git a/zebra-chain/src/transaction.rs b/zebra-chain/src/transaction.rs index 97bc10530aa..7b2b5f2ea01 100644 --- a/zebra-chain/src/transaction.rs +++ b/zebra-chain/src/transaction.rs @@ -8,7 +8,7 @@ mod lock_time; mod memo; mod serialize; mod sighash; -mod txidhash; +mod txid; #[cfg(any(test, feature = "proptest-impl"))] pub mod arbitrary; diff --git a/zebra-chain/src/transaction/hash.rs b/zebra-chain/src/transaction/hash.rs index 65f4fe3292a..96975a7605e 100644 --- a/zebra-chain/src/transaction/hash.rs +++ b/zebra-chain/src/transaction/hash.rs @@ -7,7 +7,7 @@ use serde::{Deserialize, Serialize}; use crate::serialization::SerializationError; -use super::{txidhash::TxIdHasher, Transaction}; +use super::{txid::TxIdBuilder, Transaction}; /// A transaction hash. /// @@ -19,7 +19,7 @@ pub struct Hash(pub [u8; 32]); impl<'a> From<&'a Transaction> for Hash { fn from(transaction: &'a Transaction) -> Self { - let hasher = TxIdHasher::new(&transaction); + let hasher = TxIdBuilder::new(&transaction); hasher .txid() .expect("zcash_primitives and Zebra transaction formats must be compatible") diff --git a/zebra-chain/src/transaction/tests/vectors.rs b/zebra-chain/src/transaction/tests/vectors.rs index 14f456c038d..3c124594c66 100644 --- a/zebra-chain/src/transaction/tests/vectors.rs +++ b/zebra-chain/src/transaction/tests/vectors.rs @@ -10,7 +10,7 @@ use crate::{ block::{Block, Height, MAX_BLOCK_BYTES}, parameters::{Network, NetworkUpgrade}, serialization::{SerializationError, ZcashDeserialize, ZcashDeserializeInto, ZcashSerialize}, - transaction::txidhash::TxIdHasher, + transaction::txid::TxIdBuilder, }; lazy_static! { @@ -436,7 +436,7 @@ fn zip244_txid() -> Result<()> { for test in zip0244::TEST_VECTORS.iter() { let transaction = test.tx.zcash_deserialize_into::()?; - let hasher = TxIdHasher::new(&transaction); + let hasher = TxIdBuilder::new(&transaction); let txid = hasher.txid()?; assert_eq!(txid.0, test.txid); } diff --git a/zebra-chain/src/transaction/txidhash.rs b/zebra-chain/src/transaction/txid.rs similarity index 84% rename from zebra-chain/src/transaction/txidhash.rs rename to zebra-chain/src/transaction/txid.rs index 0b68dd45db8..3e15121eb70 100644 --- a/zebra-chain/src/transaction/txidhash.rs +++ b/zebra-chain/src/transaction/txid.rs @@ -1,24 +1,24 @@ -//! Transaction ID hashing. Contains code for generating the Transaction ID -//! from the transaction, using hashing. +//! Transaction ID computation. Contains code for generating the Transaction ID +//! from the transaction. use std::{convert::TryInto, io}; use super::{Hash, Transaction}; use crate::serialization::{sha256d, ZcashSerialize}; -/// A Transaction ID hasher. It computes the transaction ID by hashing +/// A Transaction ID builder. It computes the transaction ID by hashing /// different parts of the transaction, depending on the transaction version. /// For V5 transactions, it follows [ZIP-244] and [ZIP-225]. /// /// [ZIP-244]: https://zips.z.cash/zip-0244 /// [ZIP-225]: https://zips.z.cash/zip-0225 -pub(super) struct TxIdHasher<'a> { +pub(super) struct TxIdBuilder<'a> { trans: &'a Transaction, } -impl<'a> TxIdHasher<'a> { - /// Return a new TxIdHasher for the given transaction. +impl<'a> TxIdBuilder<'a> { + /// Return a new TxIdBuilder for the given transaction. pub fn new(trans: &'a Transaction) -> Self { - TxIdHasher { trans } + TxIdBuilder { trans } } /// Compute the Transaction ID for the previously specified transaction. From 8cb303659ab6498df1dbe5b7019c17dbf926bf18 Mon Sep 17 00:00:00 2001 From: Conrado Gouvea Date: Fri, 2 Jul 2021 18:20:54 -0300 Subject: [PATCH 8/9] Update zebra-chain/src/transaction/tests/vectors.rs Co-authored-by: Janito Vaqueiro Ferreira Filho --- zebra-chain/src/transaction/tests/vectors.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/zebra-chain/src/transaction/tests/vectors.rs b/zebra-chain/src/transaction/tests/vectors.rs index 3c124594c66..5a7f667e1e2 100644 --- a/zebra-chain/src/transaction/tests/vectors.rs +++ b/zebra-chain/src/transaction/tests/vectors.rs @@ -203,9 +203,10 @@ fn empty_v5_librustzcash_round_trip() { zebra_test::init(); let tx: &Transaction = &*EMPTY_V5_TX; - let _alt_tx: zcash_primitives::transaction::Transaction = tx - .try_into() - .expect("librustzcash deserialization might work for empty zebra serialized transactions. Hint: if empty transactions fail, but other transactions work, delete this test"); + let _alt_tx: zcash_primitives::transaction::Transaction = tx.try_into().expect( + "librustzcash deserialization might work for empty zebra serialized transactions. \ + Hint: if empty transactions fail, but other transactions work, delete this test", + ); } /// Do a round-trip test on fake v5 transactions created from v4 transactions From 48a9680cd5731a8a521c0aef0e83ab12211b2973 Mon Sep 17 00:00:00 2001 From: Deirdre Connolly Date: Mon, 5 Jul 2021 20:42:58 -0400 Subject: [PATCH 9/9] Fix typo --- zebra-chain/src/sapling/arbitrary.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zebra-chain/src/sapling/arbitrary.rs b/zebra-chain/src/sapling/arbitrary.rs index dbc664cbffc..8d681ef0e6f 100644 --- a/zebra-chain/src/sapling/arbitrary.rs +++ b/zebra-chain/src/sapling/arbitrary.rs @@ -103,7 +103,7 @@ impl Arbitrary for OutputInTransactionV4 { } /// Creates Strategy for generation VerificationKeyBytes, since the `redjubjub` -/// create does not provide an Arbitrary implementation for it. +/// crate does not provide an Arbitrary implementation for it. fn spendauth_verification_key_bytes( ) -> impl Strategy> { prop::array::uniform32(any::()).prop_map(|bytes| {