├── README.mediawiki ├── elip-0001.mediawiki ├── elip-0002.mediawiki ├── elip-0100.mediawiki ├── elip-0101.mediawiki ├── elip-0102.mediawiki ├── elip-0150.mediawiki ├── elip-0151.mediawiki ├── elip-0200.mediawiki └── elip-0201.mediawiki /README.mediawiki: -------------------------------------------------------------------------------- 1 | This repository contains Elements Improvement Proposals, or ELIPs. The ELIP approval process is largely modeled after the Bitcoin BIP process: we will be liberal in accepting ELIPs, provided that they are documented clearly and completely. Approval of an ELIP, including assignment of a number, does not constitute approval on technical grounds by any Elements Project developer or anyone else; it only indicates that the proposal is clearly written and some consensus has been achieved on what it does. 2 | 3 | People wishing to submit ELIPs by do so simply by opening a PR to this repo; discussion may happen in the comments. We do not have a mailing list on which to have discussion prior to opening a PR. 4 | 5 | Having an ELIP here does not make it a formally accepted standard until its status becomes Final or Active. 6 | 7 | {| class="wikitable sortable" style="width: auto; text-align: center; font-size: smaller; table-layout: fixed;" 8 | !Number 9 | !Layer 10 | !Title 11 | !Owner 12 | !Type 13 | !Status 14 | |- style="background-color: #ffcfcf" 15 | | [[elip-0001.mediawiki|1]] 16 | | 17 | | ELIP Purpose and Guidelines 18 | | Andrew Poelstra 19 | | Process 20 | | Active 21 | |- style="background-color: #ffcfcf" 22 | | [[elip-0002.mediawiki|2]] 23 | | 24 | | ELIP Purpose and Guidelines 25 | | Marco Argentieri 26 | | Protocol 27 | | Draft 28 | |- style="background-color: #ffcfcf" 29 | | [[elip-0100.mediawiki|100]] 30 | | Applications 31 | | Hardware Wallet Extensions for Partially Signed Elements Transaction Format 32 | | Mikhail Tolkachev 33 | | Standards Track 34 | | Draft 35 | |- style="background-color: #ffcfcf" 36 | | [[elip-0101.mediawiki|101]] 37 | | Applications 38 | | Genesis Blockhash for Partially Signed Elements Transaction Format 39 | | Jon Griffiths 40 | | Standards Track 41 | | Draft 42 | |- style="background-color: #ffcfcf" 43 | | [[elip-0102.mediawiki|102]] 44 | | Applications 45 | | LiquiDEX extensions for Partially Signed Elements Transaction Format 46 | | Leonardo Comandini 47 | | Standards Track 48 | | Draft 49 | |- style="background-color: #ffcfcf" 50 | | [[elip-0150.mediawiki|150]] 51 | | Wallet 52 | | CT Descriptors for Elements 53 | | Andrew Poelstra, Tim Ruffing 54 | | Standards Track 55 | | Draft 56 | |- style="background-color: #ffcfcf" 57 | | [[elip-0151.mediawiki|151]] 58 | | Wallet 59 | | Deterministic Descriptor Blinding Keys 60 | | Leonardo Comandini 61 | | Standards Track 62 | | Draft 63 | |- style="background-color: #ffcfcf" 64 | | [[elip-0200.mediawiki|200]] 65 | | Wallet 66 | | Discounted fees for Confidential Transactions 67 | | Byron Hambly 68 | | Standards Track 69 | | Active 70 | |- style="background-color: #ffcfcf" 71 | | [[elip-0201.mediawiki|201]] 72 | | Wallet 73 | | Reduce Elements default dust relay feerate to match min relay feerate 74 | | Kilian Rausch 75 | | Standards Track 76 | | Active 77 | |} 78 | 79 | 80 | -------------------------------------------------------------------------------- /elip-0001.mediawiki: -------------------------------------------------------------------------------- 1 |
2 | ELIP: 1 3 | Title: ELIP Purpose and Guidelines 4 | Author: Andrew Poelstra13 | 14 | This document is almost entirely a copy of [https://github.com/bitcoin/bips/blob/master/bip-0002.mediawiki Bitcoin BIP 2], with Bitcoin replaced by Elements where appropriate, as well as removing references to the mailing list. 15 | 16 | ==Abstract== 17 | 18 | A Elements Improvement Proposal (ELIP) is a design document providing information to the Elements community, or describing a new feature for Elements or its processes or environment. The ELIP should provide a concise technical specification of the feature and a rationale for the feature. 19 | 20 | We intend ELIPs to be the primary mechanisms for proposing new features, for collecting community input on an issue, and for documenting the design decisions that have gone into Elements. The ELIP author is responsible for building consensus within the community and documenting dissenting opinions. 21 | 22 | Because the ELIPs are maintained as text files in a versioned repository, their revision history is the historical record of the feature proposal. 23 | 24 | ==Copyright== 25 | 26 | This ELIP is dual-licensed under the Open Publication License and BSD 2-clause license. 27 | 28 | ==ELIP workflow== 29 | 30 | The ELIP process begins with a new idea for Elements. Each potential ELIP must have a champion -- someone who writes the ELIP using the style and format described below, shepherds the discussions in the appropriate forums, and attempts to build community consensus around the idea. The ELIP champion (a.k.a. Author) should first attempt to ascertain whether the idea is ELIP-able. 31 | Small enhancements or patches to a particular piece of software often don't require standardisation between multiple projects; these don't need a ELIP and should be injected into the relevant project-specific development workflow with a patch submission to the applicable issue tracker. 32 | Additionally, many ideas have been brought forward for changing Elements that have been rejected for various reasons. 33 | 34 | Vetting an idea publicly before going as far as writing a ELIP is meant to save both the potential author and the wider community time. 35 | Asking the Elements community first if an idea is original helps prevent too much time being spent on something that is guaranteed to be rejected based on prior discussions (searching the internet does not always do the trick). 36 | It also helps to make sure the idea is applicable to the entire community and not just the author. Just because an idea sounds good to the author does not mean it will work for most people in most areas where Elements is used. 37 | 38 | Following a discussion, the proposal should be submitted to the [https://github.com/ElementsProject/elips ELIPs git repository] as a pull request. 39 | This draft must be written in ELIP style as described below, and named with an alias such as "bip-johndoe-infinitebitcoins" until an editor has assigned it a ELIP number (authors MUST NOT self-assign ELIP numbers). 40 | 41 | ELIP authors are responsible for collecting community feedback on both the initial idea and the ELIP before submitting it for review. However, wherever possible, long open-ended discussions on public mailing lists should be avoided. Strategies to keep the discussions efficient include: setting up a separate SIG mailing list for the topic, having the ELIP author accept private comments in the early design phases, setting up a wiki page or git repository, etc. ELIP authors should use their discretion here. 42 | 43 | It is highly recommended that a single ELIP contain a single key proposal or new idea. The more focused the ELIP, the more successful it tends to be. If in doubt, split your ELIP into several well-focused ones. 44 | 45 | When the ELIP draft is complete, a ELIP editor will assign the ELIP a number, label it as Standards Track, Informational, or Process, and merge the pull request to the ELIPs git repository. 46 | The ELIP editors will not unreasonably reject a ELIP. 47 | Reasons for rejecting ELIPs include duplication of effort, disregard for formatting rules, being too unfocused or too broad, being technically unsound, not providing proper motivation or addressing backwards compatibility, or not in keeping with the Elements philosophy. 48 | For a ELIP to be accepted it must meet certain minimum criteria. 49 | It must be a clear and complete description of the proposed enhancement. 50 | The enhancement must represent a net improvement. 51 | The proposed implementation, if applicable, must be solid and must not complicate the protocol unduly. 52 | 53 | The ELIP author may update the draft as necessary in the git repository. Updates to drafts should also be submitted by the author as pull requests. 54 | 55 | ===Transferring ELIP Ownership=== 56 | 57 | It occasionally becomes necessary to transfer ownership of ELIPs to a new champion. In general, we'd like to retain the original author as a co-author of the transferred ELIP, but that's really up to the original author. A good reason to transfer ownership is because the original author no longer has the time or interest in updating it or following through with the ELIP process, or has fallen off the face of the 'net (i.e. is unreachable or not responding to email). A bad reason to transfer ownership is because you don't agree with the direction of the ELIP. We try to build consensus around a ELIP, but if that's not possible, you can always submit a competing ELIP. 58 | 59 | If you are interested in assuming ownership of a ELIP, send a message asking to take over, addressed to both the original author and the ELIP editors. If the original author doesn't respond to email in a timely manner, the ELIP editors will make a unilateral decision (it's not like such decisions can't be reversed :). 60 | 61 | ===ELIP Editors=== 62 | 63 | The current ELIP editors are: 64 | 65 | * Andrew Poelstra ([[mailto:apoelstra@blockstream.com|apoelstra@blockstream.com]]) 66 | * Andrea Bonel ([[mailto:abonel@blockstream.com|abonel@blockstream.com]]) 67 | 68 | ===ELIP Editor Responsibilities & Workflow=== 69 | 70 | For each new ELIP that comes in an editor does the following: 71 | 72 | * Read the ELIP to check if it is ready: sound and complete. The ideas must make technical sense, even if they don't seem likely to be accepted. 73 | * The title should accurately describe the content. 74 | * Motivation and backward compatibility (when applicable) must be addressed. 75 | * The defined Layer header must be correctly assigned for the given specification. 76 | * Licensing terms must be acceptable for ELIPs. 77 | 78 | If the ELIP isn't ready, the editor will send it back to the author for revision, with specific instructions. 79 | 80 | Once the ELIP is ready for the repository it should be submitted as a "pull request" to the [https://github.com/ElementsProject/ELIPs ELIPs git repository] where it may get further feedback. 81 | 82 | The ELIP editor will: 83 | 84 | * Assign a ELIP number in the pull request. 85 | 86 | * Merge the pull request when it is ready. 87 | 88 | * List the ELIP in [[README.mediawiki]] 89 | 90 | The ELIP editors are intended to fulfill administrative and editorial responsibilities. The ELIP editors monitor ELIP changes, and update ELIP headers as appropriate. 91 | 92 | ==ELIP format and structure== 93 | 94 | ===Specification=== 95 | 96 | ELIPs should be written in mediawiki format. 97 | 98 | Each ELIP should have the following parts: 99 | 100 | * Preamble -- Headers containing metadata about the ELIP ([[#ELIP header preamble|see below]]). 101 | 102 | * Abstract -- A short (~200 word) description of the technical issue being addressed. 103 | 104 | * Copyright -- The ELIP must be explicitly licensed under acceptable copyright terms ([[#ELIP licensing|see below]]). 105 | 106 | * Specification -- The technical specification should describe the syntax and semantics of any new feature. The specification should be detailed enough to allow competing, interoperable implementations for any of the current Elements platforms. 107 | 108 | * Motivation -- The motivation is critical for ELIPs that want to change the Elements protocol. It should clearly explain why the existing protocol is inadequate to address the problem that the ELIP solves. 109 | 110 | * Rationale -- The rationale fleshes out the specification by describing what motivated the design and why particular design decisions were made. It should describe alternate designs that were considered and related work. The rationale should provide evidence of consensus within the community and discuss important objections or concerns raised during discussion. 111 | 112 | * Backwards compatibility -- All ELIPs that introduce backwards incompatibilities must include a section describing these incompatibilities and their severity. The ELIP must explain how the author proposes to deal with these incompatibilities. 113 | 114 | * Reference implementation -- The reference implementation must be completed before any ELIP is given status "Final", but it need not be completed before the ELIP is accepted. It is better to finish the specification and rationale first and reach consensus on it before writing code. The final implementation must include test code and documentation appropriate for the Elements protocol. 115 | 116 | ====ELIP header preamble==== 117 | 118 | Each ELIP must begin with an RFC 822 style header preamble. The headers must appear in the following order. Headers marked with "*" are optional and are described below. All other headers are required. 119 | 120 |5 | Status: Active 6 | Type: Process 7 | Created: 2022-10-06 8 | Comments-Summary: No comments yet. 9 | Comments-URI: https://github.com/ElementsProject/elips/wiki/Comments:ELIP-0001 10 | License: BSD-2-Clause 11 | GNU-All-Permissive 12 |
121 | ELIP:139 | 140 | The Layer header (only for Standards Track ELIPs) documents which layer of Elements the ELIP applies to. 141 | See [[bip-0123.mediawiki|BIP 123]] for definitions of the various ELIP layers, which are identical for BIPs and ELIPs. 142 | 143 | The Author header lists the names and email addresses of all the authors/owners of the ELIP. 144 | The format of the Author header value must be 145 | 146 | Random J. User 147 | 148 | If there are multiple authors, each should be on a separate line following RFC 2822 continuation line conventions. 149 | 150 | While a ELIP is in private discussions (usually during the initial Draft phase), a Discussions-To header will indicate the mailing list or URL where the ELIP is being discussed. No Discussions-To header is necessary if the ELIP is being discussed privately with the author, or on any email mailing lists. 151 | 152 | The Type header specifies the type of ELIP: Standards Track, Informational, or Process. 153 | 154 | The Created header records the date that the ELIP was assigned a number, while Post-History is used to record when new versions of the ELIP are posted to any mailing lists. 155 | Dates should be in yyyy-mm-dd format, e.g. 2001-08-14. 156 | Post-History is permitted to be a link to a specific thread in a mailing list archive. 157 | 158 | ELIPs may have a Requires header, indicating the ELIP numbers that this ELIP depends on. 159 | 160 | ELIPs may also have a Superseded-By header indicating that a ELIP has been rendered obsolete by a later document; the value is the number of the ELIP that replaces the current document. The newer ELIP must have a Replaces header containing the number of the ELIP that it rendered obsolete. 161 | 162 | ====Auxiliary Files==== 163 | 164 | ELIPs may include auxiliary files such as diagrams. Auxiliary files should be included in a subdirectory for that ELIP, or must be named ELIP-XXXX-Y.ext, where "XXXX" is the ELIP number, "Y" is a serial number (starting at 1), and "ext" is replaced by the actual file extension (e.g. "png"). 165 | 166 | ==ELIP types== 167 | 168 | There are three kinds of ELIP: 169 | 170 | * A Standards Track ELIP describes any change that affects most or all Bitcoin implementations, such as a change to the network protocol, a change in block or transaction validity rules, or any change or addition that affects the interoperability of applications using Bitcoin. Standards Track ELIPs consist of two parts, a design document and a reference implementation. 171 | * An Informational ELIP describes a Bitcoin design issue, or provides general guidelines or information to the Bitcoin community, but does not propose a new feature. Informational ELIPs do not necessarily represent a Bitcoin community consensus or recommendation, so users and implementors are free to ignore Informational ELIPs or follow their advice. 172 | * A Process ELIP describes a process surrounding Bitcoin, or proposes a change to (or an event in) a process. Process ELIPs are like Standards Track ELIPs but apply to areas other than the Bitcoin protocol itself. They may propose an implementation, but not to Bitcoin's codebase; they often require community consensus; unlike Informational ELIPs, they are more than recommendations, and users are typically not free to ignore them. Examples include procedures, guidelines, changes to the decision-making process, and changes to the tools or environment used in Bitcoin development. Any meta-ELIP is also considered a Process ELIP. 173 | 174 | ==ELIP status field== 175 | 176 | ===Specification=== 177 | 178 | The typical paths of the status of ELIPs are as follows: 179 | 180 |122 | * Layer: 123 | Title: 124 | Author: 125 | * Discussions-To:
126 | * Comments-Summary: 127 | Comments-URI: 128 | Status: 130 | Type: 131 | Created: 132 | License: 133 | * License-Code: 134 | * Post-History: 135 | * Requires: 136 | * Replaces: 137 | * Superseded-By: 138 |
2 | ELIP: 2 3 | Title: ELIP Purpose and Guidelines 4 | Author: Marco Argentieri12 | 13 | 14 | ==What is an ELIP?== 15 | 16 | 17 | ELIP stands for ELements Improvement Proposal. An ELIP is a design document providing information to the Elements community, or describing a new feature for Elements or its processes or environment. The ELIP should provide a concise technical specification of the feature and a rationale for the feature. 18 | 19 | 20 | We intend ELIPs to be the primary mechanisms for proposing new features, for collecting community input on an issue, and for documenting the design decisions that have gone into Elements. The ELIP author is responsible for building consensus within the community and documenting dissenting opinions. 21 | 22 | 23 | Because the ELIPs are maintained as text files in a versioned repository, their revision history is the historical record of the feature proposal. 24 | 25 | 26 | ==ELIP Types== 27 | 28 | 29 | There are two kinds of ELIP: 30 | 31 | 32 | * A protocol ELIP describes any change that affects most or all Elements implementations, such as a change to the network protocol, a change in block or transaction validity rules, or any change or addition that affects the interoperability of applications using Elements. 33 | * An application ELIP describes a feature addition proposal or design improvement on the application layer of Elements. Proposals do not necessarily represent an Elements community consensus or recommendation, so users and implementers are free to ignore Informational ELIPs or follow their advice. 34 | 35 | 36 | ==ELIP Work Flow== 37 | 38 | 39 | The ELIP process begins with a new idea for Elements. Each potential ELIP must have a champion -- someone who writes the ELIP using the style and format described below, shepherds the discussions in the appropriate forums, and attempts to build community consensus around the idea. The ELIP champion (a.k.a. Author) should first attempt to ascertain whether the idea is ELIP-able. Posting to the elements-dev@googlegroups.com mailing list is the best way to go about this. 40 | 41 | 42 | Vetting an idea publicly before going as far as writing an ELIP is meant to save both the potential author and the wider community time. Asking the Elements community first if an idea is original helps prevent too much time being spent on something that is guaranteed to be rejected based on prior discussions (searching the internet does not always do the trick). It also helps to make sure the idea is applicable to the entire community and not just the author. Just because an idea sounds good to the author does not mean it will work for most people in most areas where Elements is used. Small enhancements or patches often don't need standardization between multiple projects; these don't need an ELIP and should be injected into the relevant Elements development work flow with a patch submission to the applicable Elements issue tracker. 43 | 44 | 45 | Once the champion has confirmed the Elements community as to whether an idea has any chance of acceptance, a draft ELIP should be presented to the elements-dev@googlegroups.com mailing list. This gives the author a chance to flesh out the draft ELIP to make it properly formatted, of high quality, and to address additional concerns about the proposal. Following a discussion, the proposal should be sent to the elements-dev list and the ELIP editor with the draft ELIP. This draft must be written in ELIP style as described below, else it will be sent back without further regard until proper formatting rules are followed. 46 | 47 | 48 | ELIP authors are responsible for collecting community feedback on both the initial idea and the ELIP before submitting it for review. However, wherever possible, long open-ended discussions on public mailing lists should be avoided. 49 | 50 | 51 | It is highly recommended that a single ELIP contain a single key proposal or new idea. The more focused the ELIP, the more successful it tends to be. If in doubt, split your ELIP into several well-focused ones. 52 | 53 | 54 | The ELIP editors assign ELIP numbers and change their status. Please send all ELIP-related email to the ELIP editor, which is listed under [[#ELIP_Editors|ELIP Editors]] below. Also see [[#ELIP_Editor_Responsibilities__Workflow|ELIP Editor Responsibilities & Workflow]]. The ELIP editor reserves the right to reject ELIP proposals if they appear too unfocused or too broad. 55 | 56 | 57 | Authors MUST NOT self assign ELIP numbers, but should use an alias such as "elip-johndoe-infinitelquidbitcoins" which includes the author's name/nick and the ELIP subject. 58 | 59 | 60 | If the ELIP editor approves, he will assign the ELIP a number, label it as protocol or application, give it status "Draft", and add it to the ELIPs git repository. The ELIP editor will not unreasonably deny an ELIP. Reasons for denying ELIP status include duplication of effort, disregard for formatting rules, being too unfocused or too broad, being technically unsound, not providing proper motivation or addressing backwards compatibility, or not in keeping with the Elements philosophy. For an ELIP to be accepted it must meet certain minimum criteria. It must be a clear and complete description of the proposed enhancement. The enhancement must represent a net improvement. The proposed implementation, if applicable, must be solid and must not complicate the protocol unduly. 61 | 62 | 63 | The ELIP author may update the Draft as necessary in the git repository. Updates to drafts may also be submitted by the author as pull requests. 64 | 65 | 66 | Protocol and application ELIPs consist of two parts, a design document and a reference implementation. The ELIP should be reviewed and accepted before a reference implementation is begun, unless a reference implementation will aid people in studying the ELIP. Standards Track ELIPs must include an implementation -- in the form of code, a patch, or a URL to same -- before it can be considered Final. 67 | 68 | 69 | Once an ELIP has been accepted, the reference implementation must be completed. When the reference implementation is complete and accepted by the community, the status will be changed to "Final". 70 | 71 | 72 | An ELIP can also be assigned status "Deferred". The ELIP author or editor can assign the ELIP this status when no progress is being made on the ELIP. Once an ELIP is deferred, the ELIP editor can re-assign it to draft status. 73 | 74 | 75 | An ELIP can also be "Rejected". Perhaps after all is said and done it was not a good idea. It is still important to have a record of this fact. 76 | 77 | 78 | ELIPs can also be superseded by a different ELIP, rendering the original obsolete. This is intended for Informational ELIPs, where version 2 of an API can replace version 1. 79 | 80 | 81 | The possible paths of the status of ELIPs are as follows: 82 | 83 | 84 |5 | Comments-Summary: No comments yet. 6 | Comments-URI: TBD 7 | Status: Draft 8 | Type: Protocol 9 | Created: 2022-05-06 10 | Superseded-By: 11 |
139 | ELIP:152 | 153 | 154 | The Author header lists the names, and optionally the email addresses of all the authors/owners of the ELIP. The format of the Author header value must be 155 | 156 | 157 | Random J. User 158 | 159 | 160 | if the email address is included, and just 161 | 162 | 163 | Random J. User 164 | 165 | 166 | if the address is not given. 167 | 168 | 169 | If there are multiple authors, each should be on a separate line following RFC 2822 continuation line conventions. 170 | 171 | 172 | ===Auxiliary Files=== 173 | 174 | 175 | ELIPs may include auxiliary files such as diagrams. Image files should be included in a subdirectory for that ELIP. Auxiliary files must be named ELIP-XXXX-Y.ext, where "XXXX" is the ELIP number, "Y" is a serial number (starting at 1), and "ext" is replaced by the actual file extension (e.g. "png"). 176 | 177 | 178 | ==Transferring ELIP Ownership== 179 | 180 | 181 | It occasionally becomes necessary to transfer ownership of ELIPs to a new champion. In general, we'd like to retain the original author as a co-author of the transferred ELIP, but that's really up to the original author. A good reason to transfer ownership is because the original author no longer has the time or interest in updating it or following through with the ELIP process, or has fallen off the face of the 'net (i.e. is unreachable or not responding to email). A bad reason to transfer ownership is because you don't agree with the direction of the ELIP. We try to build consensus around an ELIP, but if that's not possible, you can always submit a competing ELIP. 182 | 183 | 184 | If you are interested in assuming ownership of an ELIP, send a message asking to take over, addressed to both the original author and the ELIP editor. If the original author doesn't respond to email in a timely manner, the ELIP editor will make a unilateral decision (it's not like such decisions can't be reversed :). 185 | 186 | 187 | ==ELIP Editors== 188 | 189 | 190 | The current ELIP editor is Marco Argentieri who can be contacted at marco@vulpem.com 191 | 192 | 193 | ==ELIP Editor Responsibilities & Workflow== 194 | 195 | 196 | The ELIP editor subscribes to the Elements development mailing list. All ELIP-related correspondence should be sent (or CC'd) to marco@vulpem.com 197 | 198 | 199 | For each new ELIP that comes in an editor does the following: 200 | 201 | 202 | * Read the ELIP to check if it is ready: sound and complete. The ideas must make technical sense, even if they don't seem likely to be accepted. 203 | * The title should accurately describe the content. 204 | * Edit the ELIP for language (spelling, grammar, sentence structure, etc.), markup, code style. 205 | 206 | 207 | If the ELIP isn't ready, the editor will send it back to the author for revision, with specific instructions. 208 | 209 | 210 | Once the ELIP is ready for the repository it should be submitted as a "pull request" to the https://github.com/ElementsProject/elips repository on GitHub where it may get further feedback. 211 | 212 | 213 | The ELIP editor will: 214 | 215 | 216 | * Assign an ELIP number (almost always just the next available number, but sometimes it's a special/joke number, like 666 or 3141) in the pull request comments. 217 | 218 | 219 | * Merge the pull request when the author is ready (allowing some time for further peer review). 220 | 221 | 222 | * List the ELIP in [[README.mediawiki]] 223 | 224 | 225 | * Send email back to the ELIP author with next steps (post to elements-dev mailing list). 226 | 227 | 228 | The ELIP editors are intended to fulfill administrative and editorial responsibilities. The ELIP editors monitor ELIP changes, and correct any structure, grammar, spelling, or markup mistakes we see. 229 | 230 | 231 | ==History== 232 | 233 | 234 | This document was derived heavily from Bitcoin's BIP-0001. In many places text was simply copied and modified. Authors of BIP-0001 are not responsible for its use in the Elements Improvement Process, and should not be bothered with technical questions specific to Elements or the ELIP process. Please direct all comments to the ELIP editors or the Elements development mailing list. -------------------------------------------------------------------------------- /elip-0100.mediawiki: -------------------------------------------------------------------------------- 1 |140 | Title: 141 | Author: 142 | * Discussions-To:
143 | Status: 145 | Type: 146 | Created: 147 | * Post-History: 148 | * Replaces: 149 | * Superseded-By: 150 | * Resolution: 151 |
2 | ELIP: 100 3 | Layer: Applications 4 | Title: Hardware Wallet Extensions for Partially Signed Elements Transaction Format 5 | Author: Mikhail Tolkachev12 | 13 | ==Introduction== 14 | 15 | ===Abstract=== 16 | 17 | This document describes proprietary extensions to the BIP 370 PSBT Version 2. 18 | These extensions are for use in Elements Sidechains to hold the information necessary for interaction with hardware wallets and other offline signer applications having no network access. It is assumed that the lifecycle of the proposed fields is limited to a communication session between the host software and an offline device. 19 | 20 | ===Copyright=== 21 | 22 | This ELIP is licensed under the 2-clause BSD license. 23 | 24 | ==Specification== 25 | 26 | The Hardware Wallet Extensions complement the Partially Signed Elements Transaction (PSET) format, which extends the BIP 370 PSBT format. The changes are new proprietary type fields. This specification inherits a magic sequence, roles, and additional constraints from the main PSET specification (Partially Signed Elements Transaction Format). To avoid duplication of information, basic definitions from the PSET specification are not included in this ELIP. At the time of writing, PSET specification had not been issued as an ELIP and is available at: 27 | 28 | https://github.com/ElementsProject/elements/blob/master/doc/pset.mediawiki 29 | 30 | To avoid possible collisions with PSET fields from the main specification, a distinct proprietary field prefix "pset_hww" is used for the fields belonging to Hardware Wallet Extensions. For example, identifier of PSBT_ELEMENTS_HWW_GLOBAL_ASSET_METADATA is a sequence of 11 bytes 0xfc08707365745f68777700. 31 | 32 | The new global proprietary types specific to Hardware Wallet Extensions are as follows: 33 | 34 | {| 35 | ! Name 36 | !6 | Comments-Summary: No comments yet. 7 | Status: Draft 8 | Type: Standards Track 9 | Created: 2022-12-01 10 | License: BSD-2-Clause 11 |
{"entity":{"domain":"example.com"},"issuer_pubkey":"03455ee7cedc97b0ba435b80066fc92c963a34c600317981d135330c4ee43ac7a3","name":"Testcoin","precision":2,"version":0}120 | * Missing precision:
{"entity":{"domain":"example.com"},"issuer_pubkey":"03455ee7cedc97b0ba435b80066fc92c963a34c600317981d135330c4ee43ac7a3","name":"Testcoin","ticker":"TEST","version":0}121 | * Ticker is too long:
{"entity":{"domain":"example.com"},"issuer_pubkey":"03455ee7cedc97b0ba435b80066fc92c963a34c600317981d135330c4ee43ac7a3","name":"Testcoin","precision":2,"ticker":"1234567890123456789012345","version":0}122 | * Forbidden whitespace:
{"entity":{"domain":"example.com"}, "issuer_pubkey":"03455ee7cedc97b0ba435b80066fc92c963a34c600317981d135330c4ee43ac7a3","name":"Testcoin","precision":2,"ticker":"TEST","version":0}123 | * Duplicate key (name):
{"entity":{"domain":"example.com"},"issuer_pubkey":"03455ee7cedc97b0ba435b80066fc92c963a34c600317981d135330c4ee43ac7a3","name":"Testcoin","name":"Othercoin","precision":2,"ticker":"TEST","version":0}124 | * Non-sorted keys:
{"name":"Testcoin","entity":{"domain":"example.com"},"issuer_pubkey":"03455ee7cedc97b0ba435b80066fc92c963a34c600317981d135330c4ee43ac7a3","precision":2,"ticker":"TEST","version":0}125 | 126 | ==Rationale== 127 | 128 |
2 | ELIP: 101 3 | Layer: Applications 4 | Title: Genesis Blockhash for Partially Signed Elements Transaction Format 5 | Author: Jon Griffiths12 | 13 | ==Introduction== 14 | 15 | ===Abstract=== 16 | 17 | This document describes a new, conditionally optional global field for the Partially Signed Elements Transaction (PSET) format, which contains the genesis blockhash of the chain the transaction is intended to be signed for. 18 | 19 | A genesis blockhash uniquely identifies an instance of an Elements chain. Elements Segwit v1 taproot support takes advantage of this fact by including the genesis blockhash in the data used to sign a transaction. This ensures that signatures are different between chain instances and can be used to ensure that the expectations of transaction creators and signers are aligned. 20 | 21 | Code/hardware that performs signing may operate either with or without the context of the current chain. For example, Elements nodes are configured to run on a specific chain and thus when signing always know the chain they are signing for. In contrast, libraries or utilities that provide PSET signing may run in multiple contexts, and may not have a global state representing the current chain. In this latter case, the chain must be provided to the signer in the form of the new field this ELIP proposes. 22 | 23 | In the following text, "context available" refers to code having an understanding of the current chain as in the Elements example above. 24 | 25 | While this field must be included if the PSET contains taproot inputs, it may optionally be included when no taproot inputs are present. This allows signers with context available to reject signing transactions that are not intended for their configured chain. 26 | 27 | ===Copyright=== 28 | 29 | This ELIP is licensed under the 2-clause BSD license. 30 | 31 | ==Specification== 32 | 33 | The Partially Signed Elements Transaction (PSET) format extends the BIP 370 PSBT format and is defined at https://github.com/ElementsProject/elements/blob/master/doc/pset.mediawiki. This document extends the PSET format directly, and as such the document above should be updated if and when this ELIP is approved. 34 | 35 | The new global field is defined as follows: 36 | 37 | {| 38 | ! Name 39 | !6 | Comments-Summary: No comments yet. 7 | Status: Draft 8 | Type: Standards Track 9 | Created: 2025-02-04 10 | License: BSD-2-Clause 11 |
2 | ELIP: 102 3 | Layer: Applications 4 | Title: LiquiDEX extensions for Partially Signed Elements Transaction Format 5 | Author: Leonardo Comandini12 | 13 | ==Introduction== 14 | 15 | ===Abstract=== 16 | 17 | This document describes extensions to the Partially Signed Elements Transaction (PSET) format for [https://leocomandini.github.io/2021/06/15/liquidex.html LiquiDEX] swaps. 18 | 19 | In LiquiDEX swaps, transactions are (partially) blinded collectively, thus some extra information must be shared to make blinding possible, this ELIP describes how to encode the necessary extra data (asset blinding factors) in a PSET. 20 | 21 | ===Copyright=== 22 | 23 | This ELIP is licensed under the 2-clause BSD license. 24 | 25 | ==Specification== 26 | 27 | To avoid possible collisions with PSET fields from the main specification (available at https://github.com/ElementsProject/elements/blob/master/doc/pset.mediawiki), a distinct proprietary field prefix "pset_liquidex" is used for the fields described in this ELIP. 28 | For example, identifier of PSBT_ELEMENTS_LIQUIDEX_IN_ABF is a sequence of 11 bytes fc0d707365745f6c6971756964657800. 29 | 30 | This additional per-input proprietary type element is defined: 31 | 32 | {| 33 | ! Name 34 | !6 | Comments-Summary: No comments yet. 7 | Status: Draft 8 | Type: Standards Track 9 | Created: 2024-07-17 10 | License: BSD-2-Clause 11 |
95 | { 96 | "version": 1, 97 | "tx": "...", 98 | "inputs": [{ 99 | "asset": "aa...", 100 | "satoshi": x, 101 | "assetblinder": "...", 102 | "value_blind_proof": "...", 103 | }], 104 | "outputs": [{ 105 | "asset": "bb...", 106 | "satoshi": y, 107 | "assetblinder": "...", 108 | "value_blind_proof": "...", 109 | }], 110 | "scalars": ["..."], 111 | } 112 |113 | * Alice shares the proposal with Bob 114 | * Bob adds more inputs for the asset B and fees 115 | * Bob adds more outputs for the asset A, B and fees 116 | * Bob blinds the transaction, i.e.: 117 | ** draws at random abf and vbf for each new output, apart from the last one for which he uses the new inputs contribution and the scalar offset from the proposal to balance the tx 118 | ** creates rangeproofs for each new output 119 | ** creates surjection proofs for each (blinded) fee output 120 | ** creates surjection proofs for each A output, note that in general the input asset blinding factor is needed. 121 | ** creates surjection proofs for each B output, including the one from Alice, which requires the output blinding factor. Note that Alice could not have created the surjection proof since she did not know any B input when she created the tx 122 | 123 | This example shows why sharing the asset blinding factors for input and outputs is necessary under some specific circumstances. 124 | 125 | Adding input and output asset blinding factors, allows to convert LiquiDEX v1 proposal in PSETs, so that wallets can only deal with PSETs. 126 | 127 | However, in most cases, setting the asset blinding factors in a PSET is not necessary, and in such cases these elements should not be set. 128 | 129 | ==Test Vectors== 130 | 131 | Valid Asset Blinding Factor, which can be set both on inputs or outputs: 132 | 133 | Source values: 134 | abf: 3311111111111111111111111111111111111111111111111111111111111111 135 | 136 | Resulting record: 137 | key: fc0d707365745f6c6971756964657800 138 | value: 3311111111111111111111111111111111111111111111111111111111111111 139 | 140 | ==Reference Implementation== 141 | 142 | * [https://github.com/ElementsProject/rust-elements/pull/207 rust-elements] 143 | -------------------------------------------------------------------------------- /elip-0150.mediawiki: -------------------------------------------------------------------------------- 1 |
2 | ELIP: 150 3 | Layer: Wallet 4 | Title: CT Descriptors for Elements 5 | Author: Andrew Poelstra14 | 15 | ==Introduction== 16 | 17 | ===Abstract=== 18 | 19 | This document proposes a new wrapper around existing and future Elements descriptor types, which allows attaching a confidential blinding key to an ordinary output script descriptor. It introduces new syntax to support both existing SLIP77-style confidential keys as well as a new, more flexible style. 20 | 21 | ===Copyright=== 22 | 23 | This document is licensed under the 3-clause BSD license. 24 | 25 | ===Motivation=== 26 | 27 | Confidential Transactions involve the use of uniformly random "blinding factors" associated to every confidential output. 28 | These random values are secret, but must be known by the sender (in order to construct a transaction) as well as recipient (in order to recognize the received assets and amounts, and to spend the outputs). 29 | This means they must be chosen by the sender of a transaction and somehow securely communicated to the recipient. 30 | 31 | The way this is done is that confidential addresses contain the public key of an extra "blinding key" pair created by the recipient. 32 | When blinding, the sender chooses a fresh EC Diffie-Hellman (ECDH) private key, encodes the corresponding public key in the "nonce" field of the transaction, derives an ECDH secret between the fresh private key and the public blinding key, uses the ECDH secret to encrypt the blinding factors for the output, and encodes the encrypted result in the rangeproof. 33 | The recipient, when recognizing a scriptPubKey corresponding to the ordinary part of her confidential address, uses the private blinding key for that address in conjunction with the nonce field of the txout to re-derive the ECDH secret and decrypt the blinding factors. 34 | 35 | This document defines a standard way for the recipient's wallet to compute blinding key pairs. There are a number of requirements: 36 | 37 | * Confidential addresses, including their attached blinding key, should be derivable from a single descriptor without extra data 38 | * Wallets should be able to choose the granularity of their blinding keys, so that the revelation of private blinding keys may unblind one, a subset, or all, of its blinded outputs 39 | * In multiparty settings, each wallet should be able to restrict this granularity 40 | * It should be possible somehow to do public derivation of CT addresses, given only a descriptor containing (extended) public keys 41 | 42 | The current most popular scheme, [https://github.com/satoshilabs/slips/blob/master/slip-0077.md SLIP-77], does not satisfy any of these criteria, which limits its usefulness as we move toward a descriptor-centric setting in which multiparty addresses are common. 43 | 44 | ==Design== 45 | 46 | ===Overview=== 47 | We propose a new6 | Tim Ruffing 7 | Comments-Summary: No comments yet. 8 | Comments-URI: https://github.com/ElementsProject/elips/wiki/Comments:ELIP-0150 9 | Status: Draft 10 | Type: Standards Track 11 | Created: 2022-10-06 12 | License: BSD-3-Clause 13 |
ct
descriptor which wraps any other descriptor type in the form ct(, )
.
48 | Here DESCRIPTOR
refers to any existing descriptor, e.g. elwsh(...)
or eltr(...)
and BLINDING_KEY
is a new expression which must be one of
49 | * slip77(<64-character hex>)
which indicates that blinding keys for these addresses are derived via SLIP77; or
50 | *
which is a key expression as described in BIP 380, with the exception that uncompressed and x-only keys are not allowed, moreover single private keys are encoded hex instead of WIF; the blinding key is derived by a Taproot-style tweak of the key with the data of
.
51 |
52 | In the
expression, all key(s) must be compressed; x-only and uncompressed keys are invalid.
53 |
54 | It is permissible, and likely to be common, for a
key to be a private key (e.g. an xprv) even if the keys in the actual descriptor are public keys.
55 | Such a descriptor is termed a '''view descriptor''', and the blinding private key a '''view key'''.
56 |
57 | Later extensions to this ELIP may specify alternate expressions for `KEY`, for example to allow MuSig-combining keys from multiple participants.
58 |
59 | ===Drawbacks===
60 |
61 | * Because there is no sensible way to do multiparty unblinding, the blinding key must be a single key whose private half is known to all participants.
62 | * The use of "view descriptors" which are nominally public but contain secret key data, may lead to user confusion; though we argue it has similar privacy properties to the chaincode value included in xpubs.
63 | * Any party who has a copy of an addresses' view descriptor is able to see the blinding key and unblind coins sent to that address, or *any* derived address in the case of a descriptor containing wildcards.
64 |
65 | The latter point is the intended use of view descriptors, and is listed as a drawback only because it may be surprising.
66 |
67 | ===Specification===
68 |
69 | First, the ct
descriptor is defined as above: its string serialization is given by ct(, )
where DESCRIPTOR
is the string serialization of an ordinary descriptor.
70 | The scriptPubKey
corresponding to a ct
descriptor is that corresponding to the embedded DESCRIPTOR
. The encoding and semantics of BLINDING_KEY
are given below.
71 |
72 | BLINDING_KEY
expressions are one of
73 | * '''slip77''', encoded as slip77(<64-characters hex>)
, whose semantics are that the 64 hex characters are interpreted as the 32-byte master_blinding_key
in SLIP77; the scriptPubKey
for SLIP77 is computed as normal from the ordinary descriptor.
74 | ** These 32 bytes are the same for both public and private descriptors; they have no "public" equivalent.
75 | ** This mode is not recommended because there is no way to express this descriptor without revealing the SLIP77 key, which can be used to unblind every single output received by the wallet.
76 | * '''bare key''', which simply encodes a single key in the same way as the keys in
are encoded. The blinding key is derived from the address by taking the public key ''K'' and tweaking it to form a new key ''Kblind'' as follows:
77 | ** ''Kblind = K + Htag(K, scriptPubKey
)G'', where
78 | ** ''Htag'' is a [https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki#Design BIP-340 tagged hash] with tag CT-Blinding-Key/1.0
;
79 | ** the comma indicates concatenation;
80 | ** scriptPubKey
is the scriptPubKey of the output, consensus-encoded including its length prefix;
81 | ** and ''Htag(K, scriptPubKey
)G'' is the public key corresponding to the result of the tagged hash interpreted as a scalar or private key.
82 |
83 | Because the scriptPubKey is revealed on the blockchain, its role in the tagged hash is merely to ensure that blinding keys are not reused across multiple outputs, unless they are identical (in which case the reuse amounts to ordinary address reuse).
84 | Privacy and security are provided by the untweaked key ''K'', which is never revealed on-chain.
85 |
86 | In some circumstances, it may make sense for ''K'' to be derived deterministically from the descriptor data, rather than being chosen and specified separately.
87 | This reduces implementation complexity and the need to store additional keys, at the cost of turning the descriptor unconditionally into a view descriptor.
88 | In other words, users of this variant will be unable to provide external parties the ability to derive addresses without ''also'' providing them the ability to unblind coins.
89 |
90 | In a future ELIP we will specify a standard deterministic key generation scheme for this case.
91 |
92 | ==Backwards Compatibility==
93 |
94 | Using the ct(slip77(<64-byte hex>), )
construction, any wallet should be able to express its existing confidential addresses using this new scheme.
95 |
96 | ==Test Vectors==
97 |
98 | The following CT descriptors should be parseable and generate the given addresses:
99 |
100 | * Valid Descriptor 1: ct(xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJbZRkrgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL,elpkh(xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH))#y0lg3d5y
101 | ** Descriptor blinding public key: xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJbZRkrgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL
102 | ** Confidential address: VTpvZZYdbhbyVF3Wa99eMjgXhfvu4LS26dR2FwMfNXq7FDX73HZEsZr3VvgH9EDgQnYK7sP6ACKSuMGw
103 | ** Unconfidential address: Q5WHLVd78iAspUNvzuULvi2F8u693pzAqe
104 | * Valid Descriptor 2: ct(xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJbZRkrgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL,elwpkh(xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH))#kt4e25qt
105 | ** Descriptor blinding public key: xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJbZRkrgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL
106 | ** Confidential address: lq1qqg5s7xj7upzl7h4q2k2wj4vq63nvaktn0egqu09nqcr6d44p4evaqknpl78t02k2xqgdh9ltmfmpy9ssk7qfvghdsfr4mvr9c
107 | ** Unconfidential address: ex1qtfsllr4h4t9rqyxmjl4a5asjzcgt0qyktcafre
108 | * Valid Descriptor 3: ct(xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJbZRkrgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL,elsh(wpkh(xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH)))#xg9r4jej
109 | ** Descriptor blinding public key: xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJbZRkrgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL
110 | ** Confidential address: VJL8znN4XjXEUKzDaYsqdzRASGLY2KHxC4N6g5b5QvrNjXfeKp83Ci9AW2a8QzbZjpEffoy4PEywpLAZ
111 | ** Unconfidential address: Gq6kpy2HiNgsyQVpBsuBKAPRFiir23qKro
112 | * Valid Descriptor 4: ct(xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJbZRkrgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL,eltr(xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH))#c0pjjxyw
113 | ** Descriptor blinding public key: xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJbZRkrgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL
114 | ** Confidential address: lq1pq0nsl8du3gsuk7r90sgm78259mmv6mt9d4yvj30zr3u052ufs5meuc2tuvwx7k7g9kvhhpux07vqpm3qjj8uwdj94650265ustv0xy8zrdxdfgp8g9pl
115 | ** Unconfidential address: ex1pv997x8r0t0yzmxtms7r8lxqqacsffr78xez6a284d2wg9k8nzr3qxa9kvf
116 | * Valid Descriptor 5: ct(slip77(b2396b3ee20509cdb64fe24180a14a72dbd671728eaa49bac69d2bdecb5f5a04),elpkh(xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH))#hw2glz99
117 | ** SLIP77 master blinding key: b2396b3ee20509cdb64fe24180a14a72dbd671728eaa49bac69d2bdecb5f5a04
118 | ** Confidential address: VTq585ahVjWarEwg2nKQ9yYirmYs5F5j74CeYYA9cq1EZD9obm7hwpx6xqq3J1AY9YRaSavEMzYfr6t7
119 | ** Unconfidential address: Q5WHLVd78iAspUNvzuULvi2F8u693pzAqe
120 | * Valid Descriptor 6: ct(slip77(b2396b3ee20509cdb64fe24180a14a72dbd671728eaa49bac69d2bdecb5f5a04),elwpkh(xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH))#545pl285
121 | ** SLIP77 master blinding key: b2396b3ee20509cdb64fe24180a14a72dbd671728eaa49bac69d2bdecb5f5a04
122 | ** Confidential address: lq1qqdx5wnttttzulcs6ujlg9pfts6mp3r4sdwg5ekdej566n5wxzk88vknpl78t02k2xqgdh9ltmfmpy9ssk7qfvr33xa22hpw23
123 | ** Unconfidential address: ex1qtfsllr4h4t9rqyxmjl4a5asjzcgt0qyktcafre
124 | * Valid Descriptor 7: ct(slip77(b2396b3ee20509cdb64fe24180a14a72dbd671728eaa49bac69d2bdecb5f5a04),elsh(wpkh(xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH)))#m30vswxr
125 | ** SLIP77 master blinding key: b2396b3ee20509cdb64fe24180a14a72dbd671728eaa49bac69d2bdecb5f5a04
126 | ** Confidential address: VJLFGQ17aGa3WSVEVyxzDktD9SFixJjfSmqVq8xaWmR9X6gFbiF95KFwKA41PBhu3jNTxJFKTUphHL8J
127 | ** Unconfidential address: Gq6kpy2HiNgsyQVpBsuBKAPRFiir23qKro
128 | * Valid Descriptor 8: ct(slip77(b2396b3ee20509cdb64fe24180a14a72dbd671728eaa49bac69d2bdecb5f5a04),eltr(xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH))#n3v4t5cs
129 | ** SLIP77 master blinding key: b2396b3ee20509cdb64fe24180a14a72dbd671728eaa49bac69d2bdecb5f5a04
130 | ** Confidential address: lq1pq26fndnz8ef6umlz6e2755sm6j5jwxv3tdt2295mr4mx6ux0uf8vcc2tuvwx7k7g9kvhhpux07vqpm3qjj8uwdj94650265ustv0xy8z8wfacw9e5a5t
131 | ** Unconfidential address: ex1pv997x8r0t0yzmxtms7r8lxqqacsffr78xez6a284d2wg9k8nzr3qxa9kvf
132 | * Valid Descriptor 9: ct(02dce16018bbbb8e36de7b394df5b5166e9adb7498be7d881a85a09aeecf76b623,elwpkh(03774eec7a3d550d18e9f89414152025b3b0ad6a342b19481f702d843cff06dfc4))#h5e0p6m9
133 | ** Blinding key: 02dce16018bbbb8e36de7b394df5b5166e9adb7498be7d881a85a09aeecf76b623
134 | ** Confidential address:
135 | ** Unconfidential address: ex1qpasxxt9vv6tgfnvgzuuy9e3j9lryg6hawrval4
136 | * Valid Descriptor 10: ct(02dce16018bbbb8e36de7b394df5b5166e9adb7498be7d881a85a09aeecf76b623,elwpkh(xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH))#x6sc2de2
137 | ** Blinding public key: 02dce16018bbbb8e36de7b394df5b5166e9adb7498be7d881a85a09aeecf76b623
138 | ** Confidential address: lq1qqwkeuelr466ue5u8e0lz3a27q4yk93qnupry5h3q4h9pjpf8vrrzvknpl78t02k2xqgdh9ltmfmpy9ssk7qfvwt93dvuvssha
139 | ** Unconfidential address: ex1qtfsllr4h4t9rqyxmjl4a5asjzcgt0qyktcafre
140 |
141 | This one is a "view descriptor" which has a private blinding key but otherwise public keys:
142 |
143 | * View Descriptor: ct(xprv9s21ZrQH143K28NgQ7bHCF61hy9VzwquBZvpzTwXLsbmQLRJ6iV9k2hUBRt5qzmBaSpeMj5LdcsHaXJvM7iFEivPryRcL8irN7Na9p65UUb,elwpkh(xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH))#j95xktq7
144 | ** Descriptor blinding private key: xprv9s21ZrQH143K28NgQ7bHCF61hy9VzwquBZvpzTwXLsbmQLRJ6iV9k2hUBRt5qzmBaSpeMj5LdcsHaXJvM7iFEivPryRcL8irN7Na9p65UUb
145 | ** Confidential address: lq1qq2r0pdvcknjpwev96qu9975alzqs78cvsut5ju82t7tv8d645dgmwknpl78t02k2xqgdh9ltmfmpy9ssk7qfvtk83xqzx62q4
146 | ** Unconfidential address: ex1qtfsllr4h4t9rqyxmjl4a5asjzcgt0qyktcafre
147 | * Non-view Descriptor: ct(xpub661MyMwAqRbcEcT9W98HZP2kFzyzQQZkYnrRnrM8uD8kH8kSeFoQHq1x2iihLgC6PXGy5LrjCL66uSNhJ8pwjfx2rMUTLWuRMns2EG9xnjs,elwpkh(xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH))#elmfpmp9
148 | ** Descriptor blinding public key: xpub661MyMwAqRbcEcT9W98HZP2kFzyzQQZkYnrRnrM8uD8kH8kSeFoQHq1x2iihLgC6PXGy5LrjCL66uSNhJ8pwjfx2rMUTLWuRMns2EG9xnjs
149 | ** Confidential address: lq1qq2r0pdvcknjpwev96qu9975alzqs78cvsut5ju82t7tv8d645dgmwknpl78t02k2xqgdh9ltmfmpy9ssk7qfvtk83xqzx62q4
150 | ** Unconfidential address: ex1qtfsllr4h4t9rqyxmjl4a5asjzcgt0qyktcafre
151 |
152 | The non-view descriptor is the same as the view descriptor except that its private blinding key has been replaced with a public key. Notice that the generated addresses are the same in both cases.
153 |
154 | This one is a "view descriptor" using ordinary keys rather than extended ones:
155 |
156 | * View Descriptor 2: ct(c25deb86fa11e49d651d7eae27c220ef930fbd86ea023eebfa73e54875647963,elwpkh(021a8fb6bd5a653b021b98a2a785725b8ddacfe3687bc043aa7f4d25d3a48d40b5))#c2kx9zll
157 | ** Descriptor blinding private key: c25deb86fa11e49d651d7eae27c220ef930fbd86ea023eebfa73e54875647963
158 | ** Confidential address: lq1qq265u4g3k3m3qpyxjwpdrtnm293wuxgvs9xzmzcs2ck0mv5rx23w4d7xfsednsmmxrszfe7s9rs0c6cvf3dfytxax3utlmm46
159 | ** Unconfidential address: ex1qklrycvkecdanpcpyulgz3c8udvxyck5jvsv4j5
160 |
161 | * Non-view Descriptor 2: ct(0286fc9a38e765d955e9b0bcc18fa9ae81b0c893e2dd1ef5542a9c73780a086b90,elwpkh(021a8fb6bd5a653b021b98a2a785725b8ddacfe3687bc043aa7f4d25d3a48d40b5))#m5mvyh29
162 | ** Descriptor blinding public key: 0286fc9a38e765d955e9b0bcc18fa9ae81b0c893e2dd1ef5542a9c73780a086b90
163 | ** Confidential address: lq1qq265u4g3k3m3qpyxjwpdrtnm293wuxgvs9xzmzcs2ck0mv5rx23w4d7xfsednsmmxrszfe7s9rs0c6cvf3dfytxax3utlmm46
164 | ** Unconfidential address: ex1qklrycvkecdanpcpyulgz3c8udvxyck5jvsv4j5
165 |
166 | Finally, the following are invalid test vectors that should not be parseable:
167 |
168 | * Invalid Descriptor 1
169 | ** ct(slip77(b2396b3ee20509cdb64fe24180a14a72dbd671728eaa49bac69d2bdecb5f5a04),elsh(wpkh(03774eec7a3d550d18e9f89414152025b3b0ad6a342b19481f702d843cff06dfc4)))#xxxxxxxx
170 | ** Reason: Invalid checksum 'xxxxxxxx', expected 'qgjmm4as'
171 | * Invalid Descriptor 2
172 | ** ct(slip77(b2396b3ee20509cdb64fe24180a14a72dbd671728eaa49bac69d2bdecb5f5a04,b2396b3ee20509cdb64fe24180a14a72dbd671728eaa49bac69d2bdecb5f5a04),elsh(wpkh(03774eec7a3d550d18e9f89414152025b3b0ad6a342b19481f702d843cff06dfc4)))#qs64ccxw
173 | ** Reason: slip77() must have exactly one argument, not 2
174 | * Invalid Descriptor 3
175 | ** ct(slip77,elsh(wpkh(03774eec7a3d550d18e9f89414152025b3b0ad6a342b19481f702d843cff06dfc4)))#8p3zmumf
176 | ** Reason: slip77() must have exactly one argument, not 0
177 | * Invalid Descriptor 4
178 | ** ct(elsh(wpkh(03774eec7a3d550d18e9f89414152025b3b0ad6a342b19481f702d843cff06dfc4)))#u9cwz9f3
179 | ** Reason: CT descriptor had 1 arguments rather than 2 (no blinding key)
180 | * Invalid Descriptor 5
181 | ** ct(02dce16018bbbb8e36de7b394df5b5166e9adb7498be7d881a85a09aeecf76b623,02dce16018bbbb8e36de7b394df5b5166e9adb7498be7d881a85a09aeecf76b623,elwpkh(03774eec7a3d550d18e9f89414152025b3b0ad6a342b19481f702d843cff06dfc4))#cnsp2qsc
182 | ** Reason: CT descriptor had 3 arguments rather than 2 (extra data)
183 | * Invalid Descriptor 6
184 | ** ct(pk(02dce16018bbbb8e36de7b394df5b5166e9adb7498be7d881a85a09aeecf76b623),elwpkh(03774eec7a3d550d18e9f89414152025b3b0ad6a342b19481f702d843cff06dfc4))#nvax6rau
185 | ** Reason: first argument is a pk descriptor, not a blinding key
186 | * Invalid Descriptor 7
187 | ** ct(L3jXxwef3fpB7hcrFozcWgHeJCPSAFiZ1Ji2YJMPxceaGvy3PC1q,elwpkh(03774eec7a3d550d18e9f89414152025b3b0ad6a342b19481f702d843cff06dfc4))#gcy6hcfz
188 | ** Reason: single private key is WIF, not hex
189 |
190 | ==Acknowledgements==
191 |
192 | We would like to thank Leo Comandini for describing practical requirements by wallet authors, and to Jonas Nick for providing feedback on the cryptographic design.
193 |
--------------------------------------------------------------------------------
/elip-0151.mediawiki:
--------------------------------------------------------------------------------
1 |
2 | ELIP: 151
3 | Layer: Wallet
4 | Title: Deterministic Descriptor Blinding Keys
5 | Author: Leonardo Comandini
6 | Comments-Summary: No comments yet.
7 | Comments-URI: https://github.com/ElementsProject/elips/wiki/Comments:ELIP-????
8 | Status: Draft
9 | Type: Standards Track
10 | Created: 2023-11-08
11 | License: BSD-3-Clause
12 |
13 |
14 | ==Introduction==
15 |
16 | ===Abstract===
17 |
18 | This document proposes a standard way to deterministically derive the descriptor blinding key in view descriptors.
19 |
20 | ===Copyright===
21 |
22 | This document is licensed under the 3-clause BSD license.
23 |
24 | ===Motivation===
25 |
26 | CT descriptors as defined in [https://github.com/ElementsProject/ELIPs/blob/main/elip-0150.mediawiki ELIP-150] consist of a descriptor blinding key and an ordinary descriptor.
27 |
28 | Descriptor blinding keys can be chosen arbitrarily.
29 | This however increases the amount of data that the user needs to back up.
30 |
31 | Otherwise they can be deterministically derived from a BIP32 seed following [https://github.com/satoshilabs/slips/blob/master/slip-0077.md SLIP-77].
32 | This works for singlesig wallets,
33 | since the only backup that the user needs is the BIP32 seed (or BIP39 mnemonic).
34 | However this does not apply to multisig wallets
35 | which usually consist of multiple xpubs,
36 | and thus multiple BIP32 seeds from which a descriptor blinding key could be derived.
37 | SLIP77 also does not work well when there are multiple BIP44 accounts,
38 | as they will have the same master blinding key.
39 |
40 | This document defines a standard way to deterministically derive a descriptor blinding key from an ordinary descriptor.
41 |
42 | Deriving the descriptor blinding key from the ordinary descriptor means that multisig participants can avoid needing a key construction and sharing protocol.
43 |
44 | ==Design==
45 |
46 | ===Overview===
47 | We propose a new possible value for the descriptor blinding key
48 |
49 |
50 | ct(elip151,)
51 |
52 |
53 | Which indicates that descriptor blinding key to be used is a '''view key''' deterministically derived from the ordinary descriptor DESCRIPTOR
54 |
55 | ===Drawbacks===
56 | If a wallet uses this standard to derive its descriptor blinding key, anyone knowing the ordinary descriptor will be able to unblind all the corresponding outputs.
57 |
58 | Potential adopters of this standard should consider whether this behavior is acceptable.
59 |
60 | ===Specification===
61 | The following descriptor:
62 |
63 |
64 | ct(elip151,)
65 |
66 |
67 | Is equivalent to:
68 |
69 |
70 | ct(,)
71 |
72 |
73 | Where KEY
is a ELIP-150 view blinding key derived as follows:
74 | * If the top-level script expression is combo
, fail.
75 | * If the descriptor does not have wildcards, fail.
76 | * Future extensions that support multiple descriptors other than multi-path are not supported.
77 | * If DESCRIPTOR
is multi-path, expand to every single descriptor following BIP-389 rules
78 | Multi-path with mismatching length are disallowed, multi-path are derived in parallel.
79 |
80 | * For each single descriptor:
81 | ** Get the definite descriptor at index 231-1
82 | We want to use a scriptPubKey
that will not be used in a transaction.
83 | Otherwise it can be used directly by anyone to derive the descriptor blinding key.
84 | Wallets use scriptPubKey
s starting from index 0,
85 | thus we choose the last non-hardened index,
86 | which in practice will never be used in a transaction.
87 |
88 | ** Derive the scriptPubKey
from the definite descriptor
89 | Here we use the scriptPubKey
because descriptors have fields that might change without affecting the spending conditions.
90 | For instance changing the fingerprint of one xpub yields the same scriptPubKey
s.
91 | Using the scriptPubKey
allows us to treat such descriptors as equivalent.
92 |
93 | ** Encode OP_INVALIDOPCODE
following the consensus encoding, i.e. prefixed with its length.
94 | ** Encode the scriptPubKey
following the consensus encoding.
95 | ** Concatenate these two values; for instance for scriptpubkey 0014aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
, the encoding is 01ff160014aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
.
96 | * Concatenate all values computed before, obtaining scriptPubKeys
.
97 | * Let ''Htag'' be a [https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki#Design BIP-340 tagged hash] with tag Deterministic-View-Key/1.0
98 | A tagged hash is used to make sure hashes used in this context can't be reinterpreted in another one.
99 |
100 | * The descriptor blinding key is the tagged hash of the concatenated prefixed scriptPubKey
s, ''KEY
= Htag(scriptPubKeys
) mod n'', converted to hex format.
101 |
102 | ==Test Vectors==
103 |
104 | The following ordinary descriptors yield to the given descriptor blinding keys:
105 |
106 | * Test vector 1
107 | ** Ordinary descriptor: elwpkh(xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/<0;1>/*)#lg37z46y
108 | ** Derived descriptor blinding key: b3baf94d60cf8423cd257283575997a2c00664ced3e8de00f8726703142b1989
109 | ** Derived confidential descriptor: ct(b3baf94d60cf8423cd257283575997a2c00664ced3e8de00f8726703142b1989,elwpkh(xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/<0;1>/*))#tu4ggqlv
110 | ** Derived confidential descriptor (equivalent version): ct(elip151,elwpkh(xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/<0;1>/*))#m47kvl05
111 | ** First address: lq1qqt33kuqusp3amjam96zxg27wvg2ewvl69h3equtck8lk8349vrxt28w2wqel8nstvtmefmexkn9zg5hhku2u7kr9k068fk338
112 | * Test vector 2
113 | ** Ordinary descriptor: elwpkh(xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/0/*)#xshkmp3l
114 | ** Derived descriptor blinding key: de9c5fb624154624146a8aea0489b30f05c720eed6b493b1f3ab63405a11bf37
115 | ** Derived confidential descriptor: ct(de9c5fb624154624146a8aea0489b30f05c720eed6b493b1f3ab63405a11bf37,elwpkh(xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/0/*))#34lpke0s
116 | ** Derived confidential descriptor (equivalent version): ct(elip151,elwpkh(xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/0/*))#y0su9u33
117 | ** First address: lq1qqwv7x220qlm8kwjewuwcdl2c88n202jx4ug7fhjdj3xt25my2zq0w8w2wqel8nstvtmefmexkn9zg5hhku2u7gc263jye380e
118 | * Test vector 3
119 | ** Ordinary descriptor: elwsh(multi(2,xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/<0;1>/*,xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/0/<0;1>/*))#fmdhs428
120 | ** Derived descriptor blinding key: 7fcc1b9a20bbf611d157016192a7d28e353033cfa6a4885b3c48fa5ff9ce1881
121 | ** Derived confidential descriptor: ct(7fcc1b9a20bbf611d157016192a7d28e353033cfa6a4885b3c48fa5ff9ce1881,elwsh(multi(2,xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/<0;1>/*,xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/0/<0;1>/*)))#95nx0s57
122 | ** Derived confidential descriptor (equivalent version): ct(elip151,elwsh(multi(2,xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/<0;1>/*,xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/0/<0;1>/*)))#r5qqsf3v
123 | ** First address: lq1qqgf45fhn528h6ermjvlfu38mquw64y8n9pklwww7nzrv280rjd6uat46xe03nxat42fqavhf5edmmhy7yk0e4hvrs4eackgkyjw8su877ktyl57pnjfu
124 | * Test vector 4
125 | ** Ordinary descriptor: elwsh(multi(2,xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/<0;1>/*,xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/0/<1;2>/*))#cagw3lzd
126 | ** Derived descriptor blinding key: ff0a08050417f0ca95fb6ef7df979ae464739cb79b8c8f4b05408e0ac681a527
127 | ** Derived confidential descriptor: ct(ff0a08050417f0ca95fb6ef7df979ae464739cb79b8c8f4b05408e0ac681a527,elwsh(multi(2,xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/<0;1>/*,xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/0/<1;2>/*)))#5ym2hpzd
128 | ** Derived confidential descriptor (equivalent version): ct(elip151,elwsh(multi(2,xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/<0;1>/*,xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/0/<1;2>/*)))#ft7v5az2
129 | ** First address: lq1qq0ccdus59lma7pyqjc0gfcgnc9pwlwmlg23el8zame3evv0mslzes04l80049f6jdn4ml26n7c4aq5gqslfzx263zeww6nsrtu3udnm4nclecdvua9v5
130 |
131 | The "first" address specified above is the address at index 0 from the first single descriptor (if multipath).
132 |
133 | The following descriptors are not supported:
134 |
135 | * Invalid Test vector 1
136 | ** Ordinary descriptor: elwpkh(xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8)#5putv8ts
137 | ** Invalid confidential descriptor: ct(elip151,elwpkh(xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8))#hf047rv6
138 | * Invalid Test vector 2
139 | ** Ordinary descriptor: elwpkh(03d902f35f560e0470c63313c7369168d9d7df2d49bf295fd9fb7cb109ccee0494)#f9x8raer
140 | ** Invalid confidential descriptor: ct(elip151,elwpkh(03d902f35f560e0470c63313c7369168d9d7df2d49bf295fd9fb7cb109ccee0494))#3fcvdxu3
141 | * Invalid Test vector 3
142 | ** Ordinary descriptor: elwsh(multi(2,xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/<0;1>/*,xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/0/<0;1;2>/*))#dvazw5jp
143 | ** Invalid confidential descriptor: ct(elip151,elwsh(multi(2,xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/<0;1>/*,xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8/0/<0;1;2>/*)))#gkrp8f5z
144 |
145 | ==Footnotes==
146 |
147 |
148 |
149 | ==Acknowledgments==
150 |
151 | We would like to thank Jon Griffiths for suggesting the idea of deriving descriptor blinding key from the ordinary descriptor.
152 |
--------------------------------------------------------------------------------
/elip-0200.mediawiki:
--------------------------------------------------------------------------------
1 |
2 | ELIP: 200
3 | Layer: Applications
4 | Title: Discounted fees for Confidential Transactions
5 | Author: Byron Hambly
6 | Comments-Summary: No comments yet.
7 | Comments-URI: https://github.com/ElementsProject/elips/wiki/Comments:ELIP-0200
8 | Status: Draft
9 | Type: Standards Track
10 | Created: 2024-06-19
11 | License: BSD-3-Clause
12 |
13 |
14 | ==Introduction==
15 |
16 | ===Abstract===
17 |
18 | This document proposes a method of reducing fees for Confidential Transactions.
19 | It specifies the calculation that wallets can use to determine the discounted fee, as well
20 | as changes necessary to the Elements node for relaying and mining these discounted transactions.
21 |
22 | ===Copyright===
23 |
24 | This document is licensed under the 3-clause BSD license.
25 |
26 | ===Motivation===
27 |
28 | In Elements, Confidential Transactions (CT) are approximately ten times larger than ordinary explicit transactions.
29 | Output amounts are replaced with Pedersen commitments, and they include an additional asset commitment and an ECDH ephemeral key.
30 | Outputs also have additional witness data: a Range Proof that the amount value is in a valid range, and a Surjection Proof
31 | that the output asset matches an input asset.
32 |
33 | Since they are larger, CT require an order of magnitude higher transaction fee than explicit transactions.
34 | This means there may be some incentive for a fee-minimizing actor to prefer explicit transactions over the privacy gains from CT.
35 | In order to incentivize CT, this ELIP proposes a policy change in Elements that would accept and relay CT at a discounted fee rate.
36 | With this discount, fees for CT are in the same order of magnitude as explicit transactions, and there is less incentive to use explicit transactions.
37 |
38 | ==Design==
39 |
40 | ===Overview===
41 |
42 | A new calculation for "discount virtual size" (discountvsize) is proposed.
43 | In explicit transactions, this is precisely the same as the transaction's vsize. In CT, for each confidential output in the transaction,
44 | the transaction weight is reduced before the virtual transaction size calculation.
45 |
46 | For wallets, this discount calculation is used during transaction creation for fee estimation, presuming that the connected Elements
47 | node has the respective setting to accept and relay such discounted CT.
48 |
49 | For nodes, this discount calculation is used during mempool
50 | acceptance validation and during peer messaging when determining which transactions to relay.
51 |
52 | ===Drawbacks===
53 |
54 | By using the discountvsize for fee calculation, discounted CT have a lower ''real'' fee rate than the fee rate specified during
55 | transaction creation. Currently, the block assembler first selects transaction packages with the highest ancestor fee rates.
56 | This means discounted CT will only be selected after explicit transactions and undiscounted CT at the same nominal fee rates.
57 | The proposed solution is to change transaction ordering in the block assembler to fee rate according to the discounted virtual
58 | size. This means the block template no longer maximizes fees, which is considered an acceptable trade-off for prioritizing CT
59 | privacy with reduced fees.
60 |
61 | ===Specification===
62 |
63 | ====Wallet====
64 |
65 | Wallets can construct their transactions as normal, with a placeholder amount in a fee output. After filling in dummy signatures,
66 | the transaction weight should be calculated according to BIP-0141BIP-0141: https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#Transaction_size_calculations:
67 |
68 | Weight = Base transaction size * 3 + Total transaction size
69 |
70 | Where:
71 |
72 | Base transaction size
is the size of the transaction serialized with the witness data stripped.
73 |
74 | Total transaction size
is the transaction size in bytes serialized as described in BIP-0144BIP-0144: https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki#user-content-Serialization, including base data and witness data.
75 |
76 | To calculate the discount weight, for each output:
77 |
78 | * subtract the weight of the output witness if any, leaving 2 weight units that encode an empty witness
79 | * subtract 96 (24 * 4) weight units if the amount is a commitment. This is the difference between commitment (33 bytes) and explicit amount (9 bytes), multiplied by 4 since this is non-witness data
80 | * subtract 128 (32 * 4) weight units if the nonce is a commitment. This is the difference between commitment (33 bytes) and no nonce (1 byte), multiplied by 4 since this is non-witness data
81 |
82 | Then calculate discountvsize as (discount weight + 3) / 4
, and set the fee output amount to chosen fee rate * discountvsize
.
83 |
84 | Fee outputs can be ignored for the purposes of the discount calculation, since they have no witness or nonce, and the amount is explicit.
85 |
86 | =====Example calculation=====
87 |
88 | Transaction from LiquidV1https://blockstream.info/liquid/tx/221c8a8bb81d1e33f3b6556ec9eb10815469ff02fd4bb4dd5127442eaa16d988:
89 |
90 | This transaction has 2 confidential outputs and 1 fee output.
91 |
92 | Weight: 10536 WU
93 |
94 | * Subtract first output witness (4277) - 2: 10536 - 4275 = 6261
95 | * Subtract 96 for amount commitment: 6261 - 96 = 6165
96 | * Subtract 128 for nonce commitment: 6165 - 128 = 6037
97 | * Subtract second output witness (4277) - 2: 6037 - 4275 = 1762
98 | * Subtract 96 for amount commitment: 1762 - 96 = 1666
99 | * Subtract 128 for nonce commitment: 1666 - 128 = 1538
100 |
101 | Discount Weight: 1538 WU
102 |
103 | Discount Virtual Size: (1538 + 3) / 4 = 385 vB
104 |
105 | ====Node====
106 |
107 | Nodes should add a new configuration option to define whether they accept and relay these discounted CT.
108 | In the reference implementation this is called "accept_discount_ct".
109 | When this configuration option is enabled, the node must use the discountvsize instead of vsize when calculating the
110 | fee rate for acceptance to its mempool, and for responding to inventory messages at its peers' given filter fee rates.
111 |
112 | In the block template assembler, ordering by ancestor fee rate should also be changed to use fee per discountvsize instead of fee per vsize.
113 |
114 | ==Backwards Compatibility==
115 |
116 | Transactions at any fee rate, or even without a fee output, are consensus valid on LiquidV1 and can be included in blocks
117 | by default in Elements. At the current default minimum fee rate in Elements (0.1 sats/vb), discounted CT as specified above will
118 | not meet the minimum fee rate to be relayed by un-upgraded nodes. As long as the discounted CT can be relayed via upgraded
119 | nodes to a block miner (or signer) node, then it can be included in a block. This becomes easier as more nodes upgrade to
120 | accept discount CT.
121 |
122 | The following table outlines if the different transaction types will be relayed by un-upgraded nodes, and upgraded nodes configured
123 | to accept discount CT:
124 |
125 | {| class="wikitable" style="margin:auto"
126 | |-
127 | ! Transaction Type !! Un-upgraded Node !! Upgraded node
128 | |-
129 | | Explicit || Yes || Yes
130 | |-
131 | | Normal CT || Yes || Yes
132 | |-
133 | | Discount CT || No || Yes
134 | |}
135 |
136 | ==Reference Implementation==
137 |
138 | https://github.com/ElementsProject/elements/pull/1317
139 |
140 | ==Alternate Implementation==
141 |
142 | https://github.com/ElementsProject/rust-elements/pull/204
143 |
144 | ==Test Vectors==
145 |
146 | * Transaction with 1 input and 2 outputs: 0200000001017b85545c658d507ff56f315c77f910dd19cc9ceb7d5e1e4d3a3f8be4a91fe7440000000000fdffffff020bb6478c61c8f5f024ded219c967314685257f0ded894eaf626a00843a6ab80412091ee78237e38fb36c8be564ecd76e65f743065522f38f838367680ed7287b459103aabd97d4c8f3eac9555edfd2a709370b802335da478b6578501f72a4d100482716001455f4f701eec6059f956a40335e317a96a5e87ab5016d521c38ec1ea15734ae22b7c46064412829c0d0579f0a713d1c04ede979026f01000000000000000e00000000000000000347304402205d62bc013832eb6a631fe0285c49b7e27846e03189a245bec8f86346382282a702206c6e839b4b1d79d74662e432b724671402a6cfa2287911677c7061a3a32abe34012042c6504afda18a302bbf935f1dc646f71872a9a2fb5ed9e0cffb64588fd0d0a865a9141243397ee5e188bdcd17c9529c1382c7f8bc0fe987632102a3cd0d865794542994737e776dc3827a046c02ea2693f1d1f64315b3557bbb8b670395f72bb17521034a2e0343a515cf7d4a583d05bec3ee9fc16758cae791c10064fa92d65672d1fe68ac004301000177ce2a14a4f9e556fc846219827e1bc584caf9ef35e761dbf1f961a89b8285bde8fbe242c6984dd28719a792cd2e63535287db9a3b1fc4e4c5ae28cc5e8973d0fd4e10603300000000000000014cf45a01f0036bec883cdd4d5d8de1d7b3f2ec125733ce2e123ef3ff0085c50fd1b8cd3101c24fd8fff0bab803cda813aad9645ca6714ce768da75da09b58851585551c425e729d6faf4186a6659ea107f4ef35cc458dae565f1337af46cde218563eb3a756dc5d532717cc775fc0d04fbf4492070eb3cd9943a12fd07939d69a71090871e1ddf8fe716e2bc3f3364783cdb1d6a704325ca6c4334171563ae7bfcc9766ab848a65f47973753b2758b4404f17e54527080cfb980d1227f70cc0e77212d06aea909c7f2ac38f4a75c387464f8b70e33061f017a6fbbccf0673d08aebae2a1ce6cf9dd8c98791b1f4d653788b2ed6dd65cf9795eac568744e386d68c89d973ca079298f8d292b6bee71fad94a0f83aaf070ccfeb6c6de20baf8c6f1083dcdd539fae6ed74832100ea7c07296c0af2201523c3abf8b784ca8a235556d5bae668f17d9a353fd49dbae623ca44830a8fc4963419e49a9dc99bf87ea0414be3b43a6eab8ce54695d66887b261c08252a501d0c78d30be1ae3fc10f557f4d228ef38da496b22c5fa79d92e2c190b9d31f286dc0e3c8489fcb8e0603f8b93a6eb1ec726a7e0015e70407da186d85b290b054747276a8928443e1108cb67738d156787d20553c39fa0449f95addbf42170fdab8107d1f93fcd841964b6e6c4c140d0c4ed1463835e603f5012a4aafd5b038ceb9b4a5b7e2688cfd8c4f2bfafaf0bb5bb1aa7a7f13bd47ff3da57c4c88b741fd9ff97abc23d4047f690d59c4c67494f47125fe0f626ad409a92d72907ad0b1762b5271f474fa552d9139fcb1103db24f7a29726a5e41a6dbc43590c14a62eb1b2aa0f160134c42c6c87c696e7c42546bb72f9f531729555d01c529570553aeec70709c3a4f9aacf810d5018f776af48b93eff8e120242105c06a32e64bfc825fde488c99d5845adba2cf349717f64e488852cca73cc5813b7872f7e89d24b4bfafdf75faa368375d5bfdd8b8a7ad641703cbff131616c77e79d8f78c5fe63810781db44fb1fa5cc9387cf0de6807d1a3d5e3d8f9ec7418bbb1d4e10b1fcdb300abd8625b4e24842f1f4c4e567fe9f8c6e9d314757d4568889bccc740fb36f0270804cc11c0044093ab9586ed034cd1eb70bacdedd573750794f0286dfb91c91308e507147ea8e8534c655b931f4e68543e93c57cf2f2159e021739943e40c0dbc8a68193218d40d71e0956b00b4a01fa9c06e67ea55e0213fab48a8dfcf3a047e8c438e7c94fc195026cec82ad532e2aa5970a9fe6c03d9088d0ab45e0b9c7bf9597bd2db93ef7d7f139c291f59e03cda1a5f9a793eb7ec6d50fa9482b712500b5e5a780319769836f7053e3c5a3276a7d65467578a7fbf9079fb5c6bb1b0558acbf3cd896644d42a7b0fd87b12b571b3d8122b1c254750bf9b097d0ec5ed31f9af7db9571f706f5909f0ef2fdcdb255a0795f5c28b70fd1d25b74eb2524ae8f47756875ff439a2b2769adc844312c4ac7bde16b561e62ee3069d25718bf6c2e11ffbb83c863a51c52ff4ead581dd6b1ff0913905163683b97ecbad003a1c71469050eed5ad79e9bb44179b90b8e6b0e6a61a0ed4e919cb96c2615b61cf93905adc3e6e2a127bd661f05e928a45bc1c0599c41450dea0182043b977fcfcf3620f765d3aab13cbe684028dc78a4bd02324427379735934ab4cb821623f49e3af05391c1b7acfe8be33c9201efeded50838ff216d6744d61e8d1d600260c8f7275a46764ac9392132f0b3661e5e92e9daa87b9329d9c89353f40a130bcf8611cce25335f9f1c1208ae1bdc47d96c3f83170a7d27367a043debdfd0e43776d330d1f7a806b32c4363d1dca14715dae4f4d1c99a92673954094e61387080353974097adfde15de4009caa28d42703fdb56fcdac47bd9c5e3bad2fbf90b4a3fab4d89a9933e445ba85f759cc149101f5045a6f3a6d741424318249d96277cea3dc0c4814763d727c72a1867618ac05e5ff103b985cc6f78829bae92794680a51c4b7f7f8b88e39ddd4471890914594f3f03ae668d501732ea77b3eb1fb38b5ad9efdac8775e0995c60a3949e84d2298ea3463aaa16d5ff633da654463e90004915ccc19663c87e006fcd05e904b85b71428d79913e3afdecb7ad51a66f7dcb738d028b62b307025d524320dbe064330da5cbd70467635cf492197c7be3513363b4000bf176827011b2894d33dc9d806b2526a6e91cc1cf0582c5330484b8d48be4855c1859a5b20cab6d08d95b42b57fc709dcb637ba9c6e70b72c473af88ebe8723fe94a0d5ee5d483f19c3b2aade19bafed774b786c0d24383fe0f71c085655f4bd78cb36da83b5429576576c0718b4549efe5b8f602c543c3a8e3d86f19b70d6be1fb39b7cbbac6fcf6d80d69c00ed44dbed1b8555593bd6dcf9ddd519f9325f6faa146d4b631cc6ee418ef9d07a0036fb26a792e7733ec0b58d9f0ebba9ea9493fa026bab62f70381e534c8c3b349be651e9fd5d472b3cbf8f7e912b7030a1992df35e17f4c5aa54f1632464a7c3b0dd133da8d436205bf45d8ded924e35b366803ee52a3d1c85d9f4f976785270dafb63d2cd5052328ed2e5381e9a6e9d8409675c2a9a43c74b07e8a3df8043b2b6d42832cabfcd495b8b30727346990fbc79e436d7ba4d7035603ab98532c5497ef493511e498b1b9c5ff413e919ab6f3cd6acc472f6a39ad0a8c9677ac9a5380a6bebbaaf13a114d097efbf140acad7edecc758bb070fa0b88bb0646d3bed911414a3f10b12bf8372d66f4525f9a8a66d7bf2b5d364119a687e5f416511c27659cf70969863ed7f80e80a4f2e55bf25721e1ab415305b66bfc25b9630a265b553d3e806807f23ec1e2a5f657dbd73a4a36e95e6616faa6aefc5143ca29b0e4bc9eb1042d99c74115d96a2eec5e7fb8c3f598d4df8fa8953e96689651a705dd3f385cd27e0173baca570ce53001cdb002e4476e6af47b9a891f84f7c1c472cce3cd4a70a40c298819f6d75e6adac193798c740c9f5f57fee4df5d140cce8ee4152c17784899003dc000cd2e7c7f23e74da085b254e0843d97d147e44ab3ba12e308925fc6ab0460c7ceb107b0900cef5ff939bc3fe5640f0bb11597c561be275fc8b5b85f5e38a3c12ea26b5b7b32e407685db70d16a3ce51043d4009a647fd3656a54adcbd4d1baa6d89881973fe32faf071123de1712e85db628bdd987566b362845d0c5f818547ec2d1f7c668cae44f0bec74c6663134dd0273c3363f31901903e4e976a447af96f6f521059fb6b892a0599cf7aae457df3aed72f1f55e145332c91430a2f8184bb917d317f8d9c4b6769b9a3a0ac5baea88b39b8f7662ecc16585e7166f61a948f48e6d30c2cfd82820cccdf5e722db2156bd848ea4d13c92544d1d9064414a305215a8271631ffebf08cdf0bcbbbd939f78eafec0d7238bdb90f211d6c44589187d1a501eef7d0b6118e028afcf76ffda95a43e2211206d9d50d34c3e33a6c991952ccd73e722802a14227692f037bba585e73cb9a6cd7556f9ec2158f197a51e3884afb8e59eaa8e7ac3568d88b27b2a5ab8cd72648193ff6068e4d481c58c117e2adda564d5a49f6b992ff6f938acb283e7baf704c71861d60b263f6c6684d7544878b7aca942af8b3a70ae0def309b68fac2aed2b11ba753d7b47f7369805e5b3b9b41d22196e2cc098ece59bdf5231b03fba8adae08fee227a582490b0db34c115620c72afb6fcb507397d1333ea19e7969b729bc2733e6546d2d9f3edb08f9c74201f9ed4e3fcb446cc3fd688b1345e97b32492c9173fa71df2772bd825506ddd6447e9f9e8ece0ffb860e1c755bcf2400deef094219795d4ee84acc34dedc9a3b3adf7fc81733bc511b8edcb54769400940b53471d8e82cb82d9967a97297bdd87f165968ea046291234da176efd20889aa4c07179df83cb500b40bdb96b0c27f2bfa57353268b776740432d29f1761fee77755c7b219def785a42b683e1f70240ec45cdf660e894d4fb541d0511547c9a2c503cf605d72ea7f2abaee4e8adc222a82f4b86c34ad8b25e2932df02f0090d2dbf8817c44659b1245d5579277ad406c538914f90dbaefdd110c5ca0d63a24706cd51096ec19f819c446c9fcb55b777ae633f0257dc4d1b293e6ef68ea7867d852058212a0a9ace9442422a638f73dfb14cc4354b6481ee6591037e7287e962037d963b38a7e4ec12b30e0f6e0ee4d8c30d288e99e22e43b4c795c51d66cc4225c5cab3685b1b3a6fd3a82dfc355634b347cc4f4e55413728fb67fb9f34d3f7e4ecce3254ea843ab361b0f652faa9e54470e3e414c1bb2593e36d88109c36dfab505a16c19152fe021de608c6b3d924c981231ea9cf1cf8c93e53f0df78033e81fdb578a45b7dc4f3f0f68feedc78ec7c347f91a0464bccd58aa2fc11016e88cbaddfb22112edad752792af12fa550be3e6f15d69a6a9d547ab5381b93c58c12753b8085d9e17ed1f2519cc5cb756e3777ea9f8e49a6141460f8f6ced8d12d13d950691479e1207ed35ab71554122beb215a0fb6b34b90784f4be6bd6fbf93daf9d3bc4640bc52a662e750ce361c12c1bfa2ca4e2c784cbf70c406587b2ebd69faa7a891aca63d600247ad7dde426c1ef4e3b22a072ff8eb69c1b1cb30c605112786546c48cf1c4821b5bc0d0bd44ba83b05656b6e19a3d1a76931d983dd39efcc64298e892858e847e99519c1fa25b1998839788c5852b94202d803639d69058604374f76769670a60269dbc0688cea2d9d8672212b93ca501fbf6f7dfefad058e4bd0e0da1cff41b2f408c980f29a49b03efa9e3edef091d7df7529b6b5e8f7d43d103681cd7c38d02a431b15d539e9a3cf44dc71621664e756ad6404ba185b5e20c82760c488fde4253fb52ab850484a082e7ca275f475012be9c8d16d6b4a2c9d863440d5e113d18bbf42f128462764a99ca90af4fde890aee138fe4cbb45658eacd9d38c8a1fb4499c043cc25af87e6a650f38149ab018cc49f50bbd085e2a0ba3eeecde5764f7997748a660593191977792d7176e4c2ff0113d67b9abe8fbc10f364c6fa68e52a455aa56ff15099c6efb6b5812972380d5b8e256b0feb1190835b7d076744c1b5b738c710a07a32676a15d96583e89e39eb4ff08cf02c6e2ad540c2b66299afe01bf2e50c81465a04d229a07c58ffd25a6cd9288110045526b376548d373273e6227d117d491020fd68e366ed697a0d30a5bdff25fa9a5800aa534a3669215dfa8f30960f142a8ae7ffcb654ca60aa7dc8a586670f9db37d05644ff5f934785c5433e605f3fbd0340e168511e209a0aedd8b18f3b948eb58051136d155f53b0e2e027361330e005f83f3a72dcc5d9161dd4b1e6abd16635dc0887dcc833a1fb59c10e0b8bea2536e7acd58d5e11179d13a24dc4292624c527266351b9a48893b956ffe545c8d2c1563805addef2a82134c9c686449d83471f22c1e14601895e854a5f854230e4fb4ed4f9a7ee22e83234be6c5bb19d200c16543468f186ae11cba84ae1aeda5136f7f5b380d02ddb9cbe2c5f5bb39138fa29b2ceb549d2e337eba10171fc237473351cf8e5989c193ef0100c75778ad0c05b64b614067c9a70680c818a566c4ba5e2991eedfe165199a55b0bef1333988f2add167e268db389c2d25bd85eedff9e6851e3df84c9e41128b5a76869c086fcf9275b1d51af02e4a92b66850785319dbf004a29594e32d12ca42da69fac69f886f963409ce1d4514d1ab9e915e071887e7f316b15014d083769afea374e0771f74f632db5ed7d7352546ed686e3ee161cd263dafc2acab74a67a5721f923f9b07c647c2a04f7d1c2f831d4319a60b16ed4c995e35ccbc291ff647a382976ba5a957547b0000
147 |
148 | ** Weight: 5330
149 | ** Virtual size: 1333
150 | ** Discount Weight: 863
151 | ** Discount Virtual size: 216
152 |
153 | * Transaction with 1 input and 3 outputs: 0200000001016714c80ba611a345e8b7e47bf44bedbba5df9636badb1fecf44d37918151231f00000000171600142a5ffa945facb956a0735754ef229f0a3dbc507cfeffffff030adac3008948f64d4861dd09f4a162471c147355e9207ea2a1b9d85888818ba544095808635fe317c5a2d3c8f4f4f55cc2e15bbc7412580286176b219a2423ff35f402f7b410f20603645b24853b11c92e4fc4d2fbc29538e07414f718b57a94fa7809220020ead057aea19872f24e7bc87a7c4de7801d263f61702be1b96492164937934dd80af9266dc7ba531df4900b6df9fc83520973e1f27599ce83f082d9f9e1922773d109afcffbcfeafee86caf0c03394c63deb86310219b9b1f6a91c2f34fbf984a6a50030df0e697a8436f4720bc94c31bd0ae2436a799345b86b9ef4980e4061d86aded17a91480d0f3a425716fb15f51ad2e90fd7d3a73f34b8c87016d521c38ec1ea15734ae22b7c46064412829c0d0579f0a713d1c04ede979026f010000000000000105000000000000000002483045022100e9ac5c4a9ecacab3aeaa7066b4f6963130746cd44104590917d46b228fe3c5ce02201dedaaaea863dd5ec6a6ccc5730e319b31747d1931482d747e74a904652a35ee0121026c46c654b10e15a854ded29a6dd6f7b32273cadc4cc7492d5ef0a1115491abc60043010001a96741c758c602bc4068eb3164cb6589c4333b8d36d24f79c395311f1f881ac78f08884ba4a91bd7a8be574762074b1429f9eecdb1f1a07ac5b7547456de4a5efd4e106033000000000000000147df5d01a94c3f9b75091c2f44557ea253712e2b18c4817ab849090386719db2e485008f7c325a5281a405fad38ef2169a76b5567e58fb6d69a46372e51d9b6d73475e5505930687c65ed3dd0925ec05e64d19b9e482d359ddc9b559708a2dfc4a4820d8e9d2f9149fc8ba60769657d9bb0a6aca2a48bea530e22c4f92065f90d5c5ef811b7d79d031224add43d73d6c5c94cc3d45c21421537c090815a983dcd9b989c6caeb78e0b5f1fc526b68b5bd519873f85bd1c22a987681c43911c470ad817705eb8c308bba3e0c395eeff2a3aa85102b3b41fee94e34dd88f76d324e457e0e04ff9f7d00a14e67a9daac27bae3d2c8db35728249849022c5decf7c93093dc127bcc12430952d31bef6772b2817bb7f0b9ef77c06a9f5080d645c994df87b47e9c4c7d9794c2b9c5574e84be85be716bfcca298821ad1dbe794c2656b98b1326b29a2831cf99445caf48944bd6d728316817b5914653ec441ed4e4ecf5f5ec65fd2fbb4044541f9c719ad227c3b7705df1815f97003082a5374165b1e388073884c7e30da5ff40e88a84f9fc0aa678c896447ebf5ad3d7921d988184e66447951d9d9bfb182d2c36c7f02b65f8e265625bee3b0cc9e7208bb9605aec95e83b87e6a75ed7cee206cc323945c3979f74a317ce093b8284a22afa3bc612ad158c304daeb4d68fc9e08b83ea61ebdc49d47465756444f81e64b556833b433a9cd8c6e521aa2acd91e250b2b78f1bff1a9c246f4b8bd0a1c5af58ec877152fd7f5ca98150ea72c2e15f57fa0b80f472ab40b403e52ab5989f24288b968e808a07fd2942b1e1aba6e40ec8ca8ae8ebcf8d180cc481f8d563f6ec94b29e738b99ea9253c3e3aa4056647e0fdcd1dfbe22445044cfe4ac6c326d48dd440a35f4339b5b129fe40c2223afdc62f0aaa6bc9cc8f5a72e0c2ad94bcac54fd51f220c0352ab8fa56d54f49137c96437678dc1828ee5c0dd20ceb47d4637545b1665fb5b8382dabaf94a3a4e4103038fb06dd4bbc704f9a315800d07e93eeaecc0cfe13a0850e9de8c011c77b855dc7a35dd39c2ca1351607a36fe31451912ee0ce6b7d414de065b4353c333372fbf1682634e6c04e70996c4ffc12a471db9b81c948a16a79431fb5e3d9163e20cac91d0fa3f7d0a21ffbadf4cb5209b9e80e30d7da4b2ace05a3d12885c6e6d405fab48383a8fba96c58f9012b8aae42de29282b2fd05232d0c88646e3846d7c1281538dc67fe753483d6046ba966d03bc5dca62771117bd5a24fb5805dea7289069d823684fd238ff9ac8bfc88ad49e013ed3b368355ddd6b24c3028d9f0b27f90114c19c4c028d96c5ef9f364c077c629d02c7e19abab38e9b172f2524e436b826d22e91184420fd605aa17aa6076a411acd84f4f45766764af85741133e46610530b5a344e06ca8aae0530837dd1414cde35b49cdca86c9755363fabfe8a6b7ed213c5e1c237d6f50c7b5179c1f163bfed29235ba02312fe4390fbad2ac3db13051d957b86990747118d8ee82d29d6334658e534916389b448c1fe157704b30706a55f365347fefb8ff4240c1bfb26659e42dc92479256884479899573142c0f5fca3fc43ec5c8c437233a251ab735b815ea02d66e92dff42842e561e87e0f7265ccbd63e4e2854f7e3e796ed3d30410f259da52c39c0bd49dc3f0bb4d0af5a10d02c2128bbb9eb055646295b5391a3d3ae384d93f2d44827c60a98aac59afc15dd4b53c65d991207f32f102f553db1002123bb0ca73a7673a604eab9661932b687051d6873762083d1c520ee752d0eea972cb77077150dcb5cda905361ef5442b9f7f95380c42e9a69108f9ba4e761d596c2592587fd560e1232965e78ae004ee0a39d23d7535d60b1d426b34f010d8471816cad974af335a37cb738b1666aae00d5ff32c520726d989f7bcd8a66c6f2b8ebdb443e9082358fa9970bb8e599cebbf374c2daeb9dd966d98ffc930b1a58c812bafce12ce8674b3b5d28245060f53375f843b0dd0f4b559451e779bbae2f17348a9a53a4127da68180e72458a9534594f3470229b4b10dec83f17b389796f1e994842320faa41bde43e87b2448104e904ce9aaa8ae07a9101118f9fc6be12d475494e3e3b9d7bf29f38edc6b0ecc63c699bcf686eb89e1de501bd6687daeec6393993b7ace06a8cdbe2e0c70dcfcd793f407324111dd5b264229e6ebecb16a99ae41ae38154336cf2fd3f4f179d67accf0cd66f5a954746d86aca1ead9d2493bb18b0cf8f07b362e9fc1e8200ef7b2d26e1f37267589c0a4eda8e7613eb89c3d40789889bd8ef241ef3d0e971510768f0b99a31b4f1ba814dd633f5a046f214c0d87b93669165463593b2f7427ae2ca5f4acb77a35b881c2e18bf092607cd4e509cbb08e1a1704725c7d66cd2a80dfb8d28c9cde26d76b5ca4036a4083f0656a7f606978c2a1c9e92e67954cbceb9a61de421967589b1b2aaaf9ac6983d856fcaa4a38e468233194be9de495661fba53268acc8db686c6920e3e6a5b34528810bbdc786b1baca42b2d1c04263b5a46464810174aff683949597c63726f0d93a0809c122807f624f4b263a7e1dcc433db4c5a811b420f8882a026ec183fe3def024fad5fa159cca5a233284ac78045afe762c0d5fb520f384e0b59472195b5476922ab78b025aca0b31d0c5828bc9182e16fd977f2b23f8eecd2008369c567867053d0a33a3c2c8ea8bbf9aa6b2c0ec861c3141b8ee2d9064e3064d2daac2127149110bcec2e7477b391e049099bb2e3d334e1fce6f9b71f0f0292d8a5506a42e849a226d3b57f0677eea21ee104b3d346c023b8a13d144d6c88912b10cb954007cf564b29d7e126e50061450be650f94352f21e4fec787ea4d2f55fca13989caea2da7a1acc9419199a7c3a5db88ac1f0abf6b81efb5e5249a9905584193084ad42a2ab071831d0a5abf3c41f6cbbb7bdb20e3799857b1bd0b73db43c87a9ca7b331c2ee5ae8481d6709f879b91d4062e0f028ceedcae7dd13bd935eaf44a65c97a7bbbed7e04363ccd19ea2906992165c2611591764708c8d4386101bd53e4cc0197f678690d3291099db149fb58291280726731f0124d811a9d648486eb5d388ec1733b6c3a9b9ca9c22a77df1e606d59d083692cedbe8349ceb96b588b28d0f83c2c60066c08156796ffdab521763061a7c3bbfd9c1b4cf18a3bbe6e6b1120449ce9827642c820a3be2bd3f9d7b5a8fe466dcab42394e0efa387a7919baecfe7d260beeeb55c9b32fd9050cddb7214bc8f851a9d32b4f7ba91256ce4bdb596edad5276bb28162ed6d0ea62231b51b6977d3fc330570011b815b9953ecf61a49a5f0a1858d18ae2b069b548124733f4bdd20cf79afd33bf6083ce40745019a14605e24e67b27e35354e6557ce691610d3b5512a63405caf26a4eb59193900ab4a607f5970babd84acf9652002f14983e74c32c87377dd21da7854f044ffce21b3cfc2da2d3267db1f87051e873c7b68eb829af4a36f2d7822faab8779129dc5a813c38319d21b9bc7d6fb05b61f942fe9b08d26be4ac3f06da8b0e5bf1fdf8e18bbecc7810d2d9972b2f0e418b39ba3ddeece82d344da68e7bf78bb705fe34feda8337bc03258b20f01bff100adcadab12f5153c894b4642cd91749e692d7fe33250f369822cd427742c33b51001bc9bb80b3b2d2d920e8ba5bf3d42656bb65c23e9d918e67c1201e359797cf6eedeb91290b6a4fe8e70f88c8d0a478f2c7b0ea3d8391c288da0fc4f221ab4bf892dec3eb3c089970ea5a8e835721826dde07ac3af4288b35a6ae0255eb15c5b0f9e7d37edff6dbc47042cb8d62572eeafa5e9b56f2d8b73ff0f6fefbe1eafd99499f9dfabe0a127f95ff8439b1e0580be6a85ce65404c8dfb7cda89e8fa94070bed47e11fb8be0155e2d38b75745ef779137423374b0f0a0fd96d21952b9b20b2c63de8b8485be0aa08ef65c0fdd818ea74da982a85e8cbf845661ee6416d458a8c195978581d1de5fce070c10c0ced336212a30bf34d16945aab1b0068cdbaba40fc5cd26b9fa58098ee3966403c46fde00c2b07785d4bf85ecdb92ff3254944e775f8b185485d5407a8ca0811efb2ae4cdaa9509d850ea23f89106c0a901f4d6500c136694480356629a24f2cbe9a00b00a8df2187675f489df22c27c43e4484da560daedacbddf39aee457ca134bcf3e6b4b98ce1b613fe4261f3623d628f13804c55a40a38fc98d6f8febb361d56d9dead285b167a9acfec02c4ba9d4852da433a093cb54db17b1cc5965349278aaed8a6d06ca1a91d5cee0906a87eb37fe2fbc65820bf2426a712575ab943699204f10f37a40731e81538ca8b5472c164496a097c0abab1d108c4ce94b1f57f75582fb05248bc27e3fd883b6a8e4607fa20d857307c5b64f914c884355c36518e6ea2958470bd0f97e1bf1107d39c7ad22169349a84de024214d130af555ab3ab83c35d10787a405a31b5451b0d9fb6afd87620da7baa089d552185e164f44edde0555b0cdb31bc87dcae6236e34abf35729a930fcd48fe6aaa2fada35e62757e92e7a85b0938b1b994d498787a2cb2ca70224a64847d91d56ec17ef57750d3a859d4821639463327c09421c4fdbf18132e8eba8df31e8b9b4a01a43eddef90d87d5ae49bec54b0fd15ba861b7da008cbec064ba5a925b9086f12051bde436958878844841cb59eee9ba08ea5499de012895f298bef7d858fff8c1c58ce918f597b194dbb797e88b23d6d33b600d5a53adc59cb43624e37b40bdb7f13dbd94fa75518241ec27825ab977af108343d22217e4f19d319a97cfe2d0b2c9dfd28ff4f58e90ef8b79c33dd80c5fea5b4d8575c912c533aa866b4a84c6096534a99bc29a2bfc220d53d9c9b7541438c75ea563bb2af4494eaac363d543290a1d6f00d61302fc8eccb37bb942e0cff7c064db71d67cbfc8496be102cad007a7315ba6a6e1ab4a7125dceb0a781fa394e0d97bcfcc2e7f628f552084fa72a7957c4f4757efa8929c91e06b1252481bdc5dc6d5ac426d4ce8fbac6e390edaf289d46af2c1ee47eda7aa12312d94f8680c94a2b0c0da6cb4baf2e24c97e38568b3b611170181c4f7bd18ae92660897557cb0792552795150121ee4c69fadeeda7fdb6f34f171a5966b796371c9e77d888cb5624d7b8e736a16b3921e1a37f5dd5306ee6653731b6aed660f28d73bb0d07201fbcd20f78a867c42590ae86a435344a66309c2fc4915440b721c0a38c689e36f907d48cc3c7d9af57373b1087bf44ff2194ca1156ba1c97529849aec70c3bbbaf0b5c49fab7193fe15da3652675a8017d75c4d3bd12bf095d3444601eb564a9888433acdd893a42777cb3973d4874d4f2ac329c6373855ac7857ab1c683993c161f8be3269076ec4d4b1d434863a04807e1766d7c101c2593960508b4f5946b4b38ad05cc2b7f2194407349b46c2654c26cfb2116f81f873f65455ad0fed95bedc4297634663beefd5cb0fb666ba605d219abe226606cce518ab0f8cd8a703f3779127f8bce34bcc10410492245002f89426811a49752b653f3ca234aa2787114f6a107df312ee507e78e449ffd994d084e2413693fb48c95517ae7c16c393911c411d8f6b17f9805cab5947fdbbb0feeaa5dddcb005c74db03fcb52c726766028d509d135dc5bbecd0fdfe5f6bdaaf14f3af492c9686101c783fe8f2a82fd745a37e6939b2b54b0fcd6e80c9d178bbae73dead7efdf8f7e31367b36cb5b595faa62d3c057ec95aa92d5c7e943a527272f584fe1c4921db8e2740df6595647b6f986fee6ed0a30202fe24e65eb6a6b797fb222f2ebe878f7aa4378b119058006856c23e6856aba48b58460c30c0a5edab21a85041f10b552e3745143010001d7ce7cb6f8d1fc252b88732ef58d1df5413e7007d8713fc1c6b5039b8e0c8ff694089a9228b2552e47b8b187b84bf6242fe26b4107aadc2e049aefb8715bc95cfd4e1060330000000000000001f9bbbe010e89bb2c4dac2ebdebae56794540f76806ea1349aa76a66fd702a7f4b4b92cbd9f2e9bc62f2346c59af41242633c396830de1758d0e03939c1126c1dbeff9fe4a90157bd772a4ce87e1d8810c1e0f7ee4ff6d8d0ce6eb2a9d3b5e871e2f8176b4fe181d89098b707cbcf14d8a467258f50832db978be26e5135d14a22400b3b7277b9729be616be67be6cae4fad9849c22764f9d3a39c45ddb03a7e95f36d5a9d837c482ea32bc845ff8e1a807625e7b73e3bb38424c17ac501317936c4f3b809b6c5353ad397318b8f8400d4f208e2405d92dc77afe00d0a888f6a6b971aa430d9a11d706322c142cb325b09bd7f41182b05b661b8608dbff4ff5f4497ea856c5116964c364b0553b342fb9f0be2e996d815a0d16b9d0b3bf0bdfca3262753d85f88cf37c9b7cb86ed1d69251814441de5df1cf37741634c75a3132da99f8bf143028b05eddcdf2dffcf4f0627acdbbc138c388f79eb1f06e5f491b3ebbc7c289bd308d3bd623897e3e0ed49c1001c92b772a756d28733d7b28942bb9a41dd47614cc8497532f9b546e972babf9f579deefdc003254fd971bad54b9c87fb4fbaffee688b40ef4bc9742e24b9bb61e2084798e87f9e008aa7bcd9400e070293d7506a9185320617853c09149aee3d992d55255e1f1bcef765426f08008ae66921e791084df0721af1c45f69883a6689b4c5a98300df99972046b0007c462663fb57eb4ef64c5dd26621cf34b1e7618386b4c87153815781360870e5e1ca64f773f3f3aa9cd6d915b27654c373de5cb1cb4676dde04d73dd85a43f2f515912c82e42738a2be544a89fb24633998586972a7f530bca3ce898166dc6c28c80cfe2ad7d39a582265d252bfca25995ab3abaef335cc0c5f2487656974e34cddf7a9a6f1ede3ebd950c77fab95937db8fc1001b2e3f02fa82dca79d32f0257be92192c9f1ba8ca4fda92461c6c7263d464d5184c06069ba6db6b042b3b6402b56f22083fd6e128f41a44bf6f6e23261e876bf9673edf147d7759ff9a96e43e70a7f4c9cc60ccdc26bb8041b2c203e4a47131d72eb2ec50d1dfdcd980c0a51fdbff1d58034686aa233b3b3d69e242bd97da453aa02ffcfa294f49a4b8ced98bae0048198bc1aecd192b508fad423055941de337b0b6a82b4e4fcad6f8207d1387d591cd187c5cea2c56bdd3aec6133e64ae7466fac6b55f2e7e8cb607e52d792a88feb0ad8478d63a91326e9ac84492b8923730dcd0d8f992d070e38fa6de5ea93250319ca944bd8c5f20a49d346ac033487378d45ad4e33bae4f33cfc77b66dfac5511b48aafe5589cced44d38f10baca4336c94f58a17a4a73a6e2bf753079d6d455abda49e25537aad5f519677d76ba8ddb4543602688a366d27a1ed8f5e440acc43b760ebc41f9741fa5ac82e01938fe4adaa3ea701dbb20c2041ca64ce36e0df480563e79da59da60d78fb3cef8080ea70616356b8cf672d5733f553dc53081ca892da7199626f8f09c1454a3cb2adb118e3b5ca913a32772451e8e43a279842ea086ac2d6e357e3d015912d31131ffd2b1e6658729e0f35465c7a3a5ddca9123e7ca11938a666bbe020ae9c61b9f6f99f2a30ff0bca8005979937acd37c50ca92ae944b16ea1862347fa20654c3b4bb101dbad9017b933f74aba60de4197abcf3cb51ee25a9d7bab89fb0b960fb83a9daf92026cdca4eaecdefda20839d6bcbd189253d6723a771a803ff02657edfbe95eaf5296c1e769225f81d923bb2845dc3d88c9b1dbef0e32fca748f0163f3c479e24a8611733fd9cdc869802c65eb3a0e67d2a3d4edeb4ed0e589d6ddbfc4dabde817bcae78970d22a0ce406a980bbd8d79d0d124b64db7f6d5417cf07e830f1e077a2b1f472a7cf72a8319c96d6741ae439f17fd1ad2768c19fb63aa44fb04292389182d5647c45316e890826bda82662458b98b463da5877a216be043af6904220c4ec04ad6182bafe2b85df717b79ca1d8eb77b8789b3cf7ac88d0bfbe524d239da519fd089de92c2002ff5e1fb5ed60bce5768d8fc15e6eb1daa00285971103e0cb64b17a899a8092f2e4fba083807a48e8636be5b635ca6282e2cba851c1331b05e64be368321e4865ec1638a73d6ad4e80bd3479864624ba9228285ad5ff642b049b0a7c6ab89c2cad10ddd5bcd6e40261eb5267762358b862314cefcf6ed799f687d25b44a1465f3ae8e5e646bdb139db73bc542a4b72a9c11e841e59358de0aaeca7b4a2811dab0d6d8b3c507270d1c7cad2f89cbbe5a52bf1e72ce5d8a58550aa3b79c37b47986ac28f7da1fbb9048c30a96a2fa842e043999c9f756049e4e592367cd5f62b44161501b93282d8d10b2494958bbff98f4bbac18b9f0e6d11725dedb360565fc655c4d955fbf364a9ee0b5d771011bab931b0651900d18a16362377d75f1acdf8073913d5e841860d14820e99299cac4423a1bf6d592b95c6816d8ac55e6c191deb0a69dc1cfe54e188cfc4a1d258c2e88e644a91142c7f211adaa666c04ccbe58fac9d845b1a91453f066dab43695cf018bc4a6269c5428dc3e2e9514cd0b8c179bb21ed62496ea01f6003198d4ffd3ceef59b25ba462e3f0b782bddcad07c029eec707398b20853e695c99e69e7be96e3de4f771d2a3fcc4525ac6d5214fcc60939f8d6a6d7a8842aefecc064ac400c581a0d863655998b42260e52a00d3ee8faf34fadf0f9b7bfdca07c5d3f1e062007537cac635dd0360cab09fdd42ffb7329384989d70de128667e5ab54b61b302690661770149184c1f2c8897aa9e70185bccc9378d49c9b3b394d8239f01a60d0a7055cee64d4b284991d791ea691b7d57c68208920173da8965a9ee518267c8e2a287de61849af9e4752a7d9fdec144ed2cd0b2aa473b775b8ef7b66179248f1c96d48d58ab0f7cdd1a4654ce2086c35af5cf33f1f8b5c8f9e2bfbee0220bf9f0c168bfb0668e12b5dff52a7de766a139593e03ecc82245712965255dda69e0622fc66f84b503e96b0b0fada0fcd32b81cff21f0743ad7b345f20902c3c5832e7bd2333e6097eaef995006b580f5f94244b7f068296b4ec77e2c2fbdc0073afc8bd01c0148c6758347a2b67daee28d53ecd9b875ddffee7fa2d0dbf5ac4ca6e8ecdc64ac7a64b216fb0b7e4b484c8a08c6d19e37ec249478e2fa752505b6bb189ed56f75c49e679506f91dcbab0ee3b08abbd3cabee59dd2a401523674164fb78b4bdc6c73065b8989e18835566c8eb43b629a5b8ed9d416aa7441855caa42beec8e5f0222f6ad13a92e3f6f98256f2e4476db83051ae35a35cef1967d121ce15379be1565a647be720378d7c44c29c7dc112f31a35ade12e14b58784c6edfb5706cbd1d281c5a967a9084aaa23171ff2d41314fea8d1f719c075dac8ad4462f7c75249fed9d1cf58ad19c2e7a634e387f42c745ae2e86f312b6f07db552a3edd69e46506df9436364b30c7eefd550a72d6f0ad67d8d4591e534c205a6dae42bbaf175c6df74dbbda47e60d3bd86714cc8a9053161dde969d4718b4986ec4dc666a321955aa8578a05877c5e43a8c40e19563fc1eafad08bb1a81e1185a0acf3b42d7b737e2a91de6d529631503f9a32a57ae86577dee07f5d2c39861f84a6cd9413f6164dcf2d0928fe99634c7b1f5659228b40bfde2942c23b3b5e3c467251a86bb6b058b93f86e62bdd80fa5e47287e0ae4f4906050623a4a9eba16e8944c87a20da858466a23d7480204a65fd109309a7cd3dedfab4635d69e78b12276b4d9b8aa324a8d62a8e3ab7d8ff6157369400170b06dee6cb976a0205d689b13520d181432e375ddfcdcd5164ab42aa38f0405d113b8659b7fbbc8b2855123cfbfca8c1cf4bae5eaa90561ff852ed5516f7b809eae77ba69057fd395322cdd36b091fc877d17a0c7cf6d632bdec0bc3750ae7c931f2585824613876555246c9f2437c785c7b872e958f5642ec25715a8f42087bd89b17f80bdcfdc57ee07986b3562c46e85be2721af764815e4a95f9b9a8ddc69749d39fa0de94bc3a93a53c5350830b1c234353c8daa0bca7cb5de404ee8af71e733b13b7fb82e334499047c3ce78b367216c6979c1d1c9eea242bbbbd1d6916a5e839c6885424cf391abd1516237c4a63f93ef93af62fbdf898724f01f8434f3f2281b5b935e1225f0b4d4f76b0d1bab5dec50bc69d1087553e909f665a65202da3747d454fc709a26ada8b913dc539ae5171e65b42c2288f6f1d9d77073f21719b1847a0e8ff6b13955cab941a497a4921a803ca8b2d2c9e33b46c4b466a7f161ab93d08dc200600c4d21db8cea3b43feebeeb73ca40a3999603f9c9d3ad46d37f0fbe75a8da2d0b1a45d9de3bfc865cd54660609ceb61d5a06b3e4997618f140e170540856caedb34dd30819760ac2e67466716da08ef0a53e147021c4450d39b9e407cf2fc9d71e2b89808d726265872a9a9a1e0397f5999e4e0b31d3f061d729270af4f67590c983757239dbaa08cae43989f05d419884829d48a68924fc7dffab41d61b7f619fc8d41a25e3eac9b6f8412cec89bec9844d11787c6cc4a4728e7fabf781764d56efbe8827f88cf290b4f6c1ff9e363175eafd37aa25fdfd4af4d9cb045bfa059ad6479a44522cf77b8549f7a7ec357f4193a9f5dff887fc5615e9501fe50abd4eba59e45df7c56c794792db1cd56527e13846e3a0a38400ebe4ae2afe755a72b9efa766ebd9bd9d230f9f5568d778649768807047f69146fa45c357f2a99672a656b5ad456dee255ef0c439893f12cdbef2aced2f5d2aed8ab7dd3ba257f5bf338014b8189fcb5b16ddd4ac34f4f6066b1e53f6f78b85d2541d861327f6724126ec9b9c980a708ec55dc17256f390fa90472ecdea76fa4ee948dbb4431faf18b686a27f1e5f4fd84eb287403a30456bb3279c041914dbbe03568646d576088ba934ed6e207ceb86f33d91180980e41e5e89d6840b8d54111b623392a06fd8af5242dd0a886f1a94a2d5a0b8a6a503d34009de3a262478680d0103ec3865d11fae2ec78ca45a14c9d05d3628e031f003b4915af66e5e9118e64681cb9ecae5387379a30ddfadc7ee51c00aca83c17a89419c78cb28b542c70663ebcca10414c91f73958007083c7b8bd3139cd18158f663acd558ac93ebffe9c665eb08aa3c5fb9f4c9bd2d731529be346abdc2deb7aeff08dbe8745be03fdfa3aa94c99a7975d334ce6a1468271530d9654c39d66d51451d14a56fbb43f4fa9bc9e517e77a1e529ac970f01bef7e79b76ae1e277cac98b26e93a5cde84ba7b127d5c4408d0191cf3f0d9dafe342bfbadcc3466cadd23af71ae99d56b0990c8896773829c807482ee8428d34e703e77b49e37a1daf22a493a00bdd7d2ca8bbb137ce8c09f4199d031f6b65978bff8ca44ca332443d7463f813ac9ddfb326b9ee652c6036e64236e7228e759193ef0f5408ffdd0ffe480b7eeaa54396b0f13736f47a122684a7c0ec99ee5f079fe0cf0d2df4e2de764a444de4dda010818bfdc199b51a5b6161dcd2a2957ed3929d3b59f0f7ac3c40dc688a861841bca3636d055de3fc509781a065b7071ce817460ede7bf2927031fc32589b94e9cca1abf7f9c822b81b64d9ca420ff125c49f7482f4c9e03e7bddd3ab9db6f15f244a3b820ba041cf0f1d54e6aef3cb48e29a65a2b6d13c4e79e78da0cbad083f09780fa303fac904a1264f8b3056fc09e257e21093dfc19b7d1a19105737451dc46bbbd0e48dfffa169380a30490a36c0a7393018f10cc2069e29689ee6f915fcd2ba63b405154b644f07e621afffc82557fb93e42900f549c01c124f5f5f2dfa5d09a5723ebf7c1ccaf684637295f102bb515c56679fb08dc3e1064683c6861a6842b43310000
154 |
155 | ** Weight: 10107
156 | ** Virtual size: 2527
157 | ** Discount Weight: 1173
158 | ** Discount Virtual size: 294
159 |
160 | * Transaction with 2 inputs and 3 outputs: 02000000010217f9ab321eeb3d20b3b4b77eab7ec8f82d7d934fca10623ad196c0d83ebf60b101000000171600140ec5c2bf1b6634baf5b248914dc771e925880861feffffff7dfb36ded4ca0b60ae010fef55041eb509b8bc2fb51f07ce11c9b64496c083fc0100000017160014f8e14524ce60a8a99c81af3cb198d850e987348afeffffff030b152e0211ffe01e5b71dc5724478b08d445e6c829cf1c869990b3476325ee0fec0911b724d78f2574615f38907efa9c33fa67ceb4cafdf2758c814e9ea69d12ccd503b082f3a6142ff3511f864e6e642532bbe6c95aa625411d42353c68c57659385a2200204d0fee512268b43486d5272695c561e5167e69294adb7fe318aa0ebb1ca98cf90add47e23aebc7fcaee45037be66d78be437e32813ddddc36766a1f7124ed5c314097bfb90ebae90d09023665d18111f70340aa5140882d553950121fba0090ccdad03ed1978d03af6fae91fde04d8d059b9ab4e39759cd7aae98c7794255c8960128317a914adfafed6b72fa2f433ca8063e45405438b5db95387016d521c38ec1ea15734ae22b7c46064412829c0d0579f0a713d1c04ede979026f01000000000000010e0000000000000000024730440220676794814f2fdee485d9510d3ece5566121002324a78f51db01d9eedb6b00a6902205aa904208d446d1cb3b324a60e9e5b06e1ffaec95dfc0b4c895dacccdcc086400121033f676428bffbdee2e9873e63b70b25192347b46da1e2e180ae669070e612bb0d0000000247304402204515f6d25efb8c9ea7281ac05cd01b23a0f35bfa83f2a9e443d2a7f688c76c1602203d786eb3ab4660414d72f1a8c60e6d2647108083781123654e5e190a8a73c3ed012102ff0d4be4c160982a304d98d1291732fe4ea6e3c5b8c8a0749a4d96cc446609cd0063020003fb25acce8790284a99bb80b3b2d3c07c8da7e51507b3817e3ce096ef6fd1f2b2913c7eb8b8af213992b176761d45bae0649a1ac145642ff3eff2bca99b0350a0ae33dd1915034f623a854dd66af2c88b0829d4128c37d526029e1348d4b892a1fd4e1060330000000000000001be05e100436e95d933ad51f847bf5556a648ae350820f8b30bed804adf84b2daf20bdcff9085c236208307d852064178a29bc2b633d5abbb30f1bf7f090ded4ef8895a817cfefe89661025903a94ee81befeb2401031d55849e66246922fb87692f6d0b147486c5d5b5c9139422ce5ca91c1569174f1845023415f9f66fd50bfbc9ebaeac40d89c49acaa26099d69f56e947badd3136b73d1a93871fb2913abaf810336a4a5ab481f3c5f98fcb7e14c7ee76391644323948258b50bc755e0158c3e867946deb044230df9a432b3b10d4f927adf055b10f45244a585c57990db8478de9a1ff8523a7987f8f5ca06c4f5b2462dcda977f60ed43595da10bb68b2d1d85a41e13dcad7a30762074286bc171a48f819996bc191a053dfa218e231ab7b0aeb4a1650108dfb2d81fa92e7d4a0195bc4450af9c13891903552a516580e02be6d4b1843712556dd50197bacf0d747df57d98b74987a78269b6f66b0f21684f15fce000cddfaaea5f45a0b56b40c26d413c68c42f181ead3db800038dffcac0b09607678ccd4cef5c2074e1df6a132af37148400aa4223c37c90bb8913e52bb6d72a27f45e209cb25a1ae79373bbdc4ad2ec4ee37dbce708124a5a1c2b2fc1d184976e7d46aa34344bc9f1634d04b454f5dd12be747674ec2560a178db30705a72ee82877f9f911cf4d7a46f4cdac8f1735670897add82386400c02984dc55533041eb3983fcb89acb7c2f44c37f266135756df3e7edc24550a351ac51e95663a79af6043a5a7089beede61540331b8cf36149a076c6a5cc097ae3c535c52cafdb600a991bbfe5f560bd31b2cc274ccb52662cd5e0d1e03ef597d3d753875f7fdb493838603c88a44e1002689c7623a15bbfc9b8c7ecb6be1c524caebea69d3ad864667e5e70e1acf13bb18b7b02d4db294131c49e5296856e3549a141e738afe4945584378f34d95cbccff1b3b74ce9608be2bcfb24e7460d88de57be0ff5239554effd9e47c38bb7b58edca6ce7f8df68303f97473bf521aec54cf323fd7fc2086dd399356d49d4163e612ee4f2cb89a5967cb5fff0ba094b58b04004ceff2e673c92f77efdcb86c49c746d5651a5604b9f4ae4d7290d2268efb49eb836524dbc22405a5e93411a8e72f69337ee8e7bfea3f17e4cc91d3e0b8b9d3eedbdeb4f381954ce2f882995f3e999eedd666a0df1cf7026ed74844f211c5763124d9dcde085fe3ee83ca4d7954020a0ced700d52dc6fc7cb9642b8cca330d7f360a822361d03868fc83cf380d618b268d5b74a3845bc7ea1c526a4012ba133319d5c6f1ba26c12a6da04202f8cdc4131875453cae87b0cd57316b84b5ad7641a8146a6074a3b9427826436c7f0904c8c0dcfc87bfa384da2bc7ad8b96091eaa5ce7c6dba9cc665c53b376f7f42db2126df88e07d747606b7b8f31c7fb5a4fb480e4e7635e212efe0df716e2b3108ffc27e1c48a604e7c9bdc3d118cc15b3ad236def1fe5db5e0e4caf1cb3e92421cd8011ca7b81a9c302d0ab1fee9033cc9b1478d6a9cc9a85d5449215eeb5a74b137ac2aa32498a712aef4adbcac4c90979682ecd856d4a5b8a49c6e36f9098dac5b34884226b5a38c31166f300b5767c0c5f495c055958c4f7852d947597c56594ccb74c68f06a3fefb92d66b8be038b1de56c0fb0e171db4bec78236f4ca3107c7830db2c3c18363cc5a4007a869b937324ad7defbf851bc6f42c60503a6d5e6b1c505072a4b280c24b264ab91a477dfb3c240e39171e505c7b0b8ee7b8047a08e47fc190a8437e20273443888817139c35362545855a68302bb5c9707926bb20c1817c52def878d32f1aa66cf58829d0b499fa98ecf2a993b27e5405fc8491ec2aa12cdd48c2e292889c5c9f11b311556ee5bddb6b29d31b1bd3a8b644971e0e06a40402229d2fbb52181f2c7829068e53a6b79db03cf48cba1f1f4be27ece8f4a5c03721249f0515447e2fd1d3c75350ce130fba2fcea3f07e40cbdb8dd3ac73bc388997dbdb45febe162bed18bca79ee89464470016eac4a27d73cbb71c63dbe3d1b01396ecc64f1f366a4f81a443dd9357299630a2ccddcedd4d2baac65879bec9b7edacfc8bcab0e77ab84a6c4b7ff59edc4ad54b5ac12d7d3a7b6fdd46d178dd93c843b7256592f72451cbeaac4271b3a971ba1d36f460b7698d0fb3d005ad2ef380396e0f284887a96ea868b9de1eb1502e38a650d343944b17cb26928b03a44e5d1af76e99b57f9ac4fe64a60499844ea4abde87e2e245f17eac1ee0f1c8207cf4001418b1228171084f5e81f2ab29b622075b09e15c06ad6797c2e4db07b9e92821cbd3be27f9c7ec77976b28cdab7a2a6fb5ff1047e293377df93011f0afb6639742f953df61a8c83ca4ab5dd0c934d74548ae77c9d59fd5beceb9b3d09857b669ebc5080bfaa8a0c6065310330963c139dcf605caf506b3d1aaf0cc4ba51f458c4ae8e59e0b46b8e82ff5f30c6f68a0815b1dbba2c116c2a7a109bb34514cd1dfdf03f6b40ee9734444023d67c66672e62161e5fd33bc652b021d7d69712e13322dcd1af690e4229f549fbed1e700e84124636b9eb7cbce7e3e8558aa901387f7bee550e16615e0c851d8c01930855c05256d89ccf366966686eb8f33756e3b29a9fc831cba20bf6e2299cb81124504f971a9ba3a9bc5747266dbe24c8a9449cfeb44b4608f80bad7a95387e7dec0059133818bdc48fb59e7fd275d445168bef3e2400a4a63bb542fbd1f601aaf74317716e3abdb9eb5c309d6296afc42789363973ac4a60a77c10a23d27352fb2018f19e74b1fc6ffca667c7fafadf52145980f39965caea0da883aa7848e8feae047204bfffe271685bc87ef15793aa1b65b179874ca9d4851a36cddd77e54245a10df23813f4381d4d3f079e59a7697b3c64cc8160ee63c050487bb83a42ff62624ecf02d22f7e39c9f7996e446923c7a6b4490bde4e7788ef5b1566f2cd96330bdba53e156d123321d6675b93994882143751c4f4092bfa3086cff66945cbfa8e2cafb1079790635fb055179f65b5a7c704d4844dd7f0d98a4a6481be8575a20ee4868e4f152f1013344396068f1515e8ca0ea92af11ef2267a0b15c4f26722d80ca404f014b5eac9f9a54f697fe5315a6282039ce6f14834fe6d1b7f9f3ab00df9a255c97c4db76cecc4652f711e9fba9d4194837b0c7f6daac6ce08ecef21b1fed92e6e6774073d5dd03cc42be5e401282096c3e761a83e982b2341ab79d3594cefb8196b58e2c36adc3976366b9bdc95dce90d699fa28a892f0abadc7abd8641ff4f176bd5a1660934d1a5e61765c7cd5783e3f4778772de4e681144b38116bd5b7ab98dd61f16f52abd5dbdc00197c193f416091ab84f48fa1950f9b30dd8ecf8ceab076c5b9ffdd271da649a81a4fd04609dfebd35583010fe4308825dde651c6722a5fbe709c08032f50254f95ff6b75d9966bbbedbc47abd9a00ce5afed301f918657702f6f096a5d6eddce794c35b3c1ecc7c32e2cc99d33fc60b399459596b204f714d229e0b2f518282e1141bbc853471b7556daf30ead21dd6ddfa10ecf47a0ca8cbdfe8818e74b3006b8b076d167dd958d0f411b79872e285498a50524b2a3046312c1ef86cbd1e3c0bec0a5203567c7469b9e42b2ca000e0f875cbb8cbb1fcd5aeea25a57710ab1e9e03d02e1600a0479702b39ab88cc850ea7cd260ebd8df9911877708a70397eda2754a84e75ff2df8d3c7db615091d213a96ac55884892f0614ae6640e70eaaa446739183b2b7f7f8551550b1aef6f42d9cf5e484fae611c6e2b5343c29dd7c002e8859c11db0c2c661d66884c5076bce50ffece8419a50daa6407da833bfd770c43cc7082407bf67982c050a42799567f91745e4f170e4e44115e55470ed4918e65bc80eaaa83282b4956f537a451c170b3eb58dca8f3ee59175d8406c96d7884ace20f077715ef7f31f137dceeb1885e0b1e83d9ae63930b3437fa9645f1c1190469853a3a05416ae141de70f187d1b3acb5c2f5e46ace2a7743d0e5163dd1319250aa12fa33724c571df3f2875a34c9a63f52e1a5b79be51ed02742cc933ecbbfbb7e01c9b5c140a07dc19f1b649a85498083e41e9172920c151aa31d93030cf65f712baeabd7116ea57f278d06dcb85aa848b6e52c81c938333d00bf12c5e9f18551e6d3fad9a942990b3a1e23aa8079e657342ed3a894c388ac0f91d3e50ca6bb4abef215ad803d9dd8432cf4d34ae3df7ee6fdfd00243b25c096f2d7b3aa2bc3ec81977e5c7e6278175516e4aab826d7c2d0e6d2f9c0174036ede82e18d9304db6fc339242333bc0c3eaa61f18be891cbf8a7c14f45cba31dd07d28df5526e9d6ee9bb2aea510ec08cfbd088e7b935c6fcbb62741acfa46279b912779434f7c7253746ed066a7523bde7318c712af2c17eba187a91f6ad7c23d6653a9e30b054f079fa9fce5306c61647d96694ca7453572cc23bae2fe2120b83b4229c488e944694a892220ce4f9ee7a7d2ebd0003522753fd6bfd87c7a57eb7e7d05404d98b571100add7aa5f0d6267d84eee81ce48a6fb73acadf5663a9883c5d5959e588d6615c2f84cafc98da92a4b9b4901c3fdc420c0b1468a1f402e0c75cf1dcd0e502a69936b8d709b534072fc8b6d78e1a89d02840278e7c849deffb18bf95260edc0df171e629fe9b01144ae8ca2c75d96ce7efe6cc3b5617f99b21dc45554aac3f3e62f037539c07f97859a228098465cd59e5ccaf112946b509d53960b30924e1605514e9365d7db5df87dee0c53f5659241c61e263ac39a04e2bf2d7c281c6361e3b3a5fa703b404c160ca1f9a063d9f9d7170ae83d0b08ab722c7f59d8a444a7fdfb601269342c859c55ed21b4bb6c9dfc64a05d2e206345ccd43cd3e0db41ad390108b9aad3b1c882c4db35f7ab23d3baf6c50501d509c89cb17ee679d052f28e47484b40ea835f5d0705961b669c11ba82eaf5c45b1ca93ea9a03308d77125a21f6516ee8e531ba7f12741afe529a41a31ee14394a5b684babedaf15ed9954a19a777057deb024a15eddbc1db22c6222ad0613392aadf99a6ac8d10bc607d077439c740c716c1dc212d8a71d258e10b683707eac9c35f6145fc76612969b5e74dce3093ee857eccf5ee174edeb80e8b79b149499a1e97ffe459f8fd9449f6e96a60d6a081535719cc0951049966755ac364833e1491ad14eabc516101d865a142d9db87ab7ab0be6d62f777c1bccd33263b7059bb1f3b5a497dd838af509c8c7e0b8edb10201f67da1192726653e6b3c60199896f4686f5a44f83b574b6ea17689f9fe47422c5c9d7fc22d241fc6d8f3593a4f0fbcdb236a6b038eab7538a39f708f5024ffae49cac72fff57b5cb67ee352c53a19a5ba569a21c1ed60c8c221092313843206670c9abdebbae77e891c679657469677bf34a45e47e900d7b06df7fa6ae04dc7f4c34dbf9f325d5b3862e1cce01ba14ee6733cb3404a06dbd505afb00f32c293faf4b37f4100564bd3d22e51d9e935cc0ea90ee58b29ea99b21ab9bdaec5091fc9b683d022f73def85bbbcb84e2a59972a1827f5d9048e0b03f0612ec2406eccd20bb6b2690cbd498c7798c26b9fb84ca3356fd7b6fa7d8911f19206a8ad5f43251346102b5410dfd4f87b963f3b357e31bd9123986a757d4dc91a666e94e0df40be508adece71a5e48e20a46dcaa692060a82e61c586a5396a7680971ba5bab6cb1c9c66f191440d72cbebfbbf6e8c686b7e24abf10bc037daebc4c2066e1252e504306f64f8f2971a90abe718d8dd02630408532bffbf7cca339a29de5de9684fbc28f713ac8b14ec65bf45005a39a5ea5f1566114b189bb43fec3ea4868f4c01ac2f638348e9ac4e63020003b1a6dc2e2c1fef35eeaa979b66cabdbcf24e275f63f3e6e4a61dcb6932e5b5ef45ff240d36a4a1d0905293ce915264a5e9760949e06614db5e654075604b61bd67afd7df5370c45f6ddb647388ea904866190ad5bf1ffd7cf95bfeca5ddae0bcfd4e106033000000000000000136625300649c5060e0b8fe8927a670438f3f68820df7f498747e0491d7506d1f39926c8f5800d2967a140a8d966d27eb6db814367f0498b1d9267a445bd7d5785f5e1dc5b5f70510476f2b401458bbc38ef81b57e2732c5890307a652f4859bcce19b036e9806158220079b63489074745fea1dcdec39b2860f9a0c4e5ed331a667bc258fd195ec4b8293d11adb0ff146cb3fd79bd0699fc1a430c3c903456e126e999d3c9cc0ea3ea9d4a3d0f4e25657d75a6c567458284f2d1db93171f1771cdb669df320fb0407f4fedf691b1e8098dc4501a40428ea7a305fa19f0c65567cbea656d3bf6b779cf86084d8cc4a6717aff3555ca8ed44e40d17d855660c00026ade5cacb07ec0d6c7e97d2c739bf5cf9c594a10a2c64ba5203a15f461791d825f6be2fc7997b7f3d7c7a80e6dcac08d81bd4b8326bd53374a22e76e42e171b10079da41ee7377aef1857b533f6163776d998c12d4df172f4fb2495287950e8794da3fd83268f5631f41f0ef7444c893901188d9c6048f832659bf3751f9b59b6a6e95a54222afa634caf6677a61e5e86d8c1180bd4fc28e4417541a9f8fed5b94ce04f0a0987471b4aecff7f20aef7d916109ba1084a017d431ad876a67ff5dabba2180557cd5a82c3448a4642256947aa3f492102d1012008b0b29df67afa78dab6bbf873efb5263b8aa14232e69adde835d8e8739e6ef83fbb65b6a0253e2fb8e5f3d934237a804113a275b172b9add23bd0f5aef2c27452ac2e99450370a6f61ed9764a24d9cb0f251667ffe3af2f52765478c355e910671537d9696d9db8b6ef6fa3cea313572cf2ee2b642c8d5673fcbc0673778b0a444c15240d0d30c4f0811cbd50092b31bfa67a4fef5cfc84ce23561be186bdd1836be43a6e070e808860b944448b3eb7dfdc0346e10b23d3dbf4db3edc335dc257c76672a4a06f6158631c99daafd24dea85895942b5e19c7fec6c927b6b3c43f8ba26de9f982ba068c3d42c632366e48def26a2f18bcdb808e24a51cc6419b06f83b3daa79365d81d6818debb158998285909033f11ca878ff427501cfe0d6f1c704fec0e4fe6663d43985b11547313ac59dd467783a54aa46a5affdc1cb5b3b97b3383d132e20510a444e4f17f64c9b99521b8ace7b4eaaa38e5904a3dc2dda123c4084cd05ba45f42d0aacda68424fc9593eabd775e10ccec6f7479a1c846b99a8001c1c575dcdebf6ba6f57c01c924d63a09c4e26770fb0e49b268bb921481966bb765398ecbc8bca3ca0c83faffe5adfbccac2dd1d10f1ce10899ddd432e4fd151fc16dd6c55f426e5b9ee0c5dbc84ad1803657e9f02328c2f2249a9a4e8a26b28882d6e652803ead9305c81a234761b143ef93ac110c255b8d61a584c1f1214956307b5c30440b8601348a6f3cb71a9cd8d6fa02459496fed0f79c1f2d994a4c887c04eb683b327e50aea7111224355934dc2c413fec9023bfe5106fa642c3764f29b4cc5ff83960d1682acecde138f4804545c6db9942d0633f7d8ce028448d93f55da185018e78d74668fbb80cd71c97c066a7da6884bcd1dffaecd537cf121f1ca4a52f684c480e40e7e9758d24aff58faeff8cd74906077917d24138205c388a8d0c180ab0f857d676a9ca3b7a24ee4894c91ed14c0f5ea2eab5ba5cb726ec8d1085672fb0b9139eb9cbe5b431e7f60987fbb2458eb18c9dbe3a3fe060c569ccada26b0495d306195752ae5012917e98d616364273367916dd0218b464b2e1e0868417af70f10f01ec68073421db5988c0af2636144018135787356bc783566b0e20d90e9f0c721780e5e530af7932c437d53205cbfd8668f6151d2181b705e0917184b51d179de686bbcb9623f62cb94cb5d02dc3ecd2b4c37c4b92434e2809d98ff718edf41767bb088345373cd573add1ad2f6c1a1f343da31f91401270dfb33a735a4ddc6216d986818e6939a841a5c5def00edc808d33d67a932dc5d59707ae7d56cf9eb0c91dc5174bb6e7a176f29a0d63fcd06dc522559b868fd6b4b309370cab1e05aef5151d70110a081c5f5f35a34824cb53631912da6a9a0f4badc5424740e5acab119ee090b6e415eec6066ba97702754fc579300f79f1ea8dc0373ad9c2f4027a950646a97cc250f7af22f6970c932060d860b1fd0ba6e451c0443176bb3932ece7d8c4242ed330eca9b9cbbe9d18a973bc5ec46a7559fb60ef9190cdece5db54c3a42b7d60914f89211ae973aecc5450e85735e734a303d9a5d251382c29470ceb944d395e895560b471fac7efcc6b815664f2dbd206f7c5dcb661883ed335ac17212af20f6bb46db212d141e135d85aad063ebd070bfaaeb2f6bcff62a0430aa50dbba239ded76aee1d5e8e1535887837842528a2d0cf039861c7e89229d9bcb0c9e4a349090f70d1e904f6ab55ad6aa49cc3cd5771780a157f50833b4e790bcb7bda15e6e3984efc07f1ddf98a398668e296f870aad303e16fe37b0179d6b5c4062d3e5cca9f15825b0f74a0e3cff9c7406653ad6bc639159c8049ce62fd4760bd3b0381ff9732d68edc5040ef5e27f57ec5b41c4e0e5131f22dbcf6fa8f68312f388274a4af864850adfa43e454459f594c486d899054d193cdd05fbaa2a12a5c6f250a3bf992fd2efa6f6e81a81fa6a219be8d4bca51182f48856bc97a47c268842409b13a0b06c4d5fe00009e994b901aafb68bfd83e88d2754d7e6840ff4e248dcd266efbd1d20f09a4700818c032343189cd47ec23c0032410ddc26af031238a3e4fe1550b22a78b5d4224c88bf69e7b1b5f6090cd6a2f7a574e042c2c0d1af4c38a3f4a12ab9ec3744313bd3b69e1360a88d420bd23ca73e4c4a8868a15d02c293fae58f7fab9fe454e88b64013edf5ada816a8bc65be0752b23e200b95f3c11519cdb601e13eab5ac03f0607efcb87cf8d598afc5e8c96524d30ed4c76edc87c9fbd98497483dbd8e1bcfc8ff71e4ebbfdd784a73300f4345b91484138047f86f12e8ab06e22c24349a397cb2082d9f15172af0834f55f2d7749832cbf00cbe1d146824850bfa8f196cf4310a1b940e3b403f87ee045fa889aa4656c2fad5348df1777b15273707f98c8e3d8e2051497e5abda2cd239eba928d57f79cdc2f7d24a54a74c3febcea5ba8a82f5cb34e46f870587c23af8f19fa8c5e94840c579617bf83b234f04c04b8d86a68e48b2f1d5036edd62ebaa15e340c453f3a61d12bb21cef4b011ed074ad4afd57cb145fe61c06c6824e928b0a016c9618eeddba8166718af407170a576e446c90253043f379497096464086eb1aed23e829dc65b73c8c867f3d5bee41ac8070a771ff8e3870dd7f63c87a415e81f62483ccfc293b1a4e4ac2a218a37a6ba3077bf82cde7884fa2b6211de7ab26916f32017f0552d6185064482fb466b21d963ad068286e15e808575851cf559eb937d6943ffdeaab9d2f8376ebb7df96a8cb04939914173349627472a30a58fc07724757d61d9f2d290cc3a2723fb3506d5e3775e9da2e65b5631b00de85d6e237440d73a2662bcc5d90f6e401865b46ed42ccaa9535c9ced22881289ba2f7653617eddcbf5932f27676b08ab0c4252c65e20933f5d0b0244208d8a8bb815aa8f3e547394349bb51b08f3f175cd59c34a9df283ec29a652aa4c82c2187ab43a5ab2ca57833a65b7cd4329c2b15b717f01dcdd26d316651849209a738e289fb29a05afe2e0af2660f2e7f3cb42e573d4cbd32b89c44b5f32250aa5cecfa25ea8dca7c079d590dfd31d972842351df8f8c0504420950d6bacc82c7cb5271a8b6f498cc5fe7191d5c81c2de0ecfc9051a15e8de0e5d88444b35f9c7f87b856132a375111739a3886a849f0f2ec7e593fcf697dd9bab4578c9d68a3afdb9b2e90f9f2a517cb0410cfa4887aa28e6eff0308f237ed0c7a111421c4c0cc901b3c357c5001f0e901982b2bd352f51b4f5e40d01106b3e21da64a5b9f7abf28018cfb1694ad94b467d702f0b5dac73069c997d4ca12c3c2c58324cd5ef8a5ea5305134adbc4c8cf2c6a3927026ac39b776e7de74c4065fbefea7efb092b194c741f32e3664e39e9831e97aa0422f8276534613177b03ef9bd9497cd1ca733618a9d8764993a1675ed82d91c7c8dcb523b58276e85aafee8a54723d5e1d728ee8066c85d36b7fd1764b4488353c9f0a3c28d0116e2054b73dc6a45723114684d760db228f6a7f5b0e0b08694a4df5208ff023138e9d7428b7c952093319ee45fe2a5b6478f260cad0d3cc70f53f6c8f709f492aa575cb9920debc0bff013265e992bcedd17237f47c39dbabae3518f6baed228df6517a191d3d3bdd3a30b88830070ef70c091ff9f6bf7f0e86e32d3bdc2460c8cc1f14642bd227f77206471aa36c230a1d6502b89e49e8aee25850a9fb5097e8c1ed4e4ed621ac22d690ec5654af181e288fbb5dff3ada1c2bf41d1402afc0d5fdaf00bc1f3b1f4ac37551658183b6d35bb51a9711caa4d9b2de29ef0b34fa623e4597d96be59b924cb60b55d0e88e55a16cfe5b2795b60cedcef5b5de75a809a2657b90e0a506325726ac16a12b186612ea1641f054a09b6dab639bc278b1783631112992e21a24d17338aa32d9a49a6f5622b04e1b989b1e952415faf304053229a4dd19ff605c2b1697a45d77b588563451e17c639267f1385842cec1576cd46f404c19067d5ee254c85ee3594fa9b7c7666ad9ebb52e68441193dd912932414228dfa69d0dcfc1f5a0860b49d2ffd49e87452a811a7db2fea42e03e4cedb78ba9f144df174b7fb95dc5904b68be8fa7905a884ad7a525a6d22d9936ab32adafc4df09f07033825173376c8a4e0b5d62e0564f2b064175930490d1bfa4610aa264d265289c71078003d38c0d8d5dbf2b038bd27c8bc8b95901cf4338e257ff25a283b89ae24133b100eea633e734a177d44e92c4b6d1948b1b76a415b8a324664c73d7f4c70b618b20972a39be5fca6bf6f134c2519c6d3fc9d03085d194beeeaa239117d5b68913c3510cdaa9fa50f6fd6d97de5fa990036d9ca039176e2fb730dd2996464563cf7f69231f9fd006566b2d8caff520deebe836685b176b113ae00240b5195d98cb7f1e9643448310d6fc89ab27b6916eaf519e778b135e9d9a417e0f536ce49ff30f5250ca259b70e2ce0a520e692967fce131e7026fb6ffcf46364ced6c95f6688b1bf7e8335b5a493f4da9e6d0f8c4e0c07c9cfed271f1b2eabfec47dd506a8f9fee930b866a1a531a1f8996f0f19ff3373a2c35aed1efca59c3dfabea15168420ac0bf4a484d7abffd4d49df482aaa6236af4f0dd9d1d24c37f5a6b5c37df5bddc6b32869588ccb7311a8cf3f982b3e28e158cab67c9eaa472931213b6b07ef58c6aba07f3891f91be91fad62dd76747b42027af86a066b0bb6a926b6a30fd3b42cc9f6071f123208901b014277e4d021ff685cd74bd8c9f4bfe48519a93648deda3660c44fe3f10135bd4e0f6b19719b63f3ae99da7cb3efb66ef0d04a58f6adaa9861fd7817004cc83e9ef2afc0d269917066cf30231a2578e687c8312feee2fcc6f9a1040f4e6471c91a0d6e3b7787a7b553b24dbb7071341f6d9682dce9f38cf9ad79842c846c4c92f7a3e8d4ac118dd5f41590295285f04844c55d8fe4039d7757a088436dbf9ee1ba42c015401073bce076dcd130971d96fb74dad68d01a5a64e6c695bb1ed1f80ea4bc917198778384e6a39d93c0b8a3bd09e916be8f1d79e1d3c86a565c5be0d07eefd71174e6db604d04f579121460b2af6b092f454eeda4d4eaa5f07863bf01f140f1b51038a5652af001726ff11a629892e8ed86643b4e88a49eb4c1ad624952eb2e19b1e34b0c3581243dd4b9eef50069b5226ceb8f1f945b908d305d30000
161 |
162 | ** Weight: 10536
163 | ** Virtual size: 2634
164 | ** Discount Weight: 1538
165 | ** Discount Virtual size: 385
166 |
167 | * Transaction with 4 inputs and 3 outputs: 02000000010440d20e775327e47c7a3aaa0d62d2daa92d6593e825d4058fb83f02d2982787bb0100000017160014136af4d9d56195fb5cc45510db243f2c9ac549b0ffffffff5d3b095569d32203262113e114093bbe7ac2ed26e6c1eba94acf3d62e9479fd4010000001716001427c88e23665abc413e795078f07e0573bd4966a6ffffffff1f8d80edd1f8f600d0a67ad89535966d70ca89f267b84ade3a841d46b646d03a0000000000ffffffff60420f6b5047d74b73280a80b3c5a3b700d0edceee2d3c424c2e47b5ad7fa189010000001716001418d6f6cf51186fa55acea541252ef8642f539340ffffffff030a3903616f4fad0fde757dac8f368334c6326e80be2358948a74f4b96d2ea2e3b509266e8e780023d26ce454f762a63082125f3d591c5a80a40b3652f2df4f3e3be103955beff6bd21e9db19cbff6029b77c0f33fcc6d2fd38aa5d50b90bb9168a1bda16001434661a61e4b2ff2c61881cb4eaad3a691756a9f50b11d13d3cd766f1dba3690803d68d8cefc9e9a3bdcd6287bb646d9ebf0937ecc70850cae0c245577ce7f12487692d489291cae55ef61c8d57da4d1ae91cc58d099a03ee30d577a7a8aab53a448b0eb7968aa77e101c46049d1fc13564f84bc18a2cf417a914bee11153fd9e5ea38e517ac44cfdf18fadc7ca9987016d521c38ec1ea15734ae22b7c46064412829c0d0579f0a713d1c04ede979026f01000000000000011b00000000000000000247304402201ad36f422bc76f2f7f2eed881cc825a5f48342ddace0107a7bedd5e0452b90cc022058d32863bebba3965b4dee2dbe83cd4a9fb8a926dce8b3ac5b1d1830426eb9eb012103e32dc1faaef6d46590eaaae789a57ac4c16a58648891baa060679962c95c3ddb0000000247304402204555a3ec408b9904f09a192b696cfc6bacc224355053dad66b1ed1bf04d67ae60220056c2ba284d8f04c870dda677cb48415a2a0de6e41b30a1f822fb942abac7a8101210266e0063c0902c63ac8cd67d68c564cb6bb00dcb9a1f1a3f00975acec406e5a7200000002473044022057ec539a2a3069831556b700e3414c2c690e7ddbc2cd5521e541d1694e75728102206386cafbcfc0ea7a58447c506320b370cf1f990df38387e16915ad80044010b301210223b1920f70e92491512dbf4f266295315da535e66d18ba566fc13e71aa0a0fd9000000024730440220624d81f43ba0777b49296c51c0eb1ca56f78eb6c75996a9fb1202956a8d286e902202446ce430bdf63dcabc3bb70415ab0fddcdb685c35c76da4f7f098ff6039464e0121020013a3d0f30453adb05323aecebdbb0d9ab7203fddbc51a4177a593c46b499ff00830400078da5c4069708cf37799af32fd4186b7ddc0ab5b36d45e65811ebd5b357749e0b874079956c001ba37ab67889cf71aeacaf7121bb87af4d3fa62aab85b9644e86d456c7eb1c96e803fd733adee77575ca7bd8f9666c53c361dfb2881c1dcd8e362353918a2f4298dd72766e68372217042fb078dd607584de55c52a939e560093fd4e1060330000000000000001990d62006914e223b8fcc44384694c0f3de1182cbfb2223623b49f6c9a0ef432239a3fa618a891ea7c2b9ea9d74c1e9cd22838a79718d824f24967067457d0b9168aa1100b156a690c534ab01b76739b27d7d2e55e1d0688b217b44228a81f2b4a122dcfd544e6e7bb0db0ce48044a759372f4e3d15a16599db10c07e09c436c1c7712ea1671d18ef3914d128624a108282f1375e0c480f5b563e0f521f12003f91209792d7c036e6a6724ef7ca8d3186cbbae619f4e41122b2162c2fe8f44048866ebeac117c4c076b6949813d09a265c79f6f247d878a899c289e0a694371e21273e49223c13bbff3ca6a3921784f68a01ab3444cf7e92b1d115731294689037556363c1d53101fb53cbc19a54742762de2b61ee4d10e27ae887c95ba313290b7bdc4ca01d90c67029ffa6abb35dd3cb0c1aea44d96778f8fe4264b3894eae75d0471b7f3f53f99ce1aa9bd0007884c10a570c8ce4f279320c374041a92d320b8b012cc50836250848fc6299819b3049089c64215eb76684e4f1c79b7b0c243470b9e04391e252c43e96c85e0a243217c1fc4523ad98eeaf7e53d346932a362122fb77bb0b9341b4bc03aee9a3292cea480b2b89f1e10e15dd2f33515dd511479b8a243f81263fc0200000a57ebfddfe96a677ba053c2638d3bd6d3bda6a40a64f2be902fd9b0e84c9dffd3cefa116cae49513ee8616454adf6be38033fedae0e005aa3913faf76a667fc20b24003ff843f1b270fc007885265c4571adb85d9c1428318d96fc7bbd53dec4ba107c9c46141122d9dc388f39f2cd92a475886ab4a4f4f02a11ad331e32e7fdb5af9cd37876a7139b616ae5d12caec903ef33e78bc9f32d590fe4dbbd36220e8dc93bfec5c39d40ec64d2d7ab2780d110d70646e2fb23e5be59dbf1309d5f5f1ed0307ca579f0760a6755192bd4e82d4b9ac407bd2eb9436a6250a26887f3a5026fdd4bf9fdfa860e6e3c66459b52c22e3adeb39f5ee74d813ef52c67ded7862f42b3f41792d332117a4c9a79c9533e6340c4ac824f747f9ad696273e5c4f648e33eb331ff3b169200577456de347b909e00500b2cc38e75e74eed3213471eec258f8518d65ddd75bb79c8c357b4b5ed794fcc914f181b80fadb143ac371125e976358622f868a6643091b0f7b3e8a9d137a54cbd8bafd7e135c410640ca57032824fa87b5a69bfd5a1f8d92ca2420bab396c4e50a9dcd80baaa422e437e7255b861804c82a6c366645d8aeef188539542179fadb47318df8c1c71167dd3e8f5b47472316cd8845271af5e65989ea7ef1ed30b7f081e6d9dc75c1ddd6eb111f951957c28a3f43b3a45254c1e460caea639974b562be1f390a2d32218c240f1374306c049d0e1b20cdd021b824ad4e891389240aaeae626336b75f2efec67aeef754424056f654c83c3fc97fbe5c86863593dda2270ade4f8e9f110cacebfb5ef24758ee57df46c0e9745c42dbf70be6fe6f47e2521d59aea709cc66f4188cb6d0e72a2cad4f00f28cfe5d19208fd6316bc4bc97301590d9994df83f7b7df0cd8e0bee24173b0467595dd8077453dc71cec547c868b353d62e3fa8f1c35757e2913fd181a6080cb70dfef18b1a2be882179287e8ef14838edb6f9a8c1a78d6a3f10f2caaff2b18d2c3a42da4e813af6fbde121f1a75d62503ee444314fb77b385ff957c22bc9ab785aa83611a62e757523be245de8c4c72d3eed6f9b2ef8398d07a8439cabf2669f989bcd3dfeb19e2ca4c55184635edd7a3a113140d01594037245c0dc9fb38c556eb6e93c4d9c0a3b73b899dbfb1d42f270efd74b9ab2d2df9b20ef4488cc8e13e044dfdd543dd95637a3fb2af6016b19f3523e6f32001e0e4515a3edf11a71855fecee07391c29810474ec3adfe37c18542e4c5f4b31d6cb2e5bf446e31d09def5430199bd2cedb33fd7a0f6036328bdbca5960cf93d8f50c0a8e7606937c3e9229f2993b91d914d4d2ef689ec5970d1464d08f4e5c9720c8456a02c374b380ada8a3a5cb118550799f12b01d35c5b96e279d1fafda1f388de3a74f7659c39a3a5a8f04aa0616d419741b6f50e84cd056346ff37b429d17ae960209b6b6421bfd3073b2c163336e7c98a1ef8aa42305214b9c250d0736fd3216dc203c81b521c55cbfbbf092b0f22af61dadf24816688d7c1ee727d9d0f665fa2b47471e842cc5732ff80ab889537204f6f702c8d991a9fa315355ea2e81d43d2ef6b9eb970966b3f436f949900ae10bb770fbd5a0f39d6ed833071899ebb277b74d4f42dece3bd58b3eec4898e6db0ac631ebcff570c8b1d981075d22950fb8dbf998ea6b95de93e983f63bf1cc7cb6cfd284d150902d4b3d026fa83760be025d81e769a29501e6038d3c303d9dc0cec3fdf3cbb277ca190d1a0c6c6125573fc5028d4edb00315b458ca71ca097693b378011fc2d92d174b6cca8e1cbaa2649ed8d0e961446081741050a7af08607da2dee28355fbd876ad764545f5f1f97dec4a58e0b9bf7e4c6b6cc999d0fe5b0acaf89a5df71c2d823356a79202fc61291825c8b7427a324e3849c4011e97e04e0924c88d34f82d211a3e721e743fe718ad5b5847308aa1a4ccbde430ee3698b016926bd29e95904b7eb2407e88b4c8d5e92eac1da4efe562b43c004b36c65b1884537f553ef117a04cfd026626b19c859cecb1106cfc13affa027727438ea597ca98245acea167002c988c172c96cc8525a9a5d4580b84984eb52af7d4326089455e9ba540d7d2c866d4b7b0077c5bd76db2406db60f1f12974700d8d1efa968454c581e6a764ab95add5a885edb7d9632830984badd216f2482f234fde1a261fc37b4f8330d3b29a217dd327090f52565aee6d4ceb646b285df2a3b6591a832214356d29fd9ec381f4f9dbd9e85c1157d5d3fc8b5036fd281361be9cb2d9596d43a616d80f9e4ef40c62128f7156d3da4353355ce7b762f9da589041fe5c319c1e5d6f82133337a7f3520350fd1c663672c2224281057c92a6fe23e5e99fc28ef54824f6f885fd61e917161ab119ac4ffc946ec89d0df486bea1dfb58e4770abd0659039c1d3766f43b0c7f0c6eda893969c0fd0ddfad68a6b636c40d401f6ca8cfd3e98f5589aa25f52c17319cae03bfeb56e635ea91462d0f4b94c09d52497201b9428df0909b101a66b3dc732ccd4b7ba72a63b18bbb58acf3925278e70e6d3866c020b7c140d0bc577c969e26cfd8234adb17c2db54d861c37b253cb6d5da31c0b8150b3f4c7ec2813ff3fc50b7ff1d50dbc6601bbf83ab0220a58e2bce0b2861a7c68b1d1839543caeb0bf008fdfc6bc72b46c11837dbd5ec06642710e1bf98075210e531762fa880ad09ad97653fc18195b67b23ef7a61f8788a9db77d88ae182a796bfcefba5625c714198dada2afcbefc7c1c045cc2f087974259a3b70f4da0ef05844d7caf2e9508e56e35086782166134863dfaf474d48ab23cde2273f31c084f237aebcaefdaed06e6e80821f3a3172d0f911cae8471c12a56d4a6c147db3a2f0f200f96aaf349471a06f3903b204c7f7313b3fe43c2c692115b6ccc5c52d7a9b806e2933f3008ae6a7d7a94d12b24da72f63b8c131f0f802c714a4e17fb6aecd5ba607af6ca8113e13355d4fc4c1ae3d80dd3aeeabb034f616f44c9b74bf11533526f9bcf4ac12b26e925c3a8b4c3dedce7b34865732e521542c289a92bc367692250204514bbce51c345418bb921574cf0f370208fde81fde03161b2e40a83d8be4d2d3e3850b50dc97ae89e0242f0211bf63e80536cc8f09e299ac08fb07b3076e30f845d3d2bee951575c3ceae30f6a623116a37ee09f6f7a1ee79d94f44d661d36c069cbf7b1cfef71f227a0d3b60074d2c0d26e29bd4e038d08a230fe1a084a973a730b3595ccf39a6bd3d32dd580ef7864384b8974f60483efe43a9172d4891941977254cc91878d8d9d05dea2d9272b132874e9fc0a112af0ac8807d93ff626061a197485e445f332a3b60af3f3bf778cbec73e1dade37e18117a879bac424ba5897177ea03c9f2350816118f154e9e7da69e0f42bfd04dbc211f6d30664c616a135d157df16d40d7bf59036700f903067e91dec547d90616c5751fff3a1af5ff78bba674137056fc6540d91d809367d3f528dd97088b762a05156225ef7fdfc4917b62f8ffd95be3a61a16853a1e8fd4a81a1ea1b5147f9d02d1769f4525a40855e82080eadbb857d182830f77d21e81a1373ac86303b4c897dd3bcb4d3ae9c46a0ff962ec8a3feb34d799c7669bc99d7355936c539adc3a1948db1f8751c09427b7951e39f612bc28c658c95ac318ce93ac273add7c85211e676fe85faa318e4af874fe6f6b8409d99c887679d671a086f17d5c42ae470edcaa88972493aa943f121f24ca6c24669c926dfd70d9caa99342b60fa45ae39695879390e088d342ab598fe74726dc0b7805d65da1ed845951560f6f38121303e682cbfdb7e5d93844a186bc1b3248e81689aa7a7a96c41fd411c31057a54008baa5e5e60bc4fe15be5b7b04a8561f0cb330fd9caafd50ad37baef36f0998bec9541cb858e27c00e754ee753f72f917f5dbb8c2752dc727b30305c332e2eb12f3b5e5970cadc14d5db40509e8a1eb88f9f90a93366d644376bb278ac75ae8b5be7c86e95e7c580de7cc15001961b9cde2d3b5f8311d61e762cf2e226767f2f5da58859341e80cdf0a9e4b19b44e4d88be7cd9ee6b5ffb09d84d3b8b8d8d03d3782e0eca0f0bdf09709e89d873b07660ba2c830ec644bc86f2a0179b720f178619e53524d29a15847e8e5b3c2d09b1a67e359eca24fe2b4699fb3cc0400968a525a3083308c342e623f22753a10d98edbe509cbb313994e75a843e95a77f7410c39ecfa1ace928257ff78bebf72faeb9c7a84f55cf4e54a231e7db7a57c1f4ffa8c1409b4e25dcbf86a8a7002eca8bf69a4bf948bdda18670d62bc8fbd687a4e003c0feff293327ab2960359cdd947eb6d7f4c1b3e51da954bc139ae8bbba22d16dd44567ec3416ef2028c03f7dd22a398247e380ac359c0aaf62a335d3d63d820f7dcee62234a16c33cce3d68a78b56114cff93b84bdbd347924416502a75820582807ba55a1d52c6bbc5441d709cc7dd90308c541d1ce9cd4e63ee9a3204b2c2e5da2f49db7e0c293ae7367dfefc168c8bb7b577f70fdad642ef65f86a1de9847c3cd81c4d3453645b2f0127102f586ccb7c4998a3c860292eaf4be3cfba03ce2d11d0899fd60f33002394c761dfecdb9a624caad7c364598442f3d8ff268a7871007e3101d064231ab3aa700d40b6dd9e3c1339f3b309b3761625a2893b6ddc0202ad76d387fd97f5bb0965feb84876e3a81fef95df78855e1dce7286ad1fdd66d6160cb04bc3a3ed147b427aabf7958812b06cd5b0edad1f66bae114802e22e88e69592564c10a09daad4d797751cbef21a0a219f6dffdb502eff52f83a09c7de1dde3201bd4b7cd912fe280bdcd7225ea92492028bdeecb798fb011a866929cd9c44f12c0d00f32de3045f940f0eff60eea0d95131486410c9824d286740e3db5ad41a649ad8f42029ca553c581bb3772b0821b33282120e74d3a2a40e44428be2fd84b0a244090c70c88673f30ddc1a1c8d424b666585f31d36bffb266c09bcc2ee4212dbfa2c665a75aef1c22a42599c5d31939d5d8238754d463f896a0906bcb37bc5b4a7983e0ccb99c99cac292bdd6fbf41a522919d9ab03063f08fdda5aa5336bfe3f7829405b8b993f9dce9d3562ad6e9e8210693ed00f7aec88692a220cdac775818a62bf78b9cfd62a8e6326b4fd8c9164a5b280a1d088b0c1650a156c09a64ae94490d931c1fe105e1a16747cd71c5550cd3d1e0b57a6f3ea1f0680f1e98304000bf11b47003d960b272bdff380144f26b8038ec733c4e7ffe9b54ffe5fe2cf8e3655854f2e2062afbfb24bfaab7f2ae1fe343dac5355dce3ab675ac1c8cee8adfa1f91fc87b6b5f1e4afb067212cb4bc7e241b06a56dc3e72ee9a08d98e046f69386788d159ef17677fc362ad98ebb7b87b82f7e8674d0f1dd356b8312f6692480fd4e1060330000000000000001589e4200804759c6a15741acbfe337fdd7276a45fc233274663b54c9d7841b41e700a1166c537909f1dfc8ffa669cfcf9e7cd8bda75c94bd69fc2e331c2000225c140e8c42cbe187d4539dbfad5795e8db6555d63d9500c781b38ba0192db522b53ea587fae735ec8e8e66f4aa015dff234067f957641299e60f6a600ca54942b42e3243c038997802cfe3c9f7601ec29a9cc5e1a9524a930179afe38b31a80bc19902e836fdc15a11dbccd7e628034bd6dca93e7ae9ccb396ea150a6f677f434d7f85bf010798e0e6536fe8495f09c9e6e4251c97cbc2632cab92e18b379c777e2ec95b620312de9ab4bc634cd8170de350a7d263f693f7ebc5cdc52359d5abbb6de56227ef7bedb21e1746fb59d0c2a836b5922473a9544c268264a425b6f1e818ba4c8f76c846e2db0ea21fd7e0e0aa2cc247546a15193070972100c5ae3ba0a9a1030e6386e3a04d6d8a97a86e3df1a67c919a4d223c8ff809e10a0ae458c537cb2f5c8d20542511dfee62352b800b5c980b553c07f51ef98a72989dc1250ca2c7c3594948f107c6b3591f916621e0fd1c1e37cd9e11fdeb881e15f62c4cbb33c525b592bc1976207e7215037ba5f2c5323f4884d475bf3249652cab440989264ba7987295216a9c965b4d5da29185002abbf389c9a8fa40a4e2705127f1da29e9ac139666e37f4dda0efb08195efc2e970ae4ce0987b976c9bb79184f246e6a7099121db50c4bbf8e65f6a7b7b4ca44cdf70d946ee13ab62f4a4c81da0f392c5236c622357ebae756464e5fc28229ec00a4d5a727891933321e1e88fa76e61109c1e1cd6550e8b9c86b4188764ee4b6be8835fe013c41475c51e89acb71f77a5cc79a75a78bd0f198aa9a8ea6022bd3a6bb59e2309930326eba451ed932247b635d3fcb7aa6bf80d6da088c1d9fe53553bf25f1b0426dad5ab8e87853fff0483aaa5350a0357e8d382619b516442b360631332a71a7ed8143e5dec6a3ca0d2320fbbd09d5f2cbd6bca3481a3edda93653cbbcb698e67400484faed0c2133f8a66253cf493815ca27011dabc73294aac14707ee4e068ffe6f58939ca3e54e13aed06dd0a466a3b9bf58f10f09c9b5e90069de5f7fd85e3614db6ea13829985d60e503e133a8d13d6e74f858ce80f61f2fa935bd4a3033cca9e622cc5f272f825a04b7503bfd79cb590776fd042d514b2e75bd6cbc7f7d113db4e0c9235402712d5cef1d7fa410d754f07cb1496688f12b1fd39a7d15eaffe81d57e9d834e873bf1d6162101536461b43572003dc7ab720f444740e48e038d21e083734783cdd05239bd36261566bf6c98ea1d25deb29ad190ed02cfde601b53a9fe8407332ba87d8f657b74fb14c1c6fa80af1d304618436ef1db96923e075c7efada68bc21ccbfae05d7c778dad45cc519b443270544b333a90c0d6c9a0bc1105022e04749736e524235b140d6570b2a6ab2cf37d753e530f12c053e24c4086e70cb9137e717bfbf0fd3d9f8dd29118a8648ab45e5f976b45bbf5acdeea8ca54d489166e8011dd9a681c5ffeb78abd9b37d809f5a0e9b167ac64dd07c1b348670452c0c42bb13746617ac06bc0fdd373a90a63df88fa50a229353185fdfbb808d7a602b573c43f285ffa72489ef832eab6a115dd819c2bbf1f703bf0ed06e8ca89066360708694170a5dc1485b33b1914aa39051a70a10748d8491186a6a23a8f67409fdf575d416eb3842e751168887c3b50d18f6ff2a1341ac5eb5dfd2f61a656c6737217debd40bd4bc312173f1d5777a50d39858664af0c33e0566ea5783faaa809e3a2b087034f7fa05c769fc3488252eb0171446fb480b27531e707a825b6800c601cb79ab92ef9d1737b8dbd5f71451383ee15eeea6bc09f83dc66f7e5129ed3c37d3d0d176c64920594d90af9ebb39a040194a97c0bbdf65a7a45ef0f2cb1b6b99c1d22748de18e50e01f1ad1ba9cb7147f02ca0c080ad4ed5b707057b483214dd4bec6771c65b57d61760649fd1f899db9a473e7e21a2d0de110c70e7699d54a6957b6d702d3244567e27f244fb6ed88417ce5393f3b0973286c38298ffe14cc47a7797aa25c15dae6a4cd43603553d21fc0eb3b930725ec79674383aa974ec3742d095de6277ed276e9c6f9ce7d0703e1eea10cb5187b45af7e3848ec49f5c363ec0a1f93c03dd49ed3124b3def798c89094f5e84ff3b157780c1dac7f0c7d334a164f06cfe1e9943b9e1b7e36b0e145c1e900121fa0dceac549bc37e268c380acd6505e17e55322b371d95d859cc1f4a696426fe5a3bbbd84672e4fa1ce588b026f370737af89561ab31d7d8ac922c0310ea26a0bee9d3450906973b402f0227ae427f796e51907d10ee65d4bbffee7ef59b888d9149abe971cd2ae6c48980a4064f046b5469aa1bbadd3b41eefe71b64cd4026f2d9d6636b4c47999260e45eef3bae7197d189df038299786f42bf3bba900ded09e9231801a813674ba8b934669febbd2d5a181ddca948b904cded2115d3682740c6e28df3c939ed2f30a26fe84b10c841f68431a02312bb29d6cf168d3ebbc2ffd0bdca251ed2174d73dd3dbb2c3bb5bb549b75ead8936ba4b11ad431dbf6ff5b7af12bab9edc5df593670a3de8381a0303b596d67cf124a168ae0e61b50f7a053fde968517380681147bdcafcd06b225968e7518220b779603c8fa9dd422e6fdfd06adec0f2adf6314f888666ce4fe2ba6c68195a334a73c6358fed67c1c114f3c4c3e47ef75bdd2697de14f73ec63ecfecd8608bf60979eb921d3414372b8a9674a63455e1278b4f5edc1a215fb57088af01e948b23685a93fa199d646581e243a795e8d273824acdedc77ce4659e13b58e7066dfa5fb9facea32b8cb99563311ef6bfda29ba137978908002f9eafa8e71c5aff58b6de3520b43e48d7316091c2d25d73784c44b039313c0f12bd0db7421101c34cb65424edf2eeddd0aed220f28c02c6dbc476d3d1dc470be91f3b5f4eaaf790abd569e6f2793ea52c8d4ee1cba4bff7e0058a7ea289a428a2a3f965addc79a5a30a464db0d9ec79fe72157a28be888880ce35d492ae884dbc70d9267c9054551cc443685fe3df06f1713d10127e58982b12f81ebdb39c97ba0f8e7a9c84777ff4d32ae4dc75449b5027eee7c3ae4eb9b475089d992991d27c40702a7989da54180f40b658a940c411070f17ed6dfbe9a5351af0441abf229f45bd0f998e1287e703a7856fe14c380a7fd861306ccee36b728040c07338353a4ec1623edc8e2ff6978d310cf73f8da713423ae3a21088501f4cc2a7180a373f1b7555f89001a112e37375a33586effaacede453c583f4824a9aa8d589c8458ba85030162d8d9f12e4b8185ee634de5813dd228f7fc9240d7c3a19d77a6a489c8a1849e59df426f6bceb7b4baa910e0a1051476f9fad549bd30d6d67305a0669a1b0358cdf8c3260998a69570d42d9f48827d6aa0482a2377bfefe2bee99205b8297be4c6f2887a9d88663f31b3912c04e08096601337dfe2bfb345caf15a1856a85ea7dc05dbb1144511f175615d6a4664ea9fd3e318f6e788cb66f39926027e7242548b9ab64d6b53001aaf620661820fa77338f7d86a357f95e7f507609ddf03d51316b676b9b50b3dff042db8e841487b61fd80970e3afb08d3cd9fdccde2fb992d34c6603fc4cdea8c362b28242fae3b75b5645c0608b23796960ccd8d59633b4d70f33f76217e5984af7e2e139c6b6c7b11ee392e64ffd20d079bf499761f29a5af56b84a7644e69aeb22aca5beea493fa37cf098365f7b50f1ac7ab9981d25c2af29288a873ac3a6493dd96797d755618947dc18f48a4010e43cd1de7562d358a665bfc86aa757f7bf156f0bf01f24916716ef23d9f796e9931c4eecfa79fcad87b5ceec5e8b63a484c78918551569f3049380c740c9f18dc3b78853b183f177026317c3ac9142aaebd4faea56861bf47ded98797327ab621f89f87b65ce8faf20ed3866249aa57128d60c206bb522a60719568035a4bf4fef0e2a687d6e5bfa9001d155989d61880ccc6c065d407101d91a4ffafdc4fa1f486eb1d617fd710873cf29d5ef131a6e7eff94ca52b83d669cf57fcf2e79116a5069f90fc04993ccd06fcbf02ddf951510fb4f0b0847bb950db8dc19c573df4d21ee4dbbab23cc907ff422908566d9f7fca44d97f588f9aab138b0cdb495ced352f143bfa92b3fde6ed3cbb237fdb06c2cbdbb4b9a3b030503901571a121a3dff64960c24535391d886b728a9e3ec9349be16081df593d5ed700d1440047f2de2fd5c6521f10faaf511bb181ee15b1e7ac01348dc26732d1acf440c1eee63b5dfdbc303a68ffcbfecde67017e6fc29356c6fc53d40ff495018351cafbfd6b383b777ad813d2b54decf10bc1412d9e887ca69c995c2879e8796749b884c28ae358803ed4567a49b8968cd41735d392ab08845629c0e2f6d6f396a746b1c28014fc1a8145a6bb3bf2f8636b1d5b5265c302f545bece5ad54ec51d3f3250ecb6cc1fbec8856dea56ec388a7de9fcc439f42fc2787a778bd16c335c66080b3863407694ed0158db6dd77ebd8c8efcff57bedabf9ba9d7f3625e83edf3ade3330c28049c9f8566e5c59595fdf2e85cde9589ccd48d1d98d87dcd2d2c9df4183c2653861dabeaa82adfc837ac171cbbaf62911e636cc97e81a5274b0d1f262106d5aecaec35160e79390310508e84fedd735902469f4565eb8fdf0727c13620e19ed70a461769c73c3b46c90477fa25947ad8ef0ca1b93728f188ae6e41f157c007f3fdca859ddcc008b3a135107104beb8497d03998ffd80d81e197f904c48efc717c82c5f2e6d3018329a7cd00c84f8ed6f26ac10ecf398ad6d8c0e7e2d1715e7392f2fee327a6ff331c81e4d62c658141a6bed241cc9ebf840940c161885ded0f6b934bc2630844787487db548b62f0906c31bd42f6f3f9488d091431db1699a24b0ce25b1e13a74851d97416f111faff01b7b5452cfa497d9e78343fd11324804ce055c68851bae055c9d6c5a5bfa052826a55bfae1a7624cac71b992372381c189792aeded6ca5bfaa3bbb2027ea64dce64ff62dd404b565fb35617cefae16aea67341a04e0ce148bf950fe5197164c4377580488a7da1a4d95ce2c568448a9c01fc43b961bdfc62b12233d65754b4e591b1021a9b1dea87d9fcdaeac91e08ece818cad218cf53568fd99e9d9679d23df916719e3521f75bea2189ae8795d3796eb842231d5d0038fdd84148f5b83421c2ed1dbea795285656530f336bf8b5645353b621fdae159d114524112a8bb7a56b026e3ab5f0c2b16c581edf6bb38c25dd331bb4792915359e5f6a059e720256d93319af96e469f26b0b2d849baeda96b16f9364b30b92b1389b6e97600a34c6621064fd826319076cb1d5c5203d36e6cbfba5d9b80dc1643abe9c002cc92051689f93e12cf207aeddfa1bcb8d1f22d3699fb775a1e1113f16fd08e42da31d2821555b80c752721d9ac209415370f04059c63cb26fa41d0096ef68cabb7b543592b54150fce70669b2643660968c04cc7d2ed66e468d87f68dda8be5109f2519535af9e0b5fb62cf95b282c389e9856fd54a6444cdb9d72fec929b3196b3f5ea9bbab9614e2cc78bf2a53227e4f3974c368c8b7fa481501978e98379e14062dc0edbf05a8f98edb4a5a22480f62642610930b1abfed3900548b6b445d7d8ced351af5b594f64dfb17d2afa6ddc9c1593cb57aee4713c82a90643ca72fa0716bd0c0ea98461bb0f6436525d47ad4745f28924c8bb967e351ce7ba970be55cebf6620ee52aadf6e8ff2a58901cd0cedca36bfab79285d7d91ff17b92c7d1ac67ad8b46ff69c6717b61334efc06566eb74ecae0c302039c0000
168 |
169 | ** Weight: 11192
170 | ** Virtual size: 2798
171 | ** Discount Weight: 2130
172 | ** Discount Virtual size: 533
173 |
174 | * Transaction with 2 inputs and 4 outputs: 02000000010265c1a5c421e567eac3408b86002ec2cac34cb11f6c6f0344b53fdb8a2fe5d74200000000171600145b5e93bd6d3db526c212c1001591ffa426f3c8e2feffffffa426ace5b8c930247cf8d5eb770e220185b55e9b8ddd9009b92527d6c36082760100000017160014e0f4711c07626a8d15f78503d47ea13708c82f28feffffff040b85401de91c3f424934652c15b00c87cf64163d8eeca4063f4d5eebb05e6a3e2e098392af4d760ebd5bae99e5f75c6a4e03f867e6a71896d930e209475817e3393b03cd899ea46a41a2a6f60e191531af662920d468c590f62fcacb83ef40fac9586717a914663036ac1af89a04569bee85017a7d0e0bf92332870a88155dace95bcd23494f3535d7a4cfe4c72f6bd382f53074a5f0d61821d6aaa108f4c3bf6e149ddd2a49682ec5fb30acd2eb152104f52cded967f9478cbdb87af603ed9f16cb3306c159c3319fc39b06ddac69822de3c93558dd9f2d6b291767acdb17a91425a191fd044922742b497c097d5288e1c92acb8e870be1436610f55673220ed543f5967d5359ad9f9ff3cfe80391df1ec2d5b742f240095f363836349c5012b7cc6c04dbee67d1f62e057eabe3c93943ea6775f6b470c5032a7078c6eabd65dab31487d6581a742fdfdb88df7119b3f70109ac28e3567dd717a9141b657d7c7b77763dc834fde13cbb8e350739619f87016d521c38ec1ea15734ae22b7c46064412829c0d0579f0a713d1c04ede979026f01000000000000018400009def2b0000000247304402202e7f8a862c5420c55d9cb0ff91bac91e2153178b1c2d412e0acbed5943a802b00220480afaee1a779059141d923bb772ddc2eede0ee4324af86cb2d78c02edb0c045012102084fb12be92676625adc3319b43e1c5292b622ed8e4156a2f14d95dfc8d1e3ea0000000247304402207fac08a34ea8564c44a00367098a07b47b4a0e2f3f0e134d523bfe231e0ab2e10220541d7159571860f2a7996ddbdc4da44bca186091f6a4a513113fd74a52ce7a7c0121038c417286b254c7da2a4b37d13df7ec35c80de8562c64bd08ff21d1598999c1900063020003dda58f718c7f8ed87468cc71771d2763fb31860af6f18ea1c9a7f9b7420fb9ebc6c54676e79d9f77ba5d5f6fa5747d2e560deb927b0de9e8f65977cff567d33391d65aca5b570b5e6c83ec961b81b59b8c78059f4a18cca2aee563cd60208bd9fd4e10603300000000000000019f3afa01366905c9b0eecb5c39bbf271c29bb7ff91e3bb8dd34aa0b3cc27f40473ffa7885da6da0062ce87f57459f2af09788f5cbc520032cddbeb71206e45ab85bc4325f6753b5bbbc9b7313d6c2b400b37fe635b71476737e398e89d2e8e27190015708e4b676a91dbcc8e9572e4da3308b8615231f4320aa90110e5a9cba4c3e3aff22cf6a152acdd81ac520468154fea739f0635c40dc5a95ff49f316a60bd978d76b5390b8f9294e5d0fa2b40e51e4ea2c9d7a402b1a6590ff38d611dd671399bd91f4d0a93ff23b97c24fd088b99211060c43a237293f75f93f6d2ce40e5a94bc6603a28fe358f2bd7c79fcd4df0ca9146ba071e380b1f179d19e08b7a4c845eb7c19a38f6db94a7b89073bd7bed874f767b6719e4300b94545f817e9bacd8c2eefdd626ca633fe8dec35c1def9a59aa618e0bbd7183c7c20bc7a5a5c564659f3d29a72a6ea68b735963e2d25540cc49d6b67b0ce015dd10b083d202fe84b0b368b27a08806bd8044f0460c1e6d0fdfb5bc05a72de7f2d03318759dcb4ae61b8f861ce4b4d3d7c4985d737385e2f171d484a41f7183f51e700f420820eb6789042b74728ec44b4e05cccc92f4cc59b2abc8c3eb35b28111758d93b08f8b94c4c961b203b7305f3e4e59c71cf6ede9898908ee0902df5324482597e75fb7165df7295da777e042f2b5ac67637f24be0e0e3234662fb4a2de6fc72e9ffabafc6f9593f3f0ed47fd412e2346a4ae8dc3538f768e97bd594d2cd07abdb7efebda3a3a802f7571976592041d298b6d8e80a5cd0013854896866f1f2f61e6fa270e4a77a5cdbdb77f39a351743b83168fffa71783b456aea359fd6d442014b0df9a784ad3a78cf67809c4700d52f0bc0c83860f2733683bc0bf691d59747044055517e901135bdbb88a1f6e4db57b96820d2f0d76fcac2e0ed7da046cfa11773d6955a419c6080b09320196c4319ee1073dd007ffef828efd87c7345423e3015f13edf51debb05591eb8c954e8f3dee615cf831c1666c6992d0997f0184b086711ddf98eb97417655076122229983eb780a7d607d1c42df1cd1fbbb893cda25ed0def925548f97db8b97899218f11ba5d8f8856f3b6f695b84860ece94fab3969fcdaffc52034bef70461aa39cec4a6cd3f4c37a72aa01116d0494f1b6d6604f240585a1fa064479de86133e44369bc102616410c58c67b86b767c6192c4db3f0a8e1260d9ea979d63e80320b998a5ee32e564f7e945eb6819931c46741f9f8ebd20c683b3454336a073beb843d70c8f7ef22aa08584e6a7723df645710dd246296ef761417abcb561c93709af650b5eb41a31d8fb8e17ca8dcd024539d0c9adbef5c2d7b907ba91b46422c25f5ab8fdaf23d735b219e6ea602eaf7bd5bbfd8dfbc77db3e2105070ed3d9377b5a7e679f1ea5c92ec81816cbb35fff7c3b26289d25cd1d59411da40a7dbf3dbda1e0eb5e53b5c462d28b4a197dd852c27e4bd470dfbf46d62cf0a699f04f482951ffa15c2160579139e4c8b22b124fbe87ba5b727361127c1bd48818fc193cb89e32aaa1010d56b73f15160c332dca9327b5eea4562528d606e218ce035592e25143a1c16cb516b22d3dd01cd26cb5fd355898268f0c3712f1f070c1ac93f64a2b0006203b893ff4b53dca0974bb783571c7d7ce7f1a2805d50ebddcc7814142935e50939d0eb401718622a0280632d9157e84d77f2102f8fd9b97af8cbe848b5f6acb7af6a16a8377eb7cf505f8c31918c1a2e917bbe93cea7c3dc54e17fb2eef2771706955dc815d5355ee7eb3e81ee795052a2026609067d5d37087b2f5cbe3ff87b176e7722cbb58a1f9a58ffcceb394a2bd0b6f3f276aebd2d2b9b85a510dde7755fc8f4fa17e4f63395c631f350ab948516eb8c1f481a1eaf3d57bf7dc002003eacddb68acb13d5de234f5964a6d69b16382fb080c0c572ce1d826085bc3bc27231a3a1e7e1f190e215be228dbc42ff51cca328476e45188b92761dc298d1600782027eca3dccb741a9942c7d045ba288243bf3cb33717639921881e38f297c70ecb0aefed97caf8b663206e637e5c3f0800307f05b679ab7ac6833a5c2b719b03f93894e2dbebf4d4800d89bc790f2e3edd3d4e06086b1efb35ea542bfb6e96e85ba54d6c780978c95948a84c94df2c05ba70682dc63b067fd7b0d56ed45b13850225726b82cd741050ad0b7e555e650d2880142e0f2144e6faa214c9ce285ead0d443d93e9ae113fe4ac25333580eb1420b0dc68f298d3158b69d386385483c7567190837ffb8fed85a6ac57d7949e9470be95bfdccaafafaab752442df010d9cc502a5ee63c7ef3ea10fe8e1cb6a0a12e3633bb38319f2392d926119c9f93ab91e7e660d491235585cc58cd363ba0f9cb86becff14532ec769faf0296c636f2a21ed5dfff26f588bf1a0af5c4378441a8e5eb5cf87d9e7a137cbbe8246a1bbe28b2eea6579d718ab9a53f8bb51baac1ee5923d047742659e14cafec8186359fdf4faebad2562aa70f4ecccd93040a86486cfe1c46052635d71a64ea179bea31b1c2e0a2e644a91bdc01c97e9ebe0b191bd6d7ff555bb9d277839b2c79e4e80c46c9921e9de5b08963897565e3e0923bf6d483815b789a9a1418f71c59c82b6918037a1d4c30ba91fa9157701f51c32506fe27c40fb0744a978722c0ebaeeeb68d176c63925a0094fb60103c306a2d3f018b6668b93d80538052b6b0e20fdd16c63f4eea39a3b2c6a809bba259c60245ec62fb91daf946dae4f943fdf5a4c5e5581a86ec83ca3e37eddc2f05b21e25d8f20a9e78c07e2effe66cd60ebd19d16e88dd9464cebb48948b699fd442b5827b0e1641a47413c99f13bbe5913c45e2da3ce80ef17ef7e0baddd8ac10770e4515f16f1cd3a335bdc5065cf298d0dfd6a3de4ff62eeda79abf551da4d7e916c3a5c5f009021610be64754c92b4d3034c82f81829e863d85e3be23c9a18a1dac57795e189bb07cb27a356623321475dd5d9c41617a1206e0d5eb0e7e89c0d61ea12d0bdb2f3a08a6cd9c185e8abc3381375c4a39ffca40d94253b1f773cacc295cf135a042ee5c4ce5bc6e363ab7269392b4c68e66f67c3218949ba027c0e68eff65bd2f668ea7bf2443327c057379dd22584919be5aae8f17eab5f4e567d1d9beab1335cd4b8202c75405e6e15aa936e6911caa54371ba971149fcd1beb6011f003f780a2ac0b771155a3e834e20b2e7df746543ac6b8450344b7db63aa0b40605256071618ddc9d73fd6902cf97fb4c636afaa1bd02c70ebc15fc309ee6845e3e8bb23f7dfebbda85b893bc34c285c09d2ced9afad3fc59cd192f77d568269e9068aaa702e9b2cc3faf6941bb01e8917467ee54d99b9220f4260b58e84cd65c7997b8741b724c805f9a08b1ef6b6388ab4a912f13144d4f1b47c21f29038fbf3af98f2bfd6294d1c450d3a66a18f1f3c12026fde8b923b86d52dc5bb0532a93440861822bf176ba6c53adeb42d2644e4affb374583e8a800ef65160889f6b453f3081ca48d27c96ca1b0bb97d190fe8c4b44089fca0efba3e84963aa53ac40ada2d1bad3c4aae376e68ac4a10f3ae4af04b875f57ebb034da2fe757ebb0f8e4b102c8c5da83629933007b9c2c64714be5e3b8a9c45ae7a00e72a943bb1931159aa2066164a07d4acfb0017849aee73eff1d37a92d11eb9e27ad21ada31408b6e04a1175e8aa46acd3432aa3114f0fb10e34c1bf5348d693cdc91dff58f13d916177d72a7c242afe17130f217de0dbe04ca5d34e98cf0ff47bc791d6deab0a391699bc0d8458dfe1ab35b0eada324e10cbef68c2873d2e9d064d01258099b81a9e657adb8bb53184c639887463eabc4410e4de02191a46dae8b4db7cd831e76eaa4575cce1ad03239544b4deeaa38e3c9937172bfa1f13189364af23250963f80c3f3fe49a4c987715c335aa63b49e89f0be09a0062694f1ccc856838fcd067a3b6394823c67a55f352f301cb2849ec7a7633eb3c0858f93daff879cc341929f7fa988b379ec04c86c2b71f5d967c09f14e4271d06f6f9e6674595b5deca77ed39b038c4c0a04503a103dda6dc3b6f444ef9d03c1329f97ce35d5c36c2a800230065ad4370ca814a23051e0bfbd295117749a856f5dbac80d9063ed84977ada3a662b0f3854fb95d219104719614f20917e1455e9372e3003e5482621760512587f15ce89feb8a33c116bf7c31bdb33eb6db54e90cb4e0719883f193a489b89972f4881bb05205f6efd08e80b640ef1d4acc9497564ea9e4f00ef66c2bb2ce8ea5e843af866d6433a9f3db1b951876fa649763ba250f91027d8d1f2d9a9a3fe6470f67478723beb0456e1ce7b4ee453b5e023ad21d7757fb7a940ef281e23b3607f6e6ce63d8a40cadaf5c307c5094d3b228c440865e46bbcf046902bdfd75a7a00675ff685a118a6a59179ce32019d068aa000c1a6ee190537f4b9fd98b498722141d1690e1638554dd57e141d4835d7b535248bf6178d66916a0e65d9b46ee9b056b10cf55cb84df1414f6ced488b9f0be8a5cfcddb0b000a61b84fb3d391e6c38c1af57cdbccebee5e1775702a1b050ff461c00518b6c3450488baeba9a7dbfb92910afde9201383e33badbb78096a807e71ec551b25f2099d5933ab43b50f7d82c4be342b17cb65ace747c840f14db27639d90abc2278b38983b0dbc83fe2d4650a7095051d2a1d09f68bbc439da2859f5414e19b1612c8aae119152a10acebdd6677049954dee0575aaabf2880fd1b861eae7e332a3673d6cd0a74321096e56f65746f82b7522c531c58612505bd387415c91fe4c1c41af1ed601f8dae21a3e6b3e1523cc671d0160cdf524da1b07cbfcc114d18f64ed9589b29f87029e11bb82e738e83c43bdde5fca12ecbc85ce272264437376cab6ecbf25f141a5ce137517d6fb0e905884582e26074f447a451a8d9a7005ed4ab0b22cc851c882b074c3b865278865518bbe1436fee52d5406ed0274f4c8001c98e814a785e865efa72d66acbcfc2aa3205fbe5a9dffe5e7bd5ffb5fdc3a3deb1a1d216698a7b477e0fd970698507b63a7a05954e9d4cb0b15043bd39be489df69fe348f6e052ad5d3f00627be33f503a2b3d40b7420e453466f7cdf747526176d521154eab4da53b4c509c8084e584dc335ffe5601725d40eaa4e48562c9a9e347e4fa49858f245930f3b9bca074ca704a9dddbd0a503ee68dda376791345e2ed6f283e644f703b66f771b9b0d7ae4e2d81be80df9935e9523a3858dde77c8ac905c902c6534f987c26bf6ecd87f8e4bfe3f234c7c1d49b175641264c3e7ce74344bae05c79fc9fefac2f5b89ea1fb12e6b330ce97d9aeaa5942c43a587acd4089db6c69fa25face0e600e6e06b32ac26b05035fa39f50d8e9e995125ad90885e249e49412fe6d8fb669673e54f0e245f9213d30c89332569da7f1afc8efadd7486089c6f87c44612bc4111a2964b324652acd4998a18625134cea25f93a09c34ba0a66b84786ad8d8e30732860f6352166322e6501c76fc9099450670ac95c098a9d1e17e3d83cefa3092888b4e691d936bee0484b1137505754f2b44a70a0d8744fa64f9e14b491b1988928d5a4b2a1e700cd7ee215239a090c5ce6276e29df8d5c980623ad44f83f3615f8c5040d282cfc91f8cebd24e18ecbf93e1dcf56b1ed924aaaed1aa137b3669ecd2696e1bcdc06bd0e104110d3810834c74ebf38281de1c1f87f70cc0d4a61824840332c446cfbda7f37c92e69ec5629cc59b5e158a1107b627ade5edbef0b665106b39811470f0c070890ef664885d92500ff474251f56eac69106a1467599c79840320a6dc56932086644c33011503f9a397beb110ececeb20a00ca0e226077630200036fac08273b4f492e87e9813de67f3a16540de56796e229d34486b44e772512e9a2ad83bcfd4aae0ded409f3167399a5a25aeb86b569647e8111d067ac50bef976afaa1729b7d0bdc43aa315bb91f999d26255a18fd7a80fa821546136442fec4fd4e1060330000000000000001f073e00013bfa5f82f45d0024c0809caece86ad257aff66143bd881fb2dfbbc6cc359c4ab16e8c4b4300f61972e27ae6b2cb9c06dce90be90cbf7bb189444341e8c4ece299a43cee6d7ccce5104713dffc7e95ed6ec1fa12c76a6969e20c698f7bf1e844459ebf661c6f74e66563be40d10642ea08570d1e97d8726369375da2721090ded210f4e56188d089c6de1122f29b868245a8b763e431d3dc5f959ac9d84b3f269a616a7e7deff256d1eaee8f12e40f10dae482a49fa5c8f62094b74dc48b828d81f119482c896e3551ec7139b2ac20c510de8c95c7eb94c8d84434b6e320f6c2df8132fc2c04264cd9cdb99f40a39cf763415020298ac98e8d1f83ce834394f2f1cbbca580a30b5dcf37087f5a109e97bfdc900b39a2e9d5d6abc26444239d45a3478ac49670672fcecfb58deb9eed24383e638611a0462c2a5523bd7c9111e040fa0e7ad20d3d51cc5c71268d93da82760551d45943ef8228ca5782a0e0cbbe8c9c75861891eefe956cddee8bb4755a867f491dc43fb57381bb8a092f8efef40813fff591ced33ebecc09c68f6d547a15ccf2e9b331e6e211d63dbc139f36f5678ca362c84906075e353baf1beb01768d52473cb29299fe3d954cc30180a1e548a3e08d261c51235ee4072fc508d7dca458fafea8297e5382bcc1cfdb64ccd1fbbdab56cff4a0891c3e5a61356c286acc21d86b7978842a399f6c2d30abe9e3952bea58bd80f66a6f97a2dda11340bcc41a519edd56b05e1807ee980587c3266582d799c05caeef28aff1dbf9fc409111eb3a28829177617d53c7a53ab7de20c430cfe5c6b143fc8bfd7475f801a9690d1ac3c1074e97ec2336dedeef7294351253b9842eefb531efe47e53d154abfbc98ec848d24eae30ca90809e62841bb3ec11173fdbbbb880192c667399a0eb3259ab08c30369184198476618a4f3928d50ee72f93e5345f8ad2eb93f7dd58886e253d35b1811b6bee2f71eaf3880d4ba2bded739b6ca87819f7e01fd03d586efac80b61fbc2095a54b0685d9ac38659c34b54a5ec3ec24ddf4d56153e2ffe57862120cfa6605ac4cb556c76e0a9c35395baf765811087d4610fb3179ee2ef9fab7c3a90d97b7b6b2492ef532aae62922852706ffc5452d989544ded09a5e72237728e7df9d92a77fe2e0dcf56bf46b29608d2fcac37df13bfdeb13e74d9c20dd38f391139e8c0c83143dac39b6c64cb8fad3de62d611f28978b2885ced749f2659e9c431e55c2525f2df6d17a08c046a68c2eb0383461d96dc322e745053378610f66cdd91a905fca646bb3cd60cb165e926483fc8d130819984a2f92cbc88b5f6230a5923a0c803b4705122e4e776fa529366b27fcf366750807301d29809f99e1b513bd367bffd349d93bf7ba8cf31f89b7c808d1fb4904218efcd41adf4bab934a1630b83610aa6f17c7523d6e35cb55d4916465e579831b5f06d4f1ac8ee16506c2c30540c1b0c1ff594bbe44b34a17a0aba972dc9515a9315637c2412c84575c65fda1cfe53ea283c7014a16729b26539e9139247fd5359236d419451ded76c7a77c23a0fa6bfbe728414c792e265cc38908c418c800e8117cc96e8a36813db7f1167fff02abdbb5ca6b7597b3249c3d5fab614ae71cc7c1c2f5ea57159495d174326f7c98bf22a216d6229f65cf19ef47182b90ad87669a794ab955ec5ab40e6f4d54433a31aa557a3f2f651ff474c08abeb289dff5e4b66a0449ce0bfea576568c4fd3fa7b316f003188304749a880b9ef40de13c2898c72190318e6b1c2361c1168b02ee293f3056a8732637ed2169e799bc7c3bcf2e44a95a4a8c773bed1111d4c18ace7c88d28f737efa36de840ae2ed4884f918d88b02904fb72f3e91630f046e83b94a159ae193d97ca922048fad6b9837a9624f7adc9cbbc01343b33a0a2e361e7fde52e9ea8ee541f2a723ab4c96d4716af2abb503215dc91312172ac09e2b41ee78a63efa2807a9fb31d1bf200e531c0fe990452568c4f9bb354e7fd58ca086ef3ef5993fcd015b123587d7debd8907a3d6b44242805b31bb3929120db2f1b644e19654fdd72e15e0a38f275a1c027b7933411d626ba76146100094203f33484790d964e02dfdf8778206124c9289461df5046d49f2c5466c31eecf1c25c08780bd54c74edc05b93b3520556c8225094d3d5aec362ace3d85d525b03390b01ad65c7202cf8f92c1211f89c8561b412f1f0f84966f8747e06a4375cd769ff6c5f38fc3be12cb0ea1c0a86de66ed2016413e9360229d05a52f6980814eb172665464941be91b164a175e1a8b38121fe12095943dbed37a514fe2454f74c6002cbdb52049a24fc7b747cfcf7d0a0b8a545fcc8f2eb38568dccf457782565144b3ef610c38de74d42de6a1059ae7a45570dace2aca6ef07fcc0be1a1ac5aa93e5a3923ad4b30c6bcc727eeb97c7f54c1a98d0ef3b82f0ba9a832abd9a0e176acc08b663fbc477af4d1a561080c88f9089d4e518a366ee26721e5e9b5e955790ef26dbd150b7e891fb8eec265fe20d05cc3bd4dcc1b79b31830ffcd30fd75d3f1b8220beb5f8332b355d6833c2842903f956037533d787d2a5f6aa454b097e797cadf197ada9da2eafbbc76cb74c3c9d262043bbb483c7f5f63f74e86c9a1faecce89e7e00c52ad1c91c50aee63bb0249fa05c89175a706a4772459d30f017f5a9e74842b5135b9e0ddd733147713841b9b8be1195e4c5414c0353ea1460faba592a405af5f1686c31a9892bbee810656f9cdf45641602566312294e260580b96e183819740922c2a39f1ccca81e539b3dcc88f4ad30000a27d01ef1f23455a7c075d5012d853c080431f2dce9a17aab3cd75349f80a22e7d97318679c3ec59327e07cc654ca374ba9497d0c590a7b1d10200e944510ea41b457196106584a5ecd2811f61b9fc14cb2940548a50af810f0d359d24d19d1c0ab9c3495cb2722ef982351cad33561f3c58e3d9f39bc9290fc7f6214a51814b170633de797157f06a39e90f7d8552e7c098f74847ab4000cf2213165c320049aea984bef0bd5e7f632d33f0a7070590f5caf5825e6d1ef98806079b95f520d8c85439d52d57d7b34aa72103bb02ac03c24e809e0e401d4412bcd880f5fc92e31274e3043e36cedfae5b48ba6f8853de2a668af5f9fde0aab320d57a795ace4859d9e8a572f4608b89e796a9b595b007b6517b09d1dd5afe25eff09ba36a4b0d8b161c2b16670e360b49e772cd23743548d695d6178459fa7d195f18726cd2e59c9892a5d6304644528cfb06367e6b55920277526c88a825d0a52c7437fed3a16e04dfe3de9d0c108f35de708f031a16669961da01565b101542a18513db92f6cb7f1efcb96a16f03bc90b30914fb8f09ab78595266f9c485163645022f217f738e2348a4dbd46e42ba8c106f0051cfccb9ea9e593b5a7029f00a62572b850456ebafc73bd8529f279f2f49a476a79b72dda8e3ab47385369444264b91430b95a346259905a9246eb4098f3fccacce752dbe1c02f60304c252cc31e557356b249b20075b01056c71b99371ff3917eae4fb29c00c39f13f78cfb96ac8e2763ce736232218c88b07c151afb226a8b3a99f21256fc8d832717b6c8d18221fb65b7ceab75329a3260b489ca78ae2eae0c01b68231a8b8786a413ea395611fe4d67f1746c53e56cd98badbf976dd86ee6ccf28249b5e3c4b589b166082a3e785a65973b92881147ca3c8cfbeb54913e6a2fd427b6fbb553bb5ac8721264d486e1a58cb867918dc5810b1b22fa944a74ad8b7038846cf63890c2eeef860f28a5be1d46f84ca5d24d1390ff563621f4d7c0717665cf67fc350ce2e7f4d6e239ac11891a8bfccfd57d48bf3c116b9dfda18f2240a43df0fd37587357eb91c2a5aa8b09a3634b59a85e4f040bf342ac0ff9d516c30ca6416e97aa654b9b73a73eca004e4228a4ab445217c9ebac84b34c3bb9945c81bcaaf17d0ff8da3dc8aef1bb268408a82edf874a31015330c59eac12d8c5125e3b41327f26da6f28f869e2864e88dcbfad39abe569d86460e42d48d95fb887b4f7544a91f50967ab3d6e771ccc75cb3ea8d4fb08d7eb0f5fbb69dcb7ece6fea781a056ce23a4b737257f574a2cbed81c2de7f1abe493609e1dbf591106ed13d3d5d12c5c692759f0b03d86f7b3c7234704be8055bd87cacf0088aee502f8afdf0e8b48e85154fde3f3185b2c56830bb3aa8ac1ef060628997e4e947b60a7416065a16365fbc64813d4e8d68c85b2cef37e529de8291cf0a54dedcfad5ed0f8a2677e98919666a1cac5bf2f23c3142f65e49bea3c4f93398717f80c01d1e1b593842a226193b57c9a6f6cdb0f5750e41db77b4b936056a3e2f93b9d52a8030767c7fbca1a9c4cc088e5104097c7146ed3ba6c2366a7cae345f338feb01086a3693432dcb82d7d92cfb6ef9a4b1434777eb0bed8f901ea86d765293a05fd0420ebc21a78e60479da86c4e43c2717f8fb963b32483869ebd697a8c3c513c382744eca1264a4e3801d35003cc103e13c572ac4fbe2fa2a4260dbc88c60af9eed72e84bad57749bf3a7638f9fc8ee3c17c92e7a3c72c3df99f70ab674ecf9859fa30331cc05932eaec0a2ed952829255029779eacfe33c429c44667cf253b838521da5317faf2fff0bbc60968877024f4bf74aef668173300c49d039bcd89777990864b5249d0c4f9aec9b540e9296c0ceccc85d96d2c8a9851c4eae381af7eea511cb448bc98a47794f07fd78a012e6a78ec65d81584d22647f5c2bff98e5e0d3aa9aef8eea7c4a8dd985f9b683beb5df9081e71303c669288b18c9a19a5b17015fcff77c3a574155fcabf7d598a1808f50ba49301eb36b1a6adc8fde22b425bafd86b061af4b1425f1077bcd15c5cb3b3a452e6e1ad6a8c97d59ac55cebea70b4d9ab8ceda5ccbff25eac4e6e79ca92533b39eae081f02f492f92a768b6986baaeb293287b52915e7e48389a494d36c4e05e82d8268487c950dcf37fa6a17d611c7a9f4465e3ec13791f17cdd7774bdfa4bf550f49a9c1b1bdcf71849ae0235991803f72fc701b394892ab9e423bda93e2d4d1a2374c2b7e394ab00e7f9670d909c5558a5dce677eacb22bb308a4aa2842c29e3f0c2d0947731d39f8420f7bd5677844facc3cfd96ff017ccbf6d4b3f4fc833894879dc34738e8becc91e23166e415609942ea3e361a90a2795cbef1b1a117f097d01f89d0e40cebcc528c1234ea0663b81242018fea202d12d8f5bf12feb4c9e810584e39c7f6808d49c03a29307051549ca17429c16fc11de0c274e2a1b09858943ecdb5cd98a716bab838210fa2ad1918db7527cacee9e6ad5c590f06a10a3c664e59b4bbd06edf459f951ed4a743b16b2a315d9f413d8494d7bd17ba45be16368a2ba283d93461b4b20d423a927b1467632a4214b1ddef218a5823b82096be7c70acd6c644f5f8a17a449f9ba4a662f29e232c5b1d96e562e4b6acafef54698ab2753ae6b044d4582eb425cf0a2bca4b2790968f4aafbf60f7738d1e1373f0946737d8f9edab34b813db03703e4d09e33448953a86ceb932717cbf7a442d2f87f362b8a9b46f0e87101bb802d9db82c3c5de51f8afa9e6c3a558cef0bc9a6609f766d09ce3e02d911e06808019a16df768cd50107d3b37c8cc29dc0f6377d785547217fd0b94aafaf910d02f4f25a26db1d657878eff526d9c571e2ddde39540847640a26246641dd6052ecdec204f64c2408fc9280635e7dcb7ce23ec4c2b9fce07ebcf8d92d6ed3e3441ec04fe6940c528fd0fe7b4a92e3d1055dc954a97fbf2bf1a3c07338534156aa5568a79fe6b4624c0afa36135a9ad07bd1e1a2bb12a79b9ebfede1c0c47f0d33dbc77acf463020003733f9eb34d9a2f404115ef8a7bbdc254a0b8c133b8321b7aaedf1a5c8d34aa25061156d773659446a9f00a72026d08ddb27a331b0a087a7b5a149b7d005d48b6ebd64620fcc9be0c8129224b4c3ed123c38704cfa2fe4e2d8d3346eb51c835f0fd4e106033000000000000000152d26300c08877cb70b78e608110615490fa7768d9b3ea10e663cf38ae183a405858b01431acca946d289109f5408aa2c1114a8fed2620d5aa36d37d8b09ac2c659e7f65fa06b491c6fd2fb8d16e55b6df2bc4b04ec48c07ea88894318c0b5c9f9480bb86185c0d2ccd4e561cb8430ec2d50bcd000ca6665fa037caa56fad5b4111197ec7fbd9ea78a5f42e9e6d93fa3be33cb14e142f75891e516d2ddfb877c39c657470ba7bea9e91d653224226a673a596f2e859221fbc604fa76211e9f470a50e6b6e45b7dbe7689cf9f66103e43dc0debf0c3bf32ae4371bfb4972cd0c8fa33b0a926ca87cca2330d7340a5df548aae5e2b57ce7f6e0b28b569e704708ef6678087119cded40af2c2787509b2680f356679d4e374e7209fc96393b9a127eac72b4154e09d0d09421e0cee230ae39c4d4c730c08382742871541c433c9d55b04962850f0ec74af6702b8377ec28e0ed97f323f803b37058ec2c8d7f12884cfdd2fe27e745486c618c18d6e9a80a897e06c41901028f7a5a1fee44cdde2d48d091f793215f4a78b85874bbb952f02bacdd9234bbec86e2cad13686a35dcf40fadf899ad1d510b73f483b03252d432a7fae38e53bee977abb11ab09dd237f9c9d8e866f59deab0a1f1af69b3ecc6c753d8a84ca9c78c14981633e3e325147b85c0257b286dbb40aa00e7164d0c56c11209f390ec3eab5c78efc9d4c874d808c83e3faabfefd8fe63f834deeedb27894977a9b37ade1b65383e785d339f45a834c56a8d0392ad31273d802eab931bc9e59b7000c8e5813d4f30bbb902192f7d9b39c5c6c8b6c5804507cec262d656c418cd384b85825beea9862ac235fc00b12c1000cbc07ee57d4343080dbe4adb63da361ea2a9e105ae7ee0177e7614c7ef77a652f5a1d60ee7a72bb52cf46b8f56cc4994fcc4204f5b8c1832d8a21b7a69545dc31c194bf144e17ec99bb0faac75771b4296f9d6f00afb8fad0230a91f1c6abf469aa2d0cca8237d48d320c9330ba4fd3dd483289d521469ac02d195ef78f185d3a28c9cd8cf26fee7296566140563738bad57d697f00b53b001d67463ed084fd702010f50f472e820aeb794771c7fa5e9a0cee324cfb8555602826faf116732fca49898ea6f55d191e4d79af7c813f4e69d8d74f6e450f48df3eb9c167c5ff22bcde86930c39a5481a60c139228e285a778d080ac9f807e6d8de752c656fa83b10afd893939c9928d90346271cdc4d0251b4d0ad9c2dc7cd69f3541647c969bac4589ccf5636c9473a46b7a47a8edb148cdbf4b45d793552fff0eaad0d9c15d5bb8c8b5a17bbf0a1e56de1e5236364cd67f1fd503e62d505fb953a55930c64935a3f4e372a5ac5e0577381ecd641837f74264679b6e26e44bb3e035e0697af7696a4b7c925e59cfcfa5065c9c412d295bc51811aa342d4f7941e3eb3764632999701ad1753c6083d571d34272af7ec401b0b62d4ba8aa14b37c7681610ad57878f5f358f2940b5086a78ba48741ca0777315771d2448be59cd08231f61a6cf73a8cdc831a1e829ff23e46987a97622a12839d8c9ef1af20a7560e761284cffdca5c34b09df94e387c069dae24d52db1207814745e98db8330ae66759e4b059a623ccb59b286b187b81b7daf35d7f24c7861693920f1cfabab01eaa0db46ceca5999950fe2741894da966ab0252078672e9f78bcd0a773974d5b8ca367af86b1a33089256a5d29bb84f8f36178b05fa9c2d2022e2aca66af6e5505626ef38ba03111045b37f97657dc6e8b2ec448ff20a831cc3a4e678413efb63621d888239634b6cfe7b3192290d1b49d734ac0dedbe8e6f26bbd8d5afeb8422834b834e705d8af68537b34c9e167e62670dc6c0f5a87d312c4208921877da36d7c20ea2006dac8bc54b9b66457543d5214f1d05d9a4ee2af2db08dda5d0bf95528986f74ec6a1aa7c4a6810690781f78e70f6484ee14494757f03fa8b504ba610137085bd3c7df15ad4681b7f2090320ef6db06bda06f12c660d459d18aabf0bbcce05e89266b82f5d86b372bde0fa652d291146e8899a1e0e06feed4bcfa949514276ef3a8d27c43ee5f29d8bff4b68c9a18e98da3357bbaaf4c4ecc4518d949eeb7da8d93f053430fd8d3aae3b2fbd5333da080fb4c522a6647bbd6e3a7836ab890c380fa599131b627968240d26a48ec320809fba455b0d83931548edd0a712b6f23dac6ac6c7071977864f6d9a454b41c03f1ccf3c5431ed59829ff3488bc6765ecac5ff3ce8da37ed262dc4cf82edc6377a37930d766c350811baeff0181682d0ea1bfe05897b976690122edb13fca19fe9e202b8d93f04cf3dffa8a5d65c5e3ce4adcdcbd35fb16b29b1ceceb6ed40a0ee6e210466381837a2ac86bf2c3ac84b828fba6abf7f3dd638eaafefa63d0ee01b3c0baed62253be7092715de9143599cc3876e88ab804b70d326df8cd01271510bab2109f093c5db8a6557a71c0e6583fd9bf94d6f42119e9ff998b5c217be87ee1102ae472a87172679e3b52033f5696f0782b962faf0d65274155e7ff4aa6093a042d85b3a63eb33ee5c09bb591f0e937fd9f3cf895b93c895270eda8b0d13bf7c31d4664c087386d51747dee7d6aecc40c8fdec03fdfb728ad10741d5519b4656953ba5aa0a37958fdb95281111bf8543f40810e8c65e0451fb105514510e1dfcb7fba4140d2dccf998c42a18eb34eeac72bb9cfde8c92b082085548d372214dfe82471307d59013e3e3e7b17ccc8f3a6caa907af23c6689c997da08780ceee5e619c2a8777bb17656d2fb2e22fc4ef2e28366d57411bb7b9247d92cf28d08f0054957731ab095429da4c7bbd84edf3b1d5f1b28d616c04e711e2d745e4f7ffe436a9c451db9f186461ac893a1f3de4fe98cb4c62cebaa03f1edbc8cb7ed1eecb30b7a3715469c9ec0102ef5d94dfda77b105bb05818ff9fc5f5b08fbfa89d7f2b4c04ee45dbc43bdc8a29f669eccb186ccf165c8b2478eea3ec97f87c2f09b9859b2a14aebf8e2e3539daf6adbc443806ff16c0b487ca6ba7bef673251577854bf73cd9cd6188a2b79b0fad8c926008774aa4bec32a733e8acc6e0547feac456ac1c58d9e33e8a8b951bf6f8518ab47fd9f3a74db6e63065aaa220ca238f3204460457932a80ca02bb9377a42a742d80222eb74c2a9a3cb7a41faadc4abc30b034bac83cd290a4a195c8cc0646c571feb215f2b7ed42f6ae4bd80d126f55853ca04bd8cd69f9c2df9450ab998996c9f26838a9e753a1c49f8535621a1f58a1b1155459b1550aac450165104ea37fb0b0fe3883f6e522b518a10550451609763666b17f05484cfde75bdf7ddaba5951177b7c8b73362cec76da2702307bbbee68b3f7bd45cbbf591c1490c2c1a3f9ffd05cf44eba242745137382d5f55fdac29cee2ba31aca327aecacd575a1261d9896f7d5989dcbb31a2b71d586e2f32bf0794debe4f6d912d3a6323cb1711f69c98ecd950f2c5f7a736b7fd462f00d04e6748423c3e4868585ecc06d11cd61707e1314054c7cb1cf414eed96812ca9b53110296e3cc70fe99618c411c83ff938c13b425aaf11edf4916df79ecd93d2dc55e772aab4d565ecb05a28447e61cbac5120bfc034996bda9a7a1ef0d32db42f5b87a14604949e692213a406ad187d03e4e9bc48b05b377db77255ae6a88d1419fdedca975706d015d03b9e1ffb4842bfe20d4476c5ae1443c98ff8d6c0e06e0ed378f1e3cbb6863a33c64bba731436c1f1891f9b24b1a6ce623abeecd021d663c22357d833c91f4d26dbffc62fea9042ca4e3abef2dd1ffd499f8cafbab5904a5b26de4d61d2552fa080741dbeacc0a8d4f8ae8d8f291ad02ab947d24550d96a5a66dfeb75bb65e4e61d52c6f182b9dd79c5957a783dabe93bd3c80de17e611db68c47abbeecdc369635493bac45ab95fcf648f1a60bb7772c7c5e08f0ba4413c3fd10121a9761babea2b94d4279697430865778931c2c99b69f97670d019fee3653bb17ec19eebc27feb9b73d802b57681684186819a6ff494e58f1ef553dada9291da5890dabef1314e38f316b5fd02134423bb652f8d6946e30680545454788e7a21e4a95057c5e7fcc8e5c8da4ec5e9164fd29f2d8fda77fc7c573c00a9c0c4608b4f466f3f34bf4a3eed2989d740589a1e58d9817b2af1279bf0cfa1dceada907b1327704cef6ffa9b8d488dfc0af7d095ec281c924fd07a6e8b07c913b736c54eeae4382f796c086d683b79f720d3b6424d4a062d1c5377e6eeb5ffd31003bbbf8544e084091d747d3debc0cf868e4447ce9cf0154cc96a4568735002b17707ca835f09be9359dae6d370db3be28c9ca8756aca094f8eb8f53d92aed941d87875ff32c3ae73951fdeb826fd1f0da41e6c2d9955d26812ebf2feb54310066ae3b006a4dc00c479238c6799c9763f02321d2de18cfc43ea30009acafae17733e200fe8d438e092945f23cb21d5b58145f9c94b0181d9de2c6e4c8f2305fabe9cbe4f1a091aee08d86cc81a86698da27e9a41e7bcaf1d0f12692a52b42e3fbc3a425d161074209e80c913135dde51e88ad98181586ebaa580d14fd9d990ac45a82a151539f32bf2d687ba9320167ff41c17471a83f51bef0428d4ac170de897d996c3560c4a0403ce9102a714fbbb82de265291a78817348ab11719ac4522b3b431e5482859537c98d716ca29f3b8c5447ce61bc518aff74e4ba63246ad6e15afb088c7339c3bf6ad034e616168586df24c426936ddb4ff2f7ca5d3bb500c82b5bc9e40416be14256532d6d2af8ec74018a1edef32672e6dcab301eed35725431eef904313307e402ec6c22f4c920cbf5b7f2b13ecb9b38e070d690de95e8889afac5be965ff0bfa8cc94850f163e918cec73f976e724ebd250b6bf090b3401cac1c4b03110a1f333ba14c1d18d4163b317fcbb1e504ac7f5bb4157da03d8d558e2e28ed39b1746543a9de70ad1dc22db5dd30d6fc9105f41835f7ab62f6385d7d6d1c7dabe700343ebb2f3c1bbe3b495d6787304d0054506027ea9bfdab80614bf811212e5afbde6f1b65620d6b8944845ac9558a64a1913269930b6bc157f277eefb1074dc15d82036d4968801facf0d2e7719c8b121790663ffaede7a91a1f4bdb2a83d7336271ee7e996d6721673b18afb4d2472ed31da440b7fd452b1a5b24007dbdf780f9f130fa3b73baca86f2a4be1229ef5d83e8ad3582794ba182553a3566392eec9f7cfcda8c6ddae331fc63e519e273383460edc9e83061a7f70ffe367384c6f54952d0c551e39c321861e3b925fb3ad7c0d2df20874e649aa642a8f9604c2c227a3879e1859e1e238dad258117c2cddf963c7b4831d7564c66a2e30bd6286cc7295da97c5680ef22156e4dee2ca43ac1a1a12a065bbc82838cd81f48c7ba19780225810be3496067fb1e3df473951979a68a5386fb956aca68e2b8f121fe47282d564a6bffafaac66c155e0af643e73abcb7c61467c9f832a2680343ac58760156fcfa0db2f540a221b9d9cc864f53d432521a54f4cb9708bb127c85022078a86a5849f8c5dd2a6fae46980fdbaacb0fb41941fdcb9900ecac65545d286c14e22d5f89fef97dd2133bc20649cb8b68ab81504ab7fa61bf544f94ce7f03f2fb28102e7f7f47fa36368bf1c17fac2c5737eabd07998c923d8970ae3312d5da12a3b46ded0bfc2415020246041e162dde05b14888b536b5b870e109438ae2571f73671cf3b971d5e3145c50813a416a6f6e91c7f93d294af8fd37061f126a6404f98f2fa1dba62716bbebe6fd4b527964b49e2b26581af30836ba8a6a28af460d29d815498f571f63e1643f9806085056c338c6c0ce01caa00a344d0dd6afd946bfa397813196c9992bff90b10000
175 |
176 | ** Weight: 15261
177 | ** Virtual size: 3816
178 | ** Discount Weight: 1764
179 | ** Discount Virtual size: 441
180 |
181 | * Transaction with 2 inputs and 5 outputs: 020000000102ab976c6e4c2bbf73afcb1c4fc1b43b4f5773f82bfd178097ce1b4820d3995d810000000017160014ae3d88abe6df555587401ddffd10796d3e178ab0feffffff74ca98d2b5395790ab91b6067134057a3a02d70987051d36370f1791f8088b5d02000000171600143dc23050c59588f9620545e8b757e4da656f8960ffffffff050ad6e9bb5e976223d5202ba077aa7a5a24dda275e94c8912d893398131399cf0f40866ae91721f063e8bc3b2c313e5648ec645aa0de5e7411ccf202808fbb47338810394221b6913ccd26cf3f7286057d59cf36849c88da453c26c2341c4b689d09a6817a914e068abe572a132f57955f66825a8ca980f25464b870a48cbc3c36cafbba89092fed6da0dae74b72e7874b91ffcf11b4797e2d4948158091de50e3c8a35bd82969a399473f9e2bdc353cb5eda1964193a462d9080022d850249398ba9ab44bed25fc5136dd92b8e6e70156a7df1f3e011ff9bd46c21d6b2fb17a9145cccf7691fddf4dbd2d8c2204576a9d59202f7e5870afa190e8b73f8c7c047a9af4259875692c8d56bac7a56eccafd4f25b9e74de29908a2c5e90fe2a08241f7a0de26fe72cc132137da315810e74fafedb925340247a003fe22ab8fa8d382da43fca85faad75ab8bbf8cd87c4e264846bb7cf7022b9e87417a914f93ca781627fe5c7895eae88d7dc202d7da9a080870b44629faf6801146a3b8bfc0c167d4618d80471d566e2bb282d117fa66fd54b870874975c5ddeb9784331db10be3fe7b6bbf093086bf50e22cde490e8a464384557034355ac6df9c313389d17a658ed00bde74747262ae4d97903244f75fe8690c91717a914efbd9f0851e68d5413bedab5fa8e8c1683eec68c87016d521c38ec1ea15734ae22b7c46064412829c0d0579f0a713d1c04ede979026f0100000000000001f90000a3f12b00000002473044022012f46b718d225e6c72fb81e40ac8d1cd51a625169d68948899e5f83842ee7d9c022064fd2b4c93069e50ea4b3bbfcf027afc89658b204f20001757c8b21a9e67544c832103a644e3646f143153bc52dcc816764283fe67ff9d34ae9103e218e15e9f1e27680000000247304402203c01fb4c469b99a53e163e3d423b9a1c1f2d8bfc8573cf0f71adf0c80dc1af4f02207e3371d745b2a53e60c8bb8337fd8fae7e0d4d06a1b0056ab871c5ae9a6919b9012103beed4731641c564d8e4330ad3e1037f0f3c183fc70c0547663736eacaceb4ce80063020003131378eb2d79019106afdf1b53713efdf654f77556bdd71fd3b4c36f5fae3c5e6b4bcaecc8a99e4fb4fc22b25d52371180990ec601e8243841fc7790898f57349f08675e6c6e4ed61dce40a09cf352cf3b834a8175351372a9946125825a03e8fd4e1060330000000000000001acdb12015330547e27ff5b3e46c21fb47d6e204b168dc81034da199cbf192ae778db22143d316109054c5e3f93191b777daae791bc6a49604c8d1b04a599fa4396fc97634ea3b6eb38b00b6705c14becfa12d3e4c6ee789e653423612dd0f10334afb0818e5ec33e7ccc745118c9f45af6fefde1e645c849f7c50e013c85492fee376afb7f7a19d4db64e1b7c073b10365925adeabf03d319036665ad834acd5d77bbf30fa9e9cb28ce9e069bd22851f9a2612a79ccb209d8e406a553338b47c445cf535fcac43cb6b866328fcbdca7570f9d95216c6c708822d5e163b7d9c4a8459c4897105f20764cfa709e12d3e5013609dec0cbca55da1b07ae57795a7b25968664503dffa63c92af1e272a6c0fd7944cc6d5b2d619268f3dae022f1cef7cf26b3b69e24d8fc537a5fe378a3784ad6ff36562b01457dafd90a8ece8393fec37e3fd880aae7b90056e11309c30160fc9bc8c511467b27f4b66035e92985a77082216b18ae1579011c166c3acb60de4bc39f631adc2839eb8ebcf1c418b1061fff3d7f061c209dd4910632c6ca77cd7c2713c778a7fe77d188fdfc66a640b81a6496cd334fe08266df8e597876802c2ec22d7fd2170d42a39e0c794411858b382f2e92390261b8cd92533d085ff9956b7bffe056a2f32079179e76931944820ab61f81e9d3daf588846a3a0b82581383896d701c5169d9bbb07567cf5ba4bd10ea62234291fd37c67427aafa5ee17cc272a81e30d9677dbfa1731efd575c0488ec62afb4a84d1dc2b45eaee15b13ef7f306e7a5f8af9b028b499fd23e0f3de2b1608bac26d222edcce8cf1649f69f7024496a9e8ae8fc2b99d0402a9269bc2853efca8c8e5d91d5404f0d62686481e47e6b42f9181f9e68393bd2bb2e01ade29e3385ece0c5a16b0732e5d95bb5bf869a565ea8fec0cda97ac175596d9cd6c984799772ba931d1a5bb21fef90d8007243ea9b99c5c1237f34b6670034decd4d4361bc6076de9f706de6f9991085f429e42ca0ed5b1f066252272fea3bf04e4b35519d913d016e5ebb1ce00d9c7ad7a25f7045e3e31ff7afa55cbfe5c4528249c8c4c7c48e73828be519a84cc8ec2fb9e52731910efab2e527ab7e81afd0be3e6d29e002e145e3fe4af210461f1872144a1624b42a34efab592867f50d7f49a572b95d333d9ce6eb5375fb3fe32e3ae2423d73bdfcbad92a81ff847c71068393ae74d51e369ce59b860c59d990b06c41fb1ff0a0edaf9fd4471da379a80d916bc6dcc95af77c004ad97d0b86f19aa5563598c495f2182e606bb117036509b977fdf30b62cec0e73c33928fadbe5431e0e84b70fbb549fbed55d52112426b5b339d77bf95c492fe0918c793302818fc741d89a2e94e320ac6dcdb5f9cbc0fe08430558ba1490789bf88d72ccc5ae23265b8ee040bc790a59cb47b497f8996d1dd07d917fa0dec09331ee1bbec5d3fd34fc6789082e8cce251d9bf51c7f7d4c740b869f2b5fe46eb32157709b9c3edf93d44c5de58fab161a176ecf32bd07098d1f6b0111ebdbd0701a333e06c4a59eeda98b8431dfd6086a49b67633ac097c4fa846a635268aa27f19d588258de1ca5b94f62b0bf5bb703ae6cea9fd530cb28c470a2ab1a825e280621b7ef06020fa62673fe3c24d70a12b91c0909bb213286dae3718a381f5c2ded80c8aa4243a6b27352aab4dc709da31f26d5ea126280e093bb0e8e8c0c3e179e506b69fef140be05b5c7bc1c46fb575c0880eb5588d764307beb5c806648f42242dfa60f388f6cb7564e386e93d46e9dbebe4db9138b39b47ea382b1ccd0ce0c08a7d4efd0decfab6061ee5bf516567488d2abae6e466bcbbb9470d2340c48388bf9c0705746aa2ad913e41901d79bc342584a658e65fd01c386fa73fd65443d36b28e8e3df391073f5a60b4bd56ff6ee3463dc1817d0fa3ea843be41019eb4e4827a7119f9bcd3d932f6e6684c9559273c68feb85c10c2ab93f036ae20af896827f81c4be0a2b49f8f668a9b1345a25b9956e47010cc3783be09f82b825ed64f254ea9799438d0804f40e4db387534966b83d160fabb0f4afd9b098673ad71ba77953eb7a4fa01adf33be08b77914f296e1c4df5421d6449626ee42d76d826730a0cd965805d5abd13e0aae9756a2bc676a76addda5cfafa7da46b43a264dc1571feb9b4ba9c1b68554131f76e3e03316fe6c58ed5a8a91dc0cc56b98f7467b7e6ffbf5b74e926d4265fb4cf67a34110847bc051789b9a78e5976cc24b4843ce693cb76ccf557e9790ca726d2fe54caebb9f79ef1de03adb97f2ac8a6f5b38508e222d0807f68660bf8f0578181f3b3f54f71cc64badd9e5dbbdede7e026a1143450a10feb04a2637fd32030f84959f7b9cac0b4d4c75188dada232b457e29c5ae1e683fda8379bbd2ef06c6b63104042a43c3461c7ed85fccfc7698d959509342b6ce5c96539a995aa0bf1db4d85a315c216fa44f8b364aca031047fecd15f9ae7abd55f5b7442c31ba42bdeb90360645abf11303fd332bb6e1abeb76b49c435fabf51ee378755a40dbe7bee27ecf3a02b7a0afc018e5245c3c2a7163ec65e948341f9d49c9037d5e1d3c49e8222d9a278672603344f5028498f71dee2ec4b8603c5fccb444b02b4b51b19114e3b9b55015fa5c3dd58244ba2fb37a00a58cd8975241ea117040dcefcf63fcb6657515ef979fba766c507975fae2918adeba5499bafb5e7566fedcaa568e115b777c941240cf0935909f04bcf6181c8d2a56e4fd7d4e724d8635bcabc42da317dddd2630d0231983958ecd3752fa57fb28ca18836927c8ad6ccf27f38c5e61780f9d39458fcf00c5211564b10cb47b795dff71d38f976ea6dd4943f5f7b65cec3de4eee3337ba08008502165c34dda346cba53514ff8e65a7b6d3a034e426e3f20c6369715f93650d51827999085f3722667bd67c024b273a5ade9ef71cf49f123733d620d710b978455f9b34beac468d54a089e19f2efd1dd985dfff7e4c812d4b6cecbf6e68ee170e5182bcc316bc5123e9a7708f20f56983378d8368402b2d983b981052f09b72fad2da65afe117e0bee4cf10a5a2c198aa11f93900cbb5aefc5169dc172252668ca1fa1213199613fb7250b4f2cb12b393fb3f5360947ecf2c5869d6d47ef2d3d57aa2b08863acea3402b02b40ab55e7e528049c471bd78ba56de7bc640876f4d819474eeef05ac0d6cfcdf3299b2efe07a3bc21a2d4164b4a47cfe110d5f78f24827d56d9fffd03182f5c17ecc46eccf2a83098a8149178089247432a25490b5d4a7560de0279bc7087a31db63183f43624759936f78f04001872cdb0e5b9cd7e8d2f74310b4f71b655d2a2dfb1e984ac9a8d078f3ff130fef02e89dea50f23329dcf3d2f31bb1dff2e3f02508208a44e495ce022a8872e01df9211d6974a06df5ee8e061477178f5787bb281336b626bb4b59db0d9825e3821aa4a6667ca6ca5e41f2f76bb775279268ab73d3dae30ea712e26cca4b17199e198d1033125d58903c0ab67881d43c1807e0ee6b3da6258f96029f14badcf1c9f3c55b269a752d91fc42492ba2493c4f1331c49f9cd471310a11c624353eeb7b58dba7f9c5ab9d15bd8398048f9f7a19c73b68df77fe00070899bba94c70710347fc068895e045fa4273a43e868b86b829cdb57d2939922e19a9a4d037467690637dbda796c627f7a98d8db014843cb98df050df7bd4bff6b3b6b1770f83554e8a568c6bf9a66648bdaf6877d9a744998968a9c3cf3ac9344c860ba42fb935f7d2ae7401404a56663d5a3cc331e074391331343df8107b2007d2715e326ba9a34e2eee745f20c8379fd0f6f3367480bee9faf0c73a7d52df5338409fcc408b6f5a68d6fb8bc1fb7bb010c1271a16cc5613d7f35a530057c7dfb155d66793e546e61e4f82a0fc6cfb317673218bdc3dbe762c357edaefa34bc1901f4a91722339e065cc0c6e7ef16a7e61e2385b13330b5f3303a277d6495aeda5676a51501c0be28f60a36e71ebf2b702eff9e5d5ef5a862870e8fa2afa833245a2af3b3c3ea16a79d085d3d2cc52e91f3ea92a145007f212dc16bd516b66e0da365bb72f4c96d517526eb08b4a8c58006cf6fc83de23b17afeb32ff31b261ca0febd4a13af1ee270955e8c3032be719dc5f47e068c3f7755c2861db8c77d231d68e02720a3d36eeb0f0bf53dd81519aa9b733f3f51e4a7f29d0fc73b3641e0669fc74c9603324c249d0b9ac9f00da89f3b6fb88e5a639d016f4111981586494cdf2db3718a19fa4f68dfb3787c98db541438dc3bb4126681fa9593e40befb07746a7a7a8148724c6ba57037110e44a2798651e63d895659bc6b461cffba68d445eb2bef67f3ead6e52ae3562dca19fedc4edaf67a3240648de95e289e485c13ed97be9ba648ba1042a90133b87742c6892ac50e5bf7d8c3123c894fa6fca5443ea3516b52808abbd65ada9425cd6a5b393152a2ba84cc9ba876fbc3eba031e4fe611f9b7ba662cb6b46c218ebebaf55a6dcb68947f9269bd551f2f1aa564f22a68fa8eeba7e797cd172c35eaa0ea8e246be2cc102fb31d9421b0cb53a3d95bbdf1764743b7d4f0f78dbba9e67369edfcd2019fa70ea27da20eb0993c723c5d6fc23a4b0da4bc79eb64702e8eb7d19543364eac3c60bc318c17fdba028ec1aea11e370eb6c05303a021326b20b16d057402cc5e51d76fae7276f80226344f61e902a858b2ad0a91f391ff674d104f0be3329c0f15d7d777bb2678bc8b268d4c252ba167472cb44693a2a9084db2eb1bbd1155603a8c62b45f6a152f7da8a8d310d79c57e36ec43f450ac114f698e88d9a21766be7b5cf0f84265d55575adbbb2b7204514d228145135428b40f86eafdd61d849bbbab69f6e7ebe9768f748b76adfd4adc52bada2a1d9a209562467554eb8add00524b183ae24206f1768a4c2c3770b8bde16a3a62da89e89e07ad97f57ef6a63e4e6fe6a205811ae90f66fb1c50875366a9c48ca3bc285d9bc103f4169b2c5bd279b8436655ee76a022aefb902e1231e4c413d271195b49470d87ff3bb3e516b24e1fd0b1a8f1c0158d3275a9d1f62603aa2f73d8fb6a1176e85d55a803924b6306e37f1c40657035f04cbabe02fe095f4eb86966027c389f7af43bc8902fd13088d897e92fc7f038a5ce4ade6a1c3c3f8385dcfcb2fe32f032fe706362f7ff0ccc26f9c55bbf6ea5bf294b24d2a52b35d6e8e5682cb97358eec778aba351966808601fe2f3eb7fffea3acb74644148e5e328c646b5a727ca845bd661f7b6caefe53ad9e83f3e090a4f54f846f3abdd60254c1ed21a4ac7f581c27cfe81b6841a7227733f20bdef249e9c0efec82529e4954a6a69d69cff1e3ea27f9c856f664e2a55ef44ede8540eac8274253f0834d0dc0187e5f1276d968d709b66f4b78f089910eee3573ce8a9c83e098a61b5476756a488d4513a84187746f13931975f67d60123a29c083dfd4c02ca84bb686ada72a873e325803c087de3762fb56efd20b89726baf8e78c7adaca6c88b15bbe3f885cd2964bf68dfe35ef116a3bc2bf0abfcc1b3f623efdaac3462383b27a5485046421b49ec9c9e67757bb012d4d6e477f8c7977ee58a31d8d3e6b6188106b6c895446ebef7372666c620dd0adc598a712f4466962c66dcae7b70395288be1a4a7a6a0b1ec3f8fb61354e2b0e6c178a2692d34083a31ee4dec66eef8fd0b2b2f33fd972229c8eea3efdba6ef11584be3fc0f38770521a8e9308153e8ab2a24696f52aa687395cd9a0f91558a82b6321ca3732908d4accf78104a90c2ac49ccef693db5da420b1cc3b83c16cb7c9d65244f06ab4c7aa4c57776b09f7902c35bb6d9e58c7f02811b09b7f7feed63fe7963020003c6eed479511be281d319a5a044814d47fa6ebc34e11d61255cc572e419d57d07d313d2990b06aae88ee3cc93cfddd9c058d86407b7fef99afbc7e234be134a9c3147c5cbcd565daa2ba3163562bc241ec8a40a4d8bccbafea54a8d146ca23c22fd4e1060330000000000000001ef8d9700e10759fbdb67cfaead65c7edecec3a3e93c5d4dca786e9777542c189a442fd10c4829f4edba3cdddc6154f031e3b40088f3686ac1e36ec8a43fcb4ab85be1852d3dbde312c5972a49198d9d53112255a7650cbca7db0eda3186755a7d911fdef5cda4c4ac7f0e582b2699cfe4f73588beda67c2de3f1c86962b7196ded05ab22584689ecd3629832f1134ad454e0522df48cd596e9e56bfe588ac5b05f500ff586601c4fb4ce7b0f9b7cbafeb392e7882cd74077d1abc6e363061d50deb1d7b3aa70749157c53c4e3a87d032d9f032f4c4968eeb2e12a217f156ee80ff775491d7a1fa08447728e00f46a618e343130853d819b42ba5d6e5547d82d19a815b3171fc59970dee04a902d5469fcfa0c42f1e51cbaa53ef15110b8849b44931ed15b03c993f4eed1096fa86594dfb4b3c338ee3edc356812df940d0d3e9d801ab3eb69da1bdb78af86d83c08c7b04a20f030bf8aa478872e78383defeb3d07a5b61bad3262d9170f679485742642b7c877e67df1193e96ef857c48c1abd532ae96bcd3c0131c5706e46301e13310ec83f90722bd5db804b7e23d1b042401171ab5dcbe22d39d979bcca996d088e2cfe2998cfdf294ffab0021212005993c7cd74d868f8eca9a43596b2516160e6290e9929edac9d51f3cb4b02d31c0e9b2cba6d389903c401e313e7f15ab6c93361fade62e7a44c54125b59908060f019beefa2f11c936d54d8883e79ec2f0851270336b74a4abd45b61e70521a5b7c7340f7980ae8be0c59f6ecc2e2037d583e5a62107d4ac633a6b11eee3507a24aa838b873dcb82dae8ecabc87e61664de9e7c5c39edf56f918068c2077d06a0c197f8624bc1621a503e3c26689f3139dd52818506a9b998c5da7220caa0c5d87e502b1488b6123f7e2c0e79852bafc3590e4eb8480c1b11723fff908b2f139bfd666d9dd0662a18c42ea16d525897abc0313b9482c8c8b6407112145b5c1d085260aae6684692b64ea4219d16abd8ebfbd4a2619fce52d737db99e2b16eb44af4c8415c7eca0da53b7eb67d80d08668f334fee5a6147724d837d92f1891c2a6b9f3dd1d6054502585bd6d0f9790cb3a9e79b1befd52a7f440deac77c148c732e7bc43f0b85bc34946d89628f070e514ca11dd182cac222ae284a36a84907e12f9cd22be33594e79170201f415602ca388e43f3c193244eaf314cd9cba0032299761690ce7e8d3a953b7fc4538ff6823eea5290fb5c8ca20778d8394b09cce8b1b5deb7b330566d2cdb50f5f4920d026e954867ba6d498ac3153bfd3621daff51edbd1beab0e9e8d9e496bec8d9d5809b37b3dae396d29b8ac1fe7e6ba5646ab4b3b65bc47a4e90ec68e0f263c33343ec2735e6b8bb480614e07aef9a4d31c1b15a169ec2b00def13c5cae2fa1dcce9ee112ccecbea5a7a2ab722c7031b3562a829d78c09979d6a7cfd65b529fcbac6a819788746b4ca8d55a05915cac934f6aed14760e4bf6fdd1739698d52298badde1e9cb0e430f32236c00b996e7c6c692af02c7b6d5519e8f60ef29616b2b4e977ae2c922a3ee5910ad41f1deda9daba8e2a0ea698f81dee8741cee1842cf9682e56aaa96c7c89e8ddbf3e48b198206106263ca3f8485a7fa5e73a5a7d86f44b327e7ce93bfdc87d254534d10c59a6f0b5c55d17af4053457f57770731032d494e99f6c11920d37272cb7a6022621bcecc6ffeffefa440bac7aaac11e04edcca59424235f9f7fad3eeb95ae3f6befcd8f01e7db60a2429f52a7a5e0131c4c4fab2f4eafcac33e4d91adf9bf75ca72f7864d0dd03760dc940f347c9dcbcad535929580350a73c89a88313ab145a497bc0fd41144a8af0e1a21bf578cc69a164757412a2e2bb8964a3962ca4d4c92616c9a0dee338346d7d5a871c2eff7683b3ecc482f14d5cd76c01db1967b3ff1f1aae33c5f677ccc249b90bd354a86457529105944c12de1097ff49498f704941f4860bceb4c95c07b6da2e55106cc480d988ab94f1721b6a744e968355b68a392654b43de75843d827f17290ce4bd03c0dd1f2b72e7cbe6e569a3bf675645a3cdf04e6d8eedab197050fb809fd385bc10af84fd4cf8bec449a2eee4d6030c1c2ff518c6c2d852baa06f18e926add939f69c1d7cd038dc3a348b957092b51da49e027ee77593c9d2e4440b2300ccba82d8dac76be8482dd81bc5a69ffe27876d6a8899d41b49d9e71c4d74b061ef2caeff7bcc05588434469535c5586096767af2bcde19880e8daf14061d991b5b50708cb62ceb2c67b71c70ef9c7aa72f7e35f221ca510136e51cbecf2e55b99b61ae66f1d3d495c899c814a25f847debd30b06c19c8e4ee530b3e44fe3c8763a99e77cbfdf2e225a08bc25c9be3b39c6dc8a9c0db0a9ee0286896f2e36a67715f13ba8010613bbe22c4cfab5e0e8a9141def61a687a7d550d271f20c58e1841429fc6d9d42c28bdfb4c179b128f6b696a124187e8b1be128151cb1121b378d34923223b52a6483c757aedc023427068cef20d347eb5ec15761c68e175b0e97cb77414a70b2da690fc23202f1054cee718b8a7ab9e4dccdcd62a2776ae704116b232d42b5fe071748dd946b8da637b1654edacdbb4ea7087d1156cd7499b4454a1891ddbf7c4d943022668da24ac7ffdfb61c97f5728ca2592f8f5aa6738a1f27cfb430e528292b8ee3fca9bee53ea473b002f71cba1ebf80d7a610c472a1a40b6d5624ab1366e6cb3962f898d45c886164221eb68584aa302aeed53025fbbce0705d620033b7521e4a14f8310b3719e60024044140528b1b660845d1dbf88a73e92eb1e703667390fc02d24c5cb7546c57ff20924715ffa443746a7bbe010c4c22a9b7adec6c8a208fa7ef080f5e1b4250c5d7137dd1c171c6dca718d38ec421168919f7d1d32e0caeb2617d760e5315338bb92e89388e2f8ffd59796a260539dea8c0b4044c7d0557e85e4b5d94781802249d714ece7417f03fd553515376a5e557d4eb12d5f6e3e50b26f63d39af3a0d40deab57a97944f5ed39e2f26906c18b4bcb7442f363a85162f3ba84fcf8cb884f3b744add81539c83c238138db90105a7d55a8ed180076946fdb9041ca9d49f11498a9d6ba47eec1ec12922d045985d3ad9c221c5bfa00c13a3b9c4724978e6cf0293dcc5096e88d6a6dc05ee7446d3faa428938ea127279b88cfcede2d0f1d372a2dd4e42ea3b3c2c6cc02acb28829c9a6d04f7ca35e5d43eec6e5a6d37d0c518d8036cff343c8d02ceb6708f7b017bafe15eb7eeff147dd7b80cb5c53e9211337d6b1e0b81ac432f18be34101bf3b973d577ecd3dbcfa1add174c49dc1f5cb0b3e6157c68aa446ad34662918419e4fd7e188bee6103195e3731c54b6e86896ea4420faa9768cc838055a3e5894d5b7a068cf064a8fe5002c998ab9ce325159d692f294b89ec826ef69874226d06c8eefc8b8f114deffd065acbcbdee9c63780a1228afb1b7194ff1c1e2c6531aa710f6daf8bcb2d86a92ffc84aa66c069966dd0e7aed5077333862dc4ff744b86d67d34cdbd16c5f9e0168d388a22f5ca1d35439ba46650fef8e2023fa494d9f16065be9528d60f78c70483396ab20acaa0e01824849ae7471da87cb34b5a3e8621a632be00a0d46c10b2321cfdc81dc07f05d50e433a6cf63804bc5bb685eaa1d3b4f74f11c4766ac587bc419688724ccfdabade070c77ad5062e8d6f02954939137ee7c9ea91536cb61ecb4fa4af1e0b963d7ac273c1337c449fbdb433c620bb4bafae754205d3bd31d439007a01a0a4b14f3ed758d84f0196010839f851a03e7d93ae1ee1d6deefee5000c88c027293f893a4235abf28082fc474a385853ac16ffb4b9bbb6dee965357c9a6e8a444f26d08898404f0e237caf0762b939fcbd149f4f93d5066302b067b66a6a5167089ef76b080af5f149874492f94dc25cd4e8e86194e29556c240824347f9a8a0a2379c6e2b695d6922dfa7b9147f99558253f25fb76ad288f957d950312a96fddc0177083d3a0d4f05c93f534f183757b57a91d6fd6b7713b713356ae97c40bb048a6a6e3476d98ce38a140aefd42d10f66439425421b18c06bb39b4ed5b548254ac26e5aedc7acd5d7cb717bec6a26579e71950523fc630294f051b852fe2dc17aa6ccf80f90efe353ffe22f9ce0e0968f6dba8325e609d2280ec31cd452366a7faee2df981b24aa025e1b1ee86cc638cb7c11b6f62079d5c30c9044560f839143d11e8cfb525bf3957b14df79d8ee9e669ba77f4cebea65d4ff10487a673b581be273be031dbee4eda67d272bf2a6a63023d5e1db08e974c2c1bab887bb2c59ca99d0634f75f349095772620056439d21c79dbec4e011e18d1aebe61a5715ffa677c789a59fa05be6919adf1cd7635a2c0bfd58e67f07b983cbc9d0a534b6e8802a88e927e7e934af20159447979462d01d8216c5b97ecca3e47aaac340d1910a1090c2db3a436dec160cc0a5c3a62c83b9849dceabe32086d9ea3c4f2dad93d7dcd4bf15503ca1f450f8b4536190395a2a492c02d82c80a50681967be1e2206808df4818c720954418ee91c126eaabe86c9f7d9c5a3dc49cbdfa9750da9c8fa0105601e6bed190f60f15e0e1fff0e9bb41d1fea36ab46144017f9bdf146a11283dc34a464e47f2e7519f1711e1d56dab7794f6d74c659525ec0787afbdc65e065170db1c40c693aea7e7624dea9bf3bc2223646a59d2f18d6f7e6b6d2d69654430ef73f48a598458862bdef577668c5171dd371a66c8a163ba587a46bc8fd8de4edcd493cc1dd77fd2a3ccdabc001d2a8d59244db8435093876649f8e05b326d0e85d301d10f99e551d494da853f7bb6d463dc8d181cc8f3f5c77a33184fec2f6b974624f76b26926e2af6423370d71c5d52e19d1b9af2ef0b9a79a28fffc22471a50139f94f4d64d3b3d157458f668801879f1031196882c4e985d804d060322dff0e9a359ada3958871b712e5b496393fd101d0f2ab6873084b19703e516412dca0e1f8724d29fe4f5b8d32b840d7b7b56ced8c65051ed65b533ee138e1c012673831aa096de90cba77c58977357ef84e159b8141784a6ae59b7024e2a87a0ca15b8e0d8546193c517fc65eea9debd4615caf03beab72edcd2bef6df437f50b56f61b3fdf47d065cce7999794a1d5c955dc26e1c3d2b52c0b62729a45f0410ffa439bd8c8f439b49c1c96037280e837fc4f32796dc8381cb37d5a174e1ff89d4515609eb42ed7d64e64cea08ed57c494f9d6ce1c0c5802ddaa58f10ed29f6f8f674955f0cdb9f89499580bb188985a29c4c32a8f136622561fe82faa101adbe4e025fcffa7928b59e0ab7ebb24082218f35229315bad63c3ff4fe22c9ac2693bf924b769f5507f1a91b8645049dc26602201dc9c631ee36b28075f5bb8045d951899c97a1850edaa7ea9e44975d7dcc796a3c416d4ba00b746eb61c71e738b181a9054e6c2a6ba55c1c9bf8c1965f898b8d2cdef199f3332e5d5ea849306d948cbbb9ba89961baeafd5b46ace002866b881678582b2bc4b0da6e0b5cb0fa4cc723c9db2c2198dc2620083f9877830c35b3ac64678b9d613f6c394a66f9f5b91b35694a1b4f0f243aff3ee60f4dd1bf7e84c8a2024ef3232fb171457970dc8417c78072aa6ca4842e41dfd4c6a1fd8a201d15d62ee4e29f086058cce86603625cda4eb201e58f5673e9a24ca754128609b430a1bd69dacec02b1e6db42d795f25c4e1e5b95dba01d6c7b3352e08dc153e1da42ee204dc01d9c35cf04bdfd296c8e643802f0216554028ba327887b047202210d551a3c9e4f78dcd4d4c9d81cc7d65ea43f464d2d258bc2e1d8fbc9e92b8f6095d3f68490fcfc2e564a7c7afd9d51188b71bb65a3f8906d63020003cdacf592fbf987be58586d8c2d23876b58ee1718ce6547fa75a130e6c3f34db82896851c27c88b1619049eb59731e55437ace3fcd83cc54e5a8f1d76175776a64fc29af577f02d92ca6e980e0c040b84492acc566fe89db98231426130269c7efd4e1060330000000000000001fb073500c9fe31fa0c4ace9304cb6779eb1853f9950967c81de8f0c8840a88fc719d758aac93972ae5abed1df8e11bcf51eb4991ed8526ca7767c4dc2545a9cb0f610da226b052f26299692f5144f4e3262c78654a3da6cff85cfb7f9e19afe73780bc89b320ae2c78135db5fd4913715b41fcbf8f44d09bc739a898f6495fc1cd596e1ca269e95ac7fccbd9dd5c660b1a97bcff3e37fa7db00661ef242a9ee338d64a5ef107fb72bab71856d977c8848a95d1ef33c68340fbf8681bb51041fafc1170cac8b10150c29303ce45dbc826c765b1b6d59c15b1daa8f63c6fe1e3506cdd325d98b3e355d558731fe957bed841494c1d353bb887d48a397122142771f4b1e30199d3d39e2ff8d4f802063504febbc7f8e402046231b0de413e74d9efbae177463e871eedc94f6a8ce53f3d8843387be07d134baeecd2f88cc76de8cf68735654aabc79074f62f6c50b5319edb65e0b82fab69cdec320208bbcefdbc03a0682569cfbbff83a370b97c66e81ab53a2de076c5ac34ce4979a1c2fc6c1cf5c04925f8834e0211edbb95d3cc4d04fca2d317bc28e77969f69b23a666ca90aa2e689b26f57457bd0a766b43baacb92d769661d3bc42f302e055567228a0a3c317faca54ff0bcf2bf8f71d1834f1a86d4f9dd56f67d90c38fc9cbd7b34971973916ae561e7778da80352b907da75ff89b49565dc04a7bde79efe37fc816df99019332b9b23a0fc1c9c39dbe8459a5140ea48b59e23e4ebe2f9d070cf7fe9618acf8953d174a95284ff9189652a8f7d934ab7f3406fc47715da2a4511ec04d4dcf292259bffbd219a60a4535bcbed852970fd047d975ba23a6bcef1cb56b8ab0ad66ec31781e7ea97dcd8b1d52ccf6c3145ff0629d8ae48b984eff7636000217cf387c5ad59c57546603c76b46a12e32aadc9ad68ecd22882031696126230c5d85071be3bb4e7ca434c4c0dfb4e0916f5f48185624e1124ceddf2740869de0bccc3a1e3ed7120eff453bead4fd5eeb00e7b4e8f400796e31e355659c446a2e542ece4adea4054818c66273da512ebf7caaedaa2aa8f349354662bf240aa567565c406bba94182003193fd4d4f6df0892340d3564a4d4e7c429aab19d24b46dc7eee6cdcd8e80c590f840aa451e14562a20c778fe105eb7c66ff65b828c985e86f42ceb9363e273700804b58bc5ffc7d1208e8662b0568a743a0305d862b90c25bfc424c7eb4b3067bfbd2f2f05c895f1d0e3dda636453018f3e5e6d1078ca6582ddf27ad717a8fa0476e03d8bb37235f5a68288b262137b8bdd34a227a5ae3b69265f7a365746287d04df71933ff868890c06118aa7798003ccb8578e705cf22d596c3569a79ae1a8d3962c910e490c2cf10163e2daa1695a52e0fed56e59554f058689b1366741453bbac4132e75c1849d0bef0e7272398b87519837647f30a2b02f0062f2cf3178e73cdbc1705532a3112ca28f80ca54fe671e20c907d91ac1008e562ae31ebe190fb4bcd590906a740c68037350ce00ecad104a6f21da72a94ae01f1f681743ff0760892ffad70c29f53b41c945989d8b008bc7bd26fefddcae34341b1add85bdd32104eb58fcac6c1abfeb02d5b6d05ddaf991c421396a81bca41a311563ed1bcbbcc47aae5f2850a56f0bf8217ba46700e80a1b62b30d422268166199b264ffa847cc290568145731b5d4b411c71fb6b97a157502af8b05034275381a0544406dfcd3bd4bffd09acf2ae2736dac3d1e8126c9c537cd66ada4bc4dac9f193e09be6bd01bd3ac6d17b227e87bf15cda6086c9815ab89148843c89af6bfa95a218b1e997c8af52de2e0b0e201d11ed032693ab826d7c57029fecadb53ad18778166fece38d7e152d35d81d922aa375a2b56dd5a57f9f0ad235a027be5bdae76004c453ecf91eba7dedaba4b698d8a13f3c1df3792b434e5f0f736bd22f57d7f5b69c4880ca79a4b3304332779e873ad0ebe146529a5b7eb7105675de01177c571e04548ddae418ec50ea0eb5cfa853030ae60e47fc8a94d543272d64956b55806447fbd5276506b0aa3369647cc9a28693a3f8148c2ec061dcf180c6f9fdb253687733ec938821eb8c95c22ac54506e41dc63d70120f405f6305f5196ba1f666f29aa561f217d98043ab06fdf05c24e001e7988980fb2e08d44d39bd06e571ae08f36697a6f79375b350a9978d780bee2c8e54d46c1e6109d977c4151875c277939428110dfa0001e71d84b94ac19a0015eabf23a47091d54488dd174ff86d154e96b6721ccbd47c5bb4cc0bcfc4a222bea8f9399f69aa8a40c51b2ca9d87634e8d96a7fff5a024863cb8fbd02eeda47cf0932b18d6b7f4e5b02294ca31b0b60576f9c279d3c914b4770dd05cd7cba9180d56ec9f8c0009f13296ab2678b0ce74f94e82ce803422813f0d2b750cde9e4f743946be569606bc860bed0e1108ce9863e86b86eac97b5c06bb1f9cb81dbfdadb280d56d5540949171d92333c7d14794fee9a24baedd9869c480dcbd841de1036508285f5415b32a21af6fc5a412533a39d081290ea411f960faee4f3b1ecc6745f5bf983755b13a89a8f4e25baa18511ce2907e189a5d495f0564408daf89c7274756f64120f8b3a45b7279d18ff42bd8d4b545c34214866ae7e4d1d9cd5c6de6bd9a96fc55815816a79b0519272f41791375cc8659ad9ed8e68161570eb56676538305eaf6f4b8222d561d5311743972a030ed630ae8c56c795b25a5307b5899283d9ced7ab65d837fddefb5e7ee23e0c3f3e400fa79c0c853c86ca98a6ab6e3a241d3c228e69c82f96eef38d547550596d89923165fb9fcce71f98cc8d5f1936ec83de6f4f1af36874a8ccfdc4e1aafe64e202243432f11dd269b5bfec128410c640504a40a91252df7ef250df2b5062f57041e987f4f7ebc64c82fad47d5bd5bec10962a4fd3ebf73022a8b143d24e06df729911255f4944d1901c71f891a47d6622a4b3660905cdabc57a41e8cf684c239acd9c0f402d11163389e6cd7fcd0a400d02fa0ed0d3e415162b47b6bcfe6b6bb4c8aea97f82c940b479e1dd83f24eb6a11d0ddd219f8afc7521bf4aec1a704b15a81c7009bc7523c8da6f191c7adf44a130a9d1014f6ebc358c165019b62b9b873d99b055fa6b8c2d204c7749fe8a9779af04ebbc5bf54d72ad6a706325c464ea7d3de89909f7d839d6cd944845f5a9b57d33b606a1e73a621c4ad33ade4c2c9e43265f8f87ca43f460c95ec7f12becbb4b5c84deebe2f2bf539f8b4d804c01645e8d6264c81531fadc38679ccc32a36b028128463075c1ce220a21fce4a2b1353b6c7850c5214f16960df553193b2fa2598af07fe9dedcdea9cb88a0af48fa2daa913a64f844006749f90b012d718d0381ef1a90f1a3f31120436fc18b2d7b4920386b1682e16e0b2a824727cd1311626521bca457fad207be13421441b0514ddc16681792650a4086d5b12c3e1c3862506d45055f94afdc8361318d32e0d445c5aa9fb6efe293bb0b6e12ce137cd8a3f2ef6a9ec9c2bdf2de637cb2d4a5137e65f3043d2f0cd6ce23e4eb5c12bea20fd84ed30fe1dd5966d3bf0a9012ce3abbe4aa23f92fed44f3ab4d1f152645b781ca5712ba95f7e4dc6df46176123c6d3fd3f5b47f95b71e348fa03814f5f4acf6a5db891ca66f84ae412cc2a2445f3cc82e73e8ef90ba3b88edb08a26d8e156541c22a1544583ae6a93e5ca82d4fa4a977064df6fda691d51d7a66a74db7369c2bf24a19b62f86d8fa6c06effad9b0bfea563a58b273025cb8e6fbe8b9fac67047ba1f4c30a01fa195b70cd1219f33d434ecd3527d4e9c59478ec546fb3c4bff72d1497b26b48485582b6ded8142cd262c8e81ca10cb7cd98ceb410e3f36f95dce4ea0662b552f51f2a22d17650d4a8e7b3c9d33a026977661e31678994889d7949e80213306df30cf5de6410afacdbde09f1805831cbf153e696db44f7916b939383d0bb696663f711018443a09078761ac313b4324f913c308646af1e3092ce337122869528f53fbf214e4645ad22f5099277f6ed0ed4db6b59f2f913ef3dd106ac8f12ec0c3f736fcf6488aa5a668f7f573d3e847e626035447d7228bf057dbba94a49c4eefda2675e52931b9d374e5cc014dc0361a830ea0911bd804129ba66bfea8cb631ecbf9cad725631211e2c2682e8457f5e3944dd852c0972e9462ad167134f7bb6aa7d4b2af902956bd6223e0da1c25f053bbfb07e72047073a206f28e47e01b1afa51fdf19226bd817ca0ffde19e412f642a8a481d5ba73af89bedadb4e3f5536dad83a81666f6e9f4d8bb7929d7ba8f8b588acfbbfadd1dfeeb95cc063f4759908356b767ed19723dc344bcdd5f358c8edb6f11fc278c1d945d5df9eba14e47ff6964459549d7e8f8ab51f6cb975a2ca890e73d4a062978cc31f80d9b7e0a625acaef629110967e427177a26b38f2746f5a3fec73d663c9b007340bf51ba5e62a178b50b78ef4456671efa4a0fe3ba9e2a197271b4a0764b11a0bc6dbb1f93d52b93c16757032a4f963e21abfb8da248fa5c3f02949a2f01bf77fc41cb75943e876950fd625d591e2024c2c4b35ed86fbf11d862d92ebcacd947b0574777a3dca838595a85e88d52db124ca5b841fdf768ee5e2125aae1b674c11251c1b1a5122d89550df0fe542a0e1fbd65045f26d2eedd40a0478d6afcb1df564a2768ecd1773b0b391c7d88bd9ad8aff1eaf03620135dbd00a1853d5637c43c44af054b0f427b4782a744d51df89cbcae55cb2d0f77a6a01486d66556fd64cb51a54f60f79ee5a29514ec6ff0b93e4f1ae5d8207d985e2ff4097299c6fb09974b6afe23b775daa8561c34a79b588c2e312fdaa9c6159bba1800c7ad55beac282b8fa0e81d596d660fce61f2014d4402c653219c6effeb53cdc91ca529aaf1c6c9cd661b2ca85e6e529f1016ef2b8f4c969c893a0b8c285a1fa20e6203679d218cd35891d80cffb2f54979299a48c7c89b1ee1621fc335dbe8ada4bfb01d074437bd7f9b24e082aeffee4a884098ed976ea1ac542787689318249b53bf8ad29aca50f4be50d9820eba0dcde7dddc7ae54be09c006e9b8e1b5c14b42770d154d7afc3f2c297a086fa7392cd386362bcfe056b4310fc02788aee567eeafd762edc9ad438d41076dc3a668805922d04701141394a0857b0e3b0ed2aa40e5612070a307c1e5430811ff1007704379569f0273a049f4968b6ed6aada867ecfc64f346b710e9827b821fad5de73401c26d8f185f81e86abd2a55b4210e0eda37634cf720d1f4011b9881a4c6374b1e50b968e9a654c6cadff9a6dc3a9e0c0b2a5d2753832c19a12792d9d3e3ad301e10df0bc053559c561462859ae932b715bf8d808089d69363e492fdbee2931a81d5bdc64b2139dd3f562806c2fdd782f4188f040c814f9c3c338a1873af4485584f406200b199083ea392d1e00014fc61ce0da340f7699769c32c9b95760a7b200bd06b1cdbafdb20e1947b5aa75c43a38ae0c9d8ac81eba8eeeec1188e18b375e063a4c1b2251f5a68f20c7d8ba9e1b185a4505856764d16351a35665fbcdb8f8c504751d8148507ae57a5103ae04967a497c6bcda901094fa1f8b666f88030579d897e8dffa70407691599aac1dd87a8d045f5ad839c59e13619595ba3f352bde5b296ff41544d87546d26c01f40978ae720d19ddc8f3a039a5d9bfe61e9bd91d50b865dc1832b83e9172f3204d40ae530ae1a00da9e9174e1227df05df286baf638f90d914319d8df868c3a27432c99d24fb1de8f3e9c21b05f718095e51779ad3674290fd3e834f9c390289614e3af5089674af83df5a36d3148745a023e651b837180d04fae008286d7a571c35d44c54f0368de49c2aed76663020003d6151062e39b8485767531b523bc05144766379fed2e941263182f5b166242c6140c31543b12471576283472285e64f78757e93053ddb228e9abc0fd2a6dc563cdc6a17e4b1a56c0d15c283bfecc4383d342b8b6b9aa4890682c71a86c8b05fdfd4e106033000000000000000157c94a01098d8970345a431f324f55565abfd19cdfdbec3767cd489bda706f663d2671d3177a0f96b0515aaa0707a1276b22ad068c8de9b3fbdc92bb05f6bbb4e55c5f566c2d8a458cf75cb54c1a59e2c24f41888dcb847636b6e63e0ada90ff62e18f5425c48d9f181bea2ef9e59db4dc95378b4e75cfa383c41fe33401a6bb714ca6f8360dd76e4053c16f0631ba2077d610cfc20aa1044890e73204f0445ea8a3ca8643f7b4f9dece3b5743724494d297acf1dc75279cc23b325cfcb2686fe7a5fcd6808867e0b4896e0e96a1d6ac533c57c616f542e11510d2014b4479286455d96cd873d54113be745d0ed042636f3c7b0f3f846eaead668fba2d80e7e266d1382196f7e8e41c4aa1632f5f70b8c01d787e355d13feba8d2fc81070a6836f5ba6353b77e377520a9ade3528ef73f89f7172a992498c18870fe6e3b629cfb76923d94e06217ef45764349513a07042d8072647aa4fd1388ccfd646c49fea61781941c2333d7d2011cf1692062ea30f39c3b191620127aebf1c37675b625a273f903c8b6cee5ee9b921832caea9e72174aa17edae8f5def03a4bd9006cf85d1a48b3b35c49804eb326da93ab7a55c378baf44b25ab3d2dffbe366abf01132e326ebcc4905d1cf6c91f5e19c0196ca7bbd56210eca0993871db0eb9a134f729d5d38a092b480ae3430d1a3b4cd56b620e0d49a6844722ebdb6abbb9cc33c74ce2baeb94c7e08f8d5dfb40f982f7413aef40889f3e695f28019d92bad7a5c02b8226a076a44b33b99fca66f2b1030772d2f896f47871832e51ecd4194f29d78c79cb66f5f74e06f72dd76c27bdb48cc78d845991595a7cf6163b7b81565f6607764add94c8670b8ea4674ba3b8bb4c0c25c5f4ad00d3af021a3f9937301ccb6cc116e33d67dcb5f67a761691a3995aebda2f8ebac5fd6fe27d1a76993a77f0f05b0ad5766acc4b8c7a85d62e41674de3d92b9328ab07b47f670e75702d49a806e97fa114c43838d6d01c41fa2767782cf163dad48920197e1c1dc0bd5b4f438fd2e5f9ae423766e543c2e73ad34a5e1a5482f7bd359235c89ed465e39d92a3523b6486e383495a87a4dbdcc770e7081c541f7df292ce3d09be22be1da61e674d7123d115761628137633be39dd1d6c279dbf73c0b5a3a016158eeb89283fcc2607223944fb228a373c12f32bf41e119fe79a7dd5a2c7b25f2529afb3d56ff0c92dc07f7ca30aed14988cf0ba08563c01493a2be2d1f5f970e0464b8d476238aab0265f801bf4cdf57197a095159b761a21cc9cb753310e8b69de9eed677b7d7ad76a017ceab1ff03faa16b6e8fc85c9ca01ebfd9118cd5da7b2ca71b929d332b969e91a3c1c3c91ab2558589237e9249537dd3347fc8216befe04a8a4868ed9ebd083d0a529b0099d7831aa5468dfcd6963eb83343777b4019b50e91c0ede66f9291a71c61a7a945fa7078e9cf6e91c2cca2b3a491e758a608b53f47fbe6c571781f434e7776a493150f02d5856d38803e3cd535ecb01c9b980d6516f23b9ebfac82bc2555e384835ebb8de0a69b76d92c75f059f0a735cd047bafe81dc40fa48bbeb39ae06da02978e21835825f931b4caf60a41a285ddd141bdf81ee2490865fdbcd5f411a134902a25c174171f8d2da4acf3105d70e7de85f36d3ea03f103f4951dc6640af45b8037f0871668be828a9f6ce93629629902c30e5a506240c642c2108077a60a4f7cf655dd3ffcc5c25231300d496b1991cf4b4a4b51a870d81ed98f9b79f1d19c48c453dbe16ed8beb36478f56dbc03aecd8848473ed2ab6cedd8d91cb4ee040d5704b2b95c8d53120e043d6f64036954e60e435d88c901b79020583b21cf8062478e893fd72f5f676b3ea36671210a81ec36ea7518deffc516f137da1d90d429b1bfc49a0714b4eb1f6c54f99ca1ebb271e69a8d3490c89d41f94838630397f6bd992f72a5ce0fcc7487a46ff9c414316dbcd5b91d4959d2567a1c1892150482b48846990ac96716dbee8fff8964f8466f8b7c53ebcce86e09fa4613a3517da783e1ee7422087aef23c3834dfd77a034b5ac75852e91f6275d8624b3ede2ef99019ac70513adf685996d7069086221eea6034bcb036fb737905227b35346839beecf4688b1f4d248523872196965e77dc080c5cc8101c9e3c700fef7c056e2d9ec788e7faa153eb3ce2268910eb4de957059ee792a4a56f8e82ed3975135bb987a00ffc99201f671b88ab26204272198985d280a6447f48412b0f12a5a0b49f79d5d383681fa9a7306aa3f3d3a23f0e72bdbbbf9705b1afc96c1cc9bc0c5efdbe41418ef4f02f7d887048cdabc17c25bd26f54f694130349f741224a6bef8c6d8f90d46da79f69dd5615b7ea7c5a67574d5e48aec06c5869f660538dc8307a2846566a0b1bda7c629a378c42588086bfc09906077ba1cc2386414d436f88fc9afac84cbffa8e3786fca7d141d584764c95b7039bfb472e5ebda1a071381d36600ef1f2fb082b81b3effd7eda8340c1e384afe26170a2d1c351f8264f765b31d0e44670dd065d4e863e54f7b3d3e61d133e99a8d8c0f8818d413d3220344c159baf14a1c31f78caa8e7d3550667d4d31ec3d20bb0854a0b5431c9515b2645ef4f6b31e5d5e75c6428fe3a76e2b31d88cf2613e01a838cdd4d13938b1f8d29f4860872c831938b7eddf52af1f3d6a8cdcdb2d425637b6765d2c90f0429c20f391f8f6a5605130e65848084d2bfb3635b410c21d86b3f8cc1c9345ab9f84ecbcdbe71de1161ade26c9fbd1d5cb83a01d3cf7b19d853fff861b6120b0ffa8275177ff99ee2c8e61003464f5c45d5524fae64b74eae4ac984698a54b0921f31971b45f9e57583066e301f4044c24b79642e1b402ff1964f89042b5de36845e29c2363820ebab3da1a81b8f0092caf1cb1093acdd10a5123d9c801e7fcbe29cae96ddfd99842d195293460663db1813ef73de7cd917cbee3a2bbb876e933bb408cefe17b3b1c3fa1589ed7ad9b18967f252e7cb92b0d7ebbf0ba5f32ecdb1d93cf87e471d1fdda74323351f07d4f895d00118ff44bca34e79c60a09eccd5cbc4fec8a476593318fff1d035da297a6b40baf2b31a2ea41bb1201483e4132cc932c0669c2cb5563f5b7af9bea2099c4bfe1238fd1c2f4c59795a8361a9f90009262391c176be61c79eff872ccd854e054dba541acf9219b280243a366a60fc95e7915feb71e06f9644651930e66e5cd387f64154fd3f3641cf280fb93affd38baea735bfdd99499befeebcd2635649eb378f41a69d28700aee52996ca0c4e22b7a0359079d951befa1214f65ca3be800db9ca3dc88b43fe53a8c8ba69ce6dd58d12f9ebd6f4313827639e57006332256cf09add7d47a167ff1c9b975182e06cd6f9023d71d56a2201e8ac77de90ec9b259a16e3fb13e8d7a670b6d72ae0d27264acc9e198cb7851390dab5f0863f1b2005c4b0b6ac2a953dc33d05b93bdc9c879948519fb938e0dccb76b4f39460978c3caf7041fa6801bb3a114b045e148a1d3b2a2db9cea0b5c07c4c40c7f98be6032a6dd0c2b962b6c28d719fc98435466c7b225f5f13519fac921296c5c8b3f66ef4c7af628788a1cf819d27bcfb2e0b56b9c2f78df59ab34d05f8fd9b95bc8027abb52f1546fc9af6c39c5c65a683fdcfe71367f399a796436384daa51feed6d3e96a2d159e22d316e4f0c48c9f4e1f907b842a7bf1562a24293f062bf09fa9b7433ce603f3065df66b474148432e905dd7251974598d654a04223a8680eb69fca114783ac98d0c71c66817cc9aa9ee2bc97b1e7cb77a2e6c40d09508484a0d3e8fb3ef139ff42e8a5ca8965cf01c67f43676053e5cca2e66d9b22f5928fc2de699603a25b17d9c34827c31df30bc1f04e616ff5a0e74b1bbed1ecaef51d9190c4a4fc771ee03afe14c6a7eefef90cb5bc5d065e549ad2441dd4a7bb3b6ccd6e0225377707ad4a389b90c78ad8284d93a87496344ee547679dec94624cc6d627c7198ddef5feb9d97f7e39f0c44146e0820349b6fb055b44e1da546d1d042f46a874c8f0ac8999068bc22e4eeb55891f9b03efce407c0331810380e6b3d7666bdf52a4405d2d651607ebd5610ada0452de9aa846035b1b5f2ff1b620ca62c84b26232c8850e4b0c324b7074470f09146f6f84c50247c895351ca99d8c86bedfb04ed1a1ec7458131eda6578c7b23b2769405ae11692db2de171ef6d9fd275936a6d5d133837dab719b2581bc22ca6a4dcaf9b1d897c0c9eac5521290e2da7f456b4f3df31dc5885982b78eec8b065807262b446bb25f5ec9afe98a90f761a518993466cdd4b1fb7a4833d0da615fb858d3b7a466938d3dcc69625659bd044d3dff7ba275c4e9b6608f03857be3b15ba7094e08d724d62c38f498a1fb7e4d9ac68b6d4b3659e1fb645c218553e84d46c57c6ebb2229386e35ab88335893eadbda97f3ec307ecc9889628c11fdc3fc79707d02ce38ceac47639ee7c3737cf50e24069a1031bfcbab875b8b6f7ab64a595153e61483015c4ffb54c05d347830349e52dd66fd7c65097d7d41c3d26669154aac3863aaf16276e2354d87cdfadad6d4e979605e51dfb943c9f00341efc499859f44f384d2500b355243ac004b8ed4f6d3de7210fa3cc6b87288482e460f13ee0e567f18b2c74eec6e19cc24948bf3c8b374844b8bdfd594c74b274e725f20b1cdec23de8cc951ac1cb045e285c99fc11cca3ffaaf4ceec460b3fb77efb863fb75ada6acb5e99f18d6eaf48de04038ff5e04ee67f7559e4de23e21e07f2c4c218bb1000898aeacf3d7203f5095fdb10cf426dd81a556b8bc482373ab70e98b61398dd0750ca11579bb6c7eaa01390de475e2e3fbe6de0bbefcdba51e3b7a4b161ecac76e9fa13ce7c2ff35dc355c4474c15650282d2678381ca70cd16415463137f22732141fe204d00e7372467285f22e3bab6a52cb972db64eef232e82e5e1494d3b401fe6df03cefa56334f120e68df5ba3ef5081e9ad227199754272bfa9ba0400e521fed620221fe510f54f0745ac7e1bed9edccc566fd42b410bdc83f61f9247a3f0e7a6cbfb3438e2562edc9fc7d538810d187e1d7082a036ee625f0797ce140cdb4864127acee6a3c00ffc9cec89145a54df8c7a36adec9e00eaa1c9c1cbf548a07c9cd288bbd8855512dc000c51bbbda0c1da141e230c20fe0ab5286e126c5493689074dc4e5960160c9e2075ffc67c33c13bc776d446db065b2b6632cb292efb720b16de0e8235b10e11783215754cb7a518d76fac6646e7d20a217f7c22be31835419626fb3e0d547cfa8897cf0fde6c07c3706e0653007e3129351e3e966d7915a22c413381cb62a5f4e442ce635df38c9e5fe4cdde500ce34251881a1614713b015e6ad5cd8b9b1ab8013849ff13834187cc23fa45ef265e4d5c3d6fdf6f492a81681cf79dbc9c4efce4fcb770f1fd41a8268e9f73eb0cc692d1fc518c31b29e020050ae33c5e7c5b23321c4131207e3c4cf061efbb7453c9c85aefbe3ea3534cb186eb7ab66b6ef21fca5f000fe965bea303dcddf31ec958c288fa1801187e2840eb47f105fd68c26a9dcb88a2beaf638431f1e04b19a8345815f33fc0e0ba935bbfabcf75c1287e62fb735ef7d12225378e2651ec781992cc73d2a5444ec3bcc1c023c5ae0cbce5f55458a934bd8a4cd80e0975f809db97eeb39c8743e74b64ec28b24aa5a49a7a0de86cf824ad6b5143382de1579cde7301c21fea149e8ade1e4e8bfc0d6a6dec5acf88e78f1a88af5481e65650e37f0f495e728795668eb8b89c4bc5d9402e44bf7e3e4af771cf30ec273321e39659fb131f57c43b8e56eb19ac1dc6ff81a324347450bcf787f069af11cec34833e333c80000
182 |
183 | ** Weight: 20030
184 | ** Virtual size: 5008
185 | ** Discount Weight: 2034
186 | ** Discount Virtual size: 509
187 |
188 | ==References==
189 |
190 |
191 |
--------------------------------------------------------------------------------
/elip-0201.mediawiki:
--------------------------------------------------------------------------------
1 |
2 | ELIP: 201
3 | Layer: Wallets
4 | Title: Reduce Elements default dust relay feerate to match min relay feerate
5 | Author: Kilian Rausch and Byron Hambly
6 | Comments-Summary: No comments yet.
7 | Comments-URI: TBD
8 | Status: Draft
9 | Type: Standards Track
10 | Created: 2025-03-07
11 | License: BSD-3-Clause
12 |
13 |
14 | ==Introduction==
15 |
16 | ===Abstract===
17 |
18 | This document proposes to reduce the default dust relay feerate in Elements to match the default minimum relay feerate.
19 |
20 | ===Copyright===
21 |
22 | This document is licensed under the 3-clause BSD license.
23 |
24 | ===Motivation===
25 |
26 | Elements has inherited the default values for the minimum relay feerate and dust relay feerate from the upstream Bitcoin Core software fork. The minimum relay feerate was reduced to 100 sats/kvB [https://github.com/ElementsProject/elements/pull/684/files#diff-d3c243938494b10666b44404a27af7d84b44a72b85a27431e0c89e181462ca6eR58 ElementsProject/elements#684], while the inherited dust relay feerate remains at 3000 sats/kvB.
27 |
28 | Since Elements has confidential transaction amounts, it is already possible for wallets to create "dust" outputs. We propose that the default dust relay feerate should match the minimum relay feerate for consistency, and allow a default Elements wallet to create smaller value outputs without manually setting the dustrelayfee.
29 |
30 | ==Design==
31 |
32 | The "dust threshold" for output types is node policy and unrelated to consensus of the network.
33 |
34 | The default dustrelayfee rate is 3 sats/vb (3000 sats/kvb) [https://github.com/ElementsProject/elements/blob/master/src/policy/policy.h#L58 DUST_RELAY_TX_FEE].
35 |
36 | In testing, a confidential WPKH output has a base size of 98 bytes. The function GetDustThreshold then adds a further 67.75 witness bytes, giving a floored total of 165 bytes. At the default dustrelayfee of 3 sat/vb this gives a dust threshold of 495 sats.
37 |
38 | By reducing the dustrelayfee to 0.1 sats/vb (100 sats/kvb), Elements RPCs can create confidential WPKH outputs with amounts as low as 17 sats ( 165 vb * 0.1 sats/vb rounded up to the next integer).
39 |
40 | There is an IsDust check in IsStandardTx [https://github.com/ElementsProject/elements/blob/master/src/policy/policy.cpp#L149 IsStandardTx policy check], but this can only be checked for unblinded transactions.
41 |
42 | Reducing the default dust relay fee to match the minimum relay fee results in a more consistent order of magnitude expectation for output values, and allows a default Elements wallet to create smaller value outputs without setting dustrelayfee configuration manually.
43 |
44 | As already noted, this policy can be already be reduced by individual nodes, and other Liquid wallets can trivially create blinded outputs below any dust threshold.
45 |
46 | ==Reference Implementation==
47 |
48 | https://github.com/ElementsProject/elements/pull/1433
49 |
50 | ==References==
51 |
52 |
53 |
--------------------------------------------------------------------------------