Skip to content

Commit

Permalink
Merge pull request #79 from BP-WG/armor
Browse files Browse the repository at this point in the history
Support for new ASCII armoring in dependencies
  • Loading branch information
dr-orlovsky authored Mar 13, 2024
2 parents 3cee2e7 + 017c86a commit 1339f9f
Show file tree
Hide file tree
Showing 13 changed files with 100 additions and 82 deletions.
25 changes: 18 additions & 7 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 5 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ license = "Apache-2.0"
[workspace.dependencies]
amplify = "4.6.0"
strict_encoding = "2.7.0-beta.1"
strict_types = "2.7.0-beta.1"
strict_types = "2.7.0-beta.2"
commit_verify = "0.11.0-beta.4"
single_use_seals = "0.11.0-beta.4"
bp-consensus = { version = "0.11.0-beta.4", path = "consensus" }
Expand Down Expand Up @@ -77,7 +77,7 @@ serde = [
"bp-dbc/serde",
"bp-seals/serde",
]
stl = ["strict_types", "strict_types/base85", "bp-consensus/stl", "commit_verify/stl"]
stl = ["strict_types", "strict_types/armor", "bp-consensus/stl", "commit_verify/stl"]

[target.'cfg(target_arch = "wasm32")'.dependencies]
wasm-bindgen = "0.2"
Expand All @@ -89,3 +89,6 @@ wasm-bindgen-test = "0.3"

[package.metadata.docs.rs]
features = [ "all" ]

[patch.crates-io]
commit_verify = { git = "https://github.com/LNP-BP/client_side_validation", branch = "master" }
2 changes: 1 addition & 1 deletion src/stl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ use strict_types::{CompileError, LibBuilder, TypeLib};
/// Strict types id for the library providing data types from [`dbc`] and
/// [`seals`] crates.
pub const LIB_ID_BPCORE: &str =
"urn:ubideco:stl:c8Tnib31q1p7szyPukEGDoQzJQ5qJwPCn5uZCHUXzB9#cupid-metro-warning";
"urn:ubideco:stl:BeAiDVK898mzgHrmWgxHtysDhmffgMEoDwBgNuZo7QeZ#connect-verona-secret";

