commit 19f871a71e034f89ba2502be08a4c12622a9fa82
parent 9479b663fda654482588626d3fe10c1f8415909c
Author: Mikolai Gütschow <mikolai.guetschow@tu-dresden.de>
Date: Wed, 29 Apr 2026 14:19:36 +0200
protocol: add recoup protocol
Diffstat:
2 files changed, 510 insertions(+), 248 deletions(-)
diff --git a/draft-guetschow-taler-protocol.md b/draft-guetschow-taler-protocol.md
@@ -68,7 +68,7 @@ Use at your own risk!
- `a * b (mod N)` / `a ** b (mod N)` denotes the multiplication / exponentiation of multiple precision integers a and b, modulo N
- `for`, `if`, variable assignment `=`, and conditional operators are to be interpreted like their Python/Julia equivalents
- `data.key` denotes the property `key` on the object `data`
-- `0..n` denotes the exclusive range of integer numbers from `0` to `n-1`
+- `0..n` denotes the exclusive range of integer numbers from `0` to `n`, i.e., `0, 1, 2, ..., n-1`
- `⟨dataᵢ⟩` within a context of `i = 0..n` denotes `n` objects `dataᵢ`, represented in memory as a continuous array
- `⟨dataᵢ.key⟩` within a context of `i = 0..n` denotes an array of the `n` properties `key` of all `n` objects `dataᵢ`
@@ -334,11 +334,11 @@ and `Convert-Point-Ed25519-Curve25519(p)` which implements the birational map of
pub' = Convert-Point-Ed25519-Curve25519(pub)
shared' = X25519(priv, pub')
shared = SHA-512(shared')
+~~~
{::comment}
see GNUNET_CRYPTO_eddsa_ecdh
{:/}
-~~~
~~~
ECDH-GetPub(priv) -> pub
@@ -801,8 +801,6 @@ Persist (contract, ⟨sigᵢ⟩, ⟨depositᵢ⟩)
// TODO: explain CoinSelection
-// TODO: maybe introduce symbol for pub/priv
-
~~~
(M3) deposit check (merchant)
@@ -911,11 +909,12 @@ Check Ed25519-Verify(exchange.pub, msg, sig)
The wallet obtains `n` new coins `⟨coinᵢ⟩` of denominations `⟨denomᵢ⟩`
in exchange for one old `coin` of denomination `denom` from the exchange.
-There are two reasons why a wallet needs to do this:
+There are three reasons why a wallet needs to do this:
1. Obtaining unlinkable change after using only a part of the coin's value during a payment (cf. {{payment}}) or deposit (cf. {{deposit}}),
i.e. where `contribution <= denom.value`
-2. Renewing a coin before it deposit-expires.
+2. Obtaining unlinkable change after a successful refund (cf. {{refund}})
+3. Renewing a coin before it deposit-expires
The sum of the refresh fee of `denom` and the new denominations' values and withdrawal fees (defined by the exchange)
must be smaller or equal to the residual value of the old `coin`.
@@ -1133,11 +1132,13 @@ for i in 0..n:
### Link {#link}
-// todo: add introductory text
+Coins ⟨coinᵧᵢ⟩ obtained via the refresh protocol (cf. {{refresh}}) can be regenerated
+with the knowledge of the old coin's private key `coin.priv` using the link protocol,
+integrated in the coin history endpoint.
~~~
wallet exchange
-Knows coin Knows refresh_record for coin
+Knows coin Knows refresh_record for coin.pub
| |
+----------------------+ |
| (W1) history request | |
@@ -1225,7 +1226,145 @@ if ⟨blind_sigᵢ⟩ returned:
## Refund {#refund}
-// todo
+A wallet can request a refund for an order from the merchant after it has been completed successfully
+(cf. {{payment}}) and before the merchant has been paid out by the exchange (i.e., before `contract.wire_deadline`).
+The merchant needs to approve the refund via its business logic,
+and is free to decide the total amount of the refund
+as well as which coins' deposit operations (cf. {{deposit}}) are (potentially partly) invalidated.
+After the exchange has accepted the refund request,
+the coins obtain their (partial) value back.
+The wallet should proceed to refresh (cf. {{refresh}}) the coins before spending them again
+to obtain unlinkability.
+
+In case the wallet itself has used deposit to its own payto,
+it can act as the merchant in the protocol below.
+
+// todo: if proves practical, similar strucuture could be used for pay/deposit
+(interaction) between wallet, merchant and exchange
+
+~~~
+ wallet merchant exchange
+Knows order.id Knows merchant.priv Knows deposit_record
+Knows contract | for coinᵢ.pub
+ | | |
++---------------------+ | |
+| (W1) refund request | | |
++---------------------+ | |
+ | | |
+ |- /orders/{order.id}/refund ->| |
+ | (h_contract) | |
+ | | |
+ | +------------------------+ |
+ | | (M1) refund processing | |
+ | +------------------------+ |
+ | | |
+ | |- /coins/{coinᵢ.pub}/refund ->|
+ | | (valueᵢ, h_contract, id, |
+ | | merchant.pub, sigᵢ) |
+ | | |
+ | | +-------------------+
+ | | | (E1) refund check |
+ | | +-------------------+
+ | | |
+ | |<--- (exchange.pub, sigᵢ) ----|
+ | | |
+ | +--------------------------+ |
+ | | (M2) refund confirmation | |
+ | +--------------------------+ |
+ | | |
+ |<-----(value, ⟨refundᵢ⟩,------| |
+ | merchant.pub) | | // todo: why merchant.pub if no sig transmitted?
+ | | |
++-----------------------+ | |
+| (W2) refund reception | | |
++-----------------------+ | |
+ | | |
+~~~
+
+where (for RSA, without age-restriction)
+
+{::comment}
+
+⟨ᵧₖᵢ⟩
+{:/}
+
+~~~
+(W1) refund request (wallet)
+
+h_contract = SHA-512(canonicalJSON(contract))
+~~~
+
+{::comment}
+
+⟨ᵧₖᵢ⟩
+{:/}
+
+~~~
+(M1) refund processing (merchant)
+
+Check h_contract known and refund possible
+time = now()
+⟨coinᵢ⟩ = Lookup by h_contract
+id = ?
+for i in 0..n:
+ denomᵢ = Lookup by coinᵢ.h_denom
+ valueᵢ = refund amount // todo: split wisely
+ msgᵢ = Gen-Msg(MERCHANT_REFUND,
+ ( h_contract | coinᵢ.pub | id | valueᵢ | denomᵢ.fee_refund ))
+ sigᵢ = Ed25519-Sign(merchant.priv, msgᵢ)
+~~~
+
+{::comment}
+
+⟨ᵧₖᵢ⟩
+{:/}
+
+~~~
+(E1) refund check and confirmation (exchange)
+
+deposit_record = Lookup by h_contract // todo: needs to be persisted before with order.id and used coins!
+Check coinᵢ.pub part of deposit_record
+denomᵢ = Lookup by coinᵢ.pub
+msgᵢ = Gen-Msg(MERCHANT_REFUND,
+ ( h_contract | coinᵢ.pub | id | valueᵢ | denomᵢ.fee_refund ))
+Check Ed25519-Verify(merchant.pub, msgᵢ, sigᵢ)
+Check valueᵢ >= denomᵢ.fee_refund
+Check refund possible (prior to wire transfer deadline)
+remove/update scheduled wire transfer
+mark coin part as unspent
+msgᵢ = Gen-Msg(MERCHANT_REFUND_OK, SHA-512(order.id)) // todo: hashing string without terminating \0
+sigᵢ = Ed25519-Sign(exchange.priv, msgᵢ)
+~~~
+
+{::comment}
+
+⟨ᵧₖᵢ⟩
+{:/}
+
+~~~
+(M2) refund confirmation (merchant)
+
+for i in 0..n:
+ msgᵢ = Gen-Msg(MERCHANT_REFUND_OK, SHA-512(order.id)) // todo: hashing string without terminating \0
+ Check Ed25519-Verify(exchange.pub, msgᵢ, sigᵢ)
+ update business logic
+ refundᵢ = (valueᵢ, sigᵢ, id, coinᵢ.pub, time)
+value = sum ⟨valueᵢ⟩
+~~~
+
+{::comment}
+
+⟨ᵧₖᵢ⟩
+{:/}
+
+~~~
+(W2) refund reception (wallet)
+
+for i in 0..n:
+ (valueᵢ, sigᵢ, id, coinᵢ.pub, time) = refundᵢ
+update persistent transaction information
+refresh ⟨coinᵢ⟩
+~~~
## Recoup {#recoup}
diff --git a/draft-guetschow-taler-protocol.xml b/draft-guetschow-taler-protocol.xml
@@ -24,7 +24,7 @@
<email>mikolai.guetschow@tu-dresden.de</email>
</address>
</author>
- <date year="2026" month="April" day="08"/>
+ <date year="2026" month="April" day="29"/>
<workgroup>independent</workgroup>
<keyword>taler</keyword>
<keyword>cryptography</keyword>
@@ -82,7 +82,7 @@ Use at your own risk!</t>
<t><tt>data.key</tt> denotes the property <tt>key</tt> on the object <tt>data</tt></t>
</li>
<li>
- <t><tt>0..n</tt> denotes the exclusive range of integer numbers from <tt>0</tt> to <tt>n-1</tt></t>
+ <t><tt>0..n</tt> denotes the exclusive range of integer numbers from <tt>0</tt> to <tt>n</tt>, i.e., <tt>0, 1, 2, ..., n-1</tt></t>
</li>
<li>
<t><tt>⟨dataᵢ⟩</tt> within a context of <tt>i = 0..n</tt> denotes <tt>n</tt> objects <tt>dataᵢ</tt>, represented in memory as a continuous array</t>
@@ -322,10 +322,6 @@ and <tt>Convert-Point-Ed25519-Curve25519(p)</tt> which implements the birational
pub' = Convert-Point-Ed25519-Curve25519(pub)
shared' = X25519(priv, pub')
shared = SHA-512(shared')
-
-{::comment}
-see GNUNET_CRYPTO_eddsa_ecdh
-{:/}
]]></artwork>
<artwork><![CDATA[
ECDH-GetPub(priv) -> pub
@@ -759,7 +755,6 @@ for i in 0..n:
Persist (contract, ⟨sigᵢ⟩, ⟨depositᵢ⟩)
]]></artwork>
<t>// TODO: explain CoinSelection</t>
- <t>// TODO: maybe introduce symbol for pub/priv</t>
<artwork><![CDATA[
(M3) deposit check (merchant)
@@ -861,13 +856,16 @@ Check Ed25519-Verify(exchange.pub, msg, sig)
<name>Refresh</name>
<t>The wallet obtains <tt>n</tt> new coins <tt>⟨coinᵢ⟩</tt> of denominations <tt>⟨denomᵢ⟩</tt>
in exchange for one old <tt>coin</tt> of denomination <tt>denom</tt> from the exchange.
-There are two reasons why a wallet needs to do this:</t>
+There are three reasons why a wallet needs to do this:</t>
<ol spacing="normal" type="1"><li>
<t>Obtaining unlinkable change after using only a part of the coin's value during a payment (cf. <xref target="payment"/>) or deposit (cf. <xref target="deposit"/>),
i.e. where <tt>contribution <= denom.value</tt></t>
</li>
<li>
- <t>Renewing a coin before it deposit-expires.</t>
+ <t>Obtaining unlinkable change after a successful refund (cf. <xref target="refund"/>)</t>
+ </li>
+ <li>
+ <t>Renewing a coin before it deposit-expires</t>
</li>
</ol>
<t>The sum of the refresh fee of <tt>denom</tt> and the new denominations' values and withdrawal fees (defined by the exchange)
@@ -1040,7 +1038,7 @@ for i in 0..n:
<t>// todo: add introductory text</t>
<artwork><![CDATA[
wallet exchange
-Knows coin Knows refresh_record for coin
+Knows coin Knows refresh_record for coin.pub
| |
+----------------------+ |
| (W1) history request | |
@@ -1109,7 +1107,110 @@ if ⟨blind_sigᵢ⟩ returned:
</section>
<section anchor="refund">
<name>Refund</name>
- <t>// todo</t>
+ <t>A wallet can request a refund for an order after it has been completed successfully
+(cf. <xref target="payment"/>) and before the deadline for the wire transfer from the exchange
+to the merchant's bank account has passed.
+The merchant needs to approve the refund via its business logic,
+and is free to decide the total amount of the refund
+as well as which coins' deposit operations (cf. <xref target="deposit"/>) are (potentially partly) invalidated.
+After the exchange has accepted the refund request,
+the coins obtain their (partial) value back.
+The wallet should proceed to refresh (cf. <xref target="refresh"/>) the coins before spending them again
+to obtain unlinkability.</t>
+ <t>// todo: if proves practical, similar strucuture could be used for pay/deposit
+(interaction) between wallet, merchant and exchange</t>
+ <artwork><![CDATA[
+ wallet merchant exchange
+Knows order.id Knows merchant.priv Knows deposit_record
+Knows contract | for coinᵢ.pub
+ | | |
++---------------------+ | |
+| (W1) refund request | | |
++---------------------+ | |
+ | | |
+ |- /orders/{order.id}/refund ->| |
+ | (h_contract) | |
+ | | |
+ | +------------------------+ |
+ | | (M1) refund processing | |
+ | +------------------------+ |
+ | | |
+ | |- /coins/{coinᵢ.pub}/refund ->|
+ | | (valueᵢ, h_contract, id, |
+ | | merchant.pub, sigᵢ) |
+ | | |
+ | | +-------------------+
+ | | | (E1) refund check |
+ | | +-------------------+
+ | | |
+ | |<--- (exchange.pub, sigᵢ) ----|
+ | | |
+ | +--------------------------+ |
+ | | (M2) refund confirmation | |
+ | +--------------------------+ |
+ | | |
+ |<-----(value, ⟨refundᵢ⟩,------| |
+ | merchant.pub) | | // todo: why merchant.pub if no sig transmitted?
+ | | |
++-----------------------+ | |
+| (W2) refund reception | | |
++-----------------------+ | |
+ | | |
+]]></artwork>
+ <t>where (for RSA, without age-restriction)</t>
+ <artwork><![CDATA[
+(W1) refund request (wallet)
+
+h_contract = SHA-512(canonicalJSON(contract))
+]]></artwork>
+ <artwork><![CDATA[
+(M1) refund processing (merchant)
+
+Check h_contract known and refund possible
+time = now()
+⟨coinᵢ⟩ = Lookup by h_contract
+id = ?
+for i in 0..n:
+ denomᵢ = Lookup by coinᵢ.h_denom
+ valueᵢ = refund amount // todo: split wisely
+ msgᵢ = Gen-Msg(MERCHANT_REFUND,
+ ( h_contract | coinᵢ.pub | id | valueᵢ | denomᵢ.fee_refund ))
+ sigᵢ = Ed25519-Sign(merchant.priv, msgᵢ)
+]]></artwork>
+ <artwork><![CDATA[
+(E1) refund check and confirmation (exchange)
+
+deposit_record = Lookup by h_contract // todo: needs to be persisted before with order.id and used coins!
+Check coinᵢ.pub part of deposit_record
+denomᵢ = Lookup by coinᵢ.pub
+msgᵢ = Gen-Msg(MERCHANT_REFUND,
+ ( h_contract | coinᵢ.pub | id | valueᵢ | denomᵢ.fee_refund ))
+Check Ed25519-Verify(merchant.pub, msgᵢ, sigᵢ)
+Check valueᵢ >= denomᵢ.fee_refund
+Check refund possible (prior to wire transfer deadline)
+remove/update scheduled wire transfer
+mark coin part as unspent
+msgᵢ = Gen-Msg(MERCHANT_REFUND_OK, SHA-512(order.id)) // todo: hashing string without terminating \0
+sigᵢ = Ed25519-Sign(exchange.priv, msgᵢ)
+]]></artwork>
+ <artwork><![CDATA[
+(M2) refund confirmation (merchant)
+
+for i in 0..n:
+ msgᵢ = Gen-Msg(MERCHANT_REFUND_OK, SHA-512(order.id)) // todo: hashing string without terminating \0
+ Check Ed25519-Verify(exchange.pub, msgᵢ, sigᵢ)
+ update business logic
+ refundᵢ = (valueᵢ, sigᵢ, id, coinᵢ.pub, time)
+value = sum ⟨valueᵢ⟩
+]]></artwork>
+ <artwork><![CDATA[
+(W2) refund reception (wallet)
+
+for i in 0..n:
+ (valueᵢ, sigᵢ, id, coinᵢ.pub, time) = refundᵢ
+update persistent state about transaction
+refresh ⟨coinᵢ⟩
+]]></artwork>
</section>
<section anchor="recoup">
<name>Recoup</name>
@@ -1238,7 +1339,7 @@ if ⟨blind_sigᵢ⟩ returned:
<refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
</reference>
</references>
- <?line 1250?>
+ <?line 1385?>
<section anchor="change-log">
<name>Change log</name>
@@ -1251,233 +1352,255 @@ Education and Research (BMBF) within the project Concrete Contracts.</t>
</section>
</back>
<!-- ##markdown-source:
-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
-9XnH+f9L/aigpJ4AAA==
+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
+BRwMyKZNZ8FXQEU/O2k1emXf0NGQDYQp9fbH8uxcW7nA5Lpx7hpvyiCcUCqQ
+bqsY2H8j7b7YFa4QD1qCEnNTJBhfxKHxigIF+AC9PccN9YJucInNOkHQ1X6j
+IhMVHug9JjzMnKK7lDvYB1hHeDcPltfhvnMo5ZRbNKBPbYaYvKJK66vW5Slm
+O0ZYNw1nWMIk1kpSLOnGrXVnUjvVcGZF3zKxDKgr0t8sBr9B6P0U3AEWBDvJ
+94Hmr4GoMdAW/j8cd/B+BdETRw/34f8vjh9bYfYymH1aYfdVFLaL9FwmX71p
+2Q3fQwZrVaRs0qykm9ZLsL77nNUHKzos6amJ0iPM5r1XjOEofNMjDazo0pDB
+gh+fFs4eDPdlyhjC/KYZrJsIEMWSrFlvU4behxiBllWQti09hyTgc4crxGjV
+nMuWsrynSudqg8MGeQ15eJc5qw/WXObNhAFWZFRUszDwj1/1KFrV5r+NSNxE
+GO6V/hLnaT7IzDWwLEvYMrV8w/POz3sSgKXcaFK1WgC4amS0WgLeZc63X6ed
+qrUytMLK0IILlMbR6Jo3l1USFUtL8NCFzsPVOh++1kzQ6hKi/r46KKGSb1vb
+n7U8c/2DAJMuyJ/VV5OwGTGhCA+/K/yGhphiVnPYWZJa01yGhfxqSUJZWTd0
+IRdupZJO7TyWqnKAQn421VJishSjddoWD5JrRnWl0rPrPUovMalL94OMdMxr
+F4WezakWja+8g3AuvYS15JNopkpBGTm0QcoVnm1PJgEGfWMcpzMKqDRujqVY
+udiYJzq62sB8gt5YzVQmWo2GiWWVVobJcEw8k4F3mahSVs3kmnOAa9SpNVUx
+gFH4RRTO6XYSiKa6ml0aTK3NMRxS2x4FViorppj0kdg6E2sIr9z1ttjQA3Xw
+XVlXqHKvJdeZ2k68WPFsDjFyCLEw4E0qftJ/egbeXdsLZUYkPlQOqV2VwmC2
+15+lZabpas407pVhSd0EsGABZbINQLQEK6b+/uTZkXETWtXc2dPDY0zYn/b3
+nx2dHu/tnyK0pnVdMtKJpxaykU1WvxS19whtbW7N9YuqybUqnhWicRvk9NnB
+sx21SdFh48cFJnTMjB58Vb2+coxXAUV0c8A+cPqJjNU5U+BKvSk0vC6TGpfS
+pF0wU6ozO/qGVDsl4IE3kevxVOy7685iENd9ZZiPOBPCI14Nl99J8TTIzg8i
+vBUVNdFiVkwnq8rUVLsKD2aKbXg8qoDlJGAlM4u1Pf2Dw+fPTh6ftpWZ8i3K
+VVKonrZf+BC5Q2VSzeqU2L+u5slMR9PSSJz9sCJ7bi8rB/OxcJKlyg8yzete
+Yv2sxW/VNdDpUpMqdcTK3p9pK0y2KOOuHUjUOLrVK2RmTB2qlb9ZIE9bzWPt
+iZaxArKS3tluiwU3leXZiIC8msWY6HJ4TavwBQdxUXmbzLOeo2vDSny8K9xk
+lup5wF0WHekmvfB874enh/Dvs2/fVY81OW+lIrshCDdSTjrFqhAgXt3RiTRr
+hzYIQ1NzWeDtv1ie73m6D3sQQZynxo0IIzzSgDdqXeOV4uzFUZaTDsFcJmw4
++e4wc3W3Ic1iBs+kC1f9VCrp9J9dfY5/4afaDj2vmoTekr5uIlZ1Vo5B6Yeu
+/HmtejrS43Djqv7VB6vn1D3fKQBHZ1yL5r/PAJzCuh5tUXT0Smx4muqpOB4o
+ha+RZEthrkmovJ/V1rdrpsMNC7E05qhA/7ZyWbcdyQvfco5t7fD+U1mrI3mM
+UwwW//NE8gc1ysO27ihm5GEJy3y/sujoxDQLMc8bHkBFcH5VM7d+V3HNoYUP
+S5Ds8go3GDVr61phaflwvQC1abcaT8Tb3lSUNNVmLHrISws01KhWfQZt+9dM
+WTpwzX7ye44HVoYBhkGdOKB82hQI6DW/s6tf6/NZdQDa0W/buCUH8PZqCSp1
+HbqtOjqkqjrMKTNFf3AT0yz0cnDpw3mMB5+twnvKP9F+aIlWjJsv/aoUmmpA
+kMKHj4+fukSvkNyQ08ajKsGpp5+bmanSvI66r1cHIzVFPy5xdNWPQ/36wi3H
+fV3QKWhWDurMiq1k3zHF9QHoYVR/HTmWBt3vkxq1ouc6Fovh1rE8A0M5wZu4
++LeGipZkIBJ52VwasrwkxMPPTOk6CX0TZRrjXQIwzMIAYkB/1Rwo61rHcfm4
+XSaDnI/bWgEe1ojRkfAwpYu4dzxvqyueDfW573kCFDkPuBaXgOLSGy6AppOT
+gXO1AoJ5N1eHzcI554tNuKwqP3RN0BvcEjDu00JZSNvDb+boI/OOXdE1MKoA
+xtteB+jAqlxRHoeelP+COb17XSA1UJABp2qxIZ9Ajqo2kM88W8dOhWINOlaH
+yX5FHXWSmRjDof9ddZ9FzbG8vPFc3upjeAADp9SZDLoGyrBRlwGvbE3IYDQx
+vIuXkYXoykjDxH/7l/9pnVdT55ZB7dMlHcAIXDcflryIEyp+sKcamIrxgXcR
+BYBlvB4T78BU5Wo4IV8pyFPyGUvnAKSSRnUljTrnqLpHdAyftwyICfizDtAA
+HZpYhvzZFAsMgWDwB9rAlplj14o38CEVKZ1SiZP52IRMcjrhSVs9znYLC7/v
+TFfZC2pxpVWmki5mf8U5+E6ED/SBXGNjg2lKXE4fX8TTBgF/bwnvjyORnASz
+mUxoVVry+NQ0cW+b3Dl8qdhVX/jm4FRd6ugcTtY1m7pGvlrkrruoAvd1qtr1
+KBvD83yj7c4AA8Ej/LoAe7e6wJ074JPVPZrq3U2xuzlCvayKvaaEfVn9emOt
+sl2oLNS3DjhzWx287FEOq4+qlFckg4KaFx2gbWc0SfEKCsO7huf5og4M0qa4
+pSUGf/3z7j26E0BixeVIai60WNtD8agTwoajLpSGoRuVTDU+HXs2BaQwBFk3
+CH2E/9c/d7Zavb/+2ZgM3Hls413zVMuZ0L3S+JlDGcR8VQRuQAZXQl4E9B0G
+c5HHPJnRdTUQ8mENoWJgdSEJX4aAc1ymJCLKuD2Vsb43yFZSal9lil8fYyUD
+ENIK+J4JfYmWobFRkDlan2N5QZfB8NU7uERzWAhRoc/i2Ngo92rLb9ER4CDX
+Iz0SvvJ179aaAL1DPeWtH2vWGVLA8I1+bjujs/I8m7Aq9QjcqWKUdSZ+lzmr
+D9bo1NCzOr/o4RoW6l6aipNY1dXsH6mAcAm0ypIoJVx3TvV3cEpVU+VmOdJx
+MJ0G5Xam0hPAH7d+ZvWG8NVA3FQJJfy//Kkxd0o/7yWBuoL/TS2g/lBOqUNX
+zP4uc1YfrFxgY097WtFjJd1ZlLgl4obWBk0c7ULU2IjfhejcRF6oakev6na3
+Fd6PZBDt/utQd9mz+mBVj7LnDQ9125el93roTFbPCeM16ShOfdyC8GocSuH0
+0zZI0ifMqFm/SPvnEAwF/bJrjiPpWMqNaZeOV46Ao+oBGDaz745fJS6uBQaG
+wrrUnr8T6EQhlJkpP8bTVl8Ca4sqaNDUZGmUb1aGBNzIhZvO/8qLPn1BtGya
+Q1u3IfuEfeVImoZ9PkWd8wCWONdiB4lUtvEQub/+2y8mZrAu+V/0rOxz+6X/
+UDl8XUd3HQOqbh3eBybqbrQrzoiJ9tri/CO9c3Kudk7++mfcOmlmiOpEullH
+hfId/F7Ehn28GwbgKDT5iOPQhY0aUUfiXZtd/BpoOL1qR2S6j/09jZqObRMJ
+8xB+mctxg079zOUtOwDlJ1jdVZsr0B3sGLfCf7sNJ2YNv4iWx9kOPsfe5Swf
+7q3o3NricdUbnGS1uNkCxeG+hTO7JpHwmh3h2oNiTUeBc8WxLVGzZbf6oP36
+x9sNBtt17Dwfok1rOB1Ne25PD5+YXL+FJbV8fdq0ZvdNYUVvhTm0qt/6sCSS
+tj2sKjRDcXJRu91uS1g3g5Xllovf26APbpwePgKtlYQxKGZUMkvV0VrOvb2L
+qw/culuoZmvR2j1dsXW6cv/O2ryzdu5YhnVxqmLKcqYQizZXnORfi0s+7Dl/
+4p6770neresO72IpIQtwzb6n3vRUd8Is2ogaNb5ghpvSfrekGH9T5fXhNUfj
+Dnl1i05jgHemKwJqPBMKgfv0X5hizUkfGd3t64ETVhkNefYMrw1Emv/lT/jt
+UGQJPNTMXko9b6x39cEvNlv8Ypt63HToq4+J+K5D0yS4bbEo+nwXDFcNaDW7
+gC4nEEUsLYZDtheQA6htcRbEeE2ygXPlfnIjm6gNhL/8qemOk8atckf/K+9U
+fQetpzv1g1lENw5RZN4d7Qg2EBxZnOG3ZCeghVb2tsJ7HGQmM7yvoK8T7ssd
+39ocR+n97qsTBFbhKynNt0Yp8OlN97kr3AFmFqHDzVNAjXPpRkU5kmY/F3/Y
+hVl3aFfDTWPg7RO2d9xMOtt68yhrGPHGjINtuW+gIdbh/Wb9wSgnm48798Z3
+wYBwFeL+c0Uhfa2M/2OGF3dv2USvZaO1a1i6CbvWX3erMm5ZAEMN/kpJ/60U
+bEVFWiLcT8+XK8i3uZjnl1/XuZvnl4U4t2J2b3JDzy/VwjoNQ9M9Pb9YtYfV
+q3oWbtD55VfnEp074gmWI7y6QwUIqw933NKW3+qtOm5XYSIkkubk3yxZChHd
+JMoJJ+o+7t9rsrT6QGWi6TbFvPdKY/JNT6+HG6y6VwB//Mp5hPcAbX27W9tF
+oJs+WR0rtylme/173kVA8vmk7Mgdfu/7B2veO6OvvwxG/zyP8uh3fO/MDfcP
+XOO0Iu1c1QpNR/UooH30+OT02fEP/ePDf3hxeHLaFur7PWiv10poLdrOFWmo
+em5f24NVWrfRfzUhbxmt1Ya+2Ajtq+FidA1wUNOvbvyWJyEUXN7vhjip5dqS
+Zqth+goXaMDxbiOChgHNlDU+yaq02FoZpaWONX5U3eK0xRWsld//j+ty/1dS
+zI7nUZ4X5ULVHMqwgQHfj2d92771bXjXyPBYAE71/Fj77Xl72mXGQlptKQJd
+Ka4upeSbT7igPCrwYJwYSpmYWxND53pEb7HinS6f5opyvjORTz1wlSMeKMCT
+FabWd6Gw31M13vpQw92cT+BgfTR+ewUBmgV5LkMuWDbHsM0mcjArqw7V2rAY
+GI95D7GuH2AHCzSORlyJjJ8Ow/MDeEhAjqJQfcKHbpVV33spq9/n+HG4XFzK
+OMZrZPjTXuTT3jV1/uY29Hyx5J92xX1zUSV+eCrIihjLpROV28GF7RH6nUsl
+cd2AAzkrZGgvTdGRv/LIhdl8VkN90668/JPlbhiMzrv2yQ51xSzgbCT5MnUt
+juXZAToPAtCXcygK5zPJ0Sy8mfLHvJGACgJ9UCGKo8K5YB1kl2iEhfOqwBXF
+ehrFAX6qL5uP+LYf9yYg+iBycN3Tp+x8vFvefM9xKItLZFT9ZSTDGEhkw11W
+FLk8flxxvL8SVOpb0hbaLTu3r77cxqvRbop74r7ZnWx8owNVpU+81T3Wet3g
+Mi84zCvHMd/ksdl3sdsHg2fdhmuPU3t5nlouBLhvAY9vnd+9OTwrGr79ODep
+UVw2jrqwQaGIFFGeNxSCfQh4KsAtf732OG7yQ0mnzRg3gYg/f6fKV8q7HvBi
+uJuvbeG2B3KZb7a6Fa/fYZzawvN3GK9MwCDeqzc7/vbwOa/XHocvkliogCZK
+IkS/qT6oU8sr9MF2SaE0OYv0zemLZuIDwFMBbvnrchzOnekPVVIBNC5IBd4M
+x82xbQtrmQVdCbRzH75zYJjqMulr6eSUQyRH99+vPfKKBayZaVvLbdi23Ab0
+hGs44oPBs27DVeO8Q1XxqqRgxcV623sIb5TZqjfkixejWSCU9VO6Ywq9hrH0
+1AUrfL2Ce/W9m4Uy90FGmDr8as3s1eLdGdqqcvYQYVERYLnRPYvpawy5hOC3
+5poPc/nK8eHDF0cH+oqP6gUD9veKXoPZ1mkRHKxy54YCZMn9eYvXt1Aq622y
+tKVJDKqq160UtGOWBmKUSDOh+VBaH1pWISSd5DTxE05LwR75Sn+wqgE1uvRp
+/ErctJTCGAetR6rboNN61939al9UaNXx4dBf7taNbT6K40gJfi0sSulmEje1
+Ut6omskpBNu9+YzOu+ubTUK3vTcNMsY0ozjA86cY3xcrUUcX/mk9oknZskpb
+sdKevi9X0IUJWr3xFbQB1cr/tOnVc/diddTNubvJnbD10oLO+ECrbrgqZ6GO
+yeEXIRQx3YwWlScpJwP3KMooQX/HJwrbNlPzxbxlBjvnbLTuZ/KJN9nYWDDR
+Syod1obQaGTMfqq1a1VCX2TGB8GQ8FveAa23lRq+4nMMqgMUBaZI8ZeyBoE/
+oc1f5CvSDv8mns9hpPLLP5fbl53ZnC5KWdEtjhe6xbHTTZzI0TyLimuxjye7
+Q51B9LyffhSnXx+In15iq8d7R3sLLY7SRHY9DwMATO5hu33OGQJP4F97I31T
+A4KQA72S+XQIHke4u0FljhtvnHnoG42XKWiDS/xEznw2SzP1pUPSDOq+jm+A
+j4NEPJQISyyeYqlhkeFVG95hOB+VnyI8lrkMQM6E//XTrx+2SBDKC8DxM8W4
+JkywS/yFdG/e9f4/fQZjIeOzAAA=
-->