From 55538537391dbb3f30f940781668cd914ed6114b Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 15 Oct 2021 14:08:42 +0000 Subject: [PATCH] Publish autogenerated nightly docs --- .../blockchain/any/enum.AnyBlockchain.html | 14 +- .../any/enum.AnyBlockchainConfig.html | 14 +- .../enum.CompactFiltersError.html | 16 +- .../struct.BitcoinPeerConfig.html | 14 +- .../struct.CompactFiltersBlockchain.html | 14 +- ...struct.CompactFiltersBlockchainConfig.html | 14 +- .../compact_filters/struct.Mempool.html | 14 +- .../compact_filters/struct.Peer.html | 14 +- .../electrum/struct.ElectrumBlockchain.html | 14 +- .../struct.ElectrumBlockchainConfig.html | 14 +- .../bdk/blockchain/enum.Capability.html | 16 +- .../blockchain/esplora/enum.EsploraError.html | 16 +- .../esplora/struct.EsploraBlockchain.html | 14 +- .../struct.EsploraBlockchainConfig.html | 14 +- .../esplora/struct.EsploraGetHistory.html | 14 +- .../blockchain/struct.EsploraBlockchain.html | 14 +- .../bdk/blockchain/struct.LogProgress.html | 14 +- .../bdk/blockchain/struct.NoopProgress.html | 14 +- .../bdk/database/any/enum.AnyBatch.html | 14 +- .../bdk/database/any/enum.AnyDatabase.html | 14 +- .../database/any/enum.AnyDatabaseConfig.html | 14 +- .../any/struct.SledDbConfiguration.html | 14 +- .../any/struct.SqliteDbConfiguration.html | 14 +- .../memory/struct.MemoryDatabase.html | 14 +- .../bdk/database/struct.SqliteDatabase.html | 14 +- .../bdk/descriptor/enum.Descriptor.html | 22 +- .../latest/bdk/descriptor/enum.Legacy.html | 16 +- .../latest/bdk/descriptor/enum.Segwitv0.html | 16 +- .../bdk/descriptor/error/enum.Error.html | 16 +- .../policy/enum.BuildSatisfaction.html | 14 +- .../descriptor/policy/enum.PolicyError.html | 16 +- .../descriptor/policy/enum.Satisfaction.html | 14 +- .../policy/enum.SatisfiableItem.html | 14 +- .../descriptor/policy/struct.Condition.html | 16 +- .../bdk/descriptor/policy/struct.PkOrF.html | 14 +- .../bdk/descriptor/policy/struct.Policy.html | 14 +- .../struct.DerivedDescriptorKey.html | 18 +- .../bdk/descriptor/struct.Miniscript.html | 22 +- .../bdk/descriptor/template/struct.Bip44.html | 14 +- .../template/struct.Bip44Public.html | 14 +- .../bdk/descriptor/template/struct.Bip49.html | 14 +- .../template/struct.Bip49Public.html | 14 +- .../bdk/descriptor/template/struct.Bip84.html | 14 +- .../template/struct.Bip84Public.html | 14 +- .../bdk/descriptor/template/struct.P2Pkh.html | 14 +- .../descriptor/template/struct.P2Wpkh.html | 14 +- .../template/struct.P2Wpkh_P2Sh.html | 14 +- .../template/trait.DescriptorTemplate.html | 2 +- .../bdk/nightly/latest/bdk/enum.Error.html | 16 +- .../nightly/latest/bdk/enum.KeychainKind.html | 16 +- .../bdk/nightly/latest/bdk/enum.Utxo.html | 14 +- .../docs-rs/bdk/nightly/latest/bdk/index.html | 8 +- .../latest/bdk/keys/bip39/enum.Language.html | 14 +- .../bdk/keys/bip39/enum.MnemonicType.html | 20 +- .../bdk/keys/bip39/struct.Mnemonic.html | 24 +- .../latest/bdk/keys/bip39/struct.Seed.html | 14 +- .../latest/bdk/keys/enum.DescriptorKey.html | 14 +- .../bdk/keys/enum.DescriptorPublicKey.html | 22 +- .../bdk/keys/enum.DescriptorSecretKey.html | 20 +- .../latest/bdk/keys/enum.ExtendedKey.html | 14 +- .../latest/bdk/keys/enum.KeyError.html | 16 +- .../bdk/keys/enum.ScriptContextEnum.html | 14 +- .../bdk/keys/struct.DescriptorSinglePriv.html | 14 +- .../bdk/keys/struct.DescriptorSinglePub.html | 16 +- .../latest/bdk/keys/struct.GeneratedKey.html | 14 +- .../struct.PrivateKeyGenerateOptions.html | 14 +- .../bdk/keys/struct.SortedMultiVec.html | 22 +- .../latest/bdk/keys/trait.DerivableKey.html | 6 +- .../bdk/keys/trait.IntoDescriptorKey.html | 10 +- .../nightly/latest/bdk/macro.descriptor.html | 20 +- .../nightly/latest/bdk/macro.fragment.html | 52 +-- .../latest/bdk/struct.ConfirmationTime.html | 14 +- .../nightly/latest/bdk/struct.FeeRate.html | 14 +- .../nightly/latest/bdk/struct.LocalUtxo.html | 16 +- .../latest/bdk/struct.TransactionDetails.html | 14 +- .../latest/bdk/struct.WeightedUtxo.html | 14 +- .../enum.AddressValidatorError.html | 16 +- .../bdk/wallet/address_validator/index.html | 2 +- .../bdk/wallet/coin_selection/index.html | 2 +- .../struct.BranchAndBoundCoinSelection.html | 14 +- .../struct.CoinSelectionResult.html | 14 +- .../struct.LargestFirstCoinSelection.html | 14 +- .../latest/bdk/wallet/enum.AddressIndex.html | 14 +- .../wallet/export/struct.WalletExport.html | 14 +- .../bdk/wallet/signer/enum.SignerError.html | 16 +- .../bdk/wallet/signer/enum.SignerId.html | 16 +- .../latest/bdk/wallet/signer/index.html | 8 +- .../bdk/wallet/signer/struct.SignOptions.html | 14 +- .../wallet/signer/struct.SignerOrdering.html | 14 +- .../signer/struct.SignersContainer.html | 14 +- .../latest/bdk/wallet/struct.AddressInfo.html | 16 +- .../latest/bdk/wallet/struct.Wallet.html | 14 +- .../tx_builder/enum.ChangeSpendPolicy.html | 16 +- .../wallet/tx_builder/enum.TxOrdering.html | 16 +- .../bdk/wallet/tx_builder/struct.BumpFee.html | 14 +- .../wallet/tx_builder/struct.CreateTx.html | 14 +- .../wallet/tx_builder/struct.TxBuilder.html | 14 +- static/docs-rs/bdk/nightly/latest/main.js | 2 +- ...r-LICENSE.txt => noto-sans-kr-LICENSE.txt} | 0 ...regular.woff => noto-sans-kr-regular.woff} | Bin 287068 -> 279528 bytes .../nightly/latest/noto-sans-kr-regular.woff2 | Bin 0 -> 245248 bytes static/docs-rs/bdk/nightly/latest/rustdoc.css | 2 +- .../bdk/nightly/latest/search-index.js | 2 +- .../latest/src/bdk/blockchain/any.rs.html | 38 +- .../blockchain/compact_filters/mod.rs.html | 40 +-- .../blockchain/compact_filters/peer.rs.html | 118 +++---- .../blockchain/compact_filters/store.rs.html | 136 ++++---- .../blockchain/compact_filters/sync.rs.html | 40 +-- .../src/bdk/blockchain/electrum.rs.html | 24 +- .../src/bdk/blockchain/esplora/mod.rs.html | 6 +- .../src/bdk/blockchain/esplora/ureq.rs.html | 102 +++--- .../latest/src/bdk/blockchain/mod.rs.html | 44 +-- .../latest/src/bdk/blockchain/utils.rs.html | 18 +- .../latest/src/bdk/database/any.rs.html | 122 +++---- .../latest/src/bdk/database/keyvalue.rs.html | 100 +++--- .../latest/src/bdk/database/memory.rs.html | 118 +++---- .../latest/src/bdk/database/mod.rs.html | 62 ++-- .../latest/src/bdk/database/sqlite.rs.html | 260 +++++++------- .../src/bdk/descriptor/checksum.rs.html | 8 +- .../latest/src/bdk/descriptor/derived.rs.html | 38 +- .../latest/src/bdk/descriptor/dsl.rs.html | 148 ++++---- .../latest/src/bdk/descriptor/error.rs.html | 10 +- .../latest/src/bdk/descriptor/mod.rs.html | 118 +++---- .../latest/src/bdk/descriptor/policy.rs.html | 326 +++++++++--------- .../src/bdk/descriptor/template.rs.html | 36 +- .../bdk/nightly/latest/src/bdk/error.rs.html | 32 +- .../nightly/latest/src/bdk/keys/bip39.rs.html | 16 +- .../nightly/latest/src/bdk/keys/mod.rs.html | 152 ++++---- .../bdk/nightly/latest/src/bdk/lib.rs.html | 2 +- .../nightly/latest/src/bdk/psbt/mod.rs.html | 4 +- .../latest/src/bdk/testutils/mod.rs.html | 34 +- .../bdk/nightly/latest/src/bdk/types.rs.html | 54 +-- .../src/bdk/wallet/address_validator.rs.html | 6 +- .../src/bdk/wallet/coin_selection.rs.html | 38 +- .../latest/src/bdk/wallet/export.rs.html | 48 +-- .../nightly/latest/src/bdk/wallet/mod.rs.html | 290 ++++++++-------- .../latest/src/bdk/wallet/signer.rs.html | 106 +++--- .../latest/src/bdk/wallet/time.rs.html | 12 +- .../latest/src/bdk/wallet/tx_builder.rs.html | 104 +++--- .../latest/src/bdk/wallet/utils.rs.html | 24 +- 140 files changed, 2139 insertions(+), 2139 deletions(-) rename static/docs-rs/bdk/nightly/latest/{noto-sans-kr-v13-korean-regular-LICENSE.txt => noto-sans-kr-LICENSE.txt} (100%) rename static/docs-rs/bdk/nightly/latest/{noto-sans-kr-v13-korean-regular.woff => noto-sans-kr-regular.woff} (94%) create mode 100644 static/docs-rs/bdk/nightly/latest/noto-sans-kr-regular.woff2 diff --git a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/any/enum.AnyBlockchain.html b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/any/enum.AnyBlockchain.html index 24021ba699..04760ab3b9 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/any/enum.AnyBlockchain.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/any/enum.AnyBlockchain.html @@ -1,4 +1,4 @@ -AnyBlockchain in bdk::blockchain::any - Rust

Enum bdk::blockchain::any::AnyBlockchain[][src]

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -32,10 +32,10 @@

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/any/enum.AnyBlockchainConfig.html b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/any/enum.AnyBlockchainConfig.html index 84fd90ae65..6d1a5e1f20 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/any/enum.AnyBlockchainConfig.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/any/enum.AnyBlockchainConfig.html @@ -1,4 +1,4 @@ -AnyBlockchainConfig in bdk::blockchain::any - Rust

Enum bdk::blockchain::any::AnyBlockchainConfig[][src]

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -58,10 +58,10 @@ by ==.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/enum.CompactFiltersError.html b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/enum.CompactFiltersError.html index 48a3cbca2d..c948bfd4fe 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/enum.CompactFiltersError.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/enum.CompactFiltersError.html @@ -1,4 +1,4 @@ -CompactFiltersError in bdk::blockchain::compact_filters - Rust

Enum bdk::blockchain::compact_filters::CompactFiltersError[][src]

pub enum CompactFiltersError {
+CompactFiltersError in bdk::blockchain::compact_filters - Rust

Enum bdk::blockchain::compact_filters::CompactFiltersError[][src]

pub enum CompactFiltersError {
 
Show 15 variants InvalidResponse, InvalidHeaders, InvalidFilterHeader, @@ -54,8 +54,8 @@ carries one. Read more

Provides context for this failure. Read more

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -63,11 +63,11 @@ carries one. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.BitcoinPeerConfig.html b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.BitcoinPeerConfig.html index 529f5ba605..0b032eec7f 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.BitcoinPeerConfig.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.BitcoinPeerConfig.html @@ -1,4 +1,4 @@ -BitcoinPeerConfig in bdk::blockchain::compact_filters - Rust

Struct bdk::blockchain::compact_filters::BitcoinPeerConfig[][src]

pub struct BitcoinPeerConfig {
+BitcoinPeerConfig in bdk::blockchain::compact_filters - Rust

Struct bdk::blockchain::compact_filters::BitcoinPeerConfig[][src]

pub struct BitcoinPeerConfig {
     pub address: String,
     pub socks5: Option<String>,
     pub socks5_credentials: Option<(String, String)>,
@@ -17,8 +17,8 @@ by ==. 

impl StructuralPartialEq for BitcoinPeerConfig

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -30,10 +30,10 @@ by ==.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.CompactFiltersBlockchain.html b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.CompactFiltersBlockchain.html index 3620431691..8693de23ad 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.CompactFiltersBlockchain.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.CompactFiltersBlockchain.html @@ -1,4 +1,4 @@ -CompactFiltersBlockchain in bdk::blockchain::compact_filters - Rust

Struct bdk::blockchain::compact_filters::CompactFiltersBlockchain[][src]

pub struct CompactFiltersBlockchain { /* fields omitted */ }
This is supported on crate feature compact_filters only.
Expand description

Structure implementing the required blockchain traits

+CompactFiltersBlockchain in bdk::blockchain::compact_filters - Rust

Struct bdk::blockchain::compact_filters::CompactFiltersBlockchain[][src]

pub struct CompactFiltersBlockchain { /* fields omitted */ }
This is supported on crate feature compact_filters only.
Expand description

Structure implementing the required blockchain traits

Example

See the blockchain::compact_filters module for a usage example.

Implementations

Construct a new instance given a list of peers, a path to store headers and block @@ -22,8 +22,8 @@ speed-up the sync process.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -31,10 +31,10 @@ speed-up the sync process.

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.CompactFiltersBlockchainConfig.html b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.CompactFiltersBlockchainConfig.html index b9abcf5a31..fc7470c431 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.CompactFiltersBlockchainConfig.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.CompactFiltersBlockchainConfig.html @@ -1,4 +1,4 @@ -CompactFiltersBlockchainConfig in bdk::blockchain::compact_filters - Rust

Struct bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig[][src]

pub struct CompactFiltersBlockchainConfig {
+CompactFiltersBlockchainConfig in bdk::blockchain::compact_filters - Rust

Struct bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig[][src]

pub struct CompactFiltersBlockchainConfig {
     pub peers: Vec<BitcoinPeerConfig>,
     pub network: Network,
     pub storage_dir: String,
@@ -20,8 +20,8 @@ by ==. 

impl StructuralPartialEq for CompactFiltersBlockchainConfig

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -33,10 +33,10 @@ by ==.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.Mempool.html b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.Mempool.html index cfa16dc28d..79dea50aa6 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.Mempool.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.Mempool.html @@ -1,4 +1,4 @@ -Mempool in bdk::blockchain::compact_filters - Rust

Struct bdk::blockchain::compact_filters::Mempool[][src]

pub struct Mempool(_);
This is supported on crate feature compact_filters only.
Expand description

Container for unconfirmed, but valid Bitcoin transactions

+Mempool in bdk::blockchain::compact_filters - Rust

Struct bdk::blockchain::compact_filters::Mempool[][src]

pub struct Mempool(_);
This is supported on crate feature compact_filters only.
Expand description

Container for unconfirmed, but valid Bitcoin transactions

It is normally shared between Peers with the use of Arc, so that transactions are not duplicated in memory.

Implementations

Create a new empty mempool

@@ -13,8 +13,8 @@ peers. To do that, b

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -22,10 +22,10 @@ peers. To do that, b

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.Peer.html b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.Peer.html index c19b1edd4d..57baf7b3eb 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.Peer.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.Peer.html @@ -1,4 +1,4 @@ -Peer in bdk::blockchain::compact_filters - Rust

Struct bdk::blockchain::compact_filters::Peer[][src]

pub struct Peer { /* fields omitted */ }
This is supported on crate feature compact_filters only.
Expand description

A Bitcoin peer

+Peer in bdk::blockchain::compact_filters - Rust

Struct bdk::blockchain::compact_filters::Peer[][src]

pub struct Peer { /* fields omitted */ }
This is supported on crate feature compact_filters only.
Expand description

A Bitcoin peer

Implementations

Connect to a peer over a plaintext TCP connection

This function internally spawns a new thread that will monitor incoming messages from the peer, and optionally reply to some of them transparently, like pings

@@ -16,8 +16,8 @@ peer, and optionally reply to some of them transparently, like Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -25,10 +25,10 @@ peer, and optionally reply to some of them transparently, like

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/electrum/struct.ElectrumBlockchain.html b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/electrum/struct.ElectrumBlockchain.html index a642137f0a..4c92c6ce58 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/electrum/struct.ElectrumBlockchain.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/electrum/struct.ElectrumBlockchain.html @@ -1,4 +1,4 @@ -ElectrumBlockchain in bdk::blockchain::electrum - Rust

Struct bdk::blockchain::electrum::ElectrumBlockchain[][src]

pub struct ElectrumBlockchain { /* fields omitted */ }
This is supported on crate feature electrum only.
Expand description

Wrapper over an Electrum Client that implements the required blockchain traits

+ElectrumBlockchain in bdk::blockchain::electrum - Rust

Struct bdk::blockchain::electrum::ElectrumBlockchain[][src]

pub struct ElectrumBlockchain { /* fields omitted */ }
This is supported on crate feature electrum only.
Expand description

Wrapper over an Electrum Client that implements the required blockchain traits

Example

See the blockchain::electrum module for a usage example.

Trait Implementations

This is supported on non-WebAssembly and non-crate feature async-interface only.

Return the set of Capability supported by this backend

@@ -15,8 +15,8 @@

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -24,10 +24,10 @@

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/electrum/struct.ElectrumBlockchainConfig.html b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/electrum/struct.ElectrumBlockchainConfig.html index 214df70de2..1f4cc053d8 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/electrum/struct.ElectrumBlockchainConfig.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/electrum/struct.ElectrumBlockchainConfig.html @@ -1,4 +1,4 @@ -ElectrumBlockchainConfig in bdk::blockchain::electrum - Rust

Struct bdk::blockchain::electrum::ElectrumBlockchainConfig[][src]

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -36,10 +36,10 @@ by ==.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/enum.Capability.html b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/enum.Capability.html index ce393da5ad..01b6f193b9 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/enum.Capability.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/enum.Capability.html @@ -1,4 +1,4 @@ -Capability in bdk::blockchain - Rust

Enum bdk::blockchain::Capability[][src]

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Feeds this value into the given Hasher. Read more

-

Feeds a slice of this type into the given Hasher. Read more

+

Feeds a slice of this type into the given Hasher. Read more

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -30,10 +30,10 @@ by ==.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/enum.EsploraError.html b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/enum.EsploraError.html index e2d2649176..ed407745bd 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/enum.EsploraError.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/enum.EsploraError.html @@ -1,4 +1,4 @@ -EsploraError in bdk::blockchain::esplora - Rust

Enum bdk::blockchain::esplora::EsploraError[][src]

pub enum EsploraError {
+EsploraError in bdk::blockchain::esplora - Rust

Enum bdk::blockchain::esplora::EsploraError[][src]

pub enum EsploraError {
     Ureq(Error),
     UreqTransport(Transport),
     HttpResponse(u16),
@@ -47,8 +47,8 @@ carries one. Read more

Provides context for this failure. Read more

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -56,11 +56,11 @@ carries one. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/struct.EsploraBlockchain.html b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/struct.EsploraBlockchain.html index 98e2403893..7206beab01 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/struct.EsploraBlockchain.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/struct.EsploraBlockchain.html @@ -1,4 +1,4 @@ -EsploraBlockchain in bdk::blockchain::esplora - Rust

Struct bdk::blockchain::esplora::EsploraBlockchain[][src]

pub struct EsploraBlockchain { /* fields omitted */ }
This is supported on crate feature esplora only.
Expand description

Structure that implements the logic to sync with Esplora

+EsploraBlockchain in bdk::blockchain::esplora - Rust

Struct bdk::blockchain::esplora::EsploraBlockchain[][src]

pub struct EsploraBlockchain { /* fields omitted */ }
This is supported on crate feature esplora only.
Expand description

Structure that implements the logic to sync with Esplora

Example

See the blockchain::esplora module for a usage example.

Implementations

This is supported on crate feature ureq only.

Create a new instance of the client from a base URL and the stop_gap.

@@ -17,8 +17,8 @@

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -26,10 +26,10 @@

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/struct.EsploraBlockchainConfig.html b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/struct.EsploraBlockchainConfig.html index d8dc87b5e7..3aad261780 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/struct.EsploraBlockchainConfig.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/struct.EsploraBlockchainConfig.html @@ -1,4 +1,4 @@ -EsploraBlockchainConfig in bdk::blockchain::esplora - Rust

Struct bdk::blockchain::esplora::EsploraBlockchainConfig[][src]

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -41,10 +41,10 @@ by ==.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/struct.EsploraGetHistory.html b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/struct.EsploraGetHistory.html index 02fa3f15f5..f04ab1c047 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/struct.EsploraGetHistory.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/struct.EsploraGetHistory.html @@ -1,10 +1,10 @@ -EsploraGetHistory in bdk::blockchain::esplora - Rust

Struct bdk::blockchain::esplora::EsploraGetHistory[][src]

pub struct EsploraGetHistory { /* fields omitted */ }
This is supported on crate feature esplora only.
Expand description

Data type used when fetching transaction history from Esplora.

+EsploraGetHistory in bdk::blockchain::esplora - Rust

Struct bdk::blockchain::esplora::EsploraGetHistory[][src]

pub struct EsploraGetHistory { /* fields omitted */ }
This is supported on crate feature esplora only.
Expand description

Data type used when fetching transaction history from Esplora.

Trait Implementations

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -12,10 +12,10 @@

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.EsploraBlockchain.html b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.EsploraBlockchain.html index 5dfa8160b6..955499c1f4 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.EsploraBlockchain.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.EsploraBlockchain.html @@ -1,4 +1,4 @@ -EsploraBlockchain in bdk::blockchain - Rust

Struct bdk::blockchain::EsploraBlockchain[][src]

pub struct EsploraBlockchain { /* fields omitted */ }
Expand description

Structure that implements the logic to sync with Esplora

+EsploraBlockchain in bdk::blockchain - Rust

Struct bdk::blockchain::EsploraBlockchain[][src]

pub struct EsploraBlockchain { /* fields omitted */ }
Expand description

Structure that implements the logic to sync with Esplora

Example

See the blockchain::esplora module for a usage example.

Implementations

This is supported on crate features esplora and ureq only.

Create a new instance of the client from a base URL and the stop_gap.

@@ -17,8 +17,8 @@

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -26,10 +26,10 @@

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.LogProgress.html b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.LogProgress.html index d09f52c3c4..30f322a436 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.LogProgress.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.LogProgress.html @@ -1,12 +1,12 @@ -LogProgress in bdk::blockchain - Rust

Struct bdk::blockchain::LogProgress[][src]

pub struct LogProgress;
Expand description

Type that implements Progress and logs at level INFO every update received

+LogProgress in bdk::blockchain - Rust

Struct bdk::blockchain::LogProgress[][src]

pub struct LogProgress;
Expand description

Type that implements Progress and logs at level INFO every update received

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Send a new progress update Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -18,10 +18,10 @@

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.NoopProgress.html b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.NoopProgress.html index 6b2ecaf8d1..6ec86e5214 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.NoopProgress.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.NoopProgress.html @@ -1,12 +1,12 @@ -NoopProgress in bdk::blockchain - Rust

Struct bdk::blockchain::NoopProgress[][src]

pub struct NoopProgress;
Expand description

Type that implements Progress and drops every update received

+NoopProgress in bdk::blockchain - Rust

Struct bdk::blockchain::NoopProgress[][src]

pub struct NoopProgress;
Expand description

Type that implements Progress and drops every update received

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Send a new progress update Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -18,10 +18,10 @@

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyBatch.html b/static/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyBatch.html index 15377cf252..abe12e915a 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyBatch.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyBatch.html @@ -1,4 +1,4 @@ -AnyBatch in bdk::database::any - Rust

Enum bdk::database::any::AnyBatch[][src]

pub enum AnyBatch {
+AnyBatch in bdk::database::any - Rust

Enum bdk::database::any::AnyBatch[][src]

pub enum AnyBatch {
     Memory(<MemoryDatabase as BatchDatabase>::Batch),
     Sled(<Tree as BatchDatabase>::Batch),
     Sqlite(<SqliteDatabase as BatchDatabase>::Batch),
@@ -24,8 +24,8 @@ number. Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -33,10 +33,10 @@ number.

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyDatabase.html b/static/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyDatabase.html index b3ebe07663..45d76fc868 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyDatabase.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyDatabase.html @@ -1,4 +1,4 @@ -AnyDatabase in bdk::database::any - Rust

Enum bdk::database::any::AnyDatabase[][src]

pub enum AnyDatabase {
+AnyDatabase in bdk::database::any - Rust

Enum bdk::database::any::AnyDatabase[][src]

pub enum AnyDatabase {
     Memory(MemoryDatabase),
     Sled(Tree),
     Sqlite(SqliteDatabase),
@@ -45,8 +45,8 @@ number. Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -54,10 +54,10 @@ number.

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyDatabaseConfig.html b/static/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyDatabaseConfig.html index cce8e37481..2ef26e7b6b 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyDatabaseConfig.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyDatabaseConfig.html @@ -1,4 +1,4 @@ -AnyDatabaseConfig in bdk::database::any - Rust

Enum bdk::database::any::AnyDatabaseConfig[][src]

pub enum AnyDatabaseConfig {
+AnyDatabaseConfig in bdk::database::any - Rust

Enum bdk::database::any::AnyDatabaseConfig[][src]

pub enum AnyDatabaseConfig {
     Memory(()),
     Sled(SledDbConfiguration),
     Sqlite(SqliteDbConfiguration),
@@ -18,8 +18,8 @@ will find this particularly useful.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -27,10 +27,10 @@ will find this particularly useful.

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/database/any/struct.SledDbConfiguration.html b/static/docs-rs/bdk/nightly/latest/bdk/database/any/struct.SledDbConfiguration.html index 5487064bf7..fc3e01ebdf 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/database/any/struct.SledDbConfiguration.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/database/any/struct.SledDbConfiguration.html @@ -1,4 +1,4 @@ -SledDbConfiguration in bdk::database::any - Rust

Struct bdk::database::any::SledDbConfiguration[][src]

pub struct SledDbConfiguration {
+SledDbConfiguration in bdk::database::any - Rust

Struct bdk::database::any::SledDbConfiguration[][src]

pub struct SledDbConfiguration {
     pub path: String,
     pub tree_name: String,
 }
This is supported on crate feature key-value-db only.
Expand description

Configuration type for a [sled::Tree] database

@@ -11,8 +11,8 @@

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -20,10 +20,10 @@

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/database/any/struct.SqliteDbConfiguration.html b/static/docs-rs/bdk/nightly/latest/bdk/database/any/struct.SqliteDbConfiguration.html index 2d5d6845d5..1ff3406121 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/database/any/struct.SqliteDbConfiguration.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/database/any/struct.SqliteDbConfiguration.html @@ -1,4 +1,4 @@ -SqliteDbConfiguration in bdk::database::any - Rust

Struct bdk::database::any::SqliteDbConfiguration[][src]

pub struct SqliteDbConfiguration {
+SqliteDbConfiguration in bdk::database::any - Rust

Struct bdk::database::any::SqliteDbConfiguration[][src]

pub struct SqliteDbConfiguration {
     pub path: String,
 }
This is supported on crate feature sqlite only.
Expand description

Configuration type for a sqlite::SqliteDatabase database

Fields

path: String

Main directory of the db

@@ -9,8 +9,8 @@

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -18,10 +18,10 @@

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/database/memory/struct.MemoryDatabase.html b/static/docs-rs/bdk/nightly/latest/bdk/database/memory/struct.MemoryDatabase.html index afb930e59e..efdb0cd51b 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/database/memory/struct.MemoryDatabase.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/database/memory/struct.MemoryDatabase.html @@ -1,4 +1,4 @@ -MemoryDatabase in bdk::database::memory - Rust

Struct bdk::database::memory::MemoryDatabase[][src]

pub struct MemoryDatabase { /* fields omitted */ }
Expand description

In-memory ephemeral database

+MemoryDatabase in bdk::database::memory - Rust

Struct bdk::database::memory::MemoryDatabase[][src]

pub struct MemoryDatabase { /* fields omitted */ }
Expand description

In-memory ephemeral database

This database can be used as a temporary storage for wallets that are not kept permanently on a device, or on platforms that don’t provide a filesystem, like wasm32.

Once it’s dropped its content will be lost.

@@ -42,8 +42,8 @@ number. Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -51,10 +51,10 @@ number.

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/database/struct.SqliteDatabase.html b/static/docs-rs/bdk/nightly/latest/bdk/database/struct.SqliteDatabase.html index 58d0996b9e..b26a5cd866 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/database/struct.SqliteDatabase.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/database/struct.SqliteDatabase.html @@ -1,4 +1,4 @@ -SqliteDatabase in bdk::database - Rust

Struct bdk::database::SqliteDatabase[][src]

pub struct SqliteDatabase {
+SqliteDatabase in bdk::database - Rust

Struct bdk::database::SqliteDatabase[][src]

pub struct SqliteDatabase {
     pub path: String,
     pub connection: Connection,
 }
Expand description

Sqlite database stored on filesystem

@@ -44,8 +44,8 @@ number. Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -53,10 +53,10 @@ number.

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Descriptor.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Descriptor.html index 366ed8501c..cdc4273f00 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Descriptor.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Descriptor.html @@ -1,4 +1,4 @@ -Descriptor in bdk::descriptor - Rust

Enum bdk::descriptor::Descriptor[]

Serialize a descriptor to string with its secret keys

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

Whether the descriptor is safe Checks whether all the spend paths in the descriptor are possible on the bitcoin network under the current standardness and consensus rules @@ -82,7 +82,7 @@ sighash when evaluating a CHECKSIG & co. OP code.

output controlled by the given descriptor; add the data to a given TxIn output. Read more

Deserialize this value from the given Serde deserializer. Read more

-

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

Extract the spending policy

Run a predicate on every key in the descriptor, returning whether the predicate returned true for every key Read more

@@ -92,7 +92,7 @@ the predicate returned true for any key Read more<

Parses a string s to return a value of this type. Read more

Parse an expression tree into a descriptor

Feeds this value into the given Hasher. Read more

-

Feeds a slice of this type into the given Hasher. Read more

+

Feeds a slice of this type into the given Hasher. Read more

Convert the object into an abstract policy

This method returns an Ordering between self and other. Read more

Compares and returns the maximum of two values. Read more

@@ -118,8 +118,8 @@ translatefpk returns an error in this case instead.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -131,7 +131,7 @@ translatefpk returns an error in this case instead.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

Converts the given value to a String. Read more

+

Converts the given value to a String. Read more

Translate a struct from one generic to another where the translation for Pk is provided by translatefpk Read more

Translate a struct from one generic to another where the @@ -144,10 +144,10 @@ translation for Pk is provided by translatefpk Read more

Translate a struct from one generic to another where the translation for Pk is provided by translatefpk Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Legacy.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Legacy.html index 02c4bf2c9b..e2df1ff6c9 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Legacy.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Legacy.html @@ -1,4 +1,4 @@ -Legacy in bdk::descriptor - Rust

Enum bdk::descriptor::Legacy[]

pub enum Legacy {}
Expand description

Legacy ScriptContext +Legacy in bdk::descriptor - Rust

Enum bdk::descriptor::Legacy[]

pub enum Legacy {}
Expand description

Legacy ScriptContext To be used as P2SH scripts For creation of Bare scriptpubkeys, construct the Miniscript under Bare ScriptContext

@@ -6,7 +6,7 @@ under Bare ScriptContext

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Feeds this value into the given Hasher. Read more

-

Feeds a slice of this type into the given Hasher. Read more

+

Feeds a slice of this type into the given Hasher. Read more

This method returns an Ordering between self and other. Read more

Compares and returns the maximum of two values. Read more

Compares and returns the minimum of two values. Read more

@@ -73,8 +73,8 @@ ones for satisfaction

Returns whether the script context is Legacy

Returns whether the script context is Segwitv0

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -86,10 +86,10 @@ ones for satisfaction

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Segwitv0.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Segwitv0.html index 988f52b7f6..49a32ac6db 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Segwitv0.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Segwitv0.html @@ -1,9 +1,9 @@ -Segwitv0 in bdk::descriptor - Rust

Enum bdk::descriptor::Segwitv0[]

pub enum Segwitv0 {}
Expand description

Segwitv0 ScriptContext

+Segwitv0 in bdk::descriptor - Rust

Enum bdk::descriptor::Segwitv0[]

pub enum Segwitv0 {}
Expand description

Segwitv0 ScriptContext

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Feeds this value into the given Hasher. Read more

-

Feeds a slice of this type into the given Hasher. Read more

+

Feeds a slice of this type into the given Hasher. Read more

This method returns an Ordering between self and other. Read more

Compares and returns the maximum of two values. Read more

Compares and returns the minimum of two values. Read more

@@ -70,8 +70,8 @@ ones for satisfaction

Returns whether the script context is Legacy

Returns whether the script context is Segwitv0

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -83,10 +83,10 @@ ones for satisfaction

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/error/enum.Error.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/error/enum.Error.html index 01875444a8..59f34650ef 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/error/enum.Error.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/error/enum.Error.html @@ -1,4 +1,4 @@ -Error in bdk::descriptor::error - Rust

Enum bdk::descriptor::error::Error[][src]

Provides context for this failure. Read more

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -59,11 +59,11 @@ carries one. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.BuildSatisfaction.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.BuildSatisfaction.html index fd9eddbd4f..9917bc77e4 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.BuildSatisfaction.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.BuildSatisfaction.html @@ -1,4 +1,4 @@ -BuildSatisfaction in bdk::descriptor::policy - Rust

Enum bdk::descriptor::policy::BuildSatisfaction[][src]

pub enum BuildSatisfaction<'a> {
+BuildSatisfaction in bdk::descriptor::policy - Rust

Enum bdk::descriptor::policy::BuildSatisfaction[][src]

pub enum BuildSatisfaction<'a> {
     None,
     Psbt(&'a Psbt),
     PsbtTimelocks {
@@ -20,8 +20,8 @@ CSV should consider different inputs, but we consider the worst condition for th
 

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -33,10 +33,10 @@ CSV should consider different inputs, but we consider the worst condition for th

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.PolicyError.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.PolicyError.html index 4db8a668c8..2a4e2052b4 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.PolicyError.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.PolicyError.html @@ -1,4 +1,4 @@ -PolicyError in bdk::descriptor::policy - Rust

Enum bdk::descriptor::policy::PolicyError[][src]

pub enum PolicyError {
+PolicyError in bdk::descriptor::policy - Rust

Enum bdk::descriptor::policy::PolicyError[][src]

pub enum PolicyError {
     NotEnoughItemsSelected(String),
     IndexOutOfRange(usize),
     AddOnLeaf,
@@ -35,8 +35,8 @@ carries one. Read more

Provides context for this failure. Read more

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -44,11 +44,11 @@ carries one. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.Satisfaction.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.Satisfaction.html index a58bf0bb83..33fd34df27 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.Satisfaction.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.Satisfaction.html @@ -1,4 +1,4 @@ -Satisfaction in bdk::descriptor::policy - Rust

Enum bdk::descriptor::policy::Satisfaction[][src]

pub enum Satisfaction {
+Satisfaction in bdk::descriptor::policy - Rust

Enum bdk::descriptor::policy::Satisfaction[][src]

pub enum Satisfaction {
     Partial {
         n: usize,
         m: usize,
@@ -42,8 +42,8 @@
 

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -55,10 +55,10 @@

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.SatisfiableItem.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.SatisfiableItem.html index 10e4daecb0..dd474da7c7 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.SatisfiableItem.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.SatisfiableItem.html @@ -1,4 +1,4 @@ -SatisfiableItem in bdk::descriptor::policy - Rust

Enum bdk::descriptor::policy::SatisfiableItem[][src]

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -71,10 +71,10 @@

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.Condition.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.Condition.html index a4bbaf39da..c7df3f42a7 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.Condition.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.Condition.html @@ -1,4 +1,4 @@ -Condition in bdk::descriptor::policy - Rust

Struct bdk::descriptor::policy::Condition[][src]

pub struct Condition {
+Condition in bdk::descriptor::policy - Rust

Struct bdk::descriptor::policy::Condition[][src]

pub struct Condition {
     pub csv: Option<u32>,
     pub timelock: Option<u32>,
 }
Expand description

An extra condition that must be satisfied but that is out of control of the user

@@ -10,7 +10,7 @@

Formats the value using the given formatter. Read more

Returns the “default value” for a type. Read more

Feeds this value into the given Hasher. Read more

-

Feeds a slice of this type into the given Hasher. Read more

+

Feeds a slice of this type into the given Hasher. Read more

This method returns an Ordering between self and other. Read more

Compares and returns the maximum of two values. Read more

Compares and returns the minimum of two values. Read more

@@ -29,8 +29,8 @@ operator.

impl Copy for Condition

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -42,10 +42,10 @@ operator.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.PkOrF.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.PkOrF.html index aecf0a08a7..d60eecff68 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.PkOrF.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.PkOrF.html @@ -1,4 +1,4 @@ -PkOrF in bdk::descriptor::policy - Rust

Struct bdk::descriptor::policy::PkOrF[][src]

pub struct PkOrF { /* fields omitted */ }
Expand description

Raw public key or extended key fingerprint

+PkOrF in bdk::descriptor::policy - Rust

Struct bdk::descriptor::policy::PkOrF[][src]

pub struct PkOrF { /* fields omitted */ }
Expand description

Raw public key or extended key fingerprint

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

@@ -7,8 +7,8 @@

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -20,10 +20,10 @@

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.Policy.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.Policy.html index cf4cd6599e..9f2ac71acc 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.Policy.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.Policy.html @@ -1,4 +1,4 @@ -Policy in bdk::descriptor::policy - Rust

Struct bdk::descriptor::policy::Policy[][src]

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -36,10 +36,10 @@ policy tree

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/struct.DerivedDescriptorKey.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/struct.DerivedDescriptorKey.html index 0d11c92705..3d1e969eab 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/struct.DerivedDescriptorKey.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/struct.DerivedDescriptorKey.html @@ -1,4 +1,4 @@ -DerivedDescriptorKey in bdk::descriptor - Rust

Struct bdk::descriptor::DerivedDescriptorKey[][src]

pub struct DerivedDescriptorKey<'s>(_, _);
Expand description

Extended DescriptorPublicKey that has been derived

+DerivedDescriptorKey in bdk::descriptor - Rust

Struct bdk::descriptor::DerivedDescriptorKey[][src]

pub struct DerivedDescriptorKey<'s>(_, _);
Expand description

Extended DescriptorPublicKey that has been derived

Derived keys are guaranteed to never contain wildcards of any kind

Implementations

Construct a new derived key

Panics if the key is wildcard

@@ -22,7 +22,7 @@ some function which has access to secret key data.

Dereferences the value.

Formats the value using the given formatter. Read more

Feeds this value into the given Hasher. Read more

-

Feeds a slice of this type into the given Hasher. Read more

+

Feeds a slice of this type into the given Hasher. Read more

The associated Hash type with the publicKey

Converts an object to PublicHash

Check if the publicKey is uncompressed. The default @@ -48,8 +48,8 @@ operator.

impl<'s> Eq for DerivedDescriptorKey<'s>

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -61,11 +61,11 @@ operator.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/struct.Miniscript.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/struct.Miniscript.html index ee6aa89e4d..908717304b 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/struct.Miniscript.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/struct.Miniscript.html @@ -1,4 +1,4 @@ -Miniscript in bdk::descriptor - Rust

Struct bdk::descriptor::Miniscript[]

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

Deserialize this value from the given Serde deserializer. Read more

-

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

Extract the spending policy

Run a predicate on every key in the descriptor, returning whether the predicate returned true for every key Read more

@@ -143,7 +143,7 @@ do not clear the

Parse an expression tree into a Miniscript. As a general rule, this should not be called directly; rather go through the descriptor API.

Feeds this value into the given Hasher. Read more

-

Feeds a slice of this type into the given Hasher. Read more

+

Feeds a slice of this type into the given Hasher. Read more

Convert the object into an abstract policy

Ord of Miniscript must depend only on node and not the type information. The type information and extra_properties can be deterministically determined @@ -180,8 +180,8 @@ by the ast.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -193,7 +193,7 @@ by the ast.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

Converts the given value to a String. Read more

+

Converts the given value to a String. Read more

Translate a struct from one generic to another where the translation for Pk is provided by translatefpk Read more

Translate a struct from one generic to another where the @@ -206,10 +206,10 @@ translation for Pk is provided by translatefpk Read more

Translate a struct from one generic to another where the translation for Pk is provided by translatefpk Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip44.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip44.html index 049e971472..8b52636e8a 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip44.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip44.html @@ -1,4 +1,4 @@ -Bip44 in bdk::descriptor::template - Rust

Struct bdk::descriptor::template::Bip44[][src]

pub struct Bip44<K: DerivableKey<Legacy>>(pub K, pub KeychainKind);
Expand description

BIP44 template. Expands to pkh(key/44'/0'/0'/{0,1}/*)

+Bip44 in bdk::descriptor::template - Rust

Struct bdk::descriptor::template::Bip44[][src]

pub struct Bip44<K: DerivableKey<Legacy>>(pub K, pub KeychainKind);
Expand description

BIP44 template. Expands to pkh(key/44'/0'/0'/{0,1}/*)

Since there are hardened derivation steps, this template requires a private derivable key (generally a xprv/tprv).

See Bip44Public for a template that can work with a xpub/tpub.

Example

@@ -18,8 +18,8 @@

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

Convert to wallet descriptor

The alignment of pointer.

The type for initializers.

@@ -28,10 +28,10 @@

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip44Public.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip44Public.html index b104d4b18e..2f82e96f17 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip44Public.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip44Public.html @@ -1,4 +1,4 @@ -Bip44Public in bdk::descriptor::template - Rust

Struct bdk::descriptor::template::Bip44Public[][src]

pub struct Bip44Public<K: DerivableKey<Legacy>>(pub K, pub Fingerprint, pub KeychainKind);
Expand description

BIP44 public template. Expands to pkh(key/{0,1}/*)

+Bip44Public in bdk::descriptor::template - Rust

Struct bdk::descriptor::template::Bip44Public[][src]

pub struct Bip44Public<K: DerivableKey<Legacy>>(pub K, pub Fingerprint, pub KeychainKind);
Expand description

BIP44 public template. Expands to pkh(key/{0,1}/*)

This assumes that the key used has already been derived with m/44'/0'/0'.

This template requires the parent fingerprint to populate correctly the metadata of PSBTs.

See Bip44 for a template that does the full derivation, but requires private data @@ -21,8 +21,8 @@ for the key.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

Convert to wallet descriptor

The alignment of pointer.

The type for initializers.

@@ -31,10 +31,10 @@ for the key.

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip49.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip49.html index 4707817ec7..ba05e5ebfb 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip49.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip49.html @@ -1,4 +1,4 @@ -Bip49 in bdk::descriptor::template - Rust

Struct bdk::descriptor::template::Bip49[][src]

pub struct Bip49<K: DerivableKey<Segwitv0>>(pub K, pub KeychainKind);
Expand description

BIP49 template. Expands to sh(wpkh(key/49'/0'/0'/{0,1}/*))

+Bip49 in bdk::descriptor::template - Rust

Struct bdk::descriptor::template::Bip49[][src]

pub struct Bip49<K: DerivableKey<Segwitv0>>(pub K, pub KeychainKind);
Expand description

BIP49 template. Expands to sh(wpkh(key/49'/0'/0'/{0,1}/*))

Since there are hardened derivation steps, this template requires a private derivable key (generally a xprv/tprv).

See Bip49Public for a template that can work with a xpub/tpub.

Example

@@ -18,8 +18,8 @@

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

Convert to wallet descriptor

The alignment of pointer.

The type for initializers.

@@ -28,10 +28,10 @@

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip49Public.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip49Public.html index abf1c849fb..37f18ea584 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip49Public.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip49Public.html @@ -1,4 +1,4 @@ -Bip49Public in bdk::descriptor::template - Rust

Struct bdk::descriptor::template::Bip49Public[][src]

pub struct Bip49Public<K: DerivableKey<Segwitv0>>(pub K, pub Fingerprint, pub KeychainKind);
Expand description

BIP49 public template. Expands to sh(wpkh(key/{0,1}/*))

+Bip49Public in bdk::descriptor::template - Rust

Struct bdk::descriptor::template::Bip49Public[][src]

pub struct Bip49Public<K: DerivableKey<Segwitv0>>(pub K, pub Fingerprint, pub KeychainKind);
Expand description

BIP49 public template. Expands to sh(wpkh(key/{0,1}/*))

This assumes that the key used has already been derived with m/49'/0'/0'.

This template requires the parent fingerprint to populate correctly the metadata of PSBTs.

See Bip49 for a template that does the full derivation, but requires private data @@ -21,8 +21,8 @@ for the key.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

Convert to wallet descriptor

The alignment of pointer.

The type for initializers.

@@ -31,10 +31,10 @@ for the key.

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip84.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip84.html index 53b76daa92..33c4196803 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip84.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip84.html @@ -1,4 +1,4 @@ -Bip84 in bdk::descriptor::template - Rust

Struct bdk::descriptor::template::Bip84[][src]

pub struct Bip84<K: DerivableKey<Segwitv0>>(pub K, pub KeychainKind);
Expand description

BIP84 template. Expands to wpkh(key/84'/0'/0'/{0,1}/*)

+Bip84 in bdk::descriptor::template - Rust

Struct bdk::descriptor::template::Bip84[][src]

pub struct Bip84<K: DerivableKey<Segwitv0>>(pub K, pub KeychainKind);
Expand description

BIP84 template. Expands to wpkh(key/84'/0'/0'/{0,1}/*)

Since there are hardened derivation steps, this template requires a private derivable key (generally a xprv/tprv).

See Bip84Public for a template that can work with a xpub/tpub.

Example

@@ -18,8 +18,8 @@

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

Convert to wallet descriptor

The alignment of pointer.

The type for initializers.

@@ -28,10 +28,10 @@

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip84Public.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip84Public.html index 3526efa0e8..dfa272f64c 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip84Public.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip84Public.html @@ -1,4 +1,4 @@ -Bip84Public in bdk::descriptor::template - Rust

Struct bdk::descriptor::template::Bip84Public[][src]

pub struct Bip84Public<K: DerivableKey<Segwitv0>>(pub K, pub Fingerprint, pub KeychainKind);
Expand description

BIP84 public template. Expands to wpkh(key/{0,1}/*)

+Bip84Public in bdk::descriptor::template - Rust

Struct bdk::descriptor::template::Bip84Public[][src]

pub struct Bip84Public<K: DerivableKey<Segwitv0>>(pub K, pub Fingerprint, pub KeychainKind);
Expand description

BIP84 public template. Expands to wpkh(key/{0,1}/*)

This assumes that the key used has already been derived with m/84'/0'/0'.

This template requires the parent fingerprint to populate correctly the metadata of PSBTs.

See Bip84 for a template that does the full derivation, but requires private data @@ -21,8 +21,8 @@ for the key.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

Convert to wallet descriptor

The alignment of pointer.

The type for initializers.

@@ -31,10 +31,10 @@ for the key.

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.P2Pkh.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.P2Pkh.html index 52abbfd944..6971860aa4 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.P2Pkh.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.P2Pkh.html @@ -1,4 +1,4 @@ -P2Pkh in bdk::descriptor::template - Rust

Struct bdk::descriptor::template::P2Pkh[][src]

pub struct P2Pkh<K: IntoDescriptorKey<Legacy>>(pub K);
Expand description

P2PKH template. Expands to a descriptor pkh(key)

+P2Pkh in bdk::descriptor::template - Rust

Struct bdk::descriptor::template::P2Pkh[][src]

pub struct P2Pkh<K: IntoDescriptorKey<Legacy>>(pub K);
Expand description

P2PKH template. Expands to a descriptor pkh(key)

Example

use bdk::template::P2Pkh;
 
@@ -19,8 +19,8 @@
 

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

Convert to wallet descriptor

The alignment of pointer.

The type for initializers.

@@ -29,10 +29,10 @@

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.P2Wpkh.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.P2Wpkh.html index 6d1385ea37..e02c776ee6 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.P2Wpkh.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.P2Wpkh.html @@ -1,4 +1,4 @@ -P2Wpkh in bdk::descriptor::template - Rust

Struct bdk::descriptor::template::P2Wpkh[][src]

pub struct P2Wpkh<K: IntoDescriptorKey<Segwitv0>>(pub K);
Expand description

P2WPKH template. Expands to a descriptor wpkh(key)

+P2Wpkh in bdk::descriptor::template - Rust

Struct bdk::descriptor::template::P2Wpkh[][src]

pub struct P2Wpkh<K: IntoDescriptorKey<Segwitv0>>(pub K);
Expand description

P2WPKH template. Expands to a descriptor wpkh(key)

Example

use bdk::template::P2Wpkh;
 
@@ -19,8 +19,8 @@
 

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

Convert to wallet descriptor

The alignment of pointer.

The type for initializers.

@@ -29,10 +29,10 @@

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.P2Wpkh_P2Sh.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.P2Wpkh_P2Sh.html index bfa70c67d5..46b315e140 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.P2Wpkh_P2Sh.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.P2Wpkh_P2Sh.html @@ -1,4 +1,4 @@ -P2Wpkh_P2Sh in bdk::descriptor::template - Rust

Struct bdk::descriptor::template::P2Wpkh_P2Sh[][src]

pub struct P2Wpkh_P2Sh<K: IntoDescriptorKey<Segwitv0>>(pub K);
Expand description

P2WPKH-P2SH template. Expands to a descriptor sh(wpkh(key))

+P2Wpkh_P2Sh in bdk::descriptor::template - Rust

Struct bdk::descriptor::template::P2Wpkh_P2Sh[][src]

pub struct P2Wpkh_P2Sh<K: IntoDescriptorKey<Segwitv0>>(pub K);
Expand description

P2WPKH-P2SH template. Expands to a descriptor sh(wpkh(key))

Example

use bdk::template::P2Wpkh_P2Sh;
 
@@ -19,8 +19,8 @@
 

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

Convert to wallet descriptor

The alignment of pointer.

The type for initializers.

@@ -29,10 +29,10 @@

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/trait.DescriptorTemplate.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/trait.DescriptorTemplate.html index 5c1f6f02f2..53986cf489 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/trait.DescriptorTemplate.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/template/trait.DescriptorTemplate.html @@ -12,7 +12,7 @@ passed directly to the Walletstruct MyP2PKH<K: IntoDescriptorKey<Legacy>>(K); impl<K: IntoDescriptorKey<Legacy>> DescriptorTemplate for MyP2PKH<K> { - fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> { + fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> { Ok(bdk::descriptor!(pkh(self.0))?) } } diff --git a/static/docs-rs/bdk/nightly/latest/bdk/enum.Error.html b/static/docs-rs/bdk/nightly/latest/bdk/enum.Error.html index 4ea012e6e4..dee7f0a3f0 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/enum.Error.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/enum.Error.html @@ -1,4 +1,4 @@ -Error in bdk - Rust

Enum bdk::Error[][src]

pub enum Error {
+Error in bdk - Rust

Enum bdk::Error[][src]

pub enum Error {
 
Show 41 variants InvalidU32Bytes(Vec<u8>), Generic(String), ScriptDoesntHaveAddressForm, @@ -139,8 +139,8 @@ carries one. Read more

Provides context for this failure. Read more

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -148,11 +148,11 @@ carries one. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/enum.KeychainKind.html b/static/docs-rs/bdk/nightly/latest/bdk/enum.KeychainKind.html index 3ba70285dd..6ab116ee6b 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/enum.KeychainKind.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/enum.KeychainKind.html @@ -1,4 +1,4 @@ -KeychainKind in bdk - Rust

Enum bdk::KeychainKind[][src]

Formats the value using the given formatter. Read more

Deserialize this value from the given Serde deserializer. Read more

Feeds this value into the given Hasher. Read more

-

Feeds a slice of this type into the given Hasher. Read more

+

Feeds a slice of this type into the given Hasher. Read more

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

@@ -22,8 +22,8 @@ by ==.

Mutably borrows from an owned value. Read more

Error type if conversion fails

Check if all values are in range and return array-like struct of u5 values

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -38,10 +38,10 @@ Implementations shouldn’t allocate. Read more

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/enum.Utxo.html b/static/docs-rs/bdk/nightly/latest/bdk/enum.Utxo.html index 02d5db3d00..9e652b6dcb 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/enum.Utxo.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/enum.Utxo.html @@ -1,4 +1,4 @@ -Utxo in bdk - Rust

Enum bdk::Utxo[][src]

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -33,10 +33,10 @@ by ==.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/index.html b/static/docs-rs/bdk/nightly/latest/bdk/index.html index 8bd4517d47..951988cbda 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/index.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/index.html @@ -23,7 +23,7 @@ interact with the bitcoin P2P network.

use bdk::blockchain::{noop_progress, ElectrumBlockchain}; use bdk::electrum_client::Client; -fn main() -> Result<(), bdk::Error> { +fn main() -> Result<(), bdk::Error> { let client = Client::new("ssl://electrum.blockstream.info:60002")?; let wallet = Wallet::new( "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/0/*)", @@ -44,7 +44,7 @@ interact with the bitcoin P2P network.

use bdk::database::MemoryDatabase; use bdk::wallet::AddressIndex::New; -fn main() -> Result<(), bdk::Error> { +fn main() -> Result<(), bdk::Error> { let wallet = Wallet::new_offline( "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/0/*)", Some("wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/1/*)"), @@ -67,7 +67,7 @@ interact with the bitcoin P2P network.

use bitcoin::consensus::serialize; use bdk::wallet::AddressIndex::New; -fn main() -> Result<(), bdk::Error> { +fn main() -> Result<(), bdk::Error> { let client = Client::new("ssl://electrum.blockstream.info:60002")?; let wallet = Wallet::new( "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/0/*)", @@ -103,7 +103,7 @@ interact with the bitcoin P2P network.

use bdk::{Wallet, SignOptions}; use bdk::database::MemoryDatabase; -fn main() -> Result<(), bdk::Error> { +fn main() -> Result<(), bdk::Error> { let wallet = Wallet::new_offline( "wpkh([c258d2e4/84h/1h/0h]tprv8griRPhA7342zfRyB6CqeKF8CJDXYu5pgnj1cjL1u2ngKcJha5jjTRimG82ABzJQ4MQe71CV54xfn25BbhCNfEGGJZnxvCDQCd6JkbvxW6h/0/*)", Some("wpkh([c258d2e4/84h/1h/0h]tprv8griRPhA7342zfRyB6CqeKF8CJDXYu5pgnj1cjL1u2ngKcJha5jjTRimG82ABzJQ4MQe71CV54xfn25BbhCNfEGGJZnxvCDQCd6JkbvxW6h/1/*)"), diff --git a/static/docs-rs/bdk/nightly/latest/bdk/keys/bip39/enum.Language.html b/static/docs-rs/bdk/nightly/latest/bdk/keys/bip39/enum.Language.html index bb345d3073..70f8b86fc6 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/keys/bip39/enum.Language.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/keys/bip39/enum.Language.html @@ -1,4 +1,4 @@ -Language in bdk::keys::bip39 - Rust

Enum bdk::keys::bip39::Language[]

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -40,10 +40,10 @@ by ==.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/keys/bip39/enum.MnemonicType.html b/static/docs-rs/bdk/nightly/latest/bdk/keys/bip39/enum.MnemonicType.html index b1d5e996e7..72002de80a 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/keys/bip39/enum.MnemonicType.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/keys/bip39/enum.MnemonicType.html @@ -1,4 +1,4 @@ -MnemonicType in bdk::keys::bip39 - Rust

Enum bdk::keys::bip39::MnemonicType[]

pub enum MnemonicType {
+MnemonicType in bdk::keys::bip39 - Rust

Enum bdk::keys::bip39::MnemonicType[]

pub enum MnemonicType {
     Words12,
     Words15,
     Words18,
@@ -82,14 +82,14 @@ other way.

let word_count = mnemonic_type.word_count();

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

Returns the “default value” for a type. Read more

-

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -101,11 +101,11 @@ other way.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/keys/bip39/struct.Mnemonic.html b/static/docs-rs/bdk/nightly/latest/bdk/keys/bip39/struct.Mnemonic.html index 094c94961e..d08b15deaf 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/keys/bip39/struct.Mnemonic.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/keys/bip39/struct.Mnemonic.html @@ -1,4 +1,4 @@ -Mnemonic in bdk::keys::bip39 - Rust

Struct bdk::keys::bip39::Mnemonic[]

pub struct Mnemonic { /* fields omitted */ }
This is supported on crate feature keys-bip39 only.
Expand description

The primary type in this crate, most tasks require creating or using one.

+Mnemonic in bdk::keys::bip39 - Rust

Struct bdk::keys::bip39::Mnemonic[]

pub struct Mnemonic { /* fields omitted */ }
This is supported on crate feature keys-bip39 only.
Expand description

The primary type in this crate, most tasks require creating or using one.

To create a new Mnemonic from a randomly generated key, call Mnemonic::new().

To get a Mnemonic instance for an existing mnemonic phrase, including those generated by other software or hardware wallets, use Mnemonic::from_phrase().

@@ -65,23 +65,23 @@ specified in BIP0039.

Trait Implementations

Performs the conversion.

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

Consume self and turn it into an ExtendedKey Read more

Consume self and turn it into a DescriptorKey by adding the extra metadata, such as key origin and derivation path Read more

-

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

Type specifying the amount of entropy required e.g. [u8;32]

Extra options required by the generate_with_entropy

Returned error in case of failure

Generate a key given the extra options and the entropy

Generate a key given the options with a random entropy

-

Formats the value using the given formatter.

-

Formats the value using the given formatter.

+

Formats the value using the given formatter.

+

Formats the value using the given formatter.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -94,11 +94,11 @@ key origin and derivation path

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/keys/bip39/struct.Seed.html b/static/docs-rs/bdk/nightly/latest/bdk/keys/bip39/struct.Seed.html index 9f250b8fd3..cd0b07fc57 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/keys/bip39/struct.Seed.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/keys/bip39/struct.Seed.html @@ -1,4 +1,4 @@ -Seed in bdk::keys::bip39 - Rust

Struct bdk::keys::bip39::Seed[]

pub struct Seed { /* fields omitted */ }
This is supported on crate feature keys-bip39 only.
Expand description

The secret value used to derive HD wallet addresses from a Mnemonic phrase.

+Seed in bdk::keys::bip39 - Rust

Struct bdk::keys::bip39::Seed[]

pub struct Seed { /* fields omitted */ }
This is supported on crate feature keys-bip39 only.
Expand description

The secret value used to derive HD wallet addresses from a Mnemonic phrase.

Because it is not possible to create a Mnemonic instance that is invalid, it is therefore impossible to have a Seed instance that is invalid. This guarantees that only a valid, intact mnemonic phrase can be used to derive HD wallet addresses.

@@ -22,8 +22,8 @@ key origin and derivation path

Mutably borrows from an owned value. Read more

Error type if conversion fails

Check if all values are in range and return array-like struct of u5 values

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -39,10 +39,10 @@ Implementations shouldn’t allocate. Read more

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorKey.html b/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorKey.html index 8a5149114e..6c22a70dc3 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorKey.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorKey.html @@ -1,4 +1,4 @@ -DescriptorKey in bdk::keys - Rust

Enum bdk::keys::DescriptorKey[][src]

pub enum DescriptorKey<Ctx: ScriptContext> {
+DescriptorKey in bdk::keys - Rust

Enum bdk::keys::DescriptorKey[][src]

pub enum DescriptorKey<Ctx: ScriptContext> {
     // some variants omitted
 }
Expand description

Container for public or secret keys

Implementations

Create an instance given a public key and a set of valid networks

@@ -10,8 +10,8 @@

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -19,10 +19,10 @@

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorPublicKey.html b/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorPublicKey.html index ac64f9af39..8d207a4ca3 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorPublicKey.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorPublicKey.html @@ -1,4 +1,4 @@ -DescriptorPublicKey in bdk::keys - Rust

Enum bdk::keys::DescriptorPublicKey[]

pub enum DescriptorPublicKey {
+DescriptorPublicKey in bdk::keys - Rust

Enum bdk::keys::DescriptorPublicKey[]

pub enum DescriptorPublicKey {
     SinglePub(DescriptorSinglePub),
     XPub(DescriptorXKey<ExtendedPubKey>),
 }
Expand description

The MiniscriptKey corresponding to Descriptors. This can @@ -22,12 +22,12 @@ and call as_public, or call TranslatePk2::translate_pk2

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

The associated error which can be returned from parsing.

Parses a string s to return a value of this type. Read more

Feeds this value into the given Hasher. Read more

-

Feeds a slice of this type into the given Hasher. Read more

+

Feeds a slice of this type into the given Hasher. Read more

Turn the key into a DescriptorKey within the requested ScriptContext

The associated Hash type with the publicKey

Check if the publicKey is uncompressed. The default @@ -52,8 +52,8 @@ operator.

impl Eq for DescriptorPublicKey

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -65,11 +65,11 @@ operator.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorSecretKey.html b/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorSecretKey.html index 5dcb6c1505..18ac705b6c 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorSecretKey.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorSecretKey.html @@ -1,4 +1,4 @@ -DescriptorSecretKey in bdk::keys - Rust

Enum bdk::keys::DescriptorSecretKey[]

pub enum DescriptorSecretKey {
+DescriptorSecretKey in bdk::keys - Rust

Enum bdk::keys::DescriptorSecretKey[]

pub enum DescriptorSecretKey {
     SinglePriv(DescriptorSinglePriv),
     XPrv(DescriptorXKey<ExtendedPrivKey>),
 }
Expand description

A Secret Key that can be either a single key or an Xprv

@@ -10,16 +10,16 @@ depending on the type of key.

If the key is an “XPrv”, the hardened derivation steps will be applied before converting it to a public key. See the documentation of [DescriptorXKey<bip32::ExtendedPrivKey>::as_public] for more details.

-

Trait Implementations

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

+

Trait Implementations

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

The associated error which can be returned from parsing.

Parses a string s to return a value of this type. Read more

Turn the key into a DescriptorKey within the requested ScriptContext

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -27,11 +27,11 @@ for more details.

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.ExtendedKey.html b/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.ExtendedKey.html index 495b49355f..7661da6833 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.ExtendedKey.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.ExtendedKey.html @@ -1,4 +1,4 @@ -ExtendedKey in bdk::keys - Rust

Enum bdk::keys::ExtendedKey[][src]

pub enum ExtendedKey<Ctx: ScriptContext = Legacy> {
+ExtendedKey in bdk::keys - Rust

Enum bdk::keys::ExtendedKey[][src]

pub enum ExtendedKey<Ctx: ScriptContext = Legacy> {
     Private((ExtendedPrivKey, PhantomData<Ctx>)),
     Public((ExtendedPubKey, PhantomData<Ctx>)),
 }
Expand description

Enum for extended keys that can be either xprv or xpub

@@ -21,8 +21,8 @@ key origin and derivation path Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -30,10 +30,10 @@ key origin and derivation path

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.KeyError.html b/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.KeyError.html index d7865a4a16..ca3a112bcc 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.KeyError.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.KeyError.html @@ -1,4 +1,4 @@ -KeyError in bdk::keys - Rust

Enum bdk::keys::KeyError[][src]

pub enum KeyError {
+KeyError in bdk::keys - Rust

Enum bdk::keys::KeyError[][src]

pub enum KeyError {
     InvalidScriptContext,
     InvalidNetwork,
     InvalidChecksum,
@@ -34,8 +34,8 @@ carries one. Read more

Provides context for this failure. Read more

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -43,11 +43,11 @@ carries one. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.ScriptContextEnum.html b/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.ScriptContextEnum.html index 1a209b5c87..05f27fbb2a 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.ScriptContextEnum.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/keys/enum.ScriptContextEnum.html @@ -1,4 +1,4 @@ -ScriptContextEnum in bdk::keys - Rust

Enum bdk::keys::ScriptContextEnum[][src]

pub enum ScriptContextEnum {
+ScriptContextEnum in bdk::keys - Rust

Enum bdk::keys::ScriptContextEnum[][src]

pub enum ScriptContextEnum {
     Legacy,
     Segwitv0,
 }
Expand description

Enum representation of the known valid ScriptContexts

@@ -15,8 +15,8 @@ by ==.

impl Copy for ScriptContextEnum

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -28,10 +28,10 @@ by ==.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/keys/struct.DescriptorSinglePriv.html b/static/docs-rs/bdk/nightly/latest/bdk/keys/struct.DescriptorSinglePriv.html index cafc8126d2..36dbabcb23 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/keys/struct.DescriptorSinglePriv.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/keys/struct.DescriptorSinglePriv.html @@ -1,4 +1,4 @@ -DescriptorSinglePriv in bdk::keys - Rust

Struct bdk::keys::DescriptorSinglePriv[]

pub struct DescriptorSinglePriv {
+DescriptorSinglePriv in bdk::keys - Rust

Struct bdk::keys::DescriptorSinglePriv[]

pub struct DescriptorSinglePriv {
     pub origin: Option<(Fingerprint, DerivationPath)>,
     pub key: PrivateKey,
 }
Expand description

A Single Descriptor Secret Key with optional origin information

@@ -8,8 +8,8 @@

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -17,10 +17,10 @@

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/keys/struct.DescriptorSinglePub.html b/static/docs-rs/bdk/nightly/latest/bdk/keys/struct.DescriptorSinglePub.html index a9d8545f6c..c63238dd64 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/keys/struct.DescriptorSinglePub.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/keys/struct.DescriptorSinglePub.html @@ -1,4 +1,4 @@ -DescriptorSinglePub in bdk::keys - Rust

Struct bdk::keys::DescriptorSinglePub[]

pub struct DescriptorSinglePub {
+DescriptorSinglePub in bdk::keys - Rust

Struct bdk::keys::DescriptorSinglePub[]

pub struct DescriptorSinglePub {
     pub origin: Option<(Fingerprint, DerivationPath)>,
     pub key: PublicKey,
 }
Expand description

A Single Descriptor Key with optional origin information

@@ -8,7 +8,7 @@

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Feeds this value into the given Hasher. Read more

-

Feeds a slice of this type into the given Hasher. Read more

+

Feeds a slice of this type into the given Hasher. Read more

This method returns an Ordering between self and other. Read more

Compares and returns the maximum of two values. Read more

Compares and returns the minimum of two values. Read more

@@ -26,8 +26,8 @@ operator.

impl Eq for DescriptorSinglePub

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -39,10 +39,10 @@ operator.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/keys/struct.GeneratedKey.html b/static/docs-rs/bdk/nightly/latest/bdk/keys/struct.GeneratedKey.html index 8f36f2d9a5..98012511d6 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/keys/struct.GeneratedKey.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/keys/struct.GeneratedKey.html @@ -1,4 +1,4 @@ -GeneratedKey in bdk::keys - Rust

Struct bdk::keys::GeneratedKey[][src]

pub struct GeneratedKey<K, Ctx: ScriptContext> { /* fields omitted */ }
Expand description

Output of a GeneratableKey key generation

+GeneratedKey in bdk::keys - Rust

Struct bdk::keys::GeneratedKey[][src]

pub struct GeneratedKey<K, Ctx: ScriptContext> { /* fields omitted */ }
Expand description

Output of a GeneratableKey key generation

Implementations

Consumes self and returns the key

Trait Implementations

The resulting type after dereferencing.

Dereferences the value.

@@ -9,8 +9,8 @@ key origin and derivation path Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -18,10 +18,10 @@ key origin and derivation path

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/keys/struct.PrivateKeyGenerateOptions.html b/static/docs-rs/bdk/nightly/latest/bdk/keys/struct.PrivateKeyGenerateOptions.html index 672f14fa46..bb35dd6c96 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/keys/struct.PrivateKeyGenerateOptions.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/keys/struct.PrivateKeyGenerateOptions.html @@ -1,4 +1,4 @@ -PrivateKeyGenerateOptions in bdk::keys - Rust

Struct bdk::keys::PrivateKeyGenerateOptions[][src]

pub struct PrivateKeyGenerateOptions {
+PrivateKeyGenerateOptions in bdk::keys - Rust

Struct bdk::keys::PrivateKeyGenerateOptions[][src]

pub struct PrivateKeyGenerateOptions {
     pub compressed: bool,
 }
Expand description

Options for generating a [PrivateKey]

Defaults to creating compressed keys, which save on-chain bytes and fees

@@ -10,8 +10,8 @@

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -23,10 +23,10 @@

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/keys/struct.SortedMultiVec.html b/static/docs-rs/bdk/nightly/latest/bdk/keys/struct.SortedMultiVec.html index d0718d74b3..02ea14d065 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/keys/struct.SortedMultiVec.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/keys/struct.SortedMultiVec.html @@ -1,4 +1,4 @@ -SortedMultiVec in bdk::keys - Rust

Struct bdk::keys::SortedMultiVec[]

pub struct SortedMultiVec<Pk, Ctx> where
    Pk: MiniscriptKey,
    Ctx: ScriptContext
{ +SortedMultiVec in bdk::keys - Rust

Struct bdk::keys::SortedMultiVec[]

pub struct SortedMultiVec<Pk, Ctx> where
    Pk: MiniscriptKey,
    Ctx: ScriptContext
{ pub k: usize, pub pks: Vec<Pk, Global>, // some fields omitted @@ -38,14 +38,14 @@ length prefix (segwit) or push opcode (pre-segwit) and sighash postfix.

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

Run a predicate on every key in the descriptor, returning whether the predicate returned true for every key Read more

Run a predicate on every key in the descriptor, returning whether the predicate returned true for any key Read more

Feeds this value into the given Hasher. Read more

-

Feeds a slice of this type into the given Hasher. Read more

+

Feeds a slice of this type into the given Hasher. Read more

Convert the object into an abstract policy

This method returns an Ordering between self and other. Read more

Compares and returns the maximum of two values. Read more

@@ -64,8 +64,8 @@ operator.

impl<Pk, Ctx> Eq for SortedMultiVec<Pk, Ctx> where
    Pk: Eq + MiniscriptKey,
    Ctx: Eq + ScriptContext

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -77,11 +77,11 @@ operator.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/keys/trait.DerivableKey.html b/static/docs-rs/bdk/nightly/latest/bdk/keys/trait.DerivableKey.html index 5caa8426f3..6d92435dbc 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/keys/trait.DerivableKey.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/keys/trait.DerivableKey.html @@ -25,7 +25,7 @@ an ExtendedPubKey can impleme } impl<Ctx: ScriptContext> DerivableKey<Ctx> for MyCustomKeyType { - fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { + fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { let xprv = bip32::ExtendedPrivKey { network: self.network, depth: 0, @@ -54,7 +54,7 @@ steps to override the set of valid networks, otherwise only the network specifie } impl<Ctx: ScriptContext> DerivableKey<Ctx> for MyCustomKeyType { - fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { + fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { let xprv = bip32::ExtendedPrivKey { network: bitcoin::Network::Bitcoin, // pick an arbitrary network here depth: 0, @@ -71,7 +71,7 @@ steps to override the set of valid networks, otherwise only the network specifie self, source: Option<bip32::KeySource>, derivation_path: bip32::DerivationPath, - ) -> Result<DescriptorKey<Ctx>, KeyError> { + ) -> Result<DescriptorKey<Ctx>, KeyError> { let descriptor_key = self .into_extended_key()? .into_descriptor_key(source, derivation_path)?; diff --git a/static/docs-rs/bdk/nightly/latest/bdk/keys/trait.IntoDescriptorKey.html b/static/docs-rs/bdk/nightly/latest/bdk/keys/trait.IntoDescriptorKey.html index c4475690cf..2b072b6dd1 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/keys/trait.IntoDescriptorKey.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/keys/trait.IntoDescriptorKey.html @@ -25,7 +25,7 @@ checking.

} impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for MyKeyType { - fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { + fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { self.pubkey.into_descriptor_key() } }
@@ -43,7 +43,7 @@ checking.

} impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for MyKeyType { - fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { + fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { Ok(DescriptorKey::from_public( DescriptorPublicKey::SinglePub(DescriptorSinglePub { origin: None, @@ -65,8 +65,8 @@ checking.

} impl<Ctx: ScriptContext + 'static> IntoDescriptorKey<Ctx> for MyKeyType { - fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { - if Ctx::is_legacy() == self.is_legacy { + fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { + if Ctx::is_legacy() == self.is_legacy { self.pubkey.into_descriptor_key() } else { Err(KeyError::InvalidScriptContext) @@ -89,7 +89,7 @@ makes the compiler (correctly) fail.

} impl IntoDescriptorKey<bdk::miniscript::Segwitv0> for MySegwitOnlyKeyType { - fn into_descriptor_key(self) -> Result<DescriptorKey<bdk::miniscript::Segwitv0>, KeyError> { + fn into_descriptor_key(self) -> Result<DescriptorKey<bdk::miniscript::Segwitv0>, KeyError> { self.pubkey.into_descriptor_key() } } diff --git a/static/docs-rs/bdk/nightly/latest/bdk/macro.descriptor.html b/static/docs-rs/bdk/nightly/latest/bdk/macro.descriptor.html index 3cf1c67646..99953f519b 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/macro.descriptor.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/macro.descriptor.html @@ -1,14 +1,14 @@ descriptor in bdk - Rust

Macro bdk::descriptor[][src]

macro_rules! descriptor {
-    (bare($($minisc : tt) *)) => { ... };
-    (sh(wsh($($minisc : tt) *))) => { ... };
-    (shwsh($($minisc : tt) *)) => { ... };
-    (pk($key : expr)) => { ... };
-    (pkh($key : expr)) => { ... };
-    (wpkh($key : expr)) => { ... };
-    (sh(wpkh($key : expr))) => { ... };
-    (shwpkh($key : expr)) => { ... };
-    (sh($($minisc : tt) *)) => { ... };
-    (wsh($($minisc : tt) *)) => { ... };
+    (bare($($minisc : tt) *)) => { ... };
+    (sh(wsh($($minisc : tt) *))) => { ... };
+    (shwsh($($minisc : tt) *)) => { ... };
+    (pk($key : expr)) => { ... };
+    (pkh($key : expr)) => { ... };
+    (wpkh($key : expr)) => { ... };
+    (sh(wpkh($key : expr))) => { ... };
+    (shwpkh($key : expr)) => { ... };
+    (sh($($minisc : tt) *)) => { ... };
+    (wsh($($minisc : tt) *)) => { ... };
 }
Expand description

Macro to write full descriptors with code

This macro expands to a Result of diff --git a/static/docs-rs/bdk/nightly/latest/bdk/macro.fragment.html b/static/docs-rs/bdk/nightly/latest/bdk/macro.fragment.html index 9f748be2b1..6fbd56c94e 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/macro.fragment.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/macro.fragment.html @@ -1,30 +1,30 @@ fragment in bdk - Rust

Macro bdk::fragment[][src]

macro_rules! fragment {
-    ($modif : tt : $($tail : tt) *) => { ... };
-    (true) => { ... };
-    (false) => { ... };
-    (pk_k($key : expr)) => { ... };
-    (pk($key : expr)) => { ... };
-    (pk_h($key : expr)) => { ... };
-    (after($value : expr)) => { ... };
-    (older($value : expr)) => { ... };
-    (sha256($hash : expr)) => { ... };
-    (hash256($hash : expr)) => { ... };
-    (ripemd160($hash : expr)) => { ... };
-    (hash160($hash : expr)) => { ... };
-    (and_v($($inner : tt) *)) => { ... };
-    (and_b($($inner : tt) *)) => { ... };
-    (and_or($($inner : tt) *)) => { ... };
-    (andor($($inner : tt) *)) => { ... };
-    (or_b($($inner : tt) *)) => { ... };
-    (or_d($($inner : tt) *)) => { ... };
-    (or_c($($inner : tt) *)) => { ... };
-    (or_i($($inner : tt) *)) => { ... };
-    (thresh_vec($thresh : expr, $items : expr)) => { ... };
-    (thresh($thresh : expr, $($inner : tt) *)) => { ... };
-    (multi_vec($thresh : expr, $keys : expr)) => { ... };
-    (multi($thresh : expr $(, $key : expr) +)) => { ... };
-    (sortedmulti($($inner : tt) *)) => { ... };
-    (sortedmulti_vec($($inner : tt) *)) => { ... };
+    ($modif : tt : $($tail : tt) *) => { ... };
+    (true) => { ... };
+    (false) => { ... };
+    (pk_k($key : expr)) => { ... };
+    (pk($key : expr)) => { ... };
+    (pk_h($key : expr)) => { ... };
+    (after($value : expr)) => { ... };
+    (older($value : expr)) => { ... };
+    (sha256($hash : expr)) => { ... };
+    (hash256($hash : expr)) => { ... };
+    (ripemd160($hash : expr)) => { ... };
+    (hash160($hash : expr)) => { ... };
+    (and_v($($inner : tt) *)) => { ... };
+    (and_b($($inner : tt) *)) => { ... };
+    (and_or($($inner : tt) *)) => { ... };
+    (andor($($inner : tt) *)) => { ... };
+    (or_b($($inner : tt) *)) => { ... };
+    (or_d($($inner : tt) *)) => { ... };
+    (or_c($($inner : tt) *)) => { ... };
+    (or_i($($inner : tt) *)) => { ... };
+    (thresh_vec($thresh : expr, $items : expr)) => { ... };
+    (thresh($thresh : expr, $($inner : tt) *)) => { ... };
+    (multi_vec($thresh : expr, $keys : expr)) => { ... };
+    (multi($thresh : expr $(, $key : expr) +)) => { ... };
+    (sortedmulti($($inner : tt) *)) => { ... };
+    (sortedmulti_vec($($inner : tt) *)) => { ... };
 }
Expand description

Macro to write descriptor fragments with code

This macro will be expanded to an object of type Result<(Miniscript<DescriptorPublicKey, _>, KeyMap, ValidNetworks), DescriptorError>. It allows writing diff --git a/static/docs-rs/bdk/nightly/latest/bdk/struct.ConfirmationTime.html b/static/docs-rs/bdk/nightly/latest/bdk/struct.ConfirmationTime.html index 492d39ca1a..4f879f6d11 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/struct.ConfirmationTime.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/struct.ConfirmationTime.html @@ -1,4 +1,4 @@ -ConfirmationTime in bdk - Rust

Struct bdk::ConfirmationTime[][src]

pub struct ConfirmationTime {
+ConfirmationTime in bdk - Rust

Struct bdk::ConfirmationTime[][src]

pub struct ConfirmationTime {
     pub height: u32,
     pub timestamp: u64,
 }
Expand description

Block height and timestamp of the block containing the confirmed transaction

@@ -17,8 +17,8 @@ by ==.

impl Eq for ConfirmationTime

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -30,10 +30,10 @@ by ==.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/struct.FeeRate.html b/static/docs-rs/bdk/nightly/latest/bdk/struct.FeeRate.html index 2edd5a044f..1a28dc3bb4 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/struct.FeeRate.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/struct.FeeRate.html @@ -1,4 +1,4 @@ -FeeRate in bdk - Rust

Struct bdk::FeeRate[][src]

pub struct FeeRate(_);
Expand description

Fee rate

+FeeRate in bdk - Rust

Struct bdk::FeeRate[][src]

pub struct FeeRate(_);
Expand description

Fee rate

Implementations

Create a new instance of FeeRate given a float fee rate in btc/kvbytes

Create a new instance of FeeRate given a float fee rate in satoshi/vbyte

Create a new FeeRate with the default min relay fee value

@@ -26,8 +26,8 @@ operator.

impl Copy for FeeRate

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -39,10 +39,10 @@ operator.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/struct.LocalUtxo.html b/static/docs-rs/bdk/nightly/latest/bdk/struct.LocalUtxo.html index 1a1805fb94..769b85a592 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/struct.LocalUtxo.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/struct.LocalUtxo.html @@ -1,4 +1,4 @@ -LocalUtxo in bdk - Rust

Struct bdk::LocalUtxo[][src]

Formats the value using the given formatter. Read more

Deserialize this value from the given Serde deserializer. Read more

Feeds this value into the given Hasher. Read more

-

Feeds a slice of this type into the given Hasher. Read more

+

Feeds a slice of this type into the given Hasher. Read more

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

@@ -19,8 +19,8 @@ by ==.

impl Eq for LocalUtxo

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -32,10 +32,10 @@ by ==.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/struct.TransactionDetails.html b/static/docs-rs/bdk/nightly/latest/bdk/struct.TransactionDetails.html index c15c400d81..15e0f88677 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/struct.TransactionDetails.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/struct.TransactionDetails.html @@ -1,4 +1,4 @@ -TransactionDetails in bdk - Rust

Struct bdk::TransactionDetails[][src]

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -47,10 +47,10 @@ by ==.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/struct.WeightedUtxo.html b/static/docs-rs/bdk/nightly/latest/bdk/struct.WeightedUtxo.html index 219f9a145b..d48b6dfbdd 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/struct.WeightedUtxo.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/struct.WeightedUtxo.html @@ -1,4 +1,4 @@ -WeightedUtxo in bdk - Rust

Struct bdk::WeightedUtxo[][src]

pub struct WeightedUtxo {
+WeightedUtxo in bdk - Rust

Struct bdk::WeightedUtxo[][src]

pub struct WeightedUtxo {
     pub satisfaction_weight: usize,
     pub utxo: Utxo,
 }
Expand description

A Utxo with its satisfaction_weight.

@@ -14,8 +14,8 @@ by ==.

impl StructuralPartialEq for WeightedUtxo

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -27,10 +27,10 @@ by ==.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/wallet/address_validator/enum.AddressValidatorError.html b/static/docs-rs/bdk/nightly/latest/bdk/wallet/address_validator/enum.AddressValidatorError.html index 17d623682d..ab8c6bc0a2 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/wallet/address_validator/enum.AddressValidatorError.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/wallet/address_validator/enum.AddressValidatorError.html @@ -1,4 +1,4 @@ -AddressValidatorError in bdk::wallet::address_validator - Rust

Enum bdk::wallet::address_validator::AddressValidatorError[][src]

Provides context for this failure. Read more

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -47,11 +47,11 @@ carries one. Read more

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/wallet/address_validator/index.html b/static/docs-rs/bdk/nightly/latest/bdk/wallet/address_validator/index.html index 2b4abe6753..de1eddc104 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/wallet/address_validator/index.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/wallet/address_validator/index.html @@ -19,7 +19,7 @@ successfully to continue.

keychain: KeychainKind, hd_keypaths: &HdKeyPaths, script: &Script - ) -> Result<(), AddressValidatorError> { + ) -> Result<(), AddressValidatorError> { let address = Address::from_script(script, Network::Testnet) .as_ref() .map(Address::to_string) diff --git a/static/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/index.html b/static/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/index.html index 1a4e2a573f..6c58b67242 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/index.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/index.html @@ -17,7 +17,7 @@ be used if it is not explicitly set.

fee_rate: FeeRate, amount_needed: u64, fee_amount: u64, - ) -> Result<CoinSelectionResult, bdk::Error> { + ) -> Result<CoinSelectionResult, bdk::Error> { let mut selected_amount = 0; let mut additional_weight = 0; let all_utxos_selected = required_utxos diff --git a/static/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.BranchAndBoundCoinSelection.html b/static/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.BranchAndBoundCoinSelection.html index da3d47f8fc..752978e7dd 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.BranchAndBoundCoinSelection.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.BranchAndBoundCoinSelection.html @@ -1,4 +1,4 @@ -BranchAndBoundCoinSelection in bdk::wallet::coin_selection - Rust

Struct bdk::wallet::coin_selection::BranchAndBoundCoinSelection[][src]

pub struct BranchAndBoundCoinSelection { /* fields omitted */ }
Expand description

Branch and bound coin selection

+BranchAndBoundCoinSelection in bdk::wallet::coin_selection - Rust

Struct bdk::wallet::coin_selection::BranchAndBoundCoinSelection[][src]

pub struct BranchAndBoundCoinSelection { /* fields omitted */ }
Expand description

Branch and bound coin selection

Code adapted from Bitcoin Core’s implementation and from Mark Erhardt Master’s Thesis: http://murch.one/wp-content/uploads/2016/11/erhardt2016coinselection.pdf

Implementations

Create new instance with target size for change output

Trait Implementations

Perform the coin selection Read more

@@ -7,8 +7,8 @@

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -16,10 +16,10 @@

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.CoinSelectionResult.html b/static/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.CoinSelectionResult.html index 2fc68a28c6..226f0daeda 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.CoinSelectionResult.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.CoinSelectionResult.html @@ -1,4 +1,4 @@ -CoinSelectionResult in bdk::wallet::coin_selection - Rust

Struct bdk::wallet::coin_selection::CoinSelectionResult[][src]

pub struct CoinSelectionResult {
+CoinSelectionResult in bdk::wallet::coin_selection - Rust

Struct bdk::wallet::coin_selection::CoinSelectionResult[][src]

pub struct CoinSelectionResult {
     pub selected: Vec<Utxo>,
     pub fee_amount: u64,
 }
Expand description

Result of a successful coin selection

@@ -10,8 +10,8 @@

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -19,10 +19,10 @@

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.LargestFirstCoinSelection.html b/static/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.LargestFirstCoinSelection.html index 2967b66122..2aad566f5c 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.LargestFirstCoinSelection.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.LargestFirstCoinSelection.html @@ -1,4 +1,4 @@ -LargestFirstCoinSelection in bdk::wallet::coin_selection - Rust

Struct bdk::wallet::coin_selection::LargestFirstCoinSelection[][src]

pub struct LargestFirstCoinSelection;
Expand description

Simple and dumb coin selection

+LargestFirstCoinSelection in bdk::wallet::coin_selection - Rust

Struct bdk::wallet::coin_selection::LargestFirstCoinSelection[][src]

pub struct LargestFirstCoinSelection;
Expand description

Simple and dumb coin selection

This coin selection algorithm sorts the available UTXOs by value and then picks them starting from the largest ones until the required amount is reached.

Trait Implementations

Returns a copy of the value. Read more

@@ -9,8 +9,8 @@ from the largest ones until the required amount is reached.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -22,10 +22,10 @@ from the largest ones until the required amount is reached.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/wallet/enum.AddressIndex.html b/static/docs-rs/bdk/nightly/latest/bdk/wallet/enum.AddressIndex.html index d20d05b94a..bd9730d57b 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/wallet/enum.AddressIndex.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/wallet/enum.AddressIndex.html @@ -1,4 +1,4 @@ -AddressIndex in bdk::wallet - Rust

Enum bdk::wallet::AddressIndex[][src]

pub enum AddressIndex {
+AddressIndex in bdk::wallet - Rust

Enum bdk::wallet::AddressIndex[][src]

pub enum AddressIndex {
     New,
     LastUnused,
     Peek(u32),
@@ -27,8 +27,8 @@ larger stop_gap should be used to monitor for all possibly used addresses.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -36,10 +36,10 @@ larger stop_gap should be used to monitor for all possibly used addresses.

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/wallet/export/struct.WalletExport.html b/static/docs-rs/bdk/nightly/latest/bdk/wallet/export/struct.WalletExport.html index 6ff227a440..2974e2561c 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/wallet/export/struct.WalletExport.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/wallet/export/struct.WalletExport.html @@ -1,4 +1,4 @@ -WalletExport in bdk::wallet::export - Rust

Struct bdk::wallet::export::WalletExport[][src]

pub struct WalletExport {
+WalletExport in bdk::wallet::export - Rust

Struct bdk::wallet::export::WalletExport[][src]

pub struct WalletExport {
     pub blockheight: u32,
     pub label: String,
     // some fields omitted
@@ -25,8 +25,8 @@ returned will be 0.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -34,10 +34,10 @@ returned will be 0.

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/enum.SignerError.html b/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/enum.SignerError.html index e85b17844b..8a126b2a5e 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/enum.SignerError.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/enum.SignerError.html @@ -1,4 +1,4 @@ -SignerError in bdk::wallet::signer - Rust

Enum bdk::wallet::signer::SignerError[][src]

pub enum SignerError {
+SignerError in bdk::wallet::signer - Rust

Enum bdk::wallet::signer::SignerError[][src]

pub enum SignerError {
     MissingKey,
     InvalidKey,
     UserCanceled,
@@ -47,8 +47,8 @@ carries one. Read more

Provides context for this failure. Read more

Wraps this failure in a compatibility wrapper that implements std::error::Error. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -60,11 +60,11 @@ carries one. Read more

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/enum.SignerId.html b/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/enum.SignerId.html index bf5403e67f..d18e4777d2 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/enum.SignerId.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/enum.SignerId.html @@ -1,4 +1,4 @@ -SignerId in bdk::wallet::signer - Rust

Enum bdk::wallet::signer::SignerId[][src]

Performs the conversion.

Performs the conversion.

Feeds this value into the given Hasher. Read more

-

Feeds a slice of this type into the given Hasher. Read more

+

Feeds a slice of this type into the given Hasher. Read more

This method returns an Ordering between self and other. Read more

Compares and returns the maximum of two values. Read more

Compares and returns the minimum of two values. Read more

@@ -31,8 +31,8 @@ operator.

impl Eq for SignerId

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -44,10 +44,10 @@ operator.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/index.html b/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/index.html index 20e1930378..d8824c6050 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/index.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/index.html @@ -8,7 +8,7 @@ through the Wallet::add_ } impl CustomSigner { - fn connect() -> Self { + fn connect() -> Self { CustomSigner { device: CustomHSM::connect() } } } @@ -19,18 +19,18 @@ through the Wallet::add_ psbt: &mut psbt::PartiallySignedTransaction, input_index: Option<usize>, _secp: &Secp256k1<All>, - ) -> Result<(), SignerError> { + ) -> Result<(), SignerError> { let input_index = input_index.ok_or(SignerError::InputIndexOutOfRange)?; self.device.sign_input(psbt, input_index)?; Ok(()) } - fn id(&self, _secp: &Secp256k1<All>) -> SignerId { + fn id(&self, _secp: &Secp256k1<All>) -> SignerId { self.device.get_id() } - fn sign_whole_tx(&self) -> bool { + fn sign_whole_tx(&self) -> bool { false } } diff --git a/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignOptions.html b/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignOptions.html index e981dcc3d4..49d1dfcb62 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignOptions.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignOptions.html @@ -1,4 +1,4 @@ -SignOptions in bdk::wallet::signer - Rust

Struct bdk::wallet::signer::SignOptions[][src]

pub struct SignOptions {
+SignOptions in bdk::wallet::signer - Rust

Struct bdk::wallet::signer::SignOptions[][src]

pub struct SignOptions {
     pub trust_witness_utxo: bool,
     pub assume_height: Option<u32>,
     pub allow_all_sighashes: bool,
@@ -28,8 +28,8 @@ what its value is

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -41,10 +41,10 @@ what its value is

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignerOrdering.html b/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignerOrdering.html index 05b7104659..481b4895a5 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignerOrdering.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignerOrdering.html @@ -1,4 +1,4 @@ -SignerOrdering in bdk::wallet::signer - Rust

Struct bdk::wallet::signer::SignerOrdering[][src]

pub struct SignerOrdering(pub usize);
Expand description

Defines the order in which signers are called

+SignerOrdering in bdk::wallet::signer - Rust

Struct bdk::wallet::signer::SignerOrdering[][src]

pub struct SignerOrdering(pub usize);
Expand description

Defines the order in which signers are called

The default value is 100. Signers with an ordering above that will be called later, and they will thus see the partial signatures added to the transaction once they get to sign themselves.

@@ -23,8 +23,8 @@ operator.

impl Eq for SignerOrdering

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -36,10 +36,10 @@ operator.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignersContainer.html b/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignersContainer.html index 3f8eae4d00..9030cf1d5d 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignersContainer.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignersContainer.html @@ -1,4 +1,4 @@ -SignersContainer in bdk::wallet::signer - Rust

Struct bdk::wallet::signer::SignersContainer[][src]

pub struct SignersContainer(_);
Expand description

Container for multiple signers

+SignersContainer in bdk::wallet::signer - Rust

Struct bdk::wallet::signer::SignersContainer[][src]

pub struct SignersContainer(_);
Expand description

Container for multiple signers

Implementations

Create a map of public keys to secret keys

Default constructor

Adds an external signer to the container for the specified id. Optionally returns the @@ -15,8 +15,8 @@ signer that was previously in the container, if any

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -28,10 +28,10 @@ signer that was previously in the container, if any

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/wallet/struct.AddressInfo.html b/static/docs-rs/bdk/nightly/latest/bdk/wallet/struct.AddressInfo.html index f97a3cd4d2..bd6e963f82 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/wallet/struct.AddressInfo.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/wallet/struct.AddressInfo.html @@ -1,4 +1,4 @@ -AddressInfo in bdk::wallet - Rust

Struct bdk::wallet::AddressInfo[][src]

pub struct AddressInfo {
+AddressInfo in bdk::wallet - Rust

Struct bdk::wallet::AddressInfo[][src]

pub struct AddressInfo {
     pub index: u32,
     pub address: Address,
 }
Expand description

A derived address and the index it was found at @@ -27,8 +27,8 @@ by ==.

impl StructuralPartialEq for AddressInfo

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -36,11 +36,11 @@ by ==.

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/wallet/struct.Wallet.html b/static/docs-rs/bdk/nightly/latest/bdk/wallet/struct.Wallet.html index 71ea52c0ab..410ac16b22 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/wallet/struct.Wallet.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/wallet/struct.Wallet.html @@ -1,4 +1,4 @@ -Wallet in bdk::wallet - Rust

Struct bdk::wallet::Wallet[][src]

pub struct Wallet<B, D> { /* fields omitted */ }
Expand description

A Bitcoin wallet

+Wallet in bdk::wallet - Rust

Struct bdk::wallet::Wallet[][src]

pub struct Wallet<B, D> { /* fields omitted */ }
Expand description

A Bitcoin wallet

A wallet takes descriptors, a database and a blockchain and implements the basic functions that a Bitcoin wallets needs to operate, like generating addresses, returning the balance, @@ -101,8 +101,8 @@ the same structure but with every secret key removed

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -110,10 +110,10 @@ the same structure but with every secret key removed

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Should always be Self

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/enum.ChangeSpendPolicy.html b/static/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/enum.ChangeSpendPolicy.html index d7c76a34e9..97f223230c 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/enum.ChangeSpendPolicy.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/enum.ChangeSpendPolicy.html @@ -1,4 +1,4 @@ -ChangeSpendPolicy in bdk::wallet::tx_builder - Rust

Enum bdk::wallet::tx_builder::ChangeSpendPolicy[][src]

Formats the value using the given formatter. Read more

Returns the “default value” for a type. Read more

Feeds this value into the given Hasher. Read more

-

Feeds a slice of this type into the given Hasher. Read more

+

Feeds a slice of this type into the given Hasher. Read more

This method returns an Ordering between self and other. Read more

Compares and returns the maximum of two values. Read more

Compares and returns the minimum of two values. Read more

@@ -29,8 +29,8 @@ operator.

impl Copy for ChangeSpendPolicy

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -42,10 +42,10 @@ operator.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/enum.TxOrdering.html b/static/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/enum.TxOrdering.html index 03cbae2eee..0868419822 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/enum.TxOrdering.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/enum.TxOrdering.html @@ -1,4 +1,4 @@ -TxOrdering in bdk::wallet::tx_builder - Rust

Enum bdk::wallet::tx_builder::TxOrdering[][src]

Formats the value using the given formatter. Read more

Returns the “default value” for a type. Read more

Feeds this value into the given Hasher. Read more

-

Feeds a slice of this type into the given Hasher. Read more

+

Feeds a slice of this type into the given Hasher. Read more

This method returns an Ordering between self and other. Read more

Compares and returns the maximum of two values. Read more

Compares and returns the minimum of two values. Read more

@@ -30,8 +30,8 @@ operator.

impl Copy for TxOrdering

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -43,10 +43,10 @@ operator.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.BumpFee.html b/static/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.BumpFee.html index 82a9195942..74d55a62f0 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.BumpFee.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.BumpFee.html @@ -1,4 +1,4 @@ -BumpFee in bdk::wallet::tx_builder - Rust

Struct bdk::wallet::tx_builder::BumpFee[][src]

pub struct BumpFee;
Expand description

Marker type to indicate the TxBuilder is being used to bump the fee of an existing transaction.

+BumpFee in bdk::wallet::tx_builder - Rust

Struct bdk::wallet::tx_builder::BumpFee[][src]

pub struct BumpFee;
Expand description

Marker type to indicate the TxBuilder is being used to bump the fee of an existing transaction.

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

@@ -6,8 +6,8 @@

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -19,10 +19,10 @@

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.CreateTx.html b/static/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.CreateTx.html index bc3c167a86..c7d99515ca 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.CreateTx.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.CreateTx.html @@ -1,4 +1,4 @@ -CreateTx in bdk::wallet::tx_builder - Rust

Struct bdk::wallet::tx_builder::CreateTx[][src]

pub struct CreateTx;
Expand description

Marker type to indicate the TxBuilder is being used to create a new transaction (as opposed +CreateTx in bdk::wallet::tx_builder - Rust

Struct bdk::wallet::tx_builder::CreateTx[][src]

pub struct CreateTx;
Expand description

Marker type to indicate the TxBuilder is being used to create a new transaction (as opposed to bumping the fee of an existing one).

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

@@ -7,8 +7,8 @@ to bumping the fee of an existing one).

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -20,10 +20,10 @@ to bumping the fee of an existing one).

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.TxBuilder.html b/static/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.TxBuilder.html index 007f0c8545..52398fb94c 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.TxBuilder.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.TxBuilder.html @@ -1,4 +1,4 @@ -TxBuilder in bdk::wallet::tx_builder - Rust

Struct bdk::wallet::tx_builder::TxBuilder[][src]

pub struct TxBuilder<'a, B, D, Cs, Ctx> { /* fields omitted */ }
Expand description

A transaction builder

+TxBuilder in bdk::wallet::tx_builder - Rust

Struct bdk::wallet::tx_builder::TxBuilder[][src]

pub struct TxBuilder<'a, B, D, Cs, Ctx> { /* fields omitted */ }
Expand description

A transaction builder

A TxBuilder is created by calling build_tx or build_fee_bump on a wallet. After assigning it, you set options on it until finally calling finish to consume the builder and generate the transaction.

@@ -204,8 +204,8 @@ transaction we are bumping.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

@@ -217,10 +217,10 @@ transaction we are bumping.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

\ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/main.js b/static/docs-rs/bdk/nightly/latest/main.js index 67e23ae0a0..7d84536520 100644 --- a/static/docs-rs/bdk/nightly/latest/main.js +++ b/static/docs-rs/bdk/nightly/latest/main.js @@ -5,4 +5,4 @@ if(!String.prototype.startsWith){String.prototype.startsWith=function(searchStri and const.","Search functions by type signature (e.g., vec -> usize or \ * -> vec)","Search multiple things at once by splitting your query with comma (e.g., \ str,u8 or String,struct:Vec,test)","You can look for items with an exact name by putting double quotes around \ - your request: \"string\"","Look for items inside another one by searching for a path: vec::Vec",].map(function(x){return"

"+x+"

"}).join("");var div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

Search Tricks

"+infos;container.appendChild(book_info);container.appendChild(div_shortcuts);container.appendChild(div_infos);var rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";var rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc 1.57.0-nightly (485ced56b 2021-10-07)";rustdoc_version.appendChild(rustdoc_version_code);container.appendChild(rustdoc_version);popup.appendChild(container);insertAfter(popup,searchState.outputElement());buildHelperPopup=function(){}};onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){var reset_button_timeout=null;window.copy_path=function(but){var parent=but.parentElement;var path=[];onEach(parent.childNodes,function(child){if(child.tagName==='A'){path.push(child.textContent)}});var el=document.createElement('textarea');el.value=path.join('::');el.setAttribute('readonly','');el.style.position='absolute';el.style.left='-9999px';document.body.appendChild(el);el.select();document.execCommand('copy');document.body.removeChild(el);but.children[0].style.display='none';var tmp;if(but.childNodes.length<2){tmp=document.createTextNode('✓');but.appendChild(tmp)}else{onEachLazy(but.childNodes,function(e){if(e.nodeType===Node.TEXT_NODE){tmp=e;return true}});tmp.textContent='✓'}if(reset_button_timeout!==null){window.clearTimeout(reset_button_timeout)}function reset_button(){tmp.textContent='';reset_button_timeout=null;but.children[0].style.display=""}reset_button_timeout=window.setTimeout(reset_button,1000)}}()) \ No newline at end of file + your request: \"string\"","Look for items inside another one by searching for a path: vec::Vec",].map(function(x){return"

"+x+"

"}).join("");var div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

Search Tricks

"+infos;container.appendChild(book_info);container.appendChild(div_shortcuts);container.appendChild(div_infos);var rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";var rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc 1.57.0-nightly (e1e9319d9 2021-10-14)";rustdoc_version.appendChild(rustdoc_version_code);container.appendChild(rustdoc_version);popup.appendChild(container);insertAfter(popup,searchState.outputElement());buildHelperPopup=function(){}};onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){var reset_button_timeout=null;window.copy_path=function(but){var parent=but.parentElement;var path=[];onEach(parent.childNodes,function(child){if(child.tagName==='A'){path.push(child.textContent)}});var el=document.createElement('textarea');el.value=path.join('::');el.setAttribute('readonly','');el.style.position='absolute';el.style.left='-9999px';document.body.appendChild(el);el.select();document.execCommand('copy');document.body.removeChild(el);but.children[0].style.display='none';var tmp;if(but.childNodes.length<2){tmp=document.createTextNode('✓');but.appendChild(tmp)}else{onEachLazy(but.childNodes,function(e){if(e.nodeType===Node.TEXT_NODE){tmp=e;return true}});tmp.textContent='✓'}if(reset_button_timeout!==null){window.clearTimeout(reset_button_timeout)}function reset_button(){tmp.textContent='';reset_button_timeout=null;but.children[0].style.display=""}reset_button_timeout=window.setTimeout(reset_button,1000)}}()) \ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/noto-sans-kr-v13-korean-regular-LICENSE.txt b/static/docs-rs/bdk/nightly/latest/noto-sans-kr-LICENSE.txt similarity index 100% rename from static/docs-rs/bdk/nightly/latest/noto-sans-kr-v13-korean-regular-LICENSE.txt rename to static/docs-rs/bdk/nightly/latest/noto-sans-kr-LICENSE.txt diff --git a/static/docs-rs/bdk/nightly/latest/noto-sans-kr-v13-korean-regular.woff b/static/docs-rs/bdk/nightly/latest/noto-sans-kr-regular.woff similarity index 94% rename from static/docs-rs/bdk/nightly/latest/noto-sans-kr-v13-korean-regular.woff rename to static/docs-rs/bdk/nightly/latest/noto-sans-kr-regular.woff index 01d6b6b54664c35f8180f7c245514d22751f9307..65e939c6b9f540950bc2bd4c41d60c556ddca6f7 100644 GIT binary patch delta 7403 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 delta 15024 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 a^YX{{hQ`L~1{kRT^4K!d;$#5av05+ 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

b*DZBw@G=fnTXXqJ z&5eD5>lZpUJ!bHAKX?7f_Dk2Aep}D=+*P(m`%B+t|EKkSrcn>rOrsBOzhc|+&G?y8 z%&{M`XS0_1xU9dRm!8+gBH1Z8?b@XNm*o?mEUS-7Py2Us%I!5bw%vZIRDaWC!H4S$ zZwE>*%~RKyGwIZIU2d)KYlK#ruT6gCu_JbqZeEqy{u}(&sii&_L!G~GSzn)j^!36%I?_+d_lG;HD>!>EELzHLCwKbNhdWbK_xr9c|8sTYHE~ymE7Mlg zU)*Y#ljC>HXk)2PU;o=rJM2GB<&;nsZIsPXVcSdU=e=YH+WyDoiOF6+5lq*z_7sYJ_f zNqH&<14*X*6w8y&>FJ%{(3 z*X>_g1*fkqh~CDgeDPQQ&W&1s_DdP;nkr=+&9J`5E>S-~T*>!u~oxOTO6 zeU*QdXL0s{6Q$~gRf|_F_7rV+l(ef9q`qA9=i9YAt0P-9?`P(mJ#EvQyYtjSE|#zZ`-B)pwH6s_N*~*(_gRqb8GXmJxp_#+zV2Ke0wDgCMT^YZln%Qpy3JX(I7X}V?7?0bJXelZ^IbE%BJ^FyuBD%WML#;OUT zCmw98@V7aVnEvW->c=IEYTs?C)MdMGd?`1YC%)DtNx1SnYxTaJzr5XdZ~MBoH+xCy z>+?R^>vYO_L{#QzKe>46%>uKW_lAn=U;kNHni`EuQ!;c z=|$XY`RNI)Va#!NOhtr!`ILJ16+#p0C8| zx}(456tL{C3TbGRek5l+QCk16QO?@1jiMfbJw7hKG=*jgd#btm9iBL6$2R6E=WZJ> zd}tnaPg(xso8OmBwOf?mzxC_fx{S^A$y7mw%PZD}_$>(ab>8Zbt-9524d>Fv zi&pTYxy2Vg4LenT@2$s^eX2!sT|3PJcX;0WEnc`lXss#7_bJW)UWe4(;53d&etdB2 z&!$MGCl7wRNZ3VcuV~xG8uIDwl)rO!>xAyIt7e?OV&>yZH&nN3%=o{V@$!%L{Ii66 zv@dKj$~ySw?bL<>f4T2Qi=^tq94f9yFtE6>o(ZTwXZ}d~Q)=sH=h4zpl!g+SSD0nwT-)znJmQqAr~Ay1*hEK8XVh!UZ2*pY`ij?+bnv!=CmG-nt1j zUYi4+zqeqYR8snI=K30|bsu^eKQ~W|+Onr7YR;aWLJ#sj-K*#J|Kq`JRV2k{d$5u1 zu&S-v%SBonpS(O*%zaIHovg)o;}yqezM183Rj%q-pRTMDOzKQXWGUHR=&?izl@d2N+5BRNZAlB*Y`FSK!DkpAD` z!O}0|y5O-+x47AHCzExv{{1-CdwvJ^o9Po1s&CHQw?y@qdw*yBBQ2lVd*xo~$43Y2 zi=0vnU&~|HwQutID?h8wiA7x4fAQ?>{cr7d1$_vUZW9jvTM^{C)GTRJ;g0ls$4zdk zNNtLYH&-`A{dM_Lx*_q@U-l;bDIZ14Z~XABaQ0-=_?WxuUDKqB1smTOu6(v>f40Y|37v0t zsqK7n)NSd+*^OI;_7?>_TlKqS1&8$CGQH{Ai3ilL>`J^>mg$r!7`Nt$UP5%f`4m^D zQbEyGo@802e&DB6V^2`Gd%{g5% zmUS6n$~w}KOOGAiv6Nwx*tb*s&EaPru!d>q=I?ZHVcYe9-MdBUle}c}9M8fp z4IA%F`>_3afL75>o@;fQr5(qQ&T2Q=a>2c0!UeVTBeoN_ZNe!X$ScSpBBi)tjMu-^Xg?|9P!;W(L_2O7JRrU>xyoH9S!Ydv3^^YKGx z%Qe!wI@x#fi#r@s)2;RS8v3Nerf2?@g=Sx@3LbHOyLK_|%A-t;{9`ZIoImg^%Evaq zE>FCWcU9Vt8(;Z%O)};PUr{8p<%Bia__#{GK-@%WlgCl***hkOt&m`HWL}hVyS&P0s!)sP>v`e%Z1Wx+2o@Eu z`Fi2UMp2K3v^h1#=W@~$H|HJ=-X2rFx!V4-|DSIUEw+em*nH9ai0iD@o7Ec*C}}M| zdY4!KaOA&p7n#iqkA-y1mo_|Au4QGmyk%C!&X?`pZ~ouAz##WM{IIC+yZ;v#9a(3i zmA~@Fo1CV_M@}Wqo3$YK;y&}Twd<=NKMr{J|7l?5d}j$wuJ_9Xw;lhl6z$m6f7T}Z ztYl$98QU5rk1B(6|6jbh`Lo}z{Ezkj%!`8eHgfT7v^~W5FkpL8gnVwr>O&vr)ZYAk z@3%$E`+q-Hl)1dk(`ezpV6|0C=H$Jpd#!&z4%qj8aq_Lg+&K#c?l~{EG0nIiy0`O; z+0~^PA2lWfr_9W(J$a%;*RM6;@x^!}?}I-%&Zc}+UKAO>;}pAY^JitQr`rE^#jAQ8 zZMsw6Ud&`H-FsoBxl#P}c|RXloYrf89-rs<+y3*rw6APWvojanJM8*KGT3s4)-R{AGhh@rK=WD(yFn;R4BE0M|quN88b&iToiT1`RJVnX#*(Xco?>!uP zse1X%`A6Y4o!nw`F&$f$h7N{or?_4Me~aV@A~MW6WT zXi?k+fI5(`TLAI#+bJi`BFB;k@_r#bT^v0@dmDb*>(^DAuI@iEGw1xT7PDP9pOy0P^ztlX zHamVzQ|f{GRflCVoLBu79JEf(F7~`4omuVl{=ISL=_SL$Zx<>L1s%E8F+Vr> zVrklgoI{-91yY5TN3M&jm-k&b|FhiOy5($s^0&5E$8QBZdARgV)l)}qspu>JuiVHl z>r4H$W%r9Vd7T~JA2>t377Da6O6`bz^y^dpgM|@i7_KF<+Z{@@Sl+txqr?KGZZMhp26+1W2ZhZYIPrcTATlcb;UJgEwXK(we<|K7W2>c{!>2c(7!9vHr+(-faJ_Ii`869 zI%KCzZZ>`N{nCO@3zjm(*?pVo|LvW9+qe5E^>#ZK*IVyh|NVqXR+;3NQ-0EQb#F`c zAD#$l(ACY~Q+>?#N9B%^w9S+B9oa3H@A)JcY#68$mB|tk!S#awZ-PGmn{3~`?~kmQ zdTvXg&Er*oI9{0Ihv43%LzOwD!sC|yfGfE#$z5n9O z|C38+zMr;bRghhE(*boYuiBgdt<{@v|Kd#6n|1m4>bBrHPgw5vUU67`l|PvK#=RMz zUNS{p2sYdI@ay$wpXRl_X1~e&+tT~%tgWt#PByUU=`Rjj_U>K49hJBHb_dx$U?`A? zldEf)YgcwcrLQ?_R8UC6Lnk>29&?^8UWE<5ypP zTz61sUzpN-E$cN#qI~DnDg@l^{A6cZSG~G_{O9>@e(rv5yG6+l8CNe*;otag*7h^= zcN9-vQGVm?_w!%Xs)O>A?Dq7VeMo%qBewR?@wN}=jekw5U0GgV|7NA&&iAjF+$Xs6 zJYt?CAMnjv*YsFs2I~uz<5Nu1%%trYw`UloN*g~~S@ie8`s2KZJHm&yn+fmB-p)?{yW~ai^UC+FJc6swYbiU(|M|Jzz>Qsd z4&S?(`GzM>F7U)>^Qrq^>z%N^z5ip7_6)UowakADWB)puDdyS#es*fBJ=>aJkBi+N z@B3d|I@Nyf<6|D1KRqorZJFD7_~Oya2I0ZIVawxt+{EwOe{W!rd|bEotWx9L(#OJ| zqf8R3UDy4dp?EikpXchdlI_{opUTePKhb#E=|in`Iz^8Ijy`?e=Q1z<*U4nX>1&SlSQ&@^g9N+%Cc8crf zZ22Ijty@|1P5JssbGPyyhZ!QpS2c>C{7&DMY&_@FlApf>^B31irKJXJ<2AjPvw1?C zgj&&RwzB>27s#%eXuTpb^9{?C|F&iM-rVUAR_zg7tyt-NwLkJde}Broik5rsZAh$roRNO(bzx;Eb8uXU**mXax2$u1n=@Y&QGXn<<{oo5)A{+QrPGpri|(y)@YA1M zepT{9$ET^~_h%KjE?5|S?zxV|x*1mvZ_L)XlGb@K_4(}0eCY|t3ZE_Cn?7Z&?H%3Z z-)mkO=8J6o^FDs!Wyb0qDHFX-V~jfG+NJ*;V9TmK`hLL**DEJZb3Huxx&6GEdVG6) zMLDnD7j`$Ri#IZr3ZuH_R`^I=Qgz;THNL)?tK|RwHjU?tL?a&^csI+}YTMrpYf?m_ zt)}%^1fRKg`-tp$Q|`a58}+MY?iD(jUYvIBoND{5A6b3j2dxrvS`>1=8PuH1nfK=F z!q3Z&t+_DYJGU>+a@9`9AGr_LFK%aAt1cjZzr=Uxxg9dX{=zv;+t0t0eEdB2jJoH@JroI?AbX`&2) z3Jg#DH6vUnEd8*wFTtg{VZ}5vj&C*J&A-Mynxfxgc0TBzTk_@^a+@AJI)9UM`32jn z2Q30?ltg!jT827tPuLrfaU{ErF<|nNxLZ#bnTN03&#t?lt29$x=l<urH{S&(Zw=o&ac7e6;{*kvP02?h zFJC@;{6vYdNoSeEEA4RZ#$9V3bKdM|k#6CuzL2>2qVtuLZN47XiAGzl7ry=aKhrAZ zxnFe9Qy1qovQ3}NP0jW1Mpc@9?0&+3>Ajj=i_sd^>a1A~>}&5EI|(d`&tE9Gx0XX7 zEosK{8N2KM?}^>K#pLsa@LPS6f18d^sF^6{m89Bdxb!ot{f6B4{JwsLM#=XkA7YG> zI_Ubccgu_ZU9+TbRqJ&8nfBF7G~?kCE?w{Z9h2f_PH&7g4vQ*EoVWT=?6b~Gn^u-Q zQxPjIPQ3d1?|VJ1SuYd2c^ZGd={s<8vYapP`2~VXzZN?!(q7gwyMB#ZcTH8(#LSeI zc|NV`Ca;dKXnSrJwdd4~U2_h0{=Br8!=Eel#o7@2Y44cQyH504-`;zVrBKh}_c5M% zaTyJo(kpLxugkQbJ8{8!otW*71swU4o_Kra-Hd0L#q!jK{ntDFlahLwEmJz$rz*=o zueVpUX}e)jb?&KWVOKiu)8f<~C-%waf#Ui*kHvnODjl}eC+~#&>B~31+T7I=SShj5 z$5wEayLai8r0+L%Ez4ccXcfNr@7Ng3R5r(V=yTW~Qp#J$(l*Q_cnV zH2rrx+Vn<7RIYV;_KlQllhl2;`}dVbSdEbHQ6fJ=SALlMZjp!8+4P@g zk<~7;0;%Wd1YOk`=UXkC-{{}A8Xmb@HKKi=s1!j~Lnb?9$LrtR%noR__3My0*^ z*l^?dr$=nz*3&}PM49z&{rZo&F!cHT6FP7B!mABd>FnkB-d}c`^MZJN;>(Asg^YhL z&bjBMy!2e%@tW$1>w?N`Zp>jgbN8c)=hww?^G_Oc^!_^P{%RH1wOo}q;tM0sf0xjD zf9mU^fB(XACcZxK?v$z}r@rYn%>oIvql>#P_WSaM&54~YAlocsBPCr}89e9F&F0F> zPs4VKEz4P?7hBT1J2RVUvCE!Z6Elvoyx^LdVd?^_)^1;MI^%ZG%PBh!&fUIzv)K7h zcCKswZSX6wUhl9TfRi( zeqy>%pkd2k_DtX{|0TucKV9Ak6`VC`sJdBKHuFdCK28yp)YZNZiY`^JYHo^Z6H>EZ zz4*$CnPn3S<|<5Qc(wl1pX=)_W5NwXQm*ia{fRntPP|0!6r;CX{ zwoB^0WX{yt@$K62?e;r=1|H`%oAhVrn+2JHrx_i!oCTM9?G?CtIIpB_#pKQ2yEv~q z|K#ZX=jQ8au_CUnLgDugS?hPJEkZ1=tqVN(cCI#8obCU&CpZ6(tC;3H`NNslnSwmF zhZkOR|KNQ|B2}TIn}>e=AVjvJin&?ochK@POmSnmsDBZ{#=MYsO6lQpGN>-lH%ww}+Ii%-K z*ZU%$BV~U4#6PnNBg+^$=1mVz?msv&=VQ;$pZl%nducuY`jhW~V4z~d*6yb1-(!7! z80JmCe@jJ=-IuefMbzq<@S7g)h=xsXlwL+|TDkkm`t0TAj`~+iyVo#3*?K+xP{PHX z^Lsuic0HXrb;{c6q}OXrud#Ule*UHXXMXF9?Qx59@_YSmWll4`ey{q4Ths{_55;4OqYNhQ7O$zw^SI?>vS#s0#{aHQzeyNe_+(IF z0+9&bCzEpHv+QG?R;bm!-o5qbhoZ6rfp>Xo9^cI0_v_LIFYEY^tNyHV)s4}pwr9Kg zuTDTf{Qdv5w21*nn`rk?6#nz;Q}i&Mx?Nd*nfrT6YMNlr+97|d{XkF)># zt#QRqO#e=Bt2;fTE8|qhy9uoBNB1tdvHX34;L&~B2OfUhp|Mt%tN7{UIn4W#t(5P7 zdMsfa|1MxxEuWj_Z*KlOlNf{fIj%0vnzU?M;$fldR*ku}l4Wauv`0K|Tz&3!;hbxU zub=s*4Xx)y7R(rlL1}pTV5@`V+;(&wIR|>6s|KCV1kB zFH_EEuV1}3_0^Y-4QI>KlLYUzZs79Mv3O^)_>;89^&*UB~_xaPZzq0K71q1dd;eS&$s!cg@O)K%?L2IG+GuwND zX18>dS1^|s@I61hJNI1M-~RIoGj>1zpYw0gtm(=6cLhIZtLxoM|GnXBWl0JD)?W>e zW{92>7L95#Ffn4xJo97 z*D_$TdSgh;!X2(&{UtT`N+aw=cLy-!{nhDC^W9=m{_**VZ>4*d+SKSyWOhAroKewv z_SZ{&S9cjP7P2Isu-1K_Xz=FYCkCGwE7lsHq=K70bL}%&zUX*esC{~wEv7bx!Sza~ zxOmg-<(I6x(jIQSaaZ@O%tHO@t;PQh%Nag9&ECZ-QpdvQw_$EGr}Mm-0UU3n)vA=I zw^Y27s=oHBtHODSUBXGBi$^>quhmZY?y@T3%hUec*{hDP&RF>Ul~Ps;ONIUfUoJ6* z2k&Ednknx2qI4=cEyyh~M)tv@9cLRRKiXDvBE%`gj(dBZ{o?mmB`c@NAD^|;Mlap_ z;%oM^vzM<}W30X>Z{psUZV32e68s}& zrM%JJTJF|)i`ELe{q#7h+yB%#(SOISfT=7old2t>Gj@KQr}O0Cmv7fkE#J4~kbL)6 z!DFxW4~l9y?PNL?5W>SL60-Qzr@6cz<_rCu@@M(--P&4jb_&;4tTYn1KWpZ_rr&2z zX>=H9IqbN;;mYIJNy`?7ToT-Nd#|O{@kp0*T{86#n{FKH-cc>|;lcga{F`QnZn_>uz}*UAtOt-5r)a{%3hSF7%j+xGz+UUUQB2#%lqs!j`|=-foCFA$VxZb{p2s zPiwqQ;!-<)UsMX!Z`FM&&u}nm(#rK_L8?79S3U(7?^jCs>v&;}avAdyOZlov2ku{3 znE6+Hs;o|Wp7r)8?t6|s{FXn-jEnuwkB4Dl2D5YgVy|3gQ2SXq)vZ@Tw)WM;Ypj*$ zHy>sD=-^WF?ce9Lr9VFWcjYtqe4v(#nVv2gLp!fdtMHo?DY(qyma zy?FmZeWR)A0?~}vA0=ht0ZTr+uZmyR9Q=dTVS@3qOA!~2_sl4N_olvHeOIY&#VczG ziKT8j>vij{)}C6T_se#rP|{w3ITP4+zP^!q`fy=3FR!oE+sM5Of-cWHUG)C zZvLElYj=^*uNUDuE5Z{wYYVq0D4m<{ef~yR;OBMa_k<3roM~QY^6ORpVV_?e7a7ja zegD;MhWoXD+M$u`d>VWQf@OC;l8(90uCgUM=D$C~?7CmG&t-A&Bzm!EKo z*?RcmvYvxkD}QW0QDmBX|I70aOud`dwSAklkz=R0pjL4PyM4{J|33=P^?!6PlW&}H za#^#?mh;`Ouf5+~7rwq|(Hfsq+a^kDEU;`9*}YA8_uq^&WnJ&r3YgT#)aUD`$Jd{K zCugzof4x;w*qw_R#V^0hCG1-1bBsli>)cWqhbafwNPIln#>=r%@m&Jf1tlvRac9e} zOs_jFYX5~awl#(av7LSp^OM;q!s35dK+mkBKddh0DlU9mb5`Wk_L{R(bfqre5a_+5 zYt=RJL3pWCyz4fxxta%V1YdNoeEig({oUcyY+rfO6BgfK{at@~%k4uq4^6M<)a@(& ze_kdt?EiM}f0gU+H}5Rm_B$q4y?=^X=5$uCd5wC%tX=2oEPfHVD5rSw?imtcS2*|= z&okmZbaLvZ>rOY8Y@rWp z?B|(-BC|R@FLNfnNd1+O^x=}mWuZsbUxXhX{9+y4GvVw*hQDX5CU^DCliSx=>!Ea( z+jGmj)kY4RKOUSGc>j2_kK=(Wzd3zo*LO69<(~Q>d$6`%b#L<0pC_vJd)ZEAeT*wCGRvf2YD9Ut2Hr@&9Y9IvAKu?}ddtRjM_Y}at=+NM_=>aRVvU{$>7lGFd~w!BRX^GI6sCQMQn$DjIC)k2 zY90-%i*h!qpV@b;T2mx5wQ82Y(+|x|sd<0Wwtn|aJ**Qdn)k~(nm2O4RUbRQ{1GE1 z*}4NN39C*q9B!S&${Ovz+(dIZZ;ty7-xYcXR_qiJ<&Hck@}Xs)aWM0{lMDqiwx%`) zwpXgerad}sD)r^_N{&l24r|){D*gHL+$*+*rtISS*t<`1Km6Y4oE@lksb`kE2-uXuwoB3DM?ZdMZ`;ASWSUR;I!fWx~(qCJvU_zDbGL2ZyIi@7nu5Q*QRw@yT7hh zX#6m5-KXzY)mF`I{vKcW?C=SV`{y-T^|@ZyPLDX|s5tS-z9Uz6YA<}*YkTjNY{&P? zsYhLNj+r;@b_f)-y%Wyv|7?SGf1TR>`w^k`{!@QS|9`f+G;)8{W(|w--)TH{6MLQ< z=;)h1zqgk+`07cyw9n8jip;Ia?>u#-C4F9d z3r=CoKCx?8_srYncV2z=C<+Snn0j&Vit@cSGEH}G&%g7F$zl6?&OeXXULH#??%DNT z@Nf5)|HiXft+sJj*Mzh#bcnCtn;j8ov;WF8)!g{y3?Dc)C@Q6%)0re;=smxSe@Y(< zv*EtQ8#nGeI!!~id#ehQyVNeW$;<47_bvUzy@rN${K;h;1D<~!BBHX>~A_HI2|*RV@g`Na~JH(&kJC9m2ma4=XgUo5*fapPg< z?sU$cua!&(9~KKXJkz-Ne0u*3wRUrvAI`tNABb#_v6E*k?9+OZs$!hB%})5Go>ZBn z;=aw>G}9Dw_Z6JUUDDg$@3P-t@}$9{eOnuOToi5v$ppTZtv5X|YenR80W(XcZ5w31 z2)x{*I>|w}>-`ZIw-i6a{s%L+V^*`QapT%rynSTq~@?Z7bHjQQ3xsolL z)tuwE&P=`e`H)x8O~;Q0ORlUuAJcVv&Bfer^KIk=wYOQ6OzE((D8BiiJy4;!W=&q{ zSMB)Xq7NJ|mdtA8o_X5v!;)Ijy4F7{2!t)GeZ1a~a zoN0EW>d9cz3$8SQB6sGe^$?jFjvj{mon8ZCAvIbX<%li`PH$vlTZJb(uObc8+!a^=tp$t z-z+~nUnQ*YQOJZ7&o*p(W8FA+9&6G61RnE*Z8^upa`K*?`MHSa@;6r9U{0zxI{Gn!>t4t|_&#J)u=JN^POQ^^#>1=6?HW`y=Z8QWH6G-Sqdj z_cH#him0$Riee3yg#@e|`0n6?!*t+<6g4k>u=LKC} zm;P+{P#Ns@_}=r66W0odw(*sGNqZ*U6#7@F)!*gA`3e3Zf5I0{H~qGUJO9Uz8QL6M zwme^(!MRy}neXNM^B+8y4-YxoQD5_Cs{7m1=YG1msz*+k^KePjgd=kk|EH_guBmf7 zw$EhSGXA4nIs40&7JagOQWtc}yzS<9)2UbG9^K!ornz!7|y~X90=1n(!)p_~a1j(aEZ@GlayFBH&ynCv>i(th&{vABc zXN(TYob2ycGeeHtM%92O+Ke!CD=h>G|{-GDJCys&yjAt1 z@zVVZH!&)OZ@ZE8y|1FWFHA^%-XYe zzkGMN`eI`ZU!3x-hwVOGeP0*V|uzvaSmm#x#d^FRFE zw;3O^wW2(7ccyKducy87|IEc!GtOQ98SSvm;1qYL$4|vxy1s?4SJgY=?5g|1rgqL*p?n?i4PuO4e zF{W_$?YB?gx7hW}^_JUpKxqFjjw1D+*{Ayw4^G~F>+{sC(9N4T3jB&Y{CP|~*OrB^ zUA&J=e*5c(x=AWspK4Amd05e(_;HPdbH@FtjD1;U$85y(6V4SxL{4w9+9z=2#q%DH zfK)#1&nK2G>a%{jT_|Mk-p`lRZgC~gRdJMKedBMR&~$s_%ws{ZB2xrb_<60BT&Q_C z!OGP&Ht5-+yrqAZt`_gI$~=4czL8zeJWshjN7`yPGPflEyU4JM%WS`zpY^^I>fhyi zvMywaIK}8)y}RXqVd`J4gKW<||2~w;&ldX;`E6Nqoo7zw6F;_T^LpQ=YGk}`e05J=IlynD zTYC3DXEn*^B}Kfvk&8Csu?L~b*8>tA~%0W^pA;u4hMwE-(GaGkKLvw zNsJw;2g3z8wq=-}a+y-)mUsEy%XHPJu6einHx|@&|N7~=bg6oCZm|Rre2uJwNy8{P()3RcLg$Im6(idU(gSYx#QWs$m?^Ast@$0n~OKF?bD zWq*rRLGdHUfZTsZT&F@@52U&nmaMare6J~$#uT`(R_EZOog4j&=dO)eUssgA&UI?J zz3b~Uowoy95*GVBICS`-+=4^LAJ(b~P7Y;Tos;#I;faf*5cBPz*Y_F^CqC6&&|a|X zSkv)MQ&ykuxc^0`X12n|HEY=WPjhbk{jfMP=+I-HM~~mWduLwcz#P}e@xASPwg1HD z>F-8L-+#69n4qguyB9-$u&RxYkZ&+?>Xejn9Zc-2%a&d&Clgn8w?=cn$k(en3s{z;hM z=63R>@0p8pkLf)=$di}G&2wSGv0!hX8Ganj`d5!XYHnTZqj0Evi&;zPa(nfJ`K}C~ zq+f@>bU5X-DezoS*B6bFFL&m*PRidP-l4o!NT}9wWuo|j{hsGTcmLm0d-h~OdDmC| zRriy2or+ldc&e;~x}fe|f%O78pE(z6s+)gf{PC3WP2yT*tNNvRhmW!*O?e5C&#SE_=uh2VwUTw{9o=T;AwUrZiA6%9DrTF#R z`OxlVW_M=2*i>%Mb-B$U{QMR@n_a(eEL_%f)H`^&$MN*c+25HBWSxT}4SF@&Vwd>4 z{_b|Sb(`^?XHKU4JsC}@6y}8o7PBYcU&6OEvgR;D!u{-Nr}AvQOWzzhYcf+W-*JV@ z`FZo)#F-k;&tLcUkg~RL6>tBcWLJaR53khOO*!zYK#hOVk)ESg^B>vWw|jB(!uNeE zSMonQy7bTK@2*SDRnM6xZG8CkV5qV9#Z@zZJpQ|K+Ru+N#aExQi%WcZzv@Np_YaJX zu`^~csWa!@N+=9i*s|q)+cl-euU}6n$9s5G7kb`NOqX9eLCGZ|PReU1!_S5e%!%HW(-}x5OvWN`623%TCr; z_J~G&fAvTH?=zXI2Rrj7?_0nAulZ{4$CoQ*6jd)5o8P>=FG6?A4tHhm<;P|{3h{_O z%yDhb>1$28&lSvLr|b9bIa=(VYW247tnxO|dmo+F^{m?6l_Yy_#&w~$AEGK`^h}Qr?SpPTcn}{>aC(deyV=3hHf#?4+ zZT|blIa}`ROqQ7;qxHhj`dv{}`kiU*cFW{AE9LL4FtU1=RG-u}b)!=A%Pp-xE45NB zE4KySp6R)SZujEIehX`BW&Q+DY1XZHmj5 z3wtdJfg%tmfcV-zQgdJ(J$6lK<_O&;F|wwRg&F{)OX_s z@AA0X)$#li`_&S|^PNp6gi8HrGd2zXv8Q|6hm6TR9RE%)uKIg^M{Sk@Pt~pMA>Y;| zFICT2!&zJraPO_`mi9Hr4x6U!Ijw9ocSG672{%^QAGKNe{l1+G``H&iHTo%i^0lv!|nD#ixdk4<2oP?6+TTVpaa~9`+||)3)DDHuY;i zYjJL7&@>aBF7@jVr{BM`^tX<9Egy$M)x4E6Q|D$%DhD+zGkkFPW17%K|Ikf2v;RGe zdt)6Qmw1s&&$Z&`zw&8Z-b)V!UOF-*`pv$xF>@D97V+q^wBb6`ZoEdUW#d++&+8_n z@EVvsJG6!4^R{&X@*be?WP^^`OB}06ntQgx*}b*bjO}UD@2>kl$kbVsNDat zZSAM)(cu=K&61llqJLgJ+o)ZhB|86Blr!fmrQn{FNnzq!wVhur-sr=7_V*TJ!-SJ& z-+ccU%#r_}>v}Zfpx34HpBKw(rqZ;yB_?$K^SIf!)9^$tr$^1YW?t6uPwen*gUnV( z?wI_0ZOeZri0Za^?#fN|nf1rbwU@VtOa5|nZl;!wUVreE$_kMk^V>f1F;{=(H%hef zZ$Eh{M_&F@t<98ACiT0uH}cJEy~-cC^y7(F=Y;QDmsT~eTfL0gzNtARms5VDy1h`* z(~a+@Ra`nz{b7IfkIuC(UAbCr{OwG>diu#jj)eDTb?)DM;6D8h7wem<#%$Nr&qWVX zID2O(-~O*ParNHW0=pMf*{;6$`iK{goC9C+#9VgO4n`}+Zmvs;J1u4yzrS<1zOJy~ zl(%Ya&_3CS-k;xp{8`%YB5&i$6MrllZ#!?$^xXH5)2VIg)$2-c7rmYI+S#Cc{WSKZ zhP|ft_qU(v*WWMCccj;UiR4s!4R(nq47Wb6IhHiD%!Fl@gRR{Mai>XVCm)dTKlbju z-}1Pvu@4R&)~H{6N1pjl?@OohY4YoKN;02V+rM0bHGh2-O98{#S%JwLg{`c%8yW0O z&i=uWY5I&iegBvE*mF5|l~0`u*mzSVSLmXtm{#-v}pyTxaPTSn_BlF+Rm6S*gsQbx2)5*@q;E{5U$_`%l7loyDEBF%Z z4y}oLK20@|<>{AZsng%2a(qGxmwxyY{Z{1AE!&Gz1rC*MSn$V_+h1H|%D3+OY2Cqx zCq8}o{1nr}D+w}vQ#p)tY9jYn3mF_Jv%B}xvPS+mn|fFCip3$p`y6$qyWa6Uen;tM z=R2wHi7^p7lis>Ao^(2Au3UQAb?I@Z&PXHSwMC4v?1A06lHaDzP!|4lT(Gy7@v5%v zvFX*)tK6@>wehyz*}M5dB7eo?EQK+_pyf8#KsEChYohJEMWz2PpduT zb9!h0;QM9g)ecX;?98}-{b9G|MUOQ~zYE2(-nY)<{=FokTJV8RXN~cq`@2@O=w7jV z=PKbjYya8fYo9);oqw6dr{Jyjwc{LekCw*leDtdS!t2}>8{X*HaJTCJTD0&-j9b&e zyo{Z%BP4DlM7OXz^Dl}~IAq6rxp&vrU#4@bH_9IWktlLC=fLgCJa@s!#0H>G>9XTNp3pnk(wAzZ+{Dw{lU85?j{= z{uReX&Xn!t{p#~Ayu3PBhhyz&2DvBV-&`iRx2$%pdC>WujrVNysT*JIIuvR@`JKF6 z-lC!wcX5(o{PU?Cm36bkR&V~EsW7)z_|mJq$@?ZuW&16;t9N>hXwv!3HFHb+B~<;y zW`A3JtM7QuuIV}n_DvQmA1-rvS>sw|yz=0WmAe!T7y9UKW4e{AzA!p|*WRL>u89xS z9GI&ZukNi9^uAR1L1)i|sz<+?%Ru4`Ys$#wy*sDuhHa`!)BkOZOmWq7Ctxn7iG>B#vfx@$9nPV z|LU?z#m@`wwY3OZ&3N{@cmJc_MQf%-c)yEXv73F>J2w3-dn{N!cA8H95SAkw+Mni; z;Wz8-g+mFK{-oZ!8R_@!|gqxoy$^4{kxO#j2G zKc*PW;%H^~be7{*N#M>mHfal!8C@i!=bfDVDmsvZuhL8T{QY*{v(xNmTm24>%6^p6 zd0-)@YAv(SfrcOb<@N2~iab7OSe;BfbVX>=&Ei!;&x-gn7smL;OB(7iKCFn{5|wQ+ z)?9vL| z<~!#9XRNL2+a$ZjG4+J&rq;dL(cIaAd7as|n^v6Yc%0d@sQyyL#tZYNv2}2re11s$ zt)ZA+ghq>B)HJc{pXS$1{UEK&{&>OOU3{M^3T`V%FACGhalaAK9ecgaIoG52npEA* z@Ai9=V$wAj{?GgWQA##3JH@f`o!l~8y+&rvE1EI$XB~5qk}UlH`%9>h?%NexQ!@Md z*(;dXm;8NTETdWd-8rmKNnds8#{Jv3y6>->@0KAh8|dqNkKcLaAE9^Y+V}L|n7_)3 zPLJ@pr?}Mo|BYi`{JSRTuZrLV=0u$<2)kVvc2Mn`-!*|I9o;=*EcdqAPBLlvBb^fa==?{Y zZPw@bx5sqf_pC4Pn)p4>_x6%a3%}0|PQAZDEi;xEsxhUJ)E z+PPmm^S<8kQtnKRMn-JTwiNoj=$)_Xw6A3v!OyNS2fut+x6b6x zqvRy5*M~2L8y%dwG3iC`iM#QU<&{5A{9OJx_8c~%x&r|ZmH0~9~Q;OCY|0vOSH@IN$&~$_$$ui@a@#26@ z>?YG4w2!24iU+&Noch0`@!lSpovKCc20FG+R~k=<{;qRaOk|bzisgL{C!Sp6VYUdr zpdOs;V}0sdTvUtD4Iigz3Hu};K9rL)ys-Yg(5%?ct(|ujClskH7rgM`*7UXgyOV2L zroMK#A-Jyf&_uhqlR?ZgmMqwwwzx;u{0-Cj*k^2Kn-cG^y>yhmz$LEqH#TIO#m3-b z&ZjRPSZ`gCAT|B-lWj$(WKU)?m_&S?^wseCGvy^QtaFn%lGL^s7H;Kch{br|0N-ZLY0Yko==@Lt@{&J6+GsCd4?( z-}!K3&s~8X^1n9jn0SNlcG-gj{?u;glH*~EbZru%AIcmP3lmPUmV5bD*oVW);9%rm z9gbTKokdYRCxdU>=Iq|{cy;3*)15&+mu9*d3NPAaX!q~+m4DlIpXpVV-&dzysB_d~ z!*mCpxeV_%`xOXpDtElu`bqD^>{V~>xM$oxQuF5Tmx}jxi|2g$mg}(f(Sg&E(|=YQ zwkTd-&-?J!LX}Ay=iFNJbl(kK+oO@KVq28UEd-v_s|hSS{I$i$sPNs+Ob=%R+hjNK z-NqU`-;G{X{5#IOcA318NDQxy=%?PUgv*@CKU9B3ByFk4IyT{v^=td6DIV`;C$-e; zG4X6*Sm$?cgJ)CzkACJ5b^&LxqRPP6Qf*z^JFTYt@8fe{w1xxzcES##QdP4|m%{jueyuXgYm#)Hkw zLF^CCiyWPrXl!&m`u`)XWY@bJpGr=+W9oWgazI(U^d;phUK35(AI(+s518{Y>B2=L z?Y&;C{+vr>PrhUbJa}dPiC#qok*gEi57=)r-j*(6uJqh-HqWk0&u)ISzVP9!K-GeT zOXqIJUVV`IF7xHW{fF=8v#)hyw^l_{x8dan|Ahq z@PC%c9toW0LLW0*lG(Z(7INq^ubRB!&hl0L+8GKVOMZ#Gzre}*@S=LcijB7WJ0xq^ zo$vFk{QE1{+(9g8?#!M?J=sx-eecp2a5LvfJh)xr9%)*wG;f(Z->q9yE0(vM+_i9n zPP3rv-Qr6Ufkn(R?kw{?{w!}v%I{h`t8;msUFpo@DSm6r4$Hi?>`CZ+#5isF+*e0l z#!ZOW_BNPj>fujzVirnu9SuCpy`p_g{c}WWKCd-b*cv~FrSt03nPqeP-vpj`U+`dc z_uIuzWs$R#H`zY=@3cxyVt3UH$Hc|67av&4`_}owXI&=+*|73#wP}BnKFvHPaIP-e z_QXX~R_7H8=hal5B2QLs>U90Ka^Cww)hVK)3GYO!zUoZft+Xan=ZTGqmO-f1(r+1Q zOkGXYd4^9T`wq_eK5f>)i`LAsD;6a*ud-Ltz zxlC7CwrYg4e45m(^|IxOVY*brjz*qo_20IPYd$t#xL2GjaXTC=5dZe{Lr`6sJ9>%qKem&#=ZQ#RiVF}EnY zwvf40gh%6K%MqvUAYqM+uCM-{!3UNyuXrebqf=g3Mg0Hs*i)%;vdg*TUi_ zS?kJek9+(JSQiLx7kPF1lUdT4WQheQ7r9GI%dj%*zJKHN$6nv|o^N|y#rbbD*o-C4 zzP!FI{$leT)npMq4PPt6r>m3FzOH(;qVV_PTkr1JK2y5hbY1n+=QfVLQt?mra{s%Q zd0XACf3vZ5P}P}>UEiHQ*S5IiOZ6>SptDtwQ!e?xla`>u=C)hMth^gz`I`M+h%cW! z(bAjA{pzYur(3TS9SgIlTqODEneTq#uL*638gEXrzr12e+bZt3h3zXB{F?nOKjMpZ zP;1l~9-$05z&(6eDjt*0vEo5PEo3M0R{P5G(eJ4>UDwdCBpHLfiy z|DL~B&YU86)F)BodCYM(ulIZz&dc2{wO9l@PX2fO2g~eJmjow$FyFRjQrQY7Sf zDsXGq<_{O_J?$n-9AnL2eRT1QnN560PRJ*OhR=@pHf7pg|Biq#lci@>C)C-^&6nuo z+jKCcWyhu`McZSB)_ILU3f1R|9=0BYC<5|`A$66{&dwUkPKh8U{ zqRadIwyou%0+ww(89JL~CvEz~DzxN${&K&4bAN2<+cz6A z=1aUHUadV~(e|Njdw{EB(I3gqL#G4YXtJv-Wz6BXTih75Cx}DayUL}6{nx<<)&&lo zCz4fpE!#TI3(M#Re3;O*h;a_vq!0S@JFhQ(_GnH9-yY9*vVyzPZ%o$RBr^NOTj7k{ z31xrnXNFcO^2sr6`=w{MD%S=`OGw>;Nnqh!Ihd6t5% zz6*@mqAz!gWYpa`^|I%<;G&CmLTyV}uji`kM!ZU2_`qUcZQ1^y1vj_5PRy2YG`Zt`WToZ~y~*m*yZ$m2{q}KK{&D#u8B0q8 z0p+TOCa1+^>+Cwee96)Yc8WZG^wN=D)-7#$91mp;=A7-iuHxjJ6}mn^C13Ab&QX;w zev|T+-6+1}dw#CzZP%kYiv(?zQhiex&$8-feUGcn8~wTX-uJtQW6Vmnh6HQ@^D&h{|g$D%&sj=@?1-<$ua)aqRl`jfCo zAwR;+u1opj#+vJ@&rZ$Gw(DP=x6*!Umt0a-#_6yKE}^8@ta-6165Kf%-?*|0=a?x^ z&Z;V%<*y~U^1F-9?sc}OtPZ<3v|XHksN$As=+Y;>>rU(n4tv&kdE%8lm8%-&DDZqa z*}bAIN8X`uOV7V2m%`pfcBPdvKkQ|z_#SSze*a}Hx8hF*3oR>WI=ZFWZV)vs*lo%) zQM=|{yLV;k>K*fQ=Km@GIVHg9Rrt+vLCO5}(HR<-7&i4j*i?MbIoX8KUSivapZuFm zA6(?HkImTev*CUJ)cQ@LT{}ds|B8JdAlFeXI+3@dR^#_| zy&jLm`3lK5PM!Gg)WG1&Kjp^%CePesK3zNx&NeoE2TnT#nSTGA+VP>M%QE$Qv|ha6 z<5j=1mwCH(T#DOuL42C)hS@W?&rCZTCmynIPs{=Tz1mk|%k)f~|HQVeb0~E^_$+Tq zhT(73r?LTa7e{K(d|2ZWlC09a)tBN$7g!%!{&6|$ zFXM`o{k(Sy>i0~X+U0AwyG7vxL!HrAYrR*&njbwRc<;|SEcxJP^81b$>4({Drq6dz zkgECqHU6Vd^^z6GGFEt|ei1zDdDy^n0dI!rq)RJ(Vvjv>>s*}HwokiVVui}Fb@`d! znWu=%WSyv{_$!=c_H==}k99vhz0dhPvOy(Hgs1NQw)`&E);`7=sey`f&vWsgW8rIR zzSmQ8#PzVCsq5wsC-hU86myP7cfRW=e`j)JzxVV7sSJhge*%tO51%k0sH)lNe#2bJ z1$}lL?<6=T&Z>W|yN&Nf+^)52y6?)`_|2bFdeii%(XY@4$M5j*R;)K%)WXB$e*TY# zmt}M5jh-~6hV9mtS2tQbyIXxEOD*qrrAdNfutnA1WW~N`l@bTVT$z1diS3J>v*Uam z$I9;pf0$=UH&`pFxL-QU`ps~knRu~Q;AesD1_icEbAR_(ojsy!KVRxhiivvsU5>&M z8~#{{q{9rCcYo!o??3X&S#kdn)oOb$YxTGr;Z-wcM6+aCa@<$klPt!Z*%|(KBZHq~ zMMyMnlz{U0X+pbqe|`C?_Jr5>V@86fwDc$FPWxaR5_qB0-pFCO=&X!jGrR2>fmu#@`%}lZ^o8urN7t129X@(dW+uwNWzAEy{3O+``;+)#3PGU2_8gL+89$*ntQ zTuZwZ?DfNN|BArP8x)dPoJrDI-qS68abZhNc84$XDV=xM_Ql`Is0dmtvEcpvl7z!1 zFK*=T6xhjNz@g5rR}i(K%`~HYy7kmWl0p|IF+S_iDKr04+;})=hSl4ZQ4i1m;M>Z( z@y>4kf=fO&-?&$v$vIYVPWrWjUDg4XUHUIVW|cVaT9|w5^U}w!tZYlJbvC)(4>VRf z!7g~ic(ta}`wa)R7Vy`!*)I&*EF>1#d6MV(8}oU+uV%KgnM{~JE0JE(_U|k2hVm)DmM8M* z?)<~+_|{47uMG1(<)aB*$>KfhttL*Lb7TQm)12!5CegNQ3*rj9SDg5YE1` zdx#v5FI$m1>9Of#TSnoZ`AZ|sY>aHL+c;ciSjt;==g^d>M`z3PQX-q;wO*8Rzbw_` zz0p5;sq(w*_&GNm59vxSy?S(_Nmbo{#oAM^&b6f_SXbqB>|f3hw6FdD_dRo4*d!fu zcdV_*(Q99Iuukjr^-Jc94kWLL&d_k){?aZ;{`rC0yKgtAihTVW;2JiweG6;$3CrE* zdkoG5O_;j4FwfWGmHEXbb9bC@N_ZTx>_ldXgypB5_xGAVmG~9oy8O`l*`0Zh6aJQJ z&cFZ3FI6Q#J@@hr80r&& z#rlu@Ny@HEA|e?s2}TB;iOaEj^W86aYPG-YnwE0OqatU{{MFIdrm$nj!id8@|KH?ixw&;_ zxPQE&o1he^lPEb+zTHA7ZfaTUqi_T5r)jq~Y-@_D>-oR*TER}2>x>6ACp0aQk2%0U z>#OySxnA>~{}>BjmA%9`k*!$b@XPBS+wO0_KEL-9~4fdO+2#n^isY_CtcU;q$PaS-1gaf#yt_1+lP9mq$W-^WR0@DEAj6C zx6@Lqr*^oBl*{T!t0rk350f)r_j;G?9Q$=nAzJMveu`no-R9LduT>K4_!fCGXBO+) zRQt|O3sc)GJB@DTt|(|}e?I$u_|};n87>9aKi)~@SsrtHj(Lb9iw)boeDQ@5TK~5! z5|+%({G-4fmh|aYx$7>sTQlwNetf{>Iy1tm?-KVc&7=;KzAyXs6m9dm@8)9IB%P<| z>hr2^ruh|~cMAkQnHTtnI7DdO*YoPyyn5!TecbggzA7rc3Mg+VI_I!*9ao=X*i@f3 z8OEur+yd(V&8~A=d1j)V*Sq(tdDN7$1n)fb4Lo)AEJwKK%Q?pn{QjC$7|(J(aQ0`1 zt89JDOFrj{>4;r;Gxe3?f|tVCzKg@whjCixP4B62$&t`B3~8F3ccp+`%h}@fudo^7 z68~=gOtyUDJ<~TuI%bE411pcui7UU)3X632O;nxnY{oXT>+>{)RFr(peZvo*Kl@DP z=|8KutM?KE7PYp?U4Ekbc;g8(yUPjx>*TzaW?Z&0%>3NSb0E&(XSG*3^Uw8m_j(>$ z?1=sMsPcSmeT6}M!v(F7>g|`ef3eaij!@U+Ii2mG4y^Ki%IKzJ2?3#i<%%`dNmP z4U58`{AaP)Z(C>Sw7={=^S3%ZPB!Zmh9&82H_jFCF*0}@-pMh=YWIyj>)10MRqqg) z0m)}+yB$fETsLqPJ zwK(qO{3|BDqI2KLot*ty^Ue7M+18elOXUh)PF(swJN@l5-YZ|u{CxF~@sPjL@pu;b z6Y|;oxj!$fZ?JEQ(wrJOombi5N%q-0hdiX_?)(2?rb*Ur-dTS)i*0xGWSsYkU1&*Z z2V3y2m<*9d!QJOpc1V>hn^W^FX6sR{doJRo+It`DSZgU0oxP*_(eLLAdL`zEJ(*^y z?0@1vraWpuJi%FSaW^^HccRVYVQeeZdaCM+@VMBvrdM3SHQ~ zcI&3A4nI2ccke2=Tl!|E@2Zsf3qNN!`NgDHt^B}h(A(>wcX-Cuw2f|JpAv$f>$V(*_!jZqr^jC;;)Zbi z|1)QT;ymXEu&uuSvc9?Q&-VxII;)Mn*RlNRH(nKVQAm4FdY0LOZ<(Eqa}R&dbg|j% zs2(8VrkGOEHOqbFIgifb<+rssA8wLj=fARg`souJHNt0^+~H%m(7)4f?lEre=tj5t z=X!gWFMpnOLiM!ymFM%>KZ$G*yXszACu161BQ$}lJkDm)NuFoP#U?CftdG4S{dY=h zTAFS+ULk(&djo^VgL5KULh>JP&FRy4H|?XIxYk$WnRga1v^8p%ZcH+f=QQ+4xOMAC zO+(tvKHJua!u1~?`S@OTwlc}Q;R3ibY$UsawVykpACL+Q44uMeL* zrTjnc%D07Ylr_y+em+|h&Dg*9z3TNXS37!tWl2Xk7O0v(=zVo$A=AT*c3Ja>`Q}-I!{aJ5CZDJaoI7=%dB&a_R$tfhpIV%G$>^_})Zd8IK%MQL%Um3i zl0AH1Z{7AhNiwz0al@9&eY17T+DgK#Q)d3V>zrF>7G@tgy?SBet981E-58#2`}17& zMCCQE<`q*E&e^V<{8IgSb*p~BLasdv&WMJHP2Fv2(Nq6tV)MoyoE@DSeiE%Z24a~Z z8k1Af4@@gjyJ3`5b!5Ano7U_p3MXbiUu<&yo5=FyR@-C6M?Wz-=b8AuTA}B|enOmU zqcxwc+*P?vT;lmR&PU5#&JSvPyzJh74c+gY+w~V*d2pMt$9>v44(?>0H<426$K$s@ zWtSCK1l_(--)8H{yEh_n{odtyTdHcm`~5uRcFuqQMD4!; zD@9J%PLi8=)?IGak?{Xld!}0%`|tce=jas+lbm0dZ$0+!^gq$~>fgsRE9cGHp>-qE zYg=XDht2UxI!Ymbzf4aMdBx+PY-Uwt-%?%Mq3z1*@iX#e(keZJ^X#u&q;JLch?a@Z zdsK6I!auhXhP%NBT#g^yB63niG@?Z_SJ30sv(+s^cB`-Wrxg{R{oYhH^Xuo*r5X&3 z7tRKL5)^lSa8vhwSIO(SpESMK8E5uKN#C&*^R_8c-@kLgIu#KHofCyczbAyqxVTuQ zT;rbUWgEBdihudCPuZ8(S!?s`kSmGM-B3~c|MILk%Ga0O_vp<%Et=FhUAkb7Rott` zk@o^jA}i9B9;{=ui`%y4!%pS(Fi25Sx#osW!Qc)0M%v%6lb zB3Tm`>3>+OZ2#ko*t_T|UM=;kOD&Pr+kGS?+HM*yuvq$}b^?pG%=`BXOp=uUO}MuF z`7(#VH{ZH1rT8v+mZYJPxlUfJIj#E{I?*0dL z*sjR^cQfB1v^Zs_`-Rw$l`cvxQ<{_49j!RvmeFqmWv0J%h-@fvV=_}8# ze|}-fDc8zgLuto?yONWqSZzCQC9z`hVQZx+&ja-K2^{;r{YB39qc49m9AD=v*#0`S zlksMT75Cwd$$@Q*GEl~D|Ss}6?DJc&3<}eMvc8;$CH}{b2O*l z-_6ZCy*GVn@jlj!%uUgEmN~0(@5ygt`TcbFwe-ASb{97CzdiEqS4h%^J$JTDdzRdJ zxFvJ1aZ!Kt)+@^|mfz@USi@Xn^<%+(?Ksm_b`y5x{>kgw^zT@#rgZtO-8%Q*t&mEEn?Zk97DNHdmmjjSj;$SThGDGCOc$#r|4^~ zc8saornqvqPu7gY|Bo`)Z~f@_j5&bq!q&G(f9gdasWcOR{B&Wh!_<2$ zQ|&l;s@wj);q^Zea^z2B+ApuoZhJR8^>1Q379KET#|qKUdz?g?Dhq@Rl>14%Vy?+_blv|CGFNx$ zcE@+a(+?i~N^cUUHWIX2y2SjEWew2@%oCu=YNU;#$4>YOdR*KIM%JY2%~<}-iy z(~Mf1$3@RJx`tTDU*F>XXkED~+sSNSiA8q}X4lrdce*6|YVDLSH=7OaIUYXLQ?ov> zqhgWNtp?Fz*3#PjGe3#%Zq=77b!+F8(|%M?ylb}ago(k^W_3IfE8X;=#y!mH`B#UW z=ci>hC957-d3o=&Ww-Zu%1=%AcgtguUnv$mSFrldt23(Ya(?}Db{`JfYy5TM9@E_W z*3RiEI+d=R$KE{5*b{Kw?LZ`J&YqmeyI=k@g!7+!ROQy{mVM$Siw?uliiHLd(?aDB z%asW~Vf?b5ktv&>ThgF8!9H^iv*2NCA3g;m_nNrL{=&!oO{!vlUJTo7ob+C4QHu2R zx3}(Xm*Bs#(xvm#(ZMM_v;Olk@oW+`^DFmD%b3~&A&+N z&LN|k<2TIRrtZ%D5>g<+FIqO`sne0ZnB*Vl6nxyyF!Nt~P^R)hf6bqA#;eyPStq2W zE_>1Uyo!fw<9Rurn2R3*=X_5s3)K8Mb#sH?>5Ye%UbjvEedJl*b+y+@?{dGGtpEI) z<+p3w0fv;Tt7ofj)t+)!$H8Tp(-p{rc zJ$wA|!OIu&yr-A4SSI+~|GP%5e6kp?=uyx3_uEC;lRAw#zlEqjo|WdGFxPGR*0heU zC+{w2&;MH9<;$il7Z=^WP(+2%_0-eS)(wj9^e%*!=%`a4vi1#VGUbs-1RK>@|)1xCUYCa#B|>Xm?~O* zQ2ua}?dR6I6g3XPIllK8wrs!sVan&ai%suk@;)%nXW4vszHHs*iipS(t4Z!l6Zizx zQ?74aaj?2Z;M6GxYln%OiiP)74x7N`&?%D@CUWHE-eN%pR*K4hMe#XBXd(53H7t60pk1D<&GJT)L%s(w* zTTlL;%Ph?MBqt$L>A0ES5z}8DH8%H)CH~8Qc(8o&*^;;$$q| z8@quRA+n@!7u%ev~sR_5Dl^uLT*>a%ltho8Z+zw@=W z%t&Z_Gi^=Ef<^x<*q%PH`?t{OsBWjzQO(&GK9>JH`uC;yGO;Pg&2*NnDAKKdFw5?z zpk;M}fI|8~eny8n>phB!+dnl3b-n4V;%eQ$x$OMH4=rzIPOG?EePqYPVv)I>7iKx1 zWj>$Ydrr~j!exVA#+SdY?_M}nLU*-Kq@k$RL>7~$5B#oQDxKfkb=J|1J0(ZbJ;JlL zCiYixHOHO#4?kyD$VJD5U)W~7iqCMl)^gsTI#Z&B-fq3Il|lR2jxdGEn|uFU*us7E z>s-a^O;@|GWtPOms=jDyyV$jC`qlHk-0GM4C$@dtX&yS|?83-B0=4&EzmyW$9PnZ0 z#&2%tJ)Mf<18mQ|2y;k&Z+W8f>~!|4rNZ8~6K=4|E?a+bxdT`6I3#UCu>bm{kWekD&4pH(5k43=L^66w)x0by{4vK;QzYR}nB?Vjl`?y+7y_x+k=x?{id>(eFA_ty2V;B+;1 zJyn}781T!>S>R=9f;nD=%92U0hr(Z3! z4D2pCC!D?ca#9`(SIsl~YYOufzstT)POLPKyK^C@&Qxrr;Kf}}9V;Ixg_}Ir`gg)@ z|7HUzZzdz_yn?nj=e9a0UQ-DY5_6g4s&SJ=Gy0fd&?2e-i+6dY^y_YZ;Ud2I;Hg4m zb)BtxEUV+E>G&(H`PXpbYm2&owVUE|8}EygS*LF_Y`?&)%y(1lhxc~p`%Zto61RUe zJL9d#^`XJ2^=RR-8wFW2mTT0!w-vwjciFR+87I9ivWU8~Mng5ee}}_$8|n$C!Nk+v&mwbwR*9V!Rq7c zHk&ngRl8a~&E+-R8}*U-?*yslqZ4-5vNt|we5ijRa(!}miuBjN)la$GVpgBql)t-p z@#m8DMT<3FulKzqwKkGtgZORH8B_G%2dW4^^DL>ECUCo3*zT;?MTvr(`U`V^3;)03 z_$}h?8s~@W^>4k~BQ^cg(deg_6+ZepF8Vm7eeOTa09pNQXF1Ob&ardaD<^X$?&=+e zt+Ba$LZP=G+U4xqH|gCI?~o&c#Y@bM?r<7iK7VjwE=S$V&3a;&wHF-AQ}6Wu9pqb9 zs}}j^W|vZs_Rrf5RhISV1!J4ve`RXi*!;}F&{_Um<%$zqOkZ$inKzw0b)u1g;Ne{td3VM~XbZn@GNrTBBM4QqX!GLJQH`MuX@mzl&SeItikCsrEA z)CH((Mx>nFsI##g_K=0v__TwQQ)(HE_kPg68_Z8bt%K8D17@%Y8^pjmF7&KBjE z`#a%;w4sqRngaQqNl zBPwsHG4;oBX@`k%f425k_WxynY`>%aob0m&SsjNyE}6RigVX$#&qQ}VUTyzkM%4}e zLo(au?7QgU=cAO=vCyZ|WvjYUfaT9$hrK6HHf0*Dl?8Y9D{c zj{hD@wPS@H&#ZHMtGZQ=@1B=H^zv`r{P!l!TI=+7YRd9dwy8zsGiFU^e*JXQy!S_^ zo%k5}C0)elxT~C+-Q+paNfc7Lz-*7d~Eyd52vO*)9yK|+>z1k<{f_K00 zFa2}-7+3U#q7C^iryEZn{+6C)&gdeT5}UrHC#C=coTe>3LfoqF#PBIEM6m5uYz zb^F(?vwjq;FtHb7{T{flbH%d#`cLnhJSjYJvcl!7fU%O=<@|;1K3>Nrp4#|;O&~^i zLG=3O;9q%lHjL0vy-8 zIe*sTr*8hOn~&zpEO5Luk2&H^=7cxJyo)O~`#rwz^LD8o*ZYMlIy)B0UMycLdR6jN z`OcOZ2JN4JXeq1T&FjDP`BI$g|2KsXLwJ@=x-aiiHO+U6(|4mSOQ(qJs42Ibns?E! zWybm5qJqHhA>QW4pAgP9m2;Et8(M7xDiqMqv{j2SLCx$)L zC=%CvdVJ!!%%EEJsdH{x|LS-XQW$6%wdBduFu|&|c0$r8iyIcNeC8?746E<_F%N;tw?`^O&@3POVmIa)QQ5>DkC1O5uNj`jgr1?Gt zyjx^^`Omao-Crl`tQKs29(J9r>B)}OvPX+M*X`SR_MZNpbdxEI!_RZ82lz)Z*Xn-kp0S?JmnQ{P3wbEc_u?`F=!>@u|Ge zo1=CfmpL4@!?IZY*Du}t@{O&tw(73^@iMujXNx$4=#Dar^zAi_mw5C07T0a-hnxOMFkk)IIIFAh*us-Sdsi=? zuKswtcJZrc(;3Z$->7ycL@u8CB<+1sf{nbHyzXO%1rJKj97%k&`B>ySvt{C|{$5$W zHGF}{?r$-y=HGQ}^D8$y9%TDgXZC-9@*E0&DUwJ$T<)}4>ZzO5K3pL?GF*t^9It-dX*m$u)%7gZP^)!o+9f2=mAbI0r{ zD(`R9K3yCr^Y*Z2ZXFl1c&Ve?^gn$M9xi+%-K6+ekj?$wqWZ_&3U^AM2Hky>c6DLZ zR-+Z{TffP8YF_)!wAw zy;VV(-*Uj8wL5 za(gCv;iu3|U6C}Uw7^N70{8yO)yVAnnX+*8Oh=Uue3!mVtF1MyHB60P`{pwHw_o4y zev;fPum7`T@BKKbH`+->DEyK7E~vgY4*sM%JkEKx{@13X zA8#;=EV$@W^7&Y-=+`OJR!U^Ez6q1Q#;|4U>zY%M^4lL|Usw308fP7Uv*zCI_cEcG zJxPndOMLg=5c~f4;?o*4I!}LW=hb);;UH^sJ0j~*ag+A{d)Ij$we06-dU9^nxBLF? zrm35ky_`9L<>If7IGK*S?sj4MLdVv#GQLroKP@lN$*7z~N_UG2ccE^ow(uIkWsE(n zW~rjK9nH61{%)CWY?BdiL3ZN&`ASb;+{%vt{FDBcY4xiw>+P2~?_bapB4dcdcIVAc3J`{nuTOFPx3L=orz&`|40F>%EJ9mf0rU zR(u|7Bot(WGHMbg+ayYRb3DEiZFpdd*`)=)@6{Y^XK7--I$zf1qtW%LOuNr2oLcvA zT9Q$KN14s;9cMePSQ_-*yez(a`-!JBWl{u={+O?uwyRmU_ z;l>`m`RBi__pq}x{@a$M^!|&N;(EQF4<-*H)E4h^&)eA;y)ibnVv~c_Ey48LJ`U;) z{jvQMq-UKC(Eyw%)0b{&XQM#A{r-3w#CV~ z7k%~AzEqwr!dV#jbk@7ir{8JtsEK`AwePY&_nVo246f+DG-O;=BB89Y(Ya&)Gq#kN zV!OIjs#d(*q3dtui!?l1Pbz+)_{w6!j~knQtH+ok%CH{Q5>IpiLvU_{e& zd#)wvTs3zWy$F5dxw`N2LjLvse`@DU=xFthYcIR|_g>|bdF-4%L1*Q^cUp7IQ7B-P zea7+ksz4(5k?4T9c}uPwESWGfkMCS=bMDcGJl-=e6f z3@5Lexkvc`%L1N%yLg}6_{y-;ZIka`yTsMgCN8=0+v{&g*psQz7VeWjOK=2OEm&~o zx9!HNpRsnQ`d6JW$mBllT%z#v!?YqsS4W9AlkG3|vg~5M%TfP>@vf1kZRBM z_7^W5+Mk*Ksz{$Zab?&Hh2+;NPF{AaKh&{pNKig|>aoe+#WxfiH?1{4&o^gr;+45i zHm?6$qb7WM65|o|V~SH792KqD9@LaXMPJlbUhk9NSN%|ow`HfY%DvCrD^JF_6+bgQ z7XGr#j#*hE=`ln6lIl~tb{aogx$^0;yxj|H6n;&)BYE}0RpVvOZ2KPCxVF~BbMSsi zK6`l5eE(W8gPFmr#h&f7>`CmM^iK4yZ&!7# zHYjpGRgyXub^Ty!rQy?=bBx~SZVlNYTNSWl`}T{yPi#Lj7+ty)vFWeV%~QVLvJ;Np z%DZ!>LHVWCWcAQ!md_>`FZ<`5*IMxGkoKB&{1{+X1NCEjkF+me z$i7s{J@#q2y-;Dt(=RMSVTSMC9O!gD+wyHe?2e4Hare3;f~FlX&I#tIv~FFLv^x00 zJ$9Z`>@tUQmV2eKAK_X)Nh|W#!yjgnznXojR&94N-|lzy^{maYi-N+1qN8P#r8^_! z51Xw_)Nilc-qiikQp7I(L-hLT3}?4zhrRUN(!}vSZ*v#pgj)^GdXgMF=DfHVH$Bx) zV#2PUyH~3$@6rZ%2j?_#HZxs*1liY z;${`Q`NIL#fWQPMb>AqDu;_XDEi-o?)6iXdyI}E_a7D`#Z0QAZmdbZJRw+xYn3q?; zeu{}B!A*5XwdcvTlWSk(8>PwZ+Ic|GY}dAjO39k*UyHP=-MU_RF1Rp1D{cSAydA-3 zq#Td$t-oKqUQ^QT@!nSHt?8jAIg`>AlSQ)hF6~~lU_H~Or{AaEiscSrmhhI_8j=!X zR$?kCYjkm-8d0v*MCJxA@mDhCT2q@KNd%zmfB#qs-^3;NFW$)EFz zw|6?0CwZL{nR{^K0*}tWLP%x{U_N}&+6dxU7fPx zPZ8&lLwwIBiA{A$>3jT6M&IJ?k2Ok)Q+CUW++A+{rgTE-vgYfjSPVBV)QJ_e+%G&q z)6-StUW0*whjyB5d#T|5pHu$jy`29dm860%rhHnwzq?nq9O=gl!_k7WH- z!IJ+?AyBz5g89YTfQHizMopI&SQXx|OZ%yp{`1;;iwHjL9~SQy{C4sZ!GG>uHxa_FFO@ zs9LZ-(?_5)LT-+O&jEo`w^%1yToKs9{^ropL}$Ja=FI*ZOch1`O+66D+`Qu4d2V+p zZ-3|9{i_dY*=`ByI3RXtU0lP>T}E~+b@{>1IrO5Nx!<}IRLd%kxaY(HbVXpV9r z|1^mi?4l3%v{_$QEz(Hc$SIji@sm#gKaM&Ir{3~@n*UPx| zKi@JvdEhXmI4EMu&8H=%FTeHg78ESmXu0asi=a=+x88lpIhn~tKg%{xvE;Wnp^HP%J8qRxfd{%y<^?t^&6)Z3obLV z+UFuEQyeqpIp6Wk%F0n$Iy@)6l|*yPBGtJ>xnE{;*Cp)5DObZ~`;N!H{K>pIO{XI@_xdI)Zb8r4%eK7!v$Qz)=dQf0 zr?=yeBs6#M=P=&8`}xe5o_mb{-l+#NNFMex4Kj9|emb*8`K#oS7;R5B(P^&*xaT+8 z#-CzQn4P(^;r#NyudOtVSU&u=l6qj-kk`QRU-&@#+8s*83~GiVZ7&5k%zESammvf}-Q7Illo3mQMNnIxERnDNu@;|i@KDh!>ePvZSE&TGE>WVCqVl$KPr z?xj<9@0v5AG<7Zym%#fbj?)MJ{+YJPu*|AOwXOYS{{`XGnOFSXnF8y}9(Qt^D80?S zkh_uHFkAolhWs0UKlQI#T+RQReTs}*zRB!HHnvT=%83ELZ0nvqa9q%^TkuwaM8My! zCvl+?vsoi_7H8NA+Nv)(eSb~3M2ZWeua4^5TaOO3hF?3qfax>eiVboB%%|9&e-c@l z`c8jB=oSTuCFyrHP6x@@|P7FAC~Z+jtW{QExkn{)~>BS?oPMMrTw0)f#K_=XMb>8 z#B*sqJ7ZH|!;#5#HrE%uz0xw}OPWn{#k8$4O1@{b6Yd#uh}eeNEZV(n&C^@gkG&AR zelBhO3#GV6vzR)0MUU;tdeV?1xSQox(l3RJ+S$?ttuH?Dcdb5^BRM0d{n#Pl{Ht*f z6RV!CIeShs&qB6SIq06tE6$s9bzgm$C;035GM1}1*}N+SYk#_P{<{9A>ZiNu#J9(l z?VfobwzdgVXu8HDsKR`zI&gQGXp0F$l4Yd%Ghs{LgY#KuML0dW+RgqvCQjd(@4@$m zw$ujJ(&*5io1}ymaBpmCW3He5X_j4wY2>wnJ%?H1Z%sZo!RT#COP|*t87Kb}>#~A2 zeqUoBoxC#6CHCJ%$!|OUC`;yVk>2dStnT^WX+I=foi&v=-L&{y=a#n1*)Fo0hxY_e zAC(III@it#U`}J`00~j(T-n-h-Z!mA3!B3Vh-- z$T1O_=F;;%fA4j*xXl$FWmN|f^q$&1R^Aa78_Z|TcI?p-TLbRvHUhHR1&iMBB+K8s zw({emv^kSM&Ryzsqk180KckDzsEc50qCq4h3ZC+KtIQ>9#QNaU8p9_6U z4_lnb+M!q#yr@7bLeWm{e2{9>GmiP^9=E7pp8C~KKk5FChiqGo?CP0s$wu3!mG}H9 zbSUXL2ikV>^mPB6Khy2EJ2FZ~g%ewTZuk7UnO|wd~vbZ=1=} zCG!6sO#Br8{_2{Frj@V5y?pQMRj$d-pOD`>hoy-5!qP3CmLK^~gpVY%?>%8aEUllU|H*o;@G z2JVY9Hp*;n^3&-vd1v!0?Zrt33#FXQTNS~1++vNY&8AXQZZa-nD>}RKPnjeCjU}0R zS}GftN1w0Y$rqcVx%Zi;mCEKB?*x;>MZGf>{#SlH)j4@G`vc}Vwdc+Xnf`bb_0#L> ziw(MA7g{SP{t9hgxP>9gMsHnc!c4aOxzqFCntXY+b=SnsK&=-ib{j62IK=p>v;KBC zlYYpa6irb*)iD1HZ@6CMC}qDBFjSsBQSiiig_hz|U-H%|Z92pFyUJ=S+v0FOgBt>e zmMrZ(xq533E zlW~>M5K0M)*3&uG#uS#HD7SOF_S`T0>#sk}3En0=P3iXQtIzI8h*Wg`y2`dP>ct`J z;&UYrg{PgaRr9zm;}ZY+yw>Ii9Vv?G?*1QaYz+y;NV%=4A(X zuDQJKDfO@Y_u36`>`8Ry}-KQ&EhXg8ao%&e0b8*j)J^ZWouj31L?U*q^E@7tI zPX5)a7I&TO&v;sSdS~^X&KQn5i@*uyN8*2QNw0rrSs450eREbpV$+pRVGp4NOb2K@7?ujuOG05tGuc|;l&

AK6QpjhTQnW(D_07KxCM<;G_Ka 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⪙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

  • wB;RY98MU0fK}$tW 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%0DxIS}mn^pP z9MqQyebTYrQRerTzYQU`~fWrjJ%L zwiW(0Vv;TrbMSLmq44kl|0ZQUYxg}(2WoGMyzfd3x$oT5ZDv&V`(^6y$9WaGWi=do z-3;x+w{uh|?UKG~Tx^!}rtJZz-ma;&DbbJrDJk4_RXxS4)84ju%}1M@_0CPV)~zg& z+H&LWv>(3b11op)8|X!(m(0=DPo2;2s9UwMW*tibUkAs5|B@Szb4f4FEY1m-{^dcT zO5>B23+ng2-^ISQaL%7cslLnX?rmKBO*+o;>#E;3Gowr+qQVyaxPSiNE|(s^&^?+9 zW9>zJ6zXPMWrb~4-NdF{AM}!6km+QY&_1Kdmf=5kZV7JIisNJJXKvvso&WV(YD(J8 ze=X9Hljkm&aNXzh^)>w`?i^PCfACe-^)tL0(oAIr`#CONWh=NgBW~^MYK_TUU-sE1 z$lh#z62Z>AZ`$b~Ynk*53xr*Y`|UX;U)8iadC|LxolI?oK z_|9=5quEt9kIqiZ^)8Z%2TapepM6GA^2aom1$`kw!c-oIyi;uXv9 z7szZ&kj`aQ{9!w3ziV#Ts>ctvT7FdArL;)@D#y0d1}WEtB<}DfENwq9i+@edD(~0F z*K{u4_q^i`jIh z=e~GzCD7*2$>7H?!vq^!ozwi!zn}8#+TI09AJ0{ComzR)Js{ryBG;E9*Vns6H5`<` z9lhG9b$uh#l22v#1y6I-oYa;7v9r*%hGB2jtV7kde_HYu2Kwk07Hkt;SMh7Z-Cm~^9Cs$Z=92VRniI3# z_H1u|c*zU%ebtN;lDEG*x;|@L=!egGEfteDJl$UR==ZM6oHO?RKF#>?mf`=nt|qCc zJEz}~{q|;#`cIEg*+a{-&A)$Hy1hU_bX#0Oc*(*=p)BjSzTO_2@jc<;8VBb@9qr7} zvy0#K3OtgjeLV5$$60CLwC9;Uda`%L$wN0Y4ruGW@GCctiT}4%#?CHBpy=9U*{3yk zxA9c!WGHR>(|yCp6%*df?d!X8u5PhVrZ~IHo6OWbk(<3YU*^s^ z|KsuYqw5!cw^a#Ub?(-zfD>Fo9A!!M((_f`ezcr0L8QY$o;$lsFHA)J^ZI4mmwCLO zU3*%HAz|t11>J6K2NrUy(On&vdpf*y<<&21jSX_U11{Bs%;3K>d79SV{I-^==jLxG zT0Wk>L#K<`=yFxE@t&IF-kv_|Px^)3aek@gB(eFB=Cka`i*NtFxtT0c$lt8?dv|G1eYTPIr#~ zbIa6XgPC>k?*q#?_w#?$mibeE{JF2G?6<>~7m~kpYWS_SSZ5IVEH}+nqw4m$<5Tzj zcvj4{@`U{Y1s*lMMKR| zuj?zh!k*^tQ!SeO%tl0f%idLo_xC#q$e8WF(X;&C;|KN!KNXz2?7mGsLi5V5BIAi> zZnA>so++=$RDf*)6+{d}09~8da zoUmx!B!fa(kzX%YZD8_I{Z}yAcad}Dk@FRICYdgj7JYJORe$`29KLU{_Y(ISN;2y2 zR_&Ym>~g2#(~s+0Ze$<*^SirccEYT@`H#b`tzUH)n|)GLnaWjPye;>|uXXP)#T941 zd*yU>W5XX4-iiRO>phYDZica0SB~6&xjfO`+pg7!Mc8n6;htHwXCsQ7~pJ07L%}#?ay*BsqnQOH#ZT*^hyXf(O<7YN?Nneh1^$2ymW8|b7`dyy+UBI$O zm%kS65}0^&#q5O(+BLsRrYe73R_px#%)X$FOZcYxhpy&6mi8n4<@HAu|DBryo>~Vn z-E-Ku!0AiC^AmZVx8x4r4|s88qwu%xyvrSm)BZlVTA94xSWDqwOSRmQy!y0C{?y{7 zDod};&A#rEG%uo&fD5wZA84F<5r@ zsxUMA9gRJ|oX;sn=gOa~Lwj8+WPVv}k5Rp=8lGdBx%r@C<_zIEO#e5E9p|cg^f>R- z<1Us~Ylq(fyMDf~yR_$&@OyJJ%RGOs8SJ+r(v5GkzN(!pv_{Z&-(z*%g}R2;!tXxF z+%U7Ko&S9IzKnim-)}qT-nD#kbWg`WTalNt`{bo%Y&QOIFuSup%<1;tbqam<#XmY* z)qkvuUs}@d@Tp;oqd!AxzOBx}$5R8+(kj-u88<037VrFV>{mi;+bmUq>?=?1+Jzb( zIB40l@bk%=e**iqpSGw~xz=N=&i^y+`rV*C-WR8Sf1{-r^>oAISs5$mTD5a-i@TDt zwX7=Q$@R8<{By2+?s#1PbhCSZa{u888K>TPx*W?6>6#Kh-*KXmkco>`P-UVGU+2B@xdl(F>v-e${e0`Db5J@Ci7mw<_nW z#hTLSb(7as@XxSbd_!E3K`!3%dTj8LZP{Hy2kbYpJb8N2EOxcY6u(B<-LLzq?bqy` zJuz=>ph&xa>6I6^-n`fl$o)Hh!~*FR3pT zZ{pullQ)^~qVD|bDev#@-=Vwh;lroDgACJ_dYNUs&fZ#iX+#9(w^0@DTOM&@<3sf53EZ8gd^O>WNak&2fKUWw6^3-z}7bv*ApP)bSvf6}c z(USZ(ZpH<9zMLIknY!y_zIEZVz*c#E$Lqg?R&j1+sK0T&gVr2$>3;w<+^{B&`w() z_TvxSpI&*jAeA$l?P);n*BgabayLqT7cV`%LFxK8w${TF+^U_Vwb&n~uwR&TR4rfR zRhIPGL$UL{zFWt=uRXuJ|Iv}u?Yt5GOQqA^A6v2Uu7D#uYwxB*6Yls#Ei$;TB5~u? z&UaeIAzU0vOSb&~`P5STe&idY!@Fm)uB@A{^Y-(!%d49=HD3$by8Qf#m46o;WO3bO zq3c^;SIAPWVjFQk?fZkYUAa?VzkabS&zfaX;>xpAVyw8IF3$FF*!gsN`TlODtUnw6 z_*`Mmmkrshb^Y8uSwG90d}d!Z7CLkmynCl2sI|i`egoGnwHS$`Qu=j)u|^YjzU%8a zv!UqJ?|Frf3hqm+7XE%s&9tOcq%Pu%o7}NaM;>QQ@3krtVToA$B=zZkpY+9yfyO2l zXaC7L80T-A3N&T*KN-&6F!ZnjH7yi^uv*Btlz zqGoA+8zjCc-SJeLnPK;~;{wwO_4myEE7aDypG?qTi+){aD&?wvIazj!&mxoUzi(N^ z$)z(pU5UQwINihJYpuekJ^q@JOfq>_zVa%3v}l=iY+>S(+uFRV8Reg7y;-cfe4KGHx%8L(vaRPXd5Ty)`B(H; zYTeVD^+&30*WR>HIrXGW`BUYFO<&u3xlVuHnSH&pOinhlQc8LIOG&RcU8xz8fy{PG z-%gTWa;;}yAxrcmZ7UA|mQjj|KJ|7(hXzd$H_t!PWNc2QRvdKK98kh_DcQO zoc_Znw$&tG)?X~o%ly42aJh@hC6$vZZwjRzUbyt&wT=14g;zg&YMhRqkdgoBoJ6nM z2aO9=XWZ^?W$epP4R46a>Q{UAXR(XpHZk*4$D$T+M=+G?8gfom5P8TV)%t1qj@hSM z{cf`P-Ma9hEVyA7_jGR+Es15XH&ux17{2;&U+rf}OBeelYkjlWie=MYCMVphn-l+h z|Bu=wM`lbZXIQfGu6vJe`b>$Lv$GG`OJwA3)>?S^Y(rV!&dLHW%Lf<5p650sZa=$U z<+gfn$cqy%{~dlVSk|6#c}>hwy@#w*6=e5@^u4{Mc*dmQTvEiE2xs5ex`SpXzu4C_ zFn(Py&7i!g`^-Dzl|mCP$~}MUki7lyewF@re6414^yR#ZbpI>2>&NciHRDF=ikB7( zEBGY%iz6R>XUf-+QCGH?_LH&E+{Dd3*{IUDjE1aE4Q_|mFT5f!1*>9hYrSa^>+7Gv|Sun{6%r8t? zRmZ#iZ|{Y3PNq+jHk(N`2&JWFI6n5ydEaQxFngC(*5sdA0spTHy!_z)N`IZHgw*}- zEMI0CWUuJEWfHl1clL{poE#uEo24 zT)4Mk{Q}lI9h;A5S~rWm`Pg!LNkGd*!=v+@4*iOq?{vk`>c-|hcc$3(o)NLUZgsh} zm-(=--<~&J1v9^vroFthu=w(iyG;4oyS$g(+pMzqk^N<^tfMiZ%zGz1t*=qCS;FM; zbM5X|2|jfm7pJw#dbK{EcI(C^)j}(og1rsKhck5>u6_R?$2%n{*@o$;dS*YCfD^^b0`0KQX;e9!OFBCp}?g^udbTAE^k`&f+JPc=n9W_ z+KGMAA;On08oc_kZcl|+VVT}_A&m)30=h3wa7+}qAHmy^VW6<``;Rq(Wod2&cb*-8 z*!R3Q;C#(I)#YJgUyj%=F#S|tCE|LgE79`y;_EkO^=&VS=f4vyd1qrqWa#2ZiD`fS zbrg9U%t_{wz4)reiIG=bw@ygn&PgZL$I~SW87BFn0##AsH5-yh2!ADA6-iPPkm)u+4JGqRgrrJmsUd{pXTw1h?G=gA6h z;lf#!rNBx{Byd#`{D)09fYxokjmq{t|2CzO#IM!t+r5&`~r(mX7UW9F{ z*!nnkTXwt8@hY>`PhS6=Y!z{uL$<=e|NfQwlux~nZ}u@JFOsdAw_N9YUxCSmSF0y& z48A?x>}Zfy+R+U5WPn&40YpUsd)|(6{S%+hP>gSUi$ZS#~7ubXRtO#=E&5J3<&1 zJll|8zkvIwlfVi_QNbds-?`H_ma;}vONKt=boEep&~ntDp>%7;x)Xec2Ww3OP86Q> zc)iLb>`HoQTKRp}h~u1IzmqDac1`{qY*gTresM`zf|mXAu6YZ4560`WFfs>;Rs2k| zk`cCUNa1%q{wcO+OIcxOcV*$dqYEzVQm`xbZ^$@$dvf8-8s5NX{!*!YMK29vRqyzm ztcqGOeRY$Mp{R~T-hP*h7I)Pix}AD4sr^ksrQ5DU3hZ;1DN34GFXk$L-x0+xDgJKr zxwVeB83UEK%xgG#-gNt{3%wFOQn9c254fy8KIyfMWLd_+#`T4-S9gvr_tGERQ3cpEO z9LAj~#JYy(`|Iz2E;edPZ*ggQ&}x~il2KCe_niWZ^$Yf_Bf27qZ7Qz$-;}`0sp9kFiWmKST96WRTXIDrg_tv@Rj3?iySp2uB){k|s}flXdMAvTd3ticMG%G{G@IcGAKNlGc~zx-I9ZDD2PHTz3CslI(e@1NWu& zz5Sb1UJx51zBEib$ll~lO`lSuP(X8g#i0j3ZnXu7Oh+L8)S$-$$&*z3U@|q zJ>js%O0z^m>i42RzN(v&dyOp}FXySQ-LI;5Da(epHvg>yF{0jOqi|N~eXfTi*5G7rE@3!@_{hG{9za5y)^=WPXeY3^#*bKfm zCsh3FwLMqtDXw3c$KqC!R28M$-nqm5$267O??McdXX^c{yqypsq^LL{VK&!K!wtdz zSx-7^-rDDTd*AG`_ZRkA2Gky|`1gEPu&`zMr?+fUNv4etC>@I&2LA=y|7qj!uM&1 zzfE7(->hRz#oL&wEqwbLF6Z(b`EO)(;gHdf%DI9}TIV>w-?Ckkr}bD z!93fZ&HwVi&-e6{P;uNYr*K9&wkNSAgF(c1gt zW7osh_T#GVOh;Sy{9PD(Q2n;Syi?XEHm$0f&R(&4LGI_(`r_3m)e9B5Pr7mVig7qI zFOG?sE?#^(NX|z$eu5Jt?^K(Fz*48G_-`J;pG6BH7LRTc`fK{@mnjz1)$@nt!)6>t9~j669mUKP{N!Snq^AsmzQ^ z8$W0r)S9v35v#-oc2(Z%F899ujJs)kW{3K*pV@g+mc5&|E-x>>;jqd7hwuIKBjXbe zU*)@W%l2-+NYlrP=S&@yiS4gj=1e^>S;RA6%-f9TaA>ofgYN2UMpDZ<7v;YHIh})B z!?oybuaEu`sfy*ka<^HIpZ5~iYn{7|O^r38acR!VW96MnuB~tErcB8H|4DJy``XoU zH4)!l1nCt}u?tt^H<^0yt&dQ> z=d}0lhL;C~u4P>oy}!1Rd5h_~+`ImJr+w@FAM);zMYx9Dq#T)*rITeY9rU~Rb#I|X zpt{*ssh>Mct?agoZz`Ji#jkjEX!;5sx#hWqxwivvrDkeBTmS2N>Fp)%mi+Dk3>*H} zmEVz?u=V2x&SMjHZfy%S*~!g!X&L_{v%qiBGLKVsS(UD0{Lj9#dY1G$&Zr}LZyDT0 ze~7&;InFU5eRojlas5}1^xkN{n_VSgk*uETW2W;y*A zs~(&=n5D||P+=vLy-sJ=Zztu9?3N>{H&lGDsBTdZ&OX0Rz+B?jx;}x|5*Op1ZVHWI zS6!hPH)UDJM)8N2bkzTUe$ba=&9Koc>Fbujr0NrElXArM?;Kp<8?NZaW!WJY8{^V? zDplmEvwd8^m9%O6=aw&ckh`0)-S|^T+sZcG&ADRV^=BL2lx7RQ$-u%O_WDPbvhKV| z=1msH^HywZtGKzUKGL|+zn!;Z*~J{6{^j~z#w(Zp2q)ajs|{Jx;&`UziJZG3 zNA~fRjgj>QS3Eb*<_nZ?e=Ks1d)wj3UbpqWt_os~y~52cvft~w;GznRH;;FJKjQp@ z|J#$k&gP1zujF*>mrZBhm+Nh|C+8fWyYNSe>%4|1-WfAGf2$5|3A%dbp67eRb@i(% zf9_ApnVr4nD|`9GwzOXqvzv8j z+z zmX|Klk3MmDmW6KA_O*5QgZTZozg~X+akTfQr_#k`pHyb&C2n0AcCq(Px6KVd){nQo zNG7OVKlWFKS$@UFj=4MD*A>-XDv+$ZwKiwoe3e4QxZ+}ESM?3mO8*4Biz~iusk_$2 z{`*G8W6u{36Zdlb>@PCdQmylyJA6^Im?7KiD%CwVS6`lXZno&_S@(WTxqCQhW3*&k zn#nwf8YRsLs>&8pYzgya-zCGC{Zliwe#7^x@?W6_AWM1B`40OE2JX2Rk z!#u}C@S<^Z#)(~qnI>~e-YwC7uXrHIV%@E#+t)fRBHuN5nKyRLHoC3;^T)~g8;m8= z?tFgyXVM9Id7}m29=69$tN2^JLC$)c%I53X zWxuia%}L?OyLfrt@=ZP{^V7HJiprs-TT@al#V=pJ{chZ>!v%jrcBU>55G-MN9_w?^ zXrJJex+l>WW3L>3CpPcfrK8uqR?1gQkU9H#y&x_VaAj<3FT^R^^QVWeHe`jV-f5+VzVx`J*eFg&k1Ed4+? zo8fz9_Z7Edu_+Rbxew+(N?rSPQ`u`7c8_rNEwAQ#UcT*<^~?XRG}pKK6gR+-CKxpq(owh;&~(6na9ow?oWz;~5uQ z$4iOQJ^Trk(>~5T*!tyj$13ye7muG!%P`M*xj<(1wf$|g({1ffwmoE++kPO+`h>Xmf7@oWrSClVIx3uEx9U-z$hz!o$y3GMAHIG1 zt;ELdv+1esw!XIonK347|C}oi_}LgaDfr2R4Y{Q+E_~TiWf1l?Kd|BRPxp)?7arUR zxZvRb&^!ChHua}Y!B4sinATdjah84KijP0Oa?YB~{>#4{xwGSNO-n}@x9FKu%)J5T zy$)W*ZzW^hF4Z?|+m;b+y<&Ul?_<9{Pnz^P|3l)X2)hqSTt2_~Tkfr{~v9dQw*37?otCy{-=H(ZfxHwaE-Jx~I%Dz8I-YRxpq`Ek> zE7@vKOZ<&Fx##P*zFHX9ta)pj@9k~V%idlHvzY9#^iAyB9Sd#qC0`zQzC2;WG$o#$ z)0V3}lbNHGarTz%`T6lmf4MqL&hpN`_3h73-`%Dww&dORyt+|z;Z>(gyN>J4J<||g zt@n1utCWdT-c5P`^sy|XlSSiZGnZ5E4)0rGc>uT;)ntAH4Oj7mK)Qj;yp1fc6 z(>`;Lbdi0>zY-45rq@2t87>^(byH^Q?|bWeedaK+{JZt1TgaE^xNga!;#!%-E_LPa zpWg{R%g?e&VZL{zTVbu%hOp(4#;11Qdw!vQ>a$y~9<4hS9Ibe2(|MFi*9!!gbq?u9!}3 z%K659{==F-dv9*rvnVH8QajnhR5K@c%A~$&C-#&xCN2#*)yd{xyG6LMEcDjasFL?A zH%|t#=GDx-dGEy1hs(Gh9_6>$^f6R8b#$Q8 z-mO?5G-;KcYWy1izpJej-+f;*(UHNn?D`dvwM%mN#Xa-GUr9-w4$+-%zE0M$r{wc* zmtQO1Jxk^a&N{=Za?7!(zjn%e0pq92ORP3(UYNwZSoiAHy-TiYi*P0-^?fucGD_c_ zDBJcSN=ZT8;HSZ!WKrP_{J)xbE?l%~(V5C|l>H0qtkS|c(*Ki69@JI&EtvJvZvVwQ z3@Lp#Cds92m{)ObrMam2T-z*+$X!K@hTshvy$oi~UH0*}$4hyCqS2ZWSwacx4 z_G+GU+loYoYn649CJ$a6@m{HXV&620>TOyb%36~f<>XeU_{G>y$TP`Uz%W_pLJs#f z!6S#Cvv7aq6@SUMmid*2tk<--YfO)xaasy^$vLk0*AWI@!Ub z!pkE1ymj_3=?$j(bGnn2%$_}2|8>@~T=7ZL#n-ppDyS|I{k-5o`t9(EwtVhFYCq>ceALS;A-2@s$nJ+pkuo;}ySa@2jYmPO zJs%iX)HqA^EZY_vc7Bo9!IS4I`>WEeLlPmgN#ay%BIZ!U+UAOmCjpp{>p%Hs|u4an9UA@qdbqA`Nlh;*T<&pqC=i~ICtUf=?|9NiIU^0 z;4@V&IrTP7&qlmL;H6o7$7coinO#b6`b?*Y+?~8GSa$kX=dMNUx2{gyQOfFfLwkz+ zi`)EDZMqgD?3l?eB7RNDiP7U?**8rV-ZkGYm~a$IpEk7gJePNk@wvse&b4>7e($lm zyYg7Y->(&Gs+Ru{xxdkIeeuF4jVm{YzId}F=ikXIUp}4i|FSEv^Ud>zN8gAZt*id0 zCM0Pa)LPs=^O5k|N6!M_098Md7XN{@bKZ}){uo#Lfi5VEH$Z8QgMq( ztqgcxdy`Y@Y=-)p9j`w#s9JwpUo$<%-@!2Qy>OZB)8ewVEqhzf9$atAo_6KBNt$^4D3ojQNU&#C*x3R46?*dtw4$TH7nblXA&p5rBG|lbo zzM_JXe>-QFXv8(0*d9BfFex-ydrMXJ#C&tD(=}12&uqOpJMyQ3OXB7eucYJ}ES8F? zO2(wjyv~*}JB3SQu4C=_N!-Vr3={qDyZk%Hu{xJwUYh5;TLJpNIvKWWe|&jGx7)V- zF^|nQwwA+p9)uAq9d||FS1N=EaqUk^+jf0lk$?uTSb5V1-VU<@?(BK8 zifavKMjuN5TCpVJ%I5vGzZQjXeoyK@)cxh+p8id5ON|<|1ud7&KVQ3p(KYSCiP#`E zjeKAJGjDCC^qgQm(O`8WNAH~X3?`N4r_E&tF1>g78Rk3xjezq7E}s`uN+XT@EGPfb zunvicy|A47lsJpj!JL2BktL4{a$`MV)gZ_k3abF^p^KD{kh-rQ7$fX&5QJ73Nik>uGqd5cbZ#P zcq8R#=axfR>l~IdRomZx?NiqG=t}dA%__S~L-q?kOFHFerXF?d)wG{2Y&;Ic1v1og?1+H_^^0tLHVI|0STl{#%awU*^J@Q_^4biFDmQeCWgt-Ve|GckHdaD?hU9Y#k8-z z)T+ht;nUe^-TSX?$?9vV`FtrMHbQXbxA?ouw)-FdeWClbT#(b5rB6I_YkIQotnOO7 z>RiP7Ox3k#o}Jvebfs;@#oQ^zYobyPoL!XVmlc?MFD}qTtysuf#HZw1tK`(;$?SO+ zIW&($e`3nqM%NY1FMjwXz9`IT-_#~CRdbi=tZ?bGb?;;MuNIoHb?@f3 zV^#`XXOF&pmA?0C>f-HZ4?HvONj;~=%e7GGwuxAL#!aW`%sCEk5B5y;oHt#_F?qJA z*P`rQno^T5vPC^<6?wE!AwamR?c~8V&uZrG|G#6iVf3|x|EekN`@G`4#qBh;r|eE( z2(RmG@D3}mHH`24CVNi%lkn&E$0i#>xAD(*y_U$mCxq*kF-wflyCsUpldm2=ww%#a zWSagZCYNl{)k~g=PuDzHw*9)_?8_HkhiyD|e#e&%*PA9f(U$k;GfY^%r`c-t8jI}T zjko4x&wU`DyP9za&qMV)>W{COo4tM@qJK{AYTc#z;+totznl^IK5Q263geQ1r$t3x zPD|rwY}`SUAgb&Zk2>i#L=f&M6O^K1n9;KxAk8n-@HH_AP#rW$MU!@X>+^#|;1K7;oTh z&)8gH7~XTUo1I;2%9o4JnpyldE*JJ(%m2iKLsGO=UCZdNjDCQOMc%`uFQ+go)wnIw zm%7`Ua(TzL;Eu^rpKI72x-^|FTWMc>isu;G+uCLn?1gM!R zIAU108@=7~mY;R~+TsW7{L8o5zSCGFFfGGPBhfzblV?*Q*IM~M^&1qc^kzGJt9~L~ zSaJLO8~duGZ?k`em~K?4UUAJ*XgQn8^fQ6+yr1XP{i_IWV(-~spcJ~>aZ-Etxi=EU z;?ar%8&?%rdX`7mSUF!7PgS_VoTL4&G&( z&+krOeE5`ENMTomJGb_!E33o2eNAElnE94kY9V+>BjepJKK&wdwz=D^TM*` ziql%{xAgxla+)16QF``i|JrxbR_-%pH?h@uaGF=>wJR_D)7^W}R&zSDWsJq4$M5{? z_s$l|Il;Epjn#ge=gUkUeV&B9x+OUV?+lDqMm*VYVy~&Z$iqzjZwQxsW0w7NL;Z-Ny4=ezpI`WL^2w~-{`$hX&i@Au&z)mT zG&_H)p=;d-^;wS;@Bdx0=Hv-&_MiKH9loi}rv5zsbfV(g$M*VF^~sk+X1=_1GxOPT z{py#_lf%sxeUjeFX)b%jV_C7;9;25{`rkKZvt?i9TrIP8OGHS?CS|J{84k-eMokxRz*I_K2Z zTrm63pew@5{YZ!TTk^>cr~M6!HkU0tq>=Dvky#Em>yK##)p4~Z`3md*e676j_QY0) z+8FU^pIA4m$*Rn}s(e*&dn)U>!=C+uzH7Dqe%$11*CDLgwfMlrhc{mdHGQ?rOZg{m zX!rfI+n)uw_l~%~u&FPb$UPx?ooJhinq~393u>NM&p4dEU7Wq(Ra2j6$ozlTHU&4n zj@Tcw z@nXudid2Jwj}MP~?f9Gfxw2-`+NFiT%kIhDZh80fnY(KjOGtxgCc0`%6z?>49}+Ba+OnRvqk4b* z)lG)6dybvo=zHcs((DYCjBit__MP0hWvz+Dn|zC@Vif`ZQobJ+SD$s~_|wZ-r_;Yr zVNu_;Qs}Rj!=d_6+xMnh2hL^>64;ujy?5D_MWN(%8iFK1qq!Khv`E zd-XnNTdo<3w_Y*bNjv>9+5Yq9814AQ+FyVD`mcC4f658pk`?z?tA>ld;eBx-+v<~6 zNORdnk)-F_uQghz@~SdT|M)C(-unnyziECKEB@L3nZo8KbMySO%d6$JemhyY3vS?S z*jHd*nf1)!?4!B|@0c&&+{2adJa9|#G8>`vkB0)|zTZA*%%3uGL&?FrFT9V-$y!fc zkkP@vqV2K}?*o;3ng20+H%HE_l93ltnQ*Pc?Q!)Y-OfyQIPk-I@`{tozYgx7bAMxO+&a36Rvozkm)EW&RZSp1AWXh2tn^ zALs3itFIoex*B`=@~e5Q@m3};-&)2MvG#^z59;j5=Uy4i+LWCl zzF&8_;FQ?zWra+>yVtvJd9^-!|BL;KO>Z;5Z*AeKT4?z9n*F4<{YRD8J-zt4ZrgjC z8^7n)EG{^;_)V05Y~1yqYW7dxC8Ryls1?^JyIsT9yecbm*UzOrZ_1ynEu1nraC_L2 zRfl}6MW=-Ih->yUtSi%Y?J2Lh{!O*!+H@!VQ%?(@-TEZ!>@MDX*zwV)!Vgv2)C?^I zWNN)ma+)!nEO{irsM^%@&6ZK>Q2CzC^|67AwlLLYKM%aroIYb#%;&$KXKMV?U{&YJ z(S6Ot9{A*wgNDh&sFyxmm+H*kHcdUkePqU&NmHy3$;?RWCf!T)5x#(yQvfrl*@0 z$?#M)PEI}C-E-@p@${d%ZMnbYcsCcEE8D|8fA)XD+QwPGn1p4nblR2(oA1;-|Frn@ zt?BP-E=>t}IA@c9H{YDiiZiTE_f7m1a^v$U<8Y@v$}gI}-dQta?OHD(wIFtD3)WDUv?s5U^cB9`d48GR^^k|`W;r_w1k%?}4Y>M!bIsjPefsmxnK%8~IRD;T zSI$88{lS7--kZ0T{0aEO<8Xa$K~=iG*`8*F=CxbCOj`bKi{~xY72)xWjVJzH@;Ax4 zr?{-S>Xn9zz>`e-hp8*<&peY}y}aVDtC`Ei7{jOYZ)?xpQZ~EA|K){m%+<5_Q{&Vn z-Z=Fiot`lvvVixGDSuq{%blm+-Q8iyGjDshr-9pP_bSlnx`_Xkq`o)eZ zuj^j9+uG!2-AotEH$RftXCLwR*`$jRp0aytDoqcbewcXmZsf*S4-BKWC9>sa@+mx-@lJ1dom+Qw-V|lg6#|#MxX(XWvURmo;>`JK>3xMq^bZ*GF<9+8 zrg3#~^(!W=@B>@{(oAACZanXETsP%UbabDz->`BqUt2?+)sfRd(|y-2dEs1n)FEKO z(GpwV39IJ0_Qc6Q{94~|e&Vc}lQ&A=ZB~k(*fL>h2cP}#NY`_78n@_9UKn@GH1u^~ z?D0(PZLZ1IzbDER=-lBw#VObL@yM&hwWVg0m}Z`FXwT@>6*IA#c7Df}E@7^d0p^*f zm#3K7h4EZ6v@^chbxXLe@$i?u$CjS-a|?;;K3>Tp&vJ_8ROpG*_uI+@-{mHG3i$9e z?f1=F@}hld#~c|h_m_Ez5fk+%ee&#EaYCc%@Rv71stFVB@7{1-t@yFdjD>Q^n^Nw# z-U(Rd^Ypg$xCSah1|wYZmk!qUYrRF)R*k6-j;(k|w=k2)?3C8{jG;a`+uI&Ev8lkw!hbQy1> zhcoy>g6lTz5;!omKuPEF)nfgNiyrSedn#r7^7nBY8+DU^%uCFaeCH>$vso!GltWF& zb75STL&qIo314?si4`w4+&S3xh(Y=t+Y_mT^k#qeW#<-aP2RZuTFKshjD{z7u6UK$ zvg)4yw49IKDOwClS{(t3`YZ&q8fq!+G6h z*JEFIwG`e_UVJZqZ|_&1zh}}uXx+d2Eb{)VSgwe|@NGS9C)taC_sTtTia)=0QtV`z zj=#UI%s<_FzV5{Gf_EDq^Y#6ivBk7XykY)PnUg1DWwt(fI%DH&(R=N?raRrN>0~VK z6gNvZ4{DluSf=cg&#dPj-#1GZacl6F`!~(o8n3nJ;j*9G63TQ%D*y8N?wRpHOk&3` zCY~8pN_(XPwtjlGe_7t&suyBXCpF{a&#OGWC4XpP(!;}(f8BefI>Xai{GWfO|HoC1 zUk)7qzv55wl=atmyL+cAd@PbUe`5d4(;j~qcvSKu_p^NbP~%k9clcd+^oKU(-_d#Y zYai8GZa<*>LFdVWgyPA@>^~Yj3@3X8ZI4*?C~}_G@h>88ui8Ck7C3COBh2Ti>C+<$ zGnOsUYF4X1=eI!n>)nrpN!PITb<%e`6M z=r>#Uo^NW29sUz$oqf~2)42TQJU+ISQq#Z8^;vIx-tl3L$(`iCYZGkB+}HUv%cz}L zD-nJwt>OAcqnXQn_cd1J&;86*e=)?(pmLs{o<@pK&-1?*44l;E6a{XWsk{DZ7BFOE zWU+CPi3zw^I*I9Y+U%eD{b6(dX`2c##9MyL-TvpZNcQ52wi#ObD#|z4*GltdbaZ(| z%-y=JbGyN@rxwh!y1ZsC+`Q(>w+q6@Et!Edp6vSDch&>#;F-qv85d8Sca>LIUR2SzTr<8>(KYS?!~LQK%YvTk#DrGL z*Us2_@l5Ju8EXbJMYV;u7v?RQuz6*vP7Xt5*o#vu4!rMldb>JcpX(_v=X19hny!VM zX=&EhNLDGx%+zGid;2&0nos^YMdisC*XO#;mAd!-Uu^U#9bfZ;DAix?(FQ4!Yg4m* z7DThO7wQBzKi+d~%AWP}lvkR3SjBI?x5n&7cFhY8_Ump5cQ4g1R*Ja0&-)GQ!bLe% zO9K~%ulFm`d~o)$6w}5_!MSm!>;B(dSoJ(tF!4AiOKfr0zB6l&*V;G)Bpf&NT6)S-95$&JGOq(W8dOty<*MF{N`&O=D9a!#LU|_ zWx=7<(#zc>*t6TBa#qQnc(z`A*Z*1G8RC#>!w+r?SC{;vw%5P%LIB^j9{%j}y>)E~d6mL@{BM7*;4E3Ea8>E0 zXlUlbv?6{z#?@>1du2BW*nZq{^;M^;Qn}Ab4X3lwH9rq;n|Cv6`KxH}^`QYG&!3%J z_(52ZKT7%(Z$PAc5YPI}hr$J~G_7%$(M^1$>t&aosF#!^XgGCNMeA@;Hm;NzcBBq({_~2@-QKGUD_f*G~dz8YeW<6Sa(p}-<*TXg%t4dOhPCa{5keah> z@nio9bDV?DE!k$GZ}4H(iXa7tJn~pcV8cW9)$0>t z_RdV4yzs8|p_5Fx^R`6>L|g0&FKfx(U}jkTW}dsR!js*ncYeGW@Ym>Z?IVT+xigP@ z*wv53u31xP9J*LwLeh?ZXLj9b(~4Jqcd~Bn_sQ>S)9!E42tDU{`&+z=yi!MCR?F8< z0fv{h&6ZH^TyZ?!?!?*cY-fI5`QQ-yA#Y1N%ZaDwe<`M#r{!yKg`6w=c}&=G_o5>u z>#jeNRH$j06SSK3e{iGG!Oqb4*D7qgTsN+mu38kNp60qH-Bx?LxsmC)?OHK^J}MulP-w&#I11&1`+0dTZMa z);Wt)d^;!WFP_2r`{lZC`Ht1)jxkDdJD(rt`pk5){D#73;X27{52y2Soeo~cq~)vf z<8rD!bNrNzKbm|sqCXz?Vrt0w+}u{_@M}tl>vFYCxsF?(=bUiMkPBeCdg{1otgqk} z&hjt|{l+HFtBZ{<`(nqeF@EZze5gSCIN!JyAdIefl(Gt#gfvb>;qo;c6n;Gnw<&-}%6F zuJyc_|DW#nT@2e47mDpt%%C6^H;_u()IEde^$8HOw*sld3RZvf~jq8<=YpVcXcn7J)=DFrAvO~diAfT{H+(> zJ+NOVWz%DS=|#^y{+{c3yh*~0J$Jdx{G!RN`Y$ejj{E$;SW|CCo$;P~w-usvKc1;R zRF(T%+uph%;ilhiwp}-VFRM&Unf2q2&7^7rt-qC06F+|nRs5NBgzr+qP2SCJ^DZp@ zIeY)|*LpGc&R;n&^Sj>H8gXE;}@p<*U~AFqS^fy3XML(!2fopAUS}lYjbmnH;sL+?tXX+L(0u_T;r% zN_^Xr`iyqQGo&oz`F7@*g-H06(6xfXa>qi#l!X3gRPk3`dC;`tpWyYE^0K_97i#P` zC>z)IJ@Wp(So^n}*USBKyJglrnWZ_4uiR%d=el3MO7kRozx9=G`7UWwc0#ag%GovB zS1p&Qv-x;nAMZ(pQ@uz3wllduvqZOW=Unalo=wKbxZ&M zUE;Cq@{z`E3VV;+J2Kwh@#ejE%zJ|n0og0Oa~rSxyBA-lZ^!3uUwhhTCl{M;#fg@l z+#jCnb^6~eUXxq2<@S{%SNY7pb00sJ);ne#T~#$rVPYA>&g@MqOl$3!{+v`VIO3^v z`>*&Rn+2PXv|hG+7n@qK+nTG|i)*&?gJX98x2--iDeVX6^JPsk{qv{J6iA!DcMl`4 zht2QJhA)`juqo%uvs$^ix&QaceEf0gSt~Xb5AGJz*2;QS`56fX2dzU^XxT04xOO>r zug3|SM`DXbZ#`IjB`tr|Z@%z}Os9B`8*(aL_~Lru{LF)YC6zZ@iXTsJ+$3aw_WnPy z=z;}7Mgg~7AN^al{RD56-OB%b@oZ^^AD345x_nK&WE(lDV#$P3?x%v85%x~fHBUVy z_dG6Gy8ZK$FDnEzd?c^B1sQBz$JpmGXPXqp1oYf>PMB~rG_ljai{>@>XnRZmy?Firm+ZExRQxOTRl^;*5NIY}vz`4SEvC78>t;?q+dwqQ*8I z$6dW9^&j6gnl;omzX@#L?e;u4VF~**#7|Cd?nHly*sQ|Ogrnino?wqn~cc>$}gS+8JE*Fv!_ zu7)P}zei3?ijO{`QDt=}ZkGAh1K(pf&$)lq<lwD?X#T1)a7+)#WCx2hl}+IY&#ogwqH*EEOGF};@eIa zog5h>94v$0|DUX{abSZ%)7Q7MiarM&Yn|Aj$Pu$GOsn*j(AG|$xfx%c<`TA>S=F4ZM>^1%1eL+^F zOQ~^X`quK$_2)YUd!}q;&gT~5e>?xrnJIx9;xh}SCF?t01ZrM2>6@&vZ+}W%(c%+N z@7&M7bmk6^wWPj_%I-@t3?j|`4Z7%@|-2jg7fm(o^Nf&_P@^? z-c4Wq-1?~2p&c0^QnL=b9gum{xHzv>C^(n7^zokk*5-RWf+i=v@tAttd)fS-vQBgD zE=JFmu3q&}-Ra4fhz}Xkw!fu6>}WAKu*vLJ8vBt08@A~lS+F@~V^Nr@&!mYF`8Q6B zFsxZv^5+@<`ap4!&m50cob6gqF!Bh6yzqVUFZ0Fgp#K+U`NT}U#~J!vdwc8Oi#u;c zId-%e8-Dtgt06s=Z-#k(^}O)b+MnMh1uwm^-nY-Q@{;~hZOhY%W<0l3I)c}}y%xRg zxg2}f?%GG)&;1#fuDHPGc}^=wL%M_g`@FNCgBPqwk6qN;_0j1;nWBN)wwu-m{&nSA zD3={Mn&=AKXsqb&kF9g{~z(`TQ5rT!)K z+LJw1mnZ)C_+iz_Ctvm$f2uzIjbnN5mc8D5Nz=D3U%a2Ad`aYj+-G;5imrK@crNXy z(E6myA{nnV{~h$6Eubu6n4GT>bz<$=4h{~1P zDIFQdRyzL8xD$4Ak!Drr)g6ZZy>mQ!GF1Z%?Oy%Y_%w0PzuB`SK7uP;urnry4` zOQMnE%5{Zs)99&R+SlEAs=YW?a-rH+`Ryi+9o+1{9tWD~uunYycVdx>*VSXw&m?Va6);;wbSg(XV( z@B9lt7V+okC^tt{M$8a=X134xz!%2IlP>$D_i%NZ`Q&~q z`C!$knVPhJ;#Zbi#t)O{f6(k+JvHHnz-(Eb#C0N z9Ly=rUubrY!EygVp3lF}Ijujpu5|T@l$j@NKFK|g@VIERY46(oGN)|b2rW`&yBuJ- zFKez?oW5G}r`zwhyjO7jdTEV@_=lQ$8S?|@OdbfwRc~fk`OEIan!h32uT1m`k7>K@ zBrSiHG1>HK`V0O)YlN0Fwo2mp4Q3Uv-oFy=u2{y-2U#+g$A8y;t;?n#@ z;ptYZ_`Q0MyO+D%)O7eDeJ}aew?Kh)ztnY^3%^b&ysCTuiA-OO75|;Hs*f227IyRY z-(uix`X`rs^7O@@`M0JU@zn-Si{0?I^QrOO<4qPEC)R!o|FrRjhUZ-8XE%Pz_FezB z?aBwo=^E32t=>9YsV~>s!!UcMp!n<$wN_5$p>4_O)0s;v)e8lDRyWOBnN(FMs9ogn z!mpw*UeRu@($3khi(S`ezj)YuDk$(%ztc)@s4);+i&t#P1|4*E!VK=kHg&qtTF=3j1MM=GL&uGS5|a}vnqW~ zD1&H;Sj`m;-cQG>Wt->x{ddEib@2rD4*S9h9~$PTOgG7QK9%1UtQ_(D@r8Sy%O1Zo z-1B3**o1oJttwq@y)yf!EA5|adt(3Uk5X#M5ywC0?AZBzZPJ4r8&%cMOlA%Fm+Y7u z>zZX_?rP3%mFA1{te$9EXAmj-V6JB1$yr-_!UtS8?tIS26UtHt(F1C03`S?#uW`_7&W=K?hIqRLs z${-gzhYNbG{SuGOc1aoRf3T*cilckp`wiY}r6<(~_x;~-;FH^`FZb`?P z)z24Gojw*-d6ws9zImu(zVhC`h-f>{3(uRQ(mJ{BY`^&2Te(B>|MOeR7^PZ{vCG!p z+xlK``F$y_C;vbH=Wv_yt&Oct>-(E!liqwf>Y(MeQY>nYY1`@Vr%o%LIXJ!N!nL+I ze)B&aEF4Ef)<0Nx?6$F}v#(6>MXp)<9Ak1Toxe1n?LXCj;)CdqNVS+;)=mF5-k-F< zQtWO~=A9)|4!Rt(E=uCu-LhhB&T8AOLFy%zK}On^))m%!7j3V*e?eGi9!FP-``>+U zl4YN#e&~AsG^5$~TY|&8H!sSrBpJ+kq$OK^E9}m^J>Sz@pULSZiobnjX~o?5QPOzB zH8txrzggy=z4xn63%I@axc;f=>6d0bn&@QR>S?$2c<;^=R-1d~?zG4~zo>{|#Ufqa zd!KSlKlKauSIxhw5tLs#p=?N5gCI5?k z-O@^?TyTqJu|Jh@a@$;v7qwkC#SZs_1Xzc1p!Qs?oaa36<*x!A>umF#AP z%A3oy=Dfb|{Om%2-iEmjc?Y(wI_2P(Zlq8g8P0n+lr`UMUsyLh zme=|Fk$=`UEil1Eo=yI{xM`?G}~YyF;fNm+b$GeaB+%sXD@nz3pVdc7pM4$QP6UD0?6ql;SdLPu? zd;XP;q`~}|=k}e{E&Og&@o0NdUuVLGy*8VKayYwQ{ai3lH|M>i&(=R8B3EyQa>}Lh z%x)KX$iQEsrHV`Q|ZU zT9?VJtq#s|%T8~NxIW{>`8Nyi36?$2OPD%~zi!3CeUg^`UUW|D+}a8qGv)s;t{CudU^8BA@;gbd|C5)bZ1IG} z{@vwG84JRKtA8n-S83DUYI>UI!`=N4m=@SxJ!tr|-e*~$lEc}97nX(e6lSWJ%PfAY zyZ3NE3rDBd|4DfUk81ut+(ABiUP`oF`+0HIMcGp?A{Qo>T#kORWKQ&g||8wt8wDm8&@40W>ZZp@VKD@Yn z!l%-UVI7t)wyGw4u)M_^yz-roTVV6v%=hB82QR$vvzdu! zz7C)HGqY_=_heN^E9x2FRS!({mA@&q@$RMPYM~#67oL#(e)VW%a+04IvcI=;g}F>~U zb&Gr6HQ9i_UTRj?iP|Djm;Gux7auiZdbxESMKK+G;P|T_Cc@7Nn22c6zr(KUzRMBt@ zi+?MTqPvlYg=u$V)r`wWuSrbUc>Ec=+)!#3a{;B?RYm096VW))S>QeR#_5SDcZOK@w%<(|x^+Hc^ONMO|Wm_9hS41E0 za9T3`!^1b%jjFHv3%P1J@AcHb%)c%AX0XBp%Oh?F@5s07>)kl`b@tI&IbIMpO;NXevr8cM*i4z*c4@ z6tg~auvMM-xKki}$s1+C2g?* z%RP$)u7)h(xXM!Bx6vRZ&#S6dE$euyn8@wAH1QklfA1EZRph%X#PzJM{#hl5{W9Il zcS0&Bekhz`tu1%FV8J#sm1XK$nKo(*AHLMgyCi&Ye!Y;BoK(4gWh=K+W7B# zkL(D#J!{FHccra$%GZv!#lM}v1 zKT{O_a;En0(F;c=a}|kY{VzUhD9*@Wu>FaL_@OQi9~(uMyWiIao?~%6%ewHbaZDpa z>olV_rfxd}&ZfZq{QnDQ?TDD7anI($5Ai+r6FmwRc3Q5_X_6EC`f~jtgSzFs$8I0k zU?^g+E`HVN9nTaGuUj&~P?dQ6)`jzWjbT$-!Ue%q*{`Ttm1qb8PbXXtR26e`LiL<+JT>nhf;Lp~r#k*rB zg`b10+ zzg|g*?@qm~%lh_-Uw*CLIg@M8zApXqSDha`4oYC&>i+3RNx=m3fS655lRQ%3s z$}~Ar_WHA_w&4z9Gd@2JJ(@C6&^lxJ+mC*mo^{q+`=$LUeWrd=HN5;j(_PyWofaQv zpKkLD{kf8JW$p4WT?>k`%O596?N5JKXw~aH$@{&xbCmg>e0}qGIZ++w*DjpZcv|Da z-`6$sot7|{zHsX|mYOlm`?=%)@M}k(Kd#z0b!o$s+78Cek*o`saAhwnajhqjXao>|LxtCv|`bFBd#z1tgZ*EF{OEb`S*~;z#>Fw z_G=!-Pr3#gtv{|j+INh#y|3ILb>EbgXS6H`yUsw67+?T=h>jC-qmcEw-6=XZ3sUBA=xE2-(yeM5)cTOZEq@9Z?Wa@)#6lHJi; z>Q+|moyS+NA3A$<(~^4}e>+7c{1P?b+P-DpJ`MAl9Rh2Zc~-60f4oHWX!f!{nG+9W z8l5Y(V=ccIPf9v(jzbSqx_6tQoqVxR5Q|IGf3xhMUf-fQ3gSpMqY!nEUCcOHGF z`E$vIbCxe&{%N@M=%LmZmsOSTc1~Gp@vwEr&C0YdYc-+{yB%MWbn(O$xr4_8AMvNZ z^%Yzgalu8Ov7q9|VlRf)W1q{Lu4=UE zy{nMN$~%Ik^Zz$r3f}Cqv~RQP)rHf{S3d|h`q&Vv#J$1FP$KRs3)7AlOV!<-yx8k`wwFd+OyvLl?B%oBL#wt*)8a(nm84mM+$1vore?6QX99nyTF` z-R)ZIaV5vGVXxH_=eNt$*Ztn|CxkEi$jrAML4WHux_2$Rx@O^nzN&{4JXRl(ZsWMs z!rAr?i6F#%dK5j2!>oUoTTkFf-C-ODkNA5^2d!}U>slRmUitUr_R+d;C zZ&@psZTM;9#B`;}o~dV*-(1~v@u%dgkk^N~UKW?#UZSkH_t42p!v7Zhxsvq$$N}$r z*4h(JEX!k@AMdJt_`$0wT$>|>+ANjQPb6zUd(gc5?@~w2+*<{1YO@Zk-IXT&^7FOj zU!PbisMmei?#LZ~gVm4lvfqWp}%cn$@&jR*>>I7yo7tlqg%T^J%8^Sez1M(m8mmK z3d3EGyY(#CvGC7UKb^1dterG2>+wEJd!_SXeM50eW%v;rwfOisQ&J7; z*l_2Oo}(J8;#af3-l8!3wcYJk&6Y|Q))QHZ+@@wbzCYUjbh(&HwN3BDq#yr`$~^QK zH+N)aJuH}Eneiysso{y)k6)dq#Am-{*w1tA+@ZV~QfKt?A{lCq*>zl9E!TIa`kJb1 zQ(CmPwAXQ0?J}Jn@jqH~KDut`+bEm5$zYSv=3PZMTKKlUXrFIC-~S9-YiT5(_WF}G zKJN@|m&L0wE@OWBMrylK_34$ZchWfjzW?xc$=Ov5r2#1uc3H~Zw45#1(-Pfy_RYFA zT65m4uQ``}^;NQ;>2HTD>kYSpm^aK?FUPsd#$38VZ}pRO@ecy~)~;Wt`1cFjgd~=# zRTo`b(z8n@=`%Oam=Soj$0@G2jj2 zmqoW*@4XVqV|8I!_IAzPqMWVGpe&scc&sDOW* z!Oy8nMVGO)sHZm=>CK+<{X}x-W#N~+n-Z3+E>tcRi!dzj-84;GAvNzpvVARCVP_UT2NIe;6gRk>KBc(fZ$(G;!K4SOo6 z-(wDZaqU6lJdMM*SPjd23%}IFXnV(<)p~HrU*4&4)AY|AadyhQ6IvH9_DnRtbCT(Z zPwn1|b>}a-X6%0`(&qc3VC}&Qy|!gr*%N-BIKR{Uhvn|;i8uHv<{O1=xpCfAKk)R@ zjWdqslx1v_n!vE_v5vFUhrWtwoBaQsT*JCdeHzz;W+vYLHyy3#0$ZK!=# zUD;mT_f5q55B$s$ATKWE0U}l+~xa*`lD_#inr#R83!9=8)~HWYYg z&G@-i=AKli4ok#pt@P7ZIRy4y+p))D|IGELIM?%k?O8X;W7D7P*#CKlc!gexS;(x5 zcp`9RdvF$uyMM=JmtAFLUlir6Q=TiOZeF-XQ0;hfVLQ{Q68Ed`<&T$~=Q})s)o0e4 zJ+*H)SKW(O+HC)0$sLCh+r|Xa@dr`*wk4DQc{(tfM2J`bZvos$pxV~nY=7X~OL+0u!^E5hZizVzDbB-q3|6byG zs?yPX`nJ0{Un^!`^ysk*p6ex7ec}0@&u%|GqLa6{{F0eHAt?3q+@jy}-ZEA@dg^$6 ztX9=dQrvK0|MS$oOE-6Gn`kBdKDcn#u^y(q3p;%79AMugcW9Q(v%702=IDej?-a8< z^@%<5`T}*ci^2P~nz)>g_WboZZoOddD&1$c?au!nPSs|4eBb%gH0FOf{5xgaUhi1D zH^lbMdc3h2}w2nDR%MW^RVUyi5QeD56^tdBb?ex4s}*Y&%j<|g7Ao7E@X`I3#`zD57o~ewZQQiT(k)SP zf$XoNGhE!?hg2=Pw0Y^X@~U^Ym#^EEbZL>zraBKMmsJ7*)j~TLq}l}?Jn((Ri@87Q zo+e7xTzc?sS^CL$i;gh(^4vUsYu>kX@o5^LJ}t4@_1^rlnQPbY1G)AGHLgxuwP&s0 zhnO7~3lxu4+`pr}>{4#>M$Zkmr|h3TOYY#wmimo*=Xv}Sx6IH#nkRSeIoF&u$9sOY zfAl}IM)OXX3*V%#@AALQskca!R6hLs?F+B%m$Tp2Z~FW)wv)L&$mgKU?Ja6-1@n$* znlbNaJ11&m+8ndcF7s>oocB9t{!&;Iyr(jK?}xb9;)Sc;&2EZ#xln&f$)4=J`Tmiq zQv-ij?D;-5X6^yMUF9ntPFeQ<*Pl(_xfnLz6F+{;&OmIA$)C@*wfEl|@=iFYEc(KA zeJZz2y^*2p+Ig~aLo@syh_s`{GtSVTs)B57F*Wps# z>rOYkHF@q$^sALoR=N}cERv)Q1&ieFygb0|HB0`L3(lU*5BOuh)lhKF^i_*%%OA%oyI2JD=as}q zz5n9vnIF2`=FeoO-kY}DdJeD`UQ94H=JIP!xW=!hXz)%wVeQI};Fz5Auh@-({&Rd^ z)mfom+Oqn3HPa2gXF1vPb;{Gu*Zr?Oxcb8pPRv@M?8y}OlZ{Dymd9t>#)8z%zIjR&N&G3D6 zXu%x+dNT#3Bc+D-!bG)sA6w40i`loWC)v!6@yNI8osYK^J>s5gB%LC@%#307^<@#( zD|04Vh3B^z%7-6j)hfN(Bz1Q2`cub4_qFk@{PDGNM##P!Mf&SZg5qY)n*8pB;M;AE ze{U~W*9?#=U#x6lmSDK(T=B~O88=tXRGt-mzv8evf1=m42lDe>(&BGT;aC-KmH$*x zYm(ZQm9Zxio90?yy}L7@i~H!h?=?R!+_4Kam>hlnsl@budo_2i(>(p{hqm&aR*(JX zZ4~MSM+>V*2_4*bOo<+ zR;*{%iTEj&|1%QjuKcd+={7$^w7S^gv#gDP=M_hT9SU*~((ZtrhEovH5*msj%fiWQphBsTg_8*!Z>Y8}3rtaUA zKJCMPJQdlgA9h@QqMa)_JL7uN%jH@Ie|A(fDliI7{$;Iwl~;TMOHkCzwN7i6FJ5_gUcO#kOl|*} z?l;Rly3DnLoilvzjXvF1jQ6$8iyx-G+;~3C)T{3Dfj!zvC+7B)x88fRU9qGsO}qOQ zo7>kt2A^t7+UAQr|1fd$igRX?oo>f(GaU^)95SKK@`kEL=Yf!_>@};8ot>6>_4Y0u z_0N}_o=N*Zp73FRYgf~UE%#o}y~AOAm9I_V`oGNAw)`)y{?X)`5qsUa>Py3p5Vo%i zq8m7-{*;YaDEi>@J>QQ`Gt+ZeWX9{wu% z^k(9e9j8r`^+kF^VO-@=gv;!yc*pWecV>&^QpbtKh@{^W_x}X z-+x3zbZuw&XO`E#itV9G^EFd*Jok*^91xy8lr`B+ANozD%=j`1*nwci(e8 z5?s8lJzp4M=75@98uX(Pn;bQsv@t?~b$!8aJ^Qvo}R6dh_mm%QG@p$>YOVC;pFD}k!bG>~{Dc;5I=~JfHxv~sPS##M}UB1b%;?gcb2E!}%eLb&d3vfkzOJ2uyQK0RM{}lHd(lM za(AXi#0sqy%WuDLa9=DcYqxaif}Mpfeet%=e`lqd9X|4E;hx?3EWz6R3p&J(#yl%~ z{_fT#;i>t51QK{&znc2j{F(yKhB@Ljh8GT0f1P@^*6FH;Bc^hQTisn8x&Q9P@{iWf-_QH?@Jnmp&iwa(T?mw5GH1e8!q4fDhc8zt?U&^i@yI!Sc zFm>9In3rWw|F1XtYI^2JJ74^P508>wKc3ET?t`>g|7YXV{#WdI#@Q;@n4UK3D_55FerI9Ih%>65l@=zv>fE1I3+?Z*Xsx+ayjAZ0 zcj-MZw#iM+U2@Y}w^!jPhm*OGibellGbENGPG8L+j_za;zPMfKD65}y|< z^hvx}bM0EZjq9AitmNIVtc=rz_ex7{K0muYTvLDH%4ReBfZ&yz)5SI7w!d1^P-Xr@ zkm=4ep;=7x>g8gCe{lz%wO8PMFJ$Tcx9I)r%bi@YSv+$W-#pcH%X+cy9)nLoIVbO* z;B}umWBZL2$IUD!FcrD=?mpz>XnWdZ*6j}yoi^nsad6*lyK-C5q5G7}l+(+rEVGs> ze$<`gEE@SXww39Q~^WW)jx-WTDYu|x6 zwYyj~%>_lnt_WE9N^6UhGAIA4XpZM@SN---OnKwU$d!jWG`M4g+HP1r3oUuPqPIW8 zXoKL|=Dm^g-L}acIku^6YcZFPuXI(~rrFm^+2`lHJlSw@!Ge&5|ASU=Pc`ssy1zar z&%o$x^Cp8?`#b+{^b_h1Jrg5#mC<-zV3`$<=5{9Jzw*iG0S_6=;tlxF6X4y`My7zURZltE@<)WH^0|?4d@8JykU}t`=kb4Rln;A zE)!MlTiut3-tJj_V4+dLpW3=dbIR0|EyGc5>D|GriX#_bgb?INFlyy=`BzSozC0nx;JyUO&lwg?VP^ zhP<;MoYR}{ui3NkNXEXkGiNJ5%d?a*sohh#(Q^CNEdlGU?cck?^mCJ#r*D+A zr!L54dZD;nX3fkUVYUBXY2v$cG!!SqErIla#cbu;3%)Bk19Yh1H4<2%E4?R9yF zekM&;elV?>^|7Z!Nowi7gumsLT)WmPzuDU#KI>KS^uupmn?5LoZK_r}e)s##L|vIB zuhsth3%qe%wDZH|KaVaiNiF{DaYUi1(qgezX7o%G$#bvQ&b}A=Jj~niqVr4J^3I@- znwx%H@0#inT{d~vTW0y>#D9lWzf?|VNP8)jaaf&g@zb)_t=lKuKeM=gXNT?DO3#bw z?Wx|!(ob?Gwy>@7ytifM=B>3#RxY~>54Jz9iv9mdbc#U8<=IzUk{a%q-3t8Bx!U%R zO2Kcg@_8*z-Cb|xHvjWKqQp1%Ql%Sd6khdJ%6`}En#KO+W#-`l z9vlWKyQb8zoJ?kY=rf~E?@~z9OOX?tyIikWE#B;RFSm2UDuu>lZtn!|Immqx>&#HT zx;RH?@BBJurMEvL1kbHB$ct~W`k$(`Q}WQs!1N89d1c=g_3vx7II?iN#>?p|b7w6m zH(qr``B=i){>Z<*%T4}XfA(JT+3z#nCcBS)NHfc=YvL^MGE7wu^1Jsj|GeKRZN+7K z5BY66ctDtb-T(f& zYVMkTL}VYsd6CKG%8@LlvlB{uXX-5$`yr` zD4XBRW7*yqapII2Q}_3M52}sxyrVhZB<5|oxF+e>tUZ2fWR6ZulPULB_S$#HNMroy`SH>=f&;#DUYf>7tgtLMES3cs^j+`>z3pQGP(VK*D`(UrCiffr%PVC zc+9@BS}?`T@yX4XH}+RQyWZCRIJdJZb6!lf(axsY^S{pN-J5;HJB_{F=+6AL%cG7( z9e%if#Vv0sjmt{ccX}|M-B^D?`M0c8a8-3u(A%UIgFBq*77Xj8ch;NS(YCxW^TVGm z-E(g)$7OAla8Gf(6Ls&-bsar3PxkwVr-f9Py^C>td|~bK>lum9``(``v+aH(s-0PR z^|w0PhOI%4imR^MynAwf!;&j`Yu`1CRQ@cYy2JATa^hxL6;=kwTC9hVHHr@B&p@NyM{S6oUeN{WAXVU1=E$9Tq1uIo1Sl0<>SfbJ=eA{MdC$k+zgZ zp5&`3TZHzpuBz@>%qj4#Xw%i^J)4()IriY}x@XNFow$?lW$ih(Y|#We^QM0d*(+Jn zRvGV%>|ebi+qL`1#7;f`)T6&E%+IP6=2-ndZg>C5J{P@;E07<{TJO&@dUcvlvwplN^<4I7hJ)$Wn=3C% zbo8EAxb}#AQ8dqb$zz?<8;@-{r(GKH>h`;W=_kFL zmmYezvG#hVn*1c42ku|1p477L+TP6ICp@EL(bcr`W0G-g|N;@fGhWkz@0H zIi}YxNjaM-P$r}#A^B5v$6~u_twGuTd#-C}nRRVRaNSz_^3bt^2j0f5-t;*rx5#?S z$;F%OKTmCIGK_uRprQHp@y>fy%0?5XccO}qMK$A&5AlHc>oJUK4>xP7O>@gnD1 zZtcsZQ=0F5nWW66t(UdE;qmuXE{VpAPo&D4L%4nh=gna_JgsZ}v)|!U z?3O?4n?FAzb6@zR=H@U~|Dd){lb%g1RQ6gjf90VMw}p+B6de+y<{v9GGgIcBQZj$B z(;ctkDCbPh7=~H?v!?#vWm%ba<>~#&Kew^nQqJU5UNO;q%cK2%Ej%?jOFlh$z8eB4&MxncTVT+ z=T{j><<^?6vtMmwxv!+EtKa(UtP`!dx)+^x3e?Dwk4QRf zYi!7O_-P``#I^ELKV)Bu@b+C3JltIwfAm-WqE~-Cm8`6JZ6vwa#g}rvJO522t1pA$ z+DQ=svEL^{-deol5Ur~2$ho;vU6Q_p{Syl1lenlQ~aS@ip3ffbgD0N9lsN3@-O_=BhIHAif?_mG;N!odZ+E% zZr5YJR`)NYOgQ+kjxAzJY@lX{ZkZ>=$Wu~cHRQN_*dC2OD8SKiTJPP|YOZ)weT z|ML1z+jx!Tp6>m(&$z3CUHYlaf*q@5zWK2S-nuuhBREHx zP0uZkJnUrkMe*+$pVQIKRTDR+z1i|6nZIkXpjli|0{Y)gSmP|IFNr^CJ|B{g=7-MQmE}`GSd4+OLC|8$O)ewAK7k=LDm7irNNcEX-2H zE|Lt}FDVFg%oE@hTo7}8v7h6r7U|Ge89F;ZIbK_T_RkZmOFG%s(@b?bZfkpR{Lkj_D_Pz9G!Kpc)TYm-&3Q#e zmuc-uT_Z_plc*aV*6bP^q~BZ2x~Cvj!PK{+t3G4?s~u_T-C30x3yy6)=_hbyvqbR1 z=kl-5CS(p9q z-@We7T;~6dOuoEh-n7=cZ!akHuC~4-#cpx!R$l+__Wm_u%2#(yPHMhU`RxDqnM<~x z+5gcxX3nWq2WH=5GJHKBeEv4W>FKedH{NfsyS4G1+LB4>2m2J)_X7Rq3npnOJvX{4zo_&EQ z1kZ}9^yeM#Cb34|P2c+Nw+v?&6Yu`2&ND|hzxPwVVjQcix78`C-Twacxh|`-j;1$W z`+en9rZS6{;S8-G@4pA#ciVEL%PhFR;=f*M`uwAtPR`%Q*LWmsV$i(52qA!>+-Bw zyFS}c)VuDPmVMFj>#O`?HbrZm54Y`n?flJP$31UH+4$3`>Px3*9Su*cn0h;IPDwH6 z@wGD_KAZXJx$*8htWiG~EngI{R?&UhRkO?iea0xg&7UXd`$X0l(*^JM;Vqr*!6v2)LRW|w!I7c)A3 z-)o=Z{P=(68#0=|n>aRd{5$Y`{>=mK;qyQDS+v`*g?Cp-B^;c!TrN!E?!sN}c8zK# z)uI`Dr>wckTjOKAS-774`M#^EF`kV(q?WNw-TdmplJLS1rz4k-e41W$MmzHRsXNsV z<~y*iT(1An+xf`bsDrJKUI;1aXk;qXereloxBhO5x}5j<6Z5tHc(dt$crNhjknR1X z#oyV_U%q)mhLKfQaoUUXlXdt1l3zEodY#IIy|3*;rKDPV^zWydF!uUKTkTgBoAs@@ zD?X)5IY~P9XXeNLRZ-_xPwv?AJaSvP-TglgXFPjruOXoM?W)$zHwW2F?`+I{RJrZ4 zx&7CI1HVsLJ4PM!cxk77ZhPkIx6?#dJFrRw-?+hAP>{LpqY$6wRd+_i{f6gM`n7Dn zKHG5a+0&x4T?(hHrKD>j7BDcYX?=gXHm#eBU;ejt?cX^+{9n1ZZEW4d?R#eF`ruCS zkahBJgD1GG-g*CV?6;GJ%S?am3pnuq_Uq+Syt%lJc=qml{;`d*rD4Mt$K>=gk^kf; zXzhK^z3bubZILrBdnbREc6lRer*Qt>V{Wb=2?vF)J50PMc`Ywsk^BFm`5RYmEB;v& z&yaT9ziwUk?IUk1yXIEd`4?^#56Ui_?)K`p)h{lFgU&s2X*V9YnS4yy*r|Kv;;}rp z8^?9FR~(YAbJ)P>(k$`nLZhn80}g%`1)+}~&X%(-^g8w=3bPjqr5DKSAN=fZzz}x8 z=J>>E!$^&Dt&IU@b(||P@l@(&dU;dm#z^%8shyxAyFlRkD1lOeSdyt(rK;+ z5!IheS+kGd5j-)ITl~zd$QP3yyygpZiS=5Ql2O&qQ#L6|IZ#k>&5!3yf|mNBj!H*M zw}^V|O}?9Qykw#EsWpGX_L`@2c+`7!&0Dmf|Htf$c8)ya6BL`Y+8x`tvZT36ubnJ8 zx6|>A_UkuuCgsgH)l&%2m3zMJ`SKb`JsbDCbKK&4IVP&ExWuf%U>11T%YW}C=F1D# z6lavaSUmCS#Qz*`g|lwYKDgkN(fW{=&sM*Fv8Ve<+U(2EYfk)}cBuIfN6V}e?pHGZ zU(#gjnAddcn)jN<#6?fuc7+H^#I0CA?dd4vq)+fb!`V^;*RK~4WKVFdtJiLn~ z>(DzTgD2ND->*BeO>Nul<6XLEHt}erKU;IC=c8PS@Tx0K&FrDC6wkW9ntAEZaZ_i` zUZ1;1vvLxg{0moqYP&n(729qFw$^m-g147;j=9lL@ebPAl%N6yee}|6Vx1aD};Q>cU z-Y*8ngsNjcC^Z-)d8o{-@yb}z8_TnK`r$cGY{F+e=j*RL%D#_z^#LoN*NzbaqA?my zqE!a1EYmhL8}AWlFgT*fIrD_OX4b_Pzc0xm-Zzdp${e?hIVx)-CiZ$mykqu-W<~?% zv2Cuz0f}V=Vw)Hun{3+mG_PUEi44%- z^J>#tV6{T_RlC{(*9>ke{@7+Y2mJ;57xcH@dSjHd|FECc^Pbarl`od|ujO4Lf2~W# zhi~z`od5UVcO59&5P3r>M|2zK?e@8c^b+|ugx~nSsx-Rnt!>Gl#&-GoU#;r%s-Mp7 z-}mF)^tJEqJ8n#rF&6V*q_Q@rqTxzVqHje(%GaK=4+;iG@k-{Y*_E7lv8|rz-?d6-mA+WF{gK$i zjMDzOzc$qLw&~s~d9iT&q))Tl&fY53KNAx-i)~upyFHy}pRQQTE~~Azcuj6j?)z)f zSKGwC<*mrt8}!HiqQ6U*%S27J?$o5-6T1l5mP2CA;>kbbnTLgnAFk^}n{ z65aT}96Zf&JYb0e^J4?q;*C7(AIt7(*Z*K!_K>0Pk&RZN;Pnel?ia2d;Ze_j@;r2Z zw^)mJu3*XGjJm>zH!0RuPEm_fB3O35am#P>z9`3jQBG{tomy6LFY~8g=l*(askVMc zZatS))vRS(&DW`}D>RvLu+wMXp^ID#IYs1>JNpH-^=ckX+|;t+so>!gGgM937+KZL zI%c@c$^5!*<-*QuyIwo*ON&}{C5+wnrK_^8i`Rs;A?&#-r$ZO+)(OzO8xk09{I+zp zdF!lf%~id8Mzf{_hT5KOUH4^yzo=B!+SPL;Bb=Hgt=CnmF*GgY5NVqzq8il`QTSk5 zIFqRIwU{4ym5Bic>Q5g%Yji%Sn%q~)w}YkG<&fI4Cmyo}z5SA&&8^>7ENkU=F7k=d z{iF}4;@8(a_ZQ~2-~Do;x!sR@``=YQ%T{@R=JS-uQ*Rc1uG{o7W%BKsWxd%P%gh-V z%#K_*#F>^L{_X+4$Ag0{GFd-3genT|bx2$Oe^>c<_kLNaonOw)b?^6$*zo$0{NC>e zmui=v^wz#C^J&WcJ<@Z2pO7(5ld?&AqjEDpm*Xz4;%fH6W|L(ls{Cd`J+l$_N zFQ?mPFIrk=^=jAtZP&uWtCvl$&e>r&F*`@vS&_+ zjJUZocS7u)oi}XyyFdNef1eTn*T$q{+USoAN%skj9nXE6r{I{+ZFh1w4ZZnYxwrs zkM&=+uhi9dI{75>zOBIDPpq4N#V@V8F!`U!a_8QbQ`g)>X9;=qeJs4j!2ZiAIN->( zibv9VGBufYe-s_XUl&U6pLjN1>2@4vOsl+8tWNaBxYy6$?>WU&xAJWDz0louU#BbU z|GYKH`~T+0oWBh>P2XH|^mNv@&tmG&Iaa3f`khnVuX3h{%lC+6ucx1c=;PNR^;bUs z@~PJe{qHc*j$6ICFr|z2+|SKQoiZAIg|QnaYVR*PFK+Lgbb0mf=u4@Fc}*cZ(~P1k zPyB!NaQ-&84J+iegYL_f@)R7j-?!s@WNeMX1FfrmYl@DlPkQbWxTEjfk4L?#YqHgU zpXF`)e`9y!Ecw-v1&JGeJjk)O34iGH=;q(9QtKU-wSPbVeSWG!w6l4U)1fZ?h{rAB zVK0`{xTr3lEN#4WZMeA2w^Q+z&iYzuWvQZial2=&nY(M%{Y9r&JHORlRlK#b|FPS% z88hEJH_De}@1JV5e~~KB(e34vlRvrqyL#2nzvtt(BYRo13U|KBTD{+_bdmYqY-Q)x zeJ3w*_IOX%tv9oLJWoC&ri{bl$OUb7CqX-{o*4%$4r>21Y(6f?{b57lqlhO>tnBB4 zY#tfcM_%}NAiktxS#jM7Uip)9nIeXV82=YAe0%a?$ASOl*X+EnzddDBedj~z;kC!k zM{Rm*x89;!IQpZ`{bSeUrUtr8*Lr5m`0aU>GyGTJ_B|f4;-{nUfBPmqZNhy!&D}rG z-MRVQy6A4K&HLK>zu#X>kFShBzvE@}-!u01e_nk*nX+kSjN1MBzpvEme_pcYzn>W= zn06%asNS-Rg%bQ9<$WR;9|xZhJSJOw=b@~j$hR5Eyvr*N$}ll(`@tuuw@xBmHAORg z{p1Cub6>gI@46bb)lTK))ty?WR_*z+0N>Q$y}{o85Z3DZKWjYyP*&{onTdEZhC& zyl(l0tUYOp-4j;i99olN%)ax4_dcUDN_xKcoRiegD_>#fSAS*LSzD82`0bI-yvNqp z6j?j8?ATkxm;b0Pxa`Z|8|1~k#oM^bpZ`i%r$Vcm(#GY{t1fojyD`CE$nXfuYJ&qs z+Y;B`&@epd<(>BF3`^R^9#bd3X=T@n=IpL{?)2_irrp!FX8GSpVi&Q*xkz_r#*hU%fy4<~E(c zd)(~C*I?zdf?}VTS0;Q^$SMw%m&)&Rd$Q!qeG`c@4oX|@u0MU>VTzRM1lwCeEK4>n z721Bpp)uH^boa8$C#SDmsmqmr;GNg8_s=V{&w=EZ{89LyX~SwSfysS zEabSUrvEQ&J4?%L(vXC3 z$smilZBxC!EBYj7+_W4ucwtDG;70pfy8&^eLbP~#ZtCFLsHs{f)YadYYx2WVXS+zFZ6Qfw#7Z657#Knxy>p)$6)`$M^cJ4gF?_xIh+jYSwr(E#j^<+Hxt!~2si_Nj(A%@IC<^G1H>kXdU zvCB0(ER1U0Y5(g`a^C%jte*MJ-ZFKv)7?kbbK9TZez)ep()n_^X{yuP z3hR&G4{~k2|64#hQkQks)cKAM&oBI}?qRu@V84;=#^kE!j~1RgH@7n5T+6D4m)2|L zzdn6fD`9lBh+)naw|A-$ai2|tRwT(?|D;>=??R&b+b3IE{EE-A=Nww5ozrCA`od+0 zJVOPm{?+nxVzM#H%KzQvWVY_?zjWnYc)T-14#gtc8{};|?l!&tXQ#paJ!oz*2*ABbeV%-VKg&7yfT*bC3EWSq6^#LL;| z*whSj7aD3Zoln)c{pRSgjX&mbeYyO;FI6(N?Mg{ryNIA-coW|V7E!GRm)({j=GXwfNa=c)hwy`uu{mn|OrO>rb_+ooN47c2}@P-StE`gJs{A>9Wl!Y(?)D z-H9*U#QuS0h3*o8IZFy6jX-rF%_+jhAx)vO&K?inO$ zZ+pht_i#q{>s228zaIPg+;?X1E%94*J3}eKN{5y2j^SqBTNcedh0@8X6OJ_o*?f>b z&CY85BL9T2=qi^2mh=N3E}uUXt2lwbahB#ZzADW$))jNEd&eATwcNjd1;g@mZo}kX zMhW)o8|B<@%)Q&Z+)3x0(>MJ^%16K3bN$#V{-|f&r~4akJ&HS??Xlm*V|rcMmYbKv z9OMp!B$P0Ty}rm)XMOR}Vb0H5qFxt1pZ$5r>$7xPv(c2^)jPZtjtAN7W&A40T)x9q zV)Y}l*^3U_d3?(34Odv+-*s#AhqPb+Htub3V>;Ai8XXtrbEY)4K&b1M*a0~$*?zC( z*}B)dzI>Y9w?um9X1=pOKW@utUG_`qTri`cPk4Crl`}?L;-6M1}0)`EP7x7VKE}yJOy2)(_S!lPtflV-ezSOLTVKG3RJrkWb@Qw=gbN{V+vyUKNpd zmPJ0HKleq(9{R}lAkXUF+^OrSM0A2%jW$Jrp>iF`&iGW3+OWbyYpC6YTmWD37k>KwX4rny;FTOZMRj>0w*cv zr4}3HB!rXAA2RSQF?7g{ewgknzwj47vt>r<`zIGJw8(5f_9-wX;>DJ1p=aGTs~J8$ zoW^`ZyS8a3uhF;U4RNn)L#IS3OEflK7jfu~J}{$k=Cs2SihHg%OI!)AUCjQY8YA*3sm$X`$U*CDOG(j=8;a=FAoQW1kHZyEF z|2|Kse6H>S^MfxHE_1%zkjUFNn@`f}c}1X9WdLVzf=Nh@(#~qetqiHFKB==#T`|Y7 z!S_q?l{;%{D}%EpG~3N<_N&+Xt0eNc+SF7a?aam_`@6pga%bJRC*~YEQFX`9^Iexs z%civd%sqSLXWpTLcb4|6ZhbKhJ|m+0s!4$AJ{bz)ndYhQNu^3Nyj z%OZP44|bfoSX1eg@+3B+Z^vhEHRG?>%Z1%`Nle?ivpziI@ybKnY}aX?He*`6R>VWp z;h%?t+~&#gx6QaybN`>`JK@@+clUaJe&Oc(H$+$RJ(DfWLnSNoG`EP>MJ+5+H)mK;h;@AFjjwbuuXqE`? z+bZk6?sezep3s+^{zUQWvWEiVTe^eJWE}K+w~@Q~=7Fx>TMbXVDz|bR_T>LGw<9uW zZYA$LhS@^g3qxg2iS%-C1{pE=WELMc%e^@>uuL#@?!-&7M;2ds_&~NyZDEDpf-6mo zw*qHz7Jq683je&|^V!;7`^-i@ohN$A5!2j_U2?+o_Fqtu37Hx zYsarXm@AW*&-nixlP=44?Jw#a5`q6E=O`N-T_YO7ueNFKeO568xA4gq%zD?qoz3uk zYZQ0U<@mZsj}*loD*Bb4b`kt2v(PBX@S6RcJI8+QllXV|ZQ)nVFX}Ptye%ZM=AHaE zF{G!N-OuvKM|V+<2MG%mt{vbuh|UeMirOFUY#%EUR9*3ZXU^4!Tx^Cj#4V1WTPShV z(&ma8qjvoykB7~xCNAii8oO|+*MjFE2MuOVILCkI%FMr_s~&uGZu~vz&2FtVcOG<4 zGi1-paS}35ir-zlQL`aLIMVrUPmp7y$t7QjP5WGDNnVwYF3InSJz?7sxs>DfVX+ta znsfahEY|xS&}w3(z45c%0`HQ$Eppe2v$lx1pB5IKt>Mo!*_fyQz{eg&nc5GczjM+< z3#D&w^%VR+&E03A;bphu`WFg$Jzoa81uDC)cq)E5?x5H$)*UCcpUr(9@bZEi-~9~E zg};=arx~4S+$8&^H@870KjySVccVy-liC`|B~b^|(phFUuk=vA#(QLXfAcRFt2Ou4 z7VZoWdHaqlsA$Gk;j2dj3$M?6woRlUb^1x!I^C3OPgC04_e;L&-%{g!_|f`<_nDX4 zmA_Gl{mi|-)Y&Pb#%krA*q5)D)oMKq;*kjryT+}q^|3{x^N^Z@h+%kcM8>w)f3zA- z%4~01uD~^Yn(Uf29|G=(E%>@~`CFEt*PkMbtg3ouy>dEz{PFV7;{OW`F4z}_NWa*8 zT&K%@`O($-RR_*H{ZMdfwB!t&P}Mm1%hW|8S+Amwq-=94OKvp@YFNo8v|vIapYHx5 zg?o>tbh>`_f7|x|$f2trqSYtq3%owWX#OZIu1?J>E>QiDU+0-;6$V*4hbo!4zOeq> zd1Kr6sK;Nw)lN9J%w=h^&C3T$+unH#c20kI?(9v5kleV|PwhX}ocI?Qu>H*cBg;2B z#eDg2wmo&l;;oz~;v6qMUEg+De=T3#_U-f6ac*ER;@sq;ZzJ)%%u?q16w!3nWx3lp zJLb7$Ji5+$Bu1_Jfo&mAq5EvdB_~+sWiai%!Sv_O;#xbIb1eZ659S?O@#08-=$q{; zPYL$*htJc5C zPae9?@pb?93&*9uKP)kNqr1TM#cbs>XE!JN>fCL0^t-hoTXn*Q)bol}7iLXTyTFyz zxaU^8m73b8Qa$TmM{g{!uIR|R?c6S-xY~1*jA+{%Paq0Ynt&^%=-81>^TO{SKMXiNvqdw`eL7w zZmaWrb;E|Q4_57Y(>gcgVif;#zUcYSi+1X6uv;)e;Fs})=;uD7AC(oa2YXyjnSV!o zdS0X8$4gnF0xwRrCdtkSGx_nWc~kQXGlpFv3BvVz^!sn0+_}v>CI6(P0PhE{{rca7 zJMA3Ovs$iyDdV}lxn*00;DzhVhd2aPUtYMMIt{ z4R*9U#0lR{(#|^;Cct$fwMMMi;QIG}NsBE+|Fq5jZom=Z-+M5G=Vh9@$iJTn#!ojM z@`#duU!3vB^260nm%oJt6uvv4S+Kz2@!^V9C$}#?yzTa<0)y27K2AR7>pZekUPWzr ze%8&tSLyt8``IfUgylXlwLPrfbCR`0?Ow7T!vx7@X|I>X3-2nees(~WrTf*t&6%64 z1p-rICtUt;e7i)*KbPX3XW}esM;xtnpI$zhxW{7{f%d+Mx)Ai|x)c!qU3o5XA zZEL6^#B0NJ?$^)H%GHdUeTC+;PfijMQ;rO%+VE%EB`#09_BYJ@FO3d7(t6Fb$K@XT z@1*bo@iiMnGhNPad|t(IjAz@-nqZyW3m=;eChg1So^#@5aH&ceC zeCyPQY!&PgVoMI5NP5AgX!&*l|H~H{+hxvZyen_zVEdf-@Jel_`i6PCBu_qHF7obX z{QNtw|0uElo4w^@qwtxf9d(~)O?Z~i`bITMVDY-u3;j9H3GFD!JowNqyKLsP6vm7G zbI;C>;Nbe$E*Jbqb7kNj`&ygYz%TzVO}^W4XL;J3e6d)QsGX-pPE69xRN-O2v2Axq z>pc}OL!K2%vRCyRoK0La(+nSFHIxAM*p0)#H@9eaes;Jd*_vU zZw{|coVHa>s%olCSN&7Tjbe9{XVi0in83D*Wx*+}gW5U;saDS$a{o-5a*XfVA117jZ7rfCp;z-hobA69&)GuxAyr8m7LU_som!%=LKkdGpufCSXX;5+Tw}R>_ zM%AZxTQ&GOgC5neF6k_*i4bZt^LrTZ^ku2OquqjM3mJn`wY)eMEAtZwB4$1wQXLcR@|j? zZRbs{Uz?Y-ix=Gd;*+B3|KQe>P~(pu9ymJioqNt%RC^NE++*INg^O$`sq{d*!@(yBmMx@+!M)=OS};njh^>()ES z*IE%W z=HpoV?{xdz89{4QEbN&B=FbaAI+H)+>VoJ0|9N{X-d`lWT|&~TPWaoVy%tCK9;(cp zl6&Qt@W<)DG&Y?LvRONkW7F9g)*Lx+CP;ZiIqq)nQ!r{h`FOWXOLK+_FE`8LK!)w5 z9bLz_eOR#MSJ%A^rNvH{GLDog{p_fa-QAwJNTyNt@SYjou5+Kfh;gj>aUsT9TF)~e z&?$%QYChv5FY&HRUlU%M|Bwmaws4P8$NQO2l;tOVn}6Cr`QzK(vy2>OVv9Z*K05Pt zqRi{^O&Lzh_GNPGGZr_q&R(`|-kGZEIWm9qq}HS|_3W0^JkRCkXguvg)?0yvHAf5s zzPUB5^f~oz)j64UU*p#IZq4G=KgGMB@mhEiXNyLr;!R&JgQE-Vo^3q%g|%`PxfX=a- z?oWPe|8;iSvD*5HV8RRAnzEP4&+FEODbD#VX*5rmKR!nDwVzXgb-M0@tN-S(tb03C z{my~sN{7B2oVfVNB#jBqtOf;V9SkOV@+)=p{=EF{n#b5lND0ne6nk7wR zOAtEKct&QLBIjot)qIyO^{Lb9RAhQ)mg;G=e%w=YW?!7&ot}FE6!aFas4?w>uNu1K5Hw!rMvI>g1*wr zTUXxx{omv1)+H;RnFsu9d&c}dYj(PL@ry_IYb?%btXTdpP~~~$`y{VjiqkjFK9Z9D z=?2g7FV_ygF8b5-mc4N8+-Hl5pYUcKy*x*9K}&8@*e?d}TZ?@|3T~D>KcoKNx-z}t z)B_o_SCW~Q^Kz}1^_i&O%unWe?5*zeZ&lCL<+G-X@NV~gXMOz3m!}T%1=IvQmsOwyYT9aj6CRjcu?vZm_DJd2@_l+=G7tvm?HLPd{l=cUtb{?f%%(a=X7zZx%mI zdEWId>{iHDcE7H!jJapBFBiSum{TQHc5z!%kfd6&+dHrAlFD=Xr7QK9KlnC<`-sdb zpEqA#Epp)f>5)-;GUV4Ln}_0eU6(QMy)S0;;*I;FO&qs^cR!t994W|m>HEp7iSthd z{Fh$krxlVB^+4W;?b0^coo`+)U=Y=63-|YpKG`7J_%<^8z>^s-tS2vYjVkZs{BtFF zO)Bfsjs?#de@m{2{m<~7{eOhT1Y39cX+@e!?$I6UEWh$^`PP;7?q>Pt^swN6!Tjz8 z`={Gac8K;`7Bt`4#Z~rZm|@NKcNuMm?D%+%zm-->KP~xJ*&(}jNx_m6ZR{R@H(kj5 zGWBozp9?12lpC(~oOPQKdMs$kj2BHOyiyAjB`@0-+cTY(^pL)k{(buHpN;M&XEHte z=Qhjjh>|>b@GehRh1%^6fn`Qd-8}NY^on_H+%WOt z?3+#dQ~r26nS2y3ERNaI@Fw@2-mjU04nK8n847)MR4F}CxW*ul%c@XGC70)_c;-RM;g6H1ZI)rYBJ<(eIFQ@v()6@+W|Fq|yb=Vh>7aCQa zRv)&HLGRfW?){s@SLnuPhiqKPAABe>ba9DX?D9)FJxdooI=|;r*fP`n9pSuIZw-s? ztT8Ti?DbqPeQS5xkuw(`uRS_zX3zU|D*LUh7Vhs%oUW9ApD$hG&A%CoPv%EDthyy6 zp-`3+wXJg9LKT^=x@XM%J>I|NmXz{1K0bVI#ZR3LeqEslzLtyWjeDnq?(J z{yEL>>-Pxh{8@hUMt|nSHC|$?bnF8~(#qDI3QIG|-E;b@Y@yCA4|_4iua9|-Sbu-T z^}5&W;PJqle`1y$2;o=D=kdAy<=BTW1_sxR=fCS&Yw$cve)jo;%3DL215Q`WJ@aMx zQ5i38&}jvbx~ z_c9KwojC8|35zGaFCHuUzgp*cT73G|qbdxoT0F;|Jm&G(-|^pTANNv*!`8dJbz5Bn zWV85Hl&q_{jxVY!YSgkZd3DaF#KQDR-VI)dFMF~qCwytCdz>b*aGJ!w%c5p`X3Yrr zSX%ISYitzjp;Xa*Cleg!uQ|ME>CS=;-48OHS&4=I*$RR*UfTwpPN9`$W$aDb!maz5>Mv5~Ux!P}v2{yrUfx$-AL015m35Wa!3%%>YhHJ&>YrHezK(Ihx;0iya_$H& zTCUjg)8kF2{F|K3KA*YfmLJaj&UC2lnP1u*qeR=Kp*nZJ=UPdxa=Ma!=buIF9SeyP z@lz%HwV%9v{3_wWvG(72T=gx_X1{KT3jA>W>{b`kmQSpU#3rviaQipcp{2i?cRW&O z-(LD+$JuEa**o?vN}Af+_9MRk-=w%NGPZi9cV@46boZan(+L|69~E#uEtHoQpZn`; zd3ElKlWP{PnYlT8VT!Z;vVFIEnZz&J_-~X`xI91fyza)kjK_L;-_ChmJnOR3Gmn$k zmhNmbinuxDNcO5Kt&3W|olH3|!aY5>!nj*{KU8uGJF=PXS#T%dq-N8xkag(_Z`t-H zTwiais9Ho#AaL)0}xexWX@7%v)Ga z`J=+Rw&Pbfy$-QXzF}CzJ7rDWlpWTOWfxvh+BaQMp{&u``pzoZ*GpyF1EzC&|9djs zBf>3mVg5C%9Bao<>#|SE{WqCxc5}b<9B*d3%`FQmb+3C02EFWi`T54|_QhwFUHSDQ zj7r&r(j#4Dy6vRrRZZNGa?~P~J;}Y-XHrZshmHb)vEo7yJz9}VD|!+s`D>T7R@z`+Be&=F5#}_)VG}ra_4Ne?w0z^ z;Q3#F!TY*%3fyYnSf_~nZ%q2@Kan+OuYP~S#q3Qwe{Y{)c+uE&an8h<2L4m-onL7t zxzQ~6rjgG<1<~>u$G?TM&SJGzl`S$L*fy|B`1twbQjcwr->6?78>dBQIpgYlf$A>35l~ zKdUnH`Va4`)eR2!k38n~y>#9}<;umju>F;bU&t?Tb((zH{( zn*G+%Ue&?IQRC;;B$2dfS4Y;z!}*Lo@A)2E%)H9Ja?%V@h8t6!R5Mkj-wj=tBEu}* z5*dDL<=PM-KdT6>o9qWd?>T%_-&Q7hRfkubZNiK<2N$dLNx3mTioR%>lwG-NxzR*T z7x%botwXO4ZrOUd!-H?_0ekj?wM`N=-}VYR7w+-zGVn>SusnbC%?ByUw3&zkPDf zUR=B;Ao}I`g$#3<_r$Gkp1=OykBljCPq()TXqh`K3zE@XdDd~k_U&bH7NT59;lIzE zJ`ou;Ma%JE^Z{0nc(I0zFZn(HI09H)Z@t~EYt(hvk~QJs!|$&uU$WKzIBb}h-CG$X z$eNKH=>JF2WU`)spSxI@+M8f~pNZ=?%B6*;KYAnJu)zMDJ>N|UNo zP6|w$9e&p_^QdpU>^$R59B!LtvKQa`RPH)0mM=STdM3M~%h~?fEb^j`n=f2pJ?A&8 z(k)~vYpcMC6MyWDY+LVpc?+$4V0_fk*E6(C`RepvZ6Y&IY26KI6%E~cWXnvC3G)^_ z`+HU*>EXuPpEp%?ZgYI6l5@}3dzZ+D$@^ZmUS546Z|UBvKXdMC`RYEo-^HCi-}m6Z z2Nts%#p_dE_}zMQ{F3Cnc?Vb%;?(DM@BiHYGHt1x-F)7iy$Y4Q|9X~Q^f=pnwnO<} zSKHaRUbUX}XAK0S>{)`BRX)6F(Iph-R^VUc`Tepyw@^d%8{1b#d}%p4Obu&U)-%0c zpxm^SXP2joM*2ao>}z^lF>bcs*>2kwtTO-7#qw^$roYF+ML+fTe_pTW zIF_PSc=mLS$f_CK90dm@pZ9#2-rUY0oXp8_QD}`=aH^p-gHqM2Ag7~AX$)&@Dx~JS z^W-%d=db_$vz*0b%@q&rg;VdY-fnlv>i-Yvx!Qk@uYYWNyZ+44vK6nnU6#M+e5bNQ z&+tXkl^O0wp1=P4jWNOH?2I4}(N#~r25qpO_HCVH`sSxBN&-{mdHwz_;`6Kwu6DXM zUteVUoOBiC$L?({anhViM0Mrw+RU^TpTnwe&YPlAQy(vPdD7vwzPY-BHITK1E!R4pUYUgcYeEgvi-NBX2FJVzh=W5M|Abu%O*G;+kN{?fRz2I zxgzII<@kJ)=Gtap?>R@xT;^+|*{ugZ>t#<|J^MMG*;oGAv0F2HqgVQ`l)0kCUd598 zblz0GI6dLCxM+6U)O{J#wVk#Vuyb|nt>H>Y!Q6?Si*eEec`b0ULPK?ABq>Ua$4c|--6{s zhd$TL#S7j9e*PtTUU<{mr92CN$!SH_{Q7gM-ete@{q%W33Og9O1Zo0Q9C}v>UC_~t z%ljV^wl+t;UiK+>Z+_H{Z@OUzH*tzB-jsjhz_0MXkIuGknA7xA{>lHWtiZrI#~RDH zLVC9EJNl+Xb6@YLb5o?11RDQu78GmyRaWx4exAzWEa&@fX38RE8#l5Aw?+CrXk3ua zcKUQ%fA7qo7Du*8`dW>S{Pj+gul`z{@AG%j&(6i$?<-EZs*_;U%akT$!J0#CtGbu+q(ahQZscZc*=yCpk_tjak!!_OGg+cv_XKP?Ud%M^J{AqR`Z} zJdy^kf}7dD>NM+gec$2q=YY28DIu2ATaS1BjH%=ITK@gp)pt_n6+fT;Dls_owEVTf z<23nQZ=M+Pu{UH+te_ZIlFG3s4coQ;Q^h=b z{&;TNwZdjWdqU@yStTYa+|$=h{>?GFJbDj{N$^=GPWdgTOHf68=?borF z)C7#LOfeUHdO}8MQrSX7uEl%y>6FJj-&v(Sry@r2(`I@3Q_?fm|Eu|yW0%lbyE2|p zYo&Pv_n{RzY{|>4PWbVg9iP6hbIpYdRRL?&PsoM*l8L*zkA2rJ8Qlc_gSK`rE2C{iHz^^Up?5rgY~RjwU*W>+e3^6d3WtAR)-3xH=X7z)bJaCoTV>}n?wtLiviywO z)bh)<4oW5rB@$;_zN#Er5SO*X`lIL+&m&eVPu%o7cJab*zK(L;i_s2Mv3owvTk&XZ z%1mpvzpB=+Zpa?qy6(lFc|psLUo4C`>*bTeA>ON5U|{lR)~d;`q8lf>lz(b(75wt8 zEih-78H2Y-{mw6PA2gqK32M))I^(pJXT9Cb!lw({YjTxe#`&BO7i(3_IpfoRO6|Yg zv=xbN(aI5rr+PfM-g!d$%{#%&2!8K>{u8%tjEr^OvA&7H$U8y1S7}0W-L+ecwI3(M zeNblNpLNyvRqpl&8da9gx?j2X&fbvgEV?jb+2{L;K1;+-XJu_a$&;GU^mK>zrvJOP z3opAgL#NcmxwR;?HDlt3dH-YFzb^dX^h|YDSEFaw;ZvF?pYZRAxUoR9I_|=xvd^vM z%YK@^wcL8vRAtp`UZqtc&RjXheOu2cWLG7vxl+13m%FYaCivFLn_FgHJaNm&W^+bN z7W+0^wE;eM`tlZ?LGep;)YGwII0?0v1DHC9e_=APa_`O3&0jAv$cP)iG%(w#YZp@1w&i9xmv+99drR1YYuEms zzv!iVp;G-_U-yC~!qWspxHp+Cb7j2Ovmz^|^}yua-pigAOk4j$=(?EGq0_VDKIb(p zl6z=tIU`s0z0nf3HP_k$-$X6GuCv3tW5JZa;vHY>=Sfzq;?+9#`!maoq9)({;tvn+ z3Z8dZYkGO1t@%rny1KZ}ecF2!?at@cWZyrqu9MwZ;#NWbg%k%(HNDf^Z0FACl%zPz z7-f9CR&%gVpdjk_zM4yc3UgNIEuZO|VOq0i|0+?H`!=)J*Pp+9!N$R)Bu2OIn#Wh8 zmnU8Gs`uw^$xs$t+xF~^^8bU|zs_}a6+D~0I-n%mv+cyAn^AAYjwJ_~)S6B1x&F%W z|BX9Kj;$!pFW=u*>h?6)I6~1`Uecm&f$hqjzh`CH-H^<)W8|7O-Gr4f&!8lad(zn! zTR$(a4a=`Ia8F|GH0z9PH`4$6aQmh6YXX12c5_KxcQQocy-?JRYs{0DUQd%)S?_q7 zaY++TmQ-{#$CZuM?pN4U>uaKdXPsQ{8@tDl^WfuL=XZ(`ai>j#ju@6LTD?>F|JHi8 zmv)9SJg@KFd3K1k@lNpsIZLB6Tb6b2X*_k?;rNFVJ?W)&{rxVD-P0$poIcU_N>$;F zork7ek}%KvqnN31(|oT+NR(}Wb44HcImshp|HD0m|}r| z_hYsBnwS4w=KJTzTy@t(UNgUFUgff066^Wdwm^U}P3iz~WX zw;p_Qx!T|!GgcCWQ| z@I5JU=0HwuwfKeB>=%!I++qLdJ%1nHs(Z)PLJPvXE(PUY_~!ckeHv{nzD6Sd=&aU1Ny;ar5XUQ3-4se*fFI*z{i z`sJc}VMZwD{%bWBUoYyXwU|F?&0bn7G0UU(`=Qziw`YE0D>&R`-rVK4U3#l0*QcG6 z$`>p;Ix$@A{Em0C*R{>K<@=^!<$&c+CslDgExBJkKk~BX4d+`s zIzC%CW!y?k3t3dGW0zcgeA(x-M#9fCL`yCno_gxVeRbZaQ^fXVeHLc6FQ~WNZF7O82e^{H?iHaB3t%r8gk^uZmHo7oh}tP!{ii?iu?U_Vd5=?KlWv7 zWgSa9aebp#@%~OnH@&MdtZx=LD&133{(ZCkb2{IXjd@4EM#(;TzdgM<;w;Ck31>IF zHn1wrnlE?M|NE0bY0Kmt79Pv`Zawy9-MfWKDZw zlT&?|qxRzjTi#37yD!N*hs=?=d|t&x`3{F)ZpFF~;k$WCU%YME)+y^c^VocG7GbFs ze_wH8+LyaIe;$ahu#h(7=Ps*y_-O*mn@UDU>5n>gKOf&Y^1{1r&Q8~rPTO1M^*7yD zT{S6p^76h_OuQGLUDcYA^*3?1ZU1}zY1Mh=B{Z>`WpLxsdh7I@1O`fDNhrU>z z@#E~=*l*H57B2Pp5k1r2W(m)f)smrnh5?)OTmqLXwa(n{TXu54SI2D6o)_WwFQ2vF z_w)L}4dcIlB87hpn`-^AmiY$=*qjN=oVQYxNoykXo z?FHQ4^{aAkWtnoFg|xWObuUB zEceV&Y2%q*{}mN{zS+Wz*}*OAj8(-s1ms`2f2tRI|4v0{JNKSn+iHGp(A9stS~08J z=85`#XU-B?rBkb(Z2o#7-HEp-Zb!>@HXr%&WUqbl_vg=e#;fHseNkUSS@Gf*D?PWJ zdg*vHAi`@)#6+Kt<_@8!Hhg*WyA;>P*a;Ms?r4{6;WD^x^JYU3v%if%|96pK&Sfkn z@|Sg`CYy0`$4&deqV>JG>!kSk$?xYKbADuQ^T#di6IVLhjH51o#cwtmUx^Kh-Nf)Y zVtrPZkD5q?gXz39CSTK4z0*%?vHG$5?ECewVC6}{9YG8ByOy=Cy;b!yaNpVmd$ljF z_X;FTL;ehs|8w^Y@B4XwzGUs%oT*LeEL_Kz>0N|*Wh z^xrVvEcL%7=+E8j-)5SbeLJ<@N=sjNqDRU6%IEwh8eg?s**7fLw11(}vi|bRHUG2H zdmcor+B-Mm^U4eS&Pk5@pG^p;Wy;w7vqD;^s=2%Ky53Fs=Zi0Y_2#Q9{w^x~=CQGr z_5VPxjZaR5J1<|oHGI>31!dX8PQ@P&xU=N8A31*aaM<6Xx2;GSY_LH?n+F6_a&Q6n@$|-+^c)++CF{344$2nj2r##GxvD1t=fM! zZCd}Xt&MN5Yn)$_CX#HZc=w0sjSJ;MBA1>#iaEHK}}NxQZAWsC2gb8wAYsXj4}HSN^3bdkne8Xgr7 z{(b+sdG5v)e^h;HCaTw(XZLpdt!j~(wj)%Qjc@6-@W92%A!n;qmp+g#ef3TB<8F5w zZYj9{^Upf_Y$jN_vi`akFE&Nd#8smIPxQR{eMx6GOx*c**P?4byWF^qV_YKSf-d}0 zD%zjG^LUE# zIS;ln`3O&4vwUOymT!l=E*@h`DHMf?}kTz}XoK7jva)aUZF<1g2ho|(O@i-D)A z>v*G>)5~h-)BrAFNz+S3XJ%SIagvGbPqdjZ@3m^d1K!JP<(qp}t^A$asOD=K$GC6n zPMOD>?mYXWdf)2bF0-E>Y|a1FB+mZTyJu1m|0x4uk)*{MSu0m&JmdV6a(~?dy^B4; z8*XM*X7Xll(df!q=G=Ecd&k724COa(6+M5y`6Q;zZrn9@68~3jjr%FQ4VTNyJM|my zcsa~FBv@|SKD)`BYwhdQpTTVlwJ)=OdhffIQ8qxfl7C72p-HT}mh8`pp2e^;xpDEX zXveyg$7fAmWqiz1FmT?!{?Lj`k3LUaW}D&oj*DU1xg@8o@B^D~m~L`E>hiX3x{;xY zeDs!(e^$?*G~bqVaca7>B4*743&z{gg7bEGGH@_kO|9M$QLh%VUWDn`!=AveCXe}yo zpKF2L(yfB6_a&~J?cvxT`m~Tq=vQcO#h%5_d>yMe(|wkEJxT9BTl!BXu~F;S9XqpR z#?;+=->eH+vuVcHwT-r{57*!G)cL&VRNnG_T8TQ(n&U{-+_r3bS|2EI7FKT+Xuz6SQagFSxqAsPw^t zD)9sZk-JmFR(Bux{_2kZR|UqcQ)l%&HGBQczd7U7Y>^<|DNo#EQa*()3FaKxpBrj~D;@aOAWKHDQ+-6F@*!;ZXuVE)H_(LdW_ zY4c^PnT@wk^)%U;UW|J?{Jz%EXvE5%TO}X;)$!XU1euDrNm8{x(nE^NIwkgZLdUoT7?zu&}wyjJHp1qpe z@I@=)z26@OGau!{<_8KMUecIqG@F%ckIkN*+bmZeK5-Qb_d6gJ_ole+{jqD=;T7?J z?#$>=h<$dpk~*VGub$pJ*KH`NM|aW#d=12n({4SuPIs?Z<1PL%LO(Vr`%w@9eU%w zOIr5iBk7Nom$kI|Z)li!h^OQC#{a3ugoI9tGJQMwGPsRbdwx>#-Mv}2F56BxZd&q8 zb;W1-@{X4qvkpxE7ZG74bKpck)cv0d3R62WgcQoxxZD-u`#+r_e*a&4uGpVV^)pV2 zda?3sP>yYwz`OaQ1H;{2^~?VnPW-yD|I(v{Ce@9$-&be)uhsSs<<y-krFE z2lUMNSYMS3UHagAc0%d)M2&Mf3k>3W#6$C^{k-%h;LYX85EATP#m>T|Sh*6JPBd-%A%P=>F#O!9KSSpCI`3(P3JhPLpX9F- z{y2-vD7~v^Q?lCqcMUc(OCrw)bSpAJ4SC6W654XB52DV}14EdiBj$D@^WlJZCRs zaJS%o&Z_r5?$6~@rHhyBa*~|EEHvZHcINZOEy|DPJWyo5k-3s-^W%BN-1pu2ViFj= z?%nG?+3MIJ_nfojs@a0e%H*)+-ez$s?lNMWzVH}Up!JHnyHLDjtm=*u$yx9I{ z;$LlMYzSN{x-XPp#Vm{2)mMY#)a&T0Mlb#Kmf!N3BK|aGk>KA&5yzcp9S>f4=KW6g z6LTd4w=U(#t=UL5b~OFQuM( zA*R6Mm-{kYzBt}_+RC?)adMMQcsM3H`f;5oRao+DLCB%T#~S`KiY#lEXC1TSUO4US zAFdyH^=)~p3xi&}UcQ$-;q30*b9v?G*CjG={r!LD$`XZDoF#WmReToz*%hR{ROfM; zw^Xd8tX+$y&t5^N42Jraj`OT@s$~~ce6l`1|6}pYTZK*=Z?H43*IM#4>dlg*Z5QW1 z%x~QIeetaqk-Z|fqh4CN?dujeD{g;(i4&JU@1CFHznYh_oquepa@?mQDOp_Bmf1Of z%D?9&XF1QzuRO9gd|FOiMT7W{v~7k*X4-zZXI}V{?ffrm_xyL8mwIoN=<2xo8Z)gayLBqcTeTdjPpLQ z?{9c?^TE~k_q-OnB#vt)g>yQ&94&J zeos?fId!|jmx;&LPTE(*ye=|&{;AVJci&!9U%6!y=L#i5;WN5{a{q4VJ!%tnQcUuQ z72uMy)4IbWJ%533^V75Yi=|!(XuUFQ2-o@ScJ|}TvkL-TO#aC3{g>&m(r@<8{MboR ze{I)Cg`8>ie)nO$W$yRlEg!R2_lRg3@MIKjyv_NL%NTC4Q#3m4v*9BkV@ z|D*f&Qg!`5Z+)8e^d~8@Dmxx_-eTh~=q^;w{B9+qOS)XR`2= zBOgSsnA%S5;o0D_WWjSS=LeZ*j`GOHD4xAm8TD$(l^^GqT#0J2_RtTJc749Xs$tTE zwAqR~n>T5G zG!@w+_I_f-_rC#B%Q$weFJJc9J#Z?Q>G@4^-f!=Fw}`*5c70*m6r1hNmmsyl#rD3; zmBbH6Px|QX@4WtcVdQG{?EOg>UoXv*5-PfJ|1`&|X@#4XtpCOKp+LhWt?0x}_pVC+ z^FJo!&*ZMZ7b$n`c?H|ixLn^u8PYL#9hj~>^S||dMdi)F`cEGuIbY1XJj-u-)_gs? z_j-{9A52dqPq-2musrYIz5)T&D~F7g?(GjKQ=fixvfz3Nkq10IJPfw?vZq{?kv%nM zX{N_6yHE~=OB>+2xzN|H0;o=XH+#4e{;RX3W1@TrsEq z)7E(jzh2zzE$+XtXMXuajol9qdhc#@;CgcQ<4k4Eqk?ZwaPb#U`Q<0`%ff9@=^XZ> zWp-X2u6Jg8-RWRyYs#r)GxeX}^~~bNR*{E$G_SgJ#@xwr=;_$@dV}SsP1&)|wq7o~ zjI(OId^t{bDX*>Exb^m{H(Yy9g&K5sNXa+mEef69-ExQB&A-G=f0K)-Pr+Qp85=4O zEnMpQaCxQAofE0@fz|Eet&it!%s>9QnrrX0 zbD7>wMt2_^o_n9A@~mM{_K7#QemvD`czZbN{LhEUGnzh}f9`Oz&^F*no@C;F-_V%MjVxqf66l6}WzO!6`FLYf-GHYItzV^JNlo#Hn z2D)=vRwtjm_QU>Aeq^~sov@W@Y|p2Q0ygfOJ9-2|Mdj86+|%s6mOP{3+=lA-uk*a^ zs`doB9z7RuJ}aB;`0ii^-ER*Q%1R%$G;ExDs91B=|C^In80FoK`D2=LPk&*ebGcxB zH_!LHyWa)2*D0>a4p{o=kbcDK%P9^5-2aP`=B{iSyi z&ve_;XKnGiGUW2JhqqF1ZDwcRZ5#bN@WGPbHGT7DoIE)5$fKY?(kra1-|-ejM`#!R zd~@z>;HHZ+GhIIK=uKy;y`gZ>P5wwVr@q{kgQqH+Hz;>?axDBiXW>i1pDT}kdArq( z-{o}N`uKyJT|MuWNS{xUJ#8SDnZlAh<8&hfUq<8kYvOM>J7>$yn&HGAwxCBLCP>fg z{Io+cALZ&kSeQp{sgTbXIr*w||EuQ3YZZzUPyI}5m$8bOwR(5q>e3+9ONCs)R=b zb-n)OjCt3ZgdTNT=#&K|m`Q|u)JyytersX&m3P^#uiuAV?Rvf9@1HMI`mWorpZ`h! z?eYIFSu&&Sugp9XG`0Qlq871ZGm@K?-~E_$K<(6xV|mApncaKMlD_klOnK!g>3c>` z!hdX=`|v;$ch-;Z{_@K%o?;e7o{uM-1h*~X%YAWFK+T{v zc?N5~o@2;DM&TKYrG6WxZNUqa9yJQhWDnk%VmGgm|yqApIt@c{{5S;{?GgSUF$Nx?Y7q%ML< z``X%RUBB#KDci#Ts#Tp8hEX~K`5jvy6>p3d>0G=h=t@`G$ACYZO`8P!7M?f|qI2+e zh4}0bl66iOj}}O8{ouy;!F-$Z@%r*Nw>Fj^SCoAmwqEds<2E5+O00jC!43=le%j#@w1j6 zcf^Rf#?b*_Zw^!{-WNWK;JzHJSGk2@b?$;ZRw#$Eh`LpDo z$jox1&O^Eve)uGPeWqP3-?R6}m)}Ae9ap(o<7%$#TFf~q=cG|?^A1z3`b#ITFP*IT z;ge)S87n;SQo z{O8lx)GxlX>Z0~BUHPl2lQ;c&vufegWsD-%cdmDeY^!JY*mS@pH*}he_DikFWgq=^ zXE1JFGPm6(Z;5fC>W$uV*|~Yw^>?yvleb!R|8!^i$$N_|c}#Lb^@=NWRzA2`Z_-{> z_kMS+f8?#lvsLC)2cJ;Rxi9mUzw}JCDA&cvbrtf7>4L{PRT$SVxvjyccc9#X z^GnR0@UM6;b;G+vD|g}5MT?$la%gpa;`u0*o$+*Wi7t=$TshOr`u6)xI@PwGQku4Z z@&8GSwpV<761!`I%Yvn`Z46DB@5OHM3NPTDwd~Ht8}o8bht{vi>AoSg+c-<#*}Ax| z>A#F<<6oA|S&IK69a*N+Wul>@x47PB`RV?`nj4~z4m*3yV>CRu-wIr!B z%=gv}#iv4H>tc3P+~!)N#+Y0baQk7msC-@1{q(ylp2i={oV`-kHEzo@j)XlzqKxj& z(#xX4uJBwBSNF2)VcgH(8vk5i;{M;26Owi2@W-vIs}I<{baGd?(T>T_ShN@}Gw9#g zSU1JN>4^{H#qh?$0FyFL%}_)8S4LiLPkf?yGfqF;-QdmcaR1`hpLc(qKfe75p!;X(9f4!m2V~LvON+0$3G`XMJh3({p-bDUDpMjx9{9)ragt-eb=1a zdCMP&-V1b=@J#$~8}#>mAor^_&203o%Kfw8lA zU)ZnHVTs-!Sbw=R920xY$CGiVP<>HfgM@o{t|IG+XCfuK=9`UrdJ-KDhpO#Lke{(@ zwtH5=6`hh_lCL=m@~<;2(8_R}e_&@yju%t;t$@bG^@-;@jFI;z!{nw>grzJJQUofxZxxit+ zlRNJ3F23EjB7>h_IhT>O+T3#Pr`3w;DetA5W&Ez)c>PU4p{(5bX+n+1eO96M!dHYA z98bKwoxvofJGy4GNxkqsxxd@?J-qY8WNo*$Y=U&biABaLe>khX8@HL)_Z>lWQUwLfz?1tHl z$E?bknS%8qcy%1ipKcJiwZi#rPMp!zDN8mMHl8%y{QX6U(z7RPy2AAqePR0a#-{he zr~f~6B6%l!Ken0Ed0$XiWTx!w$iFY@*jGs%pC)a0KX}E11@Ct*e`vq?{eS+Qd6%|Z zy2YO^xxc5iuW+Bq$A-Hl7taP>Z~HDU}yFVqVGOosu_CoGRPAH|24#tB*(6561=HA8*b*dGW%xN#AF-6$j0j zy<|brn(IE^i&L}9a;$`oG?pZCbzkJ0aO=aq*i7x2XY`uSCj7MiZR_*&LcpX0&D-`_O})J8*Nsz(E8H5-+G@QJdGmUc(~osK`SwrcP&JQP@Q3yHxxMG> zrh2|we{TQJ?+W!FuTH4GF|%~e{2P`@GDdYiPd>2ux%V7k`MajwY+^#3QF)Y=PUOOx z>5I=^d>GSg_%POVMu7U_l%tulY38Bcb6Bi@+w9D44QZRb^@yhIx|jg}({}Iv7tcBN z^M+~YwCtZz)!Pe8-*#|Mza+D+%#Z)~vF&HC?bv&%>-6mUzEwM(tll4dN634TeMuqH z5^WKmCgx49Ps0-=&qR2t)(LN(yM%kc@N_|*o9Cs}&C2uKa#a!rkFy(oLXJBJpCBH)mOh( zir)}w-s9;}KF{FbvNc%|`yc0R-8EtBgtxafiq6W(9STAMsPRHr_DxDFTh5KzUMcTs zjK-(7)bD>gGq3jCepfkXdHn@8VaFrWpKjorRrmBNzyIB@ZJ)V<4(C}kd$o%T67n;9BO!b+US?F>txy&>zU-+`} zy*c~7sJ~^+zGGT#!6OpCAmrTLcu)ByuUJkleeopTKfC$F!~Dlb(!XBqyF00kp)y3_ z;p7+nlU|u=eOz*Eckr7VmU}dr#CJ8kY+b$1Tz$4>y3?;qnNLfd)alFOwJJ4& zN2Ppmc*biHwyb?JaXSk>UK4%Dy0L`kcK&?MTW3NhrEhON`tSDLOId4ky4z;eeUA9P zmv6%^yB7v|pJ%_NO zaN8Zjm9G!;2{*o*740q`7O(vMoP5Id)m{AkC;8>qddC;lIsH8NCFqZf^{-jdaetXy z{x>JSVH0~eZ4TG2q=Mx;PVj{J`}V&`iqGfGxqQqmZ&Q_7$R94<{(vLZUyl}<-}p3T zSwUQ|%}q}2zgn)Ldn-Qar3r1GQf?F{`RJIMQuk?#`0{ht_3LYIs$FoA?^W~tx!dYU z@6O%6Eq!Wi5t}EP`4!B1ediIU{!gzZ+qkYu73Ug>q^W(iS{AqR)DJ12%9Y>h+gA4W z`exlNSzUa?wfdomn{nWd=Kp;aWlW|!JzJU0O2T(-oisgJ*FwzcBI}1E(k$|}kw@ou zmiYcq%k#eEdf#gY%iM2kJc8)Ee%aQS_qHF_daVC{ z&fnj!tN-qg`|56==NA@lR@;B?&o|#E|IABerBc>0C;YmbReA5!{Wp`}KC?Y)w{z)^ ztH!Yn3=AgL7MzQI{5j10by@mtna9(PH}UKa^OJm7`b4E=Yh`Zx5+8T(PYp~P{%U>~ zj*t526QE`xJc;vc%iJ7`4m0c9LZvTQEm-ZP4lqiXBsQOv)YwydQeb)iIX9Oc!GjJr z9v_UGb5osZzJiIC!|aA*EI+JgOiUJk;BaUn|F>0k|Gb0e-z;5s!Xm8Y)^yIiS)Cbw zy%#p;zi}pgWyj0&F zm2zkD0`WVC-dyZs{;OVVx$)PZA6e%P+DvOO>yb}Cf9*r`pP=pSH5xzCE1PmYUw+AA z?PC{vO_}BKs;Jra9#7}}xESknNBh~dC0xON6?fexezm!?lBe;njP-k=YP04KfuXZm zwyJ9v#+_|y3BMF?d&ZxkvVE>k^z3QOhW}>@Y>H$r^b2A9UOMmp^&%dfdu4wl)m=*- zrj(is7RdGA(P62aUcKo0uJ`Y|^-qf(lWb+Ga**|8%-?k7(Gk_ypv@l)qmNzp4>}`0 zUv&cenRi-$lOG(bK2y7X{nt8KAGK+-`;W+--FM*WdTv>n7s9{T)7U#~rI;RCIIhU6 zWQ_hSyzTUlHXGS@TkS9FzqYWO-*h1GnxxeJI|7-Hp8nYR`&v5hv=r_??NQg~-JSAm zr@XDtWc%*yJ1=&a?L9I_XBoHKpZ=5kUIcI}oXB68zu)8JWAEIV$scDgikWC+Wo>`` zr`9d|^H=0H?%EjK_M`fhEZ4oCHz#}MhgI&fbNlk^$gUON8{#vbyif_ftFvJW_p1+= z_J+(kxz%~jO|H3#O<@^aS2`vv{ihusb^5x-pS0kD&sUx<7h@|qd!Q(3(-vv@crm-M zqmqZTtC}AjU;lpoFV7PzzgUD_J3OnnP;=*)X}g$?ZhpDQ(EXF# z6_#%gk6)}jy2wT6*XJMmUOqopC9>T4+9!t1e_iIdugOe2!mFH=x~r;k{msdx2?YlO zPkuPG=ZCoa^#9v#RqpPu!_~T(zd+-Oj_jbALJ7=H1Ue_WlT~ za#yg*uUZwgbst`}2=MNUs7Q9(HD^Wi)3;)p(TzV@nR!pm(O_Sp<^4A1qRlm~?GC3O z&&;o7iAb*ZeLTnexdPks<$4)~1^oM+>mDdO?stCwY}&qg<(n_v;@b1-=UM6d-nIu% zeP2{nCU$nc;kVgE+D-gHshri%pFf$Ze72YC`D34b{gZ>IR<3&%m#>ljtwM5Asp!w? zJy-MRO<}4ioLWBrp0@tovZ&JU6La$3^_utTp1ZXs`6|8y)xBaANI|w@!Pwh?aJC!Ax|PQV_u}xxA45*rn+l| z9hd&|h%eG_1Mfu@R!sc3DQxlVz)FLSCCofBC(~DN{N2NF{q?!M>z4iuzZnqmtHtwd zTmAYuF7}r@?`NBaZmyIt(0P~};M64LQ>YR8=He8V&(ochog{g(G8Ed)!~!-Ra#M*O}1Dnf+3N)P1mYyf`!9lj&5P5 za~V4(9{wBn;lSs*y&vi})_Qd4i`7~Dcr5JTp-|bRA>`x3A?mbJu*^g#yWq9ik}qtW zOQ&!>2syOjYj=|L)r3hoZiZ|p7c}R&yjkMKFSoZdUA*~#L{pl@#2y2_SouYmUov5mCRx1!@=PJe9dMC;b3xTg;N9s%$Z7Cq$#pTuikqt*UHty}9*A z;4x{r3>{H}!f9PLtrOcjrfhQU5tVRG<1nhobJFuUv1Y-6Ly8Iu72V?}JxsO?KFEIL zJfn-90b7%|j>fu!V#&e#HwaWL&r?_t+}hOU?qd679>)?U6ZeTGDiK0XK2ZluoRoM} zRPM|_qu0jp*U|s4@{PlG3r;)8GBH{0l$p@nvY?^cS5ADk&C$f7;(JPQM=GAmA3Y}| zRz2~=g~!J#mV~KyGacY)pL;8!@mSu|usb~GjXwBQ9xUv#+ou1#S&?0yS!YAF;*lFudl*c4{_pN%GI@Q(U3r1R5f1i? z8OjTloMe+_mgjXfwb`gy^qNUoab+ZQ6))&cOjyvNmbRnjWpbk3`qEGH4~uSJ=C`is z?bZ89)q$rUoi2U6%e?5xz0->h$LaM;$9<>}s9rBU-#U7#{)UwJz>~X8?PnF~DAYHE z3M4Qz8%Z=9f7tHa(B#BWnDbEM^@2i^$=2+gGrhhuPOq?$;G0+NU}63;@8tZ=xt~k= zEuG(s{5m7aU)k6B_}WLGGc~<7vdWL#f8_psb5GPUfWcEh;|D`S%ujZYs-4mec4y~p zPRnGTD-kAXB+vHk|AEf(xu0k3b|^S<^iJ>RyJzPfuub##D>ba1`dhQBPhIUp`}%If z^CjETtJgiRUMOC@a(eaBaB266bu-F z-9f#2L$K|YmvZlX`oCoKf35KUlH&i>L?FiDyV)O(3#m3N9SU=_rE`;@(VL%@4N|*YkSe08Pm4&L7=k6`%}}HO&4f? zThC^FpzT|F=k@RVHYG3pEXCRM`upQG1&j=`f(NG+3Nk%wa5nP)#c)vTYr{901J8PE zV=CWCeBqSqR@RL(P7hx2Qu@EK>YJs)3=4Xryd2SY3>j zThHt?ec2|PZRd~P72e%oC%!0yfkjO%xpPtSXSZCm2+vYhANoVECZcP`nR*BS#vU{RKhMUo>eu}w^mx*c7`X5(czes(+@dag1BeK zoNwZr(I9z%fipvaiMiqcyWt53&U0KVG<$T{xF)r+p1ShVIO*6tWBzp(LYgefR&A;d zb5t_Du4EWKp5D_XC|oA9(`ez`*^e(rYZ9o|{)rkaTh*L?xp_or8?Ft_Ts>DxGn2P~Psr%SVI~ua3TAFDO93X6 z4Gp3>3Qp{{dw!=F7?r)ba%jG^)Xsv;w8U;E?vNE16%r4y39DsHlqhHxwEokszUPqi zWNU^)>WxYPJu$*e4NpY=xOSOL-J-h4R@E!ROLePBi2d!1jQyV7b|$&^_J@A<3SD+9 z?Ek9Q?`BV&^Rs1%&s?+F7MzpXTH2PMRLuQ#qd;t(vw6>9l{1H}Za6IDlRwxRyu(kP zMfzaGM3-f2(_Ny)!-b43n^wIwHF<2DKV7>2?!)vGxlwZK`#E{*Y8hVhu475+1?#xz2c1pSE{14rH6jAO-C2wVTJ^shKGtSY+RjEvTQpzCNeQLFKlXQ zI@Thc@*=r|$yjH@At^Sw>OF^?4Bfjs_-ykoEZltIfQEppF>_<5=ShtO4n7qJ0T#Dj zmy5+o4&0JOe_R?xO>{UIdG{F{lVP7zka)zyQ0|m&$Cuu_QJPciZrrq7rkBc-tN!G>;ESQpPxQSSs=NgLvhNLEnjjzc6glJvAE$- zX2#2nB`=H<*^Y6^NXa$Nm^16Vn{S?%vH4m{^Xg)Q>Ca}#$zJK`5%t{q)#pq`Zua|E zQ~Nqs?sR#0@0j0W(^+T2X5W4I^h@FIsyBSg6}LbA_-n?3&qwklW>h?8aNp4vy`%kk zMd#7%nj_*iE$SOSn8Y2Fu3(pze<)qkAOG=pL6>e}P=KsJX!V{0*?W#!>m)N*TO3+@ zWf`ZzR&)6?iSv9KgRGdtIkGfvT|98cO<|&Dh!nrPK*^+oOMdJy%J-@ZG)xJ%escosxR4ZGzGZvrO8-q44 zcl@lFnzcp3IQ3j#IFn>_UyNbXvokXC({gVYKe@HGdjC$sT@ zehL%)=(22L6Sr1Y9;b@kq?r`<=&(i{>f#Zhks6blb}g{gx{2@>6;X+m4w@O zsHh)*U96xtab;cXE-v>)SKq!iy4iMY*|TZq{`J1f`u6^9w=3^8yB*8_7Kk46Y~x(L zt#tKS5u+~#hxnx=(h>#35{3B|@;g_oh+3*qO|CEZfY%BVj9Y*z|&Ec;w+*pTZv>olupTaDJWO z?hT^sbDlTf-Nw$HTU=%@{i5D{nc2h_6IVYjcsi?>$MCkot3;cv2f5Uj9h&{TJ@B5W zswney!4RA9Pp;>eTb{apMRZ-MWXrm~?ZwB;O*g9*-}-g7lyOB)(z3uw`o`;PHTUfQ zb!KzjiZ}7xr*zC+LrrBI4_@dho&NQP@$c$&p+AFqQcUlkJ*{Q8c!UvOhe*H8X>S?>eC zV_aB6vVz*mB=)@uU@JM{b98#sy~saWAE(Vw|2;8TebQ=)%~xa0-Hu(`lX-K;`QQ8V zS`KACoTqyCwQg0|3yY!;VG&SJ5y#ko;}Zl=ly7qn-r+)_gAB`&;h*YvcV38*+1F_Lclw zKC!o9gUptjr@VIE{5zjRk4ZpeRmlV9d79T0lZ`H4EXehGkkPA@$;jm^xFXH%#Q(>2 zC4rV*M`k?UUG-SwM`S;*uJx~*wsT9C<*k1|*(m65eX@-3jG2)$?o5~-p2>Htr6;g| znc2lXUW=Xk)Gq&IS~;_7!UMkd3Uil6tlhBw&~_`|taX=Xe7i8yTPC%HMb%MPt@@4dhq?>|o3 zczK<17T?ird1bmyqM_3Q*RR@kD?}~z>bg&X^W(K&Z&1HDM^9YGy4j&9RQhmg&8=IN z`sdc&cWMnzIFY;axoMDr6zhY}dlV&D=WnyQVi{XL|Cjtk2~LI`M*F?~ee~CP?7XL6 zt1sEUuK)d;e|Kwd&&~b+zFxfiX#b=Ak5u-v{x13dbzb?Ncc$wrE(Xv0B3}Qg+WxCB ze|+hqH=Fb7UM&0mu%~+G@#uSx0JriH8y0qv| z&z6=QFT!-AO)?|)hg;ve^vrDQLf$p`y4ev|gV?-7w)RY&_9UfsSLV$-pPudt2oK(v z;}_`}=NEQrjpXHd+eKz^eKDD`=aNry>6Nh1)SW7?9JlWZ3R!xkM9t#sO?CdfIcLSr z%-Qyd>+x}(_}^PjCLiy)m-b>;_0z`aa~6ryb+1J(keG9)D5>V?r&RB<{b#2!%jyd` zw0QSMrp-u_VVCA@Rbt}F%{bvvut6Xv!YI+FpU+or!!aS_o{5fJY!5m6D-Q7L6}B<3 z>Dz2d`50Ec_3X=tV+-@8cA5NB-f*SpM&&c%{EDN+avvwK-+9WneaAUY_cxo5t4UWb zo|<6tWo`ve>ys3B@S=9eiJ4!`#LeRiEAs2eE8D%h?3XoH7% z9kGx#-S5wkbXp6)zD6iO-hT&MutV-=JN^B>2nHNZl<=EhD9bxWdyjm zH90a?y^Pkcy0$i?Hhhi4stUnZFXyhAHf>hsfTV?ttv?YCP${#v5BVt?uR<4jPBV!j*clS{*9B+lYICb6trjCJV}1+|1ztTTVC-?(s|`t9D$lNZ-d@4jiW zB4xYz{v9=Q?(yxOzWZ#JndB+)C+VqaOQv|Q5alj>!7uPQ>9_85rkGtzSGI*)sk2W# zRC(gu|MzRw>YUwQ`Pcs1hDlF#lMO$=?VHc*U;p#x@j&HvUdbo(Pu&evd|D{`LPY4^ zsVg@)mQOmZ;$+tCbV&KZv$SJUauv@StJm##(iGfhnbNPCHe*Q!3v*VGqWFg!_s%wi zpO;fSaL~cA;dfNXgxT}vTv+G3d71B{Q=dK;T@Id{v}p0JF{)krM&# z(QBUGDZgLy^{BP#PM;(DuPs;aU*}RYkGcKqqCk&|=wjpjPmLH4EDSmkVRA@@&9vo3 zR>jj+>%1LLI+(ZJNSJE5OfuD@-^$VJiU(Jb5r-h79``c^p9ao;4S|5S^X*ps{#tY{ z)oCAdub0Y?O`8qAMm}4m^FhQ@=ehBc``I?H*=tvx|GH4_vhuF=)w@aLy6t-(rs`K7n>=qr+PlS` ze>Q~f*S{ARFC#1W$8@dursWg&zV$E9i{D#PSCo){d&{0w-Q3G!TlL=ttNJGG7t*_Z z=*$gyR*gr+nJPS7e9g0dCLEg*qV#N&qzjW=_7#C$nNk;Tuv>ocTtD5WSLSw*%BDEq z|JOyQExhiXb0d3?JijNe`kRdhWQ@10m~c2u+EadM5@YvC2ABA0cA*Od3{1@~T)OhX zA^Yvyg7028f?nNuy>01Kk&HmbCiUra?Y=H6zUidYs=fB|si~Sl8VXMOw=T{}Gu6}a z>-p8Hlo`D=@$FRG`}6WAU$~|k_#kfInoXN&)94_WyF1kIjKvq?ZxtbU1_m1 z5|*0NpW`fvYt63vS{_wi*2gh zX|6J2a~s?Z+;|q%oR3^QRm3NN-S3_G&hJn3CTFXuSE=sZlb2ERvW!8&&T)^}46f;O z-*3KW`DNi+2_*cGM*}mDmX@y$hswpe25}vpPENebmH9_oXgJWFo;^Xd7 zt1quzV7^w*B;e2M@5`4meZ1;>@f4RwdV(gmiYuQ`_O3_Dk*frbw0o@F7#dZe<+S)x z`l_IolkpDzOAP~7eK|5O;N`{OiHBOw#A+nAZK}Sr;p@6BU7>=LjdFImYwi9ZTXVCc zSN)f^NW*2N`Rex>54k>7to*o8#X`ZbBgF53;U?x8g8Y-7{)ze(Yw&<$Yt$i+Q!7sy z?|QXI)#B{Axs#k1^RJwi_e$yMt_0RKhnn6$=!{;nQ>|kn-y!|P;<-lx^QYfh5ihl( z|ETURSu5UWY6*QBZSpyeFAvxs+v#N3*|ouQzj5j%i(U<-3-34Ycb)MoVzcY=&1SwK ziG358(~EuETaQNso|(LYV+DugGC@O*8B+cl7Dqz*?Pc$AGW@=DW$8^dZNv7J{Sk)j zPgl==KG8USnL$^@;4FvWmyO~6JK8tuuV9Kgve@=Sonj5glQwhVgA&|19pT>G z{&PBml55`oZ1jA~{_BP6M6<7HCYk&f&Ur~Gn7KvOJeP8fYI`#2IQzDuXzhu!-#oAs zyCKwXe$M$x%eDWr6<=C63H-HE`jW5yP@a$5nTcbnTG48Sol90TG4Pl@)3_P=JL(b# zlZC35$d(+9fSyo4)oBcZy_0LsuyrZ)h5G9@U5n5?V8iYuR<}dBw_EUKj7IrvL_g1z@(vp)(s{~T69GW%l zE{A)DqR9XLzej}AZ& z-6Xepoo;TMZ1jewKD(zq_!?EM_4>gKam|XO6IqT_EY%I@^)gheo%+b+ zhFhB{tu~Jcj$8To8q;b0b+4lMPt1G#Zr|^Qwj0ytiu^R57_EBS+5NSM`KBI@^9l)S zqCCAu^}UBW9$qb88m|6&|D^WkcS`3M8tz}ZB-=@ENvx{8o0-^orzcYlHuFS;)=i0z z{BQQLrtfvs*RUn`E;hvcnNhY@J3ni;?cEh>Z;s?_y7H~(7OT6Y+N9iH6P=E{Yr4HM zx97y-hNVi@T{3^~FMrk6eM69M#c96j?gFbL`vlmgFS;7>kn7)!r2Ox5m*og8K6Yof zlh@4Bgzl&p3?Y}ajudO!3KTujHrvJ%yZL2ToYKD=A_r$lCaOxFJs0h>(sqM{yi{E9 zrqY|UJJTxkCHG|A+0O2|>`wIZX>G0>)%kr>cZU1quH_0_wN3xcEz|YOrT@w-(jm9` z(+#vI3hr5T;*-V?rHMU_mmk;!JwJ3&`1-{)oUi&T&1Rp!UADN?WX{~ldv3mIm)!V9 z@VGJ4_9-2YBE*VQ7MRwk%o9?P_jvMXD$`CM&zRZIbJbjO%67FBYi~c>@%ESSa*<=3 zyz7c|x7^p5vBtSYM_B7u(Bp?n-@Sz*x%ZUi+-v-JQTC=_P?vIR;glmf?Yiv(la8(4 z6cn+8wSBtD4l~QGcW0S($Q=F6wbJ8Tp=IGI6@l4`FQ(0U#-OS!r1#QdBiHT2Q~4Jj zD*TYGwSIZc)5s|@r^B99u9zYw+AqHIxUt!zYf)S`w!QPb-jn)X?9#uL>CgJ_MF;;} z@kY{O(PidIg2|b8QXiNGHK$FM(0y|}hjV)Voj+UcIG^tnxhLFl;=Yx@dLfTFx;mcU zZX{aWZ;+J@+u}Xz*pDagIo6uKI_mXsuf&s$hZ*e*_e3_SMl&;fR}A{X6zMOQ)_ZQb z+&0Y#R?{A7DeakbS^VN&mFZ;?=QlHE7I$aZuJYO6)H!#RLWpCSPtw#KhOgZUlO-P62B>xJ*{Q%C zyyZsQ*I6#RWrK2ps@%0$_)kq1d~ka z{D_Z|-J$+jnFrpbMI^UBm!Fy^?C|IAlSwk`&pH@5t9pjMvD1?9anJlW+b`wDyLo;l zE04%8U|H;x+ON#)V|au?U$bzB*Ywn)&b=Bt1LkR;T`(nW%FcyHz8U(<6#O<9zkl$5 zYRUYJ_m8-~Je9A%TXn9=&iP^=)11!?H;uK|9-6HNqsGsQoXS+W_VwU$+;IrweddtTonO8lhBZ_D*f zwiZ#}+kzW5Ywb?4=Xo1nVx1sc%I7J5Q%~l8KC}OarJZ*UzJ2ZWLY42{6W- zXlU@Z2SS+M5gV8p!oy))>|L^QOfg7an{APXFve-&uPWjwN<W_!dMzS2L=eD1Yr| z>;L_I0V&OgHJ|^u>h(kWud;%JCYw&cv>jWSR|Yqgv~QAm^m^hJhwoAsG)r=~~V{Du!>dZUWHFyQ{<`_@ur;FR{UZK^UX_QR^fY&YRF5p{OHL}*}7|EUqP

    pVuFY_V`4hz2>Ood(2mz=Mv3VRp?3cOeyHWmSJZeQ)Tx)0Ex4!^X0z?Y{cGuWemx!?cXf zT`xcCr*zyS`HzQTrKV5hqTMef_}12iW;^_hZcr&(7@u)8ot;xz%d{=-a?|a$6}EZ(MNp5xW_( z`%lk*t#x$IQNG_(r>nO!U9purWRjxf`O4UD@#0e7MV?jDvVRvy@>dsM@b@{H#2Twr z5p&w!h?&P|jWf$_<2&234_GC%2D-34o}izzrTcitH>=VMR+|+P|0b?8d9=3nga*%S zg()}We>klCEwpOw3}=ttIkQ=FmD_V|PucP8t+?-$>=ua7qLn0`@ef2Ve?g`39A zlTF?}OMYi^zP_HmyFSC|^w$K#e+>Rj-q$Pmyvw=51TSPAW?>ihoE80GRm5?LT;_msacXAIjHsviUxwvoNlNWjF zZ?9)||H-}0nDlFc^dF0BUkf*MCU3gAxV(Ys_bS!6TnU%L%m}_~AM~5g$-cj}ZqkZN zlT7UTf9)`olD{_ZhDKQHwMDm|U3x2d-rU)xX9aI)^vT0h)MCUsANR_q}BSw zy$Uq6yC#`zDCNyDYf(<+aVxP$H!P&$vwL&+n0M@+_cpFBT8!aKL(46V_6dI@4jCHp zMX*XTRK`q(|0ldicC}TJtY>!Y2e(`(bjyFTbQ-h<7>XuO3$fX*DA77cILg! zxOXLG7FX)pOUJDydq&5!7T(JI5Ldo$|U6XqPj&f8Jze=#3Rn{Z{##(f(l zpD`HnZ`4@yXQNwXO{V5r<=*R0TU^ux&s*xvQx$RJ)_HQrNpXGfmLtnv`NldOnYByG zyXWQp=POoJe3opm7rWc%9>4j-H.in-band>a:hover{text-decoration:underline;}h2,h3,h4{border-bottom:1px solid;}h3.code-header,h4.code-header{font-size:1em;font-weight:600;border:none;padding:0;margin:0;}.impl,.impl-items .method,.methods .method,.impl-items .type,.methods .type,.impl-items .associatedconstant,.methods .associatedconstant,.impl-items .associatedtype,.methods .associatedtype{flex-basis:100%;font-weight:600;margin-top:16px;margin-bottom:10px;position:relative;}.impl,.method.trait-impl,.type.trait-impl,.associatedconstant.trait-impl,.associatedtype.trait-impl{padding-left:15px;}div.impl-items>div{padding-left:0;}h1,h2,h3,h4,h5,h6,.sidebar,a.source,.search-input,.search-results .result-name,.content table td:first-child>a,.item-left>a,div.item-list .out-of-band,span.since,#source-sidebar,#sidebar-toggle,details.rustdoc-toggle>summary::before,details.undocumented>summary::before,div.impl-items>div:not(.docblock):not(.item-info),.content ul.crate a.crate,a.srclink,#main>ul.docblock>li>a{font-family:"Fira Sans",Arial,sans-serif;}.content ul.crate a.crate{font-size:16px/1.6;}ol,ul{padding-left:25px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.6em;}p{margin:0 0 .6em 0;}summary{outline:none;}td,th{padding:0;}table{border-collapse:collapse;}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;}details:not(.rustdoc-toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.1em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;}.type-decl pre{overflow-x:auto;}.source .content pre{padding:20px;}img{max-width:100%;}li{position:relative;}.source .content{margin-top:50px;max-width:none;overflow:visible;margin-left:0px;}nav.sub{font-size:16px;text-transform:uppercase;}.sidebar{width:200px;position:fixed;left:0;top:0;bottom:0;overflow:auto;}*{scrollbar-width:initial;}.sidebar{scrollbar-width:thin;}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;}.sidebar .block>ul>li{margin-right:-10px;}.content,nav{max-width:960px;}.hidden{display:none !important;}.logo-container{height:100px;width:100px;position:relative;margin:20px auto;display:block;margin-top:10px;}.logo-container>img{max-width:100px;max-height:100px;height:100%;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:block;}.sidebar .location{border:1px solid;font-size:17px;margin:30px 10px 20px 10px;text-align:center;word-wrap:break-word;font-weight:inherit;padding:0;}.sidebar .version{font-size:15px;text-align:center;border-bottom:1px solid;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;}.location:empty{border:none;}.location a:first-of-type{font-weight:500;}.location a:hover{text-decoration:underline;}.block{padding:0;margin-bottom:14px;}.block h2,.block h3{text-align:center;}.block ul,.block li{margin:0 10px;padding:0;list-style:none;}.block a{display:block;text-overflow:ellipsis;overflow:hidden;line-height:15px;padding:7px 5px;font-size:14px;font-weight:300;transition:border 500ms ease-out;}.sidebar-title{border-top:1px solid;border-bottom:1px solid;text-align:center;font-size:17px;margin-bottom:5px;font-weight:inherit;padding:0;}.sidebar-links{margin-bottom:15px;}.sidebar-links>a{padding-left:10px;width:100%;}.sidebar-menu{display:none;}.content{padding:15px 0;}.source .content pre.rust{white-space:pre;overflow:auto;padding-left:0;}.rustdoc .example-wrap{display:inline-flex;margin-bottom:10px;}.example-wrap{position:relative;width:100%;}.example-wrap>pre.line-number{overflow:initial;border:1px solid;padding:13px 8px;text-align:right;border-top-left-radius:5px;border-bottom-left-radius:5px;}.example-wrap>pre.rust a:hover{text-decoration:underline;}.rustdoc:not(.source) .example-wrap>pre:not(.line-number){width:100%;overflow-x:auto;}.rustdoc .example-wrap>pre{margin:0;}#search{margin-left:230px;position:relative;}#results>table{width:100%;table-layout:fixed;}.content>.example-wrap pre.line-numbers{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.line-numbers span{cursor:pointer;}.docblock-short{overflow-wrap:anywhere;}.docblock-short p{display:inline;}.docblock-short p{overflow:hidden;text-overflow:ellipsis;margin:0;}.docblock>:not(pre)>code,.docblock-short>:not(pre)>code{white-space:pre-wrap;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5,.docblock h6{border-bottom:1px solid;}.top-doc .docblock h2{font-size:1.3em;}.top-doc .docblock h3{font-size:1.15em;}.top-doc .docblock h4,.top-doc .docblock h5,.top-doc .docblock h6{font-size:1em;}.docblock h5{font-size:1em;}.docblock h6{font-size:0.95em;}.docblock{margin-left:24px;position:relative;}.docblock>*{max-width:100%;overflow-x:auto;}.content .out-of-band{flex-grow:0;text-align:right;font-size:23px;margin:0px;padding:0 0 0 12px;font-weight:normal;}.method>.code-header,.trait-impl>.code-header,.invisible>.code-header{max-width:calc(100% - 41px);display:block;}.invisible{width:100%;display:inline-block;}.content .in-band{flex-grow:1;margin:0px;padding:0px;}.in-band>code,.in-band>.code-header{display:inline-block;}#main{position:relative;}#main>.since{top:inherit;font-family:"Fira Sans",Arial,sans-serif;}.content table:not(.table-display){border-spacing:0 5px;}.content td{vertical-align:top;}.content td:first-child{padding-right:20px;}.content td p:first-child{margin-top:0;}.content td h1,.content td h2{margin-left:0;font-size:1.1em;}.content tr:first-child td{border-top:0;}.docblock table{margin:.5em 0;width:calc(100% - 2px);overflow-x:auto;display:block;}.docblock table td{padding:.5em;border:1px dashed;}.docblock table th{padding:.5em;text-align:left;border:1px solid;}.fields+table{margin-bottom:1em;}.content .item-list{list-style-type:none;padding:0;}.content .multi-column{-moz-column-count:5;-moz-column-gap:2.5em;-webkit-column-count:5;-webkit-column-gap:2.5em;column-count:5;column-gap:2.5em;}.content .multi-column li{width:100%;display:inline-block;}.content>.methods>.method{font-size:1em;position:relative;}.content .method .where,.content .fn .where,.content .where.fmt-newline{display:block;font-size:0.8em;}.content .methods>div:not(.notable-traits):not(.method){margin-left:40px;margin-bottom:15px;}.content .docblock>.impl-items{margin-left:20px;margin-top:-34px;}.content .docblock>.impl-items .table-display{margin:0;}.content .docblock>.impl-items table td{padding:0;}.content .docblock>.impl-items .table-display,.impl-items table td{border:none;}.content .item-info code{font-size:90%;}.content .item-info{position:relative;margin-left:33px;}.sub-variant>div>.item-info{margin-top:initial;}.content .item-info::before{content:'⬑';font-size:25px;position:absolute;top:-6px;left:-19px;}.content .impl-items .method,.content .impl-items>.type,.impl-items>.associatedconstant,.impl-items>.associatedtype,.content .impl-items details>summary>.type,.impl-items details>summary>.associatedconstant,.impl-items details>summary>.associatedtype{margin-left:20px;}.content .impl-items .docblock,.content .impl-items .item-info{margin-bottom:.6em;}.content .impl-items>.item-info{margin-left:40px;}.methods>.item-info,.content .impl-items>.item-info{margin-top:-8px;}.impl-items{flex-basis:100%;}#main>.item-info{margin-top:0;}nav:not(.sidebar){border-bottom:1px solid;padding-bottom:10px;margin-bottom:10px;}nav.main{padding:20px 0;text-align:center;}nav.main .current{border-top:1px solid;border-bottom:1px solid;}nav.main .separator{border:1px solid;display:inline-block;height:23px;margin:0 20px;}nav.sum{text-align:right;}nav.sub form{display:inline;}nav.sub,.content{margin-left:230px;}a{text-decoration:none;background:transparent;}.small-section-header{display:flex;justify-content:space-between;position:relative;}.small-section-header:hover>.anchor{display:initial;}.in-band:hover>.anchor,.impl:hover>.anchor,.method.trait-impl:hover>.anchor,.type.trait-impl:hover>.anchor,.associatedconstant.trait-impl:hover>.anchor,.associatedtype.trait-impl:hover>.anchor{display:inline-block;position:absolute;}.anchor{display:none;position:absolute;left:0;background:none !important;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-15px;padding-right:8px;}h2.small-section-header>.anchor{padding-right:6px;}.anchor::before{content:'§';}.docblock a:not(.srclink):not(.test-arrow):hover,.docblock-short a:not(.srclink):not(.test-arrow):hover,.item-info a{text-decoration:underline;}.invisible>.srclink,.method>.code-header+.srclink{position:absolute;top:0;right:0;font-size:17px;font-weight:normal;}.block a.current.crate{font-weight:500;}.item-table{display:table-row;justify-items:start;}.item-row{display:table-row;}.item-left,.item-right{display:table-cell;}.item-left{padding-right:1.2rem;}.search-container{position:relative;}.search-container>div{display:inline-flex;width:calc(100% - 63px);}#crate-search{min-width:115px;margin-top:5px;padding:6px;padding-right:19px;flex:none;border:0;border-right:0;border-radius:4px 0 0 4px;outline:none;cursor:pointer;border-right:1px solid;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;text-overflow:"";background-repeat:no-repeat;background-color:transparent;background-size:20px;background-position:calc(100% - 1px) 56%;}.search-container>.top-button{position:absolute;right:0;top:10px;}.search-input{-moz-box-sizing:border-box !important;box-sizing:border-box !important;outline:none;border:none;border-radius:1px;margin-top:5px;padding:10px 16px;font-size:17px;transition:border-color 300ms ease;transition:border-radius 300ms ease-in-out;transition:box-shadow 300ms ease-in-out;width:100%;}#crate-search+.search-input{border-radius:0 1px 1px 0;width:calc(100% - 32px);}.search-input:focus{border-radius:2px;border:0;outline:0;}.search-results{display:none;padding-bottom:2em;}.search-results.active{display:block;clear:both;}.search-results .desc>span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block;}.search-results>a{display:block;width:100%;margin-left:2px;margin-right:2px;border-bottom:1px solid #aaa3;}.search-results>a>div{display:flex;flex-flow:row wrap;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:50%;}.search-results .result-name{padding-right:1em;}.search-results .result-name>span{display:inline-block;margin:0;font-weight:normal;}body.blur>:not(#help){filter:blur(8px);-webkit-filter:blur(8px);opacity:.7;}#help{width:100%;height:100vh;position:fixed;top:0;left:0;display:flex;justify-content:center;align-items:center;}#help>div{flex:0 0 auto;box-shadow:0 0 6px rgba(0,0,0,.2);width:550px;height:auto;border:1px solid;}#help dt{float:left;clear:left;display:block;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:18px;}#help span.top{text-align:center;display:block;margin:10px 0;border-bottom:1px solid;padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid;}#help dd{margin:5px 35px;}#help .infos{padding-left:0;}#help h1,#help h2{margin-top:0;}#help>div div{width:50%;float:left;padding:0 20px 20px 17px;;}.item-info .stab{display:table;}.stab{border-width:1px;border-style:solid;padding:3px;margin-bottom:5px;font-size:90%;font-weight:normal;}.stab p{display:inline;}.stab .emoji{font-size:1.5em;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.module-item .stab,.import-item .stab{border-radius:3px;display:inline-block;font-size:80%;line-height:1.2;margin-bottom:0;margin-left:.3em;padding:2px;vertical-align:text-bottom;}.module-item.unstable,.import-item.unstable{opacity:0.65;}.since{font-weight:normal;font-size:initial;}.impl-items .since,.impl .since,.methods .since{padding-left:12px;padding-right:2px;position:initial;}.impl-items .srclink,.impl .srclink,.methods .srclink{font-size:17px;font-weight:normal;}.rightside{float:right;}.has-srclink{font-size:16px;margin-bottom:12px;justify-content:space-between;}.variants_table{width:100%;}.variants_table tbody tr td:first-child{width:1%;}td.summary-column{width:100%;}.summary{padding-right:0px;}pre.rust .question-mark{font-weight:bold;}a.test-arrow{display:inline-block;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:130%;top:5px;right:5px;z-index:1;}a.test-arrow:hover{text-decoration:none;}.section-header:hover a:before{position:absolute;left:-25px;padding-right:10px;content:'\2002\00a7\2002';}.section-header:hover a{text-decoration:none;}.section-header a{color:inherit;}.code-attribute{font-weight:300;}.since+.srclink{padding-left:10px;}.item-spacer{width:100%;height:12px;}.out-of-band>span.since{position:initial;font-size:20px;margin-right:5px;}.sub-variant,.sub-variant>h3{margin-top:0px !important;padding-top:1px;}#main .sub-variant>h3{font-size:15px;margin-left:25px;margin-bottom:5px;}.sub-variant>div{margin-left:20px;margin-bottom:10px;}.sub-variant>div>span{display:block;position:relative;}.toggle-label{display:inline-block;margin-left:4px;margin-top:3px;}.docblock>.section-header:first-child{margin-left:15px;margin-top:0;}.docblock>.section-header:first-child:hover>a:before{left:-10px;}:target>code,:target>.code-header{opacity:1;}:target{padding-right:3px;}.information{position:absolute;left:-25px;margin-top:7px;z-index:1;}.tooltip{position:relative;display:inline-block;cursor:pointer;}.tooltip::after{display:none;text-align:center;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;font-size:16px;}.tooltip.ignore::after{content:"This example is not tested";}.tooltip.compile_fail::after{content:"This example deliberately fails to compile";}.tooltip.should_panic::after{content:"This example panics";}.tooltip.edition::after{content:"This code runs with edition " attr(data-edition);}.tooltip::before{content:" ";position:absolute;top:50%;left:16px;margin-top:-5px;border-width:5px;border-style:solid;display:none;}.tooltip:hover::before,.tooltip:hover::after{display:inline;}.tooltip.compile_fail,.tooltip.should_panic,.tooltip.ignore{font-weight:bold;font-size:20px;}.notable-traits-tooltip{display:inline-block;cursor:pointer;}.notable-traits:hover .notable-traits-tooltiptext,.notable-traits .notable-traits-tooltiptext.force-tooltip{display:inline-block;}.notable-traits .notable-traits-tooltiptext{display:none;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;z-index:10;font-size:16px;cursor:default;position:absolute;border:1px solid;}.notable-traits-tooltip::after{content:"\00a0\00a0\00a0";}.notable-traits .notable,.notable-traits .docblock{margin:0;}.notable-traits .notable{margin:0;margin-bottom:13px;font-size:19px;font-weight:600;}.notable-traits .docblock code.content{margin:0;padding:0;font-size:20px;}pre.rust.rust-example-rendered{position:relative;}pre.rust{tab-size:4;-moz-tab-size:4;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#titles{height:35px;}#titles>button{float:left;width:33.3%;text-align:center;font-size:18px;cursor:pointer;border:0;border-top:2px solid;}#titles>button:not(:last-child){margin-right:1px;width:calc(33.3% - 1px);}#titles>button>div.count{display:inline-block;font-size:16px;}.notable-traits{cursor:pointer;z-index:2;margin-left:5px;}#all-types{text-align:center;border:1px solid;margin:0 10px;margin-bottom:10px;display:block;border-radius:7px;}#all-types>p{margin:5px 0;}#sidebar-toggle{position:fixed;top:30px;left:300px;z-index:10;padding:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;cursor:pointer;font-weight:bold;transition:left .5s;font-size:1.2em;border:1px solid;border-left:0;}#source-sidebar{position:fixed;top:0;bottom:0;left:0;width:300px;z-index:1;overflow:auto;transition:left .5s;border-right:1px solid;}#source-sidebar>.title{font-size:1.5em;text-align:center;border-bottom:1px solid;margin-bottom:6px;}.theme-picker{position:absolute;left:211px;top:19px;}.theme-picker button{outline:none;}#settings-menu,#help-button{position:absolute;top:10px;}#settings-menu{right:0;outline:none;}#theme-picker,#settings-menu,#help-button,#copy-path{padding:4px;width:27px;height:29px;border:1px solid;border-radius:3px;cursor:pointer;}#help-button{right:30px;font-family:"Fira Sans",Arial,sans-serif;text-align:center;font-size:17px;padding-top:2px;}#copy-path{background:initial;margin-left:10px;padding:0;padding-left:2px;border:0;}#theme-choices{display:none;position:absolute;left:0;top:28px;border:1px solid;border-radius:3px;z-index:1;cursor:pointer;}#theme-choices>button{border:none;width:100%;padding:4px 8px;text-align:center;background:rgba(0,0,0,0);}#theme-choices>button:not(:first-child){border-top:1px solid;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px;border-radius:3px;box-shadow:inset 0 -1px 0;cursor:default;}.hidden-by-impl-hider,.hidden-by-usual-hider{display:none !important;}#implementations-list>h3>span.in-band{width:100%;}.table-display{width:100%;border:0;border-collapse:collapse;border-spacing:0;font-size:16px;}.table-display tr td:first-child{padding-right:0;}.table-display tr td:last-child{float:right;}.table-display .out-of-band{position:relative;font-size:19px;display:block;}#implementors-list>.impl-items .table-display .out-of-band{font-size:17px;}.table-display td:hover .anchor{display:block;top:2px;left:-5px;}#main>ul{padding-left:10px;}#main>ul>li{list-style:none;}.non-exhaustive{margin-bottom:1em;}div.children{padding-left:27px;display:none;}div.name{cursor:pointer;position:relative;margin-left:16px;}div.files>a{display:block;padding:0 3px;}div.files>a:hover,div.name:hover{background-color:#a14b4b;}div.name.expand+.children{display:block;}div.name::before{content:"\25B6";padding-left:4px;font-size:0.7em;position:absolute;left:-16px;top:4px;}div.name.expand::before{transform:rotate(90deg);left:-15px;top:2px;}details.rustdoc-toggle>summary.hideme{cursor:pointer;}details.rustdoc-toggle>summary,details.undocumented>summary{list-style:none;}details.rustdoc-toggle>summary::-webkit-details-marker,details.rustdoc-toggle>summary::marker,details.undocumented>summary::-webkit-details-marker,details.undocumented>summary::marker{display:none;}details.rustdoc-toggle>summary.hideme>span{margin-left:9px;}details.rustdoc-toggle>summary::before{content:"";cursor:pointer;width:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;display:inline-block;vertical-align:middle;opacity:.5;}details.rustdoc-toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.rustdoc-toggle>summary.hideme::after{content:"";}details.rustdoc-toggle>summary:focus::before,details.rustdoc-toggle>summary:hover::before{opacity:1;}details.rustdoc-toggle.top-doc>summary,details.rustdoc-toggle.top-doc>summary::before,details.rustdoc-toggle.non-exhaustive>summary,details.rustdoc-toggle.non-exhaustive>summary::before{font-family:'Fira Sans';font-size:16px;}details.non-exhaustive{margin-bottom:8px;}details.rustdoc-toggle>summary.hideme::before{position:relative;}details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-23px;top:3px;}.impl-items>details.rustdoc-toggle>summary:not(.hideme)::before,.undocumented>details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-2px;}details.rustdoc-toggle[open] >summary.hideme{position:absolute;}details.rustdoc-toggle,details.undocumented{position:relative;}details.rustdoc-toggle[open] >summary.hideme>span{display:none;}details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{width:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;display:inline-block;content:"";}details.rustdoc-toggle[open] >summary::after,details.rustdoc-toggle[open] >summary.hideme::after{content:"Collapse";}details.undocumented>summary::before{padding-left:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;content:"Show hidden undocumented items";cursor:pointer;font-size:16px;font-weight:300;opacity:.5;}details.undocumented>summary:focus::before,details.undocumented>summary:hover::before{opacity:1;}details.undocumented[open] >summary::before{padding-left:17px;height:max(17px,1.1em);background-repeat:no-repeat background-position:top left;content:"Hide undocumented items";}@media (min-width:701px){.docblock>.information:first-child>.tooltip{margin-top:16px;}}@media (max-width:700px){body{padding-top:0px;}.rustdoc>.sidebar{height:45px;min-height:40px;margin:0;margin-left:-15px;padding:0 15px;position:static;z-index:11;}.sidebar>.location{float:right;margin:0px;margin-top:2px;padding:3px 10px 1px 10px;min-height:39px;background:inherit;text-align:left;font-size:24px;}.sidebar .location:empty{padding:0;}.sidebar .logo-container{width:35px;height:35px;margin-top:5px;margin-bottom:5px;float:left;margin-left:50px;}.sidebar .logo-container>img{max-width:35px;max-height:35px;}.sidebar-menu{position:fixed;z-index:10;font-size:2rem;cursor:pointer;width:45px;left:0;text-align:center;display:block;border-bottom:1px solid;border-right:1px solid;height:45px;}.rustdoc.source>.sidebar>.sidebar-menu{display:none;}.sidebar-elems{position:fixed;z-index:1;top:45px;bottom:0;width:246px;left:-246px;overflow-y:auto;border-right:1px solid;}.sidebar>.block.version{overflow:hidden;border-bottom:none;margin-bottom:0;height:100%;padding-left:12px;}.sidebar>.block.version>div.narrow-helper{float:left;width:1px;height:100%;}.sidebar>.block.version>p{margin:0;min-width:55px;display:flex;align-items:center;height:100%;}nav.sub{width:calc(100% - 32px);float:right;}.content{margin-left:0px;}#main,#search{margin-top:45px;padding:0;}#search{margin-left:0;}.anchor{display:none !important;}.theme-picker{left:10px;top:54px;z-index:1;}.notable-traits{position:absolute;left:-22px;top:24px;}#titles>button>div.count{float:left;width:100%;}#titles{height:50px;}.sidebar.mobile{position:fixed;width:100%;margin-left:0;background-color:rgba(0,0,0,0);height:100%;}.sidebar.mobile>div.version{overflow:hidden;max-height:33px;}.sidebar{width:calc(100% + 30px);}.show-it,.sidebar-elems:focus-within{z-index:2;left:0;}.show-it>.block.items{margin:8px 0;}.show-it>.block.items>ul{margin:0;}.show-it>.block.items>ul>li{text-align:center;margin:2px 0;}.show-it>.block.items>ul>li>a{font-size:21px;}#sidebar-filler{position:fixed;left:45px;width:calc(100% - 45px);top:0;height:45px;z-index:-1;border-bottom:1px solid;}#main>details.rustdoc-toggle>summary::before,#main>div>details.rustdoc-toggle>summary::before{left:-11px;}#all-types{margin:10px;}#sidebar-toggle{top:100px;width:30px;font-size:1.5rem;text-align:center;padding:0;}#source-sidebar{z-index:11;}#main>.line-numbers{margin-top:0;}.notable-traits .notable-traits-tooltiptext{left:0;top:100%;}#help-button{display:none;}.item-table{display:block;}.item-row{display:flex;flex-flow:column wrap;}.item-left,.item-right{width:100%;}.search-container>div{width:calc(100% - 32px);}.search-results>a{border-bottom:1px solid #aaa9;padding:5px 0px;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:100%;}.search-results div.desc,.search-results .result-description,.item-right{padding-left:2em;}}@media print{nav.sub,.content .out-of-band{display:none;}}@media (max-width:464px){#titles,#titles>button{height:73px;}#main,#search{margin-top:100px;}#main>table:not(.table-display) td{word-break:break-word;width:50%;}.search-container>div{display:block;width:calc(100% - 37px);}#crate-search{width:100%;border-radius:4px;border:0;}#crate-search+.search-input{width:calc(100% + 71px);margin-left:-36px;}#theme-picker,#settings-menu{padding:5px;width:31px;height:31px;}#theme-picker{margin-top:-2px;}#settings-menu{top:7px;}.docblock{margin-left:12px;}}details.undocumented[open] >summary::before,details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{background-image:url(toggle-minus.svg);}details.undocumented>summary::before,details.rustdoc-toggle>summary::before{background-image:url(toggle-plus.svg);} \ No newline at end of file + @font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular.woff2") format("woff2"),url("FiraSans-Regular.woff") format('woff');font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium.woff2") format("woff2"),url("FiraSans-Medium.woff") format('woff');font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular.ttf.woff2") format("woff2"),url("SourceSerif4-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It.ttf.woff2") format("woff2"),url("SourceSerif4-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold.ttf.woff2") format("woff2"),url("SourceSerif4-Bold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular.ttf.woff2") format("woff2"),url("SourceCodePro-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It.ttf.woff2") format("woff2"),url("SourceCodePro-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold.ttf.woff2") format("woff2"),url("SourceCodePro-Semibold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Noto Sans KR';src:url("noto-sans-kr-regular.woff2") format("woff2"),url("noto-sans-kr-regular.woff") format("woff");font-display:swap;unicode-range:U+AC00-D7AF,U+3130-318F,U+1100-11FF,U+A960-A97F,U+D7B0-D7FF;}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}html{content:"";}@media (prefers-color-scheme:light){html{content:"light";}}@media (prefers-color-scheme:dark){html{content:"dark";}}body{font:16px/1.4 "Source Serif 4","Noto Sans KR",serif;margin:0;position:relative;padding:10px 15px 20px 15px;-webkit-font-feature-settings:"kern","liga";-moz-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";}h1{font-size:1.5em;}h2{font-size:1.4em;}h3{font-size:1.3em;}h1,h2,h3,h4,h5,h6{font-weight:500;margin:20px 0 15px 0;padding-bottom:6px;}h1.fqn{display:flex;border-bottom:1px dashed;margin-top:0;padding-left:1px;}h1.fqn>.in-band>a:hover{text-decoration:underline;}h2,h3,h4{border-bottom:1px solid;}h3.code-header,h4.code-header{font-size:1em;font-weight:600;border:none;padding:0;margin:0;}.impl,.impl-items .method,.methods .method,.impl-items .type,.methods .type,.impl-items .associatedconstant,.methods .associatedconstant,.impl-items .associatedtype,.methods .associatedtype{flex-basis:100%;font-weight:600;margin-top:16px;margin-bottom:10px;position:relative;}.impl,.method.trait-impl,.type.trait-impl,.associatedconstant.trait-impl,.associatedtype.trait-impl{padding-left:15px;}div.impl-items>div{padding-left:0;}h1,h2,h3,h4,h5,h6,.sidebar,a.source,.search-input,.search-results .result-name,.content table td:first-child>a,.item-left>a,div.item-list .out-of-band,span.since,#source-sidebar,#sidebar-toggle,details.rustdoc-toggle>summary::before,details.undocumented>summary::before,div.impl-items>div:not(.docblock):not(.item-info),.content ul.crate a.crate,a.srclink,#main>ul.docblock>li>a{font-family:"Fira Sans",Arial,sans-serif;}.content ul.crate a.crate{font-size:16px/1.6;}ol,ul{padding-left:25px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.6em;}p{margin:0 0 .6em 0;}summary{outline:none;}td,th{padding:0;}table{border-collapse:collapse;}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;}details:not(.rustdoc-toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.1em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;}.type-decl pre{overflow-x:auto;}.source .content pre{padding:20px;}img{max-width:100%;}li{position:relative;}.source .content{margin-top:50px;max-width:none;overflow:visible;margin-left:0px;}nav.sub{font-size:16px;text-transform:uppercase;}.sidebar{width:200px;position:fixed;left:0;top:0;bottom:0;overflow:auto;}*{scrollbar-width:initial;}.sidebar{scrollbar-width:thin;}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;}.sidebar .block>ul>li{margin-right:-10px;}.content,nav{max-width:960px;}.hidden{display:none !important;}.logo-container{height:100px;width:100px;position:relative;margin:20px auto;display:block;margin-top:10px;}.logo-container>img{max-width:100px;max-height:100px;height:100%;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:block;}.sidebar .location{border:1px solid;font-size:17px;margin:30px 10px 20px 10px;text-align:center;word-wrap:break-word;font-weight:inherit;padding:0;}.sidebar .version{font-size:15px;text-align:center;border-bottom:1px solid;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;}.location:empty{border:none;}.location a:first-of-type{font-weight:500;}.location a:hover{text-decoration:underline;}.block{padding:0;margin-bottom:14px;}.block h2,.block h3{text-align:center;}.block ul,.block li{margin:0 10px;padding:0;list-style:none;}.block a{display:block;text-overflow:ellipsis;overflow:hidden;line-height:15px;padding:7px 5px;font-size:14px;font-weight:300;transition:border 500ms ease-out;}.sidebar-title{border-top:1px solid;border-bottom:1px solid;text-align:center;font-size:17px;margin-bottom:5px;font-weight:inherit;padding:0;}.sidebar-links{margin-bottom:15px;}.sidebar-links>a{padding-left:10px;width:100%;}.sidebar-menu{display:none;}.content{padding:15px 0;}.source .content pre.rust{white-space:pre;overflow:auto;padding-left:0;}.rustdoc .example-wrap{display:inline-flex;margin-bottom:10px;}.example-wrap{position:relative;width:100%;}.example-wrap>pre.line-number{overflow:initial;border:1px solid;padding:13px 8px;text-align:right;border-top-left-radius:5px;border-bottom-left-radius:5px;}.example-wrap>pre.rust a:hover{text-decoration:underline;}.rustdoc:not(.source) .example-wrap>pre:not(.line-number){width:100%;overflow-x:auto;}.rustdoc .example-wrap>pre{margin:0;}#search{margin-left:230px;position:relative;}#results>table{width:100%;table-layout:fixed;}.content>.example-wrap pre.line-numbers{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.line-numbers span{cursor:pointer;}.docblock-short{overflow-wrap:anywhere;}.docblock-short p{display:inline;}.docblock-short p{overflow:hidden;text-overflow:ellipsis;margin:0;}.docblock>:not(pre)>code,.docblock-short>:not(pre)>code{white-space:pre-wrap;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5,.docblock h6{border-bottom:1px solid;}.top-doc .docblock h2{font-size:1.3em;}.top-doc .docblock h3{font-size:1.15em;}.top-doc .docblock h4,.top-doc .docblock h5,.top-doc .docblock h6{font-size:1em;}.docblock h5{font-size:1em;}.docblock h6{font-size:0.95em;}.docblock{margin-left:24px;position:relative;}.docblock>*{max-width:100%;overflow-x:auto;}.content .out-of-band{flex-grow:0;text-align:right;font-size:23px;margin:0px;padding:0 0 0 12px;font-weight:normal;}.method>.code-header,.trait-impl>.code-header,.invisible>.code-header{max-width:calc(100% - 41px);display:block;}.invisible{width:100%;display:inline-block;}.content .in-band{flex-grow:1;margin:0px;padding:0px;}.in-band>code,.in-band>.code-header{display:inline-block;}#main{position:relative;}#main>.since{top:inherit;font-family:"Fira Sans",Arial,sans-serif;}.content table:not(.table-display){border-spacing:0 5px;}.content td{vertical-align:top;}.content td:first-child{padding-right:20px;}.content td p:first-child{margin-top:0;}.content td h1,.content td h2{margin-left:0;font-size:1.1em;}.content tr:first-child td{border-top:0;}.docblock table{margin:.5em 0;width:calc(100% - 2px);overflow-x:auto;display:block;}.docblock table td{padding:.5em;border:1px dashed;}.docblock table th{padding:.5em;text-align:left;border:1px solid;}.fields+table{margin-bottom:1em;}.content .item-list{list-style-type:none;padding:0;}.content .multi-column{-moz-column-count:5;-moz-column-gap:2.5em;-webkit-column-count:5;-webkit-column-gap:2.5em;column-count:5;column-gap:2.5em;}.content .multi-column li{width:100%;display:inline-block;}.content>.methods>.method{font-size:1em;position:relative;}.content .method .where,.content .fn .where,.content .where.fmt-newline{display:block;font-size:0.8em;}.content .methods>div:not(.notable-traits):not(.method){margin-left:40px;margin-bottom:15px;}.content .docblock>.impl-items{margin-left:20px;margin-top:-34px;}.content .docblock>.impl-items .table-display{margin:0;}.content .docblock>.impl-items table td{padding:0;}.content .docblock>.impl-items .table-display,.impl-items table td{border:none;}.content .item-info code{font-size:90%;}.content .item-info{position:relative;margin-left:33px;}.sub-variant>div>.item-info{margin-top:initial;}.content .item-info::before{content:'⬑';font-size:25px;position:absolute;top:-6px;left:-19px;}.content .impl-items .method,.content .impl-items>.type,.impl-items>.associatedconstant,.impl-items>.associatedtype,.content .impl-items details>summary>.type,.impl-items details>summary>.associatedconstant,.impl-items details>summary>.associatedtype{margin-left:20px;}.content .impl-items .docblock,.content .impl-items .item-info{margin-bottom:.6em;}.content .impl-items>.item-info{margin-left:40px;}.methods>.item-info,.content .impl-items>.item-info{margin-top:-8px;}.impl-items{flex-basis:100%;}#main>.item-info{margin-top:0;}nav:not(.sidebar){border-bottom:1px solid;padding-bottom:10px;margin-bottom:10px;}nav.main{padding:20px 0;text-align:center;}nav.main .current{border-top:1px solid;border-bottom:1px solid;}nav.main .separator{border:1px solid;display:inline-block;height:23px;margin:0 20px;}nav.sum{text-align:right;}nav.sub form{display:inline;}nav.sub,.content{margin-left:230px;}a{text-decoration:none;background:transparent;}.small-section-header{display:flex;justify-content:space-between;position:relative;}.small-section-header:hover>.anchor{display:initial;}.in-band:hover>.anchor,.impl:hover>.anchor,.method.trait-impl:hover>.anchor,.type.trait-impl:hover>.anchor,.associatedconstant.trait-impl:hover>.anchor,.associatedtype.trait-impl:hover>.anchor{display:inline-block;position:absolute;}.anchor{display:none;position:absolute;left:0;background:none !important;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-15px;padding-right:8px;}h2.small-section-header>.anchor{padding-right:6px;}.anchor::before{content:'§';}.docblock a:not(.srclink):not(.test-arrow):hover,.docblock-short a:not(.srclink):not(.test-arrow):hover,.item-info a{text-decoration:underline;}.invisible>.srclink,.method>.code-header+.srclink{position:absolute;top:0;right:0;font-size:17px;font-weight:normal;}.block a.current.crate{font-weight:500;}.item-table{display:table;}.item-row{display:table-row;}.item-left,.item-right{display:table-cell;}.item-left{padding-right:1.2rem;}.search-container{position:relative;}.search-container>div{display:inline-flex;width:calc(100% - 63px);}#crate-search{min-width:115px;margin-top:5px;padding:6px;padding-right:19px;flex:none;border:0;border-right:0;border-radius:4px 0 0 4px;outline:none;cursor:pointer;border-right:1px solid;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;text-overflow:"";background-repeat:no-repeat;background-color:transparent;background-size:20px;background-position:calc(100% - 1px) 56%;}.search-container>.top-button{position:absolute;right:0;top:10px;}.search-input{-moz-box-sizing:border-box !important;box-sizing:border-box !important;outline:none;border:none;border-radius:1px;margin-top:5px;padding:10px 16px;font-size:17px;transition:border-color 300ms ease;transition:border-radius 300ms ease-in-out;transition:box-shadow 300ms ease-in-out;width:100%;}#crate-search+.search-input{border-radius:0 1px 1px 0;width:calc(100% - 32px);}.search-input:focus{border-radius:2px;border:0;outline:0;}.search-results{display:none;padding-bottom:2em;}.search-results.active{display:block;clear:both;}.search-results .desc>span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block;}.search-results>a{display:block;width:100%;margin-left:2px;margin-right:2px;border-bottom:1px solid #aaa3;}.search-results>a>div{display:flex;flex-flow:row wrap;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:50%;}.search-results .result-name{padding-right:1em;}.search-results .result-name>span{display:inline-block;margin:0;font-weight:normal;}body.blur>:not(#help){filter:blur(8px);-webkit-filter:blur(8px);opacity:.7;}#help{width:100%;height:100vh;position:fixed;top:0;left:0;display:flex;justify-content:center;align-items:center;}#help>div{flex:0 0 auto;box-shadow:0 0 6px rgba(0,0,0,.2);width:550px;height:auto;border:1px solid;}#help dt{float:left;clear:left;display:block;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:18px;}#help span.top{text-align:center;display:block;margin:10px 0;border-bottom:1px solid;padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid;}#help dd{margin:5px 35px;}#help .infos{padding-left:0;}#help h1,#help h2{margin-top:0;}#help>div div{width:50%;float:left;padding:0 20px 20px 17px;;}.item-info .stab{display:table;}.stab{border-width:1px;border-style:solid;padding:3px;margin-bottom:5px;font-size:90%;font-weight:normal;}.stab p{display:inline;}.stab .emoji{font-size:1.5em;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.module-item .stab,.import-item .stab{border-radius:3px;display:inline-block;font-size:80%;line-height:1.2;margin-bottom:0;margin-left:.3em;padding:2px;vertical-align:text-bottom;}.module-item.unstable,.import-item.unstable{opacity:0.65;}.since{font-weight:normal;font-size:initial;}.impl-items .since,.impl .since,.methods .since{padding-left:12px;padding-right:2px;position:initial;}.impl-items .srclink,.impl .srclink,.methods .srclink{font-size:17px;font-weight:normal;}.rightside{float:right;}.has-srclink{font-size:16px;margin-bottom:12px;justify-content:space-between;}.variants_table{width:100%;}.variants_table tbody tr td:first-child{width:1%;}td.summary-column{width:100%;}.summary{padding-right:0px;}pre.rust .question-mark{font-weight:bold;}a.test-arrow{display:inline-block;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:130%;top:5px;right:5px;z-index:1;}a.test-arrow:hover{text-decoration:none;}.section-header:hover a:before{position:absolute;left:-25px;padding-right:10px;content:'\2002\00a7\2002';}.section-header:hover a{text-decoration:none;}.section-header a{color:inherit;}.code-attribute{font-weight:300;}.since+.srclink{padding-left:10px;}.item-spacer{width:100%;height:12px;}.out-of-band>span.since{position:initial;font-size:20px;margin-right:5px;}.sub-variant,.sub-variant>h3{margin-top:0px !important;padding-top:1px;}#main .sub-variant>h3{font-size:15px;margin-left:25px;margin-bottom:5px;}.sub-variant>div{margin-left:20px;margin-bottom:10px;}.sub-variant>div>span{display:block;position:relative;}.toggle-label{display:inline-block;margin-left:4px;margin-top:3px;}.docblock>.section-header:first-child{margin-left:15px;margin-top:0;}.docblock>.section-header:first-child:hover>a:before{left:-10px;}:target>code,:target>.code-header{opacity:1;}:target{padding-right:3px;}.information{position:absolute;left:-25px;margin-top:7px;z-index:1;}.tooltip{position:relative;display:inline-block;cursor:pointer;}.tooltip::after{display:none;text-align:center;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;font-size:16px;}.tooltip.ignore::after{content:"This example is not tested";}.tooltip.compile_fail::after{content:"This example deliberately fails to compile";}.tooltip.should_panic::after{content:"This example panics";}.tooltip.edition::after{content:"This code runs with edition " attr(data-edition);}.tooltip::before{content:" ";position:absolute;top:50%;left:16px;margin-top:-5px;border-width:5px;border-style:solid;display:none;}.tooltip:hover::before,.tooltip:hover::after{display:inline;}.tooltip.compile_fail,.tooltip.should_panic,.tooltip.ignore{font-weight:bold;font-size:20px;}.notable-traits-tooltip{display:inline-block;cursor:pointer;}.notable-traits:hover .notable-traits-tooltiptext,.notable-traits .notable-traits-tooltiptext.force-tooltip{display:inline-block;}.notable-traits .notable-traits-tooltiptext{display:none;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;z-index:10;font-size:16px;cursor:default;position:absolute;border:1px solid;}.notable-traits-tooltip::after{content:"\00a0\00a0\00a0";}.notable-traits .notable,.notable-traits .docblock{margin:0;}.notable-traits .notable{margin:0;margin-bottom:13px;font-size:19px;font-weight:600;}.notable-traits .docblock code.content{margin:0;padding:0;font-size:20px;}pre.rust.rust-example-rendered{position:relative;}pre.rust{tab-size:4;-moz-tab-size:4;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#titles{height:35px;}#titles>button{float:left;width:33.3%;text-align:center;font-size:18px;cursor:pointer;border:0;border-top:2px solid;}#titles>button:not(:last-child){margin-right:1px;width:calc(33.3% - 1px);}#titles>button>div.count{display:inline-block;font-size:16px;}.notable-traits{cursor:pointer;z-index:2;margin-left:5px;}#all-types{text-align:center;border:1px solid;margin:0 10px;margin-bottom:10px;display:block;border-radius:7px;}#all-types>p{margin:5px 0;}#sidebar-toggle{position:fixed;top:30px;left:300px;z-index:10;padding:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;cursor:pointer;font-weight:bold;transition:left .5s;font-size:1.2em;border:1px solid;border-left:0;}#source-sidebar{position:fixed;top:0;bottom:0;left:0;width:300px;z-index:1;overflow:auto;transition:left .5s;border-right:1px solid;}#source-sidebar>.title{font-size:1.5em;text-align:center;border-bottom:1px solid;margin-bottom:6px;}.theme-picker{position:absolute;left:211px;top:19px;}.theme-picker button{outline:none;}#settings-menu,#help-button{position:absolute;top:10px;}#settings-menu{right:0;outline:none;}#theme-picker,#settings-menu,#help-button,#copy-path{padding:4px;width:27px;height:29px;border:1px solid;border-radius:3px;cursor:pointer;}#help-button{right:30px;font-family:"Fira Sans",Arial,sans-serif;text-align:center;font-size:17px;padding-top:2px;}#copy-path{background:initial;margin-left:10px;padding:0;padding-left:2px;border:0;}#theme-choices{display:none;position:absolute;left:0;top:28px;border:1px solid;border-radius:3px;z-index:1;cursor:pointer;}#theme-choices>button{border:none;width:100%;padding:4px 8px;text-align:center;background:rgba(0,0,0,0);}#theme-choices>button:not(:first-child){border-top:1px solid;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px;border-radius:3px;box-shadow:inset 0 -1px 0;cursor:default;}.hidden-by-impl-hider,.hidden-by-usual-hider{display:none !important;}#implementations-list>h3>span.in-band{width:100%;}.table-display{width:100%;border:0;border-collapse:collapse;border-spacing:0;font-size:16px;}.table-display tr td:first-child{padding-right:0;}.table-display tr td:last-child{float:right;}.table-display .out-of-band{position:relative;font-size:19px;display:block;}#implementors-list>.impl-items .table-display .out-of-band{font-size:17px;}.table-display td:hover .anchor{display:block;top:2px;left:-5px;}#main>ul{padding-left:10px;}#main>ul>li{list-style:none;}.non-exhaustive{margin-bottom:1em;}div.children{padding-left:27px;display:none;}div.name{cursor:pointer;position:relative;margin-left:16px;}div.files>a{display:block;padding:0 3px;}div.files>a:hover,div.name:hover{background-color:#a14b4b;}div.name.expand+.children{display:block;}div.name::before{content:"\25B6";padding-left:4px;font-size:0.7em;position:absolute;left:-16px;top:4px;}div.name.expand::before{transform:rotate(90deg);left:-15px;top:2px;}details.rustdoc-toggle>summary.hideme{cursor:pointer;}details.rustdoc-toggle>summary,details.undocumented>summary{list-style:none;}details.rustdoc-toggle>summary::-webkit-details-marker,details.rustdoc-toggle>summary::marker,details.undocumented>summary::-webkit-details-marker,details.undocumented>summary::marker{display:none;}details.rustdoc-toggle>summary.hideme>span{margin-left:9px;}details.rustdoc-toggle>summary::before{content:"";cursor:pointer;width:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;display:inline-block;vertical-align:middle;opacity:.5;}details.rustdoc-toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.rustdoc-toggle>summary.hideme::after{content:"";}details.rustdoc-toggle>summary:focus::before,details.rustdoc-toggle>summary:hover::before{opacity:1;}details.rustdoc-toggle.top-doc>summary,details.rustdoc-toggle.top-doc>summary::before,details.rustdoc-toggle.non-exhaustive>summary,details.rustdoc-toggle.non-exhaustive>summary::before{font-family:'Fira Sans';font-size:16px;}details.non-exhaustive{margin-bottom:8px;}details.rustdoc-toggle>summary.hideme::before{position:relative;}details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-23px;top:3px;}.impl-items>details.rustdoc-toggle>summary:not(.hideme)::before,.undocumented>details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-2px;}details.rustdoc-toggle[open] >summary.hideme{position:absolute;}details.rustdoc-toggle,details.undocumented{position:relative;}details.rustdoc-toggle[open] >summary.hideme>span{display:none;}details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{width:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;display:inline-block;content:"";}details.rustdoc-toggle[open] >summary::after,details.rustdoc-toggle[open] >summary.hideme::after{content:"Collapse";}details.undocumented>summary::before{padding-left:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;content:"Show hidden undocumented items";cursor:pointer;font-size:16px;font-weight:300;opacity:.5;}details.undocumented>summary:focus::before,details.undocumented>summary:hover::before{opacity:1;}details.undocumented[open] >summary::before{padding-left:17px;height:max(17px,1.1em);background-repeat:no-repeat background-position:top left;content:"Hide undocumented items";}@media (min-width:701px){.docblock>.information:first-child>.tooltip{margin-top:16px;}}@media (max-width:700px){body{padding-top:0px;}.rustdoc>.sidebar{height:45px;min-height:40px;margin:0;margin-left:-15px;padding:0 15px;position:static;z-index:11;}.sidebar>.location{float:right;margin:0px;margin-top:2px;padding:3px 10px 1px 10px;min-height:39px;background:inherit;text-align:left;font-size:24px;}.sidebar .location:empty{padding:0;}.sidebar .logo-container{width:35px;height:35px;margin-top:5px;margin-bottom:5px;float:left;margin-left:50px;}.sidebar .logo-container>img{max-width:35px;max-height:35px;}.sidebar-menu{position:fixed;z-index:10;font-size:2rem;cursor:pointer;width:45px;left:0;text-align:center;display:block;border-bottom:1px solid;border-right:1px solid;height:45px;}.rustdoc.source>.sidebar>.sidebar-menu{display:none;}.sidebar-elems{position:fixed;z-index:1;top:45px;bottom:0;width:246px;left:-246px;overflow-y:auto;border-right:1px solid;}.sidebar>.block.version{overflow:hidden;border-bottom:none;margin-bottom:0;height:100%;padding-left:12px;}.sidebar>.block.version>div.narrow-helper{float:left;width:1px;height:100%;}.sidebar>.block.version>p{margin:0;min-width:55px;display:flex;align-items:center;height:100%;}nav.sub{width:calc(100% - 32px);float:right;}.content{margin-left:0px;}#main,#search{margin-top:45px;padding:0;}#search{margin-left:0;}.anchor{display:none !important;}.theme-picker{left:10px;top:54px;z-index:1;}.notable-traits{position:absolute;left:-22px;top:24px;}#titles>button>div.count{float:left;width:100%;}#titles{height:50px;}.sidebar.mobile{position:fixed;width:100%;margin-left:0;background-color:rgba(0,0,0,0);height:100%;}.sidebar.mobile>div.version{overflow:hidden;max-height:33px;}.sidebar{width:calc(100% + 30px);}.show-it,.sidebar-elems:focus-within{z-index:2;left:0;}.show-it>.block.items{margin:8px 0;}.show-it>.block.items>ul{margin:0;}.show-it>.block.items>ul>li{text-align:center;margin:2px 0;}.show-it>.block.items>ul>li>a{font-size:21px;}#sidebar-filler{position:fixed;left:45px;width:calc(100% - 45px);top:0;height:45px;z-index:-1;border-bottom:1px solid;}#main>details.rustdoc-toggle>summary::before,#main>div>details.rustdoc-toggle>summary::before{left:-11px;}#all-types{margin:10px;}#sidebar-toggle{top:100px;width:30px;font-size:1.5rem;text-align:center;padding:0;}#source-sidebar{z-index:11;}#main>.line-numbers{margin-top:0;}.notable-traits .notable-traits-tooltiptext{left:0;top:100%;}#help-button{display:none;}.item-table{display:block;}.item-row{display:flex;flex-flow:column wrap;}.item-left,.item-right{width:100%;}.search-container>div{width:calc(100% - 32px);}.search-results>a{border-bottom:1px solid #aaa9;padding:5px 0px;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:100%;}.search-results div.desc,.search-results .result-description,.item-right{padding-left:2em;}}@media print{nav.sub,.content .out-of-band{display:none;}}@media (max-width:464px){#titles,#titles>button{height:73px;}#main,#search{margin-top:100px;}#main>table:not(.table-display) td{word-break:break-word;width:50%;}.search-container>div{display:block;width:calc(100% - 37px);}#crate-search{width:100%;border-radius:4px;border:0;}#crate-search+.search-input{width:calc(100% + 71px);margin-left:-36px;}#theme-picker,#settings-menu{padding:5px;width:31px;height:31px;}#theme-picker{margin-top:-2px;}#settings-menu{top:7px;}.docblock{margin-left:12px;}.docblock code{overflow-wrap:anywhere;}}details.undocumented[open] >summary::before,details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{background-image:url(toggle-minus.svg);}details.undocumented>summary::before,details.rustdoc-toggle>summary::before{background-image:url(toggle-plus.svg);} \ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/search-index.js b/static/docs-rs/bdk/nightly/latest/search-index.js index 0a7d7e4492..007aa49863 100644 --- a/static/docs-rs/bdk/nightly/latest/search-index.js +++ b/static/docs-rs/bdk/nightly/latest/search-index.js @@ -1,4 +1,4 @@ var searchIndex = JSON.parse('{\ -"bdk":{"doc":"A modern, lightweight, descriptor-based wallet library …","t":[13,13,13,13,13,13,3,13,13,13,4,13,13,3,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,4,13,3,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,3,13,13,4,8,3,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,14,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,14,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,0,11,11,11,11,11,11,11,11,12,11,12,12,12,11,11,11,11,11,12,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,12,11,11,11,11,11,11,11,11,12,10,12,5,11,11,11,11,11,11,11,11,0,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,8,4,16,8,3,13,13,3,3,8,6,0,11,11,11,11,11,11,10,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,0,11,0,10,11,11,11,11,10,10,11,10,10,11,11,11,11,11,11,11,5,5,5,10,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,4,4,13,13,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,13,3,3,3,4,13,13,13,13,13,13,13,13,3,13,13,13,3,13,13,13,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,12,11,11,11,11,11,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,12,12,12,11,11,11,11,11,11,11,12,11,11,13,3,3,4,3,13,13,13,13,13,13,13,13,13,13,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,16,8,8,16,8,8,3,0,10,11,11,11,10,11,10,11,12,10,11,10,11,10,11,10,11,10,11,10,11,11,11,11,10,11,11,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,11,11,10,11,10,11,10,11,10,11,0,11,12,10,11,10,11,10,11,10,11,10,11,11,11,11,11,4,4,4,13,13,13,13,13,13,3,13,13,13,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13,6,3,4,6,8,6,8,6,4,3,13,8,4,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,12,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,5,13,13,13,4,13,13,13,13,13,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,13,13,4,13,3,6,6,13,13,13,13,13,13,13,13,13,13,13,3,3,4,13,13,13,13,4,4,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,12,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,3,3,3,3,3,3,8,6,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13,8,4,4,4,3,3,16,16,8,4,8,8,3,8,13,13,13,4,6,13,13,13,16,13,3,13,8,4,13,13,13,3,6,13,13,5,10,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,12,12,12,11,5,11,10,11,11,5,11,11,11,11,12,12,11,11,11,11,11,11,12,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,4,3,4,6,3,13,13,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,4,3,8,13,13,13,13,3,11,11,12,0,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,12,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,0,11,0,11,11,11,11,11,11,11,0,11,11,11,11,11,11,12,12,8,4,13,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,12,3,8,3,6,3,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,12,13,13,13,13,13,13,13,13,13,13,13,13,3,8,4,4,3,3,13,11,12,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,10,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,5,13,3,13,13,4,3,13,13,3,8,4,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["AddressValidator","Bip32","BnBNoExactMatch","BnBTotalTriesExceeded","ChecksumMismatch","CompactFilters","ConfirmationTime","Descriptor","Electrum","Encode","Error","Esplora","External","FeeRate","FeeRateTooLow","FeeRateUnavailable","FeeTooLow","Foreign","Generic","Hex","InsufficientFunds","Internal","InvalidNetwork","InvalidOutpoint","InvalidPolicyPathError","InvalidProgressValue","InvalidU32Bytes","IrreplaceableTransaction","Json","Key","KeychainKind","Local","LocalUtxo","Miniscript","MissingKeyOrigin","NoRecipients","NoUtxosSelected","OutputBelowDustLimit","ProgressUpdateError","Psbt","PsbtParse","Rusqlite","ScriptDoesntHaveAddressForm","Secp256k1","Signer","Sled","SpendingPolicyRequired","TransactionConfirmed","TransactionDetails","TransactionNotFound","UnknownUtxo","Utxo","Vbytes","WeightedUtxo","as_byte","as_fail","as_ref","as_sat_vb","base32_len","blockchain","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","check_base32","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","confirmation_time","database","default","default","default","default_min_relay_fee","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","descriptor","descriptor","deserialize","deserialize","deserialize","deserialize","drop","drop","drop","drop","drop","drop","drop","drop","eq","eq","eq","eq","eq","eq","eq","fee","fee_vb","fee_wu","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fragment","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_btc_per_kvb","from_sat_per_vb","from_vb","from_wu","get_hash","get_hash","hash","hash","height","init","init","init","init","init","init","init","init","into","into","into","into","into","into","into","into","into_descriptor_key","into_extended_key","into_wallet_descriptor","into_wallet_descriptor","keychain","keys","ne","ne","ne","ne","ne","ne","new","outpoint","outpoint","partial_cmp","received","satisfaction_weight","sent","serialize","serialize","serialize","serialize","sub","timestamp","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","transaction","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","txid","txout","txout","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","utxo","vbytes","verified","version","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wallet","write_base32","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","available","found","needed","requested","required","required","0","outpoint","psbt_input","AccurateFees","Blockchain","Capability","Config","ConfigurableBlockchain","EsploraBlockchain","FullHistory","GetAnyTx","LogProgress","NoopProgress","Progress","ProgressData","any","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","broadcast","clone","clone","clone","clone_into","clone_into","clone_into","compact_filters","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","electrum","eq","esplora","estimate_fee","fmt","from","from","from","from_config","get_capabilities","get_hash","get_height","get_tx","hash","init","init","init","into","into","into","log_progress","noop_progress","progress","setup","sync","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update","update","update","vzip","vzip","vzip","AnyBlockchain","AnyBlockchainConfig","CompactFilters","CompactFilters","Electrum","Electrum","Esplora","Esplora","borrow","borrow","borrow_mut","borrow_mut","broadcast","clone","clone_into","deref","deref","deref_mut","deref_mut","deserialize","drop","drop","eq","estimate_fee","fmt","from","from","from","from","from","from","from","from","from_config","get_capabilities","get_height","get_tx","init","init","into","into","ne","serialize","setup","sync","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","0","0","0","0","0","0","Bip158","BitcoinPeerConfig","CompactFiltersBlockchain","CompactFiltersBlockchainConfig","CompactFiltersError","DataCorruption","Db","Global","InvalidFilter","InvalidFilterHeader","InvalidHeaders","InvalidResponse","Io","Mempool","MissingBlock","NoPeers","NotConnected","Peer","PeerBloomDisabled","Time","Timeout","add_tx","address","as_fail","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","broadcast","clone","clone","clone_into","clone_into","connect","connect_proxy","default","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","deserialize","drop","drop","drop","drop","drop","drop","eq","eq","estimate_fee","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from_config","get_capabilities","get_height","get_mempool","get_network","get_tx","get_tx","get_version","has_tx","init","init","init","init","init","init","into","into","into","into","into","into","is_connected","iter_txs","ne","ne","network","new","new","peers","recv","send","serialize","serialize","setup","skip_blocks","socks5","socks5_credentials","storage_dir","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","0","0","0","0","0","ElectrumBlockchain","ElectrumBlockchainConfig","borrow","borrow","borrow_mut","borrow_mut","broadcast","clone","clone_into","deref","deref","deref_mut","deref_mut","deserialize","drop","drop","eq","estimate_fee","fmt","from","from","from","from_config","get_capabilities","get_height","get_tx","init","init","into","into","ne","retry","serialize","setup","socks5","stop_gap","timeout","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","url","vzip","vzip","BitcoinEncoding","EsploraBlockchain","EsploraBlockchainConfig","EsploraError","EsploraGetHistory","HeaderHashNotFound","HeaderHeightNotFound","Hex","HttpResponse","Io","NoHeader","Parsing","TransactionNotFound","Ureq","UreqTransport","as_fail","base_url","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","broadcast","clone","clone_into","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","deserialize","drop","drop","drop","drop","eq","estimate_fee","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from_config","get_capabilities","get_height","get_tx","init","init","init","init","into","into","into","into","ne","new","proxy","serialize","setup","stop_gap","timeout_read","timeout_write","to_owned","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","with_agent","0","0","0","0","0","0","0","0","0","0","Batch","BatchDatabase","BatchOperations","Config","ConfigurableDatabase","Database","SqliteDatabase","any","begin_batch","begin_batch","borrow","borrow_mut","check_descriptor_checksum","check_descriptor_checksum","commit_batch","commit_batch","connection","del_last_index","del_last_index","del_path_from_script_pubkey","del_path_from_script_pubkey","del_raw_tx","del_raw_tx","del_script_pubkey_from_path","del_script_pubkey_from_path","del_tx","del_tx","del_utxo","del_utxo","deref","deref_mut","drop","flush","flush","fmt","from","from_config","from_config","get_last_index","get_last_index","get_path_from_script_pubkey","get_path_from_script_pubkey","get_raw_tx","get_raw_tx","get_script_pubkey_from_path","get_script_pubkey_from_path","get_tx","get_tx","get_utxo","get_utxo","increment_last_index","increment_last_index","init","into","iter_raw_txs","iter_raw_txs","iter_script_pubkeys","iter_script_pubkeys","iter_txs","iter_txs","iter_utxos","iter_utxos","memory","new","path","set_last_index","set_last_index","set_raw_tx","set_raw_tx","set_script_pubkey","set_script_pubkey","set_tx","set_tx","set_utxo","set_utxo","try_from","try_into","type_id","vzip","AnyBatch","AnyDatabase","AnyDatabaseConfig","Memory","Memory","Memory","Sled","Sled","Sled","SledDbConfiguration","Sqlite","Sqlite","Sqlite","SqliteDbConfiguration","begin_batch","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","check_descriptor_checksum","commit_batch","del_last_index","del_last_index","del_path_from_script_pubkey","del_path_from_script_pubkey","del_raw_tx","del_raw_tx","del_script_pubkey_from_path","del_script_pubkey_from_path","del_tx","del_tx","del_utxo","del_utxo","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","deserialize","deserialize","drop","drop","drop","drop","drop","flush","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_config","get_last_index","get_path_from_script_pubkey","get_raw_tx","get_script_pubkey_from_path","get_tx","get_utxo","increment_last_index","init","init","init","init","init","into","into","into","into","into","iter_raw_txs","iter_script_pubkeys","iter_txs","iter_utxos","path","path","serialize","serialize","serialize","set_last_index","set_last_index","set_raw_tx","set_raw_tx","set_script_pubkey","set_script_pubkey","set_tx","set_tx","set_utxo","set_utxo","tree_name","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","0","0","0","0","0","0","0","0","0","MemoryDatabase","begin_batch","borrow","borrow_mut","check_descriptor_checksum","commit_batch","default","del_last_index","del_path_from_script_pubkey","del_raw_tx","del_script_pubkey_from_path","del_tx","del_utxo","deref","deref_mut","drop","flush","fmt","from","from_config","get_last_index","get_path_from_script_pubkey","get_raw_tx","get_script_pubkey_from_path","get_tx","get_utxo","increment_last_index","init","into","iter_raw_txs","iter_script_pubkeys","iter_txs","iter_utxos","new","set_last_index","set_raw_tx","set_script_pubkey","set_tx","set_utxo","try_from","try_into","type_id","vzip","Bare","DerivedDescriptor","DerivedDescriptorKey","Descriptor","ExtendedDescriptor","ExtractPolicy","HdKeyPaths","IntoWalletDescriptor","KeyMap","Legacy","Miniscript","Pkh","ScriptContext","Segwitv0","Sh","Wpkh","Wsh","address","as_enum","as_enum","as_inner","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","branches","check_global_consensus_validity","check_global_consensus_validity","check_global_consensus_validity","check_global_policy_validity","check_global_policy_validity","check_global_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_policy_validity","check_local_policy_validity","check_local_policy_validity","check_local_validity","check_terminal_non_malleable","check_terminal_non_malleable","check_terminal_non_malleable","check_witness","check_witness","check_witness","checksum","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","derive","desc_type","deserialize","deserialize","drop","drop","drop","drop","drop","encode","eq","eq","eq","eq","eq","error","explicit_script","ext","extract_policy","extract_policy","extract_policy","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","for_each_key","from","from","from","from","from","from_ast","from_str","from_str","from_str_insane","from_tree","from_tree","get_hash","get_hash","get_hash","get_hash","get_hash","get_leaf_pk","get_leaf_pk_pkh","get_leaf_pkh","get_nth_child","get_nth_pk","get_nth_pk_pkh","get_nth_pkh","get_satisfaction","has_mixed_timelocks","has_repeated_keys","hash","hash","hash","hash","hash","hash_to_hash160","init","init","init","init","init","into","into","into","into","into","into_inner","into_wallet_descriptor","is_deriveable","is_non_malleable","is_uncompressed","iter","iter_pk","iter_pk_pkh","iter_pkh","lift","lift","lift_check","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_weight","max_satisfaction_witness_elements","ne","new","new_bare","new_pk","new_pkh","new_sh","new_sh_sortedmulti","new_sh_wpkh","new_sh_wsh","new_sh_wsh_sortedmulti","new_wpkh","new_wsh","new_wsh_sortedmulti","node","other_top_level_checks","parse","parse_descriptor","parse_insane","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","policy","requires_sig","sanity_check","sanity_check","satisfy","satisfy_malleable","script_code","script_pubkey","script_size","serialize","serialize","serialized_len","template","to_owned","to_owned","to_owned","to_owned","to_owned","to_pubkeyhash","to_public_key","to_string","to_string","to_string","to_string_with_secret","top_level_checks","top_level_type_check","translate_pk","translate_pk","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","ty","type_id","type_id","type_id","type_id","type_id","unsigned_script_sig","vzip","vzip","vzip","vzip","vzip","within_resource_limits","0","0","0","0","0","get_checksum","Base58","Bip32","DuplicatedKeys","Error","HardenedDerivationXpub","Hex","InvalidDescriptorCharacter","InvalidDescriptorChecksum","InvalidHdKeyPath","Key","Miniscript","Pk","Policy","as_fail","borrow","borrow_mut","deref","deref_mut","drop","fmt","fmt","from","from","from","from","from","from","from","from","init","into","to_string","try_from","try_into","type_id","vzip","0","0","0","0","0","0","0","0","AbsoluteTimelock","AddOnLeaf","AddOnPartialComplete","BuildSatisfaction","Complete","Condition","ConditionMap","FoldedConditionMap","Hash160Preimage","Hash256Preimage","IncompatibleConditions","IndexOutOfRange","MixedTimelockUnits","Multisig","None","None","NotEnoughItemsSelected","Partial","PartialComplete","PkOrF","Policy","PolicyError","Psbt","PsbtTimelocks","RelativeTimelock","Ripemd160Preimage","Satisfaction","SatisfiableItem","Sha256Preimage","Signature","SignatureKey","Thresh","as_fail","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","contribution","csv","default","default","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","drop","drop","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","get_condition","get_hash","hash","id","id","init","init","init","init","init","init","init","into","into","into","into","into","into","into","is_leaf","is_leaf","is_null","item","ne","ne","partial_cmp","requires_path","satisfaction","serialize","serialize","serialize","serialize","serialize","timelock","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","0","current_height","input_max_height","psbt","0","0","condition","conditions","conditions","items","items","m","m","n","n","sorted","sorted","0","0","hash","hash","hash","hash","items","keys","threshold","threshold","value","value","0","0","0","0","0","0","0","0","0","1","1","1","1","1","1","2","2","2","Bip44","Bip44Public","Bip49","Bip49Public","Bip84","Bip84Public","DescriptorTemplate","DescriptorTemplateOut","P2Pkh","P2Wpkh","P2Wpkh_P2Sh","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","build","build","build","build","build","build","build","build","build","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","drop","drop","drop","drop","from","from","from","from","from","from","from","from","from","init","init","init","init","init","init","init","init","init","into","into","into","into","into","into","into","into","into","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","Bip32","DerivableKey","DescriptorKey","DescriptorPublicKey","DescriptorSecretKey","DescriptorSinglePriv","DescriptorSinglePub","Entropy","Error","ExtScriptContext","ExtendedKey","GeneratableDefaultOptions","GeneratableKey","GeneratedKey","IntoDescriptorKey","InvalidChecksum","InvalidNetwork","InvalidScriptContext","KeyError","KeyMap","Legacy","Message","Miniscript","Options","Private","PrivateKeyGenerateOptions","Public","ScriptContext","ScriptContextEnum","Segwitv0","SinglePriv","SinglePub","SortedMultiVec","ValidNetworks","XPrv","XPub","any_network","as_enum","as_fail","as_public","bip39","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","check_global_consensus_validity","check_global_consensus_validity","check_global_policy_validity","check_global_policy_validity","check_global_validity","check_global_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_policy_validity","check_local_policy_validity","check_local_validity","check_local_validity","check_terminal_non_malleable","check_witness","check_witness","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","compressed","default","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","derive","derive_public_key","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","encode","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_public","from_secret","from_str","from_str","from_tree","full_derivation_path","generate","generate_default","generate_with_entropy","generate_with_entropy_default","get_hash","get_hash","get_hash","has_secret","hash","hash","hash","init","init","init","init","init","init","init","init","init","init","init","into","into","into","into","into","into","into","into","into","into","into","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_extended_key","into_extended_key","into_extended_key","into_key","into_xprv","into_xpub","is_deriveable","is_legacy","is_legacy","is_segwit_v0","is_segwit_v0","is_uncompressed","k","key","key","lift","mainnet_network","master_fingerprint","max_satisfaction_size","max_satisfaction_size","max_satisfaction_witness_elements","merge_networks","ne","ne","ne","new","origin","origin","other_top_level_checks","other_top_level_checks","override_valid_networks","partial_cmp","partial_cmp","partial_cmp","pks","sanity_check","satisfy","script_size","sorted_node","test_networks","to_owned","to_owned","to_owned","to_owned","to_owned","to_pubkeyhash","to_string","to_string","to_string","to_string","top_level_checks","top_level_checks","top_level_type_check","top_level_type_check","translate_pk","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","0","0","0","0","0","0","0","0","0","ChineseSimplified","ChineseTraditional","English","French","Italian","Japanese","Korean","Language","Mnemonic","MnemonicType","MnemonicWithPassphrase","Seed","Spanish","Words12","Words15","Words18","Words21","Words24","as_bytes","as_ref","as_ref","base32_len","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","check_base32","checksum_bits","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","default","default","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","entropy","entropy_bits","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_key_size","for_phrase","for_word_count","from","from","from","from","from_entropy","from_language_code","from_phrase","generate_with_entropy","init","init","init","init","into","into","into","into","into_descriptor_key","into_descriptor_key","into_extended_key","into_extended_key","into_phrase","language","new","new","phrase","to_hex","to_hex","to_owned","to_owned","to_owned","to_owned","to_string","to_string","total_bits","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","validate","vzip","vzip","vzip","vzip","word_count","wordlist","wordmap","write_base32","AddressIndex","AddressInfo","IsDust","LastUnused","New","Peek","Reset","Wallet","add_address_validator","add_signer","address","address_validator","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","broadcast","build_fee_bump","build_tx","client","coin_selection","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","eq","export","finalize_psbt","fmt","fmt","fmt","fmt","from","from","from","get_address","get_balance","get_descriptor_for_keychain","get_funded_wallet","get_psbt_input","get_tx","get_utxo","index","init","init","init","into","into","into","is_dust","is_mine","list_transactions","list_unspent","ne","network","new","new_offline","policies","public_descriptor","secp_ctx","sign","signer","sync","time","to_string","try_from","try_from","try_from","try_into","try_into","try_into","tx_builder","type_id","type_id","type_id","vzip","vzip","vzip","0","0","AddressValidator","AddressValidatorError","ConnectionError","InvalidScript","Message","TimeoutError","UserRejected","as_fail","borrow","borrow_mut","clone","clone_into","deref","deref_mut","drop","eq","fmt","fmt","from","init","into","ne","to_owned","to_string","try_from","try_into","type_id","validate","vzip","0","BranchAndBoundCoinSelection","CoinSelectionAlgorithm","CoinSelectionResult","DefaultCoinSelectionAlgorithm","LargestFirstCoinSelection","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","coin_select","coin_select","coin_select","default","default","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","fee_amount","fmt","fmt","fmt","from","from","from","init","init","init","into","into","into","local_selected_amount","new","selected","selected_amount","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","WalletExport","blockheight","borrow","borrow_mut","change_descriptor","deref","deref_mut","descriptor","deserialize","drop","export_wallet","fmt","from","from_str","init","into","label","serialize","to_string","try_from","try_into","type_id","vzip","0","Dummy","Fingerprint","InputIndexOutOfRange","InvalidKey","InvalidNonWitnessUtxo","MissingHdKeypath","MissingKey","MissingNonWitnessUtxo","MissingWitnessScript","MissingWitnessUtxo","NonStandardSighash","PkHash","SignOptions","Signer","SignerError","SignerId","SignerOrdering","SignersContainer","UserCanceled","add_external","allow_all_sighashes","as_fail","as_key_map","assume_height","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","default","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","descriptor_secret_key","drop","drop","drop","drop","drop","eq","eq","eq","find","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","get_hash","hash","id","ids","init","init","init","init","init","into","into","into","into","into","ne","ne","new","partial_cmp","partial_cmp","remove","sign","sign_whole_tx","signers","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","trust_witness_utxo","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","0","0","0","get_timestamp","Bip69Lexicographic","BumpFee","ChangeAllowed","ChangeForbidden","ChangeSpendPolicy","CreateTx","OnlyChange","Shuffle","TxBuilder","TxBuilderContext","TxOrdering","Untouched","add_foreign_utxo","add_global_xpubs","add_recipient","add_unspendable","add_utxo","add_utxos","allow_shrinking","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","change_policy","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","coin_selection","default","default","default","default","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","do_not_spend_change","drain_to","drain_wallet","drop","drop","drop","drop","drop","enable_rbf","enable_rbf_with_sequence","eq","eq","fee_absolute","fee_rate","finish","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","get_hash","get_hash","hash","hash","include_output_redeem_witness_script","init","init","init","init","init","into","into","into","into","into","manually_selected_only","nlocktime","only_spend_change","only_witness_utxo","ordering","partial_cmp","partial_cmp","policy_path","set_recipients","sighash","sort_tx","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","unspendable","version","vzip","vzip","vzip","vzip","vzip"],"q":["bdk","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::Error","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::Utxo","","","bdk::blockchain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::blockchain::any","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::blockchain::any::AnyBlockchain","","","bdk::blockchain::any::AnyBlockchainConfig","","","bdk::blockchain::compact_filters","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::blockchain::compact_filters::CompactFiltersError","","","","","bdk::blockchain::electrum","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::blockchain::esplora","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::blockchain::esplora::EsploraError","","","","","","","","","","bdk::database","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::database::any","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::database::any::AnyBatch","","","bdk::database::any::AnyDatabase","","","bdk::database::any::AnyDatabaseConfig","","","bdk::database::memory","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor::Descriptor","","","","","bdk::descriptor::checksum","bdk::descriptor::error","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor::error::Error","","","","","","","","bdk::descriptor::policy","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor::policy::BuildSatisfaction","","","","bdk::descriptor::policy::PolicyError","","bdk::descriptor::policy::Satisfaction","","","","","","","","","","","bdk::descriptor::policy::SatisfiableItem","","","","","","","","","","","","bdk::descriptor::template","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::keys","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::keys::DescriptorPublicKey","","bdk::keys::DescriptorSecretKey","","bdk::keys::ExtendedKey","","bdk::keys::KeyError","","","bdk::keys::bip39","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::AddressIndex","","bdk::wallet::address_validator","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::address_validator::AddressValidatorError","bdk::wallet::coin_selection","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::export","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::signer","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::signer::SignerId","","","bdk::wallet::time","bdk::wallet::tx_builder","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["Error that can be returned to fail the validation of an …","BIP32 error","Branch and bound coin selection tries to avoid needing a …","Branch and bound coin selection possible attempts with …","Descriptor checksum mismatch","Compact filters client error)","Block height and timestamp of the block containing the …","Error related to the parsing and usage of descriptors","Electrum client error","Encoding error","Errors that can be thrown by the Wallet","Esplora client error","External","Fee rate","When bumping a tx the fee rate requested is lower than …","Node doesn’t have data to estimate a fee rate","When bumping a tx the absolute fee requested is lower than …","A UTXO owned by another wallet.","Generic error","Hex decoding error","Wallet’s UTXO set is not enough to cover recipient’s …","Internal, usually used for change outputs","Invalid network","Requested outpoint doesn’t exist in the tx (vout greater …","Error while extracting and manipulating policies","Progress value must be between 0.0 (included) and 100.0 …","Wrong number of bytes found when trying to convert to u32","Trying to replace a tx that has a sequence >= 0xFFFFFFFE","Error serializing or deserializing JSON data","Error while working with keys","Types of keychains","A UTXO owned by the local wallet.","An unspent output owned by a Wallet.","Miniscript error","In order to use the TxBuilder::add_global_xpubs option …","Cannot build a tx without recipients","manually_selected_only option is selected but no utxo has …","Output created is under the dust limit, 546 satoshis","Progress update error (maybe the channel has been closed)","Partially signed bitcoin transaction error","Partially signed bitcoin transaction parseerror","Rusqlite client error","This error is thrown when trying to convert Bare and …","An ECDSA error","Signing error","Sled database error","Spending policy is not compatible with this KeychainKind","Happens when trying to bump a transaction that is already …","A wallet transaction","Thrown when a tx is not found in the internal database","Happens when trying to spend an UTXO that is not in the …","An unspent transaction output (UTXO).","Trait implemented by types that can be used to measure …","A Utxo with its satisfaction_weight.","Return KeychainKind as a byte","","","Return the value as satoshi/vbyte","","Blockchain backends","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","If the transaction is confirmed, contains height and …","Database types","","","","Create a new FeeRate with the default min relay fee value","","","","","","","","","","","","","","","","","Descriptors","Macro to write full descriptors with code","","","","","","","","","","","","","","","","","","","","Fee value (sats) if available. The availability of the fee …","Calculate absolute fee in Satoshis using size in virtual …","Calculate absolute fee in Satoshis using size in weight …","","","","","","","","","","Macro to write descriptor fragments with code","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a new instance of FeeRate given a float fee rate in …","Create a new instance of FeeRate given a float fee rate in …","Calculate fee rate from fee and vbytes.","Calculate fee rate from fee and weight units (wu).","","","","","confirmation block height","","","","","","","","","","","","","","","","","","","","","Type of keychain","Key formats","","","","","","","Returns Some ConfirmationTime if both height and timestamp …","Get the location of the UTXO","Reference to a transaction output","","Received value (sats)","The weight of the witness data and scriptSig expressed in …","Sent value (sats)","","","","","","confirmation block timestamp","","","","","","","","","Optional transaction","","","","","","","","","","","","","","","","","Transaction id","Get the TxOut of the UTXO","Transaction output","","","","","","","","","The UTXO","Convert weight units to virtual bytes.","Whether the tx has been verified against the consensus …","Get the version of BDK at runtime","","","","","","","","","Wallet","","","","","","","","","","","","","","","","","","","","","","","","","","","Sats available for spending","found network, for example the network of the bitcoin node","Sats needed for some transaction","requested network, for example what is given as bdk-cli …","Required fee rate (satoshi/vbyte)","Required fee absolute value (satoshi)","","The location of the output.","The information about the input we require to add it to a …","Can compute accurate fees for the transactions found …","Trait that defines the actions that must be supported by a …","Capabilities that can be supported by a Blockchain backend","Type that contains the configuration","Trait for Blockchain types that can be created given a …","Structure that implements the logic to sync with Esplora","Can recover the full history of a wallet and not only the …","Can fetch any historical transaction given its txid","Type that implements Progress and logs at level INFO every …","Type that implements Progress and drops every update …","Trait for types that can receive and process progress …","Data sent with a progress update over a channel","Runtime-checked blockchain types","","","","","","","Broadcast a transaction","","","","","","","Compact Filters","","","","","","","","","","Electrum","","Esplora","Estimate the fee rate required to confirm a transaction in …","","","","","Create a new instance given a configuration","Return the set of Capability supported by this backend","","Return the current height","Fetch a transaction from the blockchain given its txid","","","","","","","","Create a new instance of LogProgress","Create a new instance of NoopProgress","Shortcut to create a channel (pair of Sender and Receiver) …","Setup the backend and populate the internal database for …","Populate the internal database with transactions and UTXOs","","","","","","","","","","","","","Send a new progress update","","","","","","Type that can contain any of the Blockchain types defined …","Type that can contain any of the blockchain configurations …","Compact filters client","Compact filters client","Electrum client","Electrum client","Esplora client","Esplora client","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Invalid BIP158 filter","Data to connect to a Bitcoin P2P peer","Structure implementing the required blockchain traits","Configuration for a CompactFiltersBlockchain","An error that can occur during sync with a …","The data stored in the block filters storage are corrupted","Internal database error","Wrapper for crate::error::Error","The compact filter returned is invalid","The compact filter headers returned are invalid","The headers returned are invalid","A peer sent an invalid or unexpected response","Internal I/O error","Container for unconfirmed, but valid Bitcoin transactions","The peer is missing a block in the valid chain","No peers have been specified","A peer is not connected","A Bitcoin peer","The peer doesn’t advertise the BLOOM service flag","Internal system time error","A peer took too long to reply to one of our messages","Add a transaction to the mempool","Peer address such as 127.0.0.1:18333","","","","","","","","","","","","","","","","","","","Connect to a peer over a plaintext TCP connection","Connect to a peer through a SOCKS5 proxy, optionally by …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return the mempool used by this peer","Return the Bitcoin Network in use","Look-up a transaction in the mempool given an Inventory …","","Return the VersionMessage sent by the peer","Return whether or not the mempool contains a transaction …","","","","","","","","","","","","","Return whether or not the peer is still connected","Return the list of transactions contained in the mempool","","","Network used","Create a new empty mempool","Construct a new instance given a list of peers, a path to …","List of peers to try to connect to for asking headers and …","Waits for a specific incoming Bitcoin message, optionally …","Send a raw Bitcoin message to the peer","","","","Optionally skip initial skip_blocks blocks (default: 0)","Optional socks5 proxy","Optional socks5 proxy credentials","Storage dir to save partially downloaded headers and full …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Wrapper over an Electrum Client that implements the …","Configuration for an ElectrumBlockchain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Request retry count","","","URL of the socks5 proxy server or a Tor service","Stop searching addresses for transactions after finding an …","Request timeout (seconds)","","","","","","","","URL of the Electrum server (such as ElectrumX, Esplora, …","","","Invalid Bitcoin data returned","Structure that implements the logic to sync with Esplora","Configuration for an EsploraBlockchain","Errors that can happen during a sync with EsploraBlockchain","Data type used when fetching transaction history from …","Header hash not found","Header height not found","Invalid Hex data returned","HTTP response error","IO error during ureq response read","No header found in ureq response","Invalid number returned","Transaction not found","Error during ureq HTTP request","Transport error during the ureq HTTP call","","Base URL of the esplora service eg. …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a new instance of the client from a base URL and …","Optional URL of the proxy to use to make requests to the …","","","Stop searching addresses for transactions after finding an …","Socket read timeout.","Socket write timeout.","","","","","","","","","","","","","","","","","","","Set the inner ureq agent.","","","","","","","","","","","Container for the operations","Trait for a database that supports batch operations","Trait for operations that can be batched","Type that contains the configuration","Trait for Database types that can be created given a …","Trait for reading data from a database","Sqlite database stored on filesystem","Runtime-checked database types","Create a new batch container","","","","Read and checks the descriptor checksum for a given …","","Consume and apply a batch of operations","","A rusqlite connection object to the sqlite database","Delete the last derivation index for a keychain.","","Delete the data related to a specific script_pubkey, …","","Delete a raw transaction given its Txid","","Delete a script_pubkey given the keychain and its child …","","Delete the metadata of a transaction and optionally the …","","Delete a LocalUtxo given its OutPoint","","","","","Force changes to be written to disk","","","","Create a new instance given a configuration","","Return the last defivation index for a keychain.","","Fetch the keychain and child number of a given …","","Fetch a raw transaction given its Txid","","Fetch a script_pubkey given the child number of a keychain.","","Fetch the transaction metadata and optionally also the raw …","","Fetch a LocalUtxo given its OutPoint","","Increment the last derivation index for a keychain and …","","","","Return the list of raw transactions","","Return the list of script_pubkeys","","Return the list of transactions metadata","","Return the list of LocalUtxos","","In-memory ephemeral database","Instantiate a new SqliteDatabase instance by creating a …","Path on the local filesystem to store the sqlite file","Store the last derivation index for a given keychain.","","Store a raw transaction","","Store a script_pubkey along with its keychain and child …","","Store the metadata of a transaction","","Store a LocalUtxo","","","","","","Type that contains any of the BatchDatabase::Batch types …","Type that can contain any of the Database types defined by …","Type that can contain any of the database configurations …","In-memory ephemeral database","In-memory ephemeral database","Memory database has no config","Simple key-value embedded database based on sled","Simple key-value embedded database based on sled","Simple key-value embedded database based on sled","Configuration type for a sled::Tree database","Sqlite embedded database using rusqlite","Sqlite embedded database using rusqlite","Sqlite embedded database using rusqlite","Configuration type for a sqlite::SqliteDatabase database","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Main directory of the db","Main directory of the db","","","","","","","","","","","","","","Name of the database tree, a separated namespace for the …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","In-memory ephemeral database","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a new empty database","","","","","","","","","","A raw scriptpubkey (including pay-to-pubkey) under Legacy …","Alias for a Descriptor that contains extended derived keys","Extended DescriptorPublicKey that has been derived","Script descriptor","Alias for a Descriptor that can contain extended keys …","Trait implemented on Descriptors to add a method to …","Alias for the type of maps that represent derivation paths …","Trait for types which can be converted into an …","Alias type for a map of public key to secret key","Legacy ScriptContext To be used as P2SH scripts For …","Top-level script AST type","Pay-to-PubKey-Hash","The ScriptContext for Miniscript. Additional type …","Segwitv0 ScriptContext","Pay-to-ScriptHash(includes nested wsh/wpkh/sorted multi)","Pay-to-Witness-PubKey-Hash","Pay-to-Witness-ScriptHash with Segwitv0 context","Computes the Bitcoin address of the descriptor, if one …","","","Get a reference to the inner AstElem representing the root …","","","","","","","","","","","Enumerates all child nodes of the current AST node (self) …","Depending on script Context, some of the Terminals might …","","","Depending on script Context, some of the script resource …","","Check the consensus + policy(if not disabled) rules that …","Consensus rules at the Miniscript satisfaction time. It is …","","","Policy rules at the Miniscript satisfaction time. It is …","","","Check the consensus + policy(if not disabled) rules …","Depending on ScriptContext, fragments can be malleable. …","","","Check whether the given satisfaction is valid under the …","","","Descriptor checksum","","","","","","","","","","","","","","","","","","","","","","","","","","","Derives all wildcard keys in the descriptor using the …","Get the DescriptorType of Descriptor","","","","","","","","Encode as a Bitcoin script","","","","","","Descriptor errors","Computes the “witness script” of the descriptor, i.e. …","Additional information helpful for extra analysis.","Extract the spending policy","","","","","","","","","","","","","","","","","","Add type information(Type and Extdata) to Miniscript based …","","","Attempt to parse an insane(scripts don’t clear sanity …","Parse an expression tree into a descriptor","Parse an expression tree into a Miniscript. As a general …","","","","","","Returns Vec with cloned version of all public keys from …","Returns Vec of PkPkh entries, representing either public …","Returns Vec with hashes of all public keys from the …","Returns child node with given index, if any","Returns Option::Some with cloned n’th public key from …","Returns Option::Some with hash of n’th public key or …","Returns Option::Some with hash of n’th public key from …","Returns satisfying witness and scriptSig to spend an …","Whether the miniscript contains a combination of timelocks","Whether the miniscript has repeated Pk or Pkh","","","","","","","","","","","","","","","","","Extracts the AstElem representing the root of the …","Convert to wallet descriptor","Whether or not the descriptor has any wildcards","Whether the miniscript is malleable","","Creates a new Iter iterator that will iterate over all …","Creates a new PkIter iterator that will iterate over all …","Creates a new PkPkhIter iterator that will iterate over …","Creates a new PkhIter iterator that will iterate over all …","","","Lifting corresponds conversion of miniscript into Policy […","Depending on script context, the size of a satifaction …","","","Maximum size, in bytes, of a satisfying witness. For …","Computes an upper bound on the weight of a satisfying …","Maximum number of witness elements used to satisfy the …","","Construct a new derived key","Create a new bare descriptor from witness script Errors …","Create a new pk descriptor","Create a new PkH descriptor","Create a new sh for a given redeem script Errors when …","Create a new sh sortedmulti descriptor with threshold k …","Create a new sh wrapped wpkh from Pk. Errors when …","Create a new sh wrapped wsh descriptor with witness script …","Create a new sh wrapped wsh sortedmulti descriptor from …","Create a new Wpkh descriptor Will return Err if …","Create a new wsh descriptor from witness script Errors …","Create a new wsh sorted multi descriptor Errors when …","A node in the Abstract Syntax Tree(","Other top level checks that are context specific","Attempt to parse a Script into Miniscript representation. …","Parse a descriptor that may contain secret keys","Attempt to parse an insane(scripts don’t clear sanity …","","","","","","Descriptor policy","Whether all spend paths of miniscript require a signature","Whether the descriptor is safe Checks whether all the …","Check whether the underlying Miniscript is safe under the …","Attempt to produce non-malleable satisfying witness for the","Attempt to produce a malleable satisfying witness for the …","Get the scriptCode of a transaction output.","Computes the scriptpubkey of the descriptor","Size, in bytes of the script-pubkey. If this Miniscript is …","","","","Descriptor templates","","","","","","","","","","","Serialize a descriptor to string with its secret keys","Check top level consensus rules.","Check whether the top-level is type B","Convert a descriptor using abstract keys to one using …","This will panic if translatefpk returns an uncompressed …","","","","","","","","","","","The correctness and malleability type information for the …","","","","","","Computes the scriptSig that will be in place for an …","","","","","","Whether the miniscript can exceed the resource …","","","","","","Compute the checksum of a descriptor","Error during base58 decoding","BIP32 error","The descriptor contains multiple keys with the same BIP32 …","Errors related to the parsing and usage of descriptors","The descriptor contains hardened derivation steps on …","Hex decoding error","Invalid character found in the descriptor checksum","The provided descriptor doesn’t match its checksum","Invalid HD Key path, such as having a wildcard but a …","Error thrown while working with keys","Miniscript error","Key-related error","Error while extracting and manipulating policies","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Absolute timeclock timestamp","Can not add to an item that is Satisfaction::None or …","Can not add to an item that is …","Options to build the satisfaction field in the policy","Can satisfy the policy item","An extra condition that must be satisfied but that is out …","Type for a map of sets of Condition items keyed by each set…","Type for a map of folded sets of Condition items keyed by …","SHA256 then RIPEMD160 preimage hash","Double SHA256 preimage hash","Incompatible conditions (not currently used)","Index out of range for an item to satisfy a …","Can not merge CSV or timelock values unless both are less …","Multi-signature public keys with threshold count","Cannot satisfy or contribute to the policy item","Don’t generate satisfaction field","Not enough items are selected to satisfy a …","Only a partial satisfaction of some kind of threshold …","Can reach the threshold of some kind of threshold policy","Raw public key or extended key fingerprint","Descriptor spending policy","Errors that can happen while extracting and manipulating …","Analyze the given PSBT to check for existing signatures","Like Psbt variant and also check for expired timelocks","Relative timelock locktime","RIPEMD160 preimage hash","Represent if and how much a policy item is satisfied by …","An item that needs to be satisfied","SHA256 preimage hash","Signature for a raw public key","Signature for an extended key fingerprint","Threshold items with threshold count","","","","","","","","","","","","","","","","","","","","","","","","","","","","","How the wallet’s descriptor can satisfy this policy node","Optional CheckSequenceVerify condition","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return the conditions that are set by the spending policy …","","","Returns a unique id for the SatisfiableItem","Identifier for this policy node","","","","","","","","","","","","","","","Returns whether the SatisfiableItem is a leaf item","Returns whether the Satisfaction is a leaf item","Returns true if there are no extra conditions to verify","Type of this policy node","","","","Return whether or not a specific path in the policy tree …","How much a given PSBT already satisfies this policy node …","","","","","","Optional timelock condition","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Current blockchain height","The highest confirmation height between the inputs CSV …","Given PSBT","","","Extra conditions that also need to be satisfied","Extra conditions that also need to be satisfied","Extra conditions that also need to be satisfied","The items that can be satisfied by the descriptor or are …","The items that can be satisfied by the descriptor","Threshold","Threshold","Total number of items","Total number of items","Whether the items are sorted in lexicographic order (used …","Whether the items are sorted in lexicographic order (used …","","","The digest value","The digest value","The digest value","The digest value","The policy items","The raw public key or extended key fingerprint","The required threshold count","The required threshold count","The timestamp value","The locktime value","","","","","","","","","","","","","","","","","","","BIP44 template. Expands to pkh(key/44'/0'/0'/{0,1}/*)","BIP44 public template. Expands to pkh(key/{0,1}/*)","BIP49 template. Expands to sh(wpkh(key/49'/0'/0'/{0,1}/*))","BIP49 public template. Expands to sh(wpkh(key/{0,1}/*))","BIP84 template. Expands to wpkh(key/84'/0'/0'/{0,1}/*)","BIP84 public template. Expands to wpkh(key/{0,1}/*)","Trait for descriptor templates that can be built into a …","Type alias for the return type of DescriptorTemplate, …","P2PKH template. Expands to a descriptor pkh(key)","P2WPKH template. Expands to a descriptor wpkh(key)","P2WPKH-P2SH template. Expands to a descriptor sh(wpkh(key))","","","","","","","","","","","","","","","","","","","Build the complete descriptor","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","BIP32 error","Trait for keys that can be derived.","Container for public or secret keys","The MiniscriptKey corresponding to Descriptors. This can …","A Secret Key that can be either a single key or an Xprv","A Single Descriptor Secret Key with optional origin …","A Single Descriptor Key with optional origin information","Type specifying the amount of entropy required e.g. [u8;32]","Returned error in case of failure","Trait that adds extra useful methods to ScriptContexts","Enum for extended keys that can be either xprv or xpub","Trait that allows generating a key with the default options","Trait for keys that can be generated","Output of a GeneratableKey key generation","Trait for objects that can be turned into a public or …","The key has an invalid checksum","The key is not valid for the given network","The key cannot exist in the given script context","Errors thrown while working with keys","Alias type for a map of public key to secret key","Legacy scripts","Custom error message","Miniscript error","Extra options required by the generate_with_entropy","A private extended key, aka an xprv","Options for generating a PrivateKey","A public extended key, aka an xpub","The ScriptContext for Miniscript. Additional type …","Enum representation of the known valid ScriptContexts","Segwitv0 scripts","Single Secret Key","Single Public Key","Contents of a “sortedmulti” descriptor","Set of valid networks for a key","Xprv","Xpub","Create a set containing mainnet, testnet and regtest","Returns the ScriptContext as a ScriptContextEnum","","Return the public version of this key, by applying either …","BIP-0039","","","","","","","","","","","","","","","","","","","","","","","Depending on script Context, some of the Terminals might …","Depending on script Context, some of the Terminals might …","Depending on script Context, some of the script resource …","Depending on script Context, some of the script resource …","Check the consensus + policy(if not disabled) rules that …","Check the consensus + policy(if not disabled) rules that …","Consensus rules at the Miniscript satisfaction time. It is …","Consensus rules at the Miniscript satisfaction time. It is …","Policy rules at the Miniscript satisfaction time. It is …","Policy rules at the Miniscript satisfaction time. It is …","Check the consensus + policy(if not disabled) rules …","Check the consensus + policy(if not disabled) rules …","Depending on ScriptContext, fragments can be malleable. …","Check whether the given satisfaction is valid under the …","Check whether the given satisfaction is valid under the …","","","","","","","","","","","","","","Whether the generated key should be “compressed” or not","","","","","","","","","","","","","","","","","","","","","","","","","If this public key has a wildcard, replace it by the given …","Computes the public key corresponding to this descriptor …","","","","","","","","","","","","Encode as a Bitcoin script","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create an instance given a public key and a set of valid …","Create an instance given a secret key and a set of valid …","","","Parse an expression tree into a SortedMultiVec","Full path, from the master key","Generate a key given the options with a random entropy","Generate a key with the default options and a random …","Generate a key given the extra options and the entropy","Generate a key with the default options and a given entropy","","","","Return whether or not the key contains the private data","","","","","","","","","","","","","","","","","","","","","","","","","","Turn the key into a DescriptorKey within the requested …","Consume self and turn it into a DescriptorKey by adding …","","","","","","Consume self and turn it into an ExtendedKey","","","Consumes self and returns the key","Transform the ExtendedKey into an ExtendedPrivKey for the …","Transform the ExtendedKey into an ExtendedPubKey for the …","Whether or not the key has a wildcards","Returns whether the script context is Legacy","Returns whether the script context is …","Returns whether the script context is Segwitv0","Returns whether the script context is …","","signatures required","The key","The key","","Create a set only containing mainnet","The fingerprint of the master key associated with this key","Depending on script context, the size of a satifaction …","Maximum size, in bytes, of a satisfying witness. In …","Maximum number of witness elements used to satisfy the …","Compute the intersection of two sets","","","","Create a new instance of SortedMultiVec given a list of …","Origin information","Origin information","Other top level checks that are context specific","Other top level checks that are context specific","Override the computed set of valid networks","","","","public keys inside sorted Multi","utility function to sanity a sorted multi vec","Attempt to produce a satisfying witness for the witness …","Size, in bytes of the script-pubkey. If this Miniscript is …","Create Terminal::Multi containing sorted pubkeys","Create a set containing testnet and regtest","","","","","","","","","","","Check top level consensus rules.","Check top level consensus rules.","Check whether the top-level is type B","Check whether the top-level is type B","This will panic if translatefpk returns an uncompressed …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The language determines which words will be used in a …","The primary type in this crate, most tasks require …","Determines the number of words that will be present in a …","Type for a BIP39 mnemonic with an optional passphrase","The secret value used to derive HD wallet addresses from a …","","","","","","","Get the seed value as a byte slice","","","","","","","","","","","","","Return the number of checksum bits","","","","","","","","","","","","","","","","","","","","","","","Get the original entropy value of the mnemonic phrase as a …","Return the number of entropy bits","","","","","","","","","","","","Get a MnemonicType for a mnemonic phrase representing the …","Get a MnemonicType for an existing mnemonic phrase","Get a MnemonicType for a mnemonic phrase with a specific …","","","","","Create a Mnemonic from pre-generated entropy","Construct a word list from its language code. Returns None …","Create a Mnemonic from an existing mnemonic phrase","","","","","","","","","","","","","","Consume the Mnemonic and return the phrase as a String.","Get the Language","Generates a new Mnemonic","Generates the seed from the Mnemonic and the password.","Get the mnemonic phrase as a string reference.","Outputs the hash in hexadecimal form","Outputs the hash in hexadecimal form","","","","","","","Return the number of entropy+checksum bits","","","","","","","","","","","","","Validate a mnemonic phrase","","","","","Return the number of words","Get the word list for this language","Get a WordMap that allows word -> index lookups in the …","","The address index selection strategy to use to derived an …","A derived address and the index it was found at For …","Trait to check if a value is below the dust limit","Return the address for the current descriptor index if it …","Return a new address after incrementing the current …","Return the address for a specific descriptor index. Does …","Return the address for a specific descriptor index and …","A Bitcoin wallet","Add an address validator","Add an external signer","Address","Address validation callbacks","","","","","","","Broadcast a transaction to the network","Bump the fee of a transaction previously created with this …","Start building a transaction.","Return a reference to the internal blockchain client","Coin selection","","","","","","","","","","","","Wallet export","Try to finalize a PSBT","","","","","","","","Return a derived address using the external descriptor, …","Return the balance, meaning the sum of this wallet’s …","Returns the descriptor used to create adddresses for a …","Return a fake wallet that appears to be funded for testing.","get the corresponding PSBT Input for a LocalUtxo","Return a single transactions made and received by the …","Returns the UTXO owned by this wallet corresponding to …","Child index of this address","","","","","","","Check whether or not a value is below dust limit","Return whether or not a script is part of this wallet …","Return the list of transactions made and received by the …","Return the list of unspent outputs of this wallet","","Get the Bitcoin network the wallet is using.","Create a new “online” wallet","Create a new “offline” wallet","Return the spending policies for the wallet’s descriptor","Return the “public” version of the wallet’s …","Return the secp256k1 context used for all signing …","Sign a transaction with all the wallet’s signers, in the …","Generalized signers","Sync the internal database with the blockchain","Cross-platform time","","","","","","","","Transaction builder","","","","","","","","","Trait to build address validators","Errors that can be returned to fail the validation of an …","Network connection error","Invalid script","A custom error message","Network request timeout error","User rejected the address","","","","","","","","","","","","","","","","","","","","","Validate or inspect an address","","","Branch and bound coin selection","Trait for generalized coin selection algorithms","Result of a successful coin selection","Default coin selection algorithm used by TxBuilder if not …","Simple and dumb coin selection","","","","","","","","","Perform the coin selection","","","","","","","","","","","","","","Total fee amount in satoshi","","","","","","","","","","","","","The total value of the inputs selected from the local …","Create new instance with target size for change output","List of outputs selected for use as inputs","The total value of the inputs selected.","","","","","","","","","","","","","","Structure that contains the export of a wallet","Earliest block to rescan when looking for the wallet’s …","","","Return the internal descriptor, if present","","","Return the external descriptor","","","Export a wallet","","","","","","Arbitrary label for the wallet","","","","","","","","Dummy identifier","The fingerprint of a BIP32 extended key","Input index is out of range","The private key in use has the right fingerprint but …","The non_witness_utxo specified is invalid","The fingerprint and derivation path are missing from the …","The private key is missing for the required public key","The non_witness_utxo field of the transaction is required …","The witness_script field of the transaction is requied to …","The witness_utxo field of the transaction is required to …","The psbt contains a non-SIGHASH_ALL sighash in one of its …","Bitcoin HASH160 (RIPEMD160 after SHA256) hash of an ECDSA …","Options for a software signer","Trait for signers","Signing error","Identifier of a signer in the SignersContainers. Used as a …","Defines the order in which signers are called","Container for multiple signers","The user canceled the operation","Adds an external signer to the container for the specified …","Whether the signer should use the sighash_type set in the …","","Create a map of public keys to secret keys","Whether the wallet should assume a specific height has …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return the secret key for the signer","","","","","","","","","Finds the signer with lowest ordering for a given id in …","","","","","","","","","","","","","","","","","Return the SignerId for this signer","Returns the list of identifiers of all the signers in the …","","","","","","","","","","","","","Default constructor","","","Removes a signer from the container and returns it","Sign a PSBT","Return whether or not the signer signs the whole …","Returns the list of signers in the container, sorted by …","","","","","","","Whether the signer should trust the witness_utxo, if the …","","","","","","","","","","","","","","","","","","","","","","","","Return the current timestamp in seconds","BIP69 / Lexicographic","Marker type to indicate the TxBuilder is being used to …","Use both change and non-change outputs (default)","Only use non-change outputs (see …","Policy regarding the use of change outputs when creating a …","Marker type to indicate the TxBuilder is being used to …","Only use change outputs (see TxBuilder::only_spend_change)","Randomized (default)","A transaction builder","Context in which the TxBuilder is valid","Ordering of the transaction’s inputs and outputs","Unchanged","Add a foreign UTXO i.e. a UTXO not owned by this wallet.","Fill-in the PSBT_GLOBAL_XPUB field with the extended keys …","Add a recipient to the internal list","Add a utxo to the internal list of unspendable utxos","Add a utxo to the internal list of utxos that must be spent","Add the list of outpoints to the internal list of UTXOs …","Explicitly tells the wallet that it is allowed to reduce …","","","","","","","","","","","Set a specific ChangeSpendPolicy. See …","","","","","","","","","","","","","Choose the coin selection algorithm","","","","","","","","","","","","","","","Do not spend change outputs","Sets the address to drain excess coins to.","Spend all the available inputs. This respects filters like …","","","","","","Enable signaling RBF","Enable signaling RBF with a specific nSequence value","","","Set an absolute fee","Set a custom fee rate","Finish the building the transaction.","","","","","","","","","","","","","","","Fill-in the psbt::Output::redeem_script and …","","","","","","","","","","","Only spend utxos added by add_utxo.","Use a specific nLockTime while creating the transaction","Only spend change outputs","Only Fill-in the psbt::Input::witness_utxo field when …","Choose the ordering for inputs and outputs of the …","","","Set the policy path to use while creating the transaction …","Replace the recipients already added with a new list","Sign with a specific sig hash","Sort transaction inputs and outputs by TxOrdering variant","","","","","","","","","","","","","","","","","","","","","Replace the internal list of unspendable utxos with a new …","Build a transaction with a specific version","","","","",""],"i":[1,1,1,1,1,1,0,1,1,1,0,1,2,0,1,1,1,3,1,1,1,2,1,1,1,1,1,1,1,1,0,3,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,2,1,2,4,2,0,1,2,4,5,6,3,7,8,1,2,4,5,6,3,7,8,2,2,4,5,6,3,7,8,2,4,5,6,3,7,8,7,0,4,7,8,4,1,2,4,5,6,3,7,8,1,2,4,5,6,3,7,8,0,0,2,5,7,8,1,2,4,5,6,3,7,8,2,4,5,6,3,7,8,7,4,4,1,1,2,4,5,6,3,7,8,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,4,5,6,3,7,8,4,4,4,4,2,5,2,5,8,1,2,4,5,6,3,7,8,1,2,4,5,6,3,7,8,9,9,10,11,5,0,4,5,6,3,7,8,8,3,5,4,7,6,7,2,5,7,8,4,8,2,4,5,6,3,7,8,1,7,1,2,4,5,6,3,7,8,1,2,4,5,6,3,7,8,7,3,5,1,2,4,5,6,3,7,8,6,12,7,0,1,2,4,5,6,3,7,8,0,2,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,38,39,40,41,42,43,43,44,0,0,45,0,0,44,44,0,0,0,0,0,44,46,47,44,46,47,48,44,46,47,44,46,47,0,44,46,47,44,46,47,44,46,47,0,44,0,48,44,44,46,47,45,48,44,48,48,44,44,46,47,44,46,47,0,0,0,48,48,44,46,47,44,46,47,44,46,47,44,46,47,49,46,47,44,46,47,0,0,50,51,50,51,50,51,50,51,50,51,50,51,51,50,51,50,51,51,50,51,51,50,51,50,50,50,50,51,51,51,51,50,50,50,50,50,51,50,51,51,51,50,50,51,50,51,50,51,50,51,50,51,52,53,54,55,56,57,58,0,0,0,0,58,58,58,58,58,58,58,58,0,58,58,58,0,58,58,58,59,60,58,59,61,62,60,63,58,59,61,62,60,63,58,62,60,63,60,63,61,61,59,59,61,62,60,63,58,59,61,62,60,63,58,60,63,59,61,62,60,63,58,60,63,62,59,61,62,60,63,58,58,59,61,62,60,63,58,58,58,58,58,58,62,62,62,61,61,59,62,61,59,59,61,62,60,63,58,59,61,62,60,63,58,61,59,60,63,63,59,62,63,61,61,60,63,62,63,60,60,63,60,63,58,59,61,62,60,63,58,59,61,62,60,63,58,59,61,62,60,63,58,59,61,62,60,63,58,64,65,66,67,68,0,0,69,70,69,70,69,70,70,69,70,69,70,70,69,70,70,69,70,69,69,70,69,69,69,69,69,70,69,70,70,70,70,69,70,70,70,70,69,70,69,70,69,70,70,69,70,71,0,0,0,0,71,71,71,71,71,71,71,71,71,71,71,72,73,72,74,71,73,72,74,71,73,72,72,73,72,74,71,73,72,74,71,72,74,73,72,74,71,72,73,73,72,71,71,73,72,74,71,71,71,71,71,71,71,73,73,73,73,73,72,74,71,73,72,74,71,72,73,72,72,73,72,72,72,72,71,73,72,74,71,73,72,74,71,73,72,74,71,73,72,74,71,73,75,76,77,78,79,80,81,82,83,84,85,0,0,86,0,0,0,0,85,87,87,87,88,87,85,87,87,89,87,89,87,89,87,89,87,89,87,89,87,87,87,87,88,87,87,87,86,87,88,87,88,87,88,87,88,87,88,87,88,87,88,87,87,87,88,87,88,87,88,87,88,87,0,87,87,89,87,89,87,89,87,89,87,89,87,87,87,87,87,0,0,0,90,91,92,90,91,92,0,90,91,92,0,91,90,91,93,94,92,90,91,93,94,92,91,91,90,91,90,91,90,91,90,91,90,91,90,91,90,91,93,94,92,90,91,93,94,92,93,94,92,90,91,93,94,92,91,91,93,94,92,90,90,90,90,91,91,91,91,93,94,92,92,92,92,91,91,91,91,91,91,91,91,90,91,93,94,92,90,91,93,94,92,91,91,91,91,93,94,93,94,92,90,91,90,91,90,91,90,91,90,91,93,90,91,93,94,92,90,91,93,94,92,90,91,93,94,92,90,91,93,94,92,95,96,97,98,99,100,101,102,103,0,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,105,0,0,0,0,0,0,0,0,0,0,105,0,0,105,105,105,105,106,107,108,109,105,106,107,108,109,105,106,107,108,108,110,106,107,110,107,110,110,106,107,110,106,107,110,110,106,107,110,106,107,0,109,105,106,107,108,109,105,106,107,108,109,105,106,107,108,109,109,105,106,107,108,109,105,106,107,108,105,105,105,108,109,105,106,107,108,108,109,105,106,107,108,0,105,108,111,105,108,109,109,105,105,106,107,108,108,105,108,109,105,106,107,108,108,105,108,108,105,108,109,105,106,107,108,108,108,108,108,108,108,108,105,108,108,109,105,106,107,108,109,109,105,106,107,108,109,105,106,107,108,108,112,105,108,109,108,108,108,108,105,108,108,110,106,107,108,105,108,105,109,105,105,105,105,105,105,105,105,105,105,105,108,110,108,105,108,109,105,106,107,108,0,108,105,108,108,108,105,105,108,105,108,109,0,109,105,106,107,108,109,109,109,105,108,105,110,110,105,108,109,105,106,107,108,109,105,106,107,108,108,109,105,106,107,108,105,109,105,106,107,108,108,113,114,115,116,117,0,118,118,118,0,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,119,120,121,122,123,124,125,126,127,128,128,0,129,0,0,0,127,127,128,128,128,127,129,130,128,129,129,0,0,0,130,130,127,127,0,0,127,127,127,127,128,131,127,129,132,133,128,130,131,127,129,132,133,128,130,131,127,129,132,133,130,131,127,129,132,133,130,133,132,133,131,133,131,127,129,132,133,128,130,131,127,129,132,133,128,130,131,127,129,132,133,128,130,133,128,131,127,129,132,133,128,128,130,131,127,129,129,132,132,133,128,130,132,133,133,127,132,131,127,129,132,133,128,130,131,127,129,132,133,128,130,127,129,133,132,133,128,133,132,132,131,127,129,132,133,133,131,127,129,132,133,130,128,131,127,129,132,133,128,130,131,127,129,132,133,128,130,131,127,129,132,133,128,130,131,127,129,132,133,128,130,134,135,135,135,136,137,138,139,140,139,140,139,140,139,140,139,140,141,142,143,144,145,146,147,148,148,147,149,150,151,152,153,154,155,156,157,158,159,154,155,156,157,158,159,155,157,159,0,0,0,0,0,0,0,0,0,0,0,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,160,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,161,0,0,0,0,0,0,162,162,0,0,0,0,0,0,161,161,161,0,0,163,161,161,162,164,0,164,0,0,163,165,166,0,0,165,166,0,167,161,165,0,164,168,169,163,170,161,171,166,172,173,165,164,168,169,163,170,161,171,166,172,173,165,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,163,170,171,166,172,163,170,171,166,172,171,166,172,170,170,164,168,168,169,163,170,161,171,166,172,173,165,164,168,169,163,170,161,171,166,172,173,165,166,166,164,168,169,163,170,161,171,166,172,173,165,171,163,171,166,172,169,163,170,161,161,171,171,166,166,172,173,165,165,171,164,164,164,168,169,163,170,161,161,161,171,166,172,173,165,169,169,166,165,171,166,162,174,162,174,171,166,172,164,171,166,172,164,168,169,163,170,161,171,166,172,173,165,164,168,169,163,170,161,171,166,172,173,165,175,176,168,168,169,166,165,176,164,168,168,164,164,166,167,163,167,163,166,171,172,173,171,0,166,110,171,171,0,171,166,172,171,172,173,110,110,169,171,166,172,171,171,171,171,171,0,163,170,171,166,172,166,161,171,166,165,110,110,110,110,171,164,168,169,163,170,161,171,166,172,173,165,164,168,169,163,170,161,171,166,172,173,165,164,168,169,163,170,161,171,166,172,173,165,164,168,169,163,170,161,171,166,172,173,165,177,178,179,180,181,182,183,184,185,186,186,186,186,186,186,186,0,0,0,0,0,186,187,187,187,187,187,188,189,188,188,186,189,187,188,186,189,187,188,188,187,186,189,187,188,186,189,187,188,186,187,186,189,187,188,186,189,187,188,186,189,187,188,189,187,186,186,189,189,189,189,187,187,188,188,188,187,187,187,186,189,187,188,189,186,189,189,186,189,187,188,186,189,187,188,189,188,189,188,189,189,189,188,189,189,188,186,189,187,188,189,187,187,186,189,187,188,186,189,187,188,186,189,187,188,189,186,189,187,188,187,186,186,188,0,0,0,190,190,190,190,0,191,191,192,0,191,190,192,191,190,192,191,191,191,191,0,191,190,192,192,191,190,192,191,190,192,192,0,191,191,190,192,192,191,190,192,191,191,191,0,191,191,191,192,191,190,192,191,190,192,193,191,191,191,192,191,191,191,191,191,191,191,0,191,0,192,191,190,192,191,190,192,0,191,190,192,191,190,192,194,195,0,0,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,197,196,198,0,0,0,0,0,199,200,201,199,200,201,200,200,202,200,201,200,201,199,200,201,199,200,201,199,200,201,199,199,200,201,199,200,201,199,200,201,199,200,201,199,201,199,199,200,199,200,201,199,200,201,199,200,201,199,200,201,0,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,204,205,205,206,206,206,206,206,206,206,206,206,205,0,0,0,0,0,0,206,207,208,206,207,208,205,206,204,207,208,205,206,204,207,208,205,206,204,207,208,205,206,204,207,208,205,204,204,207,208,205,206,204,207,208,205,206,204,207,208,209,205,206,204,207,208,205,206,204,207,205,206,206,204,207,208,205,205,205,206,204,207,207,208,205,205,209,207,205,206,204,207,208,205,206,204,207,208,205,204,207,205,204,207,209,209,207,205,206,204,207,208,206,208,205,206,204,207,208,205,206,204,207,208,205,206,204,207,208,205,206,204,207,208,210,211,212,0,213,0,214,214,0,0,214,213,0,0,0,213,215,215,215,215,215,215,215,216,217,215,213,214,216,217,215,213,214,215,216,217,215,213,214,216,217,215,213,214,213,214,215,216,217,213,214,216,217,215,213,214,216,217,215,213,214,215,215,215,216,217,215,213,214,215,215,213,214,215,215,215,216,217,215,213,214,216,217,215,213,214,213,214,213,214,215,216,217,215,213,214,216,217,215,213,214,215,215,215,215,215,213,214,215,215,215,213,216,217,215,213,214,216,217,215,213,214,216,217,215,213,214,216,217,215,213,214,215,215,216,217,215,213,214],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["u8",15]],[[],["fail",8]],[[]],[[],["f32",15]],[[],["usize",15]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[["vec",3,["u5","global"]],["result",4,["vec"]]]],[[],["keychainkind",4]],[[],["feerate",3]],[[],["localutxo",3]],[[],["weightedutxo",3]],[[],["utxo",4]],[[],["transactiondetails",3]],[[],["confirmationtime",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,[[]],[[],["transactiondetails",3]],[[],["confirmationtime",3]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["keychainkind",4]],["bool",15]],[[["feerate",3]],["bool",15]],[[["localutxo",3]],["bool",15]],[[["weightedutxo",3]],["bool",15]],[[["utxo",4]],["bool",15]],[[["transactiondetails",3]],["bool",15]],[[["confirmationtime",3]],["bool",15]],null,[[["usize",15]],["u64",15]],[[["usize",15]],["u64",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],null,[[["signererror",4]]],[[]],[[["error",4]]],[[["compactfilterserror",4]]],[[["policyerror",4]]],[[["error",4]]],[[["error",4]]],[[["error",3]]],[[["error",4]]],[[["error",4]]],[[["error",4]]],[[["error",4]]],[[["keyerror",4]],["error",4]],[[["addressvalidatorerror",4]]],[[["psbtparseerror",4]]],[[["error",4]]],[[["error",4]]],[[["error",4]]],[[["esploraerror",4]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["f32",15]]],[[["f32",15]]],[[["u64",15],["usize",15]],["feerate",3]],[[["u64",15],["usize",15]],["feerate",3]],[[],["u64",15]],[[],["u64",15]],[[]],[[]],null,[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["option",4,["keysource"]],["keysource",6],["derivationpath",3]],[["descriptorkey",4],["keyerror",4],["result",4,["descriptorkey","keyerror"]]]],[[],[["result",4,["extendedkey","keyerror"]],["extendedkey",4],["keyerror",4]]],[[["network",4],["secp256k1",3]],[["result",4,["descriptorerror"]],["descriptorerror",4]]],[[["network",4],["secp256k1",3]],[["result",4,["descriptorerror"]],["descriptorerror",4]]],null,null,[[["feerate",3]],["bool",15]],[[["localutxo",3]],["bool",15]],[[["weightedutxo",3]],["bool",15]],[[["utxo",4]],["bool",15]],[[["transactiondetails",3]],["bool",15]],[[["confirmationtime",3]],["bool",15]],[[["u64",15],["u32",15],["option",4,["u64"]],["option",4,["u32"]]],["option",4]],[[],["outpoint",3]],null,[[["feerate",3]],[["option",4,["ordering"]],["ordering",4]]],null,null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["feerate",3]]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[],["txout",3]],null,[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,[[],["usize",15]],null,[[],["str",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[],["result",4]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[],["capability",4]],[[],["noopprogress",3]],[[],["logprogress",3]],[[]],[[]],[[]],null,[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],null,[[["capability",4]],["bool",15]],null,[[["usize",15]],[["result",4,["feerate","error"]],["error",4],["feerate",3]]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[],[["result",4,["error"]],["error",4]]],[[],[["hashset",3,["capability"]],["capability",4]]],[[],["u64",15]],[[],[["error",4],["result",4,["u32","error"]],["u32",15]]],[[["txid",3]],[["result",4,["option","error"]],["option",4,["transaction"]],["error",4]]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[],["logprogress",3]],[[],["noopprogress",3]],[[]],[[["progress",8]],[["result",4,["error"]],["error",4]]],[[["progress",8]],[["result",4,["error"]],["error",4]]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[["f32",15],["option",4,["string"]],["string",3]],[["result",4,["error"]],["error",4]]],[[["f32",15],["option",4,["string"]],["string",3]],[["result",4,["error"]],["error",4]]],[[["f32",15],["option",4,["string"]],["string",3]],[["result",4,["error"]],["error",4]]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[],["anyblockchainconfig",4]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["anyblockchainconfig",4]],["bool",15]],[[["usize",15]],[["result",4,["feerate","error"]],["error",4],["feerate",3]]],[[["formatter",3]],["result",6]],[[["compactfiltersblockchain",3]]],[[]],[[["electrumblockchain",3]]],[[["esplorablockchain",3]]],[[["electrumblockchainconfig",3]]],[[]],[[["compactfiltersblockchainconfig",3]]],[[["esplorablockchainconfig",3]]],[[],[["result",4,["error"]],["error",4]]],[[],[["hashset",3,["capability"]],["capability",4]]],[[],[["error",4],["result",4,["u32","error"]],["u32",15]]],[[["txid",3]],[["result",4,["option","error"]],["option",4,["transaction"]],["error",4]]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[["anyblockchainconfig",4]],["bool",15]],[[],["result",4]],[[["progress",8]],[["result",4,["error"]],["error",4]]],[[["progress",8]],[["result",4,["error"]],["error",4]]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["transaction",3]]],null,[[],["fail",8]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[],["bitcoinpeerconfig",3]],[[],["compactfiltersblockchainconfig",3]],[[]],[[]],[[["network",4],["tosocketaddrs",8],["arc",3,["mempool"]],["mempool",3]],[["result",4,["compactfilterserror"]],["compactfilterserror",4]]],[[["option",4],["tosocketaddrs",8],["network",4],["arc",3,["mempool"]],["totargetaddr",8],["mempool",3]],[["result",4,["compactfilterserror"]],["compactfilterserror",4]]],[[],["mempool",3]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["bitcoinpeerconfig",3]],["bool",15]],[[["compactfiltersblockchainconfig",3]],["bool",15]],[[["usize",15]],[["result",4,["feerate","error"]],["error",4],["feerate",3]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[["error",4]]],[[["error",4]]],[[["systemtimeerror",3]]],[[]],[[["error",3]]],[[["error",3]]],[[],[["result",4,["error"]],["error",4]]],[[],[["hashset",3,["capability"]],["capability",4]]],[[],[["error",4],["result",4,["u32","error"]],["u32",15]]],[[],[["arc",3,["mempool"]],["mempool",3]]],[[],["network",4]],[[["inventory",4]],[["option",4,["transaction"]],["transaction",3]]],[[["txid",3]],[["result",4,["option","error"]],["option",4,["transaction"]],["error",4]]],[[],["versionmessage",3]],[[["txid",3]],["bool",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],[["vec",3,["transaction"]],["transaction",3]]],[[["bitcoinpeerconfig",3]],["bool",15]],[[["compactfiltersblockchainconfig",3]],["bool",15]],null,[[]],[[["usize",15],["option",4,["usize"]],["path",3],["peer",3],["asref",8,["path"]],["vec",3,["peer"]]],[["result",4,["compactfilterserror"]],["compactfilterserror",4]]],null,[[["option",4,["duration"]],["str",15],["duration",3]],[["option",4,["networkmessage"]],["compactfilterserror",4],["result",4,["option","compactfilterserror"]]]],[[["networkmessage",4]],[["result",4,["compactfilterserror"]],["compactfilterserror",4]]],[[],["result",4]],[[],["result",4]],[[["progress",8]],[["result",4,["error"]],["error",4]]],null,null,null,null,[[]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[],["electrumblockchainconfig",3]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["electrumblockchainconfig",3]],["bool",15]],[[["usize",15]],[["result",4,["feerate","error"]],["error",4],["feerate",3]]],[[["formatter",3]],["result",6]],[[["client",3]]],[[]],[[]],[[],[["result",4,["error"]],["error",4]]],[[],[["hashset",3,["capability"]],["capability",4]]],[[],[["error",4],["result",4,["u32","error"]],["u32",15]]],[[["txid",3]],[["result",4,["option","error"]],["option",4,["transaction"]],["error",4]]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[["electrumblockchainconfig",3]],["bool",15]],null,[[],["result",4]],[[["progress",8]],[["result",4,["error"]],["error",4]]],null,null,null,[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["fail",8]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[],["esplorablockchainconfig",3]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["esplorablockchainconfig",3]],["bool",15]],[[["usize",15]],[["result",4,["feerate","error"]],["error",4],["feerate",3]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[["error",4]]],[[["error",4]]],[[]],[[["error",4]]],[[["parseinterror",3]]],[[["error",3]]],[[["transport",3]]],[[],[["result",4,["error"]],["error",4]]],[[],[["hashset",3,["capability"]],["capability",4]]],[[],[["error",4],["result",4,["u32","error"]],["u32",15]]],[[["txid",3]],[["result",4,["option","error"]],["option",4,["transaction"]],["error",4]]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[["esplorablockchainconfig",3]],["bool",15]],[[["str",15],["usize",15]]],null,[[],["result",4]],[[["progress",8]],[["result",4,["error"]],["error",4]]],null,null,null,[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[["agent",3]]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[["asref",8],["keychainkind",4]],[["result",4,["error"]],["error",4]]],[[["asref",8],["keychainkind",4]],[["result",4,["error"]],["error",4]]],[[],[["result",4,["error"]],["error",4]]],[[],[["result",4,["error"]],["error",4]]],null,[[["keychainkind",4]],[["result",4,["option","error"]],["option",4,["u32"]],["error",4]]],[[["keychainkind",4]],[["result",4,["option","error"]],["option",4,["u32"]],["error",4]]],[[["script",3]],[["result",4,["option","error"]],["option",4],["error",4]]],[[["script",3]],[["result",4,["option","error"]],["option",4],["error",4]]],[[["txid",3]],[["result",4,["option","error"]],["option",4,["transaction"]],["error",4]]],[[["txid",3]],[["result",4,["option","error"]],["option",4,["transaction"]],["error",4]]],[[["u32",15],["keychainkind",4]],[["error",4],["result",4,["option","error"]],["option",4,["script"]]]],[[["u32",15],["keychainkind",4]],[["error",4],["result",4,["option","error"]],["option",4,["script"]]]],[[["bool",15],["txid",3]],[["option",4,["transactiondetails"]],["error",4],["result",4,["option","error"]]]],[[["bool",15],["txid",3]],[["option",4,["transactiondetails"]],["error",4],["result",4,["option","error"]]]],[[["outpoint",3]],[["result",4,["option","error"]],["option",4,["localutxo"]],["error",4]]],[[["outpoint",3]],[["result",4,["option","error"]],["option",4,["localutxo"]],["error",4]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],[["result",4,["error"]],["error",4]]],[[],[["result",4,["error"]],["error",4]]],[[["formatter",3]],["result",6]],[[]],[[],[["result",4,["error"]],["error",4]]],[[],[["result",4,["error"]],["error",4]]],[[["keychainkind",4]],[["result",4,["option","error"]],["option",4,["u32"]],["error",4]]],[[["keychainkind",4]],[["result",4,["option","error"]],["option",4,["u32"]],["error",4]]],[[["script",3]],[["result",4,["option","error"]],["option",4],["error",4]]],[[["script",3]],[["result",4,["option","error"]],["option",4],["error",4]]],[[["txid",3]],[["result",4,["option","error"]],["option",4,["transaction"]],["error",4]]],[[["txid",3]],[["result",4,["option","error"]],["option",4,["transaction"]],["error",4]]],[[["u32",15],["keychainkind",4]],[["error",4],["result",4,["option","error"]],["option",4,["script"]]]],[[["u32",15],["keychainkind",4]],[["error",4],["result",4,["option","error"]],["option",4,["script"]]]],[[["bool",15],["txid",3]],[["option",4,["transactiondetails"]],["error",4],["result",4,["option","error"]]]],[[["bool",15],["txid",3]],[["option",4,["transactiondetails"]],["error",4],["result",4,["option","error"]]]],[[["outpoint",3]],[["result",4,["option","error"]],["option",4,["localutxo"]],["error",4]]],[[["outpoint",3]],[["result",4,["option","error"]],["option",4,["localutxo"]],["error",4]]],[[["keychainkind",4]],[["error",4],["result",4,["u32","error"]],["u32",15]]],[[["keychainkind",4]],[["error",4],["result",4,["u32","error"]],["u32",15]]],[[],["usize",15]],[[]],[[],[["result",4,["vec","error"]],["vec",3,["transaction"]],["error",4]]],[[],[["result",4,["vec","error"]],["vec",3,["transaction"]],["error",4]]],[[["option",4,["keychainkind"]],["keychainkind",4]],[["error",4],["result",4,["vec","error"]],["vec",3,["script"]]]],[[["option",4,["keychainkind"]],["keychainkind",4]],[["error",4],["result",4,["vec","error"]],["vec",3,["script"]]]],[[["bool",15]],[["result",4,["vec","error"]],["error",4],["vec",3,["transactiondetails"]]]],[[["bool",15]],[["result",4,["vec","error"]],["error",4],["vec",3,["transactiondetails"]]]],[[],[["result",4,["vec","error"]],["error",4],["vec",3,["localutxo"]]]],[[],[["result",4,["vec","error"]],["error",4],["vec",3,["localutxo"]]]],null,[[["string",3]]],null,[[["u32",15],["keychainkind",4]],[["result",4,["error"]],["error",4]]],[[["u32",15],["keychainkind",4]],[["result",4,["error"]],["error",4]]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[["keychainkind",4],["u32",15],["script",3]],[["result",4,["error"]],["error",4]]],[[["keychainkind",4],["u32",15],["script",3]],[["result",4,["error"]],["error",4]]],[[["transactiondetails",3]],[["result",4,["error"]],["error",4]]],[[["transactiondetails",3]],[["result",4,["error"]],["error",4]]],[[["localutxo",3]],[["result",4,["error"]],["error",4]]],[[["localutxo",3]],[["result",4,["error"]],["error",4]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["asref",8],["keychainkind",4]],[["result",4,["error"]],["error",4]]],[[],[["result",4,["error"]],["error",4]]],[[["keychainkind",4]],[["result",4,["option","error"]],["option",4,["u32"]],["error",4]]],[[["keychainkind",4]],[["result",4,["option","error"]],["option",4,["u32"]],["error",4]]],[[["script",3]],[["result",4,["option","error"]],["option",4],["error",4]]],[[["script",3]],[["result",4,["option","error"]],["option",4],["error",4]]],[[["txid",3]],[["result",4,["option","error"]],["option",4,["transaction"]],["error",4]]],[[["txid",3]],[["result",4,["option","error"]],["option",4,["transaction"]],["error",4]]],[[["u32",15],["keychainkind",4]],[["error",4],["result",4,["option","error"]],["option",4,["script"]]]],[[["u32",15],["keychainkind",4]],[["error",4],["result",4,["option","error"]],["option",4,["script"]]]],[[["bool",15],["txid",3]],[["option",4,["transactiondetails"]],["error",4],["result",4,["option","error"]]]],[[["bool",15],["txid",3]],[["option",4,["transactiondetails"]],["error",4],["result",4,["option","error"]]]],[[["outpoint",3]],[["result",4,["option","error"]],["option",4,["localutxo"]],["error",4]]],[[["outpoint",3]],[["result",4,["option","error"]],["option",4,["localutxo"]],["error",4]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],[["result",4,["error"]],["error",4]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[["memorydatabase",3]]],[[["tree",3]]],[[["sqlitedatabase",3]]],[[]],[[]],[[]],[[["sqlitedbconfiguration",3]]],[[]],[[["sleddbconfiguration",3]]],[[],[["result",4,["error"]],["error",4]]],[[["keychainkind",4]],[["result",4,["option","error"]],["option",4,["u32"]],["error",4]]],[[["script",3]],[["result",4,["option","error"]],["option",4],["error",4]]],[[["txid",3]],[["result",4,["option","error"]],["option",4,["transaction"]],["error",4]]],[[["u32",15],["keychainkind",4]],[["error",4],["result",4,["option","error"]],["option",4,["script"]]]],[[["bool",15],["txid",3]],[["option",4,["transactiondetails"]],["error",4],["result",4,["option","error"]]]],[[["outpoint",3]],[["result",4,["option","error"]],["option",4,["localutxo"]],["error",4]]],[[["keychainkind",4]],[["error",4],["result",4,["u32","error"]],["u32",15]]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[],[["result",4,["vec","error"]],["vec",3,["transaction"]],["error",4]]],[[["option",4,["keychainkind"]],["keychainkind",4]],[["error",4],["result",4,["vec","error"]],["vec",3,["script"]]]],[[["bool",15]],[["result",4,["vec","error"]],["error",4],["vec",3,["transactiondetails"]]]],[[],[["result",4,["vec","error"]],["error",4],["vec",3,["localutxo"]]]],null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["u32",15],["keychainkind",4]],[["result",4,["error"]],["error",4]]],[[["u32",15],["keychainkind",4]],[["result",4,["error"]],["error",4]]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[["keychainkind",4],["u32",15],["script",3]],[["result",4,["error"]],["error",4]]],[[["keychainkind",4],["u32",15],["script",3]],[["result",4,["error"]],["error",4]]],[[["transactiondetails",3]],[["result",4,["error"]],["error",4]]],[[["transactiondetails",3]],[["result",4,["error"]],["error",4]]],[[["localutxo",3]],[["result",4,["error"]],["error",4]]],[[["localutxo",3]],[["result",4,["error"]],["error",4]]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[["asref",8],["keychainkind",4]],[["result",4,["error"]],["error",4]]],[[],[["result",4,["error"]],["error",4]]],[[],["memorydatabase",3]],[[["keychainkind",4]],[["result",4,["option","error"]],["option",4,["u32"]],["error",4]]],[[["script",3]],[["result",4,["option","error"]],["option",4],["error",4]]],[[["txid",3]],[["result",4,["option","error"]],["option",4,["transaction"]],["error",4]]],[[["u32",15],["keychainkind",4]],[["error",4],["result",4,["option","error"]],["option",4,["script"]]]],[[["bool",15],["txid",3]],[["option",4,["transactiondetails"]],["error",4],["result",4,["option","error"]]]],[[["outpoint",3]],[["result",4,["option","error"]],["option",4,["localutxo"]],["error",4]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],[["result",4,["error"]],["error",4]]],[[["formatter",3]],["result",6]],[[]],[[],[["result",4,["error"]],["error",4]]],[[["keychainkind",4]],[["result",4,["option","error"]],["option",4,["u32"]],["error",4]]],[[["script",3]],[["result",4,["option","error"]],["option",4],["error",4]]],[[["txid",3]],[["result",4,["option","error"]],["option",4,["transaction"]],["error",4]]],[[["u32",15],["keychainkind",4]],[["error",4],["result",4,["option","error"]],["option",4,["script"]]]],[[["bool",15],["txid",3]],[["option",4,["transactiondetails"]],["error",4],["result",4,["option","error"]]]],[[["outpoint",3]],[["result",4,["option","error"]],["option",4,["localutxo"]],["error",4]]],[[["keychainkind",4]],[["error",4],["result",4,["u32","error"]],["u32",15]]],[[],["usize",15]],[[]],[[],[["result",4,["vec","error"]],["vec",3,["transaction"]],["error",4]]],[[["option",4,["keychainkind"]],["keychainkind",4]],[["error",4],["result",4,["vec","error"]],["vec",3,["script"]]]],[[["bool",15]],[["result",4,["vec","error"]],["error",4],["vec",3,["transactiondetails"]]]],[[],[["result",4,["vec","error"]],["error",4],["vec",3,["localutxo"]]]],[[]],[[["u32",15],["keychainkind",4]],[["result",4,["error"]],["error",4]]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[["keychainkind",4],["u32",15],["script",3]],[["result",4,["error"]],["error",4]]],[[["transactiondetails",3]],[["result",4,["error"]],["error",4]]],[[["localutxo",3]],[["result",4,["error"]],["error",4]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["network",4]],[["result",4,["address","error"]],["address",3],["error",4]]],[[],["scriptcontextenum",4]],[[],["scriptcontextenum",4]],[[],["terminal",4]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[["vec",3,["miniscript","global"]],["global",3],["miniscript",3]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["terminal",4]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["terminal",4]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["terminal",4]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],null,[[],["deriveddescriptorkey",3]],[[],["descriptor",4]],[[],["legacy",4]],[[],["segwitv0",4]],[[],["miniscript",3]],[[]],[[]],[[]],[[]],[[]],[[],["ordering",4]],[[["descriptor",4]],["ordering",4]],[[["legacy",4]],["ordering",4]],[[["segwitv0",4]],["ordering",4]],[[["miniscript",3]],["ordering",4]],[[["usize",15]]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["u32",15]],[["descriptor",4,["descriptorpublickey"]],["descriptorpublickey",4]]],[[],["descriptortype",4]],[[],[["descriptor",4],["result",4,["descriptor"]]]],[[],[["result",4,["miniscript"]],["miniscript",3]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["script",3]],[[],["bool",15]],[[["descriptor",4]],["bool",15]],[[["legacy",4]],["bool",15]],[[["segwitv0",4]],["bool",15]],[[["miniscript",3]],["bool",15]],null,[[],["script",3]],null,[[["secp256k1",3],["signerscontainer",3],["buildsatisfaction",4]],[["descriptorerror",4],["result",4,["option","descriptorerror"]],["option",4,["policy"]]]],[[["secp256k1",3],["signerscontainer",3],["buildsatisfaction",4]],[["result",4,["option","error"]],["option",4,["policy"]],["error",4]]],[[["secp256k1",3],["signerscontainer",3],["buildsatisfaction",4]],[["result",4,["option","error"]],["option",4,["policy"]],["error",4]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[],["bool",15]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[["terminal",4]],[["result",4,["miniscript","error"]],["miniscript",3],["error",4]]],[[["str",15]],[["descriptor",4],["result",4,["descriptor","error"]],["error",4]]],[[["str",15]],[["result",4,["miniscript","error"]],["miniscript",3],["error",4]]],[[["str",15]],[["result",4,["miniscript","error"]],["miniscript",3],["error",4]]],[[["tree",3]],[["descriptor",4],["result",4,["descriptor","error"]],["error",4]]],[[["tree",3]],[["result",4,["miniscript","error"]],["miniscript",3],["error",4]]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],[["vec",3,["global"]],["global",3]]],[[],[["vec",3,["pkpkh","global"]],["pkpkh",4],["global",3]]],[[],[["vec",3,["global"]],["global",3]]],[[["usize",15]],[["option",4,["miniscript"]],["miniscript",3]]],[[["usize",15]],["option",4]],[[["usize",15]],[["option",4,["pkpkh"]],["pkpkh",4]]],[[["usize",15]],["option",4]],[[],[["error",4],["result",4,["error"]]]],[[],["bool",15]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[],["hash",3]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[],["terminal",4]],[[["network",4],["secp256k1",3]],[["result",4,["descriptorerror"]],["descriptorerror",4]]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["iter",3]],[[],["pkiter",3]],[[],["pkpkhiter",3]],[[],["pkhiter",3]],[[],[["result",4,["policy","error"]],["policy",4],["error",4]]],[[],[["result",4,["policy","error"]],["policy",4],["error",4]]],[[],[["lifterror",4],["result",4,["lifterror"]]]],[[["miniscript",3]],[["usize",15],["option",4,["usize"]]]],[[["miniscript",3]],[["usize",15],["option",4,["usize"]]]],[[["miniscript",3]],[["usize",15],["option",4,["usize"]]]],[[],[["usize",15],["result",4,["usize","error"]],["error",4]]],[[],[["usize",15],["result",4,["usize","error"]],["error",4]]],[[],[["usize",15],["result",4,["usize","error"]],["error",4]]],[[["descriptor",4]],["bool",15]],[[["secp256k1",3],["descriptorpublickey",4]],["deriveddescriptorkey",3]],[[["miniscript",3,["barectx"]],["barectx",4]],[["descriptor",4],["result",4,["descriptor","error"]],["error",4]]],[[],["descriptor",4]],[[],["descriptor",4]],[[["miniscript",3,["legacy"]],["legacy",4]],[["descriptor",4],["result",4,["descriptor","error"]],["error",4]]],[[["usize",15],["vec",3,["global"]],["global",3]],[["descriptor",4],["result",4,["descriptor","error"]],["error",4]]],[[],[["descriptor",4],["result",4,["descriptor","error"]],["error",4]]],[[["segwitv0",4],["miniscript",3,["segwitv0"]]],[["descriptor",4],["result",4,["descriptor","error"]],["error",4]]],[[["usize",15],["vec",3,["global"]],["global",3]],[["descriptor",4],["result",4,["descriptor","error"]],["error",4]]],[[],[["descriptor",4],["result",4,["descriptor","error"]],["error",4]]],[[["segwitv0",4],["miniscript",3,["segwitv0"]]],[["descriptor",4],["result",4,["descriptor","error"]],["error",4]]],[[["usize",15],["vec",3,["global"]],["global",3]],[["descriptor",4],["result",4,["descriptor","error"]],["error",4]]],null,[[["miniscript",3]],[["result",4,["error"]],["error",4]]],[[["script",3]],[["error",4],["miniscript",3,["publickey"]],["result",4,["miniscript","error"]]]],[[["secp256k1",3],["str",15]],[["result",4,["error"]],["error",4]]],[[["script",3]],[["error",4],["miniscript",3,["publickey"]],["result",4,["miniscript","error"]]]],[[],[["option",4,["ordering"]],["ordering",4]]],[[["descriptor",4]],[["option",4,["ordering"]],["ordering",4]]],[[["legacy",4]],[["option",4,["ordering"]],["ordering",4]]],[[["segwitv0",4]],[["option",4,["ordering"]],["ordering",4]]],[[["miniscript",3]],[["option",4,["ordering"]],["ordering",4]]],null,[[],["bool",15]],[[],[["result",4,["error"]],["error",4]]],[[],[["result",4,["analysiserror"]],["analysiserror",4]]],[[],[["result",4,["vec","error"]],["vec",3,["vec","global"]],["error",4]]],[[],[["result",4,["vec","error"]],["vec",3,["vec","global"]],["error",4]]],[[],["script",3]],[[],["script",3]],[[],["usize",15]],[[],["result",4]],[[],["result",4]],[[],["usize",15]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["publickey",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[["hashmap",3]],["string",3]],[[["miniscript",3]],[["result",4,["error"]],["error",4]]],[[["miniscript",3]],[["result",4,["error"]],["error",4]]],[[],[["result",4,["descriptor"]],["descriptor",4]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["script",3]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],null,null,null,null,null,[[["str",15]],[["result",4,["string","descriptorerror"]],["descriptorerror",4],["string",3]]],null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["fail",8]],[[]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["error",4]]],[[["error",4]]],[[["policyerror",4]]],[[["error",4]]],[[["error",4]]],[[["keyerror",4]],["error",4]],[[]],[[["error",4]]],[[],["usize",15]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["fail",8]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["pkorf",3]],[[],["satisfiableitem",4]],[[],["satisfaction",4]],[[],["policy",3]],[[],["condition",3]],[[],["buildsatisfaction",4]],[[]],[[]],[[]],[[]],[[]],[[]],[[["condition",3]],["ordering",4]],null,null,[[],["pkorf",3]],[[],["condition",3]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["condition",3]],["bool",15]],[[["policyerror",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[["bool",15]]],[[]],[[["satisfiableitem",4]]],[[]],[[]],[[]],[[["btreemap",3]],[["condition",3],["policyerror",4],["result",4,["condition","policyerror"]]]],[[],["u64",15]],[[]],[[],["string",3]],null,[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],null,[[["condition",3]],["bool",15]],[[["policyerror",4]],["bool",15]],[[["condition",3]],[["option",4,["ordering"]],["ordering",4]]],[[],["bool",15]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[["descriptorerror",4],["result",4,["descriptortemplateout","descriptorerror"]],["descriptortemplateout",6]]],[[],[["descriptorerror",4],["result",4,["descriptortemplateout","descriptorerror"]],["descriptortemplateout",6]]],[[],[["descriptorerror",4],["result",4,["descriptortemplateout","descriptorerror"]],["descriptortemplateout",6]]],[[],[["descriptorerror",4],["result",4,["descriptortemplateout","descriptorerror"]],["descriptortemplateout",6]]],[[],[["descriptorerror",4],["result",4,["descriptortemplateout","descriptorerror"]],["descriptortemplateout",6]]],[[],[["descriptorerror",4],["result",4,["descriptortemplateout","descriptorerror"]],["descriptortemplateout",6]]],[[],[["descriptorerror",4],["result",4,["descriptortemplateout","descriptorerror"]],["descriptortemplateout",6]]],[[],[["descriptorerror",4],["result",4,["descriptortemplateout","descriptorerror"]],["descriptortemplateout",6]]],[[],[["descriptorerror",4],["result",4,["descriptortemplateout","descriptorerror"]],["descriptortemplateout",6]]],[[],[["descriptorerror",4],["result",4,["descriptortemplateout","descriptorerror"]],["descriptortemplateout",6]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["network",4],["secp256k1",3]],[["error",4],["result",4,["error"]]]],[[["network",4],["secp256k1",3]],[["error",4],["result",4,["error"]]]],[[["network",4],["secp256k1",3]],[["error",4],["result",4,["error"]]]],[[["network",4],["secp256k1",3]],[["error",4],["result",4,["error"]]]],[[["network",4],["secp256k1",3]],[["error",4],["result",4,["error"]]]],[[["network",4],["secp256k1",3]],[["error",4],["result",4,["error"]]]],[[["network",4],["secp256k1",3]],[["error",4],["result",4,["error"]]]],[[["network",4],["secp256k1",3]],[["error",4],["result",4,["error"]]]],[[["network",4],["secp256k1",3]],[["error",4],["result",4,["error"]]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["validnetworks",6]],[[],["scriptcontextenum",4]],[[],["fail",8]],[[["secp256k1",3]],[["descriptorpublickey",4],["descriptorkeyparseerror",3],["result",4,["descriptorpublickey","descriptorkeyparseerror"]]]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["terminal",4]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[],["scriptcontextenum",4]],[[],["privatekeygenerateoptions",3]],[[],["sortedmultivec",3]],[[],["descriptorpublickey",4]],[[],["descriptorsinglepub",3]],[[]],[[]],[[]],[[]],[[]],[[["sortedmultivec",3]],["ordering",4]],[[["descriptorpublickey",4]],["ordering",4]],[[["descriptorsinglepub",3]],["ordering",4]],null,[[]],[[["usize",15]]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["u32",15]],["descriptorpublickey",4]],[[["secp256k1",3]],[["conversionerror",4],["result",4,["publickey","conversionerror"]],["publickey",3]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["script",3]],[[["scriptcontextenum",4]],["bool",15]],[[["sortedmultivec",3]],["bool",15]],[[["descriptorpublickey",4]],["bool",15]],[[["descriptorsinglepub",3]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[],["bool",15]],[[]],[[["extendedprivkey",3]]],[[["extendedpubkey",3]]],[[]],[[]],[[]],[[]],[[["error",4]]],[[["error",4]]],[[]],[[]],[[]],[[]],[[]],[[]],[[["descriptorpublickey",4],["validnetworks",6]]],[[["descriptorsecretkey",4],["validnetworks",6]]],[[["str",15]],[["result",4,["descriptorpublickey"]],["descriptorpublickey",4]]],[[["str",15]],[["descriptorsecretkey",4],["result",4,["descriptorsecretkey"]]]],[[["tree",3]],[["sortedmultivec",3],["error",4],["result",4,["sortedmultivec","error"]]]],[[],["derivationpath",3]],[[],[["result",4,["generatedkey"]],["generatedkey",3]]],[[],[["result",4,["generatedkey"]],["generatedkey",3]]],[[],[["result",4,["generatedkey"]],["generatedkey",3]]],[[],[["result",4,["generatedkey"]],["generatedkey",3]]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],["bool",15]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[["descriptorkey",4],["keyerror",4],["result",4,["descriptorkey","keyerror"]]]],[[["option",4,["keysource"]],["keysource",6],["derivationpath",3]],[["descriptorkey",4],["keyerror",4],["result",4,["descriptorkey","keyerror"]]]],[[["option",4,["keysource"]],["keysource",6],["derivationpath",3]],[["descriptorkey",4],["keyerror",4],["result",4,["descriptorkey","keyerror"]]]],[[],[["descriptorkey",4],["keyerror",4],["result",4,["descriptorkey","keyerror"]]]],[[],[["descriptorkey",4],["keyerror",4],["result",4,["descriptorkey","keyerror"]]]],[[],[["descriptorkey",4],["keyerror",4],["result",4,["descriptorkey","keyerror"]]]],[[],[["descriptorkey",4],["keyerror",4],["result",4,["descriptorkey","keyerror"]]]],[[],[["result",4,["extendedkey","keyerror"]],["extendedkey",4],["keyerror",4]]],[[],[["result",4,["extendedkey","keyerror"]],["extendedkey",4],["keyerror",4]]],[[],[["result",4,["extendedkey","keyerror"]],["extendedkey",4],["keyerror",4]]],[[]],[[["network",4]],[["extendedprivkey",3],["option",4,["extendedprivkey"]]]],[[["secp256k1",3],["network",4]],["extendedpubkey",3]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],null,null,null,[[],[["result",4,["policy","error"]],["policy",4],["error",4]]],[[],["validnetworks",6]],[[],["fingerprint",3]],[[["miniscript",3]],[["usize",15],["option",4,["usize"]]]],[[],["usize",15]],[[],["usize",15]],[[["validnetworks",6]],["validnetworks",6]],[[["sortedmultivec",3]],["bool",15]],[[["descriptorpublickey",4]],["bool",15]],[[["descriptorsinglepub",3]],["bool",15]],[[["usize",15],["vec",3,["global"]],["global",3]],[["sortedmultivec",3],["error",4],["result",4,["sortedmultivec","error"]]]],null,null,[[["miniscript",3]],[["result",4,["error"]],["error",4]]],[[["miniscript",3]],[["result",4,["error"]],["error",4]]],[[["validnetworks",6]]],[[["sortedmultivec",3]],[["option",4,["ordering"]],["ordering",4]]],[[["descriptorpublickey",4]],[["option",4,["ordering"]],["ordering",4]]],[[["descriptorsinglepub",3]],[["option",4,["ordering"]],["ordering",4]]],null,[[],[["result",4,["error"]],["error",4]]],[[],[["result",4,["vec","error"]],["vec",3,["vec","global"]],["error",4]]],[[],["usize",15]],[[],["terminal",4]],[[],["validnetworks",6]],[[]],[[]],[[]],[[]],[[]],[[],["descriptorpublickey",4]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[["miniscript",3]],[["result",4,["error"]],["error",4]]],[[["miniscript",3]],[["result",4,["error"]],["error",4]]],[[["miniscript",3]],[["result",4,["error"]],["error",4]]],[[["miniscript",3]],[["result",4,["error"]],["error",4]]],[[],[["result",4,["sortedmultivec"]],["sortedmultivec",3]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[],["str",15]],[[]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[["vec",3,["u5","global"]],["result",4,["vec"]]]],[[],["u8",15]],[[],["language",4]],[[],["mnemonic",3]],[[],["mnemonictype",4]],[[],["seed",3]],[[]],[[]],[[]],[[]],[[],["language",4]],[[],["mnemonictype",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[],["usize",15]],[[["language",4]],["bool",15]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["usize",15]],[["result",4,["mnemonictype","error"]],["mnemonictype",4],["error",3]]],[[["str",15]],[["result",4,["mnemonictype","error"]],["mnemonictype",4],["error",3]]],[[["usize",15]],[["result",4,["mnemonictype","error"]],["mnemonictype",4],["error",3]]],[[]],[[]],[[]],[[]],[[["language",4]],[["result",4,["mnemonic","error"]],["error",3],["mnemonic",3]]],[[["str",15]],[["option",4,["language"]],["language",4]]],[[["str",15],["language",4]],[["result",4,["mnemonic","error"]],["error",3],["mnemonic",3]]],[[],[["result",4,["generatedkey"]],["generatedkey",3]]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[["option",4,["keysource"]],["keysource",6],["derivationpath",3]],[["descriptorkey",4],["keyerror",4],["result",4,["descriptorkey","keyerror"]]]],[[["option",4,["keysource"]],["keysource",6],["derivationpath",3]],[["descriptorkey",4],["keyerror",4],["result",4,["descriptorkey","keyerror"]]]],[[],[["result",4,["extendedkey","keyerror"]],["extendedkey",4],["keyerror",4]]],[[],[["result",4,["extendedkey","keyerror"]],["extendedkey",4],["keyerror",4]]],[[],["string",3]],[[],["language",4]],[[["mnemonictype",4],["language",4]],["mnemonic",3]],[[["str",15],["mnemonic",3]],["seed",3]],[[],["str",15]],[[],["string",3]],[[],["string",3]],[[]],[[]],[[]],[[]],[[],["string",3]],[[],["string",3]],[[],["usize",15]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[["str",15],["language",4]],[["result",4,["error"]],["error",3]]],[[]],[[]],[[]],[[]],[[],["usize",15]],[[],["wordlist",3]],[[],["wordmap",3]],[[],["result",4]],null,null,null,null,null,null,null,null,[[["arc",3,["addressvalidator"]],["addressvalidator",8]]],[[["arc",3,["signer"]],["signer",8],["signerordering",3],["keychainkind",4]]],null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[["transaction",3]],[["txid",3],["result",4,["txid","error"]],["error",4]]],[[["txid",3]],[["result",4,["txbuilder","error"]],["error",4],["txbuilder",3,["defaultcoinselectionalgorithm","bumpfee"]]]],[[],[["createtx",3],["defaultcoinselectionalgorithm",6],["txbuilder",3,["defaultcoinselectionalgorithm","createtx"]]]],[[]],null,[[["usize",15]]],[[["usize",15]]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["addressinfo",3]],["bool",15]],null,[[["signoptions",3],["psbt",3]],[["result",4,["bool","error"]],["error",4],["bool",15]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[["addressindex",4]],[["result",4,["addressinfo","error"]],["addressinfo",3],["error",4]]],[[],[["result",4,["u64","error"]],["u64",15],["error",4]]],[[["keychainkind",4]],["extendeddescriptor",6]],[[["str",15]]],[[["localutxo",3],["option",4,["sighashtype"]],["sighashtype",4],["bool",15]],[["result",4,["input","error"]],["input",3],["error",4]]],[[["bool",15],["txid",3]],[["option",4,["transactiondetails"]],["error",4],["result",4,["option","error"]]]],[[["outpoint",3]],[["result",4,["option","error"]],["option",4,["localutxo"]],["error",4]]],null,[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[],["bool",15]],[[["script",3]],[["result",4,["bool","error"]],["error",4],["bool",15]]],[[["bool",15]],[["result",4,["vec","error"]],["error",4],["vec",3,["transactiondetails"]]]],[[],[["result",4,["vec","error"]],["error",4],["vec",3,["localutxo"]]]],[[["addressinfo",3]],["bool",15]],[[],["network",4]],[[["option",4],["network",4],["intowalletdescriptor",8]],[["result",4,["error"]],["error",4]]],[[["option",4],["network",4],["intowalletdescriptor",8]],[["result",4,["error"]],["error",4]]],[[["keychainkind",4]],[["option",4,["policy"]],["error",4],["result",4,["option","error"]]]],[[["keychainkind",4]],[["option",4,["extendeddescriptor"]],["result",4,["option","error"]],["error",4]]],[[],["secp256k1",3]],[[["signoptions",3],["psbt",3]],[["result",4,["bool","error"]],["error",4],["bool",15]]],null,[[["u32",15],["option",4,["u32"]],["progress",8]],[["result",4,["error"]],["error",4]]],null,[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,[[],["fail",8]],[[]],[[]],[[],["addressvalidatorerror",4]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["addressvalidatorerror",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[],["usize",15]],[[]],[[["addressvalidatorerror",4]],["bool",15]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[["script",3],["hdkeypaths",6],["keychainkind",4]],[["result",4,["addressvalidatorerror"]],["addressvalidatorerror",4]]],[[]],null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["largestfirstcoinselection",3]],[[]],[[["weightedutxo",3],["u64",15],["feerate",3],["vec",3,["weightedutxo"]]],[["error",4],["result",4,["coinselectionresult","error"]],["coinselectionresult",3]]],[[["weightedutxo",3],["u64",15],["feerate",3],["vec",3,["weightedutxo"]]],[["error",4],["result",4,["coinselectionresult","error"]],["coinselectionresult",3]]],[[["weightedutxo",3],["u64",15],["feerate",3],["vec",3,["weightedutxo"]]],[["error",4],["result",4,["coinselectionresult","error"]],["coinselectionresult",3]]],[[],["largestfirstcoinselection",3]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[],["u64",15]],[[["u64",15]]],null,[[],["u64",15]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],null,null,[[]],[[]],[[],[["option",4,["string"]],["string",3]]],[[["usize",15]]],[[["usize",15]]],[[],["string",3]],[[],["result",4]],[[["usize",15]]],[[["wallet",3],["str",15],["bool",15]],[["str",15],["result",4,["str"]]]],[[["formatter",3]],["result",6]],[[]],[[["str",15]],["result",4]],[[],["usize",15]],[[]],null,[[],["result",4]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["arc",3,["signer"]],["signer",8],["signerordering",3],["signerid",4]],[["option",4,["arc"]],["arc",3,["signer"]]]],null,[[],["fail",8]],[[["secp256k1",3]],["keymap",6]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["signerid",4]],[[],["signererror",4]],[[],["signerordering",3]],[[],["signerscontainer",3]],[[],["signoptions",3]],[[]],[[]],[[]],[[]],[[]],[[["signerid",4]],["ordering",4]],[[["signerordering",3]],["ordering",4]],[[]],[[],["signerscontainer",3]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],[["descriptorsecretkey",4],["option",4,["descriptorsecretkey"]]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["signerid",4]],["bool",15]],[[["signererror",4]],["bool",15]],[[["signerordering",3]],["bool",15]],[[["signerid",4]],[["option",4,["arc"]],["arc",3]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["fingerprint",3]],["signerid",4]],[[]],[[["hash",3]],["signerid",4]],[[]],[[]],[[["keymap",6]],["signerscontainer",3]],[[]],[[]],[[],["u64",15]],[[]],[[["secp256k1",3]],["signerid",4]],[[],[["vec",3,["signerid"]],["signerid",4]]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[["signerid",4]],["bool",15]],[[["signerordering",3]],["bool",15]],[[]],[[["signerid",4]],[["option",4,["ordering"]],["ordering",4]]],[[["signerordering",3]],[["option",4,["ordering"]],["ordering",4]]],[[["signerid",4],["signerordering",3]],[["option",4,["arc"]],["arc",3,["signer"]]]],[[["usize",15],["secp256k1",3],["partiallysignedtransaction",3],["option",4,["usize"]]],[["signererror",4],["result",4,["signererror"]]]],[[],["bool",15]],[[],[["vec",3,["arc"]],["arc",3]]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],null,null,null,[[],["u64",15]],null,null,null,null,null,null,null,null,null,null,null,null,[[["input",3],["usize",15],["outpoint",3]],[["result",4,["error"]],["error",4]]],[[]],[[["u64",15],["script",3]]],[[["outpoint",3]]],[[["outpoint",3]],[["result",4,["error"]],["error",4]]],[[],[["result",4,["error"]],["error",4]]],[[["script",3]],[["result",4,["error"]],["error",4]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["changespendpolicy",4]]],[[],["createtx",3]],[[],["bumpfee",3]],[[]],[[],["txordering",4]],[[],["changespendpolicy",4]],[[]],[[]],[[]],[[]],[[]],[[["txordering",4]],["ordering",4]],[[["changespendpolicy",4]],["ordering",4]],[[["coinselectionalgorithm",8]],[["txbuilder",3],["coinselectionalgorithm",8]]],[[],["createtx",3]],[[],["bumpfee",3]],[[]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[["script",3]]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[["u32",15]]],[[["txordering",4]],["bool",15]],[[["changespendpolicy",4]],["bool",15]],[[["u64",15]]],[[["feerate",3]]],[[],[["error",4],["result",4,["error"]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[],["u64",15]],[[],["u64",15]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[["u32",15]]],[[]],[[]],[[["txordering",4]]],[[["txordering",4]],[["option",4,["ordering"]],["ordering",4]]],[[["changespendpolicy",4]],[["option",4,["ordering"]],["ordering",4]]],[[["vec",3,["usize"]],["keychainkind",4],["btreemap",3,["string","vec"]],["string",3]]],[[["vec",3]]],[[["sighashtype",4]]],[[["transaction",3]]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[["outpoint",3],["vec",3,["outpoint"]]]],[[["i32",15]]],[[]],[[]],[[]],[[]],[[]]],"p":[[4,"Error"],[4,"KeychainKind"],[4,"Utxo"],[3,"FeeRate"],[3,"LocalUtxo"],[3,"WeightedUtxo"],[3,"TransactionDetails"],[3,"ConfirmationTime"],[6,"MnemonicWithPassphrase"],[6,"DescriptorTemplateOut"],[6,"ExtendedDescriptor"],[8,"Vbytes"],[13,"InvalidU32Bytes"],[13,"Generic"],[13,"OutputBelowDustLimit"],[13,"MissingKeyOrigin"],[13,"Key"],[13,"SpendingPolicyRequired"],[13,"InvalidPolicyPathError"],[13,"Signer"],[13,"InvalidProgressValue"],[13,"InvalidOutpoint"],[13,"Descriptor"],[13,"AddressValidator"],[13,"Encode"],[13,"Miniscript"],[13,"Bip32"],[13,"Secp256k1"],[13,"Json"],[13,"Hex"],[13,"Psbt"],[13,"PsbtParse"],[13,"Electrum"],[13,"Esplora"],[13,"CompactFilters"],[13,"Sled"],[13,"Rusqlite"],[13,"InsufficientFunds"],[13,"InvalidNetwork"],[13,"FeeRateTooLow"],[13,"FeeTooLow"],[13,"Local"],[13,"Foreign"],[4,"Capability"],[8,"ConfigurableBlockchain"],[3,"NoopProgress"],[3,"LogProgress"],[8,"Blockchain"],[8,"Progress"],[4,"AnyBlockchain"],[4,"AnyBlockchainConfig"],[13,"Electrum"],[13,"Esplora"],[13,"CompactFilters"],[13,"Electrum"],[13,"Esplora"],[13,"CompactFilters"],[4,"CompactFiltersError"],[3,"Mempool"],[3,"BitcoinPeerConfig"],[3,"Peer"],[3,"CompactFiltersBlockchain"],[3,"CompactFiltersBlockchainConfig"],[13,"Db"],[13,"Io"],[13,"Bip158"],[13,"Time"],[13,"Global"],[3,"ElectrumBlockchain"],[3,"ElectrumBlockchainConfig"],[4,"EsploraError"],[3,"EsploraBlockchainConfig"],[3,"EsploraBlockchain"],[3,"EsploraGetHistory"],[13,"Ureq"],[13,"UreqTransport"],[13,"HttpResponse"],[13,"Io"],[13,"Parsing"],[13,"BitcoinEncoding"],[13,"Hex"],[13,"TransactionNotFound"],[13,"HeaderHeightNotFound"],[13,"HeaderHashNotFound"],[8,"BatchDatabase"],[8,"ConfigurableDatabase"],[3,"SqliteDatabase"],[8,"Database"],[8,"BatchOperations"],[4,"AnyBatch"],[4,"AnyDatabase"],[4,"AnyDatabaseConfig"],[3,"SledDbConfiguration"],[3,"SqliteDbConfiguration"],[13,"Memory"],[13,"Sled"],[13,"Sqlite"],[13,"Memory"],[13,"Sled"],[13,"Sqlite"],[13,"Memory"],[13,"Sled"],[13,"Sqlite"],[3,"MemoryDatabase"],[4,"Descriptor"],[4,"Legacy"],[4,"Segwitv0"],[3,"Miniscript"],[3,"DerivedDescriptorKey"],[8,"ScriptContext"],[8,"ExtractPolicy"],[8,"IntoWalletDescriptor"],[13,"Bare"],[13,"Pkh"],[13,"Wpkh"],[13,"Sh"],[13,"Wsh"],[4,"Error"],[13,"Key"],[13,"Policy"],[13,"InvalidDescriptorCharacter"],[13,"Bip32"],[13,"Base58"],[13,"Pk"],[13,"Miniscript"],[13,"Hex"],[4,"SatisfiableItem"],[4,"PolicyError"],[4,"Satisfaction"],[4,"BuildSatisfaction"],[3,"PkOrF"],[3,"Policy"],[3,"Condition"],[13,"Psbt"],[13,"PsbtTimelocks"],[13,"NotEnoughItemsSelected"],[13,"IndexOutOfRange"],[13,"Complete"],[13,"Partial"],[13,"PartialComplete"],[13,"Signature"],[13,"SignatureKey"],[13,"Sha256Preimage"],[13,"Hash256Preimage"],[13,"Ripemd160Preimage"],[13,"Hash160Preimage"],[13,"Thresh"],[13,"Multisig"],[13,"AbsoluteTimelock"],[13,"RelativeTimelock"],[3,"P2Pkh"],[3,"P2Wpkh_P2Sh"],[3,"P2Wpkh"],[3,"Bip44"],[3,"Bip44Public"],[3,"Bip49"],[3,"Bip49Public"],[3,"Bip84"],[3,"Bip84Public"],[8,"DescriptorTemplate"],[4,"KeyError"],[8,"GeneratableKey"],[4,"ScriptContextEnum"],[4,"ExtendedKey"],[4,"DescriptorSecretKey"],[4,"DescriptorPublicKey"],[8,"ExtScriptContext"],[3,"GeneratedKey"],[4,"DescriptorKey"],[3,"PrivateKeyGenerateOptions"],[3,"SortedMultiVec"],[3,"DescriptorSinglePub"],[3,"DescriptorSinglePriv"],[8,"GeneratableDefaultOptions"],[8,"IntoDescriptorKey"],[8,"DerivableKey"],[13,"SinglePub"],[13,"XPub"],[13,"SinglePriv"],[13,"XPrv"],[13,"Private"],[13,"Public"],[13,"Message"],[13,"Bip32"],[13,"Miniscript"],[4,"Language"],[4,"MnemonicType"],[3,"Seed"],[3,"Mnemonic"],[4,"AddressIndex"],[3,"Wallet"],[3,"AddressInfo"],[8,"IsDust"],[13,"Peek"],[13,"Reset"],[4,"AddressValidatorError"],[8,"AddressValidator"],[13,"Message"],[3,"CoinSelectionResult"],[3,"LargestFirstCoinSelection"],[3,"BranchAndBoundCoinSelection"],[8,"CoinSelectionAlgorithm"],[3,"WalletExport"],[3,"SignerOrdering"],[4,"SignerId"],[4,"SignerError"],[3,"SignersContainer"],[3,"SignOptions"],[8,"Signer"],[13,"PkHash"],[13,"Fingerprint"],[13,"Dummy"],[4,"TxOrdering"],[4,"ChangeSpendPolicy"],[3,"TxBuilder"],[3,"CreateTx"],[3,"BumpFee"]]}\ +"bdk":{"doc":"A modern, lightweight, descriptor-based wallet library …","t":[13,13,13,13,13,13,3,13,13,13,4,13,13,3,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,4,13,3,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,3,13,13,4,8,3,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,14,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,14,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,0,11,11,11,11,11,11,11,11,12,11,12,12,12,11,11,11,11,11,12,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,12,11,11,11,11,11,11,11,11,12,10,12,5,11,11,11,11,11,11,11,11,0,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,8,4,16,8,3,13,13,3,3,8,6,0,11,11,11,11,11,11,10,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,0,11,0,10,11,11,11,11,10,10,11,10,10,11,11,11,11,11,11,11,5,5,5,10,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,4,4,13,13,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,13,3,3,3,4,13,13,13,13,13,13,13,13,3,13,13,13,3,13,13,13,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,12,11,11,11,11,11,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,12,12,12,11,11,11,11,11,11,11,12,11,11,13,3,3,4,3,13,13,13,13,13,13,13,13,13,13,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,16,8,8,16,8,8,3,0,10,11,11,11,10,11,10,11,12,10,11,10,11,10,11,10,11,10,11,10,11,11,11,11,10,11,11,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,11,11,10,11,10,11,10,11,10,11,0,11,12,10,11,10,11,10,11,10,11,10,11,11,11,11,11,4,4,4,13,13,13,13,13,13,3,13,13,13,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13,6,3,4,6,8,6,8,6,4,3,13,8,4,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,12,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,5,13,13,13,4,13,13,13,13,13,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,13,13,4,13,3,6,6,13,13,13,13,13,13,13,13,13,13,13,3,3,4,13,13,13,13,4,4,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,12,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,3,3,3,3,3,3,8,6,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13,8,4,4,4,3,3,16,16,8,4,8,8,3,8,13,13,13,4,6,13,13,13,16,13,3,13,8,4,13,13,13,3,6,13,13,5,10,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,12,12,12,11,5,11,10,11,11,5,11,11,11,11,12,12,11,11,11,11,11,11,12,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,4,3,4,6,3,13,13,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,4,3,8,13,13,13,13,3,11,11,12,0,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,12,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,0,11,0,11,11,11,11,11,11,11,0,11,11,11,11,11,11,12,12,8,4,13,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,12,3,8,3,6,3,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,12,13,13,13,13,13,13,13,13,13,13,13,13,3,8,4,4,3,3,13,11,12,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,10,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,5,13,3,13,13,4,3,13,13,3,8,4,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["AddressValidator","Bip32","BnBNoExactMatch","BnBTotalTriesExceeded","ChecksumMismatch","CompactFilters","ConfirmationTime","Descriptor","Electrum","Encode","Error","Esplora","External","FeeRate","FeeRateTooLow","FeeRateUnavailable","FeeTooLow","Foreign","Generic","Hex","InsufficientFunds","Internal","InvalidNetwork","InvalidOutpoint","InvalidPolicyPathError","InvalidProgressValue","InvalidU32Bytes","IrreplaceableTransaction","Json","Key","KeychainKind","Local","LocalUtxo","Miniscript","MissingKeyOrigin","NoRecipients","NoUtxosSelected","OutputBelowDustLimit","ProgressUpdateError","Psbt","PsbtParse","Rusqlite","ScriptDoesntHaveAddressForm","Secp256k1","Signer","Sled","SpendingPolicyRequired","TransactionConfirmed","TransactionDetails","TransactionNotFound","UnknownUtxo","Utxo","Vbytes","WeightedUtxo","as_byte","as_fail","as_ref","as_sat_vb","base32_len","blockchain","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","check_base32","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","confirmation_time","database","default","default","default","default_min_relay_fee","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","descriptor","descriptor","deserialize","deserialize","deserialize","deserialize","drop","drop","drop","drop","drop","drop","drop","drop","eq","eq","eq","eq","eq","eq","eq","fee","fee_vb","fee_wu","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fragment","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_btc_per_kvb","from_sat_per_vb","from_vb","from_wu","get_hash","get_hash","hash","hash","height","init","init","init","init","init","init","init","init","into","into","into","into","into","into","into","into","into_descriptor_key","into_extended_key","into_wallet_descriptor","into_wallet_descriptor","keychain","keys","ne","ne","ne","ne","ne","ne","new","outpoint","outpoint","partial_cmp","received","satisfaction_weight","sent","serialize","serialize","serialize","serialize","sub","timestamp","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","transaction","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","txid","txout","txout","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","utxo","vbytes","verified","version","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wallet","write_base32","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","available","found","needed","requested","required","required","0","outpoint","psbt_input","AccurateFees","Blockchain","Capability","Config","ConfigurableBlockchain","EsploraBlockchain","FullHistory","GetAnyTx","LogProgress","NoopProgress","Progress","ProgressData","any","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","broadcast","clone","clone","clone","clone_into","clone_into","clone_into","compact_filters","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","electrum","eq","esplora","estimate_fee","fmt","from","from","from","from_config","get_capabilities","get_hash","get_height","get_tx","hash","init","init","init","into","into","into","log_progress","noop_progress","progress","setup","sync","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update","update","update","vzip","vzip","vzip","AnyBlockchain","AnyBlockchainConfig","CompactFilters","CompactFilters","Electrum","Electrum","Esplora","Esplora","borrow","borrow","borrow_mut","borrow_mut","broadcast","clone","clone_into","deref","deref","deref_mut","deref_mut","deserialize","drop","drop","eq","estimate_fee","fmt","from","from","from","from","from","from","from","from","from_config","get_capabilities","get_height","get_tx","init","init","into","into","ne","serialize","setup","sync","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","0","0","0","0","0","0","Bip158","BitcoinPeerConfig","CompactFiltersBlockchain","CompactFiltersBlockchainConfig","CompactFiltersError","DataCorruption","Db","Global","InvalidFilter","InvalidFilterHeader","InvalidHeaders","InvalidResponse","Io","Mempool","MissingBlock","NoPeers","NotConnected","Peer","PeerBloomDisabled","Time","Timeout","add_tx","address","as_fail","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","broadcast","clone","clone","clone_into","clone_into","connect","connect_proxy","default","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","deserialize","drop","drop","drop","drop","drop","drop","eq","eq","estimate_fee","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from_config","get_capabilities","get_height","get_mempool","get_network","get_tx","get_tx","get_version","has_tx","init","init","init","init","init","init","into","into","into","into","into","into","is_connected","iter_txs","ne","ne","network","new","new","peers","recv","send","serialize","serialize","setup","skip_blocks","socks5","socks5_credentials","storage_dir","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","0","0","0","0","0","ElectrumBlockchain","ElectrumBlockchainConfig","borrow","borrow","borrow_mut","borrow_mut","broadcast","clone","clone_into","deref","deref","deref_mut","deref_mut","deserialize","drop","drop","eq","estimate_fee","fmt","from","from","from","from_config","get_capabilities","get_height","get_tx","init","init","into","into","ne","retry","serialize","setup","socks5","stop_gap","timeout","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","url","vzip","vzip","BitcoinEncoding","EsploraBlockchain","EsploraBlockchainConfig","EsploraError","EsploraGetHistory","HeaderHashNotFound","HeaderHeightNotFound","Hex","HttpResponse","Io","NoHeader","Parsing","TransactionNotFound","Ureq","UreqTransport","as_fail","base_url","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","broadcast","clone","clone_into","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","deserialize","drop","drop","drop","drop","eq","estimate_fee","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from_config","get_capabilities","get_height","get_tx","init","init","init","init","into","into","into","into","ne","new","proxy","serialize","setup","stop_gap","timeout_read","timeout_write","to_owned","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","with_agent","0","0","0","0","0","0","0","0","0","0","Batch","BatchDatabase","BatchOperations","Config","ConfigurableDatabase","Database","SqliteDatabase","any","begin_batch","begin_batch","borrow","borrow_mut","check_descriptor_checksum","check_descriptor_checksum","commit_batch","commit_batch","connection","del_last_index","del_last_index","del_path_from_script_pubkey","del_path_from_script_pubkey","del_raw_tx","del_raw_tx","del_script_pubkey_from_path","del_script_pubkey_from_path","del_tx","del_tx","del_utxo","del_utxo","deref","deref_mut","drop","flush","flush","fmt","from","from_config","from_config","get_last_index","get_last_index","get_path_from_script_pubkey","get_path_from_script_pubkey","get_raw_tx","get_raw_tx","get_script_pubkey_from_path","get_script_pubkey_from_path","get_tx","get_tx","get_utxo","get_utxo","increment_last_index","increment_last_index","init","into","iter_raw_txs","iter_raw_txs","iter_script_pubkeys","iter_script_pubkeys","iter_txs","iter_txs","iter_utxos","iter_utxos","memory","new","path","set_last_index","set_last_index","set_raw_tx","set_raw_tx","set_script_pubkey","set_script_pubkey","set_tx","set_tx","set_utxo","set_utxo","try_from","try_into","type_id","vzip","AnyBatch","AnyDatabase","AnyDatabaseConfig","Memory","Memory","Memory","Sled","Sled","Sled","SledDbConfiguration","Sqlite","Sqlite","Sqlite","SqliteDbConfiguration","begin_batch","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","check_descriptor_checksum","commit_batch","del_last_index","del_last_index","del_path_from_script_pubkey","del_path_from_script_pubkey","del_raw_tx","del_raw_tx","del_script_pubkey_from_path","del_script_pubkey_from_path","del_tx","del_tx","del_utxo","del_utxo","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","deserialize","deserialize","drop","drop","drop","drop","drop","flush","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_config","get_last_index","get_path_from_script_pubkey","get_raw_tx","get_script_pubkey_from_path","get_tx","get_utxo","increment_last_index","init","init","init","init","init","into","into","into","into","into","iter_raw_txs","iter_script_pubkeys","iter_txs","iter_utxos","path","path","serialize","serialize","serialize","set_last_index","set_last_index","set_raw_tx","set_raw_tx","set_script_pubkey","set_script_pubkey","set_tx","set_tx","set_utxo","set_utxo","tree_name","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","0","0","0","0","0","0","0","0","0","MemoryDatabase","begin_batch","borrow","borrow_mut","check_descriptor_checksum","commit_batch","default","del_last_index","del_path_from_script_pubkey","del_raw_tx","del_script_pubkey_from_path","del_tx","del_utxo","deref","deref_mut","drop","flush","fmt","from","from_config","get_last_index","get_path_from_script_pubkey","get_raw_tx","get_script_pubkey_from_path","get_tx","get_utxo","increment_last_index","init","into","iter_raw_txs","iter_script_pubkeys","iter_txs","iter_utxos","new","set_last_index","set_raw_tx","set_script_pubkey","set_tx","set_utxo","try_from","try_into","type_id","vzip","Bare","DerivedDescriptor","DerivedDescriptorKey","Descriptor","ExtendedDescriptor","ExtractPolicy","HdKeyPaths","IntoWalletDescriptor","KeyMap","Legacy","Miniscript","Pkh","ScriptContext","Segwitv0","Sh","Wpkh","Wsh","address","as_enum","as_enum","as_inner","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","branches","check_global_consensus_validity","check_global_consensus_validity","check_global_consensus_validity","check_global_policy_validity","check_global_policy_validity","check_global_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_policy_validity","check_local_policy_validity","check_local_policy_validity","check_local_validity","check_terminal_non_malleable","check_terminal_non_malleable","check_terminal_non_malleable","check_witness","check_witness","check_witness","checksum","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","derive","desc_type","deserialize","deserialize","drop","drop","drop","drop","drop","encode","eq","eq","eq","eq","eq","error","explicit_script","ext","extract_policy","extract_policy","extract_policy","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","for_each_key","from","from","from","from","from","from_ast","from_str","from_str","from_str_insane","from_tree","from_tree","get_hash","get_hash","get_hash","get_hash","get_hash","get_leaf_pk","get_leaf_pk_pkh","get_leaf_pkh","get_nth_child","get_nth_pk","get_nth_pk_pkh","get_nth_pkh","get_satisfaction","has_mixed_timelocks","has_repeated_keys","hash","hash","hash","hash","hash","hash_to_hash160","init","init","init","init","init","into","into","into","into","into","into_inner","into_wallet_descriptor","is_deriveable","is_non_malleable","is_uncompressed","iter","iter_pk","iter_pk_pkh","iter_pkh","lift","lift","lift_check","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_weight","max_satisfaction_witness_elements","ne","new","new_bare","new_pk","new_pkh","new_sh","new_sh_sortedmulti","new_sh_wpkh","new_sh_wsh","new_sh_wsh_sortedmulti","new_wpkh","new_wsh","new_wsh_sortedmulti","node","other_top_level_checks","parse","parse_descriptor","parse_insane","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","policy","requires_sig","sanity_check","sanity_check","satisfy","satisfy_malleable","script_code","script_pubkey","script_size","serialize","serialize","serialized_len","template","to_owned","to_owned","to_owned","to_owned","to_owned","to_pubkeyhash","to_public_key","to_string","to_string","to_string","to_string_with_secret","top_level_checks","top_level_type_check","translate_pk","translate_pk","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","ty","type_id","type_id","type_id","type_id","type_id","unsigned_script_sig","vzip","vzip","vzip","vzip","vzip","within_resource_limits","0","0","0","0","0","get_checksum","Base58","Bip32","DuplicatedKeys","Error","HardenedDerivationXpub","Hex","InvalidDescriptorCharacter","InvalidDescriptorChecksum","InvalidHdKeyPath","Key","Miniscript","Pk","Policy","as_fail","borrow","borrow_mut","deref","deref_mut","drop","fmt","fmt","from","from","from","from","from","from","from","from","init","into","to_string","try_from","try_into","type_id","vzip","0","0","0","0","0","0","0","0","AbsoluteTimelock","AddOnLeaf","AddOnPartialComplete","BuildSatisfaction","Complete","Condition","ConditionMap","FoldedConditionMap","Hash160Preimage","Hash256Preimage","IncompatibleConditions","IndexOutOfRange","MixedTimelockUnits","Multisig","None","None","NotEnoughItemsSelected","Partial","PartialComplete","PkOrF","Policy","PolicyError","Psbt","PsbtTimelocks","RelativeTimelock","Ripemd160Preimage","Satisfaction","SatisfiableItem","Sha256Preimage","Signature","SignatureKey","Thresh","as_fail","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","contribution","csv","default","default","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","drop","drop","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","get_condition","get_hash","hash","id","id","init","init","init","init","init","init","init","into","into","into","into","into","into","into","is_leaf","is_leaf","is_null","item","ne","ne","partial_cmp","requires_path","satisfaction","serialize","serialize","serialize","serialize","serialize","timelock","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","0","current_height","input_max_height","psbt","0","0","condition","conditions","conditions","items","items","m","m","n","n","sorted","sorted","0","0","hash","hash","hash","hash","items","keys","threshold","threshold","value","value","0","0","0","0","0","0","0","0","0","1","1","1","1","1","1","2","2","2","Bip44","Bip44Public","Bip49","Bip49Public","Bip84","Bip84Public","DescriptorTemplate","DescriptorTemplateOut","P2Pkh","P2Wpkh","P2Wpkh_P2Sh","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","build","build","build","build","build","build","build","build","build","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","drop","drop","drop","drop","from","from","from","from","from","from","from","from","from","init","init","init","init","init","init","init","init","init","into","into","into","into","into","into","into","into","into","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","Bip32","DerivableKey","DescriptorKey","DescriptorPublicKey","DescriptorSecretKey","DescriptorSinglePriv","DescriptorSinglePub","Entropy","Error","ExtScriptContext","ExtendedKey","GeneratableDefaultOptions","GeneratableKey","GeneratedKey","IntoDescriptorKey","InvalidChecksum","InvalidNetwork","InvalidScriptContext","KeyError","KeyMap","Legacy","Message","Miniscript","Options","Private","PrivateKeyGenerateOptions","Public","ScriptContext","ScriptContextEnum","Segwitv0","SinglePriv","SinglePub","SortedMultiVec","ValidNetworks","XPrv","XPub","any_network","as_enum","as_fail","as_public","bip39","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","check_global_consensus_validity","check_global_consensus_validity","check_global_policy_validity","check_global_policy_validity","check_global_validity","check_global_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_policy_validity","check_local_policy_validity","check_local_validity","check_local_validity","check_terminal_non_malleable","check_witness","check_witness","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","compressed","default","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","derive","derive_public_key","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","encode","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_public","from_secret","from_str","from_str","from_tree","full_derivation_path","generate","generate_default","generate_with_entropy","generate_with_entropy_default","get_hash","get_hash","get_hash","has_secret","hash","hash","hash","init","init","init","init","init","init","init","init","init","init","init","into","into","into","into","into","into","into","into","into","into","into","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_extended_key","into_extended_key","into_extended_key","into_key","into_xprv","into_xpub","is_deriveable","is_legacy","is_legacy","is_segwit_v0","is_segwit_v0","is_uncompressed","k","key","key","lift","mainnet_network","master_fingerprint","max_satisfaction_size","max_satisfaction_size","max_satisfaction_witness_elements","merge_networks","ne","ne","ne","new","origin","origin","other_top_level_checks","other_top_level_checks","override_valid_networks","partial_cmp","partial_cmp","partial_cmp","pks","sanity_check","satisfy","script_size","sorted_node","test_networks","to_owned","to_owned","to_owned","to_owned","to_owned","to_pubkeyhash","to_string","to_string","to_string","to_string","top_level_checks","top_level_checks","top_level_type_check","top_level_type_check","translate_pk","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","0","0","0","0","0","0","0","0","0","ChineseSimplified","ChineseTraditional","English","French","Italian","Japanese","Korean","Language","Mnemonic","MnemonicType","MnemonicWithPassphrase","Seed","Spanish","Words12","Words15","Words18","Words21","Words24","as_bytes","as_ref","as_ref","base32_len","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","check_base32","checksum_bits","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","default","default","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","entropy","entropy_bits","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_key_size","for_phrase","for_word_count","from","from","from","from","from_entropy","from_language_code","from_phrase","generate_with_entropy","init","init","init","init","into","into","into","into","into_descriptor_key","into_descriptor_key","into_extended_key","into_extended_key","into_phrase","language","new","new","phrase","to_hex","to_hex","to_owned","to_owned","to_owned","to_owned","to_string","to_string","total_bits","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","validate","vzip","vzip","vzip","vzip","word_count","wordlist","wordmap","write_base32","AddressIndex","AddressInfo","IsDust","LastUnused","New","Peek","Reset","Wallet","add_address_validator","add_signer","address","address_validator","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","broadcast","build_fee_bump","build_tx","client","coin_selection","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","eq","export","finalize_psbt","fmt","fmt","fmt","fmt","from","from","from","get_address","get_balance","get_descriptor_for_keychain","get_funded_wallet","get_psbt_input","get_tx","get_utxo","index","init","init","init","into","into","into","is_dust","is_mine","list_transactions","list_unspent","ne","network","new","new_offline","policies","public_descriptor","secp_ctx","sign","signer","sync","time","to_string","try_from","try_from","try_from","try_into","try_into","try_into","tx_builder","type_id","type_id","type_id","vzip","vzip","vzip","0","0","AddressValidator","AddressValidatorError","ConnectionError","InvalidScript","Message","TimeoutError","UserRejected","as_fail","borrow","borrow_mut","clone","clone_into","deref","deref_mut","drop","eq","fmt","fmt","from","init","into","ne","to_owned","to_string","try_from","try_into","type_id","validate","vzip","0","BranchAndBoundCoinSelection","CoinSelectionAlgorithm","CoinSelectionResult","DefaultCoinSelectionAlgorithm","LargestFirstCoinSelection","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","coin_select","coin_select","coin_select","default","default","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","fee_amount","fmt","fmt","fmt","from","from","from","init","init","init","into","into","into","local_selected_amount","new","selected","selected_amount","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","WalletExport","blockheight","borrow","borrow_mut","change_descriptor","deref","deref_mut","descriptor","deserialize","drop","export_wallet","fmt","from","from_str","init","into","label","serialize","to_string","try_from","try_into","type_id","vzip","0","Dummy","Fingerprint","InputIndexOutOfRange","InvalidKey","InvalidNonWitnessUtxo","MissingHdKeypath","MissingKey","MissingNonWitnessUtxo","MissingWitnessScript","MissingWitnessUtxo","NonStandardSighash","PkHash","SignOptions","Signer","SignerError","SignerId","SignerOrdering","SignersContainer","UserCanceled","add_external","allow_all_sighashes","as_fail","as_key_map","assume_height","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","default","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","descriptor_secret_key","drop","drop","drop","drop","drop","eq","eq","eq","find","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","get_hash","hash","id","ids","init","init","init","init","init","into","into","into","into","into","ne","ne","new","partial_cmp","partial_cmp","remove","sign","sign_whole_tx","signers","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","trust_witness_utxo","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","0","0","0","get_timestamp","Bip69Lexicographic","BumpFee","ChangeAllowed","ChangeForbidden","ChangeSpendPolicy","CreateTx","OnlyChange","Shuffle","TxBuilder","TxBuilderContext","TxOrdering","Untouched","add_foreign_utxo","add_global_xpubs","add_recipient","add_unspendable","add_utxo","add_utxos","allow_shrinking","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","change_policy","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","coin_selection","default","default","default","default","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","do_not_spend_change","drain_to","drain_wallet","drop","drop","drop","drop","drop","enable_rbf","enable_rbf_with_sequence","eq","eq","fee_absolute","fee_rate","finish","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","get_hash","get_hash","hash","hash","include_output_redeem_witness_script","init","init","init","init","init","into","into","into","into","into","manually_selected_only","nlocktime","only_spend_change","only_witness_utxo","ordering","partial_cmp","partial_cmp","policy_path","set_recipients","sighash","sort_tx","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","unspendable","version","vzip","vzip","vzip","vzip","vzip"],"q":["bdk","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::Error","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::Utxo","","","bdk::blockchain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::blockchain::any","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::blockchain::any::AnyBlockchain","","","bdk::blockchain::any::AnyBlockchainConfig","","","bdk::blockchain::compact_filters","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::blockchain::compact_filters::CompactFiltersError","","","","","bdk::blockchain::electrum","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::blockchain::esplora","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::blockchain::esplora::EsploraError","","","","","","","","","","bdk::database","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::database::any","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::database::any::AnyBatch","","","bdk::database::any::AnyDatabase","","","bdk::database::any::AnyDatabaseConfig","","","bdk::database::memory","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor::Descriptor","","","","","bdk::descriptor::checksum","bdk::descriptor::error","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor::error::Error","","","","","","","","bdk::descriptor::policy","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor::policy::BuildSatisfaction","","","","bdk::descriptor::policy::PolicyError","","bdk::descriptor::policy::Satisfaction","","","","","","","","","","","bdk::descriptor::policy::SatisfiableItem","","","","","","","","","","","","bdk::descriptor::template","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::keys","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::keys::DescriptorPublicKey","","bdk::keys::DescriptorSecretKey","","bdk::keys::ExtendedKey","","bdk::keys::KeyError","","","bdk::keys::bip39","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::AddressIndex","","bdk::wallet::address_validator","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::address_validator::AddressValidatorError","bdk::wallet::coin_selection","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::export","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::signer","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::signer::SignerId","","","bdk::wallet::time","bdk::wallet::tx_builder","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["Error that can be returned to fail the validation of an …","BIP32 error","Branch and bound coin selection tries to avoid needing a …","Branch and bound coin selection possible attempts with …","Descriptor checksum mismatch","Compact filters client error)","Block height and timestamp of the block containing the …","Error related to the parsing and usage of descriptors","Electrum client error","Encoding error","Errors that can be thrown by the Wallet","Esplora client error","External","Fee rate","When bumping a tx the fee rate requested is lower than …","Node doesn’t have data to estimate a fee rate","When bumping a tx the absolute fee requested is lower than …","A UTXO owned by another wallet.","Generic error","Hex decoding error","Wallet’s UTXO set is not enough to cover recipient’s …","Internal, usually used for change outputs","Invalid network","Requested outpoint doesn’t exist in the tx (vout greater …","Error while extracting and manipulating policies","Progress value must be between 0.0 (included) and 100.0 …","Wrong number of bytes found when trying to convert to u32","Trying to replace a tx that has a sequence >= 0xFFFFFFFE","Error serializing or deserializing JSON data","Error while working with keys","Types of keychains","A UTXO owned by the local wallet.","An unspent output owned by a Wallet.","Miniscript error","In order to use the TxBuilder::add_global_xpubs option …","Cannot build a tx without recipients","manually_selected_only option is selected but no utxo has …","Output created is under the dust limit, 546 satoshis","Progress update error (maybe the channel has been closed)","Partially signed bitcoin transaction error","Partially signed bitcoin transaction parseerror","Rusqlite client error","This error is thrown when trying to convert Bare and …","An ECDSA error","Signing error","Sled database error","Spending policy is not compatible with this KeychainKind","Happens when trying to bump a transaction that is already …","A wallet transaction","Thrown when a tx is not found in the internal database","Happens when trying to spend an UTXO that is not in the …","An unspent transaction output (UTXO).","Trait implemented by types that can be used to measure …","A Utxo with its satisfaction_weight.","Return KeychainKind as a byte","","","Return the value as satoshi/vbyte","","Blockchain backends","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","If the transaction is confirmed, contains height and …","Database types","","","","Create a new FeeRate with the default min relay fee value","","","","","","","","","","","","","","","","","Descriptors","Macro to write full descriptors with code","","","","","","","","","","","","","","","","","","","","Fee value (sats) if available. The availability of the fee …","Calculate absolute fee in Satoshis using size in virtual …","Calculate absolute fee in Satoshis using size in weight …","","","","","","","","","","Macro to write descriptor fragments with code","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a new instance of FeeRate given a float fee rate in …","Create a new instance of FeeRate given a float fee rate in …","Calculate fee rate from fee and vbytes.","Calculate fee rate from fee and weight units (wu).","","","","","confirmation block height","","","","","","","","","","","","","","","","","","","","","Type of keychain","Key formats","","","","","","","Returns Some ConfirmationTime if both height and timestamp …","Get the location of the UTXO","Reference to a transaction output","","Received value (sats)","The weight of the witness data and scriptSig expressed in …","Sent value (sats)","","","","","","confirmation block timestamp","","","","","","","","","Optional transaction","","","","","","","","","","","","","","","","","Transaction id","Get the TxOut of the UTXO","Transaction output","","","","","","","","","The UTXO","Convert weight units to virtual bytes.","Whether the tx has been verified against the consensus …","Get the version of BDK at runtime","","","","","","","","","Wallet","","","","","","","","","","","","","","","","","","","","","","","","","","","Sats available for spending","found network, for example the network of the bitcoin node","Sats needed for some transaction","requested network, for example what is given as bdk-cli …","Required fee rate (satoshi/vbyte)","Required fee absolute value (satoshi)","","The location of the output.","The information about the input we require to add it to a …","Can compute accurate fees for the transactions found …","Trait that defines the actions that must be supported by a …","Capabilities that can be supported by a Blockchain backend","Type that contains the configuration","Trait for Blockchain types that can be created given a …","Structure that implements the logic to sync with Esplora","Can recover the full history of a wallet and not only the …","Can fetch any historical transaction given its txid","Type that implements Progress and logs at level INFO every …","Type that implements Progress and drops every update …","Trait for types that can receive and process progress …","Data sent with a progress update over a channel","Runtime-checked blockchain types","","","","","","","Broadcast a transaction","","","","","","","Compact Filters","","","","","","","","","","Electrum","","Esplora","Estimate the fee rate required to confirm a transaction in …","","","","","Create a new instance given a configuration","Return the set of Capability supported by this backend","","Return the current height","Fetch a transaction from the blockchain given its txid","","","","","","","","Create a new instance of LogProgress","Create a new instance of NoopProgress","Shortcut to create a channel (pair of Sender and Receiver) …","Setup the backend and populate the internal database for …","Populate the internal database with transactions and UTXOs","","","","","","","","","","","","","Send a new progress update","","","","","","Type that can contain any of the Blockchain types defined …","Type that can contain any of the blockchain configurations …","Compact filters client","Compact filters client","Electrum client","Electrum client","Esplora client","Esplora client","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Invalid BIP158 filter","Data to connect to a Bitcoin P2P peer","Structure implementing the required blockchain traits","Configuration for a CompactFiltersBlockchain","An error that can occur during sync with a …","The data stored in the block filters storage are corrupted","Internal database error","Wrapper for crate::error::Error","The compact filter returned is invalid","The compact filter headers returned are invalid","The headers returned are invalid","A peer sent an invalid or unexpected response","Internal I/O error","Container for unconfirmed, but valid Bitcoin transactions","The peer is missing a block in the valid chain","No peers have been specified","A peer is not connected","A Bitcoin peer","The peer doesn’t advertise the BLOOM service flag","Internal system time error","A peer took too long to reply to one of our messages","Add a transaction to the mempool","Peer address such as 127.0.0.1:18333","","","","","","","","","","","","","","","","","","","Connect to a peer over a plaintext TCP connection","Connect to a peer through a SOCKS5 proxy, optionally by …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return the mempool used by this peer","Return the Bitcoin Network in use","Look-up a transaction in the mempool given an Inventory …","","Return the VersionMessage sent by the peer","Return whether or not the mempool contains a transaction …","","","","","","","","","","","","","Return whether or not the peer is still connected","Return the list of transactions contained in the mempool","","","Network used","Create a new empty mempool","Construct a new instance given a list of peers, a path to …","List of peers to try to connect to for asking headers and …","Waits for a specific incoming Bitcoin message, optionally …","Send a raw Bitcoin message to the peer","","","","Optionally skip initial skip_blocks blocks (default: 0)","Optional socks5 proxy","Optional socks5 proxy credentials","Storage dir to save partially downloaded headers and full …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Wrapper over an Electrum Client that implements the …","Configuration for an ElectrumBlockchain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Request retry count","","","URL of the socks5 proxy server or a Tor service","Stop searching addresses for transactions after finding an …","Request timeout (seconds)","","","","","","","","URL of the Electrum server (such as ElectrumX, Esplora, …","","","Invalid Bitcoin data returned","Structure that implements the logic to sync with Esplora","Configuration for an EsploraBlockchain","Errors that can happen during a sync with EsploraBlockchain","Data type used when fetching transaction history from …","Header hash not found","Header height not found","Invalid Hex data returned","HTTP response error","IO error during ureq response read","No header found in ureq response","Invalid number returned","Transaction not found","Error during ureq HTTP request","Transport error during the ureq HTTP call","","Base URL of the esplora service eg. …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a new instance of the client from a base URL and …","Optional URL of the proxy to use to make requests to the …","","","Stop searching addresses for transactions after finding an …","Socket read timeout.","Socket write timeout.","","","","","","","","","","","","","","","","","","","Set the inner ureq agent.","","","","","","","","","","","Container for the operations","Trait for a database that supports batch operations","Trait for operations that can be batched","Type that contains the configuration","Trait for Database types that can be created given a …","Trait for reading data from a database","Sqlite database stored on filesystem","Runtime-checked database types","Create a new batch container","","","","Read and checks the descriptor checksum for a given …","","Consume and apply a batch of operations","","A rusqlite connection object to the sqlite database","Delete the last derivation index for a keychain.","","Delete the data related to a specific script_pubkey, …","","Delete a raw transaction given its Txid","","Delete a script_pubkey given the keychain and its child …","","Delete the metadata of a transaction and optionally the …","","Delete a LocalUtxo given its OutPoint","","","","","Force changes to be written to disk","","","","Create a new instance given a configuration","","Return the last defivation index for a keychain.","","Fetch the keychain and child number of a given …","","Fetch a raw transaction given its Txid","","Fetch a script_pubkey given the child number of a keychain.","","Fetch the transaction metadata and optionally also the raw …","","Fetch a LocalUtxo given its OutPoint","","Increment the last derivation index for a keychain and …","","","","Return the list of raw transactions","","Return the list of script_pubkeys","","Return the list of transactions metadata","","Return the list of LocalUtxos","","In-memory ephemeral database","Instantiate a new SqliteDatabase instance by creating a …","Path on the local filesystem to store the sqlite file","Store the last derivation index for a given keychain.","","Store a raw transaction","","Store a script_pubkey along with its keychain and child …","","Store the metadata of a transaction","","Store a LocalUtxo","","","","","","Type that contains any of the BatchDatabase::Batch types …","Type that can contain any of the Database types defined by …","Type that can contain any of the database configurations …","In-memory ephemeral database","In-memory ephemeral database","Memory database has no config","Simple key-value embedded database based on sled","Simple key-value embedded database based on sled","Simple key-value embedded database based on sled","Configuration type for a sled::Tree database","Sqlite embedded database using rusqlite","Sqlite embedded database using rusqlite","Sqlite embedded database using rusqlite","Configuration type for a sqlite::SqliteDatabase database","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Main directory of the db","Main directory of the db","","","","","","","","","","","","","","Name of the database tree, a separated namespace for the …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","In-memory ephemeral database","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a new empty database","","","","","","","","","","A raw scriptpubkey (including pay-to-pubkey) under Legacy …","Alias for a Descriptor that contains extended derived keys","Extended DescriptorPublicKey that has been derived","Script descriptor","Alias for a Descriptor that can contain extended keys …","Trait implemented on Descriptors to add a method to …","Alias for the type of maps that represent derivation paths …","Trait for types which can be converted into an …","Alias type for a map of public key to secret key","Legacy ScriptContext To be used as P2SH scripts For …","Top-level script AST type","Pay-to-PubKey-Hash","The ScriptContext for Miniscript. Additional type …","Segwitv0 ScriptContext","Pay-to-ScriptHash(includes nested wsh/wpkh/sorted multi)","Pay-to-Witness-PubKey-Hash","Pay-to-Witness-ScriptHash with Segwitv0 context","Computes the Bitcoin address of the descriptor, if one …","","","Get a reference to the inner AstElem representing the root …","","","","","","","","","","","Enumerates all child nodes of the current AST node (self) …","Depending on script Context, some of the Terminals might …","","","Depending on script Context, some of the script resource …","","Check the consensus + policy(if not disabled) rules that …","Consensus rules at the Miniscript satisfaction time. It is …","","","Policy rules at the Miniscript satisfaction time. It is …","","","Check the consensus + policy(if not disabled) rules …","Depending on ScriptContext, fragments can be malleable. …","","","Check whether the given satisfaction is valid under the …","","","Descriptor checksum","","","","","","","","","","","","","","","","","","","","","","","","","","","Derives all wildcard keys in the descriptor using the …","Get the DescriptorType of Descriptor","","","","","","","","Encode as a Bitcoin script","","","","","","Descriptor errors","Computes the “witness script” of the descriptor, i.e. …","Additional information helpful for extra analysis.","Extract the spending policy","","","","","","","","","","","","","","","","","","Add type information(Type and Extdata) to Miniscript based …","","","Attempt to parse an insane(scripts don’t clear sanity …","Parse an expression tree into a descriptor","Parse an expression tree into a Miniscript. As a general …","","","","","","Returns Vec with cloned version of all public keys from …","Returns Vec of PkPkh entries, representing either public …","Returns Vec with hashes of all public keys from the …","Returns child node with given index, if any","Returns Option::Some with cloned n’th public key from …","Returns Option::Some with hash of n’th public key or …","Returns Option::Some with hash of n’th public key from …","Returns satisfying witness and scriptSig to spend an …","Whether the miniscript contains a combination of timelocks","Whether the miniscript has repeated Pk or Pkh","","","","","","","","","","","","","","","","","Extracts the AstElem representing the root of the …","Convert to wallet descriptor","Whether or not the descriptor has any wildcards","Whether the miniscript is malleable","","Creates a new Iter iterator that will iterate over all …","Creates a new PkIter iterator that will iterate over all …","Creates a new PkPkhIter iterator that will iterate over …","Creates a new PkhIter iterator that will iterate over all …","","","Lifting corresponds conversion of miniscript into Policy […","Depending on script context, the size of a satifaction …","","","Maximum size, in bytes, of a satisfying witness. For …","Computes an upper bound on the weight of a satisfying …","Maximum number of witness elements used to satisfy the …","","Construct a new derived key","Create a new bare descriptor from witness script Errors …","Create a new pk descriptor","Create a new PkH descriptor","Create a new sh for a given redeem script Errors when …","Create a new sh sortedmulti descriptor with threshold k …","Create a new sh wrapped wpkh from Pk. Errors when …","Create a new sh wrapped wsh descriptor with witness script …","Create a new sh wrapped wsh sortedmulti descriptor from …","Create a new Wpkh descriptor Will return Err if …","Create a new wsh descriptor from witness script Errors …","Create a new wsh sorted multi descriptor Errors when …","A node in the Abstract Syntax Tree(","Other top level checks that are context specific","Attempt to parse a Script into Miniscript representation. …","Parse a descriptor that may contain secret keys","Attempt to parse an insane(scripts don’t clear sanity …","","","","","","Descriptor policy","Whether all spend paths of miniscript require a signature","Whether the descriptor is safe Checks whether all the …","Check whether the underlying Miniscript is safe under the …","Attempt to produce non-malleable satisfying witness for the","Attempt to produce a malleable satisfying witness for the …","Get the scriptCode of a transaction output.","Computes the scriptpubkey of the descriptor","Size, in bytes of the script-pubkey. If this Miniscript is …","","","","Descriptor templates","","","","","","","","","","","Serialize a descriptor to string with its secret keys","Check top level consensus rules.","Check whether the top-level is type B","Convert a descriptor using abstract keys to one using …","This will panic if translatefpk returns an uncompressed …","","","","","","","","","","","The correctness and malleability type information for the …","","","","","","Computes the scriptSig that will be in place for an …","","","","","","Whether the miniscript can exceed the resource …","","","","","","Compute the checksum of a descriptor","Error during base58 decoding","BIP32 error","The descriptor contains multiple keys with the same BIP32 …","Errors related to the parsing and usage of descriptors","The descriptor contains hardened derivation steps on …","Hex decoding error","Invalid character found in the descriptor checksum","The provided descriptor doesn’t match its checksum","Invalid HD Key path, such as having a wildcard but a …","Error thrown while working with keys","Miniscript error","Key-related error","Error while extracting and manipulating policies","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Absolute timeclock timestamp","Can not add to an item that is Satisfaction::None or …","Can not add to an item that is …","Options to build the satisfaction field in the policy","Can satisfy the policy item","An extra condition that must be satisfied but that is out …","Type for a map of sets of Condition items keyed by each set…","Type for a map of folded sets of Condition items keyed by …","SHA256 then RIPEMD160 preimage hash","Double SHA256 preimage hash","Incompatible conditions (not currently used)","Index out of range for an item to satisfy a …","Can not merge CSV or timelock values unless both are less …","Multi-signature public keys with threshold count","Cannot satisfy or contribute to the policy item","Don’t generate satisfaction field","Not enough items are selected to satisfy a …","Only a partial satisfaction of some kind of threshold …","Can reach the threshold of some kind of threshold policy","Raw public key or extended key fingerprint","Descriptor spending policy","Errors that can happen while extracting and manipulating …","Analyze the given PSBT to check for existing signatures","Like Psbt variant and also check for expired timelocks","Relative timelock locktime","RIPEMD160 preimage hash","Represent if and how much a policy item is satisfied by …","An item that needs to be satisfied","SHA256 preimage hash","Signature for a raw public key","Signature for an extended key fingerprint","Threshold items with threshold count","","","","","","","","","","","","","","","","","","","","","","","","","","","","","How the wallet’s descriptor can satisfy this policy node","Optional CheckSequenceVerify condition","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return the conditions that are set by the spending policy …","","","Returns a unique id for the SatisfiableItem","Identifier for this policy node","","","","","","","","","","","","","","","Returns whether the SatisfiableItem is a leaf item","Returns whether the Satisfaction is a leaf item","Returns true if there are no extra conditions to verify","Type of this policy node","","","","Return whether or not a specific path in the policy tree …","How much a given PSBT already satisfies this policy node …","","","","","","Optional timelock condition","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Current blockchain height","The highest confirmation height between the inputs CSV …","Given PSBT","","","Extra conditions that also need to be satisfied","Extra conditions that also need to be satisfied","Extra conditions that also need to be satisfied","The items that can be satisfied by the descriptor or are …","The items that can be satisfied by the descriptor","Threshold","Threshold","Total number of items","Total number of items","Whether the items are sorted in lexicographic order (used …","Whether the items are sorted in lexicographic order (used …","","","The digest value","The digest value","The digest value","The digest value","The policy items","The raw public key or extended key fingerprint","The required threshold count","The required threshold count","The timestamp value","The locktime value","","","","","","","","","","","","","","","","","","","BIP44 template. Expands to pkh(key/44'/0'/0'/{0,1}/*)","BIP44 public template. Expands to pkh(key/{0,1}/*)","BIP49 template. Expands to sh(wpkh(key/49'/0'/0'/{0,1}/*))","BIP49 public template. Expands to sh(wpkh(key/{0,1}/*))","BIP84 template. Expands to wpkh(key/84'/0'/0'/{0,1}/*)","BIP84 public template. Expands to wpkh(key/{0,1}/*)","Trait for descriptor templates that can be built into a …","Type alias for the return type of DescriptorTemplate, …","P2PKH template. Expands to a descriptor pkh(key)","P2WPKH template. Expands to a descriptor wpkh(key)","P2WPKH-P2SH template. Expands to a descriptor sh(wpkh(key))","","","","","","","","","","","","","","","","","","","Build the complete descriptor","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","BIP32 error","Trait for keys that can be derived.","Container for public or secret keys","The MiniscriptKey corresponding to Descriptors. This can …","A Secret Key that can be either a single key or an Xprv","A Single Descriptor Secret Key with optional origin …","A Single Descriptor Key with optional origin information","Type specifying the amount of entropy required e.g. [u8;32]","Returned error in case of failure","Trait that adds extra useful methods to ScriptContexts","Enum for extended keys that can be either xprv or xpub","Trait that allows generating a key with the default options","Trait for keys that can be generated","Output of a GeneratableKey key generation","Trait for objects that can be turned into a public or …","The key has an invalid checksum","The key is not valid for the given network","The key cannot exist in the given script context","Errors thrown while working with keys","Alias type for a map of public key to secret key","Legacy scripts","Custom error message","Miniscript error","Extra options required by the generate_with_entropy","A private extended key, aka an xprv","Options for generating a PrivateKey","A public extended key, aka an xpub","The ScriptContext for Miniscript. Additional type …","Enum representation of the known valid ScriptContexts","Segwitv0 scripts","Single Secret Key","Single Public Key","Contents of a “sortedmulti” descriptor","Set of valid networks for a key","Xprv","Xpub","Create a set containing mainnet, testnet and regtest","Returns the ScriptContext as a ScriptContextEnum","","Return the public version of this key, by applying either …","BIP-0039","","","","","","","","","","","","","","","","","","","","","","","Depending on script Context, some of the Terminals might …","Depending on script Context, some of the Terminals might …","Depending on script Context, some of the script resource …","Depending on script Context, some of the script resource …","Check the consensus + policy(if not disabled) rules that …","Check the consensus + policy(if not disabled) rules that …","Consensus rules at the Miniscript satisfaction time. It is …","Consensus rules at the Miniscript satisfaction time. It is …","Policy rules at the Miniscript satisfaction time. It is …","Policy rules at the Miniscript satisfaction time. It is …","Check the consensus + policy(if not disabled) rules …","Check the consensus + policy(if not disabled) rules …","Depending on ScriptContext, fragments can be malleable. …","Check whether the given satisfaction is valid under the …","Check whether the given satisfaction is valid under the …","","","","","","","","","","","","","","Whether the generated key should be “compressed” or not","","","","","","","","","","","","","","","","","","","","","","","","","If this public key has a wildcard, replace it by the given …","Computes the public key corresponding to this descriptor …","","","","","","","","","","","","Encode as a Bitcoin script","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create an instance given a public key and a set of valid …","Create an instance given a secret key and a set of valid …","","","Parse an expression tree into a SortedMultiVec","Full path, from the master key","Generate a key given the options with a random entropy","Generate a key with the default options and a random …","Generate a key given the extra options and the entropy","Generate a key with the default options and a given entropy","","","","Return whether or not the key contains the private data","","","","","","","","","","","","","","","","","","","","","","","","","","Turn the key into a DescriptorKey within the requested …","Consume self and turn it into a DescriptorKey by adding …","","","","","","Consume self and turn it into an ExtendedKey","","","Consumes self and returns the key","Transform the ExtendedKey into an ExtendedPrivKey for the …","Transform the ExtendedKey into an ExtendedPubKey for the …","Whether or not the key has a wildcards","Returns whether the script context is Legacy","Returns whether the script context is …","Returns whether the script context is Segwitv0","Returns whether the script context is …","","signatures required","The key","The key","","Create a set only containing mainnet","The fingerprint of the master key associated with this key","Depending on script context, the size of a satifaction …","Maximum size, in bytes, of a satisfying witness. In …","Maximum number of witness elements used to satisfy the …","Compute the intersection of two sets","","","","Create a new instance of SortedMultiVec given a list of …","Origin information","Origin information","Other top level checks that are context specific","Other top level checks that are context specific","Override the computed set of valid networks","","","","public keys inside sorted Multi","utility function to sanity a sorted multi vec","Attempt to produce a satisfying witness for the witness …","Size, in bytes of the script-pubkey. If this Miniscript is …","Create Terminal::Multi containing sorted pubkeys","Create a set containing testnet and regtest","","","","","","","","","","","Check top level consensus rules.","Check top level consensus rules.","Check whether the top-level is type B","Check whether the top-level is type B","This will panic if translatefpk returns an uncompressed …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The language determines which words will be used in a …","The primary type in this crate, most tasks require …","Determines the number of words that will be present in a …","Type for a BIP39 mnemonic with an optional passphrase","The secret value used to derive HD wallet addresses from a …","","","","","","","Get the seed value as a byte slice","","","","","","","","","","","","","Return the number of checksum bits","","","","","","","","","","","","","","","","","","","","","","","Get the original entropy value of the mnemonic phrase as a …","Return the number of entropy bits","","","","","","","","","","","","Get a MnemonicType for a mnemonic phrase representing the …","Get a MnemonicType for an existing mnemonic phrase","Get a MnemonicType for a mnemonic phrase with a specific …","","","","","Create a Mnemonic from pre-generated entropy","Construct a word list from its language code. Returns None …","Create a Mnemonic from an existing mnemonic phrase","","","","","","","","","","","","","","Consume the Mnemonic and return the phrase as a String.","Get the Language","Generates a new Mnemonic","Generates the seed from the Mnemonic and the password.","Get the mnemonic phrase as a string reference.","Outputs the hash in hexadecimal form","Outputs the hash in hexadecimal form","","","","","","","Return the number of entropy+checksum bits","","","","","","","","","","","","","Validate a mnemonic phrase","","","","","Return the number of words","Get the word list for this language","Get a WordMap that allows word -> index lookups in the …","","The address index selection strategy to use to derived an …","A derived address and the index it was found at For …","Trait to check if a value is below the dust limit","Return the address for the current descriptor index if it …","Return a new address after incrementing the current …","Return the address for a specific descriptor index. Does …","Return the address for a specific descriptor index and …","A Bitcoin wallet","Add an address validator","Add an external signer","Address","Address validation callbacks","","","","","","","Broadcast a transaction to the network","Bump the fee of a transaction previously created with this …","Start building a transaction.","Return a reference to the internal blockchain client","Coin selection","","","","","","","","","","","","Wallet export","Try to finalize a PSBT","","","","","","","","Return a derived address using the external descriptor, …","Return the balance, meaning the sum of this wallet’s …","Returns the descriptor used to create adddresses for a …","Return a fake wallet that appears to be funded for testing.","get the corresponding PSBT Input for a LocalUtxo","Return a single transactions made and received by the …","Returns the UTXO owned by this wallet corresponding to …","Child index of this address","","","","","","","Check whether or not a value is below dust limit","Return whether or not a script is part of this wallet …","Return the list of transactions made and received by the …","Return the list of unspent outputs of this wallet","","Get the Bitcoin network the wallet is using.","Create a new “online” wallet","Create a new “offline” wallet","Return the spending policies for the wallet’s descriptor","Return the “public” version of the wallet’s …","Return the secp256k1 context used for all signing …","Sign a transaction with all the wallet’s signers, in the …","Generalized signers","Sync the internal database with the blockchain","Cross-platform time","","","","","","","","Transaction builder","","","","","","","","","Trait to build address validators","Errors that can be returned to fail the validation of an …","Network connection error","Invalid script","A custom error message","Network request timeout error","User rejected the address","","","","","","","","","","","","","","","","","","","","","Validate or inspect an address","","","Branch and bound coin selection","Trait for generalized coin selection algorithms","Result of a successful coin selection","Default coin selection algorithm used by TxBuilder if not …","Simple and dumb coin selection","","","","","","","","","Perform the coin selection","","","","","","","","","","","","","","Total fee amount in satoshi","","","","","","","","","","","","","The total value of the inputs selected from the local …","Create new instance with target size for change output","List of outputs selected for use as inputs","The total value of the inputs selected.","","","","","","","","","","","","","","Structure that contains the export of a wallet","Earliest block to rescan when looking for the wallet’s …","","","Return the internal descriptor, if present","","","Return the external descriptor","","","Export a wallet","","","","","","Arbitrary label for the wallet","","","","","","","","Dummy identifier","The fingerprint of a BIP32 extended key","Input index is out of range","The private key in use has the right fingerprint but …","The non_witness_utxo specified is invalid","The fingerprint and derivation path are missing from the …","The private key is missing for the required public key","The non_witness_utxo field of the transaction is required …","The witness_script field of the transaction is requied to …","The witness_utxo field of the transaction is required to …","The psbt contains a non-SIGHASH_ALL sighash in one of its …","Bitcoin HASH160 (RIPEMD160 after SHA256) hash of an ECDSA …","Options for a software signer","Trait for signers","Signing error","Identifier of a signer in the SignersContainers. Used as a …","Defines the order in which signers are called","Container for multiple signers","The user canceled the operation","Adds an external signer to the container for the specified …","Whether the signer should use the sighash_type set in the …","","Create a map of public keys to secret keys","Whether the wallet should assume a specific height has …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return the secret key for the signer","","","","","","","","","Finds the signer with lowest ordering for a given id in …","","","","","","","","","","","","","","","","","Return the SignerId for this signer","Returns the list of identifiers of all the signers in the …","","","","","","","","","","","","","Default constructor","","","Removes a signer from the container and returns it","Sign a PSBT","Return whether or not the signer signs the whole …","Returns the list of signers in the container, sorted by …","","","","","","","Whether the signer should trust the witness_utxo, if the …","","","","","","","","","","","","","","","","","","","","","","","","Return the current timestamp in seconds","BIP69 / Lexicographic","Marker type to indicate the TxBuilder is being used to …","Use both change and non-change outputs (default)","Only use non-change outputs (see …","Policy regarding the use of change outputs when creating a …","Marker type to indicate the TxBuilder is being used to …","Only use change outputs (see TxBuilder::only_spend_change)","Randomized (default)","A transaction builder","Context in which the TxBuilder is valid","Ordering of the transaction’s inputs and outputs","Unchanged","Add a foreign UTXO i.e. a UTXO not owned by this wallet.","Fill-in the PSBT_GLOBAL_XPUB field with the extended keys …","Add a recipient to the internal list","Add a utxo to the internal list of unspendable utxos","Add a utxo to the internal list of utxos that must be spent","Add the list of outpoints to the internal list of UTXOs …","Explicitly tells the wallet that it is allowed to reduce …","","","","","","","","","","","Set a specific ChangeSpendPolicy. See …","","","","","","","","","","","","","Choose the coin selection algorithm","","","","","","","","","","","","","","","Do not spend change outputs","Sets the address to drain excess coins to.","Spend all the available inputs. This respects filters like …","","","","","","Enable signaling RBF","Enable signaling RBF with a specific nSequence value","","","Set an absolute fee","Set a custom fee rate","Finish the building the transaction.","","","","","","","","","","","","","","","Fill-in the psbt::Output::redeem_script and …","","","","","","","","","","","Only spend utxos added by add_utxo.","Use a specific nLockTime while creating the transaction","Only spend change outputs","Only Fill-in the psbt::Input::witness_utxo field when …","Choose the ordering for inputs and outputs of the …","","","Set the policy path to use while creating the transaction …","Replace the recipients already added with a new list","Sign with a specific sig hash","Sort transaction inputs and outputs by TxOrdering variant","","","","","","","","","","","","","","","","","","","","","Replace the internal list of unspendable utxos with a new …","Build a transaction with a specific version","","","","",""],"i":[1,1,1,1,1,1,0,1,1,1,0,1,2,0,1,1,1,3,1,1,1,2,1,1,1,1,1,1,1,1,0,3,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,2,1,2,4,2,0,1,2,4,5,6,3,7,8,1,2,4,5,6,3,7,8,2,2,4,5,6,3,7,8,2,4,5,6,3,7,8,7,0,4,7,8,4,1,2,4,5,6,3,7,8,1,2,4,5,6,3,7,8,0,0,2,5,7,8,1,2,4,5,6,3,7,8,2,4,5,6,3,7,8,7,4,4,1,1,2,4,5,6,3,7,8,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,4,5,6,3,7,8,4,4,4,4,2,5,2,5,8,1,2,4,5,6,3,7,8,1,2,4,5,6,3,7,8,9,9,10,11,5,0,4,5,6,3,7,8,8,3,5,4,7,6,7,2,5,7,8,4,8,2,4,5,6,3,7,8,1,7,1,2,4,5,6,3,7,8,1,2,4,5,6,3,7,8,7,3,5,1,2,4,5,6,3,7,8,6,12,7,0,1,2,4,5,6,3,7,8,0,2,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,38,39,40,41,42,43,43,44,0,0,45,0,0,44,44,0,0,0,0,0,44,46,47,44,46,47,48,44,46,47,44,46,47,0,44,46,47,44,46,47,44,46,47,0,44,0,48,44,44,46,47,45,48,44,48,48,44,44,46,47,44,46,47,0,0,0,48,48,44,46,47,44,46,47,44,46,47,44,46,47,49,46,47,44,46,47,0,0,50,51,50,51,50,51,50,51,50,51,50,51,51,50,51,50,51,51,50,51,51,50,51,50,50,50,50,51,51,51,51,50,50,50,50,50,51,50,51,51,51,50,50,51,50,51,50,51,50,51,50,51,52,53,54,55,56,57,58,0,0,0,0,58,58,58,58,58,58,58,58,0,58,58,58,0,58,58,58,59,60,58,59,61,62,60,63,58,59,61,62,60,63,58,62,60,63,60,63,61,61,59,59,61,62,60,63,58,59,61,62,60,63,58,60,63,59,61,62,60,63,58,60,63,62,59,61,62,60,63,58,58,59,61,62,60,63,58,58,58,58,58,58,62,62,62,61,61,59,62,61,59,59,61,62,60,63,58,59,61,62,60,63,58,61,59,60,63,63,59,62,63,61,61,60,63,62,63,60,60,63,60,63,58,59,61,62,60,63,58,59,61,62,60,63,58,59,61,62,60,63,58,59,61,62,60,63,58,64,65,66,67,68,0,0,69,70,69,70,69,70,70,69,70,69,70,70,69,70,70,69,70,69,69,70,69,69,69,69,69,70,69,70,70,70,70,69,70,70,70,70,69,70,69,70,69,70,70,69,70,71,0,0,0,0,71,71,71,71,71,71,71,71,71,71,71,72,73,72,74,71,73,72,74,71,73,72,72,73,72,74,71,73,72,74,71,72,74,73,72,74,71,72,73,73,72,71,71,73,72,74,71,71,71,71,71,71,71,73,73,73,73,73,72,74,71,73,72,74,71,72,73,72,72,73,72,72,72,72,71,73,72,74,71,73,72,74,71,73,72,74,71,73,72,74,71,73,75,76,77,78,79,80,81,82,83,84,85,0,0,86,0,0,0,0,85,87,87,87,88,87,85,87,87,89,87,89,87,89,87,89,87,89,87,89,87,87,87,87,88,87,87,87,86,87,88,87,88,87,88,87,88,87,88,87,88,87,88,87,87,87,88,87,88,87,88,87,88,87,0,87,87,89,87,89,87,89,87,89,87,89,87,87,87,87,87,0,0,0,90,91,92,90,91,92,0,90,91,92,0,91,90,91,93,94,92,90,91,93,94,92,91,91,90,91,90,91,90,91,90,91,90,91,90,91,90,91,93,94,92,90,91,93,94,92,93,94,92,90,91,93,94,92,91,91,93,94,92,90,90,90,90,91,91,91,91,93,94,92,92,92,92,91,91,91,91,91,91,91,91,90,91,93,94,92,90,91,93,94,92,91,91,91,91,93,94,93,94,92,90,91,90,91,90,91,90,91,90,91,93,90,91,93,94,92,90,91,93,94,92,90,91,93,94,92,90,91,93,94,92,95,96,97,98,99,100,101,102,103,0,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,105,0,0,0,0,0,0,0,0,0,0,105,0,0,105,105,105,105,106,107,108,109,105,106,107,108,109,105,106,107,108,108,110,106,107,110,107,110,110,106,107,110,106,107,110,110,106,107,110,106,107,0,109,105,106,107,108,109,105,106,107,108,109,105,106,107,108,109,109,105,106,107,108,109,105,106,107,108,105,105,105,108,109,105,106,107,108,108,109,105,106,107,108,0,105,108,111,105,108,109,109,105,105,106,107,108,108,105,108,109,105,106,107,108,108,105,108,108,105,108,109,105,106,107,108,108,108,108,108,108,108,108,105,108,108,109,105,106,107,108,109,109,105,106,107,108,109,105,106,107,108,108,112,105,108,109,108,108,108,108,105,108,108,110,106,107,108,105,108,105,109,105,105,105,105,105,105,105,105,105,105,105,108,110,108,105,108,109,105,106,107,108,0,108,105,108,108,108,105,105,108,105,108,109,0,109,105,106,107,108,109,109,109,105,108,105,110,110,105,108,109,105,106,107,108,109,105,106,107,108,108,109,105,106,107,108,105,109,105,106,107,108,108,113,114,115,116,117,0,118,118,118,0,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,119,120,121,122,123,124,125,126,127,128,128,0,129,0,0,0,127,127,128,128,128,127,129,130,128,129,129,0,0,0,130,130,127,127,0,0,127,127,127,127,128,131,127,129,132,133,128,130,131,127,129,132,133,128,130,131,127,129,132,133,130,131,127,129,132,133,130,133,132,133,131,133,131,127,129,132,133,128,130,131,127,129,132,133,128,130,131,127,129,132,133,128,130,133,128,131,127,129,132,133,128,128,130,131,127,129,129,132,132,133,128,130,132,133,133,127,132,131,127,129,132,133,128,130,131,127,129,132,133,128,130,127,129,133,132,133,128,133,132,132,131,127,129,132,133,133,131,127,129,132,133,130,128,131,127,129,132,133,128,130,131,127,129,132,133,128,130,131,127,129,132,133,128,130,131,127,129,132,133,128,130,134,135,135,135,136,137,138,139,140,139,140,139,140,139,140,139,140,141,142,143,144,145,146,147,148,148,147,149,150,151,152,153,154,155,156,157,158,159,154,155,156,157,158,159,155,157,159,0,0,0,0,0,0,0,0,0,0,0,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,160,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,161,0,0,0,0,0,0,162,162,0,0,0,0,0,0,161,161,161,0,0,163,161,161,162,164,0,164,0,0,163,165,166,0,0,165,166,0,167,161,165,0,164,168,169,163,170,161,171,166,172,173,165,164,168,169,163,170,161,171,166,172,173,165,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,163,170,171,166,172,163,170,171,166,172,171,166,172,170,170,164,168,168,169,163,170,161,171,166,172,173,165,164,168,169,163,170,161,171,166,172,173,165,166,166,164,168,169,163,170,161,171,166,172,173,165,171,163,171,166,172,169,163,170,161,161,171,171,166,166,172,173,165,165,171,164,164,164,168,169,163,170,161,161,161,171,166,172,173,165,169,169,166,165,171,166,162,174,162,174,171,166,172,164,171,166,172,164,168,169,163,170,161,171,166,172,173,165,164,168,169,163,170,161,171,166,172,173,165,175,176,168,168,169,166,165,176,164,168,168,164,164,166,167,163,167,163,166,171,172,173,171,0,166,110,171,171,0,171,166,172,171,172,173,110,110,169,171,166,172,171,171,171,171,171,0,163,170,171,166,172,166,161,171,166,165,110,110,110,110,171,164,168,169,163,170,161,171,166,172,173,165,164,168,169,163,170,161,171,166,172,173,165,164,168,169,163,170,161,171,166,172,173,165,164,168,169,163,170,161,171,166,172,173,165,177,178,179,180,181,182,183,184,185,186,186,186,186,186,186,186,0,0,0,0,0,186,187,187,187,187,187,188,189,188,188,186,189,187,188,186,189,187,188,188,187,186,189,187,188,186,189,187,188,186,187,186,189,187,188,186,189,187,188,186,189,187,188,189,187,186,186,189,189,189,189,187,187,188,188,188,187,187,187,186,189,187,188,189,186,189,189,186,189,187,188,186,189,187,188,189,188,189,188,189,189,189,188,189,189,188,186,189,187,188,189,187,187,186,189,187,188,186,189,187,188,186,189,187,188,189,186,189,187,188,187,186,186,188,0,0,0,190,190,190,190,0,191,191,192,0,191,190,192,191,190,192,191,191,191,191,0,191,190,192,192,191,190,192,191,190,192,192,0,191,191,190,192,192,191,190,192,191,191,191,0,191,191,191,192,191,190,192,191,190,192,193,191,191,191,192,191,191,191,191,191,191,191,0,191,0,192,191,190,192,191,190,192,0,191,190,192,191,190,192,194,195,0,0,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,197,196,198,0,0,0,0,0,199,200,201,199,200,201,200,200,202,200,201,200,201,199,200,201,199,200,201,199,200,201,199,199,200,201,199,200,201,199,200,201,199,200,201,199,201,199,199,200,199,200,201,199,200,201,199,200,201,199,200,201,0,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,204,205,205,206,206,206,206,206,206,206,206,206,205,0,0,0,0,0,0,206,207,208,206,207,208,205,206,204,207,208,205,206,204,207,208,205,206,204,207,208,205,206,204,207,208,205,204,204,207,208,205,206,204,207,208,205,206,204,207,208,209,205,206,204,207,208,205,206,204,207,205,206,206,204,207,208,205,205,205,206,204,207,207,208,205,205,209,207,205,206,204,207,208,205,206,204,207,208,205,204,207,205,204,207,209,209,207,205,206,204,207,208,206,208,205,206,204,207,208,205,206,204,207,208,205,206,204,207,208,205,206,204,207,208,210,211,212,0,213,0,214,214,0,0,214,213,0,0,0,213,215,215,215,215,215,215,215,216,217,215,213,214,216,217,215,213,214,215,216,217,215,213,214,216,217,215,213,214,213,214,215,216,217,213,214,216,217,215,213,214,216,217,215,213,214,215,215,215,216,217,215,213,214,215,215,213,214,215,215,215,216,217,215,213,214,216,217,215,213,214,213,214,213,214,215,216,217,215,213,214,216,217,215,213,214,215,215,215,215,215,213,214,215,215,215,213,216,217,215,213,214,216,217,215,213,214,216,217,215,213,214,216,217,215,213,214,215,215,216,217,215,213,214],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["u8",15]],[[],["fail",8]],[[]],[[],["f32",15]],[[],["usize",15]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[["vec",3,["u5","global"]],["result",4,["vec"]]]],[[],["keychainkind",4]],[[],["feerate",3]],[[],["localutxo",3]],[[],["weightedutxo",3]],[[],["utxo",4]],[[],["transactiondetails",3]],[[],["confirmationtime",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,[[]],[[],["transactiondetails",3]],[[],["confirmationtime",3]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["keychainkind",4]],["bool",15]],[[["feerate",3]],["bool",15]],[[["localutxo",3]],["bool",15]],[[["weightedutxo",3]],["bool",15]],[[["utxo",4]],["bool",15]],[[["transactiondetails",3]],["bool",15]],[[["confirmationtime",3]],["bool",15]],null,[[["usize",15]],["u64",15]],[[["usize",15]],["u64",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],null,[[["signererror",4]]],[[["psbtparseerror",4]]],[[["addressvalidatorerror",4]]],[[["policyerror",4]]],[[]],[[["keyerror",4]],["error",4]],[[["error",4]]],[[["error",4]]],[[["error",4]]],[[["error",4]]],[[["error",3]]],[[["error",4]]],[[["error",4]]],[[["error",4]]],[[["error",4]]],[[["error",4]]],[[["error",4]]],[[["compactfilterserror",4]]],[[["esploraerror",4]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["f32",15]]],[[["f32",15]]],[[["u64",15],["usize",15]],["feerate",3]],[[["u64",15],["usize",15]],["feerate",3]],[[],["u64",15]],[[],["u64",15]],[[]],[[]],null,[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["option",4,["keysource"]],["keysource",6],["derivationpath",3]],[["descriptorkey",4],["keyerror",4],["result",4,["descriptorkey","keyerror"]]]],[[],[["result",4,["extendedkey","keyerror"]],["keyerror",4],["extendedkey",4]]],[[["secp256k1",3],["network",4]],[["result",4,["descriptorerror"]],["descriptorerror",4]]],[[["secp256k1",3],["network",4]],[["result",4,["descriptorerror"]],["descriptorerror",4]]],null,null,[[["feerate",3]],["bool",15]],[[["localutxo",3]],["bool",15]],[[["weightedutxo",3]],["bool",15]],[[["utxo",4]],["bool",15]],[[["transactiondetails",3]],["bool",15]],[[["confirmationtime",3]],["bool",15]],[[["option",4,["u32"]],["u64",15],["u32",15],["option",4,["u64"]]],["option",4]],[[],["outpoint",3]],null,[[["feerate",3]],[["option",4,["ordering"]],["ordering",4]]],null,null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["feerate",3]]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[],["txout",3]],null,[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,[[],["usize",15]],null,[[],["str",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[],["result",4]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[],["capability",4]],[[],["noopprogress",3]],[[],["logprogress",3]],[[]],[[]],[[]],null,[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],null,[[["capability",4]],["bool",15]],null,[[["usize",15]],[["result",4,["feerate","error"]],["feerate",3],["error",4]]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[],[["result",4,["error"]],["error",4]]],[[],[["hashset",3,["capability"]],["capability",4]]],[[],["u64",15]],[[],[["error",4],["u32",15],["result",4,["u32","error"]]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[],["logprogress",3]],[[],["noopprogress",3]],[[]],[[["progress",8]],[["result",4,["error"]],["error",4]]],[[["progress",8]],[["result",4,["error"]],["error",4]]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[["f32",15],["string",3],["option",4,["string"]]],[["result",4,["error"]],["error",4]]],[[["f32",15],["string",3],["option",4,["string"]]],[["result",4,["error"]],["error",4]]],[[["f32",15],["string",3],["option",4,["string"]]],[["result",4,["error"]],["error",4]]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[],["anyblockchainconfig",4]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["anyblockchainconfig",4]],["bool",15]],[[["usize",15]],[["result",4,["feerate","error"]],["feerate",3],["error",4]]],[[["formatter",3]],["result",6]],[[["compactfiltersblockchain",3]]],[[["esplorablockchain",3]]],[[["electrumblockchain",3]]],[[]],[[["esplorablockchainconfig",3]]],[[["electrumblockchainconfig",3]]],[[["compactfiltersblockchainconfig",3]]],[[]],[[],[["result",4,["error"]],["error",4]]],[[],[["hashset",3,["capability"]],["capability",4]]],[[],[["error",4],["u32",15],["result",4,["u32","error"]]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[["anyblockchainconfig",4]],["bool",15]],[[],["result",4]],[[["progress",8]],[["result",4,["error"]],["error",4]]],[[["progress",8]],[["result",4,["error"]],["error",4]]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["transaction",3]]],null,[[],["fail",8]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[],["bitcoinpeerconfig",3]],[[],["compactfiltersblockchainconfig",3]],[[]],[[]],[[["network",4],["arc",3,["mempool"]],["mempool",3],["tosocketaddrs",8]],[["compactfilterserror",4],["result",4,["compactfilterserror"]]]],[[["totargetaddr",8],["arc",3,["mempool"]],["option",4],["mempool",3],["network",4],["tosocketaddrs",8]],[["compactfilterserror",4],["result",4,["compactfilterserror"]]]],[[],["mempool",3]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["bitcoinpeerconfig",3]],["bool",15]],[[["compactfiltersblockchainconfig",3]],["bool",15]],[[["usize",15]],[["result",4,["feerate","error"]],["feerate",3],["error",4]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[["error",3]]],[[["error",3]]],[[["error",4]]],[[["systemtimeerror",3]]],[[["error",4]]],[[]],[[],[["result",4,["error"]],["error",4]]],[[],[["hashset",3,["capability"]],["capability",4]]],[[],[["error",4],["u32",15],["result",4,["u32","error"]]]],[[],[["arc",3,["mempool"]],["mempool",3]]],[[],["network",4]],[[["inventory",4]],[["transaction",3],["option",4,["transaction"]]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[],["versionmessage",3]],[[["txid",3]],["bool",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],[["vec",3,["transaction"]],["transaction",3]]],[[["bitcoinpeerconfig",3]],["bool",15]],[[["compactfiltersblockchainconfig",3]],["bool",15]],null,[[]],[[["usize",15],["path",3],["vec",3,["peer"]],["asref",8,["path"]],["option",4,["usize"]],["peer",3]],[["compactfilterserror",4],["result",4,["compactfilterserror"]]]],null,[[["option",4,["duration"]],["str",15],["duration",3]],[["compactfilterserror",4],["result",4,["option","compactfilterserror"]],["option",4,["networkmessage"]]]],[[["networkmessage",4]],[["compactfilterserror",4],["result",4,["compactfilterserror"]]]],[[],["result",4]],[[],["result",4]],[[["progress",8]],[["result",4,["error"]],["error",4]]],null,null,null,null,[[]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[],["electrumblockchainconfig",3]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["electrumblockchainconfig",3]],["bool",15]],[[["usize",15]],[["result",4,["feerate","error"]],["feerate",3],["error",4]]],[[["formatter",3]],["result",6]],[[]],[[["client",3]]],[[]],[[],[["result",4,["error"]],["error",4]]],[[],[["hashset",3,["capability"]],["capability",4]]],[[],[["error",4],["u32",15],["result",4,["u32","error"]]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[["electrumblockchainconfig",3]],["bool",15]],null,[[],["result",4]],[[["progress",8]],[["result",4,["error"]],["error",4]]],null,null,null,[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["fail",8]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[],["esplorablockchainconfig",3]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["esplorablockchainconfig",3]],["bool",15]],[[["usize",15]],[["result",4,["feerate","error"]],["feerate",3],["error",4]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[["error",4]]],[[["error",3]]],[[["transport",3]]],[[["error",4]]],[[]],[[["parseinterror",3]]],[[["error",4]]],[[],[["result",4,["error"]],["error",4]]],[[],[["hashset",3,["capability"]],["capability",4]]],[[],[["error",4],["u32",15],["result",4,["u32","error"]]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[["esplorablockchainconfig",3]],["bool",15]],[[["str",15],["usize",15]]],null,[[],["result",4]],[[["progress",8]],[["result",4,["error"]],["error",4]]],null,null,null,[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[["agent",3]]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[["asref",8],["keychainkind",4]],[["result",4,["error"]],["error",4]]],[[["asref",8],["keychainkind",4]],[["result",4,["error"]],["error",4]]],[[],[["result",4,["error"]],["error",4]]],[[],[["result",4,["error"]],["error",4]]],null,[[["keychainkind",4]],[["result",4,["option","error"]],["option",4,["u32"]],["error",4]]],[[["keychainkind",4]],[["result",4,["option","error"]],["option",4,["u32"]],["error",4]]],[[["script",3]],[["error",4],["result",4,["option","error"]],["option",4]]],[[["script",3]],[["error",4],["result",4,["option","error"]],["option",4]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[["keychainkind",4],["u32",15]],[["result",4,["option","error"]],["option",4,["script"]],["error",4]]],[[["keychainkind",4],["u32",15]],[["result",4,["option","error"]],["option",4,["script"]],["error",4]]],[[["bool",15],["txid",3]],[["option",4,["transactiondetails"]],["result",4,["option","error"]],["error",4]]],[[["bool",15],["txid",3]],[["option",4,["transactiondetails"]],["result",4,["option","error"]],["error",4]]],[[["outpoint",3]],[["option",4,["localutxo"]],["result",4,["option","error"]],["error",4]]],[[["outpoint",3]],[["option",4,["localutxo"]],["result",4,["option","error"]],["error",4]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],[["result",4,["error"]],["error",4]]],[[],[["result",4,["error"]],["error",4]]],[[["formatter",3]],["result",6]],[[]],[[],[["result",4,["error"]],["error",4]]],[[],[["result",4,["error"]],["error",4]]],[[["keychainkind",4]],[["result",4,["option","error"]],["option",4,["u32"]],["error",4]]],[[["keychainkind",4]],[["result",4,["option","error"]],["option",4,["u32"]],["error",4]]],[[["script",3]],[["error",4],["result",4,["option","error"]],["option",4]]],[[["script",3]],[["error",4],["result",4,["option","error"]],["option",4]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[["keychainkind",4],["u32",15]],[["result",4,["option","error"]],["option",4,["script"]],["error",4]]],[[["keychainkind",4],["u32",15]],[["result",4,["option","error"]],["option",4,["script"]],["error",4]]],[[["bool",15],["txid",3]],[["option",4,["transactiondetails"]],["result",4,["option","error"]],["error",4]]],[[["bool",15],["txid",3]],[["option",4,["transactiondetails"]],["result",4,["option","error"]],["error",4]]],[[["outpoint",3]],[["option",4,["localutxo"]],["result",4,["option","error"]],["error",4]]],[[["outpoint",3]],[["option",4,["localutxo"]],["result",4,["option","error"]],["error",4]]],[[["keychainkind",4]],[["error",4],["u32",15],["result",4,["u32","error"]]]],[[["keychainkind",4]],[["error",4],["u32",15],["result",4,["u32","error"]]]],[[],["usize",15]],[[]],[[],[["vec",3,["transaction"]],["result",4,["vec","error"]],["error",4]]],[[],[["vec",3,["transaction"]],["result",4,["vec","error"]],["error",4]]],[[["option",4,["keychainkind"]],["keychainkind",4]],[["result",4,["vec","error"]],["vec",3,["script"]],["error",4]]],[[["option",4,["keychainkind"]],["keychainkind",4]],[["result",4,["vec","error"]],["vec",3,["script"]],["error",4]]],[[["bool",15]],[["error",4],["result",4,["vec","error"]],["vec",3,["transactiondetails"]]]],[[["bool",15]],[["error",4],["result",4,["vec","error"]],["vec",3,["transactiondetails"]]]],[[],[["result",4,["vec","error"]],["vec",3,["localutxo"]],["error",4]]],[[],[["result",4,["vec","error"]],["vec",3,["localutxo"]],["error",4]]],null,[[["string",3]]],null,[[["keychainkind",4],["u32",15]],[["result",4,["error"]],["error",4]]],[[["keychainkind",4],["u32",15]],[["result",4,["error"]],["error",4]]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[["u32",15],["keychainkind",4],["script",3]],[["result",4,["error"]],["error",4]]],[[["u32",15],["keychainkind",4],["script",3]],[["result",4,["error"]],["error",4]]],[[["transactiondetails",3]],[["result",4,["error"]],["error",4]]],[[["transactiondetails",3]],[["result",4,["error"]],["error",4]]],[[["localutxo",3]],[["result",4,["error"]],["error",4]]],[[["localutxo",3]],[["result",4,["error"]],["error",4]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["asref",8],["keychainkind",4]],[["result",4,["error"]],["error",4]]],[[],[["result",4,["error"]],["error",4]]],[[["keychainkind",4]],[["result",4,["option","error"]],["option",4,["u32"]],["error",4]]],[[["keychainkind",4]],[["result",4,["option","error"]],["option",4,["u32"]],["error",4]]],[[["script",3]],[["error",4],["result",4,["option","error"]],["option",4]]],[[["script",3]],[["error",4],["result",4,["option","error"]],["option",4]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[["keychainkind",4],["u32",15]],[["result",4,["option","error"]],["option",4,["script"]],["error",4]]],[[["keychainkind",4],["u32",15]],[["result",4,["option","error"]],["option",4,["script"]],["error",4]]],[[["bool",15],["txid",3]],[["option",4,["transactiondetails"]],["result",4,["option","error"]],["error",4]]],[[["bool",15],["txid",3]],[["option",4,["transactiondetails"]],["result",4,["option","error"]],["error",4]]],[[["outpoint",3]],[["option",4,["localutxo"]],["result",4,["option","error"]],["error",4]]],[[["outpoint",3]],[["option",4,["localutxo"]],["result",4,["option","error"]],["error",4]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],[["result",4,["error"]],["error",4]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[["sqlitedatabase",3]]],[[["tree",3]]],[[["memorydatabase",3]]],[[]],[[]],[[]],[[]],[[]],[[["sleddbconfiguration",3]]],[[["sqlitedbconfiguration",3]]],[[],[["result",4,["error"]],["error",4]]],[[["keychainkind",4]],[["result",4,["option","error"]],["option",4,["u32"]],["error",4]]],[[["script",3]],[["error",4],["result",4,["option","error"]],["option",4]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[["keychainkind",4],["u32",15]],[["result",4,["option","error"]],["option",4,["script"]],["error",4]]],[[["bool",15],["txid",3]],[["option",4,["transactiondetails"]],["result",4,["option","error"]],["error",4]]],[[["outpoint",3]],[["option",4,["localutxo"]],["result",4,["option","error"]],["error",4]]],[[["keychainkind",4]],[["error",4],["u32",15],["result",4,["u32","error"]]]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[],[["vec",3,["transaction"]],["result",4,["vec","error"]],["error",4]]],[[["option",4,["keychainkind"]],["keychainkind",4]],[["result",4,["vec","error"]],["vec",3,["script"]],["error",4]]],[[["bool",15]],[["error",4],["result",4,["vec","error"]],["vec",3,["transactiondetails"]]]],[[],[["result",4,["vec","error"]],["vec",3,["localutxo"]],["error",4]]],null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["keychainkind",4],["u32",15]],[["result",4,["error"]],["error",4]]],[[["keychainkind",4],["u32",15]],[["result",4,["error"]],["error",4]]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[["u32",15],["keychainkind",4],["script",3]],[["result",4,["error"]],["error",4]]],[[["u32",15],["keychainkind",4],["script",3]],[["result",4,["error"]],["error",4]]],[[["transactiondetails",3]],[["result",4,["error"]],["error",4]]],[[["transactiondetails",3]],[["result",4,["error"]],["error",4]]],[[["localutxo",3]],[["result",4,["error"]],["error",4]]],[[["localutxo",3]],[["result",4,["error"]],["error",4]]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[["asref",8],["keychainkind",4]],[["result",4,["error"]],["error",4]]],[[],[["result",4,["error"]],["error",4]]],[[],["memorydatabase",3]],[[["keychainkind",4]],[["result",4,["option","error"]],["option",4,["u32"]],["error",4]]],[[["script",3]],[["error",4],["result",4,["option","error"]],["option",4]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[["keychainkind",4],["u32",15]],[["result",4,["option","error"]],["option",4,["script"]],["error",4]]],[[["bool",15],["txid",3]],[["option",4,["transactiondetails"]],["result",4,["option","error"]],["error",4]]],[[["outpoint",3]],[["option",4,["localutxo"]],["result",4,["option","error"]],["error",4]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],[["result",4,["error"]],["error",4]]],[[["formatter",3]],["result",6]],[[]],[[],[["result",4,["error"]],["error",4]]],[[["keychainkind",4]],[["result",4,["option","error"]],["option",4,["u32"]],["error",4]]],[[["script",3]],[["error",4],["result",4,["option","error"]],["option",4]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[["keychainkind",4],["u32",15]],[["result",4,["option","error"]],["option",4,["script"]],["error",4]]],[[["bool",15],["txid",3]],[["option",4,["transactiondetails"]],["result",4,["option","error"]],["error",4]]],[[["outpoint",3]],[["option",4,["localutxo"]],["result",4,["option","error"]],["error",4]]],[[["keychainkind",4]],[["error",4],["u32",15],["result",4,["u32","error"]]]],[[],["usize",15]],[[]],[[],[["vec",3,["transaction"]],["result",4,["vec","error"]],["error",4]]],[[["option",4,["keychainkind"]],["keychainkind",4]],[["result",4,["vec","error"]],["vec",3,["script"]],["error",4]]],[[["bool",15]],[["error",4],["result",4,["vec","error"]],["vec",3,["transactiondetails"]]]],[[],[["result",4,["vec","error"]],["vec",3,["localutxo"]],["error",4]]],[[]],[[["keychainkind",4],["u32",15]],[["result",4,["error"]],["error",4]]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[["u32",15],["keychainkind",4],["script",3]],[["result",4,["error"]],["error",4]]],[[["transactiondetails",3]],[["result",4,["error"]],["error",4]]],[[["localutxo",3]],[["result",4,["error"]],["error",4]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["network",4]],[["address",3],["result",4,["address","error"]],["error",4]]],[[],["scriptcontextenum",4]],[[],["scriptcontextenum",4]],[[],["terminal",4]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[["miniscript",3],["global",3],["vec",3,["miniscript","global"]]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["terminal",4]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["terminal",4]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["terminal",4]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],null,[[],["deriveddescriptorkey",3]],[[],["descriptor",4]],[[],["legacy",4]],[[],["segwitv0",4]],[[],["miniscript",3]],[[]],[[]],[[]],[[]],[[]],[[],["ordering",4]],[[["descriptor",4]],["ordering",4]],[[["legacy",4]],["ordering",4]],[[["segwitv0",4]],["ordering",4]],[[["miniscript",3]],["ordering",4]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["u32",15]],[["descriptor",4,["descriptorpublickey"]],["descriptorpublickey",4]]],[[],["descriptortype",4]],[[],[["descriptor",4],["result",4,["descriptor"]]]],[[],[["result",4,["miniscript"]],["miniscript",3]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["script",3]],[[],["bool",15]],[[["descriptor",4]],["bool",15]],[[["legacy",4]],["bool",15]],[[["segwitv0",4]],["bool",15]],[[["miniscript",3]],["bool",15]],null,[[],["script",3]],null,[[["buildsatisfaction",4],["signerscontainer",3],["secp256k1",3]],[["option",4,["policy"]],["descriptorerror",4],["result",4,["option","descriptorerror"]]]],[[["buildsatisfaction",4],["signerscontainer",3],["secp256k1",3]],[["option",4,["policy"]],["error",4],["result",4,["option","error"]]]],[[["buildsatisfaction",4],["signerscontainer",3],["secp256k1",3]],[["option",4,["policy"]],["error",4],["result",4,["option","error"]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[],["bool",15]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[["terminal",4]],[["miniscript",3],["error",4],["result",4,["miniscript","error"]]]],[[["str",15]],[["error",4],["result",4,["descriptor","error"]],["descriptor",4]]],[[["str",15]],[["miniscript",3],["error",4],["result",4,["miniscript","error"]]]],[[["str",15]],[["miniscript",3],["error",4],["result",4,["miniscript","error"]]]],[[["tree",3]],[["error",4],["result",4,["descriptor","error"]],["descriptor",4]]],[[["tree",3]],[["miniscript",3],["error",4],["result",4,["miniscript","error"]]]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],[["vec",3,["global"]],["global",3]]],[[],[["pkpkh",4],["vec",3,["pkpkh","global"]],["global",3]]],[[],[["global",3],["vec",3,["global"]]]],[[["usize",15]],[["option",4,["miniscript"]],["miniscript",3]]],[[["usize",15]],["option",4]],[[["usize",15]],[["pkpkh",4],["option",4,["pkpkh"]]]],[[["usize",15]],["option",4]],[[],[["result",4,["error"]],["error",4]]],[[],["bool",15]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[],["hash",3]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[],["terminal",4]],[[["secp256k1",3],["network",4]],[["result",4,["descriptorerror"]],["descriptorerror",4]]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["iter",3]],[[],["pkiter",3]],[[],["pkpkhiter",3]],[[],["pkhiter",3]],[[],[["result",4,["policy","error"]],["policy",4],["error",4]]],[[],[["result",4,["policy","error"]],["policy",4],["error",4]]],[[],[["result",4,["lifterror"]],["lifterror",4]]],[[["miniscript",3]],[["usize",15],["option",4,["usize"]]]],[[["miniscript",3]],[["usize",15],["option",4,["usize"]]]],[[["miniscript",3]],[["usize",15],["option",4,["usize"]]]],[[],[["usize",15],["error",4],["result",4,["usize","error"]]]],[[],[["usize",15],["error",4],["result",4,["usize","error"]]]],[[],[["usize",15],["error",4],["result",4,["usize","error"]]]],[[["descriptor",4]],["bool",15]],[[["secp256k1",3],["descriptorpublickey",4]],["deriveddescriptorkey",3]],[[["barectx",4],["miniscript",3,["barectx"]]],[["error",4],["result",4,["descriptor","error"]],["descriptor",4]]],[[],["descriptor",4]],[[],["descriptor",4]],[[["legacy",4],["miniscript",3,["legacy"]]],[["error",4],["result",4,["descriptor","error"]],["descriptor",4]]],[[["usize",15],["vec",3,["global"]],["global",3]],[["error",4],["result",4,["descriptor","error"]],["descriptor",4]]],[[],[["error",4],["result",4,["descriptor","error"]],["descriptor",4]]],[[["miniscript",3,["segwitv0"]],["segwitv0",4]],[["error",4],["result",4,["descriptor","error"]],["descriptor",4]]],[[["usize",15],["vec",3,["global"]],["global",3]],[["error",4],["result",4,["descriptor","error"]],["descriptor",4]]],[[],[["error",4],["result",4,["descriptor","error"]],["descriptor",4]]],[[["miniscript",3,["segwitv0"]],["segwitv0",4]],[["error",4],["result",4,["descriptor","error"]],["descriptor",4]]],[[["usize",15],["vec",3,["global"]],["global",3]],[["error",4],["result",4,["descriptor","error"]],["descriptor",4]]],null,[[["miniscript",3]],[["error",4],["result",4,["error"]]]],[[["script",3]],[["miniscript",3,["publickey"]],["result",4,["miniscript","error"]],["error",4]]],[[["secp256k1",3],["str",15]],[["error",4],["result",4,["error"]]]],[[["script",3]],[["miniscript",3,["publickey"]],["result",4,["miniscript","error"]],["error",4]]],[[],[["ordering",4],["option",4,["ordering"]]]],[[["descriptor",4]],[["ordering",4],["option",4,["ordering"]]]],[[["legacy",4]],[["ordering",4],["option",4,["ordering"]]]],[[["segwitv0",4]],[["ordering",4],["option",4,["ordering"]]]],[[["miniscript",3]],[["ordering",4],["option",4,["ordering"]]]],null,[[],["bool",15]],[[],[["error",4],["result",4,["error"]]]],[[],[["result",4,["analysiserror"]],["analysiserror",4]]],[[],[["result",4,["vec","error"]],["vec",3,["vec","global"]],["error",4]]],[[],[["result",4,["vec","error"]],["vec",3,["vec","global"]],["error",4]]],[[],["script",3]],[[],["script",3]],[[],["usize",15]],[[],["result",4]],[[],["result",4]],[[],["usize",15]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["publickey",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[["hashmap",3]],["string",3]],[[["miniscript",3]],[["error",4],["result",4,["error"]]]],[[["miniscript",3]],[["error",4],["result",4,["error"]]]],[[],[["result",4,["descriptor"]],["descriptor",4]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["script",3]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],null,null,null,null,null,[[["str",15]],[["result",4,["string","descriptorerror"]],["descriptorerror",4],["string",3]]],null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["fail",8]],[[]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["error",4]]],[[["error",4]]],[[["keyerror",4]],["error",4]],[[["policyerror",4]]],[[["error",4]]],[[["error",4]]],[[["error",4]]],[[]],[[],["usize",15]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["fail",8]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["pkorf",3]],[[],["satisfiableitem",4]],[[],["satisfaction",4]],[[],["policy",3]],[[],["condition",3]],[[],["buildsatisfaction",4]],[[]],[[]],[[]],[[]],[[]],[[]],[[["condition",3]],["ordering",4]],null,null,[[],["pkorf",3]],[[],["condition",3]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["condition",3]],["bool",15]],[[["policyerror",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[["bool",15]]],[[]],[[["satisfiableitem",4]]],[[]],[[]],[[]],[[]],[[["btreemap",3]],[["policyerror",4],["result",4,["condition","policyerror"]],["condition",3]]],[[],["u64",15]],[[]],[[],["string",3]],null,[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],null,[[["condition",3]],["bool",15]],[[["policyerror",4]],["bool",15]],[[["condition",3]],[["option",4,["ordering"]],["ordering",4]]],[[],["bool",15]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[["result",4,["descriptortemplateout","descriptorerror"]],["descriptorerror",4],["descriptortemplateout",6]]],[[],[["result",4,["descriptortemplateout","descriptorerror"]],["descriptorerror",4],["descriptortemplateout",6]]],[[],[["result",4,["descriptortemplateout","descriptorerror"]],["descriptorerror",4],["descriptortemplateout",6]]],[[],[["result",4,["descriptortemplateout","descriptorerror"]],["descriptorerror",4],["descriptortemplateout",6]]],[[],[["result",4,["descriptortemplateout","descriptorerror"]],["descriptorerror",4],["descriptortemplateout",6]]],[[],[["result",4,["descriptortemplateout","descriptorerror"]],["descriptorerror",4],["descriptortemplateout",6]]],[[],[["result",4,["descriptortemplateout","descriptorerror"]],["descriptorerror",4],["descriptortemplateout",6]]],[[],[["result",4,["descriptortemplateout","descriptorerror"]],["descriptorerror",4],["descriptortemplateout",6]]],[[],[["result",4,["descriptortemplateout","descriptorerror"]],["descriptorerror",4],["descriptortemplateout",6]]],[[],[["result",4,["descriptortemplateout","descriptorerror"]],["descriptorerror",4],["descriptortemplateout",6]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["secp256k1",3],["network",4]],[["result",4,["error"]],["error",4]]],[[["secp256k1",3],["network",4]],[["result",4,["error"]],["error",4]]],[[["secp256k1",3],["network",4]],[["result",4,["error"]],["error",4]]],[[["secp256k1",3],["network",4]],[["result",4,["error"]],["error",4]]],[[["secp256k1",3],["network",4]],[["result",4,["error"]],["error",4]]],[[["secp256k1",3],["network",4]],[["result",4,["error"]],["error",4]]],[[["secp256k1",3],["network",4]],[["result",4,["error"]],["error",4]]],[[["secp256k1",3],["network",4]],[["result",4,["error"]],["error",4]]],[[["secp256k1",3],["network",4]],[["result",4,["error"]],["error",4]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["validnetworks",6]],[[],["scriptcontextenum",4]],[[],["fail",8]],[[["secp256k1",3]],[["descriptorkeyparseerror",3],["result",4,["descriptorpublickey","descriptorkeyparseerror"]],["descriptorpublickey",4]]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["miniscript",3]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[["terminal",4]],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[],[["result",4,["scriptcontexterror"]],["scriptcontexterror",4]]],[[],["scriptcontextenum",4]],[[],["privatekeygenerateoptions",3]],[[],["sortedmultivec",3]],[[],["descriptorpublickey",4]],[[],["descriptorsinglepub",3]],[[]],[[]],[[]],[[]],[[]],[[["sortedmultivec",3]],["ordering",4]],[[["descriptorpublickey",4]],["ordering",4]],[[["descriptorsinglepub",3]],["ordering",4]],null,[[]],[[["usize",15]]],[[["usize",15]]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["u32",15]],["descriptorpublickey",4]],[[["secp256k1",3]],[["conversionerror",4],["publickey",3],["result",4,["publickey","conversionerror"]]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["script",3]],[[["scriptcontextenum",4]],["bool",15]],[[["sortedmultivec",3]],["bool",15]],[[["descriptorpublickey",4]],["bool",15]],[[["descriptorsinglepub",3]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[],["bool",15]],[[["extendedpubkey",3]]],[[["extendedprivkey",3]]],[[]],[[]],[[]],[[]],[[]],[[["error",4]]],[[["error",4]]],[[]],[[]],[[]],[[]],[[]],[[]],[[["descriptorpublickey",4],["validnetworks",6]]],[[["descriptorsecretkey",4],["validnetworks",6]]],[[["str",15]],[["result",4,["descriptorpublickey"]],["descriptorpublickey",4]]],[[["str",15]],[["result",4,["descriptorsecretkey"]],["descriptorsecretkey",4]]],[[["tree",3]],[["error",4],["sortedmultivec",3],["result",4,["sortedmultivec","error"]]]],[[],["derivationpath",3]],[[],[["result",4,["generatedkey"]],["generatedkey",3]]],[[],[["result",4,["generatedkey"]],["generatedkey",3]]],[[],[["result",4,["generatedkey"]],["generatedkey",3]]],[[],[["result",4,["generatedkey"]],["generatedkey",3]]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],["bool",15]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[["descriptorkey",4],["keyerror",4],["result",4,["descriptorkey","keyerror"]]]],[[["option",4,["keysource"]],["keysource",6],["derivationpath",3]],[["descriptorkey",4],["keyerror",4],["result",4,["descriptorkey","keyerror"]]]],[[["option",4,["keysource"]],["keysource",6],["derivationpath",3]],[["descriptorkey",4],["keyerror",4],["result",4,["descriptorkey","keyerror"]]]],[[],[["descriptorkey",4],["keyerror",4],["result",4,["descriptorkey","keyerror"]]]],[[],[["descriptorkey",4],["keyerror",4],["result",4,["descriptorkey","keyerror"]]]],[[],[["descriptorkey",4],["keyerror",4],["result",4,["descriptorkey","keyerror"]]]],[[],[["descriptorkey",4],["keyerror",4],["result",4,["descriptorkey","keyerror"]]]],[[],[["result",4,["extendedkey","keyerror"]],["keyerror",4],["extendedkey",4]]],[[],[["result",4,["extendedkey","keyerror"]],["keyerror",4],["extendedkey",4]]],[[],[["result",4,["extendedkey","keyerror"]],["keyerror",4],["extendedkey",4]]],[[]],[[["network",4]],[["option",4,["extendedprivkey"]],["extendedprivkey",3]]],[[["secp256k1",3],["network",4]],["extendedpubkey",3]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],null,null,null,[[],[["result",4,["policy","error"]],["policy",4],["error",4]]],[[],["validnetworks",6]],[[],["fingerprint",3]],[[["miniscript",3]],[["usize",15],["option",4,["usize"]]]],[[],["usize",15]],[[],["usize",15]],[[["validnetworks",6]],["validnetworks",6]],[[["sortedmultivec",3]],["bool",15]],[[["descriptorpublickey",4]],["bool",15]],[[["descriptorsinglepub",3]],["bool",15]],[[["usize",15],["vec",3,["global"]],["global",3]],[["error",4],["sortedmultivec",3],["result",4,["sortedmultivec","error"]]]],null,null,[[["miniscript",3]],[["error",4],["result",4,["error"]]]],[[["miniscript",3]],[["error",4],["result",4,["error"]]]],[[["validnetworks",6]]],[[["sortedmultivec",3]],[["ordering",4],["option",4,["ordering"]]]],[[["descriptorpublickey",4]],[["ordering",4],["option",4,["ordering"]]]],[[["descriptorsinglepub",3]],[["ordering",4],["option",4,["ordering"]]]],null,[[],[["error",4],["result",4,["error"]]]],[[],[["result",4,["vec","error"]],["vec",3,["vec","global"]],["error",4]]],[[],["usize",15]],[[],["terminal",4]],[[],["validnetworks",6]],[[]],[[]],[[]],[[]],[[]],[[],["descriptorpublickey",4]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[["miniscript",3]],[["error",4],["result",4,["error"]]]],[[["miniscript",3]],[["error",4],["result",4,["error"]]]],[[["miniscript",3]],[["error",4],["result",4,["error"]]]],[[["miniscript",3]],[["error",4],["result",4,["error"]]]],[[],[["result",4,["sortedmultivec"]],["sortedmultivec",3]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[],["str",15]],[[]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[["vec",3,["u5","global"]],["result",4,["vec"]]]],[[],["u8",15]],[[],["language",4]],[[],["mnemonic",3]],[[],["mnemonictype",4]],[[],["seed",3]],[[]],[[]],[[]],[[]],[[],["language",4]],[[],["mnemonictype",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[],["usize",15]],[[["language",4]],["bool",15]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["usize",15]],[["error",3],["result",4,["mnemonictype","error"]],["mnemonictype",4]]],[[["str",15]],[["error",3],["result",4,["mnemonictype","error"]],["mnemonictype",4]]],[[["usize",15]],[["error",3],["result",4,["mnemonictype","error"]],["mnemonictype",4]]],[[]],[[]],[[]],[[]],[[["language",4]],[["result",4,["mnemonic","error"]],["mnemonic",3],["error",3]]],[[["str",15]],[["language",4],["option",4,["language"]]]],[[["str",15],["language",4]],[["result",4,["mnemonic","error"]],["mnemonic",3],["error",3]]],[[],[["result",4,["generatedkey"]],["generatedkey",3]]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[["option",4,["keysource"]],["keysource",6],["derivationpath",3]],[["descriptorkey",4],["keyerror",4],["result",4,["descriptorkey","keyerror"]]]],[[["option",4,["keysource"]],["keysource",6],["derivationpath",3]],[["descriptorkey",4],["keyerror",4],["result",4,["descriptorkey","keyerror"]]]],[[],[["result",4,["extendedkey","keyerror"]],["keyerror",4],["extendedkey",4]]],[[],[["result",4,["extendedkey","keyerror"]],["keyerror",4],["extendedkey",4]]],[[],["string",3]],[[],["language",4]],[[["language",4],["mnemonictype",4]],["mnemonic",3]],[[["str",15],["mnemonic",3]],["seed",3]],[[],["str",15]],[[],["string",3]],[[],["string",3]],[[]],[[]],[[]],[[]],[[],["string",3]],[[],["string",3]],[[],["usize",15]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[["str",15],["language",4]],[["result",4,["error"]],["error",3]]],[[]],[[]],[[]],[[]],[[],["usize",15]],[[],["wordlist",3]],[[],["wordmap",3]],[[],["result",4]],null,null,null,null,null,null,null,null,[[["arc",3,["addressvalidator"]],["addressvalidator",8]]],[[["signerordering",3],["keychainkind",4],["arc",3,["signer"]],["signer",8]]],null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[["transaction",3]],[["result",4,["txid","error"]],["txid",3],["error",4]]],[[["txid",3]],[["error",4],["txbuilder",3,["defaultcoinselectionalgorithm","bumpfee"]],["result",4,["txbuilder","error"]]]],[[],[["createtx",3],["defaultcoinselectionalgorithm",6],["txbuilder",3,["defaultcoinselectionalgorithm","createtx"]]]],[[]],null,[[["usize",15]]],[[["usize",15]]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["addressinfo",3]],["bool",15]],null,[[["signoptions",3],["psbt",3]],[["bool",15],["error",4],["result",4,["bool","error"]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[["addressindex",4]],[["addressinfo",3],["error",4],["result",4,["addressinfo","error"]]]],[[],[["result",4,["u64","error"]],["u64",15],["error",4]]],[[["keychainkind",4]],["extendeddescriptor",6]],[[["str",15]]],[[["bool",15],["localutxo",3],["sighashtype",4],["option",4,["sighashtype"]]],[["result",4,["input","error"]],["input",3],["error",4]]],[[["bool",15],["txid",3]],[["option",4,["transactiondetails"]],["result",4,["option","error"]],["error",4]]],[[["outpoint",3]],[["option",4,["localutxo"]],["result",4,["option","error"]],["error",4]]],null,[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[],["bool",15]],[[["script",3]],[["bool",15],["error",4],["result",4,["bool","error"]]]],[[["bool",15]],[["error",4],["result",4,["vec","error"]],["vec",3,["transactiondetails"]]]],[[],[["result",4,["vec","error"]],["vec",3,["localutxo"]],["error",4]]],[[["addressinfo",3]],["bool",15]],[[],["network",4]],[[["option",4],["network",4],["intowalletdescriptor",8]],[["result",4,["error"]],["error",4]]],[[["option",4],["network",4],["intowalletdescriptor",8]],[["result",4,["error"]],["error",4]]],[[["keychainkind",4]],[["option",4,["policy"]],["error",4],["result",4,["option","error"]]]],[[["keychainkind",4]],[["result",4,["option","error"]],["option",4,["extendeddescriptor"]],["error",4]]],[[],["secp256k1",3]],[[["signoptions",3],["psbt",3]],[["bool",15],["error",4],["result",4,["bool","error"]]]],null,[[["option",4,["u32"]],["progress",8],["u32",15]],[["result",4,["error"]],["error",4]]],null,[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,[[],["fail",8]],[[]],[[]],[[],["addressvalidatorerror",4]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["addressvalidatorerror",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[],["usize",15]],[[]],[[["addressvalidatorerror",4]],["bool",15]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[["script",3],["keychainkind",4],["hdkeypaths",6]],[["result",4,["addressvalidatorerror"]],["addressvalidatorerror",4]]],[[]],null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["largestfirstcoinselection",3]],[[]],[[["u64",15],["vec",3,["weightedutxo"]],["feerate",3],["weightedutxo",3]],[["coinselectionresult",3],["result",4,["coinselectionresult","error"]],["error",4]]],[[["u64",15],["vec",3,["weightedutxo"]],["feerate",3],["weightedutxo",3]],[["coinselectionresult",3],["result",4,["coinselectionresult","error"]],["error",4]]],[[["u64",15],["vec",3,["weightedutxo"]],["feerate",3],["weightedutxo",3]],[["coinselectionresult",3],["result",4,["coinselectionresult","error"]],["error",4]]],[[],["largestfirstcoinselection",3]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[],["u64",15]],[[["u64",15]]],null,[[],["u64",15]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],null,null,[[]],[[]],[[],[["string",3],["option",4,["string"]]]],[[["usize",15]]],[[["usize",15]]],[[],["string",3]],[[],["result",4]],[[["usize",15]]],[[["wallet",3],["str",15],["bool",15]],[["result",4,["str"]],["str",15]]],[[["formatter",3]],["result",6]],[[]],[[["str",15]],["result",4]],[[],["usize",15]],[[]],null,[[],["result",4]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["signerordering",3],["signer",8],["signerid",4],["arc",3,["signer"]]],[["option",4,["arc"]],["arc",3,["signer"]]]],null,[[],["fail",8]],[[["secp256k1",3]],["keymap",6]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["signerid",4]],[[],["signererror",4]],[[],["signerordering",3]],[[],["signerscontainer",3]],[[],["signoptions",3]],[[]],[[]],[[]],[[]],[[]],[[["signerid",4]],["ordering",4]],[[["signerordering",3]],["ordering",4]],[[]],[[],["signerscontainer",3]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],[["descriptorsecretkey",4],["option",4,["descriptorsecretkey"]]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["signerid",4]],["bool",15]],[[["signererror",4]],["bool",15]],[[["signerordering",3]],["bool",15]],[[["signerid",4]],[["arc",3],["option",4,["arc"]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["hash",3]],["signerid",4]],[[["fingerprint",3]],["signerid",4]],[[]],[[]],[[]],[[["keymap",6]],["signerscontainer",3]],[[]],[[]],[[],["u64",15]],[[]],[[["secp256k1",3]],["signerid",4]],[[],[["vec",3,["signerid"]],["signerid",4]]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[["signerid",4]],["bool",15]],[[["signerordering",3]],["bool",15]],[[]],[[["signerid",4]],[["option",4,["ordering"]],["ordering",4]]],[[["signerordering",3]],[["option",4,["ordering"]],["ordering",4]]],[[["signerordering",3],["signerid",4]],[["option",4,["arc"]],["arc",3,["signer"]]]],[[["usize",15],["partiallysignedtransaction",3],["option",4,["usize"]],["secp256k1",3]],[["signererror",4],["result",4,["signererror"]]]],[[],["bool",15]],[[],[["vec",3,["arc"]],["arc",3]]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],null,null,null,[[],["u64",15]],null,null,null,null,null,null,null,null,null,null,null,null,[[["usize",15],["outpoint",3],["input",3]],[["result",4,["error"]],["error",4]]],[[]],[[["u64",15],["script",3]]],[[["outpoint",3]]],[[["outpoint",3]],[["result",4,["error"]],["error",4]]],[[],[["result",4,["error"]],["error",4]]],[[["script",3]],[["result",4,["error"]],["error",4]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["changespendpolicy",4]]],[[],["createtx",3]],[[],["bumpfee",3]],[[]],[[],["txordering",4]],[[],["changespendpolicy",4]],[[]],[[]],[[]],[[]],[[]],[[["txordering",4]],["ordering",4]],[[["changespendpolicy",4]],["ordering",4]],[[["coinselectionalgorithm",8]],[["txbuilder",3],["coinselectionalgorithm",8]]],[[],["createtx",3]],[[],["bumpfee",3]],[[]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[["script",3]]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[["u32",15]]],[[["txordering",4]],["bool",15]],[[["changespendpolicy",4]],["bool",15]],[[["u64",15]]],[[["feerate",3]]],[[],[["error",4],["result",4,["error"]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[],["u64",15]],[[],["u64",15]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[["u32",15]]],[[]],[[]],[[["txordering",4]]],[[["txordering",4]],[["option",4,["ordering"]],["ordering",4]]],[[["changespendpolicy",4]],[["option",4,["ordering"]],["ordering",4]]],[[["btreemap",3,["string","vec"]],["keychainkind",4],["vec",3,["usize"]],["string",3]]],[[["vec",3]]],[[["sighashtype",4]]],[[["transaction",3]]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[["vec",3,["outpoint"]],["outpoint",3]]],[[["i32",15]]],[[]],[[]],[[]],[[]],[[]]],"p":[[4,"Error"],[4,"KeychainKind"],[4,"Utxo"],[3,"FeeRate"],[3,"LocalUtxo"],[3,"WeightedUtxo"],[3,"TransactionDetails"],[3,"ConfirmationTime"],[6,"MnemonicWithPassphrase"],[6,"DescriptorTemplateOut"],[6,"ExtendedDescriptor"],[8,"Vbytes"],[13,"InvalidU32Bytes"],[13,"Generic"],[13,"OutputBelowDustLimit"],[13,"MissingKeyOrigin"],[13,"Key"],[13,"SpendingPolicyRequired"],[13,"InvalidPolicyPathError"],[13,"Signer"],[13,"InvalidProgressValue"],[13,"InvalidOutpoint"],[13,"Descriptor"],[13,"AddressValidator"],[13,"Encode"],[13,"Miniscript"],[13,"Bip32"],[13,"Secp256k1"],[13,"Json"],[13,"Hex"],[13,"Psbt"],[13,"PsbtParse"],[13,"Electrum"],[13,"Esplora"],[13,"CompactFilters"],[13,"Sled"],[13,"Rusqlite"],[13,"InsufficientFunds"],[13,"InvalidNetwork"],[13,"FeeRateTooLow"],[13,"FeeTooLow"],[13,"Local"],[13,"Foreign"],[4,"Capability"],[8,"ConfigurableBlockchain"],[3,"NoopProgress"],[3,"LogProgress"],[8,"Blockchain"],[8,"Progress"],[4,"AnyBlockchain"],[4,"AnyBlockchainConfig"],[13,"Electrum"],[13,"Esplora"],[13,"CompactFilters"],[13,"Electrum"],[13,"Esplora"],[13,"CompactFilters"],[4,"CompactFiltersError"],[3,"Mempool"],[3,"BitcoinPeerConfig"],[3,"Peer"],[3,"CompactFiltersBlockchain"],[3,"CompactFiltersBlockchainConfig"],[13,"Db"],[13,"Io"],[13,"Bip158"],[13,"Time"],[13,"Global"],[3,"ElectrumBlockchain"],[3,"ElectrumBlockchainConfig"],[4,"EsploraError"],[3,"EsploraBlockchainConfig"],[3,"EsploraBlockchain"],[3,"EsploraGetHistory"],[13,"Ureq"],[13,"UreqTransport"],[13,"HttpResponse"],[13,"Io"],[13,"Parsing"],[13,"BitcoinEncoding"],[13,"Hex"],[13,"TransactionNotFound"],[13,"HeaderHeightNotFound"],[13,"HeaderHashNotFound"],[8,"BatchDatabase"],[8,"ConfigurableDatabase"],[3,"SqliteDatabase"],[8,"Database"],[8,"BatchOperations"],[4,"AnyBatch"],[4,"AnyDatabase"],[4,"AnyDatabaseConfig"],[3,"SledDbConfiguration"],[3,"SqliteDbConfiguration"],[13,"Memory"],[13,"Sled"],[13,"Sqlite"],[13,"Memory"],[13,"Sled"],[13,"Sqlite"],[13,"Memory"],[13,"Sled"],[13,"Sqlite"],[3,"MemoryDatabase"],[4,"Descriptor"],[4,"Legacy"],[4,"Segwitv0"],[3,"Miniscript"],[3,"DerivedDescriptorKey"],[8,"ScriptContext"],[8,"ExtractPolicy"],[8,"IntoWalletDescriptor"],[13,"Bare"],[13,"Pkh"],[13,"Wpkh"],[13,"Sh"],[13,"Wsh"],[4,"Error"],[13,"Key"],[13,"Policy"],[13,"InvalidDescriptorCharacter"],[13,"Bip32"],[13,"Base58"],[13,"Pk"],[13,"Miniscript"],[13,"Hex"],[4,"SatisfiableItem"],[4,"PolicyError"],[4,"Satisfaction"],[4,"BuildSatisfaction"],[3,"PkOrF"],[3,"Policy"],[3,"Condition"],[13,"Psbt"],[13,"PsbtTimelocks"],[13,"NotEnoughItemsSelected"],[13,"IndexOutOfRange"],[13,"Complete"],[13,"Partial"],[13,"PartialComplete"],[13,"Signature"],[13,"SignatureKey"],[13,"Sha256Preimage"],[13,"Hash256Preimage"],[13,"Ripemd160Preimage"],[13,"Hash160Preimage"],[13,"Thresh"],[13,"Multisig"],[13,"AbsoluteTimelock"],[13,"RelativeTimelock"],[3,"P2Pkh"],[3,"P2Wpkh_P2Sh"],[3,"P2Wpkh"],[3,"Bip44"],[3,"Bip44Public"],[3,"Bip49"],[3,"Bip49Public"],[3,"Bip84"],[3,"Bip84Public"],[8,"DescriptorTemplate"],[4,"KeyError"],[8,"GeneratableKey"],[4,"ScriptContextEnum"],[4,"ExtendedKey"],[4,"DescriptorSecretKey"],[4,"DescriptorPublicKey"],[8,"ExtScriptContext"],[3,"GeneratedKey"],[4,"DescriptorKey"],[3,"PrivateKeyGenerateOptions"],[3,"SortedMultiVec"],[3,"DescriptorSinglePub"],[3,"DescriptorSinglePriv"],[8,"GeneratableDefaultOptions"],[8,"IntoDescriptorKey"],[8,"DerivableKey"],[13,"SinglePub"],[13,"XPub"],[13,"SinglePriv"],[13,"XPrv"],[13,"Private"],[13,"Public"],[13,"Message"],[13,"Bip32"],[13,"Miniscript"],[4,"Language"],[4,"MnemonicType"],[3,"Seed"],[3,"Mnemonic"],[4,"AddressIndex"],[3,"Wallet"],[3,"AddressInfo"],[8,"IsDust"],[13,"Peek"],[13,"Reset"],[4,"AddressValidatorError"],[8,"AddressValidator"],[13,"Message"],[3,"CoinSelectionResult"],[3,"LargestFirstCoinSelection"],[3,"BranchAndBoundCoinSelection"],[8,"CoinSelectionAlgorithm"],[3,"WalletExport"],[3,"SignerOrdering"],[4,"SignerId"],[4,"SignerError"],[3,"SignersContainer"],[3,"SignOptions"],[8,"Signer"],[13,"PkHash"],[13,"Fingerprint"],[13,"Dummy"],[4,"TxOrdering"],[4,"ChangeSpendPolicy"],[3,"TxBuilder"],[3,"CreateTx"],[3,"BumpFee"]]}\ }'); if (window.initSearch) {window.initSearch(searchIndex)}; \ No newline at end of file diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/any.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/any.rs.html index 977b1afcca..a5d3d098ec 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/any.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/any.rs.html @@ -331,10 +331,10 @@ use super::*; macro_rules! impl_from { - ( $from:ty, $to:ty, $variant:ident, $( $cfg:tt )* ) => { + ( $from:ty, $to:ty, $variant:ident, $( $cfg:tt )* ) => { $( $cfg )* impl From<$from> for $to { - fn from(inner: $from) -> Self { + fn from(inner: $from) -> Self { <$to>::$variant(inner) } } @@ -342,16 +342,16 @@ } macro_rules! impl_inner_method { - ( $self:expr, $name:ident $(, $args:expr)* ) => { + ( $self:expr, $name:ident $(, $args:expr)* ) => { match $self { #[cfg(feature = "electrum")] - AnyBlockchain::Electrum(inner) => inner.$name( $($args, )* ), + AnyBlockchain::Electrum(inner) => inner.$name( $($args, )* ), #[cfg(feature = "esplora")] - AnyBlockchain::Esplora(inner) => inner.$name( $($args, )* ), + AnyBlockchain::Esplora(inner) => inner.$name( $($args, )* ), #[cfg(feature = "compact_filters")] - AnyBlockchain::CompactFilters(inner) => inner.$name( $($args, )* ), + AnyBlockchain::CompactFilters(inner) => inner.$name( $($args, )* ), #[cfg(feature = "rpc")] - AnyBlockchain::Rpc(inner) => inner.$name( $($args, )* ), + AnyBlockchain::Rpc(inner) => inner.$name( $($args, )* ), } } } @@ -382,7 +382,7 @@ #[maybe_async] impl Blockchain for AnyBlockchain { - fn get_capabilities(&self) -> HashSet<Capability> { + fn get_capabilities(&self) -> HashSet<Capability> { maybe_await!(impl_inner_method!(self, get_capabilities)) } @@ -390,28 +390,28 @@ &self, database: &mut D, progress_update: P, - ) -> Result<(), Error> { + ) -> Result<(), Error> { maybe_await!(impl_inner_method!(self, setup, database, progress_update)) } fn sync<D: BatchDatabase, P: 'static + Progress>( &self, database: &mut D, progress_update: P, - ) -> Result<(), Error> { + ) -> Result<(), Error> { maybe_await!(impl_inner_method!(self, sync, database, progress_update)) } - fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> { + fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> { maybe_await!(impl_inner_method!(self, get_tx, txid)) } - fn broadcast(&self, tx: &Transaction) -> Result<(), Error> { + fn broadcast(&self, tx: &Transaction) -> Result<(), Error> { maybe_await!(impl_inner_method!(self, broadcast, tx)) } - fn get_height(&self) -> Result<u32, Error> { + fn get_height(&self) -> Result<u32, Error> { maybe_await!(impl_inner_method!(self, get_height)) } - fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error> { + fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error> { maybe_await!(impl_inner_method!(self, estimate_fee, target)) } } @@ -478,22 +478,22 @@ impl ConfigurableBlockchain for AnyBlockchain { type Config = AnyBlockchainConfig; - fn from_config(config: &Self::Config) -> Result<Self, Error> { + fn from_config(config: &Self::Config) -> Result<Self, Error> { Ok(match config { #[cfg(feature = "electrum")] - AnyBlockchainConfig::Electrum(inner) => { + AnyBlockchainConfig::Electrum(inner) => { AnyBlockchain::Electrum(electrum::ElectrumBlockchain::from_config(inner)?) } #[cfg(feature = "esplora")] - AnyBlockchainConfig::Esplora(inner) => { + AnyBlockchainConfig::Esplora(inner) => { AnyBlockchain::Esplora(esplora::EsploraBlockchain::from_config(inner)?) } #[cfg(feature = "compact_filters")] - AnyBlockchainConfig::CompactFilters(inner) => AnyBlockchain::CompactFilters( + AnyBlockchainConfig::CompactFilters(inner) => AnyBlockchain::CompactFilters( compact_filters::CompactFiltersBlockchain::from_config(inner)?, ), #[cfg(feature = "rpc")] - AnyBlockchainConfig::Rpc(inner) => { + AnyBlockchainConfig::Rpc(inner) => { AnyBlockchain::Rpc(rpc::RpcBlockchain::from_config(inner)?) } }) diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/mod.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/mod.rs.html index 4927399c69..bef03d62cb 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/mod.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/mod.rs.html @@ -675,7 +675,7 @@ peers: Vec<Peer>, storage_dir: P, skip_blocks: Option<usize>, - ) -> Result<Self, CompactFiltersError> { + ) -> Result<Self, CompactFiltersError> { if peers.is_empty() { return Err(CompactFiltersError::NoPeers); } @@ -717,7 +717,7 @@ timestamp: Option<u64>, internal_max_deriv: &mut Option<u32>, external_max_deriv: &mut Option<u32>, - ) -> Result<(), Error> { + ) -> Result<(), Error> { let mut updates = database.begin_batch(); let mut incoming: u64 = 0; @@ -756,11 +756,11 @@ })?; incoming += output.value; - if keychain == KeychainKind::Internal + if keychain == KeychainKind::Internal && (internal_max_deriv.is_none() || child > internal_max_deriv.unwrap_or(0)) { *internal_max_deriv = Some(child); - } else if keychain == KeychainKind::External + } else if keychain == KeychainKind::External && (external_max_deriv.is_none() || child > external_max_deriv.unwrap_or(0)) { *external_max_deriv = Some(child); @@ -790,7 +790,7 @@ } impl Blockchain for CompactFiltersBlockchain { - fn get_capabilities(&self) -> HashSet<Capability> { + fn get_capabilities(&self) -> HashSet<Capability> { vec![Capability::FullHistory].into_iter().collect() } @@ -799,7 +799,7 @@ &self, database: &mut D, progress_update: P, - ) -> Result<(), Error> { + ) -> Result<(), Error> { let first_peer = &self.peers[0]; let skip_blocks = self.skip_blocks.unwrap_or(0); @@ -880,7 +880,7 @@ } let block_height = headers.get_height_for(block_hash)?.unwrap_or(0); - let saved_correct_block = matches!(headers.get_full_block(block_height)?, Some(block) if &block.block_hash() == block_hash); + let saved_correct_block = matches!(headers.get_full_block(block_height)?, Some(block) if &block.block_hash() == block_hash); if saved_correct_block { Ok(false) @@ -932,17 +932,17 @@ let mut updates = database.begin_batch(); for details in database.iter_txs(false)? { match details.confirmation_time { - Some(c) if (c.height as usize) < last_synced_block => continue, - _ => updates.del_tx(&details.txid, false)?, + Some(c) if (c.height as usize) < last_synced_block => continue, + _ => updates.del_tx(&details.txid, false)?, }; } database.commit_batch(updates)?; match first_peer.ask_for_mempool() { - Err(CompactFiltersError::PeerBloomDisabled) => { + Err(CompactFiltersError::PeerBloomDisabled) => { log::warn!("Peer has BLOOM disabled, we can't ask for the mempool") } - e => e?, + e => e?, }; let mut internal_max_deriv = None; @@ -1000,23 +1000,23 @@ Ok(()) } - fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> { + fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> { Ok(self.peers[0] .get_mempool() .get_tx(&Inventory::Transaction(*txid))) } - fn broadcast(&self, tx: &Transaction) -> Result<(), Error> { + fn broadcast(&self, tx: &Transaction) -> Result<(), Error> { self.peers[0].broadcast_tx(tx.clone())?; Ok(()) } - fn get_height(&self) -> Result<u32, Error> { + fn get_height(&self) -> Result<u32, Error> { Ok(self.headers.get_height()? as u32) } - fn estimate_fee(&self, _target: usize) -> Result<FeeRate, Error> { + fn estimate_fee(&self, _target: usize) -> Result<FeeRate, Error> { // TODO Ok(FeeRate::default()) } @@ -1049,14 +1049,14 @@ impl ConfigurableBlockchain for CompactFiltersBlockchain { type Config = CompactFiltersBlockchainConfig; - fn from_config(config: &Self::Config) -> Result<Self, Error> { + fn from_config(config: &Self::Config) -> Result<Self, Error> { let mempool = Arc::new(Mempool::default()); let peers = config .peers .iter() .map(|peer_conf| match &peer_conf.socks5 { - None => Peer::connect(&peer_conf.address, Arc::clone(&mempool), config.network), - Some(proxy) => Peer::connect_proxy( + None => Peer::connect(&peer_conf.address, Arc::clone(&mempool), config.network), + Some(proxy) => Peer::connect_proxy( peer_conf.address.as_str(), proxy, peer_conf @@ -1117,7 +1117,7 @@ } impl fmt::Display for CompactFiltersError { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{:?}", self) } } @@ -1130,7 +1130,7 @@ impl_error!(std::time::SystemTimeError, Time, CompactFiltersError); impl From<crate::error::Error> for CompactFiltersError { - fn from(err: crate::error::Error) -> Self { + fn from(err: crate::error::Error) -> Self { CompactFiltersError::Global(Box::new(err)) } } diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/peer.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/peer.rs.html index c9f3b00e9c..98cebb48da 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/peer.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/peer.rs.html @@ -629,7 +629,7 @@ impl Mempool { /// Create a new empty mempool - pub fn new() -> Self { + pub fn new() -> Self { Self::default() } @@ -645,13 +645,13 @@ } /// Look-up a transaction in the mempool given an [`Inventory`] request - pub fn get_tx(&self, inventory: &Inventory) -> Option<Transaction> { + pub fn get_tx(&self, inventory: &Inventory) -> Option<Transaction> { let identifer = match inventory { - Inventory::Error | Inventory::Block(_) | Inventory::WitnessBlock(_) => return None, - Inventory::Transaction(txid) => TxIdentifier::Txid(*txid), - Inventory::WitnessTransaction(txid) => TxIdentifier::Txid(*txid), - Inventory::WTx(wtxid) => TxIdentifier::Wtxid(*wtxid), - Inventory::Unknown { inv_type, hash } => { + Inventory::Error | Inventory::Block(_) | Inventory::WitnessBlock(_) => return None, + Inventory::Transaction(txid) => TxIdentifier::Txid(*txid), + Inventory::WitnessTransaction(txid) => TxIdentifier::Txid(*txid), + Inventory::WTx(wtxid) => TxIdentifier::Wtxid(*wtxid), + Inventory::Unknown { inv_type, hash } => { log::warn!( "Unknown inventory request type `{}`, hash `{:?}`", inv_type, @@ -662,8 +662,8 @@ }; let txid = match identifer { - TxIdentifier::Txid(txid) => Some(txid), - TxIdentifier::Wtxid(wtxid) => self.0.read().unwrap().wtxids.get(&wtxid).cloned(), + TxIdentifier::Txid(txid) => Some(txid), + TxIdentifier::Wtxid(wtxid) => self.0.read().unwrap().wtxids.get(&wtxid).cloned(), }; txid.map(|txid| self.0.read().unwrap().txs.get(&txid).cloned()) @@ -671,12 +671,12 @@ } /// Return whether or not the mempool contains a transaction with a given txid - pub fn has_tx(&self, txid: &Txid) -> bool { + pub fn has_tx(&self, txid: &Txid) -> bool { self.0.read().unwrap().txs.contains_key(txid) } /// Return the list of transactions contained in the mempool - pub fn iter_txs(&self) -> Vec<Transaction> { + pub fn iter_txs(&self) -> Vec<Transaction> { self.0.read().unwrap().txs.values().cloned().collect() } } @@ -705,7 +705,7 @@ address: A, mempool: Arc<Mempool>, network: Network, - ) -> Result<Self, CompactFiltersError> { + ) -> Result<Self, CompactFiltersError> { let stream = TcpStream::connect(address)?; Peer::from_stream(stream, mempool, network) @@ -722,7 +722,7 @@ credentials: Option<(&str, &str)>, mempool: Arc<Mempool>, network: Network, - ) -> Result<Self, CompactFiltersError> { + ) -> Result<Self, CompactFiltersError> { let socks_stream = if let Some((username, password)) = credentials { Socks5Stream::connect_with_password(proxy, target, username, password)? } else { @@ -737,7 +737,7 @@ stream: TcpStream, mempool: Arc<Mempool>, network: Network, - ) -> Result<Self, CompactFiltersError> { + ) -> Result<Self, CompactFiltersError> { let writer = Arc::new(Mutex::new(stream.try_clone()?)); let responses: Arc<RwLock<ResponsesMap>> = Arc::new(RwLock::new(HashMap::new())); let connected = Arc::new(RwLock::new(true)); @@ -813,7 +813,7 @@ writer: &mut TcpStream, magic: u32, payload: NetworkMessage, - ) -> Result<(), CompactFiltersError> { + ) -> Result<(), CompactFiltersError> { log::trace!("==> {:?}", payload); let raw_message = RawNetworkMessage { magic, payload }; @@ -830,7 +830,7 @@ responses: &Arc<RwLock<ResponsesMap>>, wait_for: &'static str, timeout: Option<Duration>, - ) -> Option<NetworkMessage> { + ) -> Option<NetworkMessage> { let message_resp = { let mut lock = responses.write().unwrap(); let message_resp = lock.entry(wait_for).or_default(); @@ -842,8 +842,8 @@ let mut messages = lock.lock().unwrap(); while messages.is_empty() { match timeout { - None => messages = cvar.wait(messages).unwrap(), - Some(t) => { + None => messages = cvar.wait(messages).unwrap(), + Some(t) => { let result = cvar.wait_timeout(messages, t).unwrap(); if result.1.timed_out() { return None; @@ -857,22 +857,22 @@ } /// Return the [`VersionMessage`] sent by the peer - pub fn get_version(&self) -> &VersionMessage { + pub fn get_version(&self) -> &VersionMessage { &self.version } /// Return the Bitcoin [`Network`] in use - pub fn get_network(&self) -> Network { + pub fn get_network(&self) -> Network { self.network } /// Return the mempool used by this peer - pub fn get_mempool(&self) -> Arc<Mempool> { + pub fn get_mempool(&self) -> Arc<Mempool> { Arc::clone(&self.mempool) } /// Return whether or not the peer is still connected - pub fn is_connected(&self) -> bool { + pub fn is_connected(&self) -> bool { *self.connected.read().unwrap() } @@ -886,10 +886,10 @@ reader_thread_connected: Arc<RwLock<bool>>, ) { macro_rules! check_disconnect { - ($call:expr) => { + ($call:expr) => { match $call { - Ok(good) => good, - Err(e) => { + Ok(good) => good, + Err(e) => { log::debug!("Error {:?}", e); *reader_thread_connected.write().unwrap() = false; @@ -912,7 +912,7 @@ log::trace!("<== {:?}", in_message); match in_message { - NetworkMessage::Ping(nonce) => { + NetworkMessage::Ping(nonce) => { check_disconnect!(Self::_send( &mut reader_thread_writer.lock().unwrap(), network.magic(), @@ -921,8 +921,8 @@ continue; } - NetworkMessage::Alert(_) => continue, - NetworkMessage::GetData(ref inv) => { + NetworkMessage::Alert(_) => continue, + NetworkMessage::GetData(ref inv) => { let (found, not_found): (Vec<_>, Vec<_>) = inv .iter() .map(|item| (*item, reader_thread_mempool.get_tx(item))) @@ -945,7 +945,7 @@ )); } } - _ => {} + _ => {} } let message_resp = { @@ -962,7 +962,7 @@ } /// Send a raw Bitcoin message to the peer - pub fn send(&self, payload: NetworkMessage) -> Result<(), CompactFiltersError> { + pub fn send(&self, payload: NetworkMessage) -> Result<(), CompactFiltersError> { let mut writer = self.writer.lock().unwrap(); Self::_send(&mut writer, self.network.magic(), payload) } @@ -972,7 +972,7 @@ &self, wait_for: &'static str, timeout: Option<Duration>, - ) -> Result<Option<NetworkMessage>, CompactFiltersError> { + ) -> Result<Option<NetworkMessage>, CompactFiltersError> { Ok(Self::_recv(&self.responses, wait_for, timeout)) } } @@ -982,20 +982,20 @@ &self, filter_type: u8, stop_hash: BlockHash, - ) -> Result<CFCheckpt, CompactFiltersError>; + ) -> Result<CFCheckpt, CompactFiltersError>; fn get_cf_headers( &self, filter_type: u8, start_height: u32, stop_hash: BlockHash, - ) -> Result<CFHeaders, CompactFiltersError>; + ) -> Result<CFHeaders, CompactFiltersError>; fn get_cf_filters( &self, filter_type: u8, start_height: u32, stop_hash: BlockHash, - ) -> Result<(), CompactFiltersError>; - fn pop_cf_filter_resp(&self) -> Result<CFilter, CompactFiltersError>; + ) -> Result<(), CompactFiltersError>; + fn pop_cf_filter_resp(&self) -> Result<CFilter, CompactFiltersError>; } impl CompactFiltersPeer for Peer { @@ -1003,7 +1003,7 @@ &self, filter_type: u8, stop_hash: BlockHash, - ) -> Result<CFCheckpt, CompactFiltersError> { + ) -> Result<CFCheckpt, CompactFiltersError> { self.send(NetworkMessage::GetCFCheckpt(GetCFCheckpt { filter_type, stop_hash, @@ -1013,8 +1013,8 @@ .recv("cfcheckpt", Some(Duration::from_secs(TIMEOUT_SECS)))? .ok_or(CompactFiltersError::Timeout)?; let response = match response { - NetworkMessage::CFCheckpt(response) => response, - _ => return Err(CompactFiltersError::InvalidResponse), + NetworkMessage::CFCheckpt(response) => response, + _ => return Err(CompactFiltersError::InvalidResponse), }; if response.filter_type != filter_type { @@ -1029,7 +1029,7 @@ filter_type: u8, start_height: u32, stop_hash: BlockHash, - ) -> Result<CFHeaders, CompactFiltersError> { + ) -> Result<CFHeaders, CompactFiltersError> { self.send(NetworkMessage::GetCFHeaders(GetCFHeaders { filter_type, start_height, @@ -1040,8 +1040,8 @@ .recv("cfheaders", Some(Duration::from_secs(TIMEOUT_SECS)))? .ok_or(CompactFiltersError::Timeout)?; let response = match response { - NetworkMessage::CFHeaders(response) => response, - _ => return Err(CompactFiltersError::InvalidResponse), + NetworkMessage::CFHeaders(response) => response, + _ => return Err(CompactFiltersError::InvalidResponse), }; if response.filter_type != filter_type { @@ -1051,13 +1051,13 @@ Ok(response) } - fn pop_cf_filter_resp(&self) -> Result<CFilter, CompactFiltersError> { + fn pop_cf_filter_resp(&self) -> Result<CFilter, CompactFiltersError> { let response = self .recv("cfilter", Some(Duration::from_secs(TIMEOUT_SECS)))? .ok_or(CompactFiltersError::Timeout)?; let response = match response { - NetworkMessage::CFilter(response) => response, - _ => return Err(CompactFiltersError::InvalidResponse), + NetworkMessage::CFilter(response) => response, + _ => return Err(CompactFiltersError::InvalidResponse), }; Ok(response) @@ -1068,7 +1068,7 @@ filter_type: u8, start_height: u32, stop_hash: BlockHash, - ) -> Result<(), CompactFiltersError> { + ) -> Result<(), CompactFiltersError> { self.send(NetworkMessage::GetCFilters(GetCFilters { filter_type, start_height, @@ -1080,34 +1080,34 @@ } pub trait InvPeer { - fn get_block(&self, block_hash: BlockHash) -> Result<Option<Block>, CompactFiltersError>; - fn ask_for_mempool(&self) -> Result<(), CompactFiltersError>; - fn broadcast_tx(&self, tx: Transaction) -> Result<(), CompactFiltersError>; + fn get_block(&self, block_hash: BlockHash) -> Result<Option<Block>, CompactFiltersError>; + fn ask_for_mempool(&self) -> Result<(), CompactFiltersError>; + fn broadcast_tx(&self, tx: Transaction) -> Result<(), CompactFiltersError>; } impl InvPeer for Peer { - fn get_block(&self, block_hash: BlockHash) -> Result<Option<Block>, CompactFiltersError> { + fn get_block(&self, block_hash: BlockHash) -> Result<Option<Block>, CompactFiltersError> { self.send(NetworkMessage::GetData(vec![Inventory::WitnessBlock( block_hash, )]))?; match self.recv("block", Some(Duration::from_secs(TIMEOUT_SECS)))? { - None => Ok(None), - Some(NetworkMessage::Block(response)) => Ok(Some(response)), - _ => Err(CompactFiltersError::InvalidResponse), + None => Ok(None), + Some(NetworkMessage::Block(response)) => Ok(Some(response)), + _ => Err(CompactFiltersError::InvalidResponse), } } - fn ask_for_mempool(&self) -> Result<(), CompactFiltersError> { + fn ask_for_mempool(&self) -> Result<(), CompactFiltersError> { if !self.version.services.has(ServiceFlags::BLOOM) { return Err(CompactFiltersError::PeerBloomDisabled); } self.send(NetworkMessage::MemPool)?; let inv = match self.recv("inv", Some(Duration::from_secs(5)))? { - None => return Ok(()), // empty mempool - Some(NetworkMessage::Inv(inv)) => inv, - _ => return Err(CompactFiltersError::InvalidResponse), + None => return Ok(()), // empty mempool + Some(NetworkMessage::Inv(inv)) => inv, + _ => return Err(CompactFiltersError::InvalidResponse), }; let getdata = inv @@ -1125,8 +1125,8 @@ .recv("tx", Some(Duration::from_secs(TIMEOUT_SECS)))? .ok_or(CompactFiltersError::Timeout)?; let tx = match tx { - NetworkMessage::Tx(tx) => tx, - _ => return Err(CompactFiltersError::InvalidResponse), + NetworkMessage::Tx(tx) => tx, + _ => return Err(CompactFiltersError::InvalidResponse), }; self.mempool.add_tx(tx); @@ -1135,7 +1135,7 @@ Ok(()) } - fn broadcast_tx(&self, tx: Transaction) -> Result<(), CompactFiltersError> { + fn broadcast_tx(&self, tx: Transaction) -> Result<(), CompactFiltersError> { self.mempool.add_tx(tx.clone()); self.send(NetworkMessage::Tx(tx))?; diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/store.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/store.rs.html index e7ee810018..e80b943506 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/store.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/store.rs.html @@ -911,33 +911,33 @@ } impl StoreEntry { - pub fn get_prefix(&self) -> Vec<u8> { + pub fn get_prefix(&self) -> Vec<u8> { match self { - StoreEntry::BlockHeader(_) => b"z", - StoreEntry::Block(_) => b"x", - StoreEntry::BlockHeaderIndex(_) => b"i", - StoreEntry::CFilterTable(_) => b"t", + StoreEntry::BlockHeader(_) => b"z", + StoreEntry::Block(_) => b"x", + StoreEntry::BlockHeaderIndex(_) => b"i", + StoreEntry::CFilterTable(_) => b"t", } .to_vec() } - pub fn get_key(&self) -> Vec<u8> { + pub fn get_key(&self) -> Vec<u8> { let mut prefix = self.get_prefix(); match self { - StoreEntry::BlockHeader(Some(height)) => { + StoreEntry::BlockHeader(Some(height)) => { prefix.extend_from_slice(&height.to_be_bytes()) } - StoreEntry::Block(Some(height)) => prefix.extend_from_slice(&height.to_be_bytes()), - StoreEntry::BlockHeaderIndex(Some(hash)) => { + StoreEntry::Block(Some(height)) => prefix.extend_from_slice(&height.to_be_bytes()), + StoreEntry::BlockHeaderIndex(Some(hash)) => { prefix.extend_from_slice(&hash.into_inner()) } - StoreEntry::CFilterTable((filter_type, bundle_index)) => { + StoreEntry::CFilterTable((filter_type, bundle_index)) => { prefix.push(*filter_type); if let Some(bundle_index) = bundle_index { prefix.extend_from_slice(&bundle_index.to_be_bytes()); } } - _ => {} + _ => {} } prefix @@ -945,56 +945,56 @@ } pub trait SerializeDb: Sized { - fn serialize(&self) -> Vec<u8>; - fn deserialize(data: &[u8]) -> Result<Self, CompactFiltersError>; + fn serialize(&self) -> Vec<u8>; + fn deserialize(data: &[u8]) -> Result<Self, CompactFiltersError>; } impl<T> SerializeDb for T where T: Encodable + Decodable, { - fn serialize(&self) -> Vec<u8> { + fn serialize(&self) -> Vec<u8> { serialize(self) } - fn deserialize(data: &[u8]) -> Result<Self, CompactFiltersError> { + fn deserialize(data: &[u8]) -> Result<Self, CompactFiltersError> { deserialize(data).map_err(|_| CompactFiltersError::DataCorruption) } } impl Encodable for BundleStatus { - fn consensus_encode<W: Write>(&self, mut e: W) -> Result<usize, std::io::Error> { + fn consensus_encode<W: Write>(&self, mut e: W) -> Result<usize, std::io::Error> { let mut written = 0; match self { - BundleStatus::Init => { + BundleStatus::Init => { written += 0x00u8.consensus_encode(&mut e)?; } - BundleStatus::CfHeaders { cf_headers } => { + BundleStatus::CfHeaders { cf_headers } => { written += 0x01u8.consensus_encode(&mut e)?; written += VarInt(cf_headers.len() as u64).consensus_encode(&mut e)?; for header in cf_headers { written += header.consensus_encode(&mut e)?; } } - BundleStatus::CFilters { cf_filters } => { + BundleStatus::CFilters { cf_filters } => { written += 0x02u8.consensus_encode(&mut e)?; written += VarInt(cf_filters.len() as u64).consensus_encode(&mut e)?; for filter in cf_filters { written += filter.consensus_encode(&mut e)?; } } - BundleStatus::Processed { cf_filters } => { + BundleStatus::Processed { cf_filters } => { written += 0x03u8.consensus_encode(&mut e)?; written += VarInt(cf_filters.len() as u64).consensus_encode(&mut e)?; for filter in cf_filters { written += filter.consensus_encode(&mut e)?; } } - BundleStatus::Pruned => { + BundleStatus::Pruned => { written += 0x04u8.consensus_encode(&mut e)?; } - BundleStatus::Tip { cf_filters } => { + BundleStatus::Tip { cf_filters } => { written += 0x05u8.consensus_encode(&mut e)?; written += VarInt(cf_filters.len() as u64).consensus_encode(&mut e)?; for filter in cf_filters { @@ -1008,11 +1008,11 @@ } impl Decodable for BundleStatus { - fn consensus_decode<D: Read>(mut d: D) -> Result<Self, bitcoin::consensus::encode::Error> { + fn consensus_decode<D: Read>(mut d: D) -> Result<Self, bitcoin::consensus::encode::Error> { let byte_type = u8::consensus_decode(&mut d)?; match byte_type { - 0x00 => Ok(BundleStatus::Init), - 0x01 => { + 0x00 => Ok(BundleStatus::Init), + 0x01 => { let num = VarInt::consensus_decode(&mut d)?; let num = num.0 as usize; @@ -1023,7 +1023,7 @@ Ok(BundleStatus::CfHeaders { cf_headers }) } - 0x02 => { + 0x02 => { let num = VarInt::consensus_decode(&mut d)?; let num = num.0 as usize; @@ -1034,7 +1034,7 @@ Ok(BundleStatus::CFilters { cf_filters }) } - 0x03 => { + 0x03 => { let num = VarInt::consensus_decode(&mut d)?; let num = num.0 as usize; @@ -1045,8 +1045,8 @@ Ok(BundleStatus::Processed { cf_filters }) } - 0x04 => Ok(BundleStatus::Pruned), - 0x05 => { + 0x04 => Ok(BundleStatus::Pruned), + 0x05 => { let num = VarInt::consensus_decode(&mut d)?; let num = num.0 as usize; @@ -1057,7 +1057,7 @@ Ok(BundleStatus::Tip { cf_filters }) } - _ => Err(bitcoin::consensus::encode::Error::ParseFailed( + _ => Err(bitcoin::consensus::encode::Error::ParseFailed( "Invalid byte type", )), } @@ -1073,12 +1073,12 @@ } impl ChainStore<Full> { - pub fn new(store: DB, network: Network) -> Result<Self, CompactFiltersError> { + pub fn new(store: DB, network: Network) -> Result<Self, CompactFiltersError> { let genesis = match network { - Network::Bitcoin => MAINNET_GENESIS.deref(), - Network::Testnet => TESTNET_GENESIS.deref(), - Network::Regtest => REGTEST_GENESIS.deref(), - Network::Signet => SIGNET_GENESIS.deref(), + Network::Bitcoin => MAINNET_GENESIS.deref(), + Network::Testnet => TESTNET_GENESIS.deref(), + Network::Regtest => REGTEST_GENESIS.deref(), + Network::Signet => SIGNET_GENESIS.deref(), }; let cf_name = "default".to_string(); @@ -1110,7 +1110,7 @@ }) } - pub fn get_locators(&self) -> Result<Vec<(BlockHash, usize)>, CompactFiltersError> { + pub fn get_locators(&self) -> Result<Vec<(BlockHash, usize)>, CompactFiltersError> { let mut step = 1; let mut index = self.get_height()?; let mut answer = Vec::new(); @@ -1140,7 +1140,7 @@ Ok(answer) } - pub fn start_snapshot(&self, from: usize) -> Result<ChainStore<Snapshot>, CompactFiltersError> { + pub fn start_snapshot(&self, from: usize) -> Result<ChainStore<Snapshot>, CompactFiltersError> { let new_cf_name: String = thread_rng().sample_iter(&Alphanumeric).take(16).collect(); let new_cf_name = format!("_headers:{}", new_cf_name); @@ -1180,7 +1180,7 @@ }) } - pub fn recover_snapshot(&self, cf_name: &str) -> Result<(), CompactFiltersError> { + pub fn recover_snapshot(&self, cf_name: &str) -> Result<(), CompactFiltersError> { let mut write_store = self.store.write().unwrap(); let snapshot_cf_handle = write_store.cf_handle(cf_name).unwrap(); @@ -1192,13 +1192,13 @@ .and_then(|(k, _)| k[1..].try_into().ok()) .map(usize::from_be_bytes) { - None => { + None => { std::mem::drop(iterator); write_store.drop_cf(cf_name).ok(); return Ok(()); } - Some(x) => x, + Some(x) => x, }; std::mem::drop(iterator); std::mem::drop(write_store); @@ -1220,7 +1220,7 @@ pub fn apply_snapshot( &self, snaphost: ChainStore<Snapshot>, - ) -> Result<(), CompactFiltersError> { + ) -> Result<(), CompactFiltersError> { let mut batch = WriteBatch::default(); let read_store = self.store.read().unwrap(); @@ -1269,7 +1269,7 @@ pub fn get_height_for( &self, block_hash: &BlockHash, - ) -> Result<Option<usize>, CompactFiltersError> { + ) -> Result<Option<usize>, CompactFiltersError> { let read_store = self.store.read().unwrap(); let cf_handle = read_store.cf_handle(&self.cf_name).unwrap(); @@ -1285,7 +1285,7 @@ .transpose() } - pub fn get_block_hash(&self, height: usize) -> Result<Option<BlockHash>, CompactFiltersError> { + pub fn get_block_hash(&self, height: usize) -> Result<Option<BlockHash>, CompactFiltersError> { let read_store = self.store.read().unwrap(); let cf_handle = read_store.cf_handle(&self.cf_name).unwrap(); @@ -1299,14 +1299,14 @@ .transpose() } - pub fn save_full_block(&self, block: &Block, height: usize) -> Result<(), CompactFiltersError> { + pub fn save_full_block(&self, block: &Block, height: usize) -> Result<(), CompactFiltersError> { let key = StoreEntry::Block(Some(height)).get_key(); self.store.read().unwrap().put(key, block.serialize())?; Ok(()) } - pub fn get_full_block(&self, height: usize) -> Result<Option<Block>, CompactFiltersError> { + pub fn get_full_block(&self, height: usize) -> Result<Option<Block>, CompactFiltersError> { let read_store = self.store.read().unwrap(); let key = StoreEntry::Block(Some(height)).get_key(); @@ -1318,7 +1318,7 @@ .map_err(|_| CompactFiltersError::DataCorruption) } - pub fn delete_blocks_until(&self, height: usize) -> Result<(), CompactFiltersError> { + pub fn delete_blocks_until(&self, height: usize) -> Result<(), CompactFiltersError> { let from_key = StoreEntry::Block(Some(0)).get_key(); let to_key = StoreEntry::Block(Some(height)).get_key(); @@ -1330,7 +1330,7 @@ Ok(()) } - pub fn iter_full_blocks(&self) -> Result<Vec<(usize, Block)>, CompactFiltersError> { + pub fn iter_full_blocks(&self) -> Result<Vec<(usize, Block)>, CompactFiltersError> { let read_store = self.store.read().unwrap(); let prefix = StoreEntry::Block(None).get_key(); @@ -1355,7 +1355,7 @@ } impl<T: StoreType> ChainStore<T> { - pub fn work(&self) -> Result<Uint256, CompactFiltersError> { + pub fn work(&self) -> Result<Uint256, CompactFiltersError> { let read_store = self.store.read().unwrap(); let cf_handle = read_store.cf_handle(&self.cf_name).unwrap(); @@ -1364,7 +1364,7 @@ Ok(iterator .last() - .map(|(_, v)| -> Result<_, CompactFiltersError> { + .map(|(_, v)| -> Result<_, CompactFiltersError> { let (_, work): (BlockHeader, Uint256) = SerializeDb::deserialize(&v)?; Ok(work) @@ -1373,7 +1373,7 @@ .unwrap_or_default()) } - pub fn get_height(&self) -> Result<usize, CompactFiltersError> { + pub fn get_height(&self) -> Result<usize, CompactFiltersError> { let read_store = self.store.read().unwrap(); let cf_handle = read_store.cf_handle(&self.cf_name).unwrap(); @@ -1382,7 +1382,7 @@ Ok(iterator .last() - .map(|(k, _)| -> Result<_, CompactFiltersError> { + .map(|(k, _)| -> Result<_, CompactFiltersError> { let height = usize::from_be_bytes( k[1..] .try_into() @@ -1395,7 +1395,7 @@ .unwrap_or_default()) } - pub fn get_tip_hash(&self) -> Result<Option<BlockHash>, CompactFiltersError> { + pub fn get_tip_hash(&self) -> Result<Option<BlockHash>, CompactFiltersError> { let read_store = self.store.read().unwrap(); let cf_handle = read_store.cf_handle(&self.cf_name).unwrap(); @@ -1404,7 +1404,7 @@ iterator .last() - .map(|(_, v)| -> Result<_, CompactFiltersError> { + .map(|(_, v)| -> Result<_, CompactFiltersError> { let (header, _): (BlockHeader, Uint256) = SerializeDb::deserialize(&v)?; Ok(header.block_hash()) @@ -1416,7 +1416,7 @@ &mut self, from: usize, headers: Vec<BlockHeader>, - ) -> Result<BlockHash, CompactFiltersError> { + ) -> Result<BlockHash, CompactFiltersError> { let mut batch = WriteBatch::default(); let read_store = self.store.read().unwrap(); @@ -1460,7 +1460,7 @@ } impl<T: StoreType> fmt::Debug for ChainStore<T> { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_struct(&format!("ChainStore<{:?}>", T::default())) .field("cf_name", &self.cf_name) .field("min_height", &self.min_height) @@ -1491,17 +1491,17 @@ pub fn new( headers_store: &ChainStore<Full>, filter_type: u8, - ) -> Result<Self, CompactFiltersError> { + ) -> Result<Self, CompactFiltersError> { let cf_store = CfStore { store: Arc::clone(&headers_store.store), filter_type, }; let genesis = match headers_store.network { - Network::Bitcoin => MAINNET_GENESIS.deref(), - Network::Testnet => TESTNET_GENESIS.deref(), - Network::Regtest => REGTEST_GENESIS.deref(), - Network::Signet => SIGNET_GENESIS.deref(), + Network::Bitcoin => MAINNET_GENESIS.deref(), + Network::Testnet => TESTNET_GENESIS.deref(), + Network::Regtest => REGTEST_GENESIS.deref(), + Network::Signet => SIGNET_GENESIS.deref(), }; let filter = BlockFilter::new_script_filter(genesis, |utxo| { @@ -1527,11 +1527,11 @@ Ok(cf_store) } - pub fn get_filter_type(&self) -> u8 { + pub fn get_filter_type(&self) -> u8 { self.filter_type } - pub fn get_bundles(&self) -> Result<Vec<BundleEntry>, CompactFiltersError> { + pub fn get_bundles(&self) -> Result<Vec<BundleEntry>, CompactFiltersError> { let read_store = self.store.read().unwrap(); let prefix = StoreEntry::CFilterTable((self.filter_type, None)).get_key(); @@ -1545,7 +1545,7 @@ .collect::<Result<_, _>>() } - pub fn get_checkpoints(&self) -> Result<Vec<FilterHeader>, CompactFiltersError> { + pub fn get_checkpoints(&self) -> Result<Vec<FilterHeader>, CompactFiltersError> { let read_store = self.store.read().unwrap(); let prefix = StoreEntry::CFilterTable((self.filter_type, None)).get_key(); @@ -1563,7 +1563,7 @@ pub fn replace_checkpoints( &self, checkpoints: Vec<FilterHeader>, - ) -> Result<(), CompactFiltersError> { + ) -> Result<(), CompactFiltersError> { let current_checkpoints = self.get_checkpoints()?; let mut equal_bundles = 0; @@ -1606,7 +1606,7 @@ bundle: usize, checkpoint: FilterHeader, filter_hashes: Vec<FilterHash>, - ) -> Result<BundleStatus, CompactFiltersError> { + ) -> Result<BundleStatus, CompactFiltersError> { let cf_headers: Vec<FilterHeader> = filter_hashes .into_iter() .scan(checkpoint, |prev_header, filter_hash| { @@ -1645,7 +1645,7 @@ checkpoint: FilterHeader, headers: Vec<FilterHeader>, filters: Vec<(usize, Vec<u8>)>, - ) -> Result<BundleStatus, CompactFiltersError> { + ) -> Result<BundleStatus, CompactFiltersError> { let cf_filters = filters .into_iter() .zip(headers.into_iter()) @@ -1673,7 +1673,7 @@ &self, bundle: usize, checkpoint: FilterHeader, - ) -> Result<BundleStatus, CompactFiltersError> { + ) -> Result<BundleStatus, CompactFiltersError> { let key = StoreEntry::CFilterTable((self.filter_type, Some(bundle))).get_key(); let value = (BundleStatus::Pruned, checkpoint); @@ -1688,7 +1688,7 @@ bundle: usize, cf_filters: Vec<Vec<u8>>, checkpoint: FilterHeader, - ) -> Result<BundleStatus, CompactFiltersError> { + ) -> Result<BundleStatus, CompactFiltersError> { let key = StoreEntry::CFilterTable((self.filter_type, Some(bundle))).get_key(); let value = (BundleStatus::Tip { cf_filters }, checkpoint); diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/sync.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/sync.rs.html index 9e1601fadd..7727dc3250 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/sync.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/sync.rs.html @@ -333,7 +333,7 @@ headers_store: Arc<ChainStore<Full>>, skip_blocks: usize, filter_type: u8, - ) -> Result<Self, CompactFiltersError> { + ) -> Result<Self, CompactFiltersError> { let cf_store = Arc::new(CfStore::new(&headers_store, filter_type)?); Ok(CfSync { @@ -344,19 +344,19 @@ }) } - pub fn pruned_bundles(&self) -> Result<usize, CompactFiltersError> { + pub fn pruned_bundles(&self) -> Result<usize, CompactFiltersError> { Ok(self .cf_store .get_bundles()? .into_iter() .skip(self.skip_blocks / 1000) .fold(0, |acc, (status, _)| match status { - BundleStatus::Pruned => acc + 1, - _ => acc, + BundleStatus::Pruned => acc + 1, + _ => acc, })) } - pub fn prepare_sync(&self, peer: Arc<Peer>) -> Result<(), CompactFiltersError> { + pub fn prepare_sync(&self, peer: Arc<Peer>) -> Result<(), CompactFiltersError> { let mut bundles_lock = self.bundles.lock().unwrap(); let resp = peer.get_cf_checkpt( @@ -378,17 +378,17 @@ peer: Arc<Peer>, process: F, completed_bundle: Q, - ) -> Result<(), CompactFiltersError> + ) -> Result<(), CompactFiltersError> where - F: Fn(&BlockHash, &BlockFilter) -> Result<bool, CompactFiltersError>, - Q: Fn(usize) -> Result<(), Error>, + F: Fn(&BlockHash, &BlockFilter) -> Result<bool, CompactFiltersError>, + Q: Fn(usize) -> Result<(), Error>, { let current_height = self.headers_store.get_height()?; // TODO: we should update it in case headers_store is also updated loop { let (mut status, checkpoint, index) = match self.bundles.lock().unwrap().pop_front() { - None => break, - Some(x) => x, + None => break, + Some(x) => x, }; log::debug!( @@ -399,7 +399,7 @@ ); let process_received_filters = - |expected_filters| -> Result<BTreeMap<usize, Vec<u8>>, CompactFiltersError> { + |expected_filters| -> Result<BTreeMap<usize, Vec<u8>>, CompactFiltersError> { let mut filters_map = BTreeMap::new(); for _ in 0..expected_filters { let filter = peer.pop_cf_filter_resp()?; @@ -408,8 +408,8 @@ } match self.headers_store.get_height_for(&filter.block_hash)? { - Some(height) => filters_map.insert(height, filter.filter), - None => return Err(CompactFiltersError::InvalidFilter), + Some(height) => filters_map.insert(height, filter.filter), + None => return Err(CompactFiltersError::InvalidFilter), }; } @@ -431,7 +431,7 @@ let resp = peer.get_cf_headers(0x00, start_height as u32, stop_hash)?; - assert!(resp.previous_filter_header == checkpoint); + assert!(resp.previous_filter_header == checkpoint); status = self.cf_store .advance_to_cf_headers(index, checkpoint, resp.filter_hashes)?; @@ -447,8 +447,8 @@ checkpoint, headers_resp.filter_hashes, )? { - BundleStatus::CfHeaders { cf_headers } => cf_headers, - _ => return Err(CompactFiltersError::InvalidResponse), + BundleStatus::CfHeaders { cf_headers } => cf_headers, + _ => return Err(CompactFiltersError::InvalidResponse), }; peer.get_cf_filters( @@ -540,9 +540,9 @@ peer: Arc<Peer>, store: Arc<ChainStore<Full>>, sync_fn: F, -) -> Result<Option<ChainStore<Snapshot>>, CompactFiltersError> +) -> Result<Option<ChainStore<Snapshot>>, CompactFiltersError> where - F: Fn(usize) -> Result<(), Error>, + F: Fn(usize) -> Result<(), Error>, { let locators = store.get_locators()?; let locators_vec = locators.iter().map(|(hash, _)| hash).cloned().collect(); @@ -561,8 +561,8 @@ } match locators_map.get(&headers[0].prev_blockhash) { - None => return Err(CompactFiltersError::InvalidHeaders), - Some(from) => (store.start_snapshot(*from)?, headers[0].prev_blockhash), + None => return Err(CompactFiltersError::InvalidHeaders), + Some(from) => (store.start_snapshot(*from)?, headers[0].prev_blockhash), } } else { return Err(CompactFiltersError::InvalidResponse); diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/electrum.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/electrum.rs.html index a51f2cbb78..f86a65da62 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/electrum.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/electrum.rs.html @@ -234,7 +234,7 @@ } impl std::convert::From<Client> for ElectrumBlockchain { - fn from(client: Client) -> Self { + fn from(client: Client) -> Self { ElectrumBlockchain { client, stop_gap: 20, @@ -243,7 +243,7 @@ } impl Blockchain for ElectrumBlockchain { - fn get_capabilities(&self) -> HashSet<Capability> { + fn get_capabilities(&self) -> HashSet<Capability> { vec![ Capability::FullHistory, Capability::GetAnyTx, @@ -257,20 +257,20 @@ &self, database: &mut D, progress_update: P, - ) -> Result<(), Error> { + ) -> Result<(), Error> { self.client .electrum_like_setup(self.stop_gap, database, progress_update) } - fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> { + fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> { Ok(self.client.transaction_get(txid).map(Option::Some)?) } - fn broadcast(&self, tx: &Transaction) -> Result<(), Error> { + fn broadcast(&self, tx: &Transaction) -> Result<(), Error> { Ok(self.client.transaction_broadcast(tx).map(|_| ())?) } - fn get_height(&self) -> Result<u32, Error> { + fn get_height(&self) -> Result<u32, Error> { // TODO: unsubscribe when added to the client, or is there a better call to use here? Ok(self @@ -279,7 +279,7 @@ .map(|data| data.height as u32)?) } - fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error> { + fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error> { Ok(FeeRate::from_btc_per_kvb( self.client.estimate_fee(target)? as f32 )) @@ -290,7 +290,7 @@ fn els_batch_script_get_history<'s, I: IntoIterator<Item = &'s Script> + Clone>( &self, scripts: I, - ) -> Result<Vec<Vec<ElsGetHistoryRes>>, Error> { + ) -> Result<Vec<Vec<ElsGetHistoryRes>>, Error> { self.batch_script_get_history(scripts) .map(|v| { v.into_iter() @@ -314,14 +314,14 @@ fn els_batch_transaction_get<'s, I: IntoIterator<Item = &'s Txid> + Clone>( &self, txids: I, - ) -> Result<Vec<Transaction>, Error> { + ) -> Result<Vec<Transaction>, Error> { self.batch_transaction_get(txids).map_err(Error::Electrum) } fn els_batch_block_header<I: IntoIterator<Item = u32> + Clone>( &self, heights: I, - ) -> Result<Vec<BlockHeader>, Error> { + ) -> Result<Vec<BlockHeader>, Error> { self.batch_block_header(heights).map_err(Error::Electrum) } } @@ -346,7 +346,7 @@ impl ConfigurableBlockchain for ElectrumBlockchain { type Config = ElectrumBlockchainConfig; - fn from_config(config: &Self::Config) -> Result<Self, Error> { + fn from_config(config: &Self::Config) -> Result<Self, Error> { let socks5 = config.socks5.as_ref().map(Socks5Config::new); let electrum_config = ConfigBuilder::new() .retry(config.retry) @@ -364,7 +364,7 @@ #[cfg(test)] #[cfg(feature = "test-electrum")] crate::bdk_blockchain_tests! { - fn test_instance(test_client: &TestClient) -> ElectrumBlockchain { + fn test_instance(test_client: &TestClient) -> ElectrumBlockchain { ElectrumBlockchain::from(Client::new(&test_client.electrsd.electrum_url).unwrap()) } } diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/esplora/mod.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/esplora/mod.rs.html index 7d87905c9b..b32b9da2f2 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/esplora/mod.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/esplora/mod.rs.html @@ -170,7 +170,7 @@ #[cfg(feature = "ureq")] pub use self::ureq::*; -fn into_fee_rate(target: usize, estimates: HashMap<String, f64>) -> Result<FeeRate, Error> { +fn into_fee_rate(target: usize, estimates: HashMap<String, f64>) -> Result<FeeRate, Error> { let fee_val = estimates .into_iter() .map(|(k, v)| Ok::<_, std::num::ParseIntError>((k.parse::<usize>()?, v))) @@ -231,7 +231,7 @@ } impl fmt::Display for EsploraError { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{:?}", self) } } @@ -252,7 +252,7 @@ #[cfg(test)] #[cfg(feature = "test-esplora")] crate::bdk_blockchain_tests! { - fn test_instance(test_client: &TestClient) -> EsploraBlockchain { + fn test_instance(test_client: &TestClient) -> EsploraBlockchain { EsploraBlockchain::new(&format!("http://{}",test_client.electrsd.esplora_url.as_ref().unwrap()), 20) } } diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/esplora/ureq.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/esplora/ureq.rs.html index 10f92a0fea..597ef626bd 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/esplora/ureq.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/esplora/ureq.rs.html @@ -448,7 +448,7 @@ } impl std::convert::From<UrlClient> for EsploraBlockchain { - fn from(url_client: UrlClient) -> Self { + fn from(url_client: UrlClient) -> Self { EsploraBlockchain { url_client, stop_gap: 20, @@ -458,7 +458,7 @@ impl EsploraBlockchain { /// Create a new instance of the client from a base URL and the `stop_gap`. - pub fn new(base_url: &str, stop_gap: usize) -> Self { + pub fn new(base_url: &str, stop_gap: usize) -> Self { EsploraBlockchain { url_client: UrlClient { url: base_url.to_string(), @@ -469,14 +469,14 @@ } /// Set the inner `ureq` agent. - pub fn with_agent(mut self, agent: Agent) -> Self { + pub fn with_agent(mut self, agent: Agent) -> Self { self.url_client.agent = agent; self } } impl Blockchain for EsploraBlockchain { - fn get_capabilities(&self) -> HashSet<Capability> { + fn get_capabilities(&self) -> HashSet<Capability> { vec![ Capability::FullHistory, Capability::GetAnyTx, @@ -490,71 +490,71 @@ &self, database: &mut D, progress_update: P, - ) -> Result<(), Error> { + ) -> Result<(), Error> { self.url_client .electrum_like_setup(self.stop_gap, database, progress_update) } - fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> { + fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> { Ok(self.url_client._get_tx(txid)?) } - fn broadcast(&self, tx: &Transaction) -> Result<(), Error> { + fn broadcast(&self, tx: &Transaction) -> Result<(), Error> { let _txid = self.url_client._broadcast(tx)?; Ok(()) } - fn get_height(&self) -> Result<u32, Error> { + fn get_height(&self) -> Result<u32, Error> { Ok(self.url_client._get_height()?) } - fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error> { + fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error> { let estimates = self.url_client._get_fee_estimates()?; super::into_fee_rate(target, estimates) } } impl UrlClient { - fn script_to_scripthash(script: &Script) -> String { + fn script_to_scripthash(script: &Script) -> String { sha256::Hash::hash(script.as_bytes()).into_inner().to_hex() } - fn _get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, EsploraError> { + fn _get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, EsploraError> { let resp = self .agent .get(&format!("{}/tx/{}/raw", self.url, txid)) .call(); match resp { - Ok(resp) => Ok(Some(deserialize(&into_bytes(resp)?)?)), - Err(ureq::Error::Status(code, _)) => { + Ok(resp) => Ok(Some(deserialize(&into_bytes(resp)?)?)), + Err(ureq::Error::Status(code, _)) => { if is_status_not_found(code) { return Ok(None); } Err(EsploraError::HttpResponse(code)) } - Err(e) => Err(EsploraError::Ureq(e)), + Err(e) => Err(EsploraError::Ureq(e)), } } - fn _get_tx_no_opt(&self, txid: &Txid) -> Result<Transaction, EsploraError> { + fn _get_tx_no_opt(&self, txid: &Txid) -> Result<Transaction, EsploraError> { match self._get_tx(txid) { - Ok(Some(tx)) => Ok(tx), - Ok(None) => Err(EsploraError::TransactionNotFound(*txid)), - Err(e) => Err(e), + Ok(Some(tx)) => Ok(tx), + Ok(None) => Err(EsploraError::TransactionNotFound(*txid)), + Err(e) => Err(e), } } - fn _get_header(&self, block_height: u32) -> Result<BlockHeader, EsploraError> { + fn _get_header(&self, block_height: u32) -> Result<BlockHeader, EsploraError> { let resp = self .agent .get(&format!("{}/block-height/{}", self.url, block_height)) .call(); let bytes = match resp { - Ok(resp) => Ok(into_bytes(resp)?), - Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)), - Err(e) => Err(EsploraError::Ureq(e)), + Ok(resp) => Ok(into_bytes(resp)?), + Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)), + Err(e) => Err(EsploraError::Ureq(e)), }?; let hash = std::str::from_utf8(&bytes) @@ -566,39 +566,39 @@ .call(); match resp { - Ok(resp) => Ok(deserialize(&Vec::from_hex(&resp.into_string()?)?)?), - Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)), - Err(e) => Err(EsploraError::Ureq(e)), + Ok(resp) => Ok(deserialize(&Vec::from_hex(&resp.into_string()?)?)?), + Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)), + Err(e) => Err(EsploraError::Ureq(e)), } } - fn _broadcast(&self, transaction: &Transaction) -> Result<(), EsploraError> { + fn _broadcast(&self, transaction: &Transaction) -> Result<(), EsploraError> { let resp = self .agent .post(&format!("{}/tx", self.url)) .send_string(&serialize(transaction).to_hex()); match resp { - Ok(_) => Ok(()), // We do not return the txid? - Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)), - Err(e) => Err(EsploraError::Ureq(e)), + Ok(_) => Ok(()), // We do not return the txid? + Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)), + Err(e) => Err(EsploraError::Ureq(e)), } } - fn _get_height(&self) -> Result<u32, EsploraError> { + fn _get_height(&self) -> Result<u32, EsploraError> { let resp = self .agent .get(&format!("{}/blocks/tip/height", self.url)) .call(); match resp { - Ok(resp) => Ok(resp.into_string()?.parse()?), - Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)), - Err(e) => Err(EsploraError::Ureq(e)), + Ok(resp) => Ok(resp.into_string()?.parse()?), + Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)), + Err(e) => Err(EsploraError::Ureq(e)), } } - fn _script_get_history(&self, script: &Script) -> Result<Vec<ElsGetHistoryRes>, EsploraError> { + fn _script_get_history(&self, script: &Script) -> Result<Vec<ElsGetHistoryRes>, EsploraError> { let mut result = Vec::new(); let scripthash = Self::script_to_scripthash(script); @@ -613,12 +613,12 @@ .call(); let v = match resp { - Ok(resp) => { + Ok(resp) => { let v: Vec<EsploraGetHistory> = resp.into_json()?; Ok(v) } - Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)), - Err(e) => Err(EsploraError::Ureq(e)), + Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)), + Err(e) => Err(EsploraError::Ureq(e)), }?; result.extend(v.into_iter().map(|x| ElsGetHistoryRes { @@ -645,12 +645,12 @@ .call(); let v = match resp { - Ok(resp) => { + Ok(resp) => { let v: Vec<EsploraGetHistory> = resp.into_json()?; Ok(v) } - Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)), - Err(e) => Err(EsploraError::Ureq(e)), + Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)), + Err(e) => Err(EsploraError::Ureq(e)), }?; let len = v.len(); @@ -673,30 +673,30 @@ Ok(result) } - fn _get_fee_estimates(&self) -> Result<HashMap<String, f64>, EsploraError> { + fn _get_fee_estimates(&self) -> Result<HashMap<String, f64>, EsploraError> { let resp = self .agent .get(&format!("{}/fee-estimates", self.url,)) .call(); let map = match resp { - Ok(resp) => { + Ok(resp) => { let map: HashMap<String, f64> = resp.into_json()?; Ok(map) } - Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)), - Err(e) => Err(EsploraError::Ureq(e)), + Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)), + Err(e) => Err(EsploraError::Ureq(e)), }?; Ok(map) } } -fn is_status_not_found(status: u16) -> bool { - status == 404 +fn is_status_not_found(status: u16) -> bool { + status == 404 } -fn into_bytes(resp: Response) -> Result<Vec<u8>, io::Error> { +fn into_bytes(resp: Response) -> Result<Vec<u8>, io::Error> { const BYTES_LIMIT: usize = 10 * 1_024 * 1_024; let mut buf: Vec<u8> = vec![]; @@ -717,7 +717,7 @@ fn els_batch_script_get_history<'s, I: IntoIterator<Item = &'s Script>>( &self, scripts: I, - ) -> Result<Vec<Vec<ElsGetHistoryRes>>, Error> { + ) -> Result<Vec<Vec<ElsGetHistoryRes>>, Error> { let mut results = vec![]; for script in scripts.into_iter() { let v = self._script_get_history(script)?; @@ -729,7 +729,7 @@ fn els_batch_transaction_get<'s, I: IntoIterator<Item = &'s Txid>>( &self, txids: I, - ) -> Result<Vec<Transaction>, Error> { + ) -> Result<Vec<Transaction>, Error> { let mut results = vec![]; for txid in txids.into_iter() { let tx = self._get_tx_no_opt(txid)?; @@ -741,7 +741,7 @@ fn els_batch_block_header<I: IntoIterator<Item = u32>>( &self, heights: I, - ) -> Result<Vec<BlockHeader>, Error> { + ) -> Result<Vec<BlockHeader>, Error> { let mut results = vec![]; for height in heights.into_iter() { let header = self._get_header(height)?; @@ -778,7 +778,7 @@ impl ConfigurableBlockchain for EsploraBlockchain { type Config = EsploraBlockchainConfig; - fn from_config(config: &Self::Config) -> Result<Self, Error> { + fn from_config(config: &Self::Config) -> Result<Self, Error> { let mut agent_builder = ureq::AgentBuilder::new() .timeout_read(Duration::from_secs(config.timeout_read)) .timeout_write(Duration::from_secs(config.timeout_write)); diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/mod.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/mod.rs.html index 6bac7fc40c..25fae058d8 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/mod.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/mod.rs.html @@ -345,7 +345,7 @@ #[maybe_async] pub trait Blockchain { /// Return the set of [`Capability`] supported by this backend - fn get_capabilities(&self) -> HashSet<Capability>; + fn get_capabilities(&self) -> HashSet<Capability>; /// Setup the backend and populate the internal database for the first time /// @@ -361,7 +361,7 @@ &self, database: &mut D, progress_update: P, - ) -> Result<(), Error>; + ) -> Result<(), Error>; /// Populate the internal database with transactions and UTXOs /// /// If not overridden, it defaults to calling [`Blockchain::setup`] internally. @@ -385,19 +385,19 @@ &self, database: &mut D, progress_update: P, - ) -> Result<(), Error> { + ) -> Result<(), Error> { maybe_await!(self.setup(database, progress_update)) } /// Fetch a transaction from the blockchain given its txid - fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error>; + fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error>; /// Broadcast a transaction - fn broadcast(&self, tx: &Transaction) -> Result<(), Error>; + fn broadcast(&self, tx: &Transaction) -> Result<(), Error>; /// Return the current height - fn get_height(&self) -> Result<u32, Error>; + fn get_height(&self) -> Result<u32, Error>; /// Estimate the fee rate required to confirm a transaction in a given `target` of blocks - fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error>; + fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error>; } /// Trait for [`Blockchain`] types that can be created given a configuration @@ -406,7 +406,7 @@ type Config: std::fmt::Debug; /// Create a new instance given a configuration - fn from_config(config: &Self::Config) -> Result<Self, Error>; + fn from_config(config: &Self::Config) -> Result<Self, Error>; } /// Data sent with a progress update over a [`channel`] @@ -419,16 +419,16 @@ /// /// The `progress` value should be in the range 0.0 - 100.0, and the `message` value is an /// optional text message that can be displayed to the user. - fn update(&self, progress: f32, message: Option<String>) -> Result<(), Error>; + fn update(&self, progress: f32, message: Option<String>) -> Result<(), Error>; } /// Shortcut to create a [`channel`] (pair of [`Sender`] and [`Receiver`]) that can transport [`ProgressData`] -pub fn progress() -> (Sender<ProgressData>, Receiver<ProgressData>) { +pub fn progress() -> (Sender<ProgressData>, Receiver<ProgressData>) { channel() } impl Progress for Sender<ProgressData> { - fn update(&self, progress: f32, message: Option<String>) -> Result<(), Error> { + fn update(&self, progress: f32, message: Option<String>) -> Result<(), Error> { if !(0.0..=100.0).contains(&progress) { return Err(Error::InvalidProgressValue(progress)); } @@ -443,12 +443,12 @@ pub struct NoopProgress; /// Create a new instance of [`NoopProgress`] -pub fn noop_progress() -> NoopProgress { +pub fn noop_progress() -> NoopProgress { NoopProgress } impl Progress for NoopProgress { - fn update(&self, _progress: f32, _message: Option<String>) -> Result<(), Error> { + fn update(&self, _progress: f32, _message: Option<String>) -> Result<(), Error> { Ok(()) } } @@ -458,12 +458,12 @@ pub struct LogProgress; /// Create a new instance of [`LogProgress`] -pub fn log_progress() -> LogProgress { +pub fn log_progress() -> LogProgress { LogProgress } impl Progress for LogProgress { - fn update(&self, progress: f32, message: Option<String>) -> Result<(), Error> { + fn update(&self, progress: f32, message: Option<String>) -> Result<(), Error> { log::info!( "Sync {:.3}%: `{}`", progress, @@ -476,7 +476,7 @@ #[maybe_async] impl<T: Blockchain> Blockchain for Arc<T> { - fn get_capabilities(&self) -> HashSet<Capability> { + fn get_capabilities(&self) -> HashSet<Capability> { maybe_await!(self.deref().get_capabilities()) } @@ -484,7 +484,7 @@ &self, database: &mut D, progress_update: P, - ) -> Result<(), Error> { + ) -> Result<(), Error> { maybe_await!(self.deref().setup(database, progress_update)) } @@ -492,21 +492,21 @@ &self, database: &mut D, progress_update: P, - ) -> Result<(), Error> { + ) -> Result<(), Error> { maybe_await!(self.deref().sync(database, progress_update)) } - fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> { + fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> { maybe_await!(self.deref().get_tx(txid)) } - fn broadcast(&self, tx: &Transaction) -> Result<(), Error> { + fn broadcast(&self, tx: &Transaction) -> Result<(), Error> { maybe_await!(self.deref().broadcast(tx)) } - fn get_height(&self) -> Result<u32, Error> { + fn get_height(&self) -> Result<u32, Error> { maybe_await!(self.deref().get_height()) } - fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error> { + fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error> { maybe_await!(self.deref().estimate_fee(target)) } } diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/utils.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/utils.rs.html index c5288d5967..8b32836a59 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/utils.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/blockchain/utils.rs.html @@ -425,17 +425,17 @@ fn els_batch_script_get_history<'s, I: IntoIterator<Item = &'s Script> + Clone>( &self, scripts: I, - ) -> Result<Vec<Vec<ElsGetHistoryRes>>, Error>; + ) -> Result<Vec<Vec<ElsGetHistoryRes>>, Error>; fn els_batch_transaction_get<'s, I: IntoIterator<Item = &'s Txid> + Clone>( &self, txids: I, - ) -> Result<Vec<Transaction>, Error>; + ) -> Result<Vec<Transaction>, Error>; fn els_batch_block_header<I: IntoIterator<Item = u32> + Clone>( &self, heights: I, - ) -> Result<Vec<BlockHeader>, Error>; + ) -> Result<Vec<BlockHeader>, Error>; // Provided methods down here... @@ -444,7 +444,7 @@ stop_gap: usize, db: &mut D, _progress_update: P, - ) -> Result<(), Error> { + ) -> Result<(), Error> { // TODO: progress let start = Instant::new(); debug!("start setup"); @@ -583,7 +583,7 @@ txs_raw_in_db: &HashMap<Txid, Transaction>, chunk_size: usize, db: &mut D, - ) -> Result<Vec<Transaction>, Error> { + ) -> Result<Vec<Transaction>, Error> { let mut txs_downloaded = vec![]; let txids_raw_in_db: HashSet<Txid> = txs_raw_in_db.keys().cloned().collect(); let txids_to_download: Vec<&Txid> = history_txs_id.difference(&txids_raw_in_db).collect(); @@ -624,7 +624,7 @@ txid_height: &HashMap<Txid, Option<u32>>, txs_details_in_db: &HashMap<Txid, TransactionDetails>, chunk_size: usize, - ) -> Result<HashMap<Txid, u64>, Error> { + ) -> Result<HashMap<Txid, u64>, Error> { let mut txid_timestamp = HashMap::new(); let txid_in_db_with_conf: HashSet<_> = txs_details_in_db .values() @@ -664,7 +664,7 @@ to_download: Vec<&Txid>, chunk_size: usize, db: &mut D, - ) -> Result<Vec<Transaction>, Error> { + ) -> Result<Vec<Transaction>, Error> { let mut txs_downloaded = vec![]; for chunk in ChunksIterator::new(to_download.into_iter(), chunk_size) { let call_result: Vec<Transaction> = @@ -688,7 +688,7 @@ height: Option<u32>, updates: &mut dyn BatchOperations, utxo_deps: &HashMap<OutPoint, OutPoint>, -) -> Result<(), Error> { +) -> Result<(), Error> { let tx = db.get_raw_tx(txid)?.ok_or(Error::TransactionNotFound)?; let mut incoming: u64 = 0; @@ -761,7 +761,7 @@ fn utxos_deps<D: BatchDatabase>( db: &mut D, tx_raw_in_db: &HashMap<Txid, Transaction>, -) -> Result<HashMap<OutPoint, OutPoint>, Error> { +) -> Result<HashMap<OutPoint, OutPoint>, Error> { let utxos = db.iter_utxos()?; let mut utxos_deps = HashMap::new(); for utxo in utxos { diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/database/any.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/database/any.rs.html index a259b301c3..0fa18b09a5 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/database/any.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/database/any.rs.html @@ -464,10 +464,10 @@ use super::*; macro_rules! impl_from { - ( $from:ty, $to:ty, $variant:ident, $( $cfg:tt )* ) => { + ( $from:ty, $to:ty, $variant:ident, $( $cfg:tt )* ) => { $( $cfg )* impl From<$from> for $to { - fn from(inner: $from) -> Self { + fn from(inner: $from) -> Self { <$to>::$variant(inner) } } @@ -475,13 +475,13 @@ } macro_rules! impl_inner_method { - ( $enum_name:ident, $self:expr, $name:ident $(, $args:expr)* ) => { + ( $enum_name:ident, $self:expr, $name:ident $(, $args:expr)* ) => { match $self { - $enum_name::Memory(inner) => inner.$name( $($args, )* ), + $enum_name::Memory(inner) => inner.$name( $($args, )* ), #[cfg(feature = "key-value-db")] - $enum_name::Sled(inner) => inner.$name( $($args, )* ), + $enum_name::Sled(inner) => inner.$name( $($args, )* ), #[cfg(feature = "sqlite")] - $enum_name::Sqlite(inner) => inner.$name( $($args, )* ), + $enum_name::Sqlite(inner) => inner.$name( $($args, )* ), } } } @@ -537,7 +537,7 @@ script: &Script, keychain: KeychainKind, child: u32, - ) -> Result<(), Error> { + ) -> Result<(), Error> { impl_inner_method!( AnyDatabase, self, @@ -547,16 +547,16 @@ child ) } - fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error> { + fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error> { impl_inner_method!(AnyDatabase, self, set_utxo, utxo) } - fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error> { + fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error> { impl_inner_method!(AnyDatabase, self, set_raw_tx, transaction) } - fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error> { + fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error> { impl_inner_method!(AnyDatabase, self, set_tx, transaction) } - fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error> { + fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error> { impl_inner_method!(AnyDatabase, self, set_last_index, keychain, value) } @@ -564,7 +564,7 @@ &mut self, keychain: KeychainKind, child: u32, - ) -> Result<Option<Script>, Error> { + ) -> Result<Option<Script>, Error> { impl_inner_method!( AnyDatabase, self, @@ -576,23 +576,23 @@ fn del_path_from_script_pubkey( &mut self, script: &Script, - ) -> Result<Option<(KeychainKind, u32)>, Error> { + ) -> Result<Option<(KeychainKind, u32)>, Error> { impl_inner_method!(AnyDatabase, self, del_path_from_script_pubkey, script) } - fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> { + fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> { impl_inner_method!(AnyDatabase, self, del_utxo, outpoint) } - fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> { + fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> { impl_inner_method!(AnyDatabase, self, del_raw_tx, txid) } fn del_tx( &mut self, txid: &Txid, include_raw: bool, - ) -> Result<Option<TransactionDetails>, Error> { + ) -> Result<Option<TransactionDetails>, Error> { impl_inner_method!(AnyDatabase, self, del_tx, txid, include_raw) } - fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error> { + fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error> { impl_inner_method!(AnyDatabase, self, del_last_index, keychain) } } @@ -602,7 +602,7 @@ &mut self, keychain: KeychainKind, bytes: B, - ) -> Result<(), Error> { + ) -> Result<(), Error> { impl_inner_method!( AnyDatabase, self, @@ -612,16 +612,16 @@ ) } - fn iter_script_pubkeys(&self, keychain: Option<KeychainKind>) -> Result<Vec<Script>, Error> { + fn iter_script_pubkeys(&self, keychain: Option<KeychainKind>) -> Result<Vec<Script>, Error> { impl_inner_method!(AnyDatabase, self, iter_script_pubkeys, keychain) } - fn iter_utxos(&self) -> Result<Vec<LocalUtxo>, Error> { + fn iter_utxos(&self) -> Result<Vec<LocalUtxo>, Error> { impl_inner_method!(AnyDatabase, self, iter_utxos) } - fn iter_raw_txs(&self) -> Result<Vec<Transaction>, Error> { + fn iter_raw_txs(&self) -> Result<Vec<Transaction>, Error> { impl_inner_method!(AnyDatabase, self, iter_raw_txs) } - fn iter_txs(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error> { + fn iter_txs(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error> { impl_inner_method!(AnyDatabase, self, iter_txs, include_raw) } @@ -629,7 +629,7 @@ &self, keychain: KeychainKind, child: u32, - ) -> Result<Option<Script>, Error> { + ) -> Result<Option<Script>, Error> { impl_inner_method!( AnyDatabase, self, @@ -641,27 +641,27 @@ fn get_path_from_script_pubkey( &self, script: &Script, - ) -> Result<Option<(KeychainKind, u32)>, Error> { + ) -> Result<Option<(KeychainKind, u32)>, Error> { impl_inner_method!(AnyDatabase, self, get_path_from_script_pubkey, script) } - fn get_utxo(&self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> { + fn get_utxo(&self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> { impl_inner_method!(AnyDatabase, self, get_utxo, outpoint) } - fn get_raw_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> { + fn get_raw_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> { impl_inner_method!(AnyDatabase, self, get_raw_tx, txid) } - fn get_tx(&self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error> { + fn get_tx(&self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error> { impl_inner_method!(AnyDatabase, self, get_tx, txid, include_raw) } - fn get_last_index(&self, keychain: KeychainKind) -> Result<Option<u32>, Error> { + fn get_last_index(&self, keychain: KeychainKind) -> Result<Option<u32>, Error> { impl_inner_method!(AnyDatabase, self, get_last_index, keychain) } - fn increment_last_index(&mut self, keychain: KeychainKind) -> Result<u32, Error> { + fn increment_last_index(&mut self, keychain: KeychainKind) -> Result<u32, Error> { impl_inner_method!(AnyDatabase, self, increment_last_index, keychain) } - fn flush(&mut self) -> Result<(), Error> { + fn flush(&mut self) -> Result<(), Error> { impl_inner_method!(AnyDatabase, self, flush) } } @@ -672,19 +672,19 @@ script: &Script, keychain: KeychainKind, child: u32, - ) -> Result<(), Error> { + ) -> Result<(), Error> { impl_inner_method!(AnyBatch, self, set_script_pubkey, script, keychain, child) } - fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error> { + fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error> { impl_inner_method!(AnyBatch, self, set_utxo, utxo) } - fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error> { + fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error> { impl_inner_method!(AnyBatch, self, set_raw_tx, transaction) } - fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error> { + fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error> { impl_inner_method!(AnyBatch, self, set_tx, transaction) } - fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error> { + fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error> { impl_inner_method!(AnyBatch, self, set_last_index, keychain, value) } @@ -692,29 +692,29 @@ &mut self, keychain: KeychainKind, child: u32, - ) -> Result<Option<Script>, Error> { + ) -> Result<Option<Script>, Error> { impl_inner_method!(AnyBatch, self, del_script_pubkey_from_path, keychain, child) } fn del_path_from_script_pubkey( &mut self, script: &Script, - ) -> Result<Option<(KeychainKind, u32)>, Error> { + ) -> Result<Option<(KeychainKind, u32)>, Error> { impl_inner_method!(AnyBatch, self, del_path_from_script_pubkey, script) } - fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> { + fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> { impl_inner_method!(AnyBatch, self, del_utxo, outpoint) } - fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> { + fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> { impl_inner_method!(AnyBatch, self, del_raw_tx, txid) } fn del_tx( &mut self, txid: &Txid, include_raw: bool, - ) -> Result<Option<TransactionDetails>, Error> { + ) -> Result<Option<TransactionDetails>, Error> { impl_inner_method!(AnyBatch, self, del_tx, txid, include_raw) } - fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error> { + fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error> { impl_inner_method!(AnyBatch, self, del_last_index, keychain) } } @@ -722,31 +722,31 @@ impl BatchDatabase for AnyDatabase { type Batch = AnyBatch; - fn begin_batch(&self) -> Self::Batch { + fn begin_batch(&self) -> Self::Batch { match self { - AnyDatabase::Memory(inner) => inner.begin_batch().into(), + AnyDatabase::Memory(inner) => inner.begin_batch().into(), #[cfg(feature = "key-value-db")] - AnyDatabase::Sled(inner) => inner.begin_batch().into(), + AnyDatabase::Sled(inner) => inner.begin_batch().into(), #[cfg(feature = "sqlite")] - AnyDatabase::Sqlite(inner) => inner.begin_batch().into(), + AnyDatabase::Sqlite(inner) => inner.begin_batch().into(), } } - fn commit_batch(&mut self, batch: Self::Batch) -> Result<(), Error> { + fn commit_batch(&mut self, batch: Self::Batch) -> Result<(), Error> { match self { - AnyDatabase::Memory(db) => match batch { - AnyBatch::Memory(batch) => db.commit_batch(batch), + AnyDatabase::Memory(db) => match batch { + AnyBatch::Memory(batch) => db.commit_batch(batch), #[cfg(any(feature = "key-value-db", feature = "sqlite"))] - _ => unimplemented!("Other batch shouldn't be used with Memory db."), + _ => unimplemented!("Other batch shouldn't be used with Memory db."), }, #[cfg(feature = "key-value-db")] - AnyDatabase::Sled(db) => match batch { - AnyBatch::Sled(batch) => db.commit_batch(batch), - _ => unimplemented!("Other batch shouldn't be used with Sled db."), + AnyDatabase::Sled(db) => match batch { + AnyBatch::Sled(batch) => db.commit_batch(batch), + _ => unimplemented!("Other batch shouldn't be used with Sled db."), }, #[cfg(feature = "sqlite")] - AnyDatabase::Sqlite(db) => match batch { - AnyBatch::Sqlite(batch) => db.commit_batch(batch), - _ => unimplemented!("Other batch shouldn't be used with Sqlite db."), + AnyDatabase::Sqlite(db) => match batch { + AnyBatch::Sqlite(batch) => db.commit_batch(batch), + _ => unimplemented!("Other batch shouldn't be used with Sqlite db."), }, } } @@ -766,7 +766,7 @@ impl ConfigurableDatabase for sled::Tree { type Config = SledDbConfiguration; - fn from_config(config: &Self::Config) -> Result<Self, Error> { + fn from_config(config: &Self::Config) -> Result<Self, Error> { Ok(sled::open(&config.path)?.open_tree(&config.tree_name)?) } } @@ -783,7 +783,7 @@ impl ConfigurableDatabase for sqlite::SqliteDatabase { type Config = SqliteDbConfiguration; - fn from_config(config: &Self::Config) -> Result<Self, Error> { + fn from_config(config: &Self::Config) -> Result<Self, Error> { Ok(sqlite::SqliteDatabase::new(config.path.clone())) } } @@ -810,15 +810,15 @@ impl ConfigurableDatabase for AnyDatabase { type Config = AnyDatabaseConfig; - fn from_config(config: &Self::Config) -> Result<Self, Error> { + fn from_config(config: &Self::Config) -> Result<Self, Error> { Ok(match config { - AnyDatabaseConfig::Memory(inner) => { + AnyDatabaseConfig::Memory(inner) => { AnyDatabase::Memory(memory::MemoryDatabase::from_config(inner)?) } #[cfg(feature = "key-value-db")] - AnyDatabaseConfig::Sled(inner) => AnyDatabase::Sled(sled::Tree::from_config(inner)?), + AnyDatabaseConfig::Sled(inner) => AnyDatabase::Sled(sled::Tree::from_config(inner)?), #[cfg(feature = "sqlite")] - AnyDatabaseConfig::Sqlite(inner) => { + AnyDatabaseConfig::Sqlite(inner) => { AnyDatabase::Sqlite(sqlite::SqliteDatabase::from_config(inner)?) } }) diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/database/keyvalue.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/database/keyvalue.rs.html index 111cc74a11..b445de93bd 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/database/keyvalue.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/database/keyvalue.rs.html @@ -496,8 +496,8 @@ use crate::types::*; macro_rules! impl_batch_operations { - ( { $($after_insert:tt)* }, $process_delete:ident ) => { - fn set_script_pubkey(&mut self, script: &Script, keychain: KeychainKind, path: u32) -> Result<(), Error> { + ( { $($after_insert:tt)* }, $process_delete:ident ) => { + fn set_script_pubkey(&mut self, script: &Script, keychain: KeychainKind, path: u32) -> Result<(), Error> { let key = MapKey::Path((Some(keychain), Some(path))).as_map_key(); self.insert(key, serialize(script))$($after_insert)*; @@ -511,7 +511,7 @@ Ok(()) } - fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error> { + fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error> { let key = MapKey::Utxo(Some(&utxo.outpoint)).as_map_key(); let value = json!({ "t": utxo.txout, @@ -522,7 +522,7 @@ Ok(()) } - fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error> { + fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error> { let key = MapKey::RawTx(Some(&transaction.txid())).as_map_key(); let value = serialize(transaction); self.insert(key, value)$($after_insert)*; @@ -530,7 +530,7 @@ Ok(()) } - fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error> { + fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error> { let key = MapKey::Transaction(Some(&transaction.txid)).as_map_key(); // remove the raw tx from the serialized version @@ -548,14 +548,14 @@ Ok(()) } - fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error> { + fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error> { let key = MapKey::LastIndex(keychain).as_map_key(); self.insert(key, &value.to_be_bytes())$($after_insert)*; Ok(()) } - fn del_script_pubkey_from_path(&mut self, keychain: KeychainKind, path: u32) -> Result<Option<Script>, Error> { + fn del_script_pubkey_from_path(&mut self, keychain: KeychainKind, path: u32) -> Result<Option<Script>, Error> { let key = MapKey::Path((Some(keychain), Some(path))).as_map_key(); let res = self.remove(key); let res = $process_delete!(res); @@ -563,14 +563,14 @@ Ok(res.map_or(Ok(None), |x| Some(deserialize(&x)).transpose())?) } - fn del_path_from_script_pubkey(&mut self, script: &Script) -> Result<Option<(KeychainKind, u32)>, Error> { + fn del_path_from_script_pubkey(&mut self, script: &Script) -> Result<Option<(KeychainKind, u32)>, Error> { let key = MapKey::Script(Some(script)).as_map_key(); let res = self.remove(key); let res = $process_delete!(res); match res { - None => Ok(None), - Some(b) => { + None => Ok(None), + Some(b) => { let mut val: serde_json::Value = serde_json::from_slice(&b)?; let st = serde_json::from_value(val["t"].take())?; let path = serde_json::from_value(val["p"].take())?; @@ -580,14 +580,14 @@ } } - fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> { + fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> { let key = MapKey::Utxo(Some(outpoint)).as_map_key(); let res = self.remove(key); let res = $process_delete!(res); match res { - None => Ok(None), - Some(b) => { + None => Ok(None), + Some(b) => { let mut val: serde_json::Value = serde_json::from_slice(&b)?; let txout = serde_json::from_value(val["t"].take())?; let keychain = serde_json::from_value(val["i"].take())?; @@ -597,7 +597,7 @@ } } - fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> { + fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> { let key = MapKey::RawTx(Some(txid)).as_map_key(); let res = self.remove(key); let res = $process_delete!(res); @@ -605,7 +605,7 @@ Ok(res.map_or(Ok(None), |x| Some(deserialize(&x)).transpose())?) } - fn del_tx(&mut self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error> { + fn del_tx(&mut self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error> { let raw_tx = if include_raw { self.del_raw_tx(txid)? } else { @@ -617,8 +617,8 @@ let res = $process_delete!(res); match res { - None => Ok(None), - Some(b) => { + None => Ok(None), + Some(b) => { let mut val: TransactionDetails = serde_json::from_slice(&b)?; val.transaction = raw_tx; @@ -627,14 +627,14 @@ } } - fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error> { + fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error> { let key = MapKey::LastIndex(keychain).as_map_key(); let res = self.remove(key); let res = $process_delete!(res); match res { - None => Ok(None), - Some(b) => { + None => Ok(None), + Some(b) => { let array: [u8; 4] = b.as_ref().try_into().map_err(|_| Error::InvalidU32Bytes(b.to_vec()))?; let val = u32::from_be_bytes(array); Ok(Some(val)) @@ -645,7 +645,7 @@ } macro_rules! process_delete_tree { - ($res:expr) => { + ($res:expr) => { $res? }; } @@ -654,7 +654,7 @@ } macro_rules! process_delete_batch { - ($res:expr) => { + ($res:expr) => { None as Option<sled::IVec> }; } @@ -668,12 +668,12 @@ &mut self, keychain: KeychainKind, bytes: B, - ) -> Result<(), Error> { + ) -> Result<(), Error> { let key = MapKey::DescriptorChecksum(keychain).as_map_key(); let prev = self.get(&key)?.map(|x| x.to_vec()); if let Some(val) = prev { - if val == bytes.as_ref() { + if val == bytes.as_ref() { Ok(()) } else { Err(Error::ChecksumMismatch) @@ -684,20 +684,20 @@ } } - fn iter_script_pubkeys(&self, keychain: Option<KeychainKind>) -> Result<Vec<Script>, Error> { + fn iter_script_pubkeys(&self, keychain: Option<KeychainKind>) -> Result<Vec<Script>, Error> { let key = MapKey::Path((keychain, None)).as_map_key(); self.scan_prefix(key) - .map(|x| -> Result<_, Error> { + .map(|x| -> Result<_, Error> { let (_, v) = x?; Ok(deserialize(&v)?) }) .collect() } - fn iter_utxos(&self) -> Result<Vec<LocalUtxo>, Error> { + fn iter_utxos(&self) -> Result<Vec<LocalUtxo>, Error> { let key = MapKey::Utxo(None).as_map_key(); self.scan_prefix(key) - .map(|x| -> Result<_, Error> { + .map(|x| -> Result<_, Error> { let (k, v) = x?; let outpoint = deserialize(&k[1..])?; @@ -714,20 +714,20 @@ .collect() } - fn iter_raw_txs(&self) -> Result<Vec<Transaction>, Error> { + fn iter_raw_txs(&self) -> Result<Vec<Transaction>, Error> { let key = MapKey::RawTx(None).as_map_key(); self.scan_prefix(key) - .map(|x| -> Result<_, Error> { + .map(|x| -> Result<_, Error> { let (_, v) = x?; Ok(deserialize(&v)?) }) .collect() } - fn iter_txs(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error> { + fn iter_txs(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error> { let key = MapKey::Transaction(None).as_map_key(); self.scan_prefix(key) - .map(|x| -> Result<_, Error> { + .map(|x| -> Result<_, Error> { let (k, v) = x?; let mut txdetails: TransactionDetails = serde_json::from_slice(&v)?; if include_raw { @@ -744,7 +744,7 @@ &self, keychain: KeychainKind, path: u32, - ) -> Result<Option<Script>, Error> { + ) -> Result<Option<Script>, Error> { let key = MapKey::Path((Some(keychain), Some(path))).as_map_key(); Ok(self.get(key)?.map(|b| deserialize(&b)).transpose()?) } @@ -752,10 +752,10 @@ fn get_path_from_script_pubkey( &self, script: &Script, - ) -> Result<Option<(KeychainKind, u32)>, Error> { + ) -> Result<Option<(KeychainKind, u32)>, Error> { let key = MapKey::Script(Some(script)).as_map_key(); self.get(key)? - .map(|b| -> Result<_, Error> { + .map(|b| -> Result<_, Error> { let mut val: serde_json::Value = serde_json::from_slice(&b)?; let st = serde_json::from_value(val["t"].take())?; let path = serde_json::from_value(val["p"].take())?; @@ -765,10 +765,10 @@ .transpose() } - fn get_utxo(&self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> { + fn get_utxo(&self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> { let key = MapKey::Utxo(Some(outpoint)).as_map_key(); self.get(key)? - .map(|b| -> Result<_, Error> { + .map(|b| -> Result<_, Error> { let mut val: serde_json::Value = serde_json::from_slice(&b)?; let txout = serde_json::from_value(val["t"].take())?; let keychain = serde_json::from_value(val["i"].take())?; @@ -782,15 +782,15 @@ .transpose() } - fn get_raw_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> { + fn get_raw_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> { let key = MapKey::RawTx(Some(txid)).as_map_key(); Ok(self.get(key)?.map(|b| deserialize(&b)).transpose()?) } - fn get_tx(&self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error> { + fn get_tx(&self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error> { let key = MapKey::Transaction(Some(txid)).as_map_key(); self.get(key)? - .map(|b| -> Result<_, Error> { + .map(|b| -> Result<_, Error> { let mut txdetails: TransactionDetails = serde_json::from_slice(&b)?; if include_raw { txdetails.transaction = self.get_raw_tx(txid)?; @@ -801,10 +801,10 @@ .transpose() } - fn get_last_index(&self, keychain: KeychainKind) -> Result<Option<u32>, Error> { + fn get_last_index(&self, keychain: KeychainKind) -> Result<Option<u32>, Error> { let key = MapKey::LastIndex(keychain).as_map_key(); self.get(key)? - .map(|b| -> Result<_, Error> { + .map(|b| -> Result<_, Error> { let array: [u8; 4] = b .as_ref() .try_into() @@ -816,22 +816,22 @@ } // inserts 0 if not present - fn increment_last_index(&mut self, keychain: KeychainKind) -> Result<u32, Error> { + fn increment_last_index(&mut self, keychain: KeychainKind) -> Result<u32, Error> { let key = MapKey::LastIndex(keychain).as_map_key(); self.update_and_fetch(key, |prev| { let new = match prev { - Some(b) => { + Some(b) => { let array: [u8; 4] = b.try_into().unwrap_or([0; 4]); let val = u32::from_be_bytes(array); val + 1 } - None => 0, + None => 0, }; Some(new.to_be_bytes().to_vec()) })? - .map_or(Ok(0), |b| -> Result<_, Error> { + .map_or(Ok(0), |b| -> Result<_, Error> { let array: [u8; 4] = b .as_ref() .try_into() @@ -841,7 +841,7 @@ }) } - fn flush(&mut self) -> Result<(), Error> { + fn flush(&mut self) -> Result<(), Error> { Ok(Tree::flush(self).map(|_| ())?) } } @@ -849,11 +849,11 @@ impl BatchDatabase for Tree { type Batch = sled::Batch; - fn begin_batch(&self) -> Self::Batch { + fn begin_batch(&self) -> Self::Batch { sled::Batch::default() } - fn commit_batch(&mut self, batch: Self::Batch) -> Result<(), Error> { + fn commit_batch(&mut self, batch: Self::Batch) -> Result<(), Error> { Ok(self.apply_batch(batch)?) } } @@ -874,7 +874,7 @@ static ref INIT: Once = Once::new(); } - fn get_tree() -> Tree { + fn get_tree() -> Tree { unsafe { let cloned = DB.clone(); let (mutex, cvar) = &*cloned; diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/database/memory.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/database/memory.rs.html index 5c0d43db48..13bfc562a4 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/database/memory.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/database/memory.rs.html @@ -636,36 +636,36 @@ } impl MapKey<'_> { - fn as_prefix(&self) -> Vec<u8> { + fn as_prefix(&self) -> Vec<u8> { match self { - MapKey::Path((st, _)) => { + MapKey::Path((st, _)) => { let mut v = b"p".to_vec(); if let Some(st) = st { v.push(st.as_byte()); } v } - MapKey::Script(_) => b"s".to_vec(), - MapKey::Utxo(_) => b"u".to_vec(), - MapKey::RawTx(_) => b"r".to_vec(), - MapKey::Transaction(_) => b"t".to_vec(), - MapKey::LastIndex(st) => [b"c", st.as_ref()].concat(), - MapKey::DescriptorChecksum(st) => [b"d", st.as_ref()].concat(), + MapKey::Script(_) => b"s".to_vec(), + MapKey::Utxo(_) => b"u".to_vec(), + MapKey::RawTx(_) => b"r".to_vec(), + MapKey::Transaction(_) => b"t".to_vec(), + MapKey::LastIndex(st) => [b"c", st.as_ref()].concat(), + MapKey::DescriptorChecksum(st) => [b"d", st.as_ref()].concat(), } } - fn serialize_content(&self) -> Vec<u8> { + fn serialize_content(&self) -> Vec<u8> { match self { - MapKey::Path((_, Some(child))) => child.to_be_bytes().to_vec(), - MapKey::Script(Some(s)) => serialize(*s), - MapKey::Utxo(Some(s)) => serialize(*s), - MapKey::RawTx(Some(s)) => serialize(*s), - MapKey::Transaction(Some(s)) => serialize(*s), - _ => vec![], + MapKey::Path((_, Some(child))) => child.to_be_bytes().to_vec(), + MapKey::Script(Some(s)) => serialize(*s), + MapKey::Utxo(Some(s)) => serialize(*s), + MapKey::RawTx(Some(s)) => serialize(*s), + MapKey::Transaction(Some(s)) => serialize(*s), + _ => vec![], } } - pub fn as_map_key(&self) -> Vec<u8> { + pub fn as_map_key(&self) -> Vec<u8> { let mut v = self.as_prefix(); v.extend_from_slice(&self.serialize_content()); @@ -673,11 +673,11 @@ } } -fn after(key: &[u8]) -> Vec<u8> { +fn after(key: &[u8]) -> Vec<u8> { let mut key = key.to_owned(); let mut idx = key.len(); while idx > 0 { - if key[idx - 1] == 0xFF { + if key[idx - 1] == 0xFF { idx -= 1; continue; } else { @@ -708,7 +708,7 @@ impl MemoryDatabase { /// Create a new empty database - pub fn new() -> Self { + pub fn new() -> Self { MemoryDatabase { map: BTreeMap::new(), deleted_keys: Vec::new(), @@ -722,7 +722,7 @@ script: &Script, keychain: KeychainKind, path: u32, - ) -> Result<(), Error> { + ) -> Result<(), Error> { let key = MapKey::Path((Some(keychain), Some(path))).as_map_key(); self.map.insert(key, Box::new(script.clone())); @@ -736,20 +736,20 @@ Ok(()) } - fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error> { + fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error> { let key = MapKey::Utxo(Some(&utxo.outpoint)).as_map_key(); self.map .insert(key, Box::new((utxo.txout.clone(), utxo.keychain))); Ok(()) } - fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error> { + fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error> { let key = MapKey::RawTx(Some(&transaction.txid())).as_map_key(); self.map.insert(key, Box::new(transaction.clone())); Ok(()) } - fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error> { + fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error> { let key = MapKey::Transaction(Some(&transaction.txid)).as_map_key(); // insert the raw_tx if present @@ -765,7 +765,7 @@ Ok(()) } - fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error> { + fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error> { let key = MapKey::LastIndex(keychain).as_map_key(); self.map.insert(key, Box::new(value)); @@ -776,7 +776,7 @@ &mut self, keychain: KeychainKind, path: u32, - ) -> Result<Option<Script>, Error> { + ) -> Result<Option<Script>, Error> { let key = MapKey::Path((Some(keychain), Some(path))).as_map_key(); let res = self.map.remove(&key); self.deleted_keys.push(key); @@ -786,14 +786,14 @@ fn del_path_from_script_pubkey( &mut self, script: &Script, - ) -> Result<Option<(KeychainKind, u32)>, Error> { + ) -> Result<Option<(KeychainKind, u32)>, Error> { let key = MapKey::Script(Some(script)).as_map_key(); let res = self.map.remove(&key); self.deleted_keys.push(key); match res { - None => Ok(None), - Some(b) => { + None => Ok(None), + Some(b) => { let mut val: serde_json::Value = b.downcast_ref().cloned().unwrap(); let st = serde_json::from_value(val["t"].take())?; let path = serde_json::from_value(val["p"].take())?; @@ -802,14 +802,14 @@ } } } - fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> { + fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> { let key = MapKey::Utxo(Some(outpoint)).as_map_key(); let res = self.map.remove(&key); self.deleted_keys.push(key); match res { - None => Ok(None), - Some(b) => { + None => Ok(None), + Some(b) => { let (txout, keychain) = b.downcast_ref().cloned().unwrap(); Ok(Some(LocalUtxo { outpoint: *outpoint, @@ -819,7 +819,7 @@ } } } - fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> { + fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> { let key = MapKey::RawTx(Some(txid)).as_map_key(); let res = self.map.remove(&key); self.deleted_keys.push(key); @@ -830,7 +830,7 @@ &mut self, txid: &Txid, include_raw: bool, - ) -> Result<Option<TransactionDetails>, Error> { + ) -> Result<Option<TransactionDetails>, Error> { let raw_tx = if include_raw { self.del_raw_tx(txid)? } else { @@ -842,8 +842,8 @@ self.deleted_keys.push(key); match res { - None => Ok(None), - Some(b) => { + None => Ok(None), + Some(b) => { let mut val: TransactionDetails = b.downcast_ref().cloned().unwrap(); val.transaction = raw_tx; @@ -851,14 +851,14 @@ } } } - fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error> { + fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error> { let key = MapKey::LastIndex(keychain).as_map_key(); let res = self.map.remove(&key); self.deleted_keys.push(key); match res { - None => Ok(None), - Some(b) => Ok(Some(*b.downcast_ref().unwrap())), + None => Ok(None), + Some(b) => Ok(Some(*b.downcast_ref().unwrap())), } } } @@ -868,7 +868,7 @@ &mut self, keychain: KeychainKind, bytes: B, - ) -> Result<(), Error> { + ) -> Result<(), Error> { let key = MapKey::DescriptorChecksum(keychain).as_map_key(); let prev = self @@ -876,7 +876,7 @@ .get(&key) .map(|x| x.downcast_ref::<Vec<u8>>().unwrap()); if let Some(val) = prev { - if val == &bytes.as_ref().to_vec() { + if val == &bytes.as_ref().to_vec() { Ok(()) } else { Err(Error::ChecksumMismatch) @@ -887,7 +887,7 @@ } } - fn iter_script_pubkeys(&self, keychain: Option<KeychainKind>) -> Result<Vec<Script>, Error> { + fn iter_script_pubkeys(&self, keychain: Option<KeychainKind>) -> Result<Vec<Script>, Error> { let key = MapKey::Path((keychain, None)).as_map_key(); self.map .range::<Vec<u8>, _>((Included(&key), Excluded(&after(&key)))) @@ -895,7 +895,7 @@ .collect() } - fn iter_utxos(&self) -> Result<Vec<LocalUtxo>, Error> { + fn iter_utxos(&self) -> Result<Vec<LocalUtxo>, Error> { let key = MapKey::Utxo(None).as_map_key(); self.map .range::<Vec<u8>, _>((Included(&key), Excluded(&after(&key)))) @@ -911,7 +911,7 @@ .collect() } - fn iter_raw_txs(&self) -> Result<Vec<Transaction>, Error> { + fn iter_raw_txs(&self) -> Result<Vec<Transaction>, Error> { let key = MapKey::RawTx(None).as_map_key(); self.map .range::<Vec<u8>, _>((Included(&key), Excluded(&after(&key)))) @@ -919,7 +919,7 @@ .collect() } - fn iter_txs(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error> { + fn iter_txs(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error> { let key = MapKey::Transaction(None).as_map_key(); self.map .range::<Vec<u8>, _>((Included(&key), Excluded(&after(&key)))) @@ -939,7 +939,7 @@ &self, keychain: KeychainKind, path: u32, - ) -> Result<Option<Script>, Error> { + ) -> Result<Option<Script>, Error> { let key = MapKey::Path((Some(keychain), Some(path))).as_map_key(); Ok(self .map @@ -950,7 +950,7 @@ fn get_path_from_script_pubkey( &self, script: &Script, - ) -> Result<Option<(KeychainKind, u32)>, Error> { + ) -> Result<Option<(KeychainKind, u32)>, Error> { let key = MapKey::Script(Some(script)).as_map_key(); Ok(self.map.get(&key).map(|b| { let mut val: serde_json::Value = b.downcast_ref().cloned().unwrap(); @@ -961,7 +961,7 @@ })) } - fn get_utxo(&self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> { + fn get_utxo(&self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> { let key = MapKey::Utxo(Some(outpoint)).as_map_key(); Ok(self.map.get(&key).map(|b| { let (txout, keychain) = b.downcast_ref().cloned().unwrap(); @@ -973,7 +973,7 @@ })) } - fn get_raw_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> { + fn get_raw_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> { let key = MapKey::RawTx(Some(txid)).as_map_key(); Ok(self .map @@ -981,7 +981,7 @@ .map(|b| b.downcast_ref().cloned().unwrap())) } - fn get_tx(&self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error> { + fn get_tx(&self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error> { let key = MapKey::Transaction(Some(txid)).as_map_key(); Ok(self.map.get(&key).map(|b| { let mut txdetails: TransactionDetails = b.downcast_ref().cloned().unwrap(); @@ -993,13 +993,13 @@ })) } - fn get_last_index(&self, keychain: KeychainKind) -> Result<Option<u32>, Error> { + fn get_last_index(&self, keychain: KeychainKind) -> Result<Option<u32>, Error> { let key = MapKey::LastIndex(keychain).as_map_key(); Ok(self.map.get(&key).map(|b| *b.downcast_ref().unwrap())) } // inserts 0 if not present - fn increment_last_index(&mut self, keychain: KeychainKind) -> Result<u32, Error> { + fn increment_last_index(&mut self, keychain: KeychainKind) -> Result<u32, Error> { let key = MapKey::LastIndex(keychain).as_map_key(); let value = self .map @@ -1012,7 +1012,7 @@ Ok(*value) } - fn flush(&mut self) -> Result<(), Error> { + fn flush(&mut self) -> Result<(), Error> { Ok(()) } } @@ -1020,11 +1020,11 @@ impl BatchDatabase for MemoryDatabase { type Batch = Self; - fn begin_batch(&self) -> Self::Batch { + fn begin_batch(&self) -> Self::Batch { MemoryDatabase::new() } - fn commit_batch(&mut self, mut batch: Self::Batch) -> Result<(), Error> { + fn commit_batch(&mut self, mut batch: Self::Batch) -> Result<(), Error> { for key in batch.deleted_keys.iter() { self.map.remove(key); } @@ -1036,7 +1036,7 @@ impl ConfigurableDatabase for MemoryDatabase { type Config = (); - fn from_config(_config: &Self::Config) -> Result<Self, Error> { + fn from_config(_config: &Self::Config) -> Result<Self, Error> { Ok(MemoryDatabase::default()) } } @@ -1047,7 +1047,7 @@ /// macro and not a `[cfg(test)]` function so it can be called within the context of doctests which /// don't have `test` set. macro_rules! populate_test_db { - ($db:expr, $tx_meta:expr, $current_height:expr$(,)?) => {{ + ($db:expr, $tx_meta:expr, $current_height:expr$(,)?) => {{ use std::str::FromStr; use $crate::database::BatchOperations; let mut db = $db; @@ -1108,7 +1108,7 @@ #[doc(hidden)] /// Macro for getting a wallet for use in a doctest macro_rules! doctest_wallet { - () => {{ + () => {{ use $crate::bitcoin::Network; use $crate::database::MemoryDatabase; use $crate::testutils; @@ -1119,7 +1119,7 @@ let txid = populate_test_db!( &mut db, testutils! { - @tx ( (@external descriptors, 0) => 500_000 ) (@confirmations 1) + @tx ( (@external descriptors, 0) => 500_000 ) (@confirmations 1) }, Some(100), ); @@ -1138,7 +1138,7 @@ mod test { use super::MemoryDatabase; - fn get_tree() -> MemoryDatabase { + fn get_tree() -> MemoryDatabase { MemoryDatabase::new() } diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/database/mod.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/database/mod.rs.html index 8dfc8a0079..9cd553a737 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/database/mod.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/database/mod.rs.html @@ -436,40 +436,40 @@ script: &Script, keychain: KeychainKind, child: u32, - ) -> Result<(), Error>; + ) -> Result<(), Error>; /// Store a [`LocalUtxo`] - fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error>; + fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error>; /// Store a raw transaction - fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error>; + fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error>; /// Store the metadata of a transaction - fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error>; + fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error>; /// Store the last derivation index for a given keychain. - fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error>; + fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error>; /// Delete a script_pubkey given the keychain and its child number. fn del_script_pubkey_from_path( &mut self, keychain: KeychainKind, child: u32, - ) -> Result<Option<Script>, Error>; + ) -> Result<Option<Script>, Error>; /// Delete the data related to a specific script_pubkey, meaning the keychain and the child /// number. fn del_path_from_script_pubkey( &mut self, script: &Script, - ) -> Result<Option<(KeychainKind, u32)>, Error>; + ) -> Result<Option<(KeychainKind, u32)>, Error>; /// Delete a [`LocalUtxo`] given its [`OutPoint`] - fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error>; + fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error>; /// Delete a raw transaction given its [`Txid`] - fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error>; + fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error>; /// Delete the metadata of a transaction and optionally the raw transaction itself fn del_tx( &mut self, txid: &Txid, include_raw: bool, - ) -> Result<Option<TransactionDetails>, Error>; + ) -> Result<Option<TransactionDetails>, Error>; /// Delete the last derivation index for a keychain. - fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error>; + fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error>; } /// Trait for reading data from a database @@ -485,44 +485,44 @@ &mut self, keychain: KeychainKind, bytes: B, - ) -> Result<(), Error>; + ) -> Result<(), Error>; /// Return the list of script_pubkeys - fn iter_script_pubkeys(&self, keychain: Option<KeychainKind>) -> Result<Vec<Script>, Error>; + fn iter_script_pubkeys(&self, keychain: Option<KeychainKind>) -> Result<Vec<Script>, Error>; /// Return the list of [`LocalUtxo`]s - fn iter_utxos(&self) -> Result<Vec<LocalUtxo>, Error>; + fn iter_utxos(&self) -> Result<Vec<LocalUtxo>, Error>; /// Return the list of raw transactions - fn iter_raw_txs(&self) -> Result<Vec<Transaction>, Error>; + fn iter_raw_txs(&self) -> Result<Vec<Transaction>, Error>; /// Return the list of transactions metadata - fn iter_txs(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error>; + fn iter_txs(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error>; /// Fetch a script_pubkey given the child number of a keychain. fn get_script_pubkey_from_path( &self, keychain: KeychainKind, child: u32, - ) -> Result<Option<Script>, Error>; + ) -> Result<Option<Script>, Error>; /// Fetch the keychain and child number of a given script_pubkey fn get_path_from_script_pubkey( &self, script: &Script, - ) -> Result<Option<(KeychainKind, u32)>, Error>; + ) -> Result<Option<(KeychainKind, u32)>, Error>; /// Fetch a [`LocalUtxo`] given its [`OutPoint`] - fn get_utxo(&self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error>; + fn get_utxo(&self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error>; /// Fetch a raw transaction given its [`Txid`] - fn get_raw_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error>; + fn get_raw_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error>; /// Fetch the transaction metadata and optionally also the raw transaction - fn get_tx(&self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error>; + fn get_tx(&self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error>; /// Return the last defivation index for a keychain. - fn get_last_index(&self, keychain: KeychainKind) -> Result<Option<u32>, Error>; + fn get_last_index(&self, keychain: KeychainKind) -> Result<Option<u32>, Error>; /// Increment the last derivation index for a keychain and return it /// /// It should insert and return `0` if not present in the database - fn increment_last_index(&mut self, keychain: KeychainKind) -> Result<u32, Error>; + fn increment_last_index(&mut self, keychain: KeychainKind) -> Result<u32, Error>; /// Force changes to be written to disk - fn flush(&mut self) -> Result<(), Error>; + fn flush(&mut self) -> Result<(), Error>; } /// Trait for a database that supports batch operations @@ -533,9 +533,9 @@ type Batch: BatchOperations; /// Create a new batch container - fn begin_batch(&self) -> Self::Batch; + fn begin_batch(&self) -> Self::Batch; /// Consume and apply a batch of operations - fn commit_batch(&mut self, batch: Self::Batch) -> Result<(), Error>; + fn commit_batch(&mut self, batch: Self::Batch) -> Result<(), Error>; } /// Trait for [`Database`] types that can be created given a configuration @@ -544,18 +544,18 @@ type Config: std::fmt::Debug; /// Create a new instance given a configuration - fn from_config(config: &Self::Config) -> Result<Self, Error>; + fn from_config(config: &Self::Config) -> Result<Self, Error>; } pub(crate) trait DatabaseUtils: Database { - fn is_mine(&self, script: &Script) -> Result<bool, Error> { + fn is_mine(&self, script: &Script) -> Result<bool, Error> { self.get_path_from_script_pubkey(script) .map(|o| o.is_some()) } - fn get_raw_tx_or<D>(&self, txid: &Txid, default: D) -> Result<Option<Transaction>, Error> + fn get_raw_tx_or<D>(&self, txid: &Txid, default: D) -> Result<Option<Transaction>, Error> where - D: FnOnce() -> Result<Option<Transaction>, Error>, + D: FnOnce() -> Result<Option<Transaction>, Error>, { self.get_tx(txid, true)? .map(|t| t.transaction) @@ -563,7 +563,7 @@ .map_or_else(default, |t| Ok(Some(t))) } - fn get_previous_output(&self, outpoint: &OutPoint) -> Result<Option<TxOut>, Error> { + fn get_previous_output(&self, outpoint: &OutPoint) -> Result<Option<TxOut>, Error> { self.get_raw_tx(&outpoint.txid)? .map(|previous_tx| { if outpoint.vout as usize >= previous_tx.output.len() { diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/database/sqlite.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/database/sqlite.rs.html index ff5e01c5bf..451410e9a4 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/database/sqlite.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/database/sqlite.rs.html @@ -1020,7 +1020,7 @@ impl SqliteDatabase { /// Instantiate a new SqliteDatabase instance by creating a connection /// to the database stored at path - pub fn new(path: String) -> Self { + pub fn new(path: String) -> Self { let connection = get_connection(&path).unwrap(); SqliteDatabase { path, connection } } @@ -1029,7 +1029,7 @@ keychain: String, child: u32, script: &[u8], - ) -> Result<i64, Error> { + ) -> Result<i64, Error> { let mut statement = self.connection.prepare_cached("INSERT INTO script_pubkeys (keychain, child, script) VALUES (:keychain, :child, :script)")?; statement.execute(named_params! { ":keychain": keychain, @@ -1046,7 +1046,7 @@ vout: u32, txid: &[u8], script: &[u8], - ) -> Result<i64, Error> { + ) -> Result<i64, Error> { let mut statement = self.connection.prepare_cached("INSERT INTO utxos (value, keychain, vout, txid, script) VALUES (:value, :keychain, :vout, :txid, :script)")?; statement.execute(named_params! { ":value": value, @@ -1058,7 +1058,7 @@ Ok(self.connection.last_insert_rowid()) } - fn insert_transaction(&self, txid: &[u8], raw_tx: &[u8]) -> Result<i64, Error> { + fn insert_transaction(&self, txid: &[u8], raw_tx: &[u8]) -> Result<i64, Error> { let mut statement = self .connection .prepare_cached("INSERT INTO transactions (txid, raw_tx) VALUES (:txid, :raw_tx)")?; @@ -1070,7 +1070,7 @@ Ok(self.connection.last_insert_rowid()) } - fn update_transaction(&self, txid: &[u8], raw_tx: &[u8]) -> Result<(), Error> { + fn update_transaction(&self, txid: &[u8], raw_tx: &[u8]) -> Result<(), Error> { let mut statement = self .connection .prepare_cached("UPDATE transactions SET raw_tx=:raw_tx WHERE txid=:txid")?; @@ -1083,13 +1083,13 @@ Ok(()) } - fn insert_transaction_details(&self, transaction: &TransactionDetails) -> Result<i64, Error> { + fn insert_transaction_details(&self, transaction: &TransactionDetails) -> Result<i64, Error> { let (timestamp, height) = match &transaction.confirmation_time { - Some(confirmation_time) => ( + Some(confirmation_time) => ( Some(confirmation_time.timestamp), Some(confirmation_time.height), ), - None => (None, None), + None => (None, None), }; let txid: &[u8] = &transaction.txid; @@ -1109,13 +1109,13 @@ Ok(self.connection.last_insert_rowid()) } - fn update_transaction_details(&self, transaction: &TransactionDetails) -> Result<(), Error> { + fn update_transaction_details(&self, transaction: &TransactionDetails) -> Result<(), Error> { let (timestamp, height) = match &transaction.confirmation_time { - Some(confirmation_time) => ( + Some(confirmation_time) => ( Some(confirmation_time.timestamp), Some(confirmation_time.height), ), - None => (None, None), + None => (None, None), }; let txid: &[u8] = &transaction.txid; @@ -1135,7 +1135,7 @@ Ok(()) } - fn insert_last_derivation_index(&self, keychain: String, value: u32) -> Result<i64, Error> { + fn insert_last_derivation_index(&self, keychain: String, value: u32) -> Result<i64, Error> { let mut statement = self.connection.prepare_cached( "INSERT INTO last_derivation_indices (keychain, value) VALUES (:keychain, :value)", )?; @@ -1148,7 +1148,7 @@ Ok(self.connection.last_insert_rowid()) } - fn insert_checksum(&self, keychain: String, checksum: &[u8]) -> Result<i64, Error> { + fn insert_checksum(&self, keychain: String, checksum: &[u8]) -> Result<i64, Error> { let mut statement = self.connection.prepare_cached( "INSERT INTO checksums (keychain, checksum) VALUES (:keychain, :checksum)", )?; @@ -1160,7 +1160,7 @@ Ok(self.connection.last_insert_rowid()) } - fn update_last_derivation_index(&self, keychain: String, value: u32) -> Result<(), Error> { + fn update_last_derivation_index(&self, keychain: String, value: u32) -> Result<(), Error> { let mut statement = self.connection.prepare_cached( "INSERT INTO last_derivation_indices (keychain, value) VALUES (:keychain, :value) ON CONFLICT(keychain) DO UPDATE SET value=:value WHERE keychain=:keychain", )?; @@ -1173,7 +1173,7 @@ Ok(()) } - fn select_script_pubkeys(&self) -> Result<Vec<Script>, Error> { + fn select_script_pubkeys(&self) -> Result<Vec<Script>, Error> { let mut statement = self .connection .prepare_cached("SELECT script FROM script_pubkeys")?; @@ -1187,7 +1187,7 @@ Ok(scripts) } - fn select_script_pubkeys_by_keychain(&self, keychain: String) -> Result<Vec<Script>, Error> { + fn select_script_pubkeys_by_keychain(&self, keychain: String) -> Result<Vec<Script>, Error> { let mut statement = self .connection .prepare_cached("SELECT script FROM script_pubkeys WHERE keychain=:keychain")?; @@ -1205,42 +1205,42 @@ &self, keychain: String, child: u32, - ) -> Result<Option<Script>, Error> { + ) -> Result<Option<Script>, Error> { let mut statement = self.connection.prepare_cached( "SELECT script FROM script_pubkeys WHERE keychain=:keychain AND child=:child", )?; let mut rows = statement.query(named_params! {":keychain": keychain,":child": child})?; match rows.next()? { - Some(row) => { + Some(row) => { let script: Vec<u8> = row.get(0)?; let script: Script = script.into(); Ok(Some(script)) } - None => Ok(None), + None => Ok(None), } } fn select_script_pubkey_by_script( &self, script: &[u8], - ) -> Result<Option<(KeychainKind, u32)>, Error> { + ) -> Result<Option<(KeychainKind, u32)>, Error> { let mut statement = self .connection .prepare_cached("SELECT keychain, child FROM script_pubkeys WHERE script=:script")?; let mut rows = statement.query(named_params! {":script": script})?; match rows.next()? { - Some(row) => { + Some(row) => { let keychain: String = row.get(0)?; let keychain: KeychainKind = serde_json::from_str(&keychain)?; let child: u32 = row.get(1)?; Ok(Some((keychain, child))) } - None => Ok(None), + None => Ok(None), } } - fn select_utxos(&self) -> Result<Vec<LocalUtxo>, Error> { + fn select_utxos(&self) -> Result<Vec<LocalUtxo>, Error> { let mut statement = self .connection .prepare_cached("SELECT value, keychain, vout, txid, script FROM utxos")?; @@ -1272,13 +1272,13 @@ &self, txid: &[u8], vout: u32, - ) -> Result<Option<(u64, KeychainKind, Script)>, Error> { + ) -> Result<Option<(u64, KeychainKind, Script)>, Error> { let mut statement = self.connection.prepare_cached( "SELECT value, keychain, script FROM utxos WHERE txid=:txid AND vout=:vout", )?; let mut rows = statement.query(named_params! {":txid": txid,":vout": vout})?; match rows.next()? { - Some(row) => { + Some(row) => { let value: u64 = row.get(0)?; let keychain: String = row.get(1)?; let keychain: KeychainKind = serde_json::from_str(&keychain)?; @@ -1287,11 +1287,11 @@ Ok(Some((value, keychain, script))) } - None => Ok(None), + None => Ok(None), } } - fn select_transactions(&self) -> Result<Vec<Transaction>, Error> { + fn select_transactions(&self) -> Result<Vec<Transaction>, Error> { let mut statement = self .connection .prepare_cached("SELECT raw_tx FROM transactions")?; @@ -1305,22 +1305,22 @@ Ok(txs) } - fn select_transaction_by_txid(&self, txid: &[u8]) -> Result<Option<Transaction>, Error> { + fn select_transaction_by_txid(&self, txid: &[u8]) -> Result<Option<Transaction>, Error> { let mut statement = self .connection .prepare_cached("SELECT raw_tx FROM transactions WHERE txid=:txid")?; let mut rows = statement.query(named_params! {":txid": txid})?; match rows.next()? { - Some(row) => { + Some(row) => { let raw_tx: Vec<u8> = row.get(0)?; let tx: Transaction = deserialize(&raw_tx)?; Ok(Some(tx)) } - None => Ok(None), + None => Ok(None), } } - fn select_transaction_details_with_raw(&self) -> Result<Vec<TransactionDetails>, Error> { + fn select_transaction_details_with_raw(&self) -> Result<Vec<TransactionDetails>, Error> { let mut statement = self.connection.prepare_cached("SELECT transaction_details.txid, transaction_details.timestamp, transaction_details.received, transaction_details.sent, transaction_details.fee, transaction_details.height, transaction_details.verified, transactions.raw_tx FROM transaction_details, transactions WHERE transaction_details.txid = transactions.txid")?; let mut transaction_details: Vec<TransactionDetails> = vec![]; let mut rows = statement.query([])?; @@ -1335,16 +1335,16 @@ let verified: bool = row.get(6)?; let raw_tx: Option<Vec<u8>> = row.get(7)?; let tx: Option<Transaction> = match raw_tx { - Some(raw_tx) => { + Some(raw_tx) => { let tx: Transaction = deserialize(&raw_tx)?; Some(tx) } - None => None, + None => None, }; let confirmation_time = match (height, timestamp) { - (Some(height), Some(timestamp)) => Some(ConfirmationTime { height, timestamp }), - _ => None, + (Some(height), Some(timestamp)) => Some(ConfirmationTime { height, timestamp }), + _ => None, }; transaction_details.push(TransactionDetails { @@ -1360,7 +1360,7 @@ Ok(transaction_details) } - fn select_transaction_details(&self) -> Result<Vec<TransactionDetails>, Error> { + fn select_transaction_details(&self) -> Result<Vec<TransactionDetails>, Error> { let mut statement = self.connection.prepare_cached( "SELECT txid, timestamp, received, sent, fee, height, verified FROM transaction_details", )?; @@ -1377,8 +1377,8 @@ let verified: bool = row.get(6)?; let confirmation_time = match (height, timestamp) { - (Some(height), Some(timestamp)) => Some(ConfirmationTime { height, timestamp }), - _ => None, + (Some(height), Some(timestamp)) => Some(ConfirmationTime { height, timestamp }), + _ => None, }; transaction_details.push(TransactionDetails { @@ -1397,12 +1397,12 @@ fn select_transaction_details_by_txid( &self, txid: &[u8], - ) -> Result<Option<TransactionDetails>, Error> { + ) -> Result<Option<TransactionDetails>, Error> { let mut statement = self.connection.prepare_cached("SELECT transaction_details.timestamp, transaction_details.received, transaction_details.sent, transaction_details.fee, transaction_details.height, transaction_details.verified, transactions.raw_tx FROM transaction_details, transactions WHERE transaction_details.txid=transactions.txid AND transaction_details.txid=:txid")?; let mut rows = statement.query(named_params! { ":txid": txid })?; match rows.next()? { - Some(row) => { + Some(row) => { let timestamp: Option<u64> = row.get(0)?; let received: u64 = row.get(1)?; let sent: u64 = row.get(2)?; @@ -1412,16 +1412,16 @@ let raw_tx: Option<Vec<u8>> = row.get(6)?; let tx: Option<Transaction> = match raw_tx { - Some(raw_tx) => { + Some(raw_tx) => { let tx: Transaction = deserialize(&raw_tx)?; Some(tx) } - None => None, + None => None, }; let confirmation_time = match (height, timestamp) { - (Some(height), Some(timestamp)) => Some(ConfirmationTime { height, timestamp }), - _ => None, + (Some(height), Some(timestamp)) => Some(ConfirmationTime { height, timestamp }), + _ => None, }; Ok(Some(TransactionDetails { @@ -1434,43 +1434,43 @@ verified, })) } - None => Ok(None), + None => Ok(None), } } fn select_last_derivation_index_by_keychain( &self, keychain: String, - ) -> Result<Option<u32>, Error> { + ) -> Result<Option<u32>, Error> { let mut statement = self .connection .prepare_cached("SELECT value FROM last_derivation_indices WHERE keychain=:keychain")?; let mut rows = statement.query(named_params! {":keychain": keychain})?; match rows.next()? { - Some(row) => { + Some(row) => { let value: u32 = row.get(0)?; Ok(Some(value)) } - None => Ok(None), + None => Ok(None), } } - fn select_checksum_by_keychain(&self, keychain: String) -> Result<Option<Vec<u8>>, Error> { + fn select_checksum_by_keychain(&self, keychain: String) -> Result<Option<Vec<u8>>, Error> { let mut statement = self .connection .prepare_cached("SELECT checksum FROM checksums WHERE keychain=:keychain")?; let mut rows = statement.query(named_params! {":keychain": keychain})?; match rows.next()? { - Some(row) => { + Some(row) => { let checksum: Vec<u8> = row.get(0)?; Ok(Some(checksum)) } - None => Ok(None), + None => Ok(None), } } - fn delete_script_pubkey_by_path(&self, keychain: String, child: u32) -> Result<(), Error> { + fn delete_script_pubkey_by_path(&self, keychain: String, child: u32) -> Result<(), Error> { let mut statement = self.connection.prepare_cached( "DELETE FROM script_pubkeys WHERE keychain=:keychain AND child=:child", )?; @@ -1482,7 +1482,7 @@ Ok(()) } - fn delete_script_pubkey_by_script(&self, script: &[u8]) -> Result<(), Error> { + fn delete_script_pubkey_by_script(&self, script: &[u8]) -> Result<(), Error> { let mut statement = self .connection .prepare_cached("DELETE FROM script_pubkeys WHERE script=:script")?; @@ -1493,7 +1493,7 @@ Ok(()) } - fn delete_utxo_by_outpoint(&self, txid: &[u8], vout: u32) -> Result<(), Error> { + fn delete_utxo_by_outpoint(&self, txid: &[u8], vout: u32) -> Result<(), Error> { let mut statement = self .connection .prepare_cached("DELETE FROM utxos WHERE txid=:txid AND vout=:vout")?; @@ -1505,7 +1505,7 @@ Ok(()) } - fn delete_transaction_by_txid(&self, txid: &[u8]) -> Result<(), Error> { + fn delete_transaction_by_txid(&self, txid: &[u8]) -> Result<(), Error> { let mut statement = self .connection .prepare_cached("DELETE FROM transactions WHERE txid=:txid")?; @@ -1513,7 +1513,7 @@ Ok(()) } - fn delete_transaction_details_by_txid(&self, txid: &[u8]) -> Result<(), Error> { + fn delete_transaction_details_by_txid(&self, txid: &[u8]) -> Result<(), Error> { let mut statement = self .connection .prepare_cached("DELETE FROM transaction_details WHERE txid=:txid")?; @@ -1521,7 +1521,7 @@ Ok(()) } - fn delete_last_derivation_index_by_keychain(&self, keychain: String) -> Result<(), Error> { + fn delete_last_derivation_index_by_keychain(&self, keychain: String) -> Result<(), Error> { let mut statement = self .connection .prepare_cached("DELETE FROM last_derivation_indices WHERE keychain=:keychain")?; @@ -1539,13 +1539,13 @@ script: &Script, keychain: KeychainKind, child: u32, - ) -> Result<(), Error> { + ) -> Result<(), Error> { let keychain = serde_json::to_string(&keychain)?; self.insert_script_pubkey(keychain, child, script.as_bytes())?; Ok(()) } - fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error> { + fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error> { self.insert_utxo( utxo.txout.value, serde_json::to_string(&utxo.keychain)?, @@ -1556,24 +1556,24 @@ Ok(()) } - fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error> { + fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error> { match self.select_transaction_by_txid(&transaction.txid())? { - Some(_) => { + Some(_) => { self.update_transaction(&transaction.txid(), &serialize(transaction))?; } - None => { + None => { self.insert_transaction(&transaction.txid(), &serialize(transaction))?; } } Ok(()) } - fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error> { + fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error> { match self.select_transaction_details_by_txid(&transaction.txid)? { - Some(_) => { + Some(_) => { self.update_transaction_details(transaction)?; } - None => { + None => { self.insert_transaction_details(transaction)?; } } @@ -1585,7 +1585,7 @@ Ok(()) } - fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error> { + fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error> { self.update_last_derivation_index(serde_json::to_string(&keychain)?, value)?; Ok(()) } @@ -1594,34 +1594,34 @@ &mut self, keychain: KeychainKind, child: u32, - ) -> Result<Option<Script>, Error> { + ) -> Result<Option<Script>, Error> { let keychain = serde_json::to_string(&keychain)?; let script = self.select_script_pubkey_by_path(keychain.clone(), child)?; match script { - Some(script) => { + Some(script) => { self.delete_script_pubkey_by_path(keychain, child)?; Ok(Some(script)) } - None => Ok(None), + None => Ok(None), } } fn del_path_from_script_pubkey( &mut self, script: &Script, - ) -> Result<Option<(KeychainKind, u32)>, Error> { + ) -> Result<Option<(KeychainKind, u32)>, Error> { match self.select_script_pubkey_by_script(script.as_bytes())? { - Some((keychain, child)) => { + Some((keychain, child)) => { self.delete_script_pubkey_by_script(script.as_bytes())?; Ok(Some((keychain, child))) } - None => Ok(None), + None => Ok(None), } } - fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> { + fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> { match self.select_utxo_by_outpoint(&outpoint.txid, outpoint.vout)? { - Some((value, keychain, script_pubkey)) => { + Some((value, keychain, script_pubkey)) => { self.delete_utxo_by_outpoint(&outpoint.txid, outpoint.vout)?; Ok(Some(LocalUtxo { outpoint: *outpoint, @@ -1632,17 +1632,17 @@ keychain, })) } - None => Ok(None), + None => Ok(None), } } - fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> { + fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> { match self.select_transaction_by_txid(txid)? { - Some(tx) => { + Some(tx) => { self.delete_transaction_by_txid(txid)?; Ok(Some(tx)) } - None => Ok(None), + None => Ok(None), } } @@ -1650,9 +1650,9 @@ &mut self, txid: &Txid, include_raw: bool, - ) -> Result<Option<TransactionDetails>, Error> { + ) -> Result<Option<TransactionDetails>, Error> { match self.select_transaction_details_by_txid(txid)? { - Some(transaction_details) => { + Some(transaction_details) => { self.delete_transaction_details_by_txid(txid)?; if include_raw { @@ -1660,19 +1660,19 @@ } Ok(Some(transaction_details)) } - None => Ok(None), + None => Ok(None), } } - fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error> { + fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error> { let keychain = serde_json::to_string(&keychain)?; match self.select_last_derivation_index_by_keychain(keychain.clone())? { - Some(value) => { + Some(value) => { self.delete_last_derivation_index_by_keychain(keychain)?; Ok(Some(value)) } - None => Ok(None), + None => Ok(None), } } } @@ -1682,46 +1682,46 @@ &mut self, keychain: KeychainKind, bytes: B, - ) -> Result<(), Error> { + ) -> Result<(), Error> { let keychain = serde_json::to_string(&keychain)?; match self.select_checksum_by_keychain(keychain.clone())? { - Some(checksum) => { - if checksum == bytes.as_ref().to_vec() { + Some(checksum) => { + if checksum == bytes.as_ref().to_vec() { Ok(()) } else { Err(Error::ChecksumMismatch) } } - None => { + None => { self.insert_checksum(keychain, bytes.as_ref())?; Ok(()) } } } - fn iter_script_pubkeys(&self, keychain: Option<KeychainKind>) -> Result<Vec<Script>, Error> { + fn iter_script_pubkeys(&self, keychain: Option<KeychainKind>) -> Result<Vec<Script>, Error> { match keychain { - Some(keychain) => { + Some(keychain) => { let keychain = serde_json::to_string(&keychain)?; self.select_script_pubkeys_by_keychain(keychain) } - None => self.select_script_pubkeys(), + None => self.select_script_pubkeys(), } } - fn iter_utxos(&self) -> Result<Vec<LocalUtxo>, Error> { + fn iter_utxos(&self) -> Result<Vec<LocalUtxo>, Error> { self.select_utxos() } - fn iter_raw_txs(&self) -> Result<Vec<Transaction>, Error> { + fn iter_raw_txs(&self) -> Result<Vec<Transaction>, Error> { self.select_transactions() } - fn iter_txs(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error> { + fn iter_txs(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error> { match include_raw { - true => self.select_transaction_details_with_raw(), - false => self.select_transaction_details(), + true => self.select_transaction_details_with_raw(), + false => self.select_transaction_details(), } } @@ -1729,27 +1729,27 @@ &self, keychain: KeychainKind, child: u32, - ) -> Result<Option<Script>, Error> { + ) -> Result<Option<Script>, Error> { let keychain = serde_json::to_string(&keychain)?; match self.select_script_pubkey_by_path(keychain, child)? { - Some(script) => Ok(Some(script)), - None => Ok(None), + Some(script) => Ok(Some(script)), + None => Ok(None), } } fn get_path_from_script_pubkey( &self, script: &Script, - ) -> Result<Option<(KeychainKind, u32)>, Error> { + ) -> Result<Option<(KeychainKind, u32)>, Error> { match self.select_script_pubkey_by_script(script.as_bytes())? { - Some((keychain, child)) => Ok(Some((keychain, child))), - None => Ok(None), + Some((keychain, child)) => Ok(Some((keychain, child))), + None => Ok(None), } } - fn get_utxo(&self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> { + fn get_utxo(&self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> { match self.select_utxo_by_outpoint(&outpoint.txid, outpoint.vout)? { - Some((value, keychain, script_pubkey)) => Ok(Some(LocalUtxo { + Some((value, keychain, script_pubkey)) => Ok(Some(LocalUtxo { outpoint: *outpoint, txout: TxOut { value, @@ -1757,50 +1757,50 @@ }, keychain, })), - None => Ok(None), + None => Ok(None), } } - fn get_raw_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> { + fn get_raw_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> { match self.select_transaction_by_txid(txid)? { - Some(tx) => Ok(Some(tx)), - None => Ok(None), + Some(tx) => Ok(Some(tx)), + None => Ok(None), } } - fn get_tx(&self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error> { + fn get_tx(&self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error> { match self.select_transaction_details_by_txid(txid)? { - Some(mut transaction_details) => { + Some(mut transaction_details) => { if !include_raw { transaction_details.transaction = None; } Ok(Some(transaction_details)) } - None => Ok(None), + None => Ok(None), } } - fn get_last_index(&self, keychain: KeychainKind) -> Result<Option<u32>, Error> { + fn get_last_index(&self, keychain: KeychainKind) -> Result<Option<u32>, Error> { let keychain = serde_json::to_string(&keychain)?; let value = self.select_last_derivation_index_by_keychain(keychain)?; Ok(value) } - fn increment_last_index(&mut self, keychain: KeychainKind) -> Result<u32, Error> { + fn increment_last_index(&mut self, keychain: KeychainKind) -> Result<u32, Error> { let keychain_string = serde_json::to_string(&keychain)?; match self.get_last_index(keychain)? { - Some(value) => { + Some(value) => { self.update_last_derivation_index(keychain_string, value + 1)?; Ok(value + 1) } - None => { + None => { self.insert_last_derivation_index(keychain_string, 0)?; Ok(0) } } } - fn flush(&mut self) -> Result<(), Error> { + fn flush(&mut self) -> Result<(), Error> { Ok(()) } } @@ -1808,61 +1808,61 @@ impl BatchDatabase for SqliteDatabase { type Batch = SqliteDatabase; - fn begin_batch(&self) -> Self::Batch { + fn begin_batch(&self) -> Self::Batch { let db = SqliteDatabase::new(self.path.clone()); db.connection.execute("BEGIN TRANSACTION", []).unwrap(); db } - fn commit_batch(&mut self, batch: Self::Batch) -> Result<(), Error> { + fn commit_batch(&mut self, batch: Self::Batch) -> Result<(), Error> { batch.connection.execute("COMMIT TRANSACTION", [])?; Ok(()) } } -pub fn get_connection(path: &str) -> Result<Connection, Error> { +pub fn get_connection(path: &str) -> Result<Connection, Error> { let connection = Connection::open(path)?; migrate(&connection)?; Ok(connection) } -pub fn get_schema_version(conn: &Connection) -> rusqlite::Result<i32> { +pub fn get_schema_version(conn: &Connection) -> rusqlite::Result<i32> { let statement = conn.prepare_cached("SELECT version FROM version"); match statement { - Err(rusqlite::Error::SqliteFailure(e, Some(msg))) => { - if msg == "no such table: version" { + Err(rusqlite::Error::SqliteFailure(e, Some(msg))) => { + if msg == "no such table: version" { Ok(0) } else { Err(rusqlite::Error::SqliteFailure(e, Some(msg))) } } - Ok(mut stmt) => { + Ok(mut stmt) => { let mut rows = stmt.query([])?; match rows.next()? { - Some(row) => { + Some(row) => { let version: i32 = row.get(0)?; Ok(version) } - None => Ok(0), + None => Ok(0), } } - _ => Ok(0), + _ => Ok(0), } } -pub fn set_schema_version(conn: &Connection, version: i32) -> rusqlite::Result<usize> { +pub fn set_schema_version(conn: &Connection, version: i32) -> rusqlite::Result<usize> { conn.execute( "UPDATE version SET version=:version", named_params! {":version": version}, ) } -pub fn migrate(conn: &Connection) -> rusqlite::Result<()> { +pub fn migrate(conn: &Connection) -> rusqlite::Result<()> { let version = get_schema_version(conn)?; let stmts = &MIGRATIONS[(version as usize)..]; let mut i: i32 = version; - if version == MIGRATIONS.len() as i32 { + if version == MIGRATIONS.len() as i32 { log::info!("db up to date, no migration needed"); return Ok(()); } @@ -1887,7 +1887,7 @@ use crate::database::SqliteDatabase; use std::time::{SystemTime, UNIX_EPOCH}; - fn get_database() -> SqliteDatabase { + fn get_database() -> SqliteDatabase { let time = SystemTime::now().duration_since(UNIX_EPOCH).unwrap(); let mut dir = std::env::temp_dir(); dir.push(format!("bdk_{}", time.as_nanos())); diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/checksum.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/checksum.rs.html index 93562a5060..59aa4dde6e 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/checksum.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/checksum.rs.html @@ -134,7 +134,7 @@ const INPUT_CHARSET: &str = "0123456789()[],'/*abcdefgh@:$%{}IJKLMNOPQRSTUVWXYZ&+-.;<=>?!^_|~ijklmnopqrstuvwxyzABCDEFGH`#\"\\ "; const CHECKSUM_CHARSET: &str = "qpzry9x8gf2tvdw0s3jn54khce6mua7l"; -fn poly_mod(mut c: u64, val: u64) -> u64 { +fn poly_mod(mut c: u64, val: u64) -> u64 { let c0 = c >> 35; c = ((c & 0x7ffffffff) << 5) ^ val; if c0 & 1 > 0 { @@ -157,7 +157,7 @@ } /// Compute the checksum of a descriptor -pub fn get_checksum(desc: &str) -> Result<String, DescriptorError> { +pub fn get_checksum(desc: &str) -> Result<String, DescriptorError> { let mut c = 1; let mut cls = 0; let mut clscount = 0; @@ -168,7 +168,7 @@ c = poly_mod(c, pos & 31); cls = cls * 3 + (pos >> 5); clscount += 1; - if clscount == 3 { + if clscount == 3 { c = poly_mod(c, cls); cls = 0; clscount = 0; @@ -220,7 +220,7 @@ assert!(matches!( get_checksum(&invalid_desc).err(), - Some(DescriptorError::InvalidDescriptorCharacter(invalid_char)) if invalid_char == sparkle_heart + Some(DescriptorError::InvalidDescriptorCharacter(invalid_char)) if invalid_char == sparkle_heart )); } } diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/derived.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/derived.rs.html index edd1b2714d..479b7d2e4e 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/derived.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/derived.rs.html @@ -187,9 +187,9 @@ /// Construct a new derived key /// /// Panics if the key is wildcard - pub fn new(key: DescriptorPublicKey, secp: &'s SecpCtx) -> DerivedDescriptorKey<'s> { + pub fn new(key: DescriptorPublicKey, secp: &'s SecpCtx) -> DerivedDescriptorKey<'s> { if let DescriptorPublicKey::XPub(xpub) = &key { - assert!(xpub.wildcard == Wildcard::None) + assert!(xpub.wildcard == Wildcard::None) } DerivedDescriptorKey(key, secp) @@ -199,33 +199,33 @@ impl<'s> Deref for DerivedDescriptorKey<'s> { type Target = DescriptorPublicKey; - fn deref(&self) -> &Self::Target { + fn deref(&self) -> &Self::Target { &self.0 } } impl<'s> PartialEq for DerivedDescriptorKey<'s> { - fn eq(&self, other: &Self) -> bool { - self.0 == other.0 + fn eq(&self, other: &Self) -> bool { + self.0 == other.0 } } impl<'s> Eq for DerivedDescriptorKey<'s> {} impl<'s> PartialOrd for DerivedDescriptorKey<'s> { - fn partial_cmp(&self, other: &Self) -> Option<Ordering> { + fn partial_cmp(&self, other: &Self) -> Option<Ordering> { self.0.partial_cmp(&other.0) } } impl<'s> Ord for DerivedDescriptorKey<'s> { - fn cmp(&self, other: &Self) -> Ordering { + fn cmp(&self, other: &Self) -> Ordering { self.0.cmp(&other.0) } } impl<'s> fmt::Display for DerivedDescriptorKey<'s> { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { self.0.fmt(f) } } @@ -239,23 +239,23 @@ impl<'s> MiniscriptKey for DerivedDescriptorKey<'s> { type Hash = Self; - fn to_pubkeyhash(&self) -> Self::Hash { + fn to_pubkeyhash(&self) -> Self::Hash { DerivedDescriptorKey(self.0.to_pubkeyhash(), self.1) } - fn is_uncompressed(&self) -> bool { + fn is_uncompressed(&self) -> bool { self.0.is_uncompressed() } - fn serialized_len(&self) -> usize { + fn serialized_len(&self) -> usize { self.0.serialized_len() } } impl<'s> ToPublicKey for DerivedDescriptorKey<'s> { - fn to_public_key(&self) -> PublicKey { + fn to_public_key(&self) -> PublicKey { match &self.0 { - DescriptorPublicKey::SinglePub(ref spub) => spub.key.to_public_key(), - DescriptorPublicKey::XPub(ref xpub) => { + DescriptorPublicKey::SinglePub(ref spub) => spub.key.to_public_key(), + DescriptorPublicKey::XPub(ref xpub) => { xpub.xkey .derive_pub(self.1, &xpub.derivation_path) .expect("Shouldn't fail, only normal derivations") @@ -264,7 +264,7 @@ } } - fn hash_to_hash160(hash: &Self::Hash) -> hash160::Hash { + fn hash_to_hash160(hash: &Self::Hash) -> hash160::Hash { hash.to_public_key().to_pubkeyhash() } } @@ -272,12 +272,12 @@ pub(crate) trait AsDerived { // Derive a descriptor and transform all of its keys to `DerivedDescriptorKey` fn as_derived<'s>(&self, index: u32, secp: &'s SecpCtx) - -> Descriptor<DerivedDescriptorKey<'s>>; + -> Descriptor<DerivedDescriptorKey<'s>>; // Transform the keys into `DerivedDescriptorKey`. // // Panics if the descriptor is not "fixed", i.e. if it's derivable - fn as_derived_fixed<'s>(&self, secp: &'s SecpCtx) -> Descriptor<DerivedDescriptorKey<'s>>; + fn as_derived_fixed<'s>(&self, secp: &'s SecpCtx) -> Descriptor<DerivedDescriptorKey<'s>>; } impl AsDerived for Descriptor<DescriptorPublicKey> { @@ -285,14 +285,14 @@ &self, index: u32, secp: &'s SecpCtx, - ) -> Descriptor<DerivedDescriptorKey<'s>> { + ) -> Descriptor<DerivedDescriptorKey<'s>> { self.derive(index).translate_pk_infallible( |key| DerivedDescriptorKey::new(key.clone(), secp), |key| DerivedDescriptorKey::new(key.clone(), secp), ) } - fn as_derived_fixed<'s>(&self, secp: &'s SecpCtx) -> Descriptor<DerivedDescriptorKey<'s>> { + fn as_derived_fixed<'s>(&self, secp: &'s SecpCtx) -> Descriptor<DerivedDescriptorKey<'s>> { assert!(!self.is_deriveable()); self.as_derived(0, secp) diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/dsl.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/dsl.rs.html index 4914cdfc1d..12681d0400 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/dsl.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/dsl.rs.html @@ -1080,14 +1080,14 @@ #[macro_export] macro_rules! impl_top_level_sh { // disallow `sortedmulti` in `bare()` - ( Bare, new, new, Legacy, sortedmulti $( $inner:tt )* ) => { + ( Bare, new, new, Legacy, sortedmulti $( $inner:tt )* ) => { compile_error!("`bare()` descriptors can't contain any `sortedmulti()` operands"); }; - ( Bare, new, new, Legacy, sortedmulti_vec $( $inner:tt )* ) => { + ( Bare, new, new, Legacy, sortedmulti_vec $( $inner:tt )* ) => { compile_error!("`bare()` descriptors can't contain any `sortedmulti_vec()` operands"); }; - ( $inner_struct:ident, $constructor:ident, $sortedmulti_constructor:ident, $ctx:ident, sortedmulti $( $inner:tt )* ) => {{ + ( $inner_struct:ident, $constructor:ident, $sortedmulti_constructor:ident, $ctx:ident, sortedmulti $( $inner:tt )* ) => {{ use std::marker::PhantomData; use $crate::miniscript::descriptor::{$inner_struct, Descriptor, DescriptorPublicKey}; @@ -1099,7 +1099,7 @@ $crate::impl_sortedmulti!(build_desc, sortedmulti $( $inner )*) }}; - ( $inner_struct:ident, $constructor:ident, $sortedmulti_constructor:ident, $ctx:ident, sortedmulti_vec $( $inner:tt )* ) => {{ + ( $inner_struct:ident, $constructor:ident, $sortedmulti_constructor:ident, $ctx:ident, sortedmulti_vec $( $inner:tt )* ) => {{ use std::marker::PhantomData; use $crate::miniscript::descriptor::{$inner_struct, Descriptor, DescriptorPublicKey}; @@ -1112,7 +1112,7 @@ $crate::impl_sortedmulti!(build_desc, sortedmulti_vec $( $inner )*) }}; - ( $inner_struct:ident, $constructor:ident, $sortedmulti_constructor:ident, $ctx:ident, $( $minisc:tt )* ) => {{ + ( $inner_struct:ident, $constructor:ident, $sortedmulti_constructor:ident, $ctx:ident, $( $minisc:tt )* ) => {{ use $crate::miniscript::descriptor::{$inner_struct, Descriptor, DescriptorPublicKey}; $crate::fragment!($( $minisc )*) @@ -1124,7 +1124,7 @@ #[doc(hidden)] #[macro_export] macro_rules! impl_top_level_pk { - ( $inner_type:ident, $ctx:ty, $key:expr ) => {{ + ( $inner_type:ident, $ctx:ty, $key:expr ) => {{ use $crate::miniscript::descriptor::$inner_type; #[allow(unused_imports)] @@ -1141,7 +1141,7 @@ #[doc(hidden)] #[macro_export] macro_rules! impl_leaf_opcode { - ( $terminal_variant:ident ) => {{ + ( $terminal_variant:ident ) => {{ use $crate::descriptor::CheckMiniscript; $crate::miniscript::Miniscript::from_ast( @@ -1165,7 +1165,7 @@ #[doc(hidden)] #[macro_export] macro_rules! impl_leaf_opcode_value { - ( $terminal_variant:ident, $value:expr ) => {{ + ( $terminal_variant:ident, $value:expr ) => {{ use $crate::descriptor::CheckMiniscript; $crate::miniscript::Miniscript::from_ast( @@ -1189,7 +1189,7 @@ #[doc(hidden)] #[macro_export] macro_rules! impl_leaf_opcode_value_two { - ( $terminal_variant:ident, $one:expr, $two:expr ) => {{ + ( $terminal_variant:ident, $one:expr, $two:expr ) => {{ use $crate::descriptor::CheckMiniscript; $crate::miniscript::Miniscript::from_ast( @@ -1213,7 +1213,7 @@ #[doc(hidden)] #[macro_export] macro_rules! impl_node_opcode_two { - ( $terminal_variant:ident, $( $inner:tt )* ) => ({ + ( $terminal_variant:ident, $( $inner:tt )* ) => ({ use $crate::descriptor::CheckMiniscript; let inner = $crate::fragment_internal!( @t $( $inner )* ); @@ -1240,7 +1240,7 @@ #[doc(hidden)] #[macro_export] macro_rules! impl_node_opcode_three { - ( $terminal_variant:ident, $( $inner:tt )* ) => ({ + ( $terminal_variant:ident, $( $inner:tt )* ) => ({ use $crate::descriptor::CheckMiniscript; let inner = $crate::fragment_internal!( @t $( $inner )* ); @@ -1272,11 +1272,11 @@ #[doc(hidden)] #[macro_export] macro_rules! impl_sortedmulti { - ( $build_desc:expr, sortedmulti_vec ( $thresh:expr, $keys:expr ) ) => ({ + ( $build_desc:expr, sortedmulti_vec ( $thresh:expr, $keys:expr ) ) => ({ let secp = $crate::bitcoin::secp256k1::Secp256k1::new(); $crate::keys::make_sortedmulti($thresh, $keys, $build_desc, &secp) }); - ( $build_desc:expr, sortedmulti ( $thresh:expr $(, $key:expr )+ ) ) => ({ + ( $build_desc:expr, sortedmulti ( $thresh:expr $(, $key:expr )+ ) ) => ({ use $crate::keys::IntoDescriptorKey; let secp = $crate::bitcoin::secp256k1::Secp256k1::new(); @@ -1296,11 +1296,11 @@ #[doc(hidden)] #[macro_export] macro_rules! apply_modifier { - ( $terminal_variant:ident, $inner:expr ) => {{ + ( $terminal_variant:ident, $inner:expr ) => {{ use $crate::descriptor::CheckMiniscript; $inner - .map_err(|e| -> $crate::descriptor::DescriptorError { e.into() }) + .map_err(|e| -> $crate::descriptor::DescriptorError { e.into() }) .and_then(|(minisc, keymap, networks)| { let minisc = $crate::miniscript::Miniscript::from_ast( $crate::miniscript::miniscript::decode::Terminal::$terminal_variant( @@ -1314,30 +1314,30 @@ }) }}; - ( a: $inner:expr ) => {{ + ( a: $inner:expr ) => {{ $crate::apply_modifier!(Alt, $inner) }}; - ( s: $inner:expr ) => {{ + ( s: $inner:expr ) => {{ $crate::apply_modifier!(Swap, $inner) }}; - ( c: $inner:expr ) => {{ + ( c: $inner:expr ) => {{ $crate::apply_modifier!(Check, $inner) }}; - ( d: $inner:expr ) => {{ + ( d: $inner:expr ) => {{ $crate::apply_modifier!(DupIf, $inner) }}; - ( v: $inner:expr ) => {{ + ( v: $inner:expr ) => {{ $crate::apply_modifier!(Verify, $inner) }}; - ( j: $inner:expr ) => {{ + ( j: $inner:expr ) => {{ $crate::apply_modifier!(NonZero, $inner) }}; - ( n: $inner:expr ) => {{ + ( n: $inner:expr ) => {{ $crate::apply_modifier!(ZeroNotEqual, $inner) }}; // Modifiers expanded to other operators - ( t: $inner:expr ) => {{ + ( t: $inner:expr ) => {{ $inner.and_then(|(a_minisc, a_keymap, a_networks)| { $crate::impl_leaf_opcode_value_two!( AndV, @@ -1347,7 +1347,7 @@ .map(|(minisc, _, _)| (minisc, a_keymap, a_networks)) }) }}; - ( l: $inner:expr ) => {{ + ( l: $inner:expr ) => {{ $inner.and_then(|(a_minisc, a_keymap, a_networks)| { $crate::impl_leaf_opcode_value_two!( OrI, @@ -1357,7 +1357,7 @@ .map(|(minisc, _, _)| (minisc, a_keymap, a_networks)) }) }}; - ( u: $inner:expr ) => {{ + ( u: $inner:expr ) => {{ $inner.and_then(|(a_minisc, a_keymap, a_networks)| { $crate::impl_leaf_opcode_value_two!( OrI, @@ -1464,46 +1464,46 @@ /// ``` #[macro_export] macro_rules! descriptor { - ( bare ( $( $minisc:tt )* ) ) => ({ + ( bare ( $( $minisc:tt )* ) ) => ({ $crate::impl_top_level_sh!(Bare, new, new, Legacy, $( $minisc )*) }); - ( sh ( wsh ( $( $minisc:tt )* ) ) ) => ({ + ( sh ( wsh ( $( $minisc:tt )* ) ) ) => ({ $crate::descriptor!(shwsh ($( $minisc )*)) }); - ( shwsh ( $( $minisc:tt )* ) ) => ({ + ( shwsh ( $( $minisc:tt )* ) ) => ({ $crate::impl_top_level_sh!(Sh, new_wsh, new_wsh_sortedmulti, Segwitv0, $( $minisc )*) }); - ( pk ( $key:expr ) ) => ({ + ( pk ( $key:expr ) ) => ({ // `pk()` is actually implemented as `bare(pk())` $crate::descriptor!( bare ( pk ( $key ) ) ) }); - ( pkh ( $key:expr ) ) => ({ + ( pkh ( $key:expr ) ) => ({ use $crate::miniscript::descriptor::{Descriptor, DescriptorPublicKey}; $crate::impl_top_level_pk!(Pkh, $crate::miniscript::Legacy, $key) .map(|(a, b, c)| (Descriptor::<DescriptorPublicKey>::Pkh(a), b, c)) }); - ( wpkh ( $key:expr ) ) => ({ + ( wpkh ( $key:expr ) ) => ({ use $crate::miniscript::descriptor::{Descriptor, DescriptorPublicKey}; $crate::impl_top_level_pk!(Wpkh, $crate::miniscript::Segwitv0, $key) .and_then(|(a, b, c)| Ok((a?, b, c))) .map(|(a, b, c)| (Descriptor::<DescriptorPublicKey>::Wpkh(a), b, c)) }); - ( sh ( wpkh ( $key:expr ) ) ) => ({ + ( sh ( wpkh ( $key:expr ) ) ) => ({ $crate::descriptor!(shwpkh ( $key )) }); - ( shwpkh ( $key:expr ) ) => ({ + ( shwpkh ( $key:expr ) ) => ({ use $crate::miniscript::descriptor::{Descriptor, DescriptorPublicKey, Sh}; $crate::impl_top_level_pk!(Wpkh, $crate::miniscript::Segwitv0, $key) .and_then(|(a, b, c)| Ok((a?, b, c))) .and_then(|(a, b, c)| Ok((Descriptor::<DescriptorPublicKey>::Sh(Sh::new_wpkh(a.into_inner())?), b, c))) }); - ( sh ( $( $minisc:tt )* ) ) => ({ + ( sh ( $( $minisc:tt )* ) ) => ({ $crate::impl_top_level_sh!(Sh, new, new_sortedmulti, Legacy, $( $minisc )*) }); - ( wsh ( $( $minisc:tt )* ) ) => ({ + ( wsh ( $( $minisc:tt )* ) ) => ({ $crate::impl_top_level_sh!(Wsh, new, new_sortedmulti, Segwitv0, $( $minisc )*) }); } @@ -1515,13 +1515,13 @@ } impl<A, B> TupleTwo<A, B> { - pub fn flattened(self) -> (A, B) { + pub fn flattened(self) -> (A, B) { (self.a, self.b) } } impl<A, B> From<(A, (B, ()))> for TupleTwo<A, B> { - fn from((a, (b, _)): (A, (B, ()))) -> Self { + fn from((a, (b, _)): (A, (B, ()))) -> Self { TupleTwo { a, b } } } @@ -1534,13 +1534,13 @@ } impl<A, B, C> TupleThree<A, B, C> { - pub fn flattened(self) -> (A, B, C) { + pub fn flattened(self) -> (A, B, C) { (self.a, self.b, self.c) } } impl<A, B, C> From<(A, (B, (C, ())))> for TupleThree<A, B, C> { - fn from((a, (b, (c, _))): (A, (B, (C, ())))) -> Self { + fn from((a, (b, (c, _))): (A, (B, (C, ())))) -> Self { TupleThree { a, b, c } } } @@ -1550,14 +1550,14 @@ macro_rules! fragment_internal { // The @v prefix is used to parse a sequence of operands and return them in a vector. This is // used by operands that take a variable number of arguments, like `thresh()` and `multi()`. - ( @v $op:ident ( $( $args:tt )* ) $( $tail:tt )* ) => ({ + ( @v $op:ident ( $( $args:tt )* ) $( $tail:tt )* ) => ({ let mut v = vec![$crate::fragment!( $op ( $( $args )* ) )]; v.append(&mut $crate::fragment_internal!( @v $( $tail )* )); v }); // Match modifiers - ( @v $modif:tt : $( $tail:tt )* ) => ({ + ( @v $modif:tt : $( $tail:tt )* ) => ({ let mut v = $crate::fragment_internal!( @v $( $tail )* ); let first = v.drain(..1).next().unwrap(); @@ -1569,10 +1569,10 @@ v_final }); // Remove commas between operands - ( @v , $( $tail:tt )* ) => ({ + ( @v , $( $tail:tt )* ) => ({ $crate::fragment_internal!( @v $( $tail )* ) }); - ( @v ) => ({ + ( @v ) => ({ vec![] }); @@ -1588,22 +1588,22 @@ // To check that the right number of arguments has been passed we can "cast" those tuples to // more convenient structures like `TupleTwo`. If the conversion succedes, the right number of // args was passed. Otherwise the compilation fails entirely. - ( @t $op:ident ( $( $args:tt )* ) $( $tail:tt )* ) => ({ + ( @t $op:ident ( $( $args:tt )* ) $( $tail:tt )* ) => ({ ($crate::fragment!( $op ( $( $args )* ) ), $crate::fragment_internal!( @t $( $tail )* )) }); // Match modifiers - ( @t $modif:tt : $( $tail:tt )* ) => ({ + ( @t $modif:tt : $( $tail:tt )* ) => ({ let (first, tail) = $crate::fragment_internal!( @t $( $tail )* ); ($crate::apply_modifier!($modif:first), tail) }); // Remove commas between operands - ( @t , $( $tail:tt )* ) => ({ + ( @t , $( $tail:tt )* ) => ({ $crate::fragment_internal!( @t $( $tail )* ) }); - ( @t ) => ({}); + ( @t ) => ({}); // Fallback to calling `fragment!()` - ( $( $tokens:tt )* ) => ({ + ( $( $tokens:tt )* ) => ({ $crate::fragment!($( $tokens )*) }); } @@ -1617,72 +1617,72 @@ #[macro_export] macro_rules! fragment { // Modifiers - ( $modif:tt : $( $tail:tt )* ) => ({ + ( $modif:tt : $( $tail:tt )* ) => ({ let op = $crate::fragment!( $( $tail )* ); $crate::apply_modifier!($modif:op) }); // Miniscript - ( true ) => ({ + ( true ) => ({ $crate::impl_leaf_opcode!(True) }); - ( false ) => ({ + ( false ) => ({ $crate::impl_leaf_opcode!(False) }); - ( pk_k ( $key:expr ) ) => ({ + ( pk_k ( $key:expr ) ) => ({ let secp = $crate::bitcoin::secp256k1::Secp256k1::new(); $crate::keys::make_pk($key, &secp) }); - ( pk ( $key:expr ) ) => ({ + ( pk ( $key:expr ) ) => ({ $crate::fragment!(c:pk_k ( $key )) }); - ( pk_h ( $key:expr ) ) => ({ + ( pk_h ( $key:expr ) ) => ({ let secp = $crate::bitcoin::secp256k1::Secp256k1::new(); $crate::keys::make_pkh($key, &secp) }); - ( after ( $value:expr ) ) => ({ + ( after ( $value:expr ) ) => ({ $crate::impl_leaf_opcode_value!(After, $value) }); - ( older ( $value:expr ) ) => ({ + ( older ( $value:expr ) ) => ({ $crate::impl_leaf_opcode_value!(Older, $value) }); - ( sha256 ( $hash:expr ) ) => ({ + ( sha256 ( $hash:expr ) ) => ({ $crate::impl_leaf_opcode_value!(Sha256, $hash) }); - ( hash256 ( $hash:expr ) ) => ({ + ( hash256 ( $hash:expr ) ) => ({ $crate::impl_leaf_opcode_value!(Hash256, $hash) }); - ( ripemd160 ( $hash:expr ) ) => ({ + ( ripemd160 ( $hash:expr ) ) => ({ $crate::impl_leaf_opcode_value!(Ripemd160, $hash) }); - ( hash160 ( $hash:expr ) ) => ({ + ( hash160 ( $hash:expr ) ) => ({ $crate::impl_leaf_opcode_value!(Hash160, $hash) }); - ( and_v ( $( $inner:tt )* ) ) => ({ + ( and_v ( $( $inner:tt )* ) ) => ({ $crate::impl_node_opcode_two!(AndV, $( $inner )*) }); - ( and_b ( $( $inner:tt )* ) ) => ({ + ( and_b ( $( $inner:tt )* ) ) => ({ $crate::impl_node_opcode_two!(AndB, $( $inner )*) }); - ( and_or ( $( $inner:tt )* ) ) => ({ + ( and_or ( $( $inner:tt )* ) ) => ({ $crate::impl_node_opcode_three!(AndOr, $( $inner )*) }); - ( andor ( $( $inner:tt )* ) ) => ({ + ( andor ( $( $inner:tt )* ) ) => ({ $crate::impl_node_opcode_three!(AndOr, $( $inner )*) }); - ( or_b ( $( $inner:tt )* ) ) => ({ + ( or_b ( $( $inner:tt )* ) ) => ({ $crate::impl_node_opcode_two!(OrB, $( $inner )*) }); - ( or_d ( $( $inner:tt )* ) ) => ({ + ( or_d ( $( $inner:tt )* ) ) => ({ $crate::impl_node_opcode_two!(OrD, $( $inner )*) }); - ( or_c ( $( $inner:tt )* ) ) => ({ + ( or_c ( $( $inner:tt )* ) ) => ({ $crate::impl_node_opcode_two!(OrC, $( $inner )*) }); - ( or_i ( $( $inner:tt )* ) ) => ({ + ( or_i ( $( $inner:tt )* ) ) => ({ $crate::impl_node_opcode_two!(OrI, $( $inner )*) }); - ( thresh_vec ( $thresh:expr, $items:expr ) ) => ({ + ( thresh_vec ( $thresh:expr, $items:expr ) ) => ({ use $crate::miniscript::descriptor::KeyMap; let (items, key_maps_networks): (Vec<_>, Vec<_>) = $items.into_iter().map(|(a, b, c)| (a, (b, c))).unzip(); @@ -1698,16 +1698,16 @@ $crate::impl_leaf_opcode_value_two!(Thresh, $thresh, items) .map(|(minisc, _, _)| (minisc, key_maps, valid_networks)) }); - ( thresh ( $thresh:expr, $( $inner:tt )* ) ) => ({ + ( thresh ( $thresh:expr, $( $inner:tt )* ) ) => ({ let items = $crate::fragment_internal!( @v $( $inner )* ); items.into_iter().collect::<Result<Vec<_>, _>>() .and_then(|items| $crate::fragment!(thresh_vec($thresh, items))) }); - ( multi_vec ( $thresh:expr, $keys:expr ) ) => ({ + ( multi_vec ( $thresh:expr, $keys:expr ) ) => ({ $crate::keys::make_multi($thresh, $keys) }); - ( multi ( $thresh:expr $(, $key:expr )+ ) ) => ({ + ( multi ( $thresh:expr $(, $key:expr )+ ) ) => ({ use $crate::keys::IntoDescriptorKey; let secp = $crate::bitcoin::secp256k1::Secp256k1::new(); @@ -1723,10 +1723,10 @@ }); // `sortedmulti()` is handled separately - ( sortedmulti ( $( $inner:tt )* ) ) => ({ + ( sortedmulti ( $( $inner:tt )* ) ) => ({ compile_error!("`sortedmulti` can only be used as the root operand of a descriptor"); }); - ( sortedmulti_vec ( $( $inner:tt )* ) ) => ({ + ( sortedmulti_vec ( $( $inner:tt )* ) ) => ({ compile_error!("`sortedmulti_vec` can only be used as the root operand of a descriptor"); }); } diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/error.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/error.rs.html index 49cea1f62b..b3b009d391 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/error.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/error.rs.html @@ -113,17 +113,17 @@ } impl From<crate::keys::KeyError> for Error { - fn from(key_error: crate::keys::KeyError) -> Error { + fn from(key_error: crate::keys::KeyError) -> Error { match key_error { - crate::keys::KeyError::Miniscript(inner) => Error::Miniscript(inner), - crate::keys::KeyError::Bip32(inner) => Error::Bip32(inner), - e => Error::Key(e), + crate::keys::KeyError::Miniscript(inner) => Error::Miniscript(inner), + crate::keys::KeyError::Bip32(inner) => Error::Bip32(inner), + e => Error::Key(e), } } } impl std::fmt::Display for Error { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{:?}", self) } } diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/mod.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/mod.rs.html index 628c70d6f8..3d3b910ac4 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/mod.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/mod.rs.html @@ -871,7 +871,7 @@ self, secp: &SecpCtx, network: Network, - ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError>; + ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError>; } impl IntoWalletDescriptor for &str { @@ -879,12 +879,12 @@ self, secp: &SecpCtx, network: Network, - ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> { + ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> { let descriptor = if self.contains('#') { let parts: Vec<&str> = self.splitn(2, '#').collect(); if !get_checksum(parts[0]) .ok() - .map(|computed| computed == parts[1]) + .map(|computed| computed == parts[1]) .unwrap_or(false) { return Err(DescriptorError::InvalidDescriptorChecksum); @@ -905,7 +905,7 @@ self, secp: &SecpCtx, network: Network, - ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> { + ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> { self.as_str().into_wallet_descriptor(secp, network) } } @@ -915,7 +915,7 @@ self, secp: &SecpCtx, network: Network, - ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> { + ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> { (self, KeyMap::default()).into_wallet_descriptor(secp, network) } } @@ -925,7 +925,7 @@ self, secp: &SecpCtx, network: Network, - ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> { + ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> { use crate::keys::DescriptorKey; let check_key = |pk: &DescriptorPublicKey| { @@ -958,7 +958,7 @@ self, _secp: &SecpCtx, network: Network, - ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> { + ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> { let valid_networks = &self.2; let fix_key = |pk: &DescriptorPublicKey| { @@ -969,13 +969,13 @@ // them are valid. here we reset the network to make sure the wallet struct gets a // descriptor with the right network everywhere. let pk = match pk { - DescriptorPublicKey::XPub(ref xpub) => { + DescriptorPublicKey::XPub(ref xpub) => { let mut xpub = xpub.clone(); xpub.xkey.network = network; DescriptorPublicKey::XPub(xpub) } - other => other.clone(), + other => other.clone(), }; Ok(pk) @@ -997,7 +997,7 @@ inner: T, secp: &SecpCtx, network: Network, -) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> { +) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> { let (descriptor, keymap) = inner.into_wallet_descriptor(secp, network)?; // Ensure the keys don't contain any hardened derivation steps or hardened wildcards @@ -1008,7 +1008,7 @@ .. }) = k.as_key() { - return *wildcard == Wildcard::Hardened + return *wildcard == Wildcard::Hardened || derivation_path.into_iter().any(ChildNumber::is_hardened); } @@ -1042,13 +1042,13 @@ #[doc(hidden)] /// Used internally mainly by the `descriptor!()` and `fragment!()` macros pub trait CheckMiniscript<Ctx: miniscript::ScriptContext> { - fn check_minsicript(&self) -> Result<(), miniscript::Error>; + fn check_minsicript(&self) -> Result<(), miniscript::Error>; } impl<Ctx: miniscript::ScriptContext, Pk: miniscript::MiniscriptKey> CheckMiniscript<Ctx> for miniscript::Miniscript<Pk, Ctx> { - fn check_minsicript(&self) -> Result<(), miniscript::Error> { + fn check_minsicript(&self) -> Result<(), miniscript::Error> { Ctx::check_global_validity(self)?; Ok(()) @@ -1063,12 +1063,12 @@ signers: &SignersContainer, psbt: BuildSatisfaction, secp: &SecpCtx, - ) -> Result<Option<Policy>, DescriptorError>; + ) -> Result<Option<Policy>, DescriptorError>; } pub(crate) trait XKeyUtils { - fn full_path(&self, append: &[ChildNumber]) -> DerivationPath; - fn root_fingerprint(&self, secp: &SecpCtx) -> Fingerprint; + fn full_path(&self, append: &[ChildNumber]) -> DerivationPath; + fn root_fingerprint(&self, secp: &SecpCtx) -> Fingerprint; } // FIXME: `InnerXKey` was made private in rust-miniscript, so we have to implement this manually on @@ -1077,14 +1077,14 @@ // Revert back to using the trait once https://github.com/rust-bitcoin/rust-miniscript/pull/230 is // released impl XKeyUtils for DescriptorXKey<ExtendedPubKey> { - fn full_path(&self, append: &[ChildNumber]) -> DerivationPath { + fn full_path(&self, append: &[ChildNumber]) -> DerivationPath { let full_path = match self.origin { - Some((_, ref path)) => path + Some((_, ref path)) => path .into_iter() .chain(self.derivation_path.into_iter()) .cloned() .collect(), - None => self.derivation_path.clone(), + None => self.derivation_path.clone(), }; if self.wildcard != Wildcard::None { @@ -1098,22 +1098,22 @@ } } - fn root_fingerprint(&self, _: &SecpCtx) -> Fingerprint { + fn root_fingerprint(&self, _: &SecpCtx) -> Fingerprint { match self.origin { - Some((fingerprint, _)) => fingerprint, - None => self.xkey.fingerprint(), + Some((fingerprint, _)) => fingerprint, + None => self.xkey.fingerprint(), } } } impl XKeyUtils for DescriptorXKey<ExtendedPrivKey> { - fn full_path(&self, append: &[ChildNumber]) -> DerivationPath { + fn full_path(&self, append: &[ChildNumber]) -> DerivationPath { let full_path = match self.origin { - Some((_, ref path)) => path + Some((_, ref path)) => path .into_iter() .chain(self.derivation_path.into_iter()) .cloned() .collect(), - None => self.derivation_path.clone(), + None => self.derivation_path.clone(), }; if self.wildcard != Wildcard::None { @@ -1127,65 +1127,65 @@ } } - fn root_fingerprint(&self, secp: &SecpCtx) -> Fingerprint { + fn root_fingerprint(&self, secp: &SecpCtx) -> Fingerprint { match self.origin { - Some((fingerprint, _)) => fingerprint, - None => self.xkey.fingerprint(secp), + Some((fingerprint, _)) => fingerprint, + None => self.xkey.fingerprint(secp), } } } pub(crate) trait DerivedDescriptorMeta { - fn get_hd_keypaths(&self, secp: &SecpCtx) -> Result<HdKeyPaths, DescriptorError>; + fn get_hd_keypaths(&self, secp: &SecpCtx) -> Result<HdKeyPaths, DescriptorError>; } pub(crate) trait DescriptorMeta { - fn is_witness(&self) -> bool; - fn get_extended_keys(&self) -> Result<Vec<DescriptorXKey<ExtendedPubKey>>, DescriptorError>; + fn is_witness(&self) -> bool; + fn get_extended_keys(&self) -> Result<Vec<DescriptorXKey<ExtendedPubKey>>, DescriptorError>; fn derive_from_hd_keypaths<'s>( &self, hd_keypaths: &HdKeyPaths, secp: &'s SecpCtx, - ) -> Option<DerivedDescriptor<'s>>; + ) -> Option<DerivedDescriptor<'s>>; fn derive_from_psbt_input<'s>( &self, psbt_input: &psbt::Input, utxo: Option<TxOut>, secp: &'s SecpCtx, - ) -> Option<DerivedDescriptor<'s>>; + ) -> Option<DerivedDescriptor<'s>>; } pub(crate) trait DescriptorScripts { - fn psbt_redeem_script(&self) -> Option<Script>; - fn psbt_witness_script(&self) -> Option<Script>; + fn psbt_redeem_script(&self) -> Option<Script>; + fn psbt_witness_script(&self) -> Option<Script>; } impl<'s> DescriptorScripts for DerivedDescriptor<'s> { - fn psbt_redeem_script(&self) -> Option<Script> { + fn psbt_redeem_script(&self) -> Option<Script> { match self.desc_type() { - DescriptorType::ShWpkh => Some(self.explicit_script()), - DescriptorType::ShWsh => Some(self.explicit_script().to_v0_p2wsh()), - DescriptorType::Sh => Some(self.explicit_script()), - DescriptorType::Bare => Some(self.explicit_script()), - DescriptorType::ShSortedMulti => Some(self.explicit_script()), - _ => None, + DescriptorType::ShWpkh => Some(self.explicit_script()), + DescriptorType::ShWsh => Some(self.explicit_script().to_v0_p2wsh()), + DescriptorType::Sh => Some(self.explicit_script()), + DescriptorType::Bare => Some(self.explicit_script()), + DescriptorType::ShSortedMulti => Some(self.explicit_script()), + _ => None, } } - fn psbt_witness_script(&self) -> Option<Script> { + fn psbt_witness_script(&self) -> Option<Script> { match self.desc_type() { - DescriptorType::Wsh => Some(self.explicit_script()), - DescriptorType::ShWsh => Some(self.explicit_script()), - DescriptorType::WshSortedMulti | DescriptorType::ShWshSortedMulti => { + DescriptorType::Wsh => Some(self.explicit_script()), + DescriptorType::ShWsh => Some(self.explicit_script()), + DescriptorType::WshSortedMulti | DescriptorType::ShWshSortedMulti => { Some(self.explicit_script()) } - _ => None, + _ => None, } } } impl DescriptorMeta for ExtendedDescriptor { - fn is_witness(&self) -> bool { + fn is_witness(&self) -> bool { matches!( self.desc_type(), DescriptorType::Wpkh @@ -1197,7 +1197,7 @@ ) } - fn get_extended_keys(&self) -> Result<Vec<DescriptorXKey<ExtendedPubKey>>, DescriptorError> { + fn get_extended_keys(&self) -> Result<Vec<DescriptorXKey<ExtendedPubKey>>, DescriptorError> { let mut answer = Vec::new(); self.for_each_key(|pk| { @@ -1215,7 +1215,7 @@ &self, hd_keypaths: &HdKeyPaths, secp: &'s SecpCtx, - ) -> Option<DerivedDescriptor<'s>> { + ) -> Option<DerivedDescriptor<'s>> { let index: HashMap<_, _> = hd_keypaths.values().map(|(a, b)| (a, b)).collect(); let mut path_found = None; @@ -1247,16 +1247,16 @@ }); match derivation_path { - Some(path) if xpub.wildcard != Wildcard::None && path.len() == 1 => { + Some(path) if xpub.wildcard != Wildcard::None && path.len() == 1 => { // Ignore hardened wildcards if let ChildNumber::Normal { index } = path[0] { path_found = Some(index) } } - Some(path) if xpub.wildcard == Wildcard::None && path.is_empty() => { + Some(path) if xpub.wildcard == Wildcard::None && path.is_empty() => { path_found = Some(0) } - _ => {} + _ => {} } } @@ -1271,7 +1271,7 @@ psbt_input: &psbt::Input, utxo: Option<TxOut>, secp: &'s SecpCtx, - ) -> Option<DerivedDescriptor<'s>> { + ) -> Option<DerivedDescriptor<'s>> { if let Some(derived) = self.derive_from_hd_keypaths(&psbt_input.bip32_derivation, secp) { return Some(derived); } @@ -1285,14 +1285,14 @@ // TODO: add pk() here DescriptorType::Pkh | DescriptorType::Wpkh | DescriptorType::ShWpkh if utxo.is_some() - && descriptor.script_pubkey() == utxo.as_ref().unwrap().script_pubkey => + && descriptor.script_pubkey() == utxo.as_ref().unwrap().script_pubkey => { Some(descriptor) } DescriptorType::Bare | DescriptorType::Sh | DescriptorType::ShSortedMulti if psbt_input.redeem_script.is_some() && &descriptor.explicit_script() - == psbt_input.redeem_script.as_ref().unwrap() => + == psbt_input.redeem_script.as_ref().unwrap() => { Some(descriptor) } @@ -1302,17 +1302,17 @@ | DescriptorType::WshSortedMulti if psbt_input.witness_script.is_some() && &descriptor.explicit_script() - == psbt_input.witness_script.as_ref().unwrap() => + == psbt_input.witness_script.as_ref().unwrap() => { Some(descriptor) } - _ => None, + _ => None, } } } impl<'s> DerivedDescriptorMeta for DerivedDescriptor<'s> { - fn get_hd_keypaths(&self, secp: &SecpCtx) -> Result<HdKeyPaths, DescriptorError> { + fn get_hd_keypaths(&self, secp: &SecpCtx) -> Result<HdKeyPaths, DescriptorError> { let mut answer = BTreeMap::new(); self.for_each_key(|key| { if let DescriptorPublicKey::XPub(xpub) = key.as_key().deref() { diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/policy.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/policy.rs.html index 98bb3b3e19..06d036f070 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/policy.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/policy.rs.html @@ -1676,13 +1676,13 @@ } impl PkOrF { - fn from_key(k: &DescriptorPublicKey, secp: &SecpCtx) -> Self { + fn from_key(k: &DescriptorPublicKey, secp: &SecpCtx) -> Self { match k { - DescriptorPublicKey::SinglePub(pubkey) => PkOrF { + DescriptorPublicKey::SinglePub(pubkey) => PkOrF { pubkey: Some(pubkey.key), ..Default::default() }, - DescriptorPublicKey::XPub(xpub) => PkOrF { + DescriptorPublicKey::XPub(xpub) => PkOrF { fingerprint: Some(xpub.root_fingerprint(secp)), ..Default::default() }, @@ -1749,7 +1749,7 @@ impl SatisfiableItem { /// Returns whether the [`SatisfiableItem`] is a leaf item - pub fn is_leaf(&self) -> bool { + pub fn is_leaf(&self) -> bool { !matches!( self, SatisfiableItem::Thresh { @@ -1760,13 +1760,13 @@ } /// Returns a unique id for the [`SatisfiableItem`] - pub fn id(&self) -> String { + pub fn id(&self) -> String { get_checksum(&serde_json::to_string(self).expect("Failed to serialize a SatisfiableItem")) .expect("Failed to compute a SatisfiableItem id") } } -fn combinations(vec: &[usize], size: usize) -> Vec<Vec<usize>> { +fn combinations(vec: &[usize], size: usize) -> Vec<Vec<usize>> { assert!(vec.len() >= size); let mut answer = Vec::new(); @@ -1793,7 +1793,7 @@ answer } -fn mix<T: Clone>(vec: Vec<Vec<T>>) -> Vec<Vec<T>> { +fn mix<T: Clone>(vec: Vec<Vec<T>>) -> Vec<Vec<T>> { if vec.is_empty() || vec.iter().any(Vec::is_empty) { return vec![]; } @@ -1832,7 +1832,7 @@ fn serialize_folded_cond_map<S>( input_map: &FoldedConditionMap, serializer: S, -) -> Result<S::Ok, S::Error> +) -> Result<S::Ok, S::Error> where S: Serializer, { @@ -1893,39 +1893,39 @@ impl Satisfaction { /// Returns whether the [`Satisfaction`] is a leaf item - pub fn is_leaf(&self) -> bool { + pub fn is_leaf(&self) -> bool { match self { - Satisfaction::None | Satisfaction::Complete { .. } => true, - Satisfaction::PartialComplete { .. } | Satisfaction::Partial { .. } => false, + Satisfaction::None | Satisfaction::Complete { .. } => true, + Satisfaction::PartialComplete { .. } | Satisfaction::Partial { .. } => false, } } // add `inner` as one of self's partial items. this only makes sense on partials - fn add(&mut self, inner: &Satisfaction, inner_index: usize) -> Result<(), PolicyError> { + fn add(&mut self, inner: &Satisfaction, inner_index: usize) -> Result<(), PolicyError> { match self { - Satisfaction::None | Satisfaction::Complete { .. } => Err(PolicyError::AddOnLeaf), - Satisfaction::PartialComplete { .. } => Err(PolicyError::AddOnPartialComplete), + Satisfaction::None | Satisfaction::Complete { .. } => Err(PolicyError::AddOnLeaf), + Satisfaction::PartialComplete { .. } => Err(PolicyError::AddOnPartialComplete), Satisfaction::Partial { n, ref mut conditions, ref mut items, .. - } => { + } => { if inner_index >= *n || items.contains(&inner_index) { return Err(PolicyError::IndexOutOfRange(inner_index)); } match inner { // not relevant if not completed yet - Satisfaction::None | Satisfaction::Partial { .. } => return Ok(()), - Satisfaction::Complete { condition } => { + Satisfaction::None | Satisfaction::Partial { .. } => return Ok(()), + Satisfaction::Complete { condition } => { items.push(inner_index); conditions.insert(inner_index, vec![*condition].into_iter().collect()); } Satisfaction::PartialComplete { conditions: other_conditions, .. - } => { + } => { items.push(inner_index); let conditions_set = other_conditions .values() @@ -2009,7 +2009,7 @@ } impl From<bool> for Satisfaction { - fn from(other: bool) -> Self { + fn from(other: bool) -> Self { if other { Satisfaction::Complete { condition: Default::default(), @@ -2047,7 +2047,7 @@ } impl Condition { - fn merge_nlocktime(a: u32, b: u32) -> Result<u32, PolicyError> { + fn merge_nlocktime(a: u32, b: u32) -> Result<u32, PolicyError> { if (a < utils::BLOCKS_TIMELOCK_THRESHOLD) != (b < utils::BLOCKS_TIMELOCK_THRESHOLD) { Err(PolicyError::MixedTimelockUnits) } else { @@ -2055,7 +2055,7 @@ } } - fn merge_nsequence(a: u32, b: u32) -> Result<u32, PolicyError> { + fn merge_nsequence(a: u32, b: u32) -> Result<u32, PolicyError> { let mask = utils::SEQUENCE_LOCKTIME_TYPE_FLAG | utils::SEQUENCE_LOCKTIME_MASK; let a = a & mask; @@ -2068,24 +2068,24 @@ } } - pub(crate) fn merge(mut self, other: &Condition) -> Result<Self, PolicyError> { + pub(crate) fn merge(mut self, other: &Condition) -> Result<Self, PolicyError> { match (self.csv, other.csv) { - (Some(a), Some(b)) => self.csv = Some(Self::merge_nsequence(a, b)?), - (None, any) => self.csv = any, - _ => {} + (Some(a), Some(b)) => self.csv = Some(Self::merge_nsequence(a, b)?), + (None, any) => self.csv = any, + _ => {} } match (self.timelock, other.timelock) { - (Some(a), Some(b)) => self.timelock = Some(Self::merge_nlocktime(a, b)?), - (None, any) => self.timelock = any, - _ => {} + (Some(a), Some(b)) => self.timelock = Some(Self::merge_nlocktime(a, b)?), + (None, any) => self.timelock = any, + _ => {} } Ok(self) } /// Returns `true` if there are no extra conditions to verify - pub fn is_null(&self) -> bool { + pub fn is_null(&self) -> bool { self.csv.is_none() && self.timelock.is_none() } } @@ -2108,7 +2108,7 @@ } impl fmt::Display for PolicyError { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{:?}", self) } } @@ -2116,7 +2116,7 @@ impl std::error::Error for PolicyError {} impl Policy { - fn new(item: SatisfiableItem) -> Self { + fn new(item: SatisfiableItem) -> Self { Policy { id: item.id(), item, @@ -2125,24 +2125,24 @@ } } - fn make_and(a: Option<Policy>, b: Option<Policy>) -> Result<Option<Policy>, PolicyError> { + fn make_and(a: Option<Policy>, b: Option<Policy>) -> Result<Option<Policy>, PolicyError> { match (a, b) { - (None, None) => Ok(None), - (Some(x), None) | (None, Some(x)) => Ok(Some(x)), - (Some(a), Some(b)) => Self::make_thresh(vec![a, b], 2), + (None, None) => Ok(None), + (Some(x), None) | (None, Some(x)) => Ok(Some(x)), + (Some(a), Some(b)) => Self::make_thresh(vec![a, b], 2), } } - fn make_or(a: Option<Policy>, b: Option<Policy>) -> Result<Option<Policy>, PolicyError> { + fn make_or(a: Option<Policy>, b: Option<Policy>) -> Result<Option<Policy>, PolicyError> { match (a, b) { - (None, None) => Ok(None), - (Some(x), None) | (None, Some(x)) => Ok(Some(x)), - (Some(a), Some(b)) => Self::make_thresh(vec![a, b], 1), + (None, None) => Ok(None), + (Some(x), None) | (None, Some(x)) => Ok(Some(x)), + (Some(a), Some(b)) => Self::make_thresh(vec![a, b], 1), } } - fn make_thresh(items: Vec<Policy>, threshold: usize) -> Result<Option<Policy>, PolicyError> { - if threshold == 0 { + fn make_thresh(items: Vec<Policy>, threshold: usize) -> Result<Option<Policy>, PolicyError> { + if threshold == 0 { return Ok(None); } @@ -2176,8 +2176,8 @@ threshold: usize, sorted: bool, secp: &SecpCtx, - ) -> Result<Option<Policy>, PolicyError> { - if threshold == 0 { + ) -> Result<Option<Policy>, PolicyError> { + if threshold == 0 { return Ok(None); } @@ -2233,7 +2233,7 @@ /// What this means is that for some spending policies the user should select which paths in /// the tree it intends to satisfy while signing, because the transaction must be created differently based /// on that. - pub fn requires_path(&self) -> bool { + pub fn requires_path(&self) -> bool { self.get_condition(&BTreeMap::new()).is_err() } @@ -2242,22 +2242,22 @@ pub fn get_condition( &self, path: &BTreeMap<String, Vec<usize>>, - ) -> Result<Condition, PolicyError> { + ) -> Result<Condition, PolicyError> { // if items.len() == threshold, selected can be omitted and we take all of them by default let default = match &self.item { - SatisfiableItem::Thresh { items, threshold } if items.len() == *threshold => { + SatisfiableItem::Thresh { items, threshold } if items.len() == *threshold => { (0..*threshold).collect() } - SatisfiableItem::Multisig { keys, .. } => (0..keys.len()).collect(), - _ => vec![], + SatisfiableItem::Multisig { keys, .. } => (0..keys.len()).collect(), + _ => vec![], }; let selected = match path.get(&self.id) { - Some(arr) => arr, - _ => &default, + Some(arr) => arr, + _ => &default, }; match &self.item { - SatisfiableItem::Thresh { items, threshold } => { + SatisfiableItem::Thresh { items, threshold } => { let mapped_req = items .iter() .map(|i| i.get_condition(path)) @@ -2288,7 +2288,7 @@ Ok(requirements) } - SatisfiableItem::Multisig { keys, threshold } => { + SatisfiableItem::Multisig { keys, threshold } => { if selected.len() < *threshold { return Err(PolicyError::NotEnoughItemsSelected(self.id.clone())); } @@ -2298,29 +2298,29 @@ Ok(Condition::default()) } - SatisfiableItem::AbsoluteTimelock { value } => Ok(Condition { + SatisfiableItem::AbsoluteTimelock { value } => Ok(Condition { csv: None, timelock: Some(*value), }), - SatisfiableItem::RelativeTimelock { value } => Ok(Condition { + SatisfiableItem::RelativeTimelock { value } => Ok(Condition { csv: Some(*value), timelock: None, }), - _ => Ok(Condition::default()), + _ => Ok(Condition::default()), } } } impl From<SatisfiableItem> for Policy { - fn from(other: SatisfiableItem) -> Self { + fn from(other: SatisfiableItem) -> Self { Self::new(other) } } -fn signer_id(key: &DescriptorPublicKey, secp: &SecpCtx) -> SignerId { +fn signer_id(key: &DescriptorPublicKey, secp: &SecpCtx) -> SignerId { match key { - DescriptorPublicKey::SinglePub(pubkey) => pubkey.key.to_pubkeyhash().into(), - DescriptorPublicKey::XPub(xpub) => xpub.root_fingerprint(secp).into(), + DescriptorPublicKey::SinglePub(pubkey) => pubkey.key.to_pubkeyhash().into(), + DescriptorPublicKey::XPub(xpub) => xpub.root_fingerprint(secp).into(), } } @@ -2329,7 +2329,7 @@ signers: &SignersContainer, build_sat: BuildSatisfaction, secp: &SecpCtx, -) -> Policy { +) -> Policy { let mut policy: Policy = SatisfiableItem::Signature(PkOrF::from_key(key, secp)).into(); policy.contribution = if signers.find(signer_id(key, secp)).is_some() { @@ -2353,20 +2353,20 @@ policy } -fn signature_in_psbt(psbt: &Psbt, key: &DescriptorPublicKey, secp: &SecpCtx) -> bool { +fn signature_in_psbt(psbt: &Psbt, key: &DescriptorPublicKey, secp: &SecpCtx) -> bool { //TODO check signature validity psbt.inputs.iter().all(|input| match key { - DescriptorPublicKey::SinglePub(key) => input.partial_sigs.contains_key(&key.key), - DescriptorPublicKey::XPub(xpub) => { + DescriptorPublicKey::SinglePub(key) => input.partial_sigs.contains_key(&key.key), + DescriptorPublicKey::XPub(xpub) => { let pubkey = input .bip32_derivation .iter() - .find(|(_, (f, _))| *f == xpub.root_fingerprint(secp)) + .find(|(_, (f, _))| *f == xpub.root_fingerprint(secp)) .map(|(p, _)| p); //TODO check actual derivation matches match pubkey { - Some(pubkey) => input.partial_sigs.contains_key(pubkey), - None => false, + Some(pubkey) => input.partial_sigs.contains_key(pubkey), + None => false, } } }) @@ -2378,13 +2378,13 @@ signers: &SignersContainer, build_sat: BuildSatisfaction, secp: &SecpCtx, - ) -> Result<Option<Policy>, Error> { + ) -> Result<Option<Policy>, Error> { Ok(match &self.node { // Leaves - Terminal::True | Terminal::False => None, - Terminal::PkK(pubkey) => Some(signature(pubkey, signers, build_sat, secp)), - Terminal::PkH(pubkey_hash) => Some(signature(pubkey_hash, signers, build_sat, secp)), - Terminal::After(value) => { + Terminal::True | Terminal::False => None, + Terminal::PkK(pubkey) => Some(signature(pubkey, signers, build_sat, secp)), + Terminal::PkH(pubkey_hash) => Some(signature(pubkey_hash, signers, build_sat, secp)), + Terminal::After(value) => { let mut policy: Policy = SatisfiableItem::AbsoluteTimelock { value: *value }.into(); policy.contribution = Satisfaction::Complete { condition: Condition { @@ -2409,7 +2409,7 @@ Some(policy) } - Terminal::Older(value) => { + Terminal::Older(value) => { let mut policy: Policy = SatisfiableItem::RelativeTimelock { value: *value }.into(); policy.contribution = Satisfaction::Complete { condition: Condition { @@ -2434,17 +2434,17 @@ Some(policy) } - Terminal::Sha256(hash) => Some(SatisfiableItem::Sha256Preimage { hash: *hash }.into()), - Terminal::Hash256(hash) => { + Terminal::Sha256(hash) => Some(SatisfiableItem::Sha256Preimage { hash: *hash }.into()), + Terminal::Hash256(hash) => { Some(SatisfiableItem::Hash256Preimage { hash: *hash }.into()) } - Terminal::Ripemd160(hash) => { + Terminal::Ripemd160(hash) => { Some(SatisfiableItem::Ripemd160Preimage { hash: *hash }.into()) } - Terminal::Hash160(hash) => { + Terminal::Hash160(hash) => { Some(SatisfiableItem::Hash160Preimage { hash: *hash }.into()) } - Terminal::Multi(k, pks) => { + Terminal::Multi(k, pks) => { Policy::make_multisig(pks, signers, build_sat, *k, false, secp)? } // Identities @@ -2454,13 +2454,13 @@ | Terminal::DupIf(inner) | Terminal::Verify(inner) | Terminal::NonZero(inner) - | Terminal::ZeroNotEqual(inner) => inner.extract_policy(signers, build_sat, secp)?, + | Terminal::ZeroNotEqual(inner) => inner.extract_policy(signers, build_sat, secp)?, // Complex policies - Terminal::AndV(a, b) | Terminal::AndB(a, b) => Policy::make_and( + Terminal::AndV(a, b) | Terminal::AndB(a, b) => Policy::make_and( a.extract_policy(signers, build_sat, secp)?, b.extract_policy(signers, build_sat, secp)?, )?, - Terminal::AndOr(x, y, z) => Policy::make_or( + Terminal::AndOr(x, y, z) => Policy::make_or( Policy::make_and( x.extract_policy(signers, build_sat, secp)?, y.extract_policy(signers, build_sat, secp)?, @@ -2470,11 +2470,11 @@ Terminal::OrB(a, b) | Terminal::OrD(a, b) | Terminal::OrC(a, b) - | Terminal::OrI(a, b) => Policy::make_or( + | Terminal::OrI(a, b) => Policy::make_or( a.extract_policy(signers, build_sat, secp)?, b.extract_policy(signers, build_sat, secp)?, )?, - Terminal::Thresh(k, nodes) => { + Terminal::Thresh(k, nodes) => { let mut threshold = *k; let mapped: Vec<_> = nodes .iter() @@ -2486,8 +2486,8 @@ if mapped.len() < nodes.len() { threshold = match threshold.checked_sub(nodes.len() - mapped.len()) { - None => return Ok(None), - Some(x) => x, + None => return Ok(None), + Some(x) => x, }; } @@ -2497,7 +2497,7 @@ } } -fn psbt_inputs_sat(psbt: &Psbt) -> impl Iterator<Item = PsbtInputSatisfier> { +fn psbt_inputs_sat(psbt: &Psbt) -> impl Iterator<Item = PsbtInputSatisfier> { (0..psbt.inputs.len()).map(move |i| PsbtInputSatisfier::new(psbt, i)) } @@ -2520,11 +2520,11 @@ }, } impl<'a> BuildSatisfaction<'a> { - fn psbt(&self) -> Option<&'a Psbt> { + fn psbt(&self) -> Option<&'a Psbt> { match self { - BuildSatisfaction::None => None, - BuildSatisfaction::Psbt(psbt) => Some(psbt), - BuildSatisfaction::PsbtTimelocks { psbt, .. } => Some(psbt), + BuildSatisfaction::None => None, + BuildSatisfaction::Psbt(psbt) => Some(psbt), + BuildSatisfaction::PsbtTimelocks { psbt, .. } => Some(psbt), } } } @@ -2535,13 +2535,13 @@ signers: &SignersContainer, build_sat: BuildSatisfaction, secp: &SecpCtx, - ) -> Result<Option<Policy>, Error> { + ) -> Result<Option<Policy>, Error> { fn make_sortedmulti<Ctx: ScriptContext>( keys: &SortedMultiVec<DescriptorPublicKey, Ctx>, signers: &SignersContainer, build_sat: BuildSatisfaction, secp: &SecpCtx, - ) -> Result<Option<Policy>, Error> { + ) -> Result<Option<Policy>, Error> { Ok(Policy::make_multisig( keys.pks.as_ref(), signers, @@ -2553,24 +2553,24 @@ } match self { - Descriptor::Pkh(pk) => Ok(Some(signature(pk.as_inner(), signers, build_sat, secp))), - Descriptor::Wpkh(pk) => Ok(Some(signature(pk.as_inner(), signers, build_sat, secp))), - Descriptor::Sh(sh) => match sh.as_inner() { - ShInner::Wpkh(pk) => Ok(Some(signature(pk.as_inner(), signers, build_sat, secp))), - ShInner::Ms(ms) => Ok(ms.extract_policy(signers, build_sat, secp)?), - ShInner::SortedMulti(ref keys) => make_sortedmulti(keys, signers, build_sat, secp), - ShInner::Wsh(wsh) => match wsh.as_inner() { - WshInner::Ms(ms) => Ok(ms.extract_policy(signers, build_sat, secp)?), - WshInner::SortedMulti(ref keys) => { + Descriptor::Pkh(pk) => Ok(Some(signature(pk.as_inner(), signers, build_sat, secp))), + Descriptor::Wpkh(pk) => Ok(Some(signature(pk.as_inner(), signers, build_sat, secp))), + Descriptor::Sh(sh) => match sh.as_inner() { + ShInner::Wpkh(pk) => Ok(Some(signature(pk.as_inner(), signers, build_sat, secp))), + ShInner::Ms(ms) => Ok(ms.extract_policy(signers, build_sat, secp)?), + ShInner::SortedMulti(ref keys) => make_sortedmulti(keys, signers, build_sat, secp), + ShInner::Wsh(wsh) => match wsh.as_inner() { + WshInner::Ms(ms) => Ok(ms.extract_policy(signers, build_sat, secp)?), + WshInner::SortedMulti(ref keys) => { make_sortedmulti(keys, signers, build_sat, secp) } }, }, - Descriptor::Wsh(wsh) => match wsh.as_inner() { - WshInner::Ms(ms) => Ok(ms.extract_policy(signers, build_sat, secp)?), - WshInner::SortedMulti(ref keys) => make_sortedmulti(keys, signers, build_sat, secp), + Descriptor::Wsh(wsh) => match wsh.as_inner() { + WshInner::Ms(ms) => Ok(ms.extract_policy(signers, build_sat, secp)?), + WshInner::SortedMulti(ref keys) => make_sortedmulti(keys, signers, build_sat, secp), }, - Descriptor::Bare(ms) => Ok(ms.as_inner().extract_policy(signers, build_sat, secp)?), + Descriptor::Bare(ms) => Ok(ms.as_inner().extract_policy(signers, build_sat, secp)?), } } } @@ -2601,7 +2601,7 @@ tprv: &str, path: &str, secp: &SecpCtx, - ) -> (DescriptorKey<Ctx>, DescriptorKey<Ctx>, Fingerprint) { + ) -> (DescriptorKey<Ctx>, DescriptorKey<Ctx>, Fingerprint) { let path = bip32::DerivationPath::from_str(path).unwrap(); let tprv = bip32::ExtendedPrivKey::from_str(tprv).unwrap(); let tpub = bip32::ExtendedPubKey::from_private(secp, &tprv); @@ -2630,7 +2630,7 @@ .unwrap(); assert!( - matches!(&policy.item, Signature(pk_or_f) if pk_or_f.fingerprint.unwrap() == fingerprint) + matches!(&policy.item, Signature(pk_or_f) if pk_or_f.fingerprint.unwrap() == fingerprint) ); assert!(matches!(&policy.contribution, Satisfaction::None)); @@ -2645,10 +2645,10 @@ .unwrap(); assert!( - matches!(&policy.item, Signature(pk_or_f) if pk_or_f.fingerprint.unwrap() == fingerprint) + matches!(&policy.item, Signature(pk_or_f) if pk_or_f.fingerprint.unwrap() == fingerprint) ); assert!( - matches!(&policy.contribution, Satisfaction::Complete {condition} if condition.csv == None && condition.timelock == None) + matches!(&policy.contribution, Satisfaction::Complete {condition} if condition.csv == None && condition.timelock == None) ); } @@ -2669,15 +2669,15 @@ .unwrap(); assert!( - matches!(&policy.item, Multisig { keys, threshold } if threshold == &2usize - && keys[0].fingerprint.unwrap() == fingerprint0 - && keys[1].fingerprint.unwrap() == fingerprint1) + matches!(&policy.item, Multisig { keys, threshold } if threshold == &2usize + && keys[0].fingerprint.unwrap() == fingerprint0 + && keys[1].fingerprint.unwrap() == fingerprint1) ); // TODO should this be "Satisfaction::None" since we have no prv keys? // TODO should items and conditions not be empty? assert!( - matches!(&policy.contribution, Satisfaction::Partial { n, m, items, conditions, ..} if n == &2usize - && m == &2usize + matches!(&policy.contribution, Satisfaction::Partial { n, m, items, conditions, ..} if n == &2usize + && m == &2usize && items.is_empty() && conditions.is_empty() ) @@ -2700,15 +2700,15 @@ .unwrap() .unwrap(); assert!( - matches!(&policy.item, Multisig { keys, threshold } if threshold == &2usize - && keys[0].fingerprint.unwrap() == fingerprint0 - && keys[1].fingerprint.unwrap() == fingerprint1) + matches!(&policy.item, Multisig { keys, threshold } if threshold == &2usize + && keys[0].fingerprint.unwrap() == fingerprint0 + && keys[1].fingerprint.unwrap() == fingerprint1) ); assert!( - matches!(&policy.contribution, Satisfaction::Partial { n, m, items, conditions, ..} if n == &2usize - && m == &2usize - && items.len() == 1 + matches!(&policy.contribution, Satisfaction::Partial { n, m, items, conditions, ..} if n == &2usize + && m == &2usize + && items.len() == 1 && conditions.contains_key(&0) ) ); @@ -2733,14 +2733,14 @@ .unwrap(); assert!( - matches!(&policy.item, Multisig { keys, threshold } if threshold == &1 - && keys[0].fingerprint.unwrap() == fingerprint0 - && keys[1].fingerprint.unwrap() == fingerprint1) + matches!(&policy.item, Multisig { keys, threshold } if threshold == &1 + && keys[0].fingerprint.unwrap() == fingerprint0 + && keys[1].fingerprint.unwrap() == fingerprint1) ); assert!( - matches!(&policy.contribution, Satisfaction::PartialComplete { n, m, items, conditions, .. } if n == &2 - && m == &1 - && items.len() == 2 + matches!(&policy.contribution, Satisfaction::PartialComplete { n, m, items, conditions, .. } if n == &2 + && m == &1 + && items.len() == 2 && conditions.contains_key(&vec![0]) && conditions.contains_key(&vec![1]) ) @@ -2765,15 +2765,15 @@ .unwrap(); assert!( - matches!(&policy.item, Multisig { keys, threshold } if threshold == &2 - && keys[0].fingerprint.unwrap() == fingerprint0 - && keys[1].fingerprint.unwrap() == fingerprint1) + matches!(&policy.item, Multisig { keys, threshold } if threshold == &2 + && keys[0].fingerprint.unwrap() == fingerprint0 + && keys[1].fingerprint.unwrap() == fingerprint1) ); assert!( - matches!(&policy.contribution, Satisfaction::PartialComplete { n, m, items, conditions, .. } if n == &2 - && m == &2 - && items.len() == 2 + matches!(&policy.contribution, Satisfaction::PartialComplete { n, m, items, conditions, .. } if n == &2 + && m == &2 + && items.len() == 2 && conditions.contains_key(&vec![0,1]) ) ); @@ -2798,7 +2798,7 @@ .unwrap(); assert!( - matches!(&policy.item, Signature(pk_or_f) if pk_or_f.fingerprint.unwrap() == fingerprint) + matches!(&policy.item, Signature(pk_or_f) if pk_or_f.fingerprint.unwrap() == fingerprint) ); assert!(matches!(&policy.contribution, Satisfaction::None)); @@ -2814,10 +2814,10 @@ .unwrap(); assert!( - matches!(&policy.item, Signature(pk_or_f) if pk_or_f.fingerprint.unwrap() == fingerprint) + matches!(&policy.item, Signature(pk_or_f) if pk_or_f.fingerprint.unwrap() == fingerprint) ); assert!( - matches!(&policy.contribution, Satisfaction::Complete {condition} if condition.csv == None && condition.timelock == None) + matches!(&policy.contribution, Satisfaction::Complete {condition} if condition.csv == None && condition.timelock == None) ); } @@ -2841,14 +2841,14 @@ .unwrap(); assert!( - matches!(&policy.item, Multisig { keys, threshold } if threshold == &1 - && keys[0].fingerprint.unwrap() == fingerprint0 - && keys[1].fingerprint.unwrap() == fingerprint1) + matches!(&policy.item, Multisig { keys, threshold } if threshold == &1 + && keys[0].fingerprint.unwrap() == fingerprint0 + && keys[1].fingerprint.unwrap() == fingerprint1) ); assert!( - matches!(&policy.contribution, Satisfaction::PartialComplete { n, m, items, conditions, .. } if n == &2 - && m == &1 - && items.len() == 2 + matches!(&policy.contribution, Satisfaction::PartialComplete { n, m, items, conditions, .. } if n == &2 + && m == &1 + && items.len() == 2 && conditions.contains_key(&vec![0]) && conditions.contains_key(&vec![1]) ) @@ -2884,16 +2884,16 @@ .unwrap(); assert!( - matches!(&policy.item, Thresh { items, threshold } if items.len() == 3 && threshold == &2) + matches!(&policy.item, Thresh { items, threshold } if items.len() == 3 && threshold == &2) ); assert!( - matches!(&policy.contribution, Satisfaction::PartialComplete { n, m, items, conditions, .. } if n == &3 - && m == &2 - && items.len() == 3 + matches!(&policy.contribution, Satisfaction::PartialComplete { n, m, items, conditions, .. } if n == &3 + && m == &2 + && items.len() == 3 && conditions.get(&vec![0,1]).unwrap().iter().next().unwrap().csv.is_none() - && conditions.get(&vec![0,2]).unwrap().iter().next().unwrap().csv == Some(sequence) - && conditions.get(&vec![1,2]).unwrap().iter().next().unwrap().csv == Some(sequence) + && conditions.get(&vec![0,2]).unwrap().iter().next().unwrap().csv == Some(sequence) + && conditions.get(&vec![1,2]).unwrap().iter().next().unwrap().csv == Some(sequence) ) ); } @@ -3058,9 +3058,9 @@ //println!("{}", serde_json::to_string(&policy_alice_psbt).unwrap()); assert!( - matches!(&policy_alice_psbt.satisfaction, Satisfaction::Partial { n, m, items, .. } if n == &2 - && m == &2 - && items == &vec![0] + matches!(&policy_alice_psbt.satisfaction, Satisfaction::Partial { n, m, items, .. } if n == &2 + && m == &2 + && items == &vec![0] ) ); @@ -3072,9 +3072,9 @@ //println!("{}", serde_json::to_string(&policy_bob_psbt).unwrap()); assert!( - matches!(&policy_bob_psbt.satisfaction, Satisfaction::Partial { n, m, items, .. } if n == &2 - && m == &2 - && items == &vec![1] + matches!(&policy_bob_psbt.satisfaction, Satisfaction::Partial { n, m, items, .. } if n == &2 + && m == &2 + && items == &vec![1] ) ); @@ -3084,9 +3084,9 @@ .unwrap() .unwrap(); assert!( - matches!(&policy_alice_bob_psbt.satisfaction, Satisfaction::PartialComplete { n, m, items, .. } if n == &2 - && m == &2 - && items == &vec![0, 1] + matches!(&policy_alice_bob_psbt.satisfaction, Satisfaction::PartialComplete { n, m, items, .. } if n == &2 + && m == &2 + && items == &vec![0, 1] ) ); } @@ -3132,8 +3132,8 @@ .unwrap() .unwrap(); assert!( - matches!(&policy.satisfaction, Satisfaction::Partial { n, m, items, .. } if n == &3 - && m == &2 + matches!(&policy.satisfaction, Satisfaction::Partial { n, m, items, .. } if n == &3 + && m == &2 && items.is_empty() ) ); @@ -3150,9 +3150,9 @@ .unwrap() .unwrap(); assert!( - matches!(&policy_expired.satisfaction, Satisfaction::Partial { n, m, items, .. } if n == &3 - && m == &2 - && items == &vec![0] + matches!(&policy_expired.satisfaction, Satisfaction::Partial { n, m, items, .. } if n == &3 + && m == &2 + && items == &vec![0] ) ); //println!("{}", serde_json::to_string(&policy_expired).unwrap()); @@ -3170,9 +3170,9 @@ .unwrap() .unwrap(); assert!( - matches!(&policy_expired_signed.satisfaction, Satisfaction::PartialComplete { n, m, items, .. } if n == &3 - && m == &2 - && items == &vec![0, 1] + matches!(&policy_expired_signed.satisfaction, Satisfaction::PartialComplete { n, m, items, .. } if n == &3 + && m == &2 + && items == &vec![0, 1] ) ); //println!("{}", serde_json::to_string(&policy_expired_signed).unwrap()); diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/template.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/template.rs.html index 31d6c7edbe..497e574563 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/template.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/template.rs.html @@ -777,7 +777,7 @@ /// ``` pub trait DescriptorTemplate { /// Build the complete descriptor - fn build(self) -> Result<DescriptorTemplateOut, DescriptorError>; + fn build(self) -> Result<DescriptorTemplateOut, DescriptorError>; } /// Turns a [`DescriptorTemplate`] into a valid wallet descriptor by calling its @@ -787,7 +787,7 @@ self, secp: &SecpCtx, network: Network, - ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> { + ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> { self.build()?.into_wallet_descriptor(secp, network) } } @@ -821,7 +821,7 @@ pub struct P2Pkh<K: IntoDescriptorKey<Legacy>>(pub K); impl<K: IntoDescriptorKey<Legacy>> DescriptorTemplate for P2Pkh<K> { - fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> { + fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> { descriptor!(pkh(self.0)) } } @@ -856,7 +856,7 @@ pub struct P2Wpkh_P2Sh<K: IntoDescriptorKey<Segwitv0>>(pub K); impl<K: IntoDescriptorKey<Segwitv0>> DescriptorTemplate for P2Wpkh_P2Sh<K> { - fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> { + fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> { descriptor!(sh(wpkh(self.0))) } } @@ -890,7 +890,7 @@ pub struct P2Wpkh<K: IntoDescriptorKey<Segwitv0>>(pub K); impl<K: IntoDescriptorKey<Segwitv0>> DescriptorTemplate for P2Wpkh<K> { - fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> { + fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> { descriptor!(wpkh(self.0)) } } @@ -926,7 +926,7 @@ pub struct Bip44<K: DerivableKey<Legacy>>(pub K, pub KeychainKind); impl<K: DerivableKey<Legacy>> DescriptorTemplate for Bip44<K> { - fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> { + fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> { P2Pkh(legacy::make_bipxx_private(44, self.0, self.1)?).build() } } @@ -966,7 +966,7 @@ pub struct Bip44Public<K: DerivableKey<Legacy>>(pub K, pub bip32::Fingerprint, pub KeychainKind); impl<K: DerivableKey<Legacy>> DescriptorTemplate for Bip44Public<K> { - fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> { + fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> { P2Pkh(legacy::make_bipxx_public(44, self.0, self.1, self.2)?).build() } } @@ -1002,7 +1002,7 @@ pub struct Bip49<K: DerivableKey<Segwitv0>>(pub K, pub KeychainKind); impl<K: DerivableKey<Segwitv0>> DescriptorTemplate for Bip49<K> { - fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> { + fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> { P2Wpkh_P2Sh(segwit_v0::make_bipxx_private(49, self.0, self.1)?).build() } } @@ -1042,7 +1042,7 @@ pub struct Bip49Public<K: DerivableKey<Segwitv0>>(pub K, pub bip32::Fingerprint, pub KeychainKind); impl<K: DerivableKey<Segwitv0>> DescriptorTemplate for Bip49Public<K> { - fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> { + fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> { P2Wpkh_P2Sh(segwit_v0::make_bipxx_public(49, self.0, self.1, self.2)?).build() } } @@ -1078,7 +1078,7 @@ pub struct Bip84<K: DerivableKey<Segwitv0>>(pub K, pub KeychainKind); impl<K: DerivableKey<Segwitv0>> DescriptorTemplate for Bip84<K> { - fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> { + fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> { P2Wpkh(segwit_v0::make_bipxx_private(84, self.0, self.1)?).build() } } @@ -1118,13 +1118,13 @@ pub struct Bip84Public<K: DerivableKey<Segwitv0>>(pub K, pub bip32::Fingerprint, pub KeychainKind); impl<K: DerivableKey<Segwitv0>> DescriptorTemplate for Bip84Public<K> { - fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> { + fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> { P2Wpkh(segwit_v0::make_bipxx_public(84, self.0, self.1, self.2)?).build() } } macro_rules! expand_make_bipxx { - ( $mod_name:ident, $ctx:ty ) => { + ( $mod_name:ident, $ctx:ty ) => { mod $mod_name { use super::*; @@ -1132,17 +1132,17 @@ bip: u32, key: K, keychain: KeychainKind, - ) -> Result<impl IntoDescriptorKey<$ctx>, DescriptorError> { + ) -> Result<impl IntoDescriptorKey<$ctx>, DescriptorError> { let mut derivation_path = Vec::with_capacity(4); derivation_path.push(bip32::ChildNumber::from_hardened_idx(bip)?); derivation_path.push(bip32::ChildNumber::from_hardened_idx(0)?); derivation_path.push(bip32::ChildNumber::from_hardened_idx(0)?); match keychain { - KeychainKind::External => { + KeychainKind::External => { derivation_path.push(bip32::ChildNumber::from_normal_idx(0)?) } - KeychainKind::Internal => { + KeychainKind::Internal => { derivation_path.push(bip32::ChildNumber::from_normal_idx(1)?) } }; @@ -1156,10 +1156,10 @@ key: K, parent_fingerprint: bip32::Fingerprint, keychain: KeychainKind, - ) -> Result<impl IntoDescriptorKey<$ctx>, DescriptorError> { + ) -> Result<impl IntoDescriptorKey<$ctx>, DescriptorError> { let derivation_path: bip32::DerivationPath = match keychain { - KeychainKind::External => vec![bip32::ChildNumber::from_normal_idx(0)?].into(), - KeychainKind::Internal => vec![bip32::ChildNumber::from_normal_idx(1)?].into(), + KeychainKind::External => vec![bip32::ChildNumber::from_normal_idx(0)?].into(), + KeychainKind::Internal => vec![bip32::ChildNumber::from_normal_idx(1)?].into(), }; let source_path = bip32::DerivationPath::from(vec![ diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/error.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/error.rs.html index d6c5f36fbc..f81d274cb6 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/error.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/error.rs.html @@ -374,7 +374,7 @@ } impl fmt::Display for Error { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{:?}", self) } } @@ -382,12 +382,12 @@ impl std::error::Error for Error {} macro_rules! impl_error { - ( $from:ty, $to:ident ) => { + ( $from:ty, $to:ident ) => { impl_error!($from, $to, Error); }; - ( $from:ty, $to:ident, $impl_for:ty ) => { + ( $from:ty, $to:ident, $impl_for:ty ) => { impl std::convert::From<$from> for $impl_for { - fn from(err: $from) -> Self { + fn from(err: $from) -> Self { <$impl_for>::$to(err) } } @@ -400,12 +400,12 @@ impl_error!(wallet::signer::SignerError, Signer); impl From<crate::keys::KeyError> for Error { - fn from(key_error: crate::keys::KeyError) -> Error { + fn from(key_error: crate::keys::KeyError) -> Error { match key_error { - crate::keys::KeyError::Miniscript(inner) => Error::Miniscript(inner), - crate::keys::KeyError::Bip32(inner) => Error::Bip32(inner), - crate::keys::KeyError::InvalidChecksum => Error::ChecksumMismatch, - e => Error::Key(e), + crate::keys::KeyError::Miniscript(inner) => Error::Miniscript(inner), + crate::keys::KeyError::Bip32(inner) => Error::Bip32(inner), + crate::keys::KeyError::InvalidChecksum => Error::ChecksumMismatch, + e => Error::Key(e), } } } @@ -430,27 +430,27 @@ #[cfg(feature = "compact_filters")] impl From<crate::blockchain::compact_filters::CompactFiltersError> for Error { - fn from(other: crate::blockchain::compact_filters::CompactFiltersError) -> Self { + fn from(other: crate::blockchain::compact_filters::CompactFiltersError) -> Self { match other { - crate::blockchain::compact_filters::CompactFiltersError::Global(e) => *e, - err => Error::CompactFilters(err), + crate::blockchain::compact_filters::CompactFiltersError::Global(e) => *e, + err => Error::CompactFilters(err), } } } #[cfg(feature = "verify")] impl From<crate::wallet::verify::VerifyError> for Error { - fn from(other: crate::wallet::verify::VerifyError) -> Self { + fn from(other: crate::wallet::verify::VerifyError) -> Self { match other { - crate::wallet::verify::VerifyError::Global(inner) => *inner, - err => Error::Verification(err), + crate::wallet::verify::VerifyError::Global(inner) => *inner, + err => Error::Verification(err), } } } #[cfg(feature = "esplora")] impl From<crate::blockchain::esplora::EsploraError> for Error { - fn from(other: crate::blockchain::esplora::EsploraError) -> Self { + fn from(other: crate::blockchain::esplora::EsploraError) -> Self { Error::Esplora(Box::new(other)) } } diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/keys/bip39.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/keys/bip39.rs.html index 3cf8935dbd..f82aac2a5d 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/keys/bip39.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/keys/bip39.rs.html @@ -217,7 +217,7 @@ fn set_valid_on_any_network<Ctx: ScriptContext>( descriptor_key: DescriptorKey<Ctx>, -) -> DescriptorKey<Ctx> { +) -> DescriptorKey<Ctx> { // We have to pick one network to build the xprv, but since the bip39 standard doesn't // encode the network, the xprv we create is actually valid everywhere. So we override the // valid networks with `any_network()`. @@ -229,7 +229,7 @@ #[cfg_attr(docsrs, doc(cfg(feature = "keys-bip39")))] impl<Ctx: ScriptContext> DerivableKey<Ctx> for Seed { - fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { + fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { Ok(bip32::ExtendedPrivKey::new_master(Network::Bitcoin, &self.as_bytes())?.into()) } @@ -237,7 +237,7 @@ self, source: Option<bip32::KeySource>, derivation_path: bip32::DerivationPath, - ) -> Result<DescriptorKey<Ctx>, KeyError> { + ) -> Result<DescriptorKey<Ctx>, KeyError> { let descriptor_key = self .into_extended_key()? .into_descriptor_key(source, derivation_path)?; @@ -248,7 +248,7 @@ #[cfg_attr(docsrs, doc(cfg(feature = "keys-bip39")))] impl<Ctx: ScriptContext> DerivableKey<Ctx> for MnemonicWithPassphrase { - fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { + fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { let (mnemonic, passphrase) = self; let seed = Seed::new(&mnemonic, passphrase.as_deref().unwrap_or("")); @@ -259,7 +259,7 @@ self, source: Option<bip32::KeySource>, derivation_path: bip32::DerivationPath, - ) -> Result<DescriptorKey<Ctx>, KeyError> { + ) -> Result<DescriptorKey<Ctx>, KeyError> { let descriptor_key = self .into_extended_key()? .into_descriptor_key(source, derivation_path)?; @@ -270,7 +270,7 @@ #[cfg_attr(docsrs, doc(cfg(feature = "keys-bip39")))] impl<Ctx: ScriptContext> DerivableKey<Ctx> for Mnemonic { - fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { + fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { (self, None).into_extended_key() } @@ -278,7 +278,7 @@ self, source: Option<bip32::KeySource>, derivation_path: bip32::DerivationPath, - ) -> Result<DescriptorKey<Ctx>, KeyError> { + ) -> Result<DescriptorKey<Ctx>, KeyError> { let descriptor_key = self .into_extended_key()? .into_descriptor_key(source, derivation_path)?; @@ -297,7 +297,7 @@ fn generate_with_entropy( (mnemonic_type, language): Self::Options, entropy: Self::Entropy, - ) -> Result<GeneratedKey<Self, Ctx>, Self::Error> { + ) -> Result<GeneratedKey<Self, Ctx>, Self::Error> { let entropy = &entropy.as_ref()[..(mnemonic_type.entropy_bits() / 8)]; let mnemonic = Mnemonic::from_entropy(entropy, language).map_err(|e| e.downcast().ok())?; diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/keys/mod.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/keys/mod.rs.html index 7dc8e48126..45ec279443 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/keys/mod.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/keys/mod.rs.html @@ -975,7 +975,7 @@ pub type ValidNetworks = HashSet<Network>; /// Create a set containing mainnet, testnet and regtest -pub fn any_network() -> ValidNetworks { +pub fn any_network() -> ValidNetworks { vec![ Network::Bitcoin, Network::Testnet, @@ -986,17 +986,17 @@ .collect() } /// Create a set only containing mainnet -pub fn mainnet_network() -> ValidNetworks { +pub fn mainnet_network() -> ValidNetworks { vec![Network::Bitcoin].into_iter().collect() } /// Create a set containing testnet and regtest -pub fn test_networks() -> ValidNetworks { +pub fn test_networks() -> ValidNetworks { vec![Network::Testnet, Network::Regtest, Network::Signet] .into_iter() .collect() } /// Compute the intersection of two sets -pub fn merge_networks(a: &ValidNetworks, b: &ValidNetworks) -> ValidNetworks { +pub fn merge_networks(a: &ValidNetworks, b: &ValidNetworks) -> ValidNetworks { a.intersection(b).cloned().collect() } @@ -1011,20 +1011,20 @@ impl<Ctx: ScriptContext> DescriptorKey<Ctx> { /// Create an instance given a public key and a set of valid networks - pub fn from_public(public: DescriptorPublicKey, networks: ValidNetworks) -> Self { + pub fn from_public(public: DescriptorPublicKey, networks: ValidNetworks) -> Self { DescriptorKey::Public(public, networks, PhantomData) } /// Create an instance given a secret key and a set of valid networks - pub fn from_secret(secret: DescriptorSecretKey, networks: ValidNetworks) -> Self { + pub fn from_secret(secret: DescriptorSecretKey, networks: ValidNetworks) -> Self { DescriptorKey::Secret(secret, networks, PhantomData) } /// Override the computed set of valid networks - pub fn override_valid_networks(self, networks: ValidNetworks) -> Self { + pub fn override_valid_networks(self, networks: ValidNetworks) -> Self { match self { - DescriptorKey::Public(key, _, _) => DescriptorKey::Public(key, networks, PhantomData), - DescriptorKey::Secret(key, _, _) => DescriptorKey::Secret(key, networks, PhantomData), + DescriptorKey::Public(key, _, _) => DescriptorKey::Public(key, networks, PhantomData), + DescriptorKey::Secret(key, _, _) => DescriptorKey::Secret(key, networks, PhantomData), } } @@ -1035,12 +1035,12 @@ pub fn extract( self, secp: &SecpCtx, - ) -> Result<(DescriptorPublicKey, KeyMap, ValidNetworks), KeyError> { + ) -> Result<(DescriptorPublicKey, KeyMap, ValidNetworks), KeyError> { match self { - DescriptorKey::Public(public, valid_networks, _) => { + DescriptorKey::Public(public, valid_networks, _) => { Ok((public, KeyMap::default(), valid_networks)) } - DescriptorKey::Secret(secret, valid_networks, _) => { + DescriptorKey::Secret(secret, valid_networks, _) => { let mut key_map = KeyMap::with_capacity(1); let public = secret @@ -1065,38 +1065,38 @@ impl ScriptContextEnum { /// Returns whether the script context is [`ScriptContextEnum::Legacy`] - pub fn is_legacy(&self) -> bool { - self == &ScriptContextEnum::Legacy + pub fn is_legacy(&self) -> bool { + self == &ScriptContextEnum::Legacy } /// Returns whether the script context is [`ScriptContextEnum::Segwitv0`] - pub fn is_segwit_v0(&self) -> bool { - self == &ScriptContextEnum::Segwitv0 + pub fn is_segwit_v0(&self) -> bool { + self == &ScriptContextEnum::Segwitv0 } } /// Trait that adds extra useful methods to [`ScriptContext`]s pub trait ExtScriptContext: ScriptContext { /// Returns the [`ScriptContext`] as a [`ScriptContextEnum`] - fn as_enum() -> ScriptContextEnum; + fn as_enum() -> ScriptContextEnum; /// Returns whether the script context is [`Legacy`](miniscript::Legacy) - fn is_legacy() -> bool { + fn is_legacy() -> bool { Self::as_enum().is_legacy() } /// Returns whether the script context is [`Segwitv0`](miniscript::Segwitv0) - fn is_segwit_v0() -> bool { + fn is_segwit_v0() -> bool { Self::as_enum().is_segwit_v0() } } impl<Ctx: ScriptContext + 'static> ExtScriptContext for Ctx { - fn as_enum() -> ScriptContextEnum { + fn as_enum() -> ScriptContextEnum { match TypeId::of::<Ctx>() { - t if t == TypeId::of::<miniscript::Legacy>() => ScriptContextEnum::Legacy, - t if t == TypeId::of::<miniscript::Segwitv0>() => ScriptContextEnum::Segwitv0, - _ => unimplemented!("Unknown ScriptContext type"), + t if t == TypeId::of::<miniscript::Legacy>() => ScriptContextEnum::Legacy, + t if t == TypeId::of::<miniscript::Segwitv0>() => ScriptContextEnum::Segwitv0, + _ => unimplemented!("Unknown ScriptContext type"), } } } @@ -1222,7 +1222,7 @@ /// ``` pub trait IntoDescriptorKey<Ctx: ScriptContext>: Sized { /// Turn the key into a [`DescriptorKey`] within the requested [`ScriptContext`] - fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError>; + fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError>; } /// Enum for extended keys that can be either `xprv` or `xpub` @@ -1240,22 +1240,22 @@ impl<Ctx: ScriptContext> ExtendedKey<Ctx> { /// Return whether or not the key contains the private data - pub fn has_secret(&self) -> bool { + pub fn has_secret(&self) -> bool { match self { - ExtendedKey::Private(_) => true, - ExtendedKey::Public(_) => false, + ExtendedKey::Private(_) => true, + ExtendedKey::Public(_) => false, } } /// Transform the [`ExtendedKey`] into an [`ExtendedPrivKey`](bip32::ExtendedPrivKey) for the /// given [`Network`], if the key contains the private data - pub fn into_xprv(self, network: Network) -> Option<bip32::ExtendedPrivKey> { + pub fn into_xprv(self, network: Network) -> Option<bip32::ExtendedPrivKey> { match self { - ExtendedKey::Private((mut xprv, _)) => { + ExtendedKey::Private((mut xprv, _)) => { xprv.network = network; Some(xprv) } - ExtendedKey::Public(_) => None, + ExtendedKey::Public(_) => None, } } @@ -1265,10 +1265,10 @@ self, network: bitcoin::Network, secp: &Secp256k1<C>, - ) -> bip32::ExtendedPubKey { + ) -> bip32::ExtendedPubKey { let mut xpub = match self { - ExtendedKey::Private((xprv, _)) => bip32::ExtendedPubKey::from_private(secp, &xprv), - ExtendedKey::Public((xpub, _)) => xpub, + ExtendedKey::Private((xprv, _)) => bip32::ExtendedPubKey::from_private(secp, &xprv), + ExtendedKey::Public((xpub, _)) => xpub, }; xpub.network = network; @@ -1277,13 +1277,13 @@ } impl<Ctx: ScriptContext> From<bip32::ExtendedPubKey> for ExtendedKey<Ctx> { - fn from(xpub: bip32::ExtendedPubKey) -> Self { + fn from(xpub: bip32::ExtendedPubKey) -> Self { ExtendedKey::Public((xpub, PhantomData)) } } impl<Ctx: ScriptContext> From<bip32::ExtendedPrivKey> for ExtendedKey<Ctx> { - fn from(xprv: bip32::ExtendedPrivKey) -> Self { + fn from(xprv: bip32::ExtendedPrivKey) -> Self { ExtendedKey::Private((xprv, PhantomData)) } } @@ -1404,7 +1404,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); ``` "## )] - fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError>; + fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError>; /// Consume `self` and turn it into a [`DescriptorKey`] by adding the extra metadata, such as /// key origin and derivation path @@ -1412,16 +1412,16 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); self, origin: Option<bip32::KeySource>, derivation_path: bip32::DerivationPath, - ) -> Result<DescriptorKey<Ctx>, KeyError> { + ) -> Result<DescriptorKey<Ctx>, KeyError> { match self.into_extended_key()? { - ExtendedKey::Private((xprv, _)) => DescriptorSecretKey::XPrv(DescriptorXKey { + ExtendedKey::Private((xprv, _)) => DescriptorSecretKey::XPrv(DescriptorXKey { origin, xkey: xprv, derivation_path, wildcard: Wildcard::Unhardened, }) .into_descriptor_key(), - ExtendedKey::Public((xpub, _)) => DescriptorPublicKey::XPub(DescriptorXKey { + ExtendedKey::Public((xpub, _)) => DescriptorPublicKey::XPub(DescriptorXKey { origin, xkey: xpub, derivation_path, @@ -1434,19 +1434,19 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); /// Identity conversion impl<Ctx: ScriptContext> DerivableKey<Ctx> for ExtendedKey<Ctx> { - fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { + fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { Ok(self) } } impl<Ctx: ScriptContext> DerivableKey<Ctx> for bip32::ExtendedPubKey { - fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { + fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { Ok(self.into()) } } impl<Ctx: ScriptContext> DerivableKey<Ctx> for bip32::ExtendedPrivKey { - fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { + fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { Ok(self.into()) } } @@ -1459,7 +1459,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); } impl<K, Ctx: ScriptContext> GeneratedKey<K, Ctx> { - fn new(key: K, valid_networks: ValidNetworks) -> Self { + fn new(key: K, valid_networks: ValidNetworks) -> Self { GeneratedKey { key, valid_networks, @@ -1468,7 +1468,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); } /// Consumes `self` and returns the key - pub fn into_key(self) -> K { + pub fn into_key(self) -> K { self.key } } @@ -1476,7 +1476,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); impl<K, Ctx: ScriptContext> Deref for GeneratedKey<K, Ctx> { type Target = K; - fn deref(&self) -> &Self::Target { + fn deref(&self) -> &Self::Target { &self.key } } @@ -1488,7 +1488,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); Ctx: ScriptContext, K: DerivableKey<Ctx>, { - fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { + fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { self.key.into_extended_key() } @@ -1496,7 +1496,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); self, origin: Option<bip32::KeySource>, derivation_path: bip32::DerivationPath, - ) -> Result<DescriptorKey<Ctx>, KeyError> { + ) -> Result<DescriptorKey<Ctx>, KeyError> { let descriptor_key = self.key.into_descriptor_key(origin, derivation_path)?; Ok(descriptor_key.override_valid_networks(self.valid_networks)) } @@ -1509,7 +1509,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); Ctx: ScriptContext, K: IntoDescriptorKey<Ctx>, { - fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { + fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { let desc_key = self.key.into_descriptor_key()?; Ok(desc_key.override_valid_networks(self.valid_networks)) } @@ -1536,10 +1536,10 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); fn generate_with_entropy( options: Self::Options, entropy: Self::Entropy, - ) -> Result<GeneratedKey<Self, Ctx>, Self::Error>; + ) -> Result<GeneratedKey<Self, Ctx>, Self::Error>; /// Generate a key given the options with a random entropy - fn generate(options: Self::Options) -> Result<GeneratedKey<Self, Ctx>, Self::Error> { + fn generate(options: Self::Options) -> Result<GeneratedKey<Self, Ctx>, Self::Error> { use rand::{thread_rng, Rng}; let mut entropy = Self::Entropy::default(); @@ -1559,12 +1559,12 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); /// Generate a key with the default options and a given entropy fn generate_with_entropy_default( entropy: Self::Entropy, - ) -> Result<GeneratedKey<Self, Ctx>, Self::Error> { + ) -> Result<GeneratedKey<Self, Ctx>, Self::Error> { Self::generate_with_entropy(Default::default(), entropy) } /// Generate a key with the default options and a random entropy - fn generate_default() -> Result<GeneratedKey<Self, Ctx>, Self::Error> { + fn generate_default() -> Result<GeneratedKey<Self, Ctx>, Self::Error> { Self::generate(Default::default()) } } @@ -1588,7 +1588,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); fn generate_with_entropy( _: Self::Options, entropy: Self::Entropy, - ) -> Result<GeneratedKey<Self, Ctx>, Self::Error> { + ) -> Result<GeneratedKey<Self, Ctx>, Self::Error> { // pick a arbitrary network here, but say that we support all of them let xprv = bip32::ExtendedPrivKey::new_master(Network::Bitcoin, entropy.as_ref())?; Ok(GeneratedKey::new(xprv, any_network())) @@ -1605,7 +1605,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); } impl Default for PrivateKeyGenerateOptions { - fn default() -> Self { + fn default() -> Self { PrivateKeyGenerateOptions { compressed: true } } } @@ -1619,7 +1619,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); fn generate_with_entropy( options: Self::Options, entropy: Self::Entropy, - ) -> Result<GeneratedKey<Self, Ctx>, Self::Error> { + ) -> Result<GeneratedKey<Self, Ctx>, Self::Error> { // pick a arbitrary network here, but say that we support all of them let key = secp256k1::SecretKey::from_slice(&entropy)?; let private_key = PrivateKey { @@ -1635,7 +1635,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); impl<Ctx: ScriptContext, T: DerivableKey<Ctx>> IntoDescriptorKey<Ctx> for (T, bip32::DerivationPath) { - fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { + fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { self.0.into_descriptor_key(None, self.1) } } @@ -1643,7 +1643,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); impl<Ctx: ScriptContext, T: DerivableKey<Ctx>> IntoDescriptorKey<Ctx> for (T, bip32::KeySource, bip32::DerivationPath) { - fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { + fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { self.0.into_descriptor_key(Some(self.1), self.2) } } @@ -1651,7 +1651,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); fn expand_multi_keys<Pk: IntoDescriptorKey<Ctx>, Ctx: ScriptContext>( pks: Vec<Pk>, secp: &SecpCtx, -) -> Result<(Vec<DescriptorPublicKey>, KeyMap, ValidNetworks), KeyError> { +) -> Result<(Vec<DescriptorPublicKey>, KeyMap, ValidNetworks), KeyError> { let (pks, key_maps_networks): (Vec<_>, Vec<_>) = pks .into_iter() .map(|key| key.into_descriptor_key()?.extract(secp)) @@ -1678,7 +1678,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); pub fn make_pk<Pk: IntoDescriptorKey<Ctx>, Ctx: ScriptContext>( descriptor_key: Pk, secp: &SecpCtx, -) -> Result<(Miniscript<DescriptorPublicKey, Ctx>, KeyMap, ValidNetworks), DescriptorError> { +) -> Result<(Miniscript<DescriptorPublicKey, Ctx>, KeyMap, ValidNetworks), DescriptorError> { let (key, key_map, valid_networks) = descriptor_key.into_descriptor_key()?.extract(secp)?; let minisc = Miniscript::from_ast(Terminal::PkK(key))?; @@ -1692,7 +1692,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); pub fn make_pkh<Pk: IntoDescriptorKey<Ctx>, Ctx: ScriptContext>( descriptor_key: Pk, secp: &SecpCtx, -) -> Result<(Miniscript<DescriptorPublicKey, Ctx>, KeyMap, ValidNetworks), DescriptorError> { +) -> Result<(Miniscript<DescriptorPublicKey, Ctx>, KeyMap, ValidNetworks), DescriptorError> { let (key, key_map, valid_networks) = descriptor_key.into_descriptor_key()?.extract(secp)?; let minisc = Miniscript::from_ast(Terminal::PkH(key))?; @@ -1707,7 +1707,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); thresh: usize, pks: Vec<Pk>, secp: &SecpCtx, -) -> Result<(Miniscript<DescriptorPublicKey, Ctx>, KeyMap, ValidNetworks), DescriptorError> { +) -> Result<(Miniscript<DescriptorPublicKey, Ctx>, KeyMap, ValidNetworks), DescriptorError> { let (pks, key_map, valid_networks) = expand_multi_keys(pks, secp)?; let minisc = Miniscript::from_ast(Terminal::Multi(thresh, pks))?; @@ -1723,14 +1723,14 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); pks: Vec<Pk>, build_desc: F, secp: &SecpCtx, -) -> Result<(Descriptor<DescriptorPublicKey>, KeyMap, ValidNetworks), DescriptorError> +) -> Result<(Descriptor<DescriptorPublicKey>, KeyMap, ValidNetworks), DescriptorError> where Pk: IntoDescriptorKey<Ctx>, Ctx: ScriptContext, F: Fn( usize, Vec<DescriptorPublicKey>, - ) -> Result<(Descriptor<DescriptorPublicKey>, PhantomData<Ctx>), DescriptorError>, + ) -> Result<(Descriptor<DescriptorPublicKey>, PhantomData<Ctx>), DescriptorError>, { let (pks, key_map, valid_networks) = expand_multi_keys(pks, secp)?; let descriptor = build_desc(thresh, pks)?.0; @@ -1740,21 +1740,21 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); /// The "identity" conversion is used internally by some `bdk::fragment`s impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for DescriptorKey<Ctx> { - fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { + fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { Ok(self) } } impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for DescriptorPublicKey { - fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { + fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { let networks = match self { - DescriptorPublicKey::SinglePub(_) => any_network(), + DescriptorPublicKey::SinglePub(_) => any_network(), DescriptorPublicKey::XPub(DescriptorXKey { xkey, .. }) - if xkey.network == Network::Bitcoin => + if xkey.network == Network::Bitcoin => { mainnet_network() } - _ => test_networks(), + _ => test_networks(), }; Ok(DescriptorKey::from_public(self, networks)) @@ -1762,7 +1762,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); } impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for PublicKey { - fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { + fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { DescriptorPublicKey::SinglePub(DescriptorSinglePub { key: self, origin: None, @@ -1772,17 +1772,17 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); } impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for DescriptorSecretKey { - fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { + fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { let networks = match &self { - DescriptorSecretKey::SinglePriv(sk) if sk.key.network == Network::Bitcoin => { + DescriptorSecretKey::SinglePriv(sk) if sk.key.network == Network::Bitcoin => { mainnet_network() } DescriptorSecretKey::XPrv(DescriptorXKey { xkey, .. }) - if xkey.network == Network::Bitcoin => + if xkey.network == Network::Bitcoin => { mainnet_network() } - _ => test_networks(), + _ => test_networks(), }; Ok(DescriptorKey::from_secret(self, networks)) @@ -1790,7 +1790,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); } impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for &'_ str { - fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { + fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { DescriptorSecretKey::from_str(self) .map_err(|e| KeyError::Message(e.to_string()))? .into_descriptor_key() @@ -1798,7 +1798,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); } impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for PrivateKey { - fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { + fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { DescriptorSecretKey::SinglePriv(DescriptorSinglePriv { key: self, origin: None, @@ -1830,7 +1830,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap(); impl_error!(bitcoin::util::bip32::Error, Bip32, KeyError); impl std::fmt::Display for KeyError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{:?}", self) } } diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/lib.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/lib.rs.html index 52c94a3205..a81a13adf5 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/lib.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/lib.rs.html @@ -554,7 +554,7 @@ fn main() -> Result<(), bdk::Error> { pub use wallet::Wallet; /// Get the version of BDK at runtime -pub fn version() -> &'static str { +pub fn version() -> &'static str { env!("CARGO_PKG_VERSION", "unknown") } diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/psbt/mod.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/psbt/mod.rs.html index ca046b7b88..7e0ee73d13 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/psbt/mod.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/psbt/mod.rs.html @@ -135,12 +135,12 @@ use bitcoin::TxOut; pub trait PsbtUtils { - fn get_utxo_for(&self, input_index: usize) -> Option<TxOut>; + fn get_utxo_for(&self, input_index: usize) -> Option<TxOut>; } impl PsbtUtils for Psbt { #[allow(clippy::all)] // We want to allow `manual_map` but it is too new. - fn get_utxo_for(&self, input_index: usize) -> Option<TxOut> { + fn get_utxo_for(&self, input_index: usize) -> Option<TxOut> { let tx = &self.global.unsigned_tx; if input_index >= tx.input.len() { diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/testutils/mod.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/testutils/mod.rs.html index a673857c4e..56a964fb2f 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/testutils/mod.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/testutils/mod.rs.html @@ -258,7 +258,7 @@ } impl TestIncomingOutput { - pub fn new(value: u64, to_address: Address) -> Self { + pub fn new(value: u64, to_address: Address) -> Self { Self { value, to_address: to_address.to_string(), @@ -280,7 +280,7 @@ min_confirmations: Option<u64>, locktime: Option<i64>, replaceable: Option<bool>, - ) -> Self { + ) -> Self { Self { output, min_confirmations, @@ -301,7 +301,7 @@ &self, secp: &Secp256k1<C>, index: u32, - ) -> Descriptor<PublicKey>; + ) -> Descriptor<PublicKey>; } impl TranslateDescriptor for Descriptor<DescriptorPublicKey> { @@ -309,16 +309,16 @@ &self, secp: &Secp256k1<C>, index: u32, - ) -> Descriptor<PublicKey> { - let translate = |key: &DescriptorPublicKey| -> PublicKey { + ) -> Descriptor<PublicKey> { + let translate = |key: &DescriptorPublicKey| -> PublicKey { match key { - DescriptorPublicKey::XPub(xpub) => { + DescriptorPublicKey::XPub(xpub) => { xpub.xkey .derive_pub(secp, &xpub.derivation_path) .expect("hardened derivation steps") .public_key } - DescriptorPublicKey::SinglePub(key) => key.key, + DescriptorPublicKey::SinglePub(key) => key.key, } }; @@ -330,7 +330,7 @@ #[doc(hidden)] #[macro_export] macro_rules! testutils { - ( @external $descriptors:expr, $child:expr ) => ({ + ( @external $descriptors:expr, $child:expr ) => ({ use $crate::bitcoin::secp256k1::Secp256k1; use $crate::miniscript::descriptor::{Descriptor, DescriptorPublicKey, DescriptorTrait}; @@ -341,7 +341,7 @@ let parsed = Descriptor::<DescriptorPublicKey>::parse_descriptor(&secp, &$descriptors.0).expect("Failed to parse descriptor in `testutils!(@external)`").0; parsed.derive_translated(&secp, $child).address(bitcoin::Network::Regtest).expect("No address form") }); - ( @internal $descriptors:expr, $child:expr ) => ({ + ( @internal $descriptors:expr, $child:expr ) => ({ use $crate::bitcoin::secp256k1::Secp256k1; use $crate::miniscript::descriptor::{Descriptor, DescriptorPublicKey, DescriptorTrait}; @@ -352,10 +352,10 @@ let parsed = Descriptor::<DescriptorPublicKey>::parse_descriptor(&secp, &$descriptors.1.expect("Missing internal descriptor")).expect("Failed to parse descriptor in `testutils!(@internal)`").0; parsed.derive_translated(&secp, $child).address($crate::bitcoin::Network::Regtest).expect("No address form") }); - ( @e $descriptors:expr, $child:expr ) => ({ testutils!(@external $descriptors, $child) }); - ( @i $descriptors:expr, $child:expr ) => ({ testutils!(@internal $descriptors, $child) }); + ( @e $descriptors:expr, $child:expr ) => ({ testutils!(@external $descriptors, $child) }); + ( @i $descriptors:expr, $child:expr ) => ({ testutils!(@internal $descriptors, $child) }); - ( @tx ( $( ( $( $addr:tt )* ) => $amount:expr ),+ ) $( ( @locktime $locktime:expr ) )? $( ( @confirmations $confirmations:expr ) )? $( ( @replaceable $replaceable:expr ) )? ) => ({ + ( @tx ( $( ( $( $addr:tt )* ) => $amount:expr ),+ ) $( ( @locktime $locktime:expr ) )? $( ( @confirmations $confirmations:expr ) )? $( ( @replaceable $replaceable:expr ) )? ) => ({ let outs = vec![$( $crate::testutils::TestIncomingOutput::new($amount, testutils!( $($addr)* ))),+]; let locktime = None::<i64>$(.or(Some($locktime)))?; @@ -366,11 +366,11 @@ $crate::testutils::TestIncomingTx::new(outs, min_confirmations, locktime, replaceable) }); - ( @literal $key:expr ) => ({ + ( @literal $key:expr ) => ({ let key = $key.to_string(); (key, None::<String>, None::<String>) }); - ( @generate_xprv $( $external_path:expr )? $( ,$internal_path:expr )? ) => ({ + ( @generate_xprv $( $external_path:expr )? $( ,$internal_path:expr )? ) => ({ use rand::Rng; let mut seed = [0u8; 32]; @@ -386,7 +386,7 @@ (key.unwrap().to_string(), external_path, internal_path) }); - ( @generate_wif ) => ({ + ( @generate_wif ) => ({ use rand::Rng; let mut key = [0u8; $crate::bitcoin::secp256k1::constants::SECRET_KEY_SIZE]; @@ -399,7 +399,7 @@ }.to_string(), None::<String>, None::<String>) }); - ( @keys ( $( $alias:expr => ( $( $key_type:tt )* ) ),+ ) ) => ({ + ( @keys ( $( $alias:expr => ( $( $key_type:tt )* ) ),+ ) ) => ({ let mut map = std::collections::HashMap::new(); $( let alias: &str = $alias; @@ -409,7 +409,7 @@ map }); - ( @descriptors ( $external_descriptor:expr ) $( ( $internal_descriptor:expr ) )? $( ( @keys $( $keys:tt )* ) )* ) => ({ + ( @descriptors ( $external_descriptor:expr ) $( ( $internal_descriptor:expr ) )? $( ( @keys $( $keys:tt )* ) )* ) => ({ use std::str::FromStr; use std::collections::HashMap; use $crate::miniscript::descriptor::Descriptor; diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/types.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/types.rs.html index a5f9e76a88..1126390779 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/types.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/types.rs.html @@ -281,19 +281,19 @@ impl KeychainKind { /// Return [`KeychainKind`] as a byte - pub fn as_byte(&self) -> u8 { + pub fn as_byte(&self) -> u8 { match self { - KeychainKind::External => b'e', - KeychainKind::Internal => b'i', + KeychainKind::External => b'e', + KeychainKind::Internal => b'i', } } } impl AsRef<[u8]> for KeychainKind { - fn as_ref(&self) -> &[u8] { + fn as_ref(&self) -> &[u8] { match self { - KeychainKind::External => b"e", - KeychainKind::Internal => b"i", + KeychainKind::External => b"e", + KeychainKind::Internal => b"i", } } } @@ -305,49 +305,49 @@ impl FeeRate { /// Create a new instance of [`FeeRate`] given a float fee rate in btc/kvbytes - pub fn from_btc_per_kvb(btc_per_kvb: f32) -> Self { + pub fn from_btc_per_kvb(btc_per_kvb: f32) -> Self { FeeRate(btc_per_kvb * 1e5) } /// Create a new instance of [`FeeRate`] given a float fee rate in satoshi/vbyte - pub const fn from_sat_per_vb(sat_per_vb: f32) -> Self { + pub const fn from_sat_per_vb(sat_per_vb: f32) -> Self { FeeRate(sat_per_vb) } /// Create a new [`FeeRate`] with the default min relay fee value - pub const fn default_min_relay_fee() -> Self { + pub const fn default_min_relay_fee() -> Self { FeeRate(1.0) } /// Calculate fee rate from `fee` and weight units (`wu`). - pub fn from_wu(fee: u64, wu: usize) -> FeeRate { + pub fn from_wu(fee: u64, wu: usize) -> FeeRate { Self::from_vb(fee, wu.vbytes()) } /// Calculate fee rate from `fee` and `vbytes`. - pub fn from_vb(fee: u64, vbytes: usize) -> FeeRate { + pub fn from_vb(fee: u64, vbytes: usize) -> FeeRate { let rate = fee as f32 / vbytes as f32; Self::from_sat_per_vb(rate) } /// Return the value as satoshi/vbyte - pub fn as_sat_vb(&self) -> f32 { + pub fn as_sat_vb(&self) -> f32 { self.0 } /// Calculate absolute fee in Satoshis using size in weight units. - pub fn fee_wu(&self, wu: usize) -> u64 { + pub fn fee_wu(&self, wu: usize) -> u64 { self.fee_vb(wu.vbytes()) } /// Calculate absolute fee in Satoshis using size in virtual bytes. - pub fn fee_vb(&self, vbytes: usize) -> u64 { + pub fn fee_vb(&self, vbytes: usize) -> u64 { (self.as_sat_vb() * vbytes as f32).ceil() as u64 } } impl std::default::Default for FeeRate { - fn default() -> Self { + fn default() -> Self { FeeRate::default_min_relay_fee() } } @@ -355,7 +355,7 @@ impl Sub for FeeRate { type Output = Self; - fn sub(self, other: FeeRate) -> Self::Output { + fn sub(self, other: FeeRate) -> Self::Output { FeeRate(self.0 - other.0) } } @@ -363,11 +363,11 @@ /// Trait implemented by types that can be used to measure weight units. pub trait Vbytes { /// Convert weight units to virtual bytes. - fn vbytes(self) -> usize; + fn vbytes(self) -> usize; } impl Vbytes for usize { - fn vbytes(self) -> usize { + fn vbytes(self) -> usize { // ref: https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#transaction-size-calculations (self as f32 / 4.0).ceil() as usize } @@ -415,21 +415,21 @@ impl Utxo { /// Get the location of the UTXO - pub fn outpoint(&self) -> OutPoint { + pub fn outpoint(&self) -> OutPoint { match &self { - Utxo::Local(local) => local.outpoint, - Utxo::Foreign { outpoint, .. } => *outpoint, + Utxo::Local(local) => local.outpoint, + Utxo::Foreign { outpoint, .. } => *outpoint, } } /// Get the `TxOut` of the UTXO - pub fn txout(&self) -> &TxOut { + pub fn txout(&self) -> &TxOut { match &self { - Utxo::Local(local) => &local.txout, + Utxo::Local(local) => &local.txout, Utxo::Foreign { outpoint, psbt_input, - } => { + } => { if let Some(prev_tx) = &psbt_input.non_witness_utxo { return &prev_tx.output[outpoint.vout as usize]; } @@ -486,10 +486,10 @@ impl ConfirmationTime { /// Returns `Some` `ConfirmationTime` if both `height` and `timestamp` are `Some` - pub fn new(height: Option<u32>, timestamp: Option<u64>) -> Option<Self> { + pub fn new(height: Option<u32>, timestamp: Option<u64>) -> Option<Self> { match (height, timestamp) { - (Some(height), Some(timestamp)) => Some(ConfirmationTime { height, timestamp }), - _ => None, + (Some(height), Some(timestamp)) => Some(ConfirmationTime { height, timestamp }), + _ => None, } } } diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/address_validator.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/address_validator.rs.html index b4b1b942ac..af4fee9f62 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/address_validator.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/address_validator.rs.html @@ -240,7 +240,7 @@ } impl fmt::Display for AddressValidatorError { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{:?}", self) } } @@ -261,7 +261,7 @@ keychain: KeychainKind, hd_keypaths: &HdKeyPaths, script: &Script, - ) -> Result<(), AddressValidatorError>; + ) -> Result<(), AddressValidatorError>; } #[cfg(test)] @@ -280,7 +280,7 @@ _keychain: KeychainKind, _hd_keypaths: &HdKeyPaths, _script: &bitcoin::Script, - ) -> Result<(), AddressValidatorError> { + ) -> Result<(), AddressValidatorError> { Err(AddressValidatorError::InvalidScript) } } diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/coin_selection.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/coin_selection.rs.html index dc5c9f14b7..f004eeaee9 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/coin_selection.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/coin_selection.rs.html @@ -1180,17 +1180,17 @@ impl CoinSelectionResult { /// The total value of the inputs selected. - pub fn selected_amount(&self) -> u64 { + pub fn selected_amount(&self) -> u64 { self.selected.iter().map(|u| u.txout().value).sum() } /// The total value of the inputs selected from the local wallet. - pub fn local_selected_amount(&self) -> u64 { + pub fn local_selected_amount(&self) -> u64 { self.selected .iter() .filter_map(|u| match u { - Utxo::Local(_) => Some(u.txout().value), - _ => None, + Utxo::Local(_) => Some(u.txout().value), + _ => None, }) .sum() } @@ -1223,7 +1223,7 @@ fee_rate: FeeRate, amount_needed: u64, fee_amount: u64, - ) -> Result<CoinSelectionResult, Error>; + ) -> Result<CoinSelectionResult, Error>; } /// Simple and dumb coin selection @@ -1242,7 +1242,7 @@ fee_rate: FeeRate, amount_needed: u64, mut fee_amount: u64, - ) -> Result<CoinSelectionResult, Error> { + ) -> Result<CoinSelectionResult, Error> { log::debug!( "amount_needed = `{}`, fee_amount = `{}`, fee_rate = `{:?}`", amount_needed, @@ -1312,7 +1312,7 @@ } impl OutputGroup { - fn new(weighted_utxo: WeightedUtxo, fee_rate: FeeRate) -> Self { + fn new(weighted_utxo: WeightedUtxo, fee_rate: FeeRate) -> Self { let fee = fee_rate.fee_wu(TXIN_BASE_WEIGHT + weighted_utxo.satisfaction_weight); let effective_value = weighted_utxo.utxo.txout().value as i64 - fee as i64; OutputGroup { @@ -1332,7 +1332,7 @@ } impl Default for BranchAndBoundCoinSelection { - fn default() -> Self { + fn default() -> Self { Self { // P2WPKH cost of change -> value (8 bytes) + script len (1 bytes) + script (22 bytes) size_of_change: 8 + 1 + 22, @@ -1342,7 +1342,7 @@ impl BranchAndBoundCoinSelection { /// Create new instance with target size for change output - pub fn new(size_of_change: u64) -> Self { + pub fn new(size_of_change: u64) -> Self { Self { size_of_change } } } @@ -1358,7 +1358,7 @@ fee_rate: FeeRate, amount_needed: u64, fee_amount: u64, - ) -> Result<CoinSelectionResult, Error> { + ) -> Result<CoinSelectionResult, Error> { // Mapping every (UTXO, usize) to an output group let required_utxos: Vec<OutputGroup> = required_utxos .into_iter() @@ -1442,7 +1442,7 @@ actual_target: i64, fee_amount: u64, cost_of_change: f32, - ) -> Result<CoinSelectionResult, Error> { + ) -> Result<CoinSelectionResult, Error> { // current_selection[i] will contain true if we are using optional_utxos[i], // false otherwise. Note that current_selection.len() could be less than // optional_utxos.len(), it just means that we still haven't decided if we should keep @@ -1481,7 +1481,7 @@ } // If we found a perfect match, break here - if curr_value == actual_target { + if curr_value == actual_target { break; } } @@ -1549,7 +1549,7 @@ curr_value: i64, actual_target: i64, fee_amount: u64, - ) -> CoinSelectionResult { + ) -> CoinSelectionResult { #[cfg(not(test))] optional_utxos.shuffle(&mut thread_rng()); #[cfg(test)] @@ -1578,7 +1578,7 @@ mut selected_utxos: Vec<OutputGroup>, mut required_utxos: Vec<OutputGroup>, mut fee_amount: u64, - ) -> CoinSelectionResult { + ) -> CoinSelectionResult { selected_utxos.append(&mut required_utxos); fee_amount += selected_utxos.iter().map(|u| u.fee).sum::<u64>(); let selected = selected_utxos @@ -1612,7 +1612,7 @@ const FEE_AMOUNT: u64 = 50; - fn utxo(value: u64, index: u32) -> WeightedUtxo { + fn utxo(value: u64, index: u32) -> WeightedUtxo { assert!(index < 10); let outpoint = OutPoint::from_str(&format!( "000000000000000000000000000000000000000000000000000000000000000{}:0", @@ -1632,7 +1632,7 @@ } } - fn get_test_utxos() -> Vec<WeightedUtxo> { + fn get_test_utxos() -> Vec<WeightedUtxo> { vec![ utxo(100_000, 0), utxo(FEE_AMOUNT as u64 - 40, 1), @@ -1640,7 +1640,7 @@ ] } - fn generate_random_utxos(rng: &mut StdRng, utxos_number: usize) -> Vec<WeightedUtxo> { + fn generate_random_utxos(rng: &mut StdRng, utxos_number: usize) -> Vec<WeightedUtxo> { let mut res = Vec::new(); for _ in 0..utxos_number { res.push(WeightedUtxo { @@ -1661,7 +1661,7 @@ res } - fn generate_same_value_utxos(utxos_value: u64, utxos_number: usize) -> Vec<WeightedUtxo> { + fn generate_same_value_utxos(utxos_value: u64, utxos_number: usize) -> Vec<WeightedUtxo> { let utxo = WeightedUtxo { satisfaction_weight: P2WPKH_WITNESS_SIZE, utxo: Utxo::Local(LocalUtxo { @@ -1679,7 +1679,7 @@ vec![utxo; utxos_number] } - fn sum_random_utxos(mut rng: &mut StdRng, utxos: &mut Vec<WeightedUtxo>) -> u64 { + fn sum_random_utxos(mut rng: &mut StdRng, utxos: &mut Vec<WeightedUtxo>) -> u64 { let utxos_picked_len = rng.gen_range(2, utxos.len() / 2); utxos.shuffle(&mut rng); utxos[..utxos_picked_len] diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/export.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/export.rs.html index a78d0d922f..9140a41ac5 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/export.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/export.rs.html @@ -433,7 +433,7 @@ } impl ToString for WalletExport { - fn to_string(&self) -> String { + fn to_string(&self) -> String { serde_json::to_string(self).unwrap() } } @@ -441,12 +441,12 @@ impl FromStr for WalletExport { type Err = serde_json::Error; - fn from_str(s: &str) -> Result<Self, Self::Err> { + fn from_str(s: &str) -> Result<Self, Self::Err> { serde_json::from_str(s) } } -fn remove_checksum(s: String) -> String { +fn remove_checksum(s: String) -> String { s.splitn(2, '#').next().map(String::from).unwrap() } @@ -466,7 +466,7 @@ wallet: &Wallet<B, D>, label: &str, include_blockheight: bool, - ) -> Result<Self, &'static str> { + ) -> Result<Self, &'static str> { let descriptor = wallet .descriptor .to_string_with_secret(&wallet.signers.as_key_map(wallet.secp_ctx())); @@ -474,9 +474,9 @@ Self::is_compatible_with_core(&descriptor)?; let blockheight = match wallet.database.borrow().iter_txs(false) { - _ if !include_blockheight => 0, - Err(_) => 0, - Ok(txs) => { + _ if !include_blockheight => 0, + Err(_) => 0, + Ok(txs) => { let mut heights = txs .into_iter() .map(|tx| tx.confirmation_time.map(|c| c.height).unwrap_or(0)) @@ -505,10 +505,10 @@ Ok(export) } - fn is_compatible_with_core(descriptor: &str) -> Result<(), &'static str> { + fn is_compatible_with_core(descriptor: &str) -> Result<(), &'static str> { fn check_ms<Ctx: ScriptContext>( terminal: &Terminal<String, Ctx>, - ) -> Result<(), &'static str> { + ) -> Result<(), &'static str> { if let Terminal::Multi(_, _) = terminal { Ok(()) } else { @@ -518,31 +518,31 @@ // pkh(), wpkh(), sh(wpkh()) are always fine, as well as multi() and sortedmulti() match Descriptor::<String>::from_str(descriptor).map_err(|_| "Invalid descriptor")? { - Descriptor::Pkh(_) | Descriptor::Wpkh(_) => Ok(()), - Descriptor::Sh(sh) => match sh.as_inner() { - ShInner::Wpkh(_) => Ok(()), - ShInner::SortedMulti(_) => Ok(()), - ShInner::Wsh(wsh) => match wsh.as_inner() { - WshInner::SortedMulti(_) => Ok(()), - WshInner::Ms(ms) => check_ms(&ms.node), + Descriptor::Pkh(_) | Descriptor::Wpkh(_) => Ok(()), + Descriptor::Sh(sh) => match sh.as_inner() { + ShInner::Wpkh(_) => Ok(()), + ShInner::SortedMulti(_) => Ok(()), + ShInner::Wsh(wsh) => match wsh.as_inner() { + WshInner::SortedMulti(_) => Ok(()), + WshInner::Ms(ms) => check_ms(&ms.node), }, - ShInner::Ms(ms) => check_ms(&ms.node), + ShInner::Ms(ms) => check_ms(&ms.node), }, - Descriptor::Wsh(wsh) => match wsh.as_inner() { - WshInner::SortedMulti(_) => Ok(()), - WshInner::Ms(ms) => check_ms(&ms.node), + Descriptor::Wsh(wsh) => match wsh.as_inner() { + WshInner::SortedMulti(_) => Ok(()), + WshInner::Ms(ms) => check_ms(&ms.node), }, - _ => Err("The descriptor is not compatible with Bitcoin Core"), + _ => Err("The descriptor is not compatible with Bitcoin Core"), } } /// Return the external descriptor - pub fn descriptor(&self) -> String { + pub fn descriptor(&self) -> String { self.descriptor.clone() } /// Return the internal descriptor, if present - pub fn change_descriptor(&self) -> Option<String> { + pub fn change_descriptor(&self) -> Option<String> { let replaced = self.descriptor.replace("/0/*", "/1/*"); if replaced != self.descriptor { @@ -565,7 +565,7 @@ use crate::wallet::Wallet; use crate::ConfirmationTime; - fn get_test_db() -> MemoryDatabase { + fn get_test_db() -> MemoryDatabase { let mut db = MemoryDatabase::new(); db.set_tx(&TransactionDetails { transaction: None, diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/mod.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/mod.rs.html index 802900db2d..fc3c6e78f6 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/mod.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/mod.rs.html @@ -4096,7 +4096,7 @@ change_descriptor: Option<E>, network: Network, database: D, - ) -> Result<Self, Error> { + ) -> Result<Self, Error> { Self::_new(descriptor, change_descriptor, network, database, (), None) } } @@ -4112,7 +4112,7 @@ mut database: D, client: B, current_height: Option<u32>, - ) -> Result<Self, Error> { + ) -> Result<Self, Error> { let secp = Secp256k1::new(); let (descriptor, keymap) = into_wallet_descriptor_checked(descriptor, &secp, network)?; @@ -4122,7 +4122,7 @@ )?; let signers = Arc::new(SignersContainer::from(keymap)); let (change_descriptor, change_signers) = match change_descriptor { - Some(desc) => { + Some(desc) => { let (change_descriptor, change_keymap) = into_wallet_descriptor_checked(desc, &secp, network)?; database.check_descriptor_checksum( @@ -4137,7 +4137,7 @@ (Some(change_descriptor), change_signers) } - None => (None, Arc::new(SignersContainer::new())), + None => (None, Arc::new(SignersContainer::new())), }; Ok(Wallet { @@ -4155,7 +4155,7 @@ } /// Get the Bitcoin network the wallet is using. - pub fn network(&self) -> Network { + pub fn network(&self) -> Network { self.network } } @@ -4204,13 +4204,13 @@ impl Deref for AddressInfo { type Target = Address; - fn deref(&self) -> &Self::Target { + fn deref(&self) -> &Self::Target { &self.address } } impl fmt::Display for AddressInfo { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{}", self.address) } } @@ -4221,7 +4221,7 @@ D: BatchDatabase, { // Return a newly derived address using the external descriptor - fn get_new_address(&self) -> Result<AddressInfo, Error> { + fn get_new_address(&self) -> Result<AddressInfo, Error> { let incremented_index = self.fetch_and_increment_index(KeychainKind::External)?; let address_result = self @@ -4239,7 +4239,7 @@ // Return the the last previously derived address if it has not been used in a received // transaction. Otherwise return a new address using [`Wallet::get_new_address`]. - fn get_unused_address(&self) -> Result<AddressInfo, Error> { + fn get_unused_address(&self) -> Result<AddressInfo, Error> { let current_index = self.fetch_index(KeychainKind::External)?; let derived_key = self.descriptor.as_derived(current_index, &self.secp); @@ -4251,7 +4251,7 @@ .iter() .flat_map(|tx_details| tx_details.transaction.as_ref()) .flat_map(|tx| tx.output.iter()) - .any(|o| o.script_pubkey == script_pubkey); + .any(|o| o.script_pubkey == script_pubkey); if found_used { self.get_new_address() @@ -4267,7 +4267,7 @@ } // Return derived address for the external descriptor at a specific index - fn peek_address(&self, index: u32) -> Result<AddressInfo, Error> { + fn peek_address(&self, index: u32) -> Result<AddressInfo, Error> { self.descriptor .as_derived(index, &self.secp) .address(self.network) @@ -4277,7 +4277,7 @@ // Return derived address for the external descriptor at a specific index and reset current // address index - fn reset_address(&self, index: u32) -> Result<AddressInfo, Error> { + fn reset_address(&self, index: u32) -> Result<AddressInfo, Error> { self.set_index(KeychainKind::External, index)?; self.descriptor @@ -4290,17 +4290,17 @@ /// Return a derived address using the external descriptor, see [`AddressIndex`] for /// available address index selection strategies. If none of the keys in the descriptor are derivable /// (ie. does not end with /*) then the same address will always be returned for any [`AddressIndex`]. - pub fn get_address(&self, address_index: AddressIndex) -> Result<AddressInfo, Error> { + pub fn get_address(&self, address_index: AddressIndex) -> Result<AddressInfo, Error> { match address_index { - AddressIndex::New => self.get_new_address(), - AddressIndex::LastUnused => self.get_unused_address(), - AddressIndex::Peek(index) => self.peek_address(index), - AddressIndex::Reset(index) => self.reset_address(index), + AddressIndex::New => self.get_new_address(), + AddressIndex::LastUnused => self.get_unused_address(), + AddressIndex::Peek(index) => self.peek_address(index), + AddressIndex::Reset(index) => self.reset_address(index), } } /// Return whether or not a `script` is part of this wallet (either internal or external) - pub fn is_mine(&self, script: &Script) -> Result<bool, Error> { + pub fn is_mine(&self, script: &Script) -> Result<bool, Error> { self.database.borrow().is_mine(script) } @@ -4308,13 +4308,13 @@ /// /// Note that this method only operates on the internal database, which first needs to be /// [`Wallet::sync`] manually. - pub fn list_unspent(&self) -> Result<Vec<LocalUtxo>, Error> { + pub fn list_unspent(&self) -> Result<Vec<LocalUtxo>, Error> { self.database.borrow().iter_utxos() } /// Returns the `UTXO` owned by this wallet corresponding to `outpoint` if it exists in the /// wallet's database. - pub fn get_utxo(&self, outpoint: OutPoint) -> Result<Option<LocalUtxo>, Error> { + pub fn get_utxo(&self, outpoint: OutPoint) -> Result<Option<LocalUtxo>, Error> { self.database.borrow().get_utxo(&outpoint) } @@ -4329,7 +4329,7 @@ &self, txid: &Txid, include_raw: bool, - ) -> Result<Option<TransactionDetails>, Error> { + ) -> Result<Option<TransactionDetails>, Error> { self.database.borrow().get_tx(txid, include_raw) } @@ -4340,7 +4340,7 @@ /// /// Note that this methods only operate on the internal database, which first needs to be /// [`Wallet::sync`] manually. - pub fn list_transactions(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error> { + pub fn list_transactions(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error> { self.database.borrow().iter_txs(include_raw) } @@ -4348,7 +4348,7 @@ /// /// Note that this methods only operate on the internal database, which first needs to be /// [`Wallet::sync`] manually. - pub fn get_balance(&self) -> Result<u64, Error> { + pub fn get_balance(&self) -> Result<u64, Error> { Ok(self .list_unspent()? .iter() @@ -4365,8 +4365,8 @@ signer: Arc<dyn Signer>, ) { let signers = match keychain { - KeychainKind::External => Arc::make_mut(&mut self.signers), - KeychainKind::Internal => Arc::make_mut(&mut self.change_signers), + KeychainKind::External => Arc::make_mut(&mut self.signers), + KeychainKind::Internal => Arc::make_mut(&mut self.change_signers), }; signers.add_external(signer.id(&self.secp), ordering, signer); @@ -4405,7 +4405,7 @@ /// ``` /// /// [`TxBuilder`]: crate::TxBuilder - pub fn build_tx(&self) -> TxBuilder<'_, B, D, DefaultCoinSelectionAlgorithm, CreateTx> { + pub fn build_tx(&self) -> TxBuilder<'_, B, D, DefaultCoinSelectionAlgorithm, CreateTx> { TxBuilder { wallet: self, params: TxParams::default(), @@ -4418,7 +4418,7 @@ &self, coin_selection: Cs, params: TxParams, - ) -> Result<(Psbt, TransactionDetails), Error> { + ) -> Result<(Psbt, TransactionDetails), Error> { let external_policy = self .descriptor .extract_policy(&self.signers, BuildSatisfaction::None, &self.secp)? @@ -4476,51 +4476,51 @@ debug!("Policy requirements: {:?}", requirements); let version = match params.version { - Some(tx_builder::Version(0)) => { + Some(tx_builder::Version(0)) => { return Err(Error::Generic("Invalid version `0`".into())) } - Some(tx_builder::Version(1)) if requirements.csv.is_some() => { + Some(tx_builder::Version(1)) if requirements.csv.is_some() => { return Err(Error::Generic( "TxBuilder requested version `1`, but at least `2` is needed to use OP_CSV" .into(), )) } - Some(tx_builder::Version(x)) => x, - None if requirements.csv.is_some() => 2, - _ => 1, + Some(tx_builder::Version(x)) => x, + None if requirements.csv.is_some() => 2, + _ => 1, }; let lock_time = match params.locktime { // No nLockTime, default to 0 - None => requirements.timelock.unwrap_or(0), + None => requirements.timelock.unwrap_or(0), // Specific nLockTime required and we have no constraints, so just set to that value - Some(x) if requirements.timelock.is_none() => x, + Some(x) if requirements.timelock.is_none() => x, // Specific nLockTime required and it's compatible with the constraints - Some(x) if check_nlocktime(x, requirements.timelock.unwrap()) => x, + Some(x) if check_nlocktime(x, requirements.timelock.unwrap()) => x, // Invalid nLockTime required - Some(x) => return Err(Error::Generic(format!("TxBuilder requested timelock of `{}`, but at least `{}` is required to spend from this script", x, requirements.timelock.unwrap()))) + Some(x) => return Err(Error::Generic(format!("TxBuilder requested timelock of `{}`, but at least `{}` is required to spend from this script", x, requirements.timelock.unwrap()))) }; let n_sequence = match (params.rbf, requirements.csv) { // No RBF or CSV but there's an nLockTime, so the nSequence cannot be final - (None, None) if lock_time != 0 => 0xFFFFFFFE, + (None, None) if lock_time != 0 => 0xFFFFFFFE, // No RBF, CSV or nLockTime, make the transaction final - (None, None) => 0xFFFFFFFF, + (None, None) => 0xFFFFFFFF, // No RBF requested, use the value from CSV. Note that this value is by definition // non-final, so even if a timelock is enabled this nSequence is fine, hence why we // don't bother checking for it here. The same is true for all the other branches below - (None, Some(csv)) => csv, + (None, Some(csv)) => csv, // RBF with a specific value but that value is too high - (Some(tx_builder::RbfValue::Value(rbf)), _) if rbf >= 0xFFFFFFFE => { + (Some(tx_builder::RbfValue::Value(rbf)), _) if rbf >= 0xFFFFFFFE => { return Err(Error::Generic( "Cannot enable RBF with a nSequence >= 0xFFFFFFFE".into(), )) } // RBF with a specific value requested, but the value is incompatible with CSV (Some(tx_builder::RbfValue::Value(rbf)), Some(csv)) - if !check_nsequence_rbf(rbf, csv) => + if !check_nsequence_rbf(rbf, csv) => { return Err(Error::Generic(format!( "Cannot enable RBF with nSequence `{}` given a required OP_CSV of `{}`", @@ -4529,10 +4529,10 @@ } // RBF enabled with the default value with CSV also enabled. CSV takes precedence - (Some(tx_builder::RbfValue::Default), Some(csv)) => csv, + (Some(tx_builder::RbfValue::Default), Some(csv)) => csv, // Valid RBF, either default or with a specific value. We ignore the `CSV` value // because we've already checked it before - (Some(rbf), _) => rbf.get_value(), + (Some(rbf), _) => rbf.get_value(), }; let (fee_rate, mut fee_amount) = match params @@ -4541,7 +4541,7 @@ .unwrap_or(&FeePolicy::FeeRate(FeeRate::default())) { //FIXME: see https://github.com/bitcoindevkit/bdk/issues/256 - FeePolicy::FeeAmount(fee) => { + FeePolicy::FeeAmount(fee) => { if let Some(previous_fee) = params.bumping_fee { if *fee < previous_fee.absolute { return Err(Error::FeeTooLow { @@ -4551,7 +4551,7 @@ } (FeeRate::from_sat_per_vb(0.0), *fee) } - FeePolicy::FeeRate(rate) => { + FeePolicy::FeeRate(rate) => { if let Some(previous_fee) = params.bumping_fee { let required_feerate = FeeRate::from_sat_per_vb(previous_fee.rate + 1.0); if *rate < required_feerate { @@ -4644,8 +4644,8 @@ // prepare the drain output let mut drain_output = { let script_pubkey = match params.drain_to { - Some(ref drain_recipient) => drain_recipient.clone(), - None => self.get_change_address()?, + Some(ref drain_recipient) => drain_recipient.clone(), + None => self.get_change_address()?, }; TxOut { @@ -4746,12 +4746,12 @@ pub fn build_fee_bump( &self, txid: Txid, - ) -> Result<TxBuilder<'_, B, D, DefaultCoinSelectionAlgorithm, BumpFee>, Error> { + ) -> Result<TxBuilder<'_, B, D, DefaultCoinSelectionAlgorithm, BumpFee>, Error> { let mut details = match self.database.borrow().get_tx(&txid, true)? { - None => return Err(Error::TransactionNotFound), - Some(tx) if tx.transaction.is_none() => return Err(Error::TransactionNotFound), - Some(tx) if tx.confirmation_time.is_some() => return Err(Error::TransactionConfirmed), - Some(tx) => tx, + None => return Err(Error::TransactionNotFound), + Some(tx) if tx.transaction.is_none() => return Err(Error::TransactionNotFound), + Some(tx) if tx.confirmation_time.is_some() => return Err(Error::TransactionConfirmed), + Some(tx) => tx, }; let mut tx = details.transaction.take().unwrap(); if !tx.input.iter().any(|txin| txin.sequence <= 0xFFFFFFFD) { @@ -4767,7 +4767,7 @@ let original_txin = tx.input.drain(..).collect::<Vec<_>>(); let original_utxos = original_txin .iter() - .map(|txin| -> Result<_, Error> { + .map(|txin| -> Result<_, Error> { let txout = self .database .borrow() @@ -4779,14 +4779,14 @@ .borrow() .get_path_from_script_pubkey(&txout.script_pubkey)? { - Some((keychain, _)) => ( + Some((keychain, _)) => ( self._get_descriptor_for_keychain(keychain) .0 .max_satisfaction_weight() .unwrap(), keychain, ), - None => { + None => { // estimate the weight based on the scriptsig/witness size present in the // original transaction let weight = @@ -4817,8 +4817,8 @@ .borrow() .get_path_from_script_pubkey(&txout.script_pubkey)? { - Some((keychain, _)) if keychain == change_type => change_index = Some(index), - _ => {} + Some((keychain, _)) if keychain == change_type => change_index = Some(index), + _ => {} } } @@ -4877,7 +4877,7 @@ /// let finalized = wallet.sign(&mut psbt, SignOptions::default())?; /// assert!(finalized, "we should have signed all the inputs"); /// # Ok::<(), bdk::Error>(()) - pub fn sign(&self, psbt: &mut Psbt, sign_options: SignOptions) -> Result<bool, Error> { + pub fn sign(&self, psbt: &mut Psbt, sign_options: SignOptions) -> Result<bool, Error> { // this helps us doing our job later self.add_input_hd_keypaths(psbt)?; @@ -4899,7 +4899,7 @@ && !psbt .inputs .iter() - .all(|i| i.sighash_type.is_none() || i.sighash_type == Some(SigHashType::All)) + .all(|i| i.sighash_type.is_none() || i.sighash_type == Some(SigHashType::All)) { return Err(Error::Signer(signer::SignerError::NonStandardSighash)); } @@ -4924,15 +4924,15 @@ } /// Return the spending policies for the wallet's descriptor - pub fn policies(&self, keychain: KeychainKind) -> Result<Option<Policy>, Error> { + pub fn policies(&self, keychain: KeychainKind) -> Result<Option<Policy>, Error> { match (keychain, self.change_descriptor.as_ref()) { - (KeychainKind::External, _) => Ok(self.descriptor.extract_policy( + (KeychainKind::External, _) => Ok(self.descriptor.extract_policy( &self.signers, BuildSatisfaction::None, &self.secp, )?), - (KeychainKind::Internal, None) => Ok(None), - (KeychainKind::Internal, Some(desc)) => Ok(desc.extract_policy( + (KeychainKind::Internal, None) => Ok(None), + (KeychainKind::Internal, Some(desc)) => Ok(desc.extract_policy( &self.change_signers, BuildSatisfaction::None, &self.secp, @@ -4947,18 +4947,18 @@ pub fn public_descriptor( &self, keychain: KeychainKind, - ) -> Result<Option<ExtendedDescriptor>, Error> { + ) -> Result<Option<ExtendedDescriptor>, Error> { match (keychain, self.change_descriptor.as_ref()) { - (KeychainKind::External, _) => Ok(Some(self.descriptor.clone())), - (KeychainKind::Internal, None) => Ok(None), - (KeychainKind::Internal, Some(desc)) => Ok(Some(desc.clone())), + (KeychainKind::External, _) => Ok(Some(self.descriptor.clone())), + (KeychainKind::Internal, None) => Ok(None), + (KeychainKind::Internal, Some(desc)) => Ok(Some(desc.clone())), } } /// Try to finalize a PSBT /// /// The [`SignOptions`] can be used to tweak the behavior of the finalizer. - pub fn finalize_psbt(&self, psbt: &mut Psbt, sign_options: SignOptions) -> Result<bool, Error> { + pub fn finalize_psbt(&self, psbt: &mut Psbt, sign_options: SignOptions) -> Result<bool, Error> { let tx = &psbt.global.unsigned_tx; let mut finished = true; @@ -5009,7 +5009,7 @@ }); match desc { - Some(desc) => { + Some(desc) => { let mut tmp_input = bitcoin::TxIn::default(); match desc.satisfy( &mut tmp_input, @@ -5019,18 +5019,18 @@ Older::new(current_height, create_height, false), ), ) { - Ok(_) => { + Ok(_) => { let psbt_input = &mut psbt.inputs[n]; psbt_input.final_script_sig = Some(tmp_input.script_sig); psbt_input.final_script_witness = Some(tmp_input.witness); } - Err(e) => { + Err(e) => { debug!("satisfy error {:?} for input {}", e, n); finished = false } } } - None => finished = false, + None => finished = false, } } @@ -5038,12 +5038,12 @@ } /// Return the secp256k1 context used for all signing operations - pub fn secp_ctx(&self) -> &SecpCtx { + pub fn secp_ctx(&self) -> &SecpCtx { &self.secp } /// Returns the descriptor used to create adddresses for a particular `keychain`. - pub fn get_descriptor_for_keychain(&self, keychain: KeychainKind) -> &ExtendedDescriptor { + pub fn get_descriptor_for_keychain(&self, keychain: KeychainKind) -> &ExtendedDescriptor { let (descriptor, _) = self._get_descriptor_for_keychain(keychain); descriptor } @@ -5053,20 +5053,20 @@ fn _get_descriptor_for_keychain( &self, keychain: KeychainKind, - ) -> (&ExtendedDescriptor, KeychainKind) { + ) -> (&ExtendedDescriptor, KeychainKind) { match keychain { - KeychainKind::Internal if self.change_descriptor.is_some() => ( + KeychainKind::Internal if self.change_descriptor.is_some() => ( self.change_descriptor.as_ref().unwrap(), KeychainKind::Internal, ), - _ => (&self.descriptor, KeychainKind::External), + _ => (&self.descriptor, KeychainKind::External), } } fn get_descriptor_for_txout( &self, txout: &TxOut, - ) -> Result<Option<DerivedDescriptor<'_>>, Error> { + ) -> Result<Option<DerivedDescriptor<'_>>, Error> { Ok(self .database .borrow() @@ -5075,18 +5075,18 @@ .map(|(desc, child)| desc.as_derived(child, &self.secp))) } - fn get_change_address(&self) -> Result<Script, Error> { + fn get_change_address(&self) -> Result<Script, Error> { let (desc, keychain) = self._get_descriptor_for_keychain(KeychainKind::Internal); let index = self.fetch_and_increment_index(keychain)?; Ok(desc.as_derived(index, &self.secp).script_pubkey()) } - fn fetch_and_increment_index(&self, keychain: KeychainKind) -> Result<u32, Error> { + fn fetch_and_increment_index(&self, keychain: KeychainKind) -> Result<u32, Error> { let (descriptor, keychain) = self._get_descriptor_for_keychain(keychain); let index = match descriptor.is_deriveable() { - false => 0, - true => self.database.borrow_mut().increment_last_index(keychain)?, + false => 0, + true => self.database.borrow_mut().increment_last_index(keychain)?, }; if self @@ -5110,11 +5110,11 @@ Ok(index) } - fn fetch_index(&self, keychain: KeychainKind) -> Result<u32, Error> { + fn fetch_index(&self, keychain: KeychainKind) -> Result<u32, Error> { let (descriptor, keychain) = self._get_descriptor_for_keychain(keychain); let index = match descriptor.is_deriveable() { - false => Some(0), - true => self.database.borrow_mut().get_last_index(keychain)?, + false => Some(0), + true => self.database.borrow_mut().get_last_index(keychain)?, }; if let Some(i) = index { @@ -5124,7 +5124,7 @@ } } - fn set_index(&self, keychain: KeychainKind, index: u32) -> Result<(), Error> { + fn set_index(&self, keychain: KeychainKind, index: u32) -> Result<(), Error> { self.database.borrow_mut().set_last_index(keychain, index)?; Ok(()) } @@ -5134,7 +5134,7 @@ keychain: KeychainKind, from: u32, mut count: u32, - ) -> Result<(), Error> { + ) -> Result<(), Error> { let (descriptor, keychain) = self._get_descriptor_for_keychain(keychain); if !descriptor.is_deriveable() { if from > 0 { @@ -5167,7 +5167,7 @@ Ok(()) } - fn get_available_utxos(&self) -> Result<Vec<(LocalUtxo, usize)>, Error> { + fn get_available_utxos(&self) -> Result<Vec<(LocalUtxo, usize)>, Error> { Ok(self .list_unspent()? .into_iter() @@ -5194,7 +5194,7 @@ must_use_all_available: bool, manual_only: bool, must_only_use_confirmed_tx: bool, - ) -> Result<(Vec<WeightedUtxo>, Vec<WeightedUtxo>), Error> { + ) -> Result<(Vec<WeightedUtxo>, Vec<WeightedUtxo>), Error> { // must_spend <- manually selected utxos // may_spend <- all other available utxos let mut may_spend = self.get_available_utxos()?; @@ -5202,7 +5202,7 @@ may_spend.retain(|may_spend| { !manually_selected .iter() - .any(|manually_selected| manually_selected.utxo.outpoint() == may_spend.0.outpoint) + .any(|manually_selected| manually_selected.utxo.outpoint() == may_spend.0.outpoint) }); let mut must_spend = manually_selected; @@ -5213,7 +5213,7 @@ } let satisfies_confirmed = match must_only_use_confirmed_tx { - true => { + true => { let database = self.database.borrow(); may_spend .iter() @@ -5221,13 +5221,13 @@ database .get_tx(&u.0.outpoint.txid, true) .map(|tx| match tx { - None => false, - Some(tx) => tx.confirmation_time.is_some(), + None => false, + Some(tx) => tx.confirmation_time.is_some(), }) }) .collect::<Result<Vec<_>, _>>()? } - false => vec![true; may_spend.len()], + false => vec![true; may_spend.len()], }; let mut i = 0; @@ -5259,7 +5259,7 @@ tx: Transaction, selected: Vec<Utxo>, params: TxParams, - ) -> Result<Psbt, Error> { + ) -> Result<Psbt, Error> { use bitcoin::util::psbt::serialize::Serialize; let mut psbt = Psbt::from_unsigned_tx(tx)?; @@ -5279,11 +5279,11 @@ }; let origin = match xpub.origin { - Some(origin) => origin, - None if xpub.xkey.depth == 0 => { + Some(origin) => origin, + None if xpub.xkey.depth == 0 => { (xpub.root_fingerprint(&self.secp), vec![].into()) } - _ => return Err(Error::MissingKeyOrigin(xpub.xkey.to_string())), + _ => return Err(Error::MissingKeyOrigin(xpub.xkey.to_string())), }; psbt.global.unknown.insert(key, origin.serialize()); @@ -5302,28 +5302,28 @@ .zip(psbt.global.unsigned_tx.input.iter()) { let utxo = match lookup_output.remove(&input.previous_output) { - Some(utxo) => utxo, - None => continue, + Some(utxo) => utxo, + None => continue, }; match utxo { - Utxo::Local(utxo) => { + Utxo::Local(utxo) => { *psbt_input = match self.get_psbt_input(utxo, params.sighash, params.only_witness_utxo) { - Ok(psbt_input) => psbt_input, - Err(e) => match e { - Error::UnknownUtxo => Input { + Ok(psbt_input) => psbt_input, + Err(e) => match e { + Error::UnknownUtxo => Input { sighash_type: params.sighash, ..Input::default() }, - _ => return Err(e), + _ => return Err(e), }, } } Utxo::Foreign { psbt_input: foreign_psbt_input, outpoint, - } => { + } => { if !params.only_witness_utxo && foreign_psbt_input.non_witness_utxo.is_none() { return Err(Error::Generic(format!( "Missing non_witness_utxo on foreign utxo {}", @@ -5369,7 +5369,7 @@ utxo: LocalUtxo, sighash_type: Option<SigHashType>, only_witness_utxo: bool, - ) -> Result<Input, Error> { + ) -> Result<Input, Error> { // Try to find the prev_script in our db to figure out if this is internal or external, // and the derivation index let (keychain, child) = self @@ -5402,7 +5402,7 @@ Ok(psbt_input) } - fn add_input_hd_keypaths(&self, psbt: &mut Psbt) -> Result<(), Error> { + fn add_input_hd_keypaths(&self, psbt: &mut Psbt) -> Result<(), Error> { let mut input_utxos = Vec::with_capacity(psbt.inputs.len()); for n in 0..psbt.inputs.len() { input_utxos.push(psbt.get_utxo_for(n).clone()); @@ -5445,7 +5445,7 @@ network: Network, database: D, client: B, - ) -> Result<Self, Error> { + ) -> Result<Self, Error> { let current_height = Some(maybe_await!(client.get_height())? as u32); Self::_new( descriptor, @@ -5463,14 +5463,14 @@ &self, progress_update: P, max_address_param: Option<u32>, - ) -> Result<(), Error> { + ) -> Result<(), Error> { debug!("Begin sync..."); let mut run_setup = false; let max_address = match self.descriptor.is_deriveable() { - false => 0, - true => max_address_param.unwrap_or(CACHE_ADDR_BATCH_SIZE), + false => 0, + true => max_address_param.unwrap_or(CACHE_ADDR_BATCH_SIZE), }; debug!("max_address {}", max_address); if self @@ -5486,8 +5486,8 @@ if let Some(change_descriptor) = &self.change_descriptor { let max_address = match change_descriptor.is_deriveable() { - false => 0, - true => max_address_param.unwrap_or(CACHE_ADDR_BATCH_SIZE), + false => 0, + true => max_address_param.unwrap_or(CACHE_ADDR_BATCH_SIZE), }; if self @@ -5536,13 +5536,13 @@ } /// Return a reference to the internal blockchain client - pub fn client(&self) -> &B { + pub fn client(&self) -> &B { &self.client } /// Broadcast a transaction to the network #[maybe_async] - pub fn broadcast(&self, tx: Transaction) -> Result<Txid, Error> { + pub fn broadcast(&self, tx: Transaction) -> Result<Txid, Error> { maybe_await!(self.client.broadcast(&tx))?; Ok(tx.txid()) @@ -5552,7 +5552,7 @@ /// Return a fake wallet that appears to be funded for testing. pub fn get_funded_wallet( descriptor: &str, -) -> ( +) -> ( Wallet<(), MemoryDatabase>, (String, Option<String>), bitcoin::Txid, @@ -5569,7 +5569,7 @@ let funding_address_kix = 0; let tx_meta = testutils! { - @tx ( (@external descriptors, funding_address_kix) => 50_000 ) (@confirmations 1) + @tx ( (@external descriptors, funding_address_kix) => 50_000 ) (@confirmations 1) }; wallet @@ -5695,27 +5695,27 @@ .is_some()); } - pub(crate) fn get_test_wpkh() -> &'static str { + pub(crate) fn get_test_wpkh() -> &'static str { "wpkh(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW)" } - pub(crate) fn get_test_single_sig_csv() -> &'static str { + pub(crate) fn get_test_single_sig_csv() -> &'static str { // and(pk(Alice),older(6)) "wsh(and_v(v:pk(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW),older(6)))" } - pub(crate) fn get_test_a_or_b_plus_csv() -> &'static str { + pub(crate) fn get_test_a_or_b_plus_csv() -> &'static str { // or(pk(Alice),and(pk(Bob),older(144))) "wsh(or_d(pk(cRjo6jqfVNP33HhSS76UhXETZsGTZYx8FMFvR9kpbtCSV1PmdZdu),and_v(v:pk(cMnkdebixpXMPfkcNEjjGin7s94hiehAH4mLbYkZoh9KSiNNmqC8),older(144))))" } - pub(crate) fn get_test_single_sig_cltv() -> &'static str { + pub(crate) fn get_test_single_sig_cltv() -> &'static str { // and(pk(Alice),after(100000)) "wsh(and_v(v:pk(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW),after(100000)))" } macro_rules! assert_fee_rate { - ($tx:expr, $fees:expr, $fee_rate:expr $( ,@dust_change $( $dust_change:expr )* )* $( ,@add_signature $( $add_signature:expr )* )* ) => ({ + ($tx:expr, $fees:expr, $fee_rate:expr $( ,@dust_change $( $dust_change:expr )* )* $( ,@add_signature $( $add_signature:expr )* )* ) => ({ let mut tx = $tx.clone(); $( $( $add_signature )* @@ -5995,11 +5995,11 @@ assert_eq!(outputs.len(), 2); let main_output = outputs .iter() - .find(|x| x.script_pubkey == addr.script_pubkey()) + .find(|x| x.script_pubkey == addr.script_pubkey()) .unwrap(); let drain_output = outputs .iter() - .find(|x| x.script_pubkey == drain_addr.script_pubkey()) + .find(|x| x.script_pubkey == drain_addr.script_pubkey()) .unwrap(); assert_eq!(main_output.value, 20_000,); assert_eq!(drain_output.value, 30_000 - details.fee.unwrap_or(0)); @@ -6346,7 +6346,7 @@ let (wallet, descriptors, _) = get_funded_wallet(get_test_wpkh()); let small_output_txid = crate::populate_test_db!( wallet.database.borrow_mut(), - testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), + testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), Some(100), ); @@ -6375,7 +6375,7 @@ let (wallet, descriptors, _) = get_funded_wallet(get_test_wpkh()); let small_output_txid = crate::populate_test_db!( wallet.database.borrow_mut(), - testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), + testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), Some(100), ); @@ -6504,7 +6504,7 @@ .unsigned_tx .input .iter() - .any(|input| input.previous_output == utxo.outpoint), + .any(|input| input.previous_output == utxo.outpoint), "foreign_utxo should be in there" ); @@ -6879,7 +6879,7 @@ assert_eq!( tx.output .iter() - .find(|txout| txout.script_pubkey == addr.script_pubkey()) + .find(|txout| txout.script_pubkey == addr.script_pubkey()) .unwrap() .value, 25_000 @@ -6945,7 +6945,7 @@ assert_eq!( tx.output .iter() - .find(|txout| txout.script_pubkey == addr.script_pubkey()) + .find(|txout| txout.script_pubkey == addr.script_pubkey()) .unwrap() .value, 25_000 @@ -7056,7 +7056,7 @@ // receive an extra tx so that our wallet has two utxos. let incoming_txid = crate::populate_test_db!( wallet.database.borrow_mut(), - testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), + testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), Some(100), ); let outpoint = OutPoint { @@ -7113,7 +7113,7 @@ // unless you've also set "allow_shrinking" OR there is a change output. let incoming_txid = crate::populate_test_db!( wallet.database.borrow_mut(), - testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), + testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), Some(100), ); let outpoint = OutPoint { @@ -7159,7 +7159,7 @@ let (wallet, descriptors, _) = get_funded_wallet(get_test_wpkh()); crate::populate_test_db!( wallet.database.borrow_mut(), - testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), + testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), Some(100), ); @@ -7200,7 +7200,7 @@ assert_eq!( tx.output .iter() - .find(|txout| txout.script_pubkey == addr.script_pubkey()) + .find(|txout| txout.script_pubkey == addr.script_pubkey()) .unwrap() .value, 45_000 @@ -7222,7 +7222,7 @@ let (wallet, descriptors, _) = get_funded_wallet(get_test_wpkh()); crate::populate_test_db!( wallet.database.borrow_mut(), - testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), + testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), Some(100), ); @@ -7263,7 +7263,7 @@ assert_eq!( tx.output .iter() - .find(|txout| txout.script_pubkey == addr.script_pubkey()) + .find(|txout| txout.script_pubkey == addr.script_pubkey()) .unwrap() .value, 45_000 @@ -7285,7 +7285,7 @@ let (wallet, descriptors, _) = get_funded_wallet(get_test_wpkh()); let incoming_txid = crate::populate_test_db!( wallet.database.borrow_mut(), - testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), + testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), Some(100), ); @@ -7340,7 +7340,7 @@ assert_eq!( tx.output .iter() - .find(|txout| txout.script_pubkey == addr.script_pubkey()) + .find(|txout| txout.script_pubkey == addr.script_pubkey()) .unwrap() .value, original_send_all_amount @@ -7362,7 +7362,7 @@ let (wallet, descriptors, _) = get_funded_wallet(get_test_wpkh()); crate::populate_test_db!( wallet.database.borrow_mut(), - testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), + testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), Some(100), ); @@ -7411,7 +7411,7 @@ assert_eq!( tx.output .iter() - .find(|txout| txout.script_pubkey == addr.script_pubkey()) + .find(|txout| txout.script_pubkey == addr.script_pubkey()) .unwrap() .value, 45_000 @@ -7425,7 +7425,7 @@ let (wallet, descriptors, _) = get_funded_wallet(get_test_wpkh()); let incoming_txid = crate::populate_test_db!( wallet.database.borrow_mut(), - testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), + testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), Some(100), ); @@ -7474,7 +7474,7 @@ assert_eq!( tx.output .iter() - .find(|txout| txout.script_pubkey == addr.script_pubkey()) + .find(|txout| txout.script_pubkey == addr.script_pubkey()) .unwrap() .value, 45_000 @@ -7496,7 +7496,7 @@ let (wallet, descriptors, _) = get_funded_wallet(get_test_wpkh()); let incoming_txid = crate::populate_test_db!( wallet.database.borrow_mut(), - testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), + testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), Some(100), ); @@ -7545,7 +7545,7 @@ assert_eq!( tx.output .iter() - .find(|txout| txout.script_pubkey == addr.script_pubkey()) + .find(|txout| txout.script_pubkey == addr.script_pubkey()) .unwrap() .value, 45_000 @@ -7801,7 +7801,7 @@ // use the above address crate::populate_test_db!( wallet.database.borrow_mut(), - testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), + testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)), Some(100), ); diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/signer.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/signer.rs.html index 77838e7d8e..1cd0a3c575 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/signer.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/signer.rs.html @@ -881,13 +881,13 @@ } impl From<hash160::Hash> for SignerId { - fn from(hash: hash160::Hash) -> SignerId { + fn from(hash: hash160::Hash) -> SignerId { SignerId::PkHash(hash) } } impl From<Fingerprint> for SignerId { - fn from(fing: Fingerprint) -> SignerId { + fn from(fing: Fingerprint) -> SignerId { SignerId::Fingerprint(fing) } } @@ -922,7 +922,7 @@ } impl fmt::Display for SignerError { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{:?}", self) } } @@ -944,24 +944,24 @@ psbt: &mut psbt::PartiallySignedTransaction, input_index: Option<usize>, secp: &SecpCtx, - ) -> Result<(), SignerError>; + ) -> Result<(), SignerError>; /// Return whether or not the signer signs the whole transaction in one go instead of every /// input individually - fn sign_whole_tx(&self) -> bool; + fn sign_whole_tx(&self) -> bool; /// Return the [`SignerId`] for this signer /// /// The [`SignerId`] can be used to lookup a signer in the [`Wallet`](crate::Wallet)'s signers map or to /// compare two signers. - fn id(&self, secp: &SecpCtx) -> SignerId; + fn id(&self, secp: &SecpCtx) -> SignerId; /// Return the secret key for the signer /// /// This is used internally to reconstruct the original descriptor that may contain secrets. /// External signers that are meant to keep key isolated should just return `None` here (which /// is the default for this method, if not overridden). - fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey> { + fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey> { None } } @@ -972,7 +972,7 @@ psbt: &mut psbt::PartiallySignedTransaction, input_index: Option<usize>, secp: &SecpCtx, - ) -> Result<(), SignerError> { + ) -> Result<(), SignerError> { let input_index = input_index.unwrap(); if input_index >= psbt.inputs.len() { return Err(SignerError::InputIndexOutOfRange); @@ -996,19 +996,19 @@ }) .next() { - Some((pk, full_path)) => (pk, full_path.clone()), - None => return Ok(()), + Some((pk, full_path)) => (pk, full_path.clone()), + None => return Ok(()), }; let derived_key = match self.origin.clone() { - Some((_fingerprint, origin_path)) => { + Some((_fingerprint, origin_path)) => { let deriv_path = DerivationPath::from( &full_path.into_iter().cloned().collect::<Vec<ChildNumber>>() [origin_path.len()..], ); self.xkey.derive_priv(secp, &deriv_path).unwrap() } - None => self.xkey.derive_priv(secp, &full_path).unwrap(), + None => self.xkey.derive_priv(secp, &full_path).unwrap(), }; if &derived_key.private_key.public_key(secp) != public_key { @@ -1018,15 +1018,15 @@ } } - fn sign_whole_tx(&self) -> bool { + fn sign_whole_tx(&self) -> bool { false } - fn id(&self, secp: &SecpCtx) -> SignerId { + fn id(&self, secp: &SecpCtx) -> SignerId { SignerId::from(self.root_fingerprint(secp)) } - fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey> { + fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey> { Some(DescriptorSecretKey::XPrv(self.clone())) } } @@ -1037,7 +1037,7 @@ psbt: &mut psbt::PartiallySignedTransaction, input_index: Option<usize>, secp: &SecpCtx, - ) -> Result<(), SignerError> { + ) -> Result<(), SignerError> { let input_index = input_index.unwrap(); if input_index >= psbt.inputs.len() || input_index >= psbt.global.unsigned_tx.input.len() { return Err(SignerError::InputIndexOutOfRange); @@ -1059,8 +1059,8 @@ // these? The original idea was to declare sign() as sign<Ctx: ScriptContex>() and use Ctx, // but that violates the rules for trait-objects, so we can't do it. let (hash, sighash) = match psbt.inputs[input_index].witness_utxo { - Some(_) => Segwitv0::sighash(psbt, input_index)?, - None => Legacy::sighash(psbt, input_index)?, + Some(_) => Segwitv0::sighash(psbt, input_index)?, + None => Legacy::sighash(psbt, input_index)?, }; let signature = secp.sign( @@ -1079,15 +1079,15 @@ Ok(()) } - fn sign_whole_tx(&self) -> bool { + fn sign_whole_tx(&self) -> bool { false } - fn id(&self, secp: &SecpCtx) -> SignerId { + fn id(&self, secp: &SecpCtx) -> SignerId { SignerId::from(self.public_key(secp).to_pubkeyhash()) } - fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey> { + fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey> { Some(DescriptorSecretKey::SinglePriv(DescriptorSinglePriv { key: *self, origin: None, @@ -1104,7 +1104,7 @@ pub struct SignerOrdering(pub usize); impl std::default::Default for SignerOrdering { - fn default() -> Self { + fn default() -> Self { SignerOrdering(100) } } @@ -1116,7 +1116,7 @@ } impl From<(SignerId, SignerOrdering)> for SignersContainerKey { - fn from(tuple: (SignerId, SignerOrdering)) -> Self { + fn from(tuple: (SignerId, SignerOrdering)) -> Self { SignersContainerKey { id: tuple.0, ordering: tuple.1, @@ -1130,7 +1130,7 @@ impl SignersContainer { /// Create a map of public keys to secret keys - pub fn as_key_map(&self, secp: &SecpCtx) -> KeyMap { + pub fn as_key_map(&self, secp: &SecpCtx) -> KeyMap { self.0 .values() .filter_map(|signer| signer.descriptor_secret_key()) @@ -1140,18 +1140,18 @@ } impl From<KeyMap> for SignersContainer { - fn from(keymap: KeyMap) -> SignersContainer { + fn from(keymap: KeyMap) -> SignersContainer { let secp = Secp256k1::new(); let mut container = SignersContainer::new(); for (_, secret) in keymap { match secret { - DescriptorSecretKey::SinglePriv(private_key) => container.add_external( + DescriptorSecretKey::SinglePriv(private_key) => container.add_external( SignerId::from(private_key.key.public_key(&secp).to_pubkeyhash()), SignerOrdering::default(), Arc::new(private_key.key), ), - DescriptorSecretKey::XPrv(xprv) => container.add_external( + DescriptorSecretKey::XPrv(xprv) => container.add_external( SignerId::from(xprv.root_fingerprint(&secp)), SignerOrdering::default(), Arc::new(xprv), @@ -1165,7 +1165,7 @@ impl SignersContainer { /// Default constructor - pub fn new() -> Self { + pub fn new() -> Self { SignersContainer(Default::default()) } @@ -1176,17 +1176,17 @@ id: SignerId, ordering: SignerOrdering, signer: Arc<dyn Signer>, - ) -> Option<Arc<dyn Signer>> { + ) -> Option<Arc<dyn Signer>> { self.0.insert((id, ordering).into(), signer) } /// Removes a signer from the container and returns it - pub fn remove(&mut self, id: SignerId, ordering: SignerOrdering) -> Option<Arc<dyn Signer>> { + pub fn remove(&mut self, id: SignerId, ordering: SignerOrdering) -> Option<Arc<dyn Signer>> { self.0.remove(&(id, ordering).into()) } /// Returns the list of identifiers of all the signers in the container - pub fn ids(&self) -> Vec<&SignerId> { + pub fn ids(&self) -> Vec<&SignerId> { self.0 .keys() .map(|SignersContainerKey { id, .. }| id) @@ -1194,18 +1194,18 @@ } /// Returns the list of signers in the container, sorted by lowest to highest `ordering` - pub fn signers(&self) -> Vec<&Arc<dyn Signer>> { + pub fn signers(&self) -> Vec<&Arc<dyn Signer>> { self.0.values().collect() } /// Finds the signer with lowest ordering for a given id in the container. - pub fn find(&self, id: SignerId) -> Option<&Arc<dyn Signer>> { + pub fn find(&self, id: SignerId) -> Option<&Arc<dyn Signer>> { self.0 .range(( Included(&(id.clone(), SignerOrdering(0)).into()), Included(&(id.clone(), SignerOrdering(usize::MAX)).into()), )) - .filter(|(k, _)| k.id == id) + .filter(|(k, _)| k.id == id) .map(|(_, v)| v) .next() } @@ -1246,7 +1246,7 @@ } impl Default for SignOptions { - fn default() -> Self { + fn default() -> Self { SignOptions { trust_witness_utxo: false, assume_height: None, @@ -1259,14 +1259,14 @@ fn sighash( psbt: &psbt::PartiallySignedTransaction, input_index: usize, - ) -> Result<(SigHash, SigHashType), SignerError>; + ) -> Result<(SigHash, SigHashType), SignerError>; } impl ComputeSighash for Legacy { fn sighash( psbt: &psbt::PartiallySignedTransaction, input_index: usize, - ) -> Result<(SigHash, SigHashType), SignerError> { + ) -> Result<(SigHash, SigHashType), SignerError> { if input_index >= psbt.inputs.len() || input_index >= psbt.global.unsigned_tx.input.len() { return Err(SignerError::InputIndexOutOfRange); } @@ -1276,8 +1276,8 @@ let sighash = psbt_input.sighash_type.unwrap_or(SigHashType::All); let script = match psbt_input.redeem_script { - Some(ref redeem_script) => redeem_script.clone(), - None => { + Some(ref redeem_script) => redeem_script.clone(), + None => { let non_witness_utxo = psbt_input .non_witness_utxo .as_ref() @@ -1300,7 +1300,7 @@ } } -fn p2wpkh_script_code(script: &Script) -> Script { +fn p2wpkh_script_code(script: &Script) -> Script { ScriptBuilder::new() .push_opcode(opcodes::all::OP_DUP) .push_opcode(opcodes::all::OP_HASH160) @@ -1314,7 +1314,7 @@ fn sighash( psbt: &psbt::PartiallySignedTransaction, input_index: usize, - ) -> Result<(SigHash, SigHashType), SignerError> { + ) -> Result<(SigHash, SigHashType), SignerError> { if input_index >= psbt.inputs.len() || input_index >= psbt.global.unsigned_tx.input.len() { return Err(SignerError::InputIndexOutOfRange); } @@ -1347,8 +1347,8 @@ let value = utxo.value; let script = match psbt_input.witness_script { - Some(ref witness_script) => witness_script.clone(), - None => { + Some(ref witness_script) => witness_script.clone(), + None => { if utxo.script_pubkey.is_v0_p2wpkh() { p2wpkh_script_code(&utxo.script_pubkey) } else if psbt_input @@ -1377,13 +1377,13 @@ } impl PartialOrd for SignersContainerKey { - fn partial_cmp(&self, other: &Self) -> Option<Ordering> { + fn partial_cmp(&self, other: &Self) -> Option<Ordering> { Some(self.cmp(other)) } } impl Ord for SignersContainerKey { - fn cmp(&self, other: &Self) -> Ordering { + fn cmp(&self, other: &Self) -> Ordering { self.ordering .cmp(&other.ordering) .then(self.id.cmp(&other.id)) @@ -1391,8 +1391,8 @@ } impl PartialEq for SignersContainerKey { - fn eq(&self, other: &Self) -> bool { - self.id == other.id && self.ordering == other.ordering + fn eq(&self, other: &Self) -> bool { + self.id == other.id && self.ordering == other.ordering } } @@ -1411,9 +1411,9 @@ use miniscript::ScriptContext; use std::str::FromStr; - fn is_equal(this: &Arc<dyn Signer>, that: &Arc<DummySigner>) -> bool { + fn is_equal(this: &Arc<dyn Signer>, that: &Arc<DummySigner>) -> bool { let secp = Secp256k1::new(); - this.id(&secp) == that.id(&secp) + this.id(&secp) == that.id(&secp) } // Signers added with the same ordering (like `Ordering::default`) created from `KeyMap` @@ -1498,15 +1498,15 @@ _psbt: &mut PartiallySignedTransaction, _input_index: Option<usize>, _secp: &SecpCtx, - ) -> Result<(), SignerError> { + ) -> Result<(), SignerError> { Ok(()) } - fn id(&self, _secp: &SecpCtx) -> SignerId { + fn id(&self, _secp: &SecpCtx) -> SignerId { SignerId::Dummy(self.number) } - fn sign_whole_tx(&self) -> bool { + fn sign_whole_tx(&self) -> bool { true } } @@ -1518,7 +1518,7 @@ fn setup_keys<Ctx: ScriptContext>( tprv: &str, - ) -> (DescriptorKey<Ctx>, DescriptorKey<Ctx>, Fingerprint) { + ) -> (DescriptorKey<Ctx>, DescriptorKey<Ctx>, Fingerprint) { let secp: Secp256k1<All> = Secp256k1::new(); let path = bip32::DerivationPath::from_str(PATH).unwrap(); let tprv = bip32::ExtendedPrivKey::from_str(tprv).unwrap(); diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/time.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/time.rs.html index 48832d0f43..8a8b42a23e 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/time.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/time.rs.html @@ -99,7 +99,7 @@ /// Return the current timestamp in seconds #[cfg(not(target_arch = "wasm32"))] -pub fn get_timestamp() -> u64 { +pub fn get_timestamp() -> u64 { SystemTime::now() .duration_since(UNIX_EPOCH) .unwrap() @@ -107,7 +107,7 @@ } /// Return the current timestamp in seconds #[cfg(target_arch = "wasm32")] -pub fn get_timestamp() -> u64 { +pub fn get_timestamp() -> u64 { let millis = Date::now(); (millis / 1000.0) as u64 @@ -120,11 +120,11 @@ impl Instant { #[cfg(not(target_arch = "wasm32"))] - pub fn new() -> Self { + pub fn new() -> Self { Instant(SystemInstant::now()) } #[cfg(target_arch = "wasm32")] - pub fn new() -> Self { + pub fn new() -> Self { let millis = Date::now(); let secs = millis / 1000.0; @@ -134,11 +134,11 @@ } #[cfg(not(target_arch = "wasm32"))] - pub fn elapsed(&self) -> Duration { + pub fn elapsed(&self) -> Duration { self.0.elapsed() } #[cfg(target_arch = "wasm32")] - pub fn elapsed(&self) -> Duration { + pub fn elapsed(&self) -> Duration { let now = Instant::new(); now.0.checked_sub(self.0).unwrap_or(Duration::new(0, 0)) diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/tx_builder.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/tx_builder.rs.html index 732238dba1..5ab0cb36fc 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/tx_builder.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/tx_builder.rs.html @@ -1051,13 +1051,13 @@ } impl std::default::Default for FeePolicy { - fn default() -> Self { + fn default() -> Self { FeePolicy::FeeRate(FeeRate::default_min_relay_fee()) } } impl<'a, Cs: Clone, Ctx, B, D> Clone for TxBuilder<'a, B, D, Cs, Ctx> { - fn clone(&self) -> Self { + fn clone(&self) -> Self { TxBuilder { wallet: self.wallet, params: self.params.clone(), @@ -1072,13 +1072,13 @@ TxBuilder<'a, B, D, Cs, Ctx> { /// Set a custom fee rate - pub fn fee_rate(&mut self, fee_rate: FeeRate) -> &mut Self { + pub fn fee_rate(&mut self, fee_rate: FeeRate) -> &mut Self { self.params.fee_policy = Some(FeePolicy::FeeRate(fee_rate)); self } /// Set an absolute fee - pub fn fee_absolute(&mut self, fee_amount: u64) -> &mut Self { + pub fn fee_absolute(&mut self, fee_amount: u64) -> &mut Self { self.params.fee_policy = Some(FeePolicy::FeeAmount(fee_amount)); self } @@ -1146,10 +1146,10 @@ &mut self, policy_path: BTreeMap<String, Vec<usize>>, keychain: KeychainKind, - ) -> &mut Self { + ) -> &mut Self { let to_update = match keychain { - KeychainKind::Internal => &mut self.params.internal_policy_path, - KeychainKind::External => &mut self.params.external_policy_path, + KeychainKind::Internal => &mut self.params.internal_policy_path, + KeychainKind::External => &mut self.params.external_policy_path, }; *to_update = Some(policy_path); @@ -1162,7 +1162,7 @@ /// /// These have priority over the "unspendable" utxos, meaning that if a utxo is present both in /// the "utxos" and the "unspendable" list, it will be spent. - pub fn add_utxos(&mut self, outpoints: &[OutPoint]) -> Result<&mut Self, Error> { + pub fn add_utxos(&mut self, outpoints: &[OutPoint]) -> Result<&mut Self, Error> { let utxos = outpoints .iter() .map(|outpoint| self.wallet.get_utxo(*outpoint)?.ok_or(Error::UnknownUtxo)) @@ -1184,7 +1184,7 @@ /// /// These have priority over the "unspendable" utxos, meaning that if a utxo is present both in /// the "utxos" and the "unspendable" list, it will be spent. - pub fn add_utxo(&mut self, outpoint: OutPoint) -> Result<&mut Self, Error> { + pub fn add_utxo(&mut self, outpoint: OutPoint) -> Result<&mut Self, Error> { self.add_utxos(&[outpoint]) } @@ -1234,10 +1234,10 @@ outpoint: OutPoint, psbt_input: psbt::Input, satisfaction_weight: usize, - ) -> Result<&mut Self, Error> { + ) -> Result<&mut Self, Error> { if psbt_input.witness_utxo.is_none() { match psbt_input.non_witness_utxo.as_ref() { - Some(tx) => { + Some(tx) => { if tx.txid() != outpoint.txid { return Err(Error::Generic( "Foreign utxo outpoint does not match PSBT input".into(), @@ -1247,7 +1247,7 @@ return Err(Error::InvalidOutpoint(outpoint)); } } - None => { + None => { return Err(Error::Generic( "Foreign utxo missing witness_utxo or non_witness_utxo".into(), )) @@ -1272,7 +1272,7 @@ /// make the transaction valid. /// /// [`add_utxo`]: Self::add_utxo - pub fn manually_selected_only(&mut self) -> &mut Self { + pub fn manually_selected_only(&mut self) -> &mut Self { self.params.manually_selected_only = true; self } @@ -1281,7 +1281,7 @@ /// /// It's important to note that the "must-be-spent" utxos added with [`TxBuilder::add_utxo`] /// have priority over these. See the docs of the two linked methods for more details. - pub fn unspendable(&mut self, unspendable: Vec<OutPoint>) -> &mut Self { + pub fn unspendable(&mut self, unspendable: Vec<OutPoint>) -> &mut Self { self.params.unspendable = unspendable.into_iter().collect(); self } @@ -1290,7 +1290,7 @@ /// /// It's important to note that the "must-be-spent" utxos added with [`TxBuilder::add_utxo`] /// have priority over this. See the docs of the two linked methods for more details. - pub fn add_unspendable(&mut self, unspendable: OutPoint) -> &mut Self { + pub fn add_unspendable(&mut self, unspendable: OutPoint) -> &mut Self { self.params.unspendable.insert(unspendable); self } @@ -1298,13 +1298,13 @@ /// Sign with a specific sig hash /// /// **Use this option very carefully** - pub fn sighash(&mut self, sighash: SigHashType) -> &mut Self { + pub fn sighash(&mut self, sighash: SigHashType) -> &mut Self { self.params.sighash = Some(sighash); self } /// Choose the ordering for inputs and outputs of the transaction - pub fn ordering(&mut self, ordering: TxOrdering) -> &mut Self { + pub fn ordering(&mut self, ordering: TxOrdering) -> &mut Self { self.params.ordering = ordering; self } @@ -1312,7 +1312,7 @@ /// Use a specific nLockTime while creating the transaction /// /// This can cause conflicts if the wallet's descriptors contain an "after" (OP_CLTV) operator. - pub fn nlocktime(&mut self, locktime: u32) -> &mut Self { + pub fn nlocktime(&mut self, locktime: u32) -> &mut Self { self.params.locktime = Some(locktime); self } @@ -1321,7 +1321,7 @@ /// /// The `version` should always be greater than `0` and greater than `1` if the wallet's /// descriptors contain an "older" (OP_CSV) operator. - pub fn version(&mut self, version: i32) -> &mut Self { + pub fn version(&mut self, version: i32) -> &mut Self { self.params.version = Some(Version(version)); self } @@ -1330,7 +1330,7 @@ /// /// This effectively adds all the change outputs to the "unspendable" list. See /// [`TxBuilder::unspendable`]. - pub fn do_not_spend_change(&mut self) -> &mut Self { + pub fn do_not_spend_change(&mut self) -> &mut Self { self.params.change_policy = ChangeSpendPolicy::ChangeForbidden; self } @@ -1339,14 +1339,14 @@ /// /// This effectively adds all the non-change outputs to the "unspendable" list. See /// [`TxBuilder::unspendable`]. - pub fn only_spend_change(&mut self) -> &mut Self { + pub fn only_spend_change(&mut self) -> &mut Self { self.params.change_policy = ChangeSpendPolicy::OnlyChange; self } /// Set a specific [`ChangeSpendPolicy`]. See [`TxBuilder::do_not_spend_change`] and /// [`TxBuilder::only_spend_change`] for some shortcuts. - pub fn change_policy(&mut self, change_policy: ChangeSpendPolicy) -> &mut Self { + pub fn change_policy(&mut self, change_policy: ChangeSpendPolicy) -> &mut Self { self.params.change_policy = change_policy; self } @@ -1356,7 +1356,7 @@ /// /// This reduces the size of the PSBT, but some signers might reject them due to the lack of /// the `non_witness_utxo`. - pub fn only_witness_utxo(&mut self) -> &mut Self { + pub fn only_witness_utxo(&mut self) -> &mut Self { self.params.only_witness_utxo = true; self } @@ -1365,7 +1365,7 @@ /// [`psbt::Output::witness_script`](bitcoin::util::psbt::Output::witness_script) fields. /// /// This is useful for signers which always require it, like ColdCard hardware wallets. - pub fn include_output_redeem_witness_script(&mut self) -> &mut Self { + pub fn include_output_redeem_witness_script(&mut self) -> &mut Self { self.params.include_output_redeem_witness_script = true; self } @@ -1375,13 +1375,13 @@ /// /// This is useful for offline signers that take part to a multisig. Some hardware wallets like /// BitBox and ColdCard are known to require this. - pub fn add_global_xpubs(&mut self) -> &mut Self { + pub fn add_global_xpubs(&mut self) -> &mut Self { self.params.add_global_xpubs = true; self } /// Spend all the available inputs. This respects filters like [`TxBuilder::unspendable`] and the change policy. - pub fn drain_wallet(&mut self) -> &mut Self { + pub fn drain_wallet(&mut self) -> &mut Self { self.params.drain_wallet = true; self } @@ -1394,7 +1394,7 @@ pub fn coin_selection<P: CoinSelectionAlgorithm<D>>( self, coin_selection: P, - ) -> TxBuilder<'a, B, D, P, Ctx> { + ) -> TxBuilder<'a, B, D, P, Ctx> { TxBuilder { wallet: self.wallet, params: self.params, @@ -1408,14 +1408,14 @@ /// Returns the [`BIP174`] "PSBT" and summary details about the transaction. /// /// [`BIP174`]: https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki - pub fn finish(self) -> Result<(Psbt, TransactionDetails), Error> { + pub fn finish(self) -> Result<(Psbt, TransactionDetails), Error> { self.wallet.create_tx(self.coin_selection, self.params) } /// Enable signaling RBF /// /// This will use the default nSequence value of `0xFFFFFFFD`. - pub fn enable_rbf(&mut self) -> &mut Self { + pub fn enable_rbf(&mut self) -> &mut Self { self.params.rbf = Some(RbfValue::Default); self } @@ -1427,7 +1427,7 @@ /// /// If the `nsequence` is higher than `0xFFFFFFFD` an error will be thrown, since it would not /// be a valid nSequence to signal RBF. - pub fn enable_rbf_with_sequence(&mut self, nsequence: u32) -> &mut Self { + pub fn enable_rbf_with_sequence(&mut self, nsequence: u32) -> &mut Self { self.params.rbf = Some(RbfValue::Value(nsequence)); self } @@ -1435,13 +1435,13 @@ impl<'a, B, D: BatchDatabase, Cs: CoinSelectionAlgorithm<D>> TxBuilder<'a, B, D, Cs, CreateTx> { /// Replace the recipients already added with a new list - pub fn set_recipients(&mut self, recipients: Vec<(Script, u64)>) -> &mut Self { + pub fn set_recipients(&mut self, recipients: Vec<(Script, u64)>) -> &mut Self { self.params.recipients = recipients; self } /// Add a recipient to the internal list - pub fn add_recipient(&mut self, script_pubkey: Script, amount: u64) -> &mut Self { + pub fn add_recipient(&mut self, script_pubkey: Script, amount: u64) -> &mut Self { self.params.recipients.push((script_pubkey, amount)); self } @@ -1486,7 +1486,7 @@ /// [`allow_shrinking`]: Self::allow_shrinking /// [`add_recipient`]: Self::add_recipient /// [`drain_wallet`]: Self::drain_wallet - pub fn drain_to(&mut self, script_pubkey: Script) -> &mut Self { + pub fn drain_to(&mut self, script_pubkey: Script) -> &mut Self { self.params.drain_to = Some(script_pubkey); self } @@ -1504,19 +1504,19 @@ /// /// Returns an `Err` if `script_pubkey` can't be found among the recipients of the /// transaction we are bumping. - pub fn allow_shrinking(&mut self, script_pubkey: Script) -> Result<&mut Self, Error> { + pub fn allow_shrinking(&mut self, script_pubkey: Script) -> Result<&mut Self, Error> { match self .params .recipients .iter() - .position(|(recipient_script, _)| *recipient_script == script_pubkey) + .position(|(recipient_script, _)| *recipient_script == script_pubkey) { - Some(position) => { + Some(position) => { self.params.recipients.remove(position); self.params.drain_to = Some(script_pubkey); Ok(self) } - None => Err(Error::Generic(format!( + None => Err(Error::Generic(format!( "{} was not in the original transaction", script_pubkey ))), @@ -1536,7 +1536,7 @@ } impl Default for TxOrdering { - fn default() -> Self { + fn default() -> Self { TxOrdering::Shuffle } } @@ -1545,8 +1545,8 @@ /// Sort transaction inputs and outputs by [`TxOrdering`] variant pub fn sort_tx(&self, tx: &mut Transaction) { match self { - TxOrdering::Untouched => {} - TxOrdering::Shuffle => { + TxOrdering::Untouched => {} + TxOrdering::Shuffle => { use rand::seq::SliceRandom; #[cfg(test)] use rand::SeedableRng; @@ -1558,7 +1558,7 @@ tx.output.shuffle(&mut rng); } - TxOrdering::Bip69Lexicographic => { + TxOrdering::Bip69Lexicographic => { tx.input.sort_unstable_by_key(|txin| { (txin.previous_output.txid, txin.previous_output.vout) }); @@ -1576,7 +1576,7 @@ pub(crate) struct Version(pub(crate) i32); impl Default for Version { - fn default() -> Self { + fn default() -> Self { Version(1) } } @@ -1591,10 +1591,10 @@ } impl RbfValue { - pub(crate) fn get_value(&self) -> u32 { + pub(crate) fn get_value(&self) -> u32 { match self { - RbfValue::Default => 0xFFFFFFFD, - RbfValue::Value(v) => *v, + RbfValue::Default => 0xFFFFFFFD, + RbfValue::Value(v) => *v, } } } @@ -1611,17 +1611,17 @@ } impl Default for ChangeSpendPolicy { - fn default() -> Self { + fn default() -> Self { ChangeSpendPolicy::ChangeAllowed } } impl ChangeSpendPolicy { - pub(crate) fn is_satisfied_by(&self, utxo: &LocalUtxo) -> bool { + pub(crate) fn is_satisfied_by(&self, utxo: &LocalUtxo) -> bool { match self { - ChangeSpendPolicy::ChangeAllowed => true, - ChangeSpendPolicy::OnlyChange => utxo.keychain == KeychainKind::Internal, - ChangeSpendPolicy::ChangeForbidden => utxo.keychain == KeychainKind::External, + ChangeSpendPolicy::ChangeAllowed => true, + ChangeSpendPolicy::OnlyChange => utxo.keychain == KeychainKind::Internal, + ChangeSpendPolicy::ChangeForbidden => utxo.keychain == KeychainKind::External, } } } @@ -1635,7 +1635,7 @@ 03e80300000000000002aaeee80300000000000001aa200300000000000001ff\ 00000000"; macro_rules! ordering_test_tx { - () => { + () => { deserialize::<bitcoin::Transaction>(&Vec::<u8>::from_hex(ORDERING_TEST_TX).unwrap()) .unwrap() }; @@ -1708,7 +1708,7 @@ assert_eq!(tx.output[2].script_pubkey, From::from(vec![0xAA, 0xEE])); } - fn get_test_utxos() -> Vec<LocalUtxo> { + fn get_test_utxos() -> Vec<LocalUtxo> { vec![ LocalUtxo { outpoint: OutPoint { diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/utils.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/utils.rs.html index 5154e583bb..c8df0b8e1c 100644 --- a/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/utils.rs.html +++ b/static/docs-rs/bdk/nightly/latest/src/bdk/wallet/utils.rs.html @@ -300,11 +300,11 @@ // encourage the usage of this trait. pub trait IsDust { /// Check whether or not a value is below dust limit - fn is_dust(&self) -> bool; + fn is_dust(&self) -> bool; } impl IsDust for u64 { - fn is_dust(&self) -> bool { + fn is_dust(&self) -> bool { *self <= DUST_LIMIT_SATOSHI } } @@ -315,7 +315,7 @@ } impl After { - pub(crate) fn new(current_height: Option<u32>, assume_height_reached: bool) -> After { + pub(crate) fn new(current_height: Option<u32>, assume_height_reached: bool) -> After { After { current_height, assume_height_reached, @@ -323,7 +323,7 @@ } } -pub(crate) fn check_nsequence_rbf(rbf: u32, csv: u32) -> bool { +pub(crate) fn check_nsequence_rbf(rbf: u32, csv: u32) -> bool { // This flag cannot be set in the nSequence when spending using OP_CSV if rbf & SEQUENCE_LOCKTIME_DISABLE_FLAG != 0 { return false; @@ -347,7 +347,7 @@ true } -pub(crate) fn check_nlocktime(nlocktime: u32, required: u32) -> bool { +pub(crate) fn check_nlocktime(nlocktime: u32, required: u32) -> bool { // Both values should be expressed in the same unit if (nlocktime < BLOCKS_TIMELOCK_THRESHOLD) != (required < BLOCKS_TIMELOCK_THRESHOLD) { return false; @@ -362,7 +362,7 @@ } impl<Pk: MiniscriptKey + ToPublicKey> Satisfier<Pk> for After { - fn check_after(&self, n: u32) -> bool { + fn check_after(&self, n: u32) -> bool { if let Some(current_height) = self.current_height { current_height >= n } else { @@ -382,7 +382,7 @@ current_height: Option<u32>, create_height: Option<u32>, assume_height_reached: bool, - ) -> Older { + ) -> Older { Older { current_height, create_height, @@ -392,7 +392,7 @@ } impl<Pk: MiniscriptKey + ToPublicKey> Satisfier<Pk> for Older { - fn check_older(&self, n: u32) -> bool { + fn check_older(&self, n: u32) -> bool { if let Some(current_height) = self.current_height { // TODO: test >= / > current_height as u64 >= self.create_height.unwrap_or(0) as u64 + n as u64 @@ -411,7 +411,7 @@ #[cfg(any(feature = "electrum", feature = "esplora"))] impl<I: Iterator> ChunksIterator<I> { - pub fn new(iter: I, size: usize) -> Self { + pub fn new(iter: I, size: usize) -> Self { ChunksIterator { iter, size } } } @@ -419,14 +419,14 @@ impl<I: Iterator> Iterator for ChunksIterator<I> { type Item = Vec<<I as std::iter::Iterator>::Item>; - fn next(&mut self) -> Option<Self::Item> { + fn next(&mut self) -> Option<Self::Item> { let mut v = Vec::new(); for _ in 0..self.size { let e = self.iter.next(); match e { - None => break, - Some(val) => v.push(val), + None => break, + Some(val) => v.push(val), } } -- 2.49.0