fn _bp_core_stl() -> Result<TypeLib, CompileError> {
LibBuilder::new(libname!(LIB_NAME_BPCORE), tiny_bset! {
Expand Down
34 changes: 18 additions & 16 deletions stl/Anchor.MerkleBlock.Tapret.vesper
Original file line number Diff line number Diff line change
@@ -1,29 +1,31 @@
AnchorMerkleBlockTapretProof rec
txid bytes len=32 aka=Txid
mpcProof rec -- MerkleBlock
mpcProof rec MerkleBlock
depth enum {
_0=0 _1=1 _2=2 _3=3 _4=4 _5=5 _6=6 _7=7 _8=8
_9=9 _10=10 _11=11 _12=12 _13=13 _14=14 _15=15 _16=16
_17=17 _18=18 _19=19 _20=20 _21=21 _22=22 _23=23 _24=24
_25=25 _26=26 _27=27 _28=28 _29=29 _30=30 _31=31
} -- U5
U5 _0=0 _1=1 _2=2 _3=3 _4=4 _5=5 _6=6 _7=7
_8=8 _9=9 _10=10 _11=11 _12=12 _13=13 _14=14 _15=15
_16=16 _17=17 _18=18 _19=19 _20=20 _21=21 _22=22 _23=23
_24=24 _25=25 _26=26 _27=27 _28=28 _29=29 _30=30 _31=31

}
cofactor is U16
crossSection list len=0..MAX32
crossSection list len=1..MAX32
TreeNode union
concealedNode rec tag=0
depth enum {
_0=0 _1=1 _2=2 _3=3 _4=4 _5=5 _6=6 _7=7 _8=8
_9=9 _10=10 _11=11 _12=12 _13=13 _14=14 _15=15 _16=16
_17=17 _18=18 _19=19 _20=20 _21=21 _22=22 _23=23 _24=24
_25=25 _26=26 _27=27 _28=28 _29=29 _30=30 _31=31
} -- U5
U5 _0=0 _1=1 _2=2 _3=3 _4=4 _5=5 _6=6 _7=7
_8=8 _9=9 _10=10 _11=11 _12=12 _13=13 _14=14 _15=15
_16=16 _17=17 _18=18 _19=19 _20=20 _21=21 _22=22 _23=23
_24=24 _25=25 _26=26 _27=27 _28=28 _29=29 _30=30 _31=31

}
hash bytes len=32 aka=MerkleHash
commitmentLeaf rec tag=1
protocolId bytes len=32 aka=ProtocolId
message bytes len=32 aka=Message
some is U64 option wrapped tag=1
dbcProof rec -- TapretProof
pathProof rec -- TapretPathProof
some union option wrapped tag=1 -- TapretNodePartner
rightBranch rec wrapped tag=2 -- TapretRightBranch
dbcProof rec TapretProof
pathProof rec TapretPathProof
some union TapretNodePartner option wrapped tag=1
rightBranch rec TapretRightBranch wrapped tag=2
nonce is U8
10 changes: 5 additions & 5 deletions stl/Anchor.MerkleProof.Tapret.vesper
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
AnchorMerkleProofTapretProof rec
txid bytes len=32 aka=Txid
mpcProof rec -- MerkleProof
mpcProof rec MerkleProof
pos is U32
cofactor is U16
path list len=0..32
element bytes len=32 aka=MerkleHash
dbcProof rec -- TapretProof
pathProof rec -- TapretPathProof
some union option wrapped tag=1 -- TapretNodePartner
rightBranch rec wrapped tag=2 -- TapretRightBranch
dbcProof rec TapretProof
pathProof rec TapretPathProof
some union TapretNodePartner option wrapped tag=1
rightBranch rec TapretRightBranch wrapped tag=2
nonce is U8
13 changes: 7 additions & 6 deletions stl/Anchor.MerkleTree.Opret.vesper
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
AnchorMerkleTreeOpretProof rec
txid bytes len=32 aka=Txid
mpcProof rec -- MerkleTree
mpcProof rec MerkleTree
depth enum {
_0=0 _1=1 _2=2 _3=3 _4=4 _5=5 _6=6 _7=7 _8=8
_9=9 _10=10 _11=11 _12=12 _13=13 _14=14 _15=15 _16=16
_17=17 _18=18 _19=19 _20=20 _21=21 _22=22 _23=23 _24=24
_25=25 _26=26 _27=27 _28=28 _29=29 _30=30 _31=31
} -- U5
U5 _0=0 _1=1 _2=2 _3=3 _4=4 _5=5 _6=6 _7=7
_8=8 _9=9 _10=10 _11=11 _12=12 _13=13 _14=14 _15=15
_16=16 _17=17 _18=18 _19=19 _20=20 _21=21 _22=22 _23=23
_24=24 _25=25 _26=26 _27=27 _28=28 _29=29 _30=30 _31=31

}
entropy is U64
cofactor is U16
messages map len=0..MAX24
Expand Down
21 changes: 11 additions & 10 deletions stl/Anchor.MerkleTree.Tapret.vesper
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
AnchorMerkleTreeTapretProof rec
txid bytes len=32 aka=Txid
mpcProof rec -- MerkleTree
mpcProof rec MerkleTree
depth enum {
_0=0 _1=1 _2=2 _3=3 _4=4 _5=5 _6=6 _7=7 _8=8
_9=9 _10=10 _11=11 _12=12 _13=13 _14=14 _15=15 _16=16
_17=17 _18=18 _19=19 _20=20 _21=21 _22=22 _23=23 _24=24
_25=25 _26=26 _27=27 _28=28 _29=29 _30=30 _31=31
} -- U5
U5 _0=0 _1=1 _2=2 _3=3 _4=4 _5=5 _6=6 _7=7
_8=8 _9=9 _10=10 _11=11 _12=12 _13=13 _14=14 _15=15
_16=16 _17=17 _18=18 _19=19 _20=20 _21=21 _22=22 _23=23
_24=24 _25=25 _26=26 _27=27 _28=28 _29=29 _30=30 _31=31

}
entropy is U64
cofactor is U16
messages map len=0..MAX24
Expand All @@ -17,8 +18,8 @@ AnchorMerkleTreeTapretProof rec
value tuple
_ bytes len=32 aka=ProtocolId
_ bytes len=32 aka=Message
dbcProof rec -- TapretProof
pathProof rec -- TapretPathProof
some union option wrapped tag=1 -- TapretNodePartner
rightBranch rec wrapped tag=2 -- TapretRightBranch
dbcProof rec TapretProof
pathProof rec TapretPathProof
some union TapretNodePartner option wrapped tag=1
rightBranch rec TapretRightBranch wrapped tag=2
nonce is U8
40 changes: 20 additions & 20 deletions stl/[email protected]
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
-----BEGIN STRICT TYPE LIB-----
Id: c8Tnib31q1p7szyPukEGDoQzJQ5qJwPCn5uZCHUXzB9#cupid-metro-warning
Id: urn:ubideco:stl:BeAiDVK898mzgHrmWgxHtysDhmffgMEoDwBgNuZo7QeZ#connect-verona-secret
Name: BPCore
Dependencies:
57sPvZcwQaziec3ux249XoCMhziQpKB8Yw99U5oRwfqW#deluxe-safari-random,
DzTvt9gGhPUKD8Dkkjk9PDBhkJ4gtWxXWQjxnmUYLNrs#voyage-kimono-disco,
HX2UBak8vPsTokug1DGMDvTpzns3xUdwZ7QJdyt4qBA9#speed-atlanta-trilogy
Dependency: 7qvjR4HCwJKF3mxE5GqsAaADces5JDRwb8ajAse9mkz3#exhibit-karate-ritual
Dependency: DzTvt9gGhPUKD8Dkkjk9PDBhkJ4gtWxXWQjxnmUYLNrs#voyage-kimono-disco
Dependency: HX2UBak8vPsTokug1DGMDvTpzns3xUdwZ7QJdyt4qBA9#speed-atlanta-trilogy
Checksum-SHA256: 64929409fba4ac73a0e4add2e174504c170ed17008f31180956f05569ceee36c

20~CnZ*pY=Jux=&4zPTb9*IMFYW>~BZ&yS~-fAwW*(Pc?@Ubg}3`1{iZE18?WpZg
20~CnZ*pY=Wv;<0l-(Pe$^)UD5K7r}*s>bq5$WSxcMKAy3WKnC3`1{iZE18?WpZg
|dBFtCMqVsrZe&e(V->r|?y|b&t*2isXxNhAA_oAshyzn}Wc6$lVk7oBr%DNv+($
;q`HHK!gIHa)*%m(-e#9sm3I{@IbYpL6ZUYBGX>?<6X>JGrA>%$n#j0HLDJN5-IK
gM_J7b(p+0MPGk2Gl)y2(Rz1Xgc#bS10xxe^o?x}!PNUwajGr*TW+dUY6G&@nZ7)
Expand All @@ -16,36 +16,36 @@ Mqk=;7%h%D+p%U7S;b1RT)c9`>#Kd;Rz-U=aO9W+B1XOrwWT}OOcT=8d`>?<6$C@
F;S3|*6`1-v+nBdcqJ?FPKcnV2wbY*gGVQf%qwlfK-7{9iX4Q|L-q$GzUMp|h<az
h8d{~gylbAe9D2TWyQW>#f#{Gz8SzLEaTf~c{WkYggkPIjuQHS#3Ua|L6d7%qre2
Ut&TY<W;?3`1{iZE18?WpZg|c?SRpR`-7%<v!(6CSPt8P+`uam~C7&J!(5--hXnL
)^zd;O=WUxY-Ln(Wo0le>@l<|wuPSOOLZ&$Vj#jYr62iSlS>y#`6AYfdEyIAWpZn
5WkPIkV{0&#e&!uvG+Da^2;||fJ!&Dp*8BS%F@mRg<wbPhR<R0Da&L5RV{dFpWHm
RbQ5DGQh1^p2tAX-yWl;qtQ<OqiuZa`rd(@k;(+5pub8}&5WjLNgh9?yTI7S;;e;
>sZfv!yd427@;7veO2zMB=|GYU;*a%*g5NMUnmh0#5^R?l+2>x*OcO&#*^E;5@PQ
)^zd;O=WUxY-Ln(Wo0mxe&!uvG+Da^2;||fJ!&Dp*8BS%F@mRg<wbPhR<R0Da&L5
RV{dFpWHmRbQ5DGQh1^p2tAX-yWl;qtQ<OqiuZa`rd(@k;(+5pub8}&5WjLNgh9?
yTI7S;;e;>sZfv!yd427@;7veO2zMB=|GYU;*a%*g5NMUnmT+QYFd;Umr-dgNEFC
uu*?Wk)@WS(Jw`th(K{eY_63r%HmYiwmgY;R+0h0#5^R?l+2>x*OcO&#*^E;5@PQ
20HKbE5LJk_Il(3r%HmYiwmua&K>D*tNNq^HspzKK^|l-Ci`?%`u0U6ZHVlY`S(f
i`CFq2vl-qWlnEoWdl=mWB~wXSa8^mT+s=T=}Z?`J=~w8Q=GLzSfImTncuED0}GM
@RW%X-8$oVkXm4^&WpZn5WkPIkV{1=va%FT-a&K>D1_K0icxhw;^=uPjBlbC`N(q
zPM@Gr{imSMTSY5T*7C#t%#3&jHqk=;7%h%D+p%U7S;b1RT)c9`>#Kd;Rz-U=aO9
W+B2yJj<P;zf?W&%AiHu4Uze3TxELwRcb-NbKKL`mLiE~wciYB%t)D}^vE>@l<|w
uPSOOLZ&$Vj#jYr62iSlS>y#`6AYfdEy9UVq;KpZ*OJ+M^4XN(CAD)c<TE+K3MFy
W+B2yJj<P;zf?W&&ld!77y98=A@kp`8#)*>u>l8sib^<6L(P5~d1+uy|a}<^FsAN
OIm<>^(0cc+l;rYfEIFVSxJaup#|`s@w=<Vq;KpZ*OJ+M^4XN(CAD)c<TE+K3MFy
S<QDhvu9)kY913xn>ag{96@elXm4^&WpZn5WkPIkV{24laB^jIP;zf?W(ETUba-i
G0`+VYVk7oBr%DNv+($;q`HHK!gIHa)*%m(-e#9sm3ZsHT^UK%K(4i9Ajp1M~R@C
@!4#dQE#lUD;OiKi1RtRlyV^DH$Z)O5LF*foJuzZvri9>m6{oTZGS42tPYA&eRCT
chEu`7izE$lJ0Dz=55=Sy`f{$e1)GNm8+U6V@}N%<nyi+SP*WMX4ba&K>D0S~qxm
@!4#dQE#lUD;OiKi1RtRlyV^DH$Z)O5zuE8pl-5Z+91EHM|O4)SSvKr$N>Em2?3=
*aagRpp9&E@`k{z!7(TI@Y9B6!g4sB24Po?(Fc@vtHNfU4XGWMX4ba&K>D0S~qxm
_HirtB!lh<{Yi-S-!KI0_27BH<@sVme~^s3>!giV`y)3O=WUxY-Lb#Z*OK#aB^jI
P;zf?W(ETUba-iG0`+VYVk7oBr%DNv+($;q`HHK!gIHa)*%m(-e#9sm3ZsHT^UK%
K(4i9Ajp1M~R@C@!4#dQE#lUD;OiKi1RtRlyV^DH$Z)O5LF*foJuzZvri9>m6{oT
ZGS42tPYA&eRCTchEu`7jz(LK3V&vL%&i(~ao9rExlGMgPx_&tqtqVlwo1}@PEWM
K(4i9Ajp1M~R@C@!4#dQE#lUD;OiKi1RtRlyV^DH$Z)O5zuE8pl-5Z+91EHM|O4)
SSvKr$N>Em2?3=*aagRppo(LK3V&vL%&i(~ao9rExlGMgPx_&tqtqVlwo1}@PEWM
X4ba&K>D0Y^^HT+rxDK6vW;JU&?LxLM72H?wDC1Zo}=N}D)4mmEQEV`y)3O=WUxY
-Lb#Z*OK)VQ_L~bWn0{Z)OGq1ax?5WCHbU6JjIwIj2eqliWu}$@z+_xPw?-wb>Rw
7=FYk8VaL=Li5Yl(a@n1+Ku60FILp}Zw|!7cE!MGSxid=WmX7naAQz%Z*OJ-Jux=
&4zPTb9*IMFYW>~BZ&yS~-fAwW*(Pc?@Ubg}h0#5^R?l+2>x*OcO&#*^E;5@PQ20
7=FYk8VaL=Li5Yl(a@n1+Ku60FILp}Zw|!7cE!MGSxid=WmX7naAQz%Z*OJ-Wv;<
0l-(Pe$^)UD5K7r}*s>bq5$WSxcMKAy3WKnCh0#5^R?l+2>x*OcO&#*^E;5@PQ20
HKbE5LJk_Il(2xMYoP;zf?W&sbjADBNH?W>M^%H|xc>sh|Dn*!v8^Ea7rh?dzC2n
-rQZewU~a!qA&Yiwmya%E*taB^jIP;zf?W(ETUba-iG0`+VYVk7oBr%DNv+($;q`
HHK!gIHa)*%m(-e#9sm3ZsHT^UK%K(4i9Ajp1M~R@C@!4#dQE#lUD;OiKi1RtRly
V^DH$Z)O5LF*foJuzZvri9>m6{oTZGS42tPYA&eRCTchEu`7iLR`-7%<v!(6CSPt
V^DH$Z)O5zuE8pl-5Z+91EHM|O4)SSvKr$N>Em2?3=*aagRpoAR`-7%<v!(6CSPt
8P+`uam~C7&J!(5--hXnL)^zd+WMX4ba&K>D0Y^^HT+rxDK6vW;JU&?LxLM72H?w
DC1Zo}=N}D)4mm5KDV`y)3O=WUxY-Ln(Wo1-haB^jIP;zf?W(ETUba-iG0`+VYVk
7oBr%DNv+($;q`HHK!gIHa)*%m(-e#9sm3ZsHT^UK%K(4i9Ajp1M~R@C@!4#dQE#
lUD;OiKi1RtRlyV^DH$Z)O5LF*foJuzZvri9>m6{oTZGS42tPYA&eRCTchEu`7iL
lUD;OiKi1RtRlyV^DH$Z)O5zuE8pl-5Z+91EHM|O4)SSvKr$N>Em2?3=*aagRpoA
R`-7%<v!(6CSPt8P+`uam~C7&J!(5--hXnL)^zd+WMX4ba&K>D0S~qxm_HirtB!l
h<{Yi-S-!KI0_27BH<@sVme~^s3=TqUX>MdwWnpYocu;h51_TCeWprq7WC1R>5GA
>8Wft0d6dj=*oo`t>c$)o5X19O9`rXu=lIsL?cxhw-vE?{96bd-L@NXK=z8qksZ{
Expand Down
Binary file modified stl/[email protected]
Binary file not shown.
14 changes: 7 additions & 7 deletions stl/[email protected]
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{-
Id: urn:ubideco:stl:c8Tnib31q1p7szyPukEGDoQzJQ5qJwPCn5uZCHUXzB9#cupid-metro-warning
Id: urn:ubideco:stl:BeAiDVK898mzgHrmWgxHtysDhmffgMEoDwBgNuZo7QeZ#connect-verona-secret
Name: BPCore
Version: 0.1.0
Description: Bitcoin client-side-validation library
Expand All @@ -11,12 +11,12 @@
@context
typelib BPCore

import CommitVerify#57sPvZcwQaziec3ux249XoCMhziQpKB8Yw99U5oRwfqW#deluxe-safari-random
import CommitVerify#7qvjR4HCwJKF3mxE5GqsAaADces5JDRwb8ajAse9mkz3#exhibit-karate-ritual
use MerkleTree#side-locate-bonus
use MerkleBlock#portal-slogan-mirage
use ProtocolId#gamma-banjo-corona
use Message#shampoo-bishop-morgan
use MerkleHash#culture-metro-modular
use MerkleBlock#miracle-antenna-moral
use MerkleProof#labor-hilton-magenta
use TreeNode#risk-opinion-orca

Expand All @@ -34,14 +34,14 @@ import Bitcoin#HX2UBak8vPsTokug1DGMDvTpzns3xUdwZ7QJdyt4qBA9#speed-atlanta-trilog
use XOnlyPk#evident-finance-promo


@mnemonic(quest-respect-sound)
@mnemonic(promo-byte-ceramic)
data AnchorMerkleBlockOpretProof : txid Bitcoin.Txid#cowboy-diego-betty
, mpcProof CommitVerify.MerkleBlock#portal-slogan-mirage
, mpcProof CommitVerify.MerkleBlock#miracle-antenna-moral
, dbcProof OpretProof

@mnemonic(camera-hostel-perform)
@mnemonic(tarzan-grille-telecom)
data AnchorMerkleBlockTapretProof : txid Bitcoin.Txid#cowboy-diego-betty
, mpcProof CommitVerify.MerkleBlock#portal-slogan-mirage
, mpcProof CommitVerify.MerkleBlock#miracle-antenna-moral
, dbcProof TapretProof

@mnemonic(absent-eric-armada)
Expand Down
6 changes: 3 additions & 3 deletions stl/[email protected]
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
-----BEGIN STRICT TYPE LIB-----
Id: 7rhLkuvqTy2PpvD2zTFT4veffXutWDxjNgJbFAjU8cUC#join-object-wonder
Id: urn:ubideco:stl:7rhLkuvqTy2PpvD2zTFT4veffXutWDxjNgJbFAjU8cUC#join-object-wonder
Name: Bitcoin
Dependencies:
DzTvt9gGhPUKD8Dkkjk9PDBhkJ4gtWxXWQjxnmUYLNrs#voyage-kimono-disco
Dependency: DzTvt9gGhPUKD8Dkkjk9PDBhkJ4gtWxXWQjxnmUYLNrs#voyage-kimono-disco
Checksum-SHA256: 4d5c95b088052dbd373f14a1705a17367bd5818e98c1882e295b60c542ed6575

2SRCdV{d700l@^!MqVsrZe&e(V->r|?y|b&t*2isXxNhAA_oAshyzn}WB~(HbYuY
lVTK~nd#><i0^jF#$$;RqYi_#e2@QaC_fb3SOOy6Z1VV3bY&HN1LTPX_G%!<XX9f
Expand Down
6 changes: 3 additions & 3 deletions stl/Seals.vesper
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@ SecretSeal commitment hasher=SHA256 tagged=urn:lnp-bp:seals:secret#2024-02-03
BlindSealTxPtr serialized

BlindSealTxid rec
method enum opretFirst=0 tapretFirst=1 -- Method
method enum Method opretFirst=0 tapretFirst=1
txid bytes len=32 aka=Txid
vout is U32 aka=Vout
blinding is U64

BlindSealTxPtr rec
method enum opretFirst=0 tapretFirst=1 -- Method
txid union -- TxPtr
method enum Method opretFirst=0 tapretFirst=1
txid union TxPtr
witnessTx is Unit tag=0
txid bytes len=32 wrapped aka=Txid tag=1
vout is U32 aka=Vout
Expand Down
4 changes: 2 additions & 2 deletions stl/[email protected]
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
-----BEGIN STRICT TYPE LIB-----
Id: 9zw1koriNSQRJBdHbXnTqjCdShzASm915rWgnCBgnKJ4#delphi-magnum-flame
Id: urn:ubideco:stl:9zw1koriNSQRJBdHbXnTqjCdShzASm915rWgnCBgnKJ4#delphi-magnum-flame
Name: Tx
Dependencies: ~
Checksum-SHA256: 33f8156cb27f0f0b244711c5a4a81f1997c915dfc48012b17755cbd51d9b8d78

0#tYa01p5MLV0v$Q*?3#0RRX906+i$0000000960|Nj60000O~Z)0mzX>DZ%0RR9
52v2o%aBpdDbOr(hba-iG0i%LK^UK%K(4i9Ajp1M~R@C@!4#dQE#lUD;OiKi1Rs?
Expand Down

0 comments on commit 1339f9f

Please sign in to comment.