From dd2294e7a55897ca7383ac33e496e7b8171f47ef Mon Sep 17 00:00:00 2001 From: mDuo13 Date: Mon, 9 Sep 2019 18:37:06 -0700 Subject: [PATCH] Key derivation clarifications --- content/_img-sources/key-address-rels.uxf | 98 ++++++++++++------ .../accounts/accounts.md | 4 +- .../accounts/cryptographic-keys.md | 52 ++++++++++ .../status-and-debugging-methods/peers.md | 2 +- .../ledger-object-types/accountroot.md | 2 +- img/key-address-rels.png | Bin 23156 -> 28428 bytes 6 files changed, 120 insertions(+), 38 deletions(-) diff --git a/content/_img-sources/key-address-rels.uxf b/content/_img-sources/key-address-rels.uxf index 9dc94dce10..9c2823ed9f 100644 --- a/content/_img-sources/key-address-rels.uxf +++ b/content/_img-sources/key-address-rels.uxf @@ -5,8 +5,8 @@ UMLObject 60 - 60 - 150 + 50 + 110 70 Passphrase @@ -19,33 +19,34 @@ lt=. UMLObject - 350 - 60 - 180 + 320 + 50 + 130 70 - Secret Key + Seed -- - +(16 bytes) Relation - 200 - 80 - 170 - 40 + 160 + 70 + 180 + 50 lt=<. -SHA-512Half - 150.0;20.0;10.0;20.0 +SHA512, keep +first 16 bytes + 160.0;20.0;10.0;20.0 UMLObject - 650 - 60 + 60 + 180 220 70 @@ -58,21 +59,21 @@ SHA-512Half Relation - 520 + 160 80 - 150 - 50 + 600 + 120 lt=<- Public Key Derivation - 130.0;20.0;10.0;20.0 + 10.0;100.0;10.0;70.0;580.0;70.0;580.0;10.0;550.0;10.0 UMLObject 360 - 190 + 270 180 80 @@ -84,25 +85,28 @@ Derivation Relation - 300 - 120 - 440 - 130 + 270 + 180 + 220 + 160 lt=<- - SHA-256 of RIPEMD160 + + + +RIPEMD160 of SHA-256 - 60.0;90.0;10.0;90.0;10.0;40.0;420.0;40.0;420.0;10.0 + 90.0;110.0;40.0;110.0;40.0;40.0;10.0;40.0 UMLObject 690 - 190 + 270 180 80 @@ -116,7 +120,7 @@ Checksum (4 bytes) UMLObject 60 - 190 + 270 190 80 @@ -130,7 +134,7 @@ Checksum (4 bytes) Relation 240 - 230 + 310 140 30 @@ -141,7 +145,7 @@ Checksum (4 bytes) UMLObject 400 - 320 + 400 100 70 @@ -154,7 +158,7 @@ Checksum (4 bytes) Relation 490 - 230 + 310 120 140 @@ -165,7 +169,7 @@ Checksum (4 bytes) Relation 530 - 210 + 290 80 30 @@ -176,7 +180,7 @@ Checksum (4 bytes) UMLState 590 - 210 + 290 100 40 @@ -188,7 +192,7 @@ type=sender Relation 420 - 260 + 340 130 80 @@ -196,4 +200,30 @@ type=sender SHA-256 twice 10.0;60.0;10.0;10.0 + + UMLObject + + 600 + 50 + 110 + 70 + + Private Key +-- +(32 bytes) + + + + Relation + + 440 + 70 + 180 + 50 + + lt=<- +Private Key +Derivation + 160.0;20.0;10.0;20.0 + diff --git a/content/concepts/payment-system-basics/accounts/accounts.md b/content/concepts/payment-system-basics/accounts/accounts.md index 8a0dec754e..e2a31ebfe4 100644 --- a/content/concepts/payment-system-basics/accounts/accounts.md +++ b/content/concepts/payment-system-basics/accounts/accounts.md @@ -93,9 +93,9 @@ XRP Ledger addresses are encoded using [base58](https://en.wikipedia.org/wiki/Ba The following diagram shows the relationship between keys and addresses: -![Passphrase → Secret Key → Public Key + Type Prefix → Account ID + Checksum → Address](img/key-address-rels.png) +![Passphrase → Seed → Private Key → Public Key + Type Prefix → Account ID + Checksum → Address](img/key-address-rels.png) -The formula for calculating an XRP Ledger address is as follows. For the complete example code, see [`encode_address.js`](https://github.com/ripple/ripple-dev-portal/blob/master/content/_code-samples/address_encoding/encode_address.js). +The formula for calculating an XRP Ledger address from a public key is as follows. For the complete example code, see [`encode_address.js`](https://github.com/ripple/ripple-dev-portal/blob/master/content/_code-samples/address_encoding/encode_address.js). For the process of deriving a public key from a passphrase or seed value, see [Key Derivation](cryptographic-keys.html#key-derivation). 1. Import required algorithms: SHA-256, RIPEMD160, and base58. Set the dictionary for base58. diff --git a/content/concepts/payment-system-basics/accounts/cryptographic-keys.md b/content/concepts/payment-system-basics/accounts/cryptographic-keys.md index a511e2c38d..3855b77255 100644 --- a/content/concepts/payment-system-basics/accounts/cryptographic-keys.md +++ b/content/concepts/payment-system-basics/accounts/cryptographic-keys.md @@ -116,6 +116,58 @@ The supported types of key pairs can be used interchangeably throughout the XRP In the future, it is likely that the XRP Ledger will need new cryptographic signing algorithms to keep up with developments in cryptography. For example, if quantum computers using [Shor's algorithm](https://en.wikipedia.org/wiki/Shor's_algorithm) (or something similar) will soon be practical enough to break elliptic curve cryptography, XRP Ledger developers can add a cryptographic signing algorithm that isn't easily broken. As of mid 2019, there's no clear first choice "quantum-resistant" signing algorithm and quantum computers are not yet practical enough to be a threat, so there are no immediate plans to add any specific algorithms. +## Key Derivation + +The process of deriving a key pair depends on the signing algorithm. In all cases, keys are generated from a _seed_ value that is 16 bytes (128 bits) in length. The seed value can be completely random (recommended) or it can be derived from a specific passphrase by taking the [SHA-512 hash][Hash] and keeping the first 16 bytes (similar to [SHA-512Half][], but keeping only 128 bits instead of 256 bits of the output). + +### Ed25519 Key Derivation +[[Source]](https://github.com/ripple/rippled/blob/fc7ecd672a3b9748bfea52ce65996e324553c05f/src/ripple/protocol/impl/SecretKey.cpp#L203 "Source") + +All 32-byte numbers are valid Ed25519 private keys, so Ed25519 private key derivation is a single step: + +- Calculate the [SHA-512Half][] of the seed value. The result is the 32-byte private key. + +To calculate an Ed25519 public key, use the standard public key derivation for [Ed25519](https://ed25519.cr.yp.to/software.html) to derive the public key. (As always with cryptographic algorithms, use a standard, well-known, publicly-audited implementation whenever possible. For example, [OpenSSL](https://www.openssl.org/) has implementations of core Ed25519 and secp256k1 functions.) + +### secp256k1 Key Derivation + +Key derivation for secp256k1 XRP Ledger keys involves more steps than Ed25519 key derivation for a couple reasons: + +- Not all 32-byte numbers are valid secp256k1 private keys. +- The XRP Ledger's reference implementation has an unused, incomplete framework for deriving a family of key pairs from a single seed value. + +The steps to derive a valid secp256k1 private key from a seed value are as follows: + +1. Calculate a "root key pair" from the seed value, as follows: + + 1. Concatenate the following in order, for a total of 20 bytes: + - The seed value (16 bytes) + - A "root sequence" value (4 bytes), as a big-endian unsigned integer. Use 0 as a starting value for the root sequence. + + 2. Calculate the [SHA-512Half][] of the concatenated (seed+root sequence) value. + + 3. If the result is not a valid secp265k1 private key, increment the root sequence by 1 and start over. [[Source]](https://github.com/ripple/rippled/blob/fc7ecd672a3b9748bfea52ce65996e324553c05f/src/ripple/crypto/impl/GenerateDeterministicKey.cpp#L103 "Source") + + A valid secp256k1 key must not be zero, and it must be numerically less than the _secp256k1 modulus_ (also called the "group order"). The secp256k1 modulus is the constant value `0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141`. + + 4. With a valid secp256k1 private key, use the standard ECDSA public key derivation with the secp256k1 curve to derive the root public key. (As always with cryptographic algorithms, use a standard, well-known, publicly-audited implementation whenever possible. For example, [OpenSSL](https://www.openssl.org/) has implementations of core Ed25519 and secp256k1 functions.) + +2. Derive an intermediate key pair from the root public key you calculated in step 1, as follows: + + 1. Concatenate the following in order, for a total of 40 bytes: + - The root public key (32 bytes) + - `0x00000000000000000000000000000000` (4 bytes of zeroes). (This value was intended to be used to derive different members of the same family, but in practice only the value 0 is used.) + - A "key sequence" value (4 bytes), as a big-endian unsigned integer. Use 0 as a starting value for the key sequence. + + 2. Calculate the [SHA-512Half][] of the concatenated value. + + 3. If the result is not a valid secp265k1 private key, increment the key sequence by 1 and restart deriving the account's intermediate key pair. + + 4. With a valid secp256k1 private key, use the standard ECDSA public key derivation with the secp256k1 curve to derive the intermediate public key. (As always with cryptographic algorithms, use a standard, well-known, publicly-audited implementation whenever possible. For example, [OpenSSL](https://www.openssl.org/) has implementations of core Ed25519 and secp256k1 functions.) + +3. Calculate the sum of the root public key and the intermediate public key. The result is the master public key. ***TODO: which private key do you use?*** + + ## See Also - **Concepts:** diff --git a/content/references/rippled-api/admin-rippled-methods/status-and-debugging-methods/peers.md b/content/references/rippled-api/admin-rippled-methods/status-and-debugging-methods/peers.md index 06cca0c621..575b0ac5b5 100644 --- a/content/references/rippled-api/admin-rippled-methods/status-and-debugging-methods/peers.md +++ b/content/references/rippled-api/admin-rippled-methods/status-and-debugging-methods/peers.md @@ -377,7 +377,7 @@ The response follows the [standard format][], with a successful result containin | `cluster` | Object | Summary of other `rippled` servers in the same cluster, if [configured as a cluster](clustering.html). [New in: rippled 0.30.1][] | | `peers` | Array | Array of peer objects. | -Each field of the `cluster` object is the public key of that `rippled` server's identifying keypair. (This is the same value that that server returns as `pubkey_node` in the [server_info method][].) The contents of that field are an object with the following fields: +Each field of the `cluster` object is the public key of that `rippled` server's identifying key pair. (This is the same value that that server returns as `pubkey_node` in the [server_info method][].) The contents of that field are an object with the following fields: | `Field` | Type | Description | |:--------|:-------|:----------------------------------------------------------| diff --git a/content/references/rippled-api/ledger-data-formats/ledger-object-types/accountroot.md b/content/references/rippled-api/ledger-data-formats/ledger-object-types/accountroot.md index 3d9d765bc5..5c286613e8 100644 --- a/content/references/rippled-api/ledger-data-formats/ledger-object-types/accountroot.md +++ b/content/references/rippled-api/ledger-data-formats/ledger-object-types/accountroot.md @@ -42,7 +42,7 @@ The `AccountRoot` object has the following fields: | `Domain` | String | VariableLength | _(Optional)_ A domain associated with this account. In JSON, this is the hexadecimal for the ASCII representation of the domain. | | `EmailHash` | String | Hash128 | _(Optional)_ The md5 hash of an email address. Clients can use this to look up an avatar through services such as [Gravatar](https://en.gravatar.com/). | | `MessageKey` | String | VariableLength | _(Optional)_ A public key that may be used to send encrypted messages to this account. In JSON, uses hexadecimal. No more than 33 bytes. | -| `RegularKey` | String | AccountID | _(Optional)_ The address of a keypair that can be used to sign transactions for this account instead of the master key. Use a [SetRegularKey transaction][] to change this value. | +| `RegularKey` | String | AccountID | _(Optional)_ The address of a [key pair](cryptographic-keys.html) that can be used to sign transactions for this account instead of the master key. Use a [SetRegularKey transaction][] to change this value. | | `TickSize` | Number | UInt8 | _(Optional)_ How many significant digits to use for exchange rates of Offers involving currencies issued by this address. Valid values are `3` to `15`, inclusive. _(Requires the [TickSize amendment][].)_ | | `TransferRate` | Number | UInt32 | _(Optional)_ A [transfer fee](https://ripple.com/knowledge_center/transfer-fees/) to charge other users for sending currency issued by this account to each other. | | `WalletLocator` | String | Hash256 | _(Optional)_ **DEPRECATED**. Do not use. | diff --git a/img/key-address-rels.png b/img/key-address-rels.png index 2312d9cacfc101f2a3f9271f61cf64bc0f45bd01..53e4352e27e32ce3589a9f4c779abe5df23e2fc1 100644 GIT binary patch literal 28428 zcmbrm2{_g3`#!2v%9w;Ggfb7AGqlX}JV%CIre#WGNGvo+=6O!$43T1yS!puQLslUn zLso>AVHy6G?`Go4}s8WzJk`fUSQK+ja z84wW>!+(c5jvt0s^j=eH5E0$%S67lZx`SD0@VRQ_Ft*DQ=IPiM&Zf-%!$9=Zn(+Op z(5rDL-E+?*$}nE|{E{{2>V5upMq0~jMtpViH{^3ef2ez~hN_fZ%)0+7_I+7c?@`T@ zbI0#(pc=o9Hw4Z|ip*RhC+>KI|3fl-D^u9v*QV6;&XeTR@bN@MSu{(h%J;q_!jSC0 zg8F~|V-I5gZ?MFB|NejZ5y`Umr$IP%H@>%RiM+wjdz-Fm2Z$LdHMptCk;q+9l0J+i z%krwEk}OPoN|_p@aD?k{kb;uk>Tdz8GV`=1x6h*m3z zl;Qm?Dm~1Ykai=YtW0HUqSI{U)Sjd;;(vaU!xPELlIa~G3V!Tzqz7@HXsxZ6a2YvP zHn=X8_UWvXhr)=0kHTDex!%f3#!l@hv$KeZh^vds4I7(m6f$Sl0j{5QGBz^nofC`A zudg+ubv^}D{RO%XriZXt?D*ZErPhJliDfID6656OF84GyHxCc{jMjPuZv751V(YJS z?0=@Lq;y$Is_(_AQ>W&C{xrMm>FH@}n^#d$@!-L`Cz7|7(zQ}9WjhbQU}a@xJg23o z`0iumS(LxOmbNy2buK%gUX+jeOiRs`fA-wu&S*@CSXr8Q_a93@gjox$j8+OG zZyg%)9x5@*@p5uRx)ifp7qETT$HylL;k|J6 zDZ;TYugI`qSz9II46D~0ZDuVmugd&tEs&g9~8ykdvov`nE z(z<)GBF{20Daqijg2G|l%qxDl6d{{+4l+8vlgzdilpGQg$tIVa-uLvxxPHfCM@wAf zzaj{`kx1_`?8ZZtx_9D}<)sE2{MHym>`$LQJpc;@w{)&=da5xn29_pP#C2 zUMoMeiP!3=+GH{z*WeEWdJNY!n; zv2&-vW14ikU0bsyOa1|!fCX24p?`exl-3B=7F||DVrXXOc=KlC^>@bxF059x9NFK= z@~T6PKXMH4ut%{A3#VvkczJkUSk}>O?_4O4H5Rmp>Al!*4 z?YTQUTaxL0@;`?8u+G2U>fJRkh^wshGB-DObaa%LKXmbhS;aA0vTYX<`{k+D{%6{X z)I?W!l;&58W>m!w_v~O)ZEbDW@%Z$Vl-1c@_KO!k^!3H14zUDoy@Fl4vyD$rPxtfn zMQ#25^ykkX9-5kW%F4=-EV5(0y|D}Y2*lG5SM{y&X?~Yn;;~;|S7>ux5f{h(p8QmJ z^~?(lz0``?%fAj8s};XM;c=D?cg6DM@Ny*1s`E{Uvw|^exG!$q=@Mnrxnm<04y7d} zKe{u=dwPPZh@={EmEuy&NoJ&4b3r)AjF&H825fIyHu~2T7xT!9oWoCqv@RGzi0UIVy^D&9gv7;nKFRK6dlYE}xfdzJ3ikH) zTGn}c-M)>V&5iyT!9a{9mdZzwGn1J}Qpz@AUf-V4;pF6`i%b-9|Nh=*9A(PN^gPqr z(6+}nVN-u|gZkH4L!D-_z$$jR({*vIAu1}$_LYC-((L z((+A>jILh2dQRF~tNNOLNkDMlAmUH%Y6ZKNjt<9bO9*1`74z zi_enBq)82*Mw_1*wUlUTH3!kTDPa4ljBj(lop)S(ykcl@aPX?+`SWrQZl1Iu4Z?Xz z*~Fx_6v*WAnL>H)cqdeDlfuzH=3oRqay_Sy_=_nhdWP(jd!QiVs{n98Zs~`)U2JP zllSrx`(p`<9nB*9tQ`NVZt=AChk1HB`HCF4V|jvX8@Vr1KKaIst3!B>kB?tjUPdwn z6frA`^qjyFo6G;4<`IcC)W)Vu-nReiuk#s?#%jGZ3sDb9s7y8@uf4u`k@hcCsv5rV zlZ^Mm=Umn3Sz8GyDNI+_uZeddJ&jct#KZ>QyveGsx8QhFJ-}A1@a);M>Q>&#b15pt z))-YKWo7*rgq!s4-GkuoanXY;%*+Ufu5%knY=IATGZ7b4SJu`9d3c;WI0rIt^Mm2V z{XN-=?#jo$IkCLJiQU^$((yt^tK4OL*SI;`Wz%AB$=>XRfKukN=o?JD0UWN z_f~c4oQsC4ySvacPc^ZNh)lU`(Rib}ezoaq_uAN9+8y)mW~1`v2B>2n{vNJue?RY_ zeV&W!vF=HIS&gQp<3$^gmtXoUjx8K}(V?TEq0!ONp{1pT!+r_LW{|^6F`8$d1c z>vjHD#;v%{s{hSG5M70tUfZ4dEbVg0kR_2;R%rlb5IBPpW(#g3616Kisuf?{xeige_-xh8(; z?g>kkX(gRtMpOLF@kVV$%C(w{nn@9iVj8}?f>!mnZr{H4>PGM;=C$XXfmC2;Ypedu zy5qOJehA2h6Q@s7aO9L*c0Q4eUwo*7G&eFg51Syx3@cy_B_oXpH#@vvjkYsY9V5`M z)*EH6V{gxq7~b}U8}jv2cw1Ol*pnwum}Tx{{kihms`|*pQ`xO0MZ39P`G+);gT09P zS!MdeMZ^Y;#i|b`RNhnPgIJLU0QwKsVZUK0}5Y9M@vgfhfA-8xEx{9#?OlS>}+jpjR)@H z$07C!wN^9#un049VNm#r>RCWr>3MVeLKIlI1by4Nz!BL&(GmjPOj|?pRw%I8pCpU zb1MBcZIXJIk#f3UhCkQZra3*@oW~*m6j~^mHX9fi++CfOpX{%8pX|z%wKg&N_!L|5 z^5y!*OeTyPQm2L_OR4(L{*((Mx57GfAA}bAYkY!?HIhInEGs4wZ!rQ;Y2`;}8`WRg znZY>6XDEJHIz2xQ$2u)`W$F94L&!|h!sKkLpk2*^3J9>A))U-bUS0?Uf)9O9LF!mY z+w8GsoumuG2*lWj55ad|$v-%zAJXn~hKY%Zfk9nEo>`8wf2-B5NR6~@bgjzuOWys8 z*KRb4sV&@PsO#6Sx9Kj!RijPT0XM+LyL{vQafs%^9&Mx^o{c&xDvxG|E(J1=z?ncl zesr!1`DcDmw7H19fbHC6x3T)Usj2s66cRpcJXjtco-pBuJX91fj9AkCBy0k5DbUH# zNaYqmvf^w*A_7M=FvH7^d8B{rcHKAP29qQi_~wJ zMA`C1b^QxR_17{Wg{kK2EM0$+S~R5_xY-ZLU>q}^li1R|{D5xL%wl3z4Q&gDk{WY( z_9bRGu9o)Pxek`Wrn`TNm!gi%1n$fPa&1EaM>=xmoG?apl+>4*Y^DA9@#BB-_EQF5 zS5sFk5-~vNz=y@+MwDxxe@oXdD)gG2XI1$}1^jSwSpN_|h_;681uiT8bnh>tC$*YoWC`EmlKpkP^& zL@y-nFyX~zGy%b7@QgBvcGcqg<49f5R zahgb=OvG@qsLSV}AOk-W^V;YrX>1I@pdDAkXRirZ)(+gIrub86Gsx!9_2l=TKlwD# zCj3g*A8HmSL7;zDL7(`Wng!v%{+5Kr^XE_`V+&Mm`Sv%QVrKZs;|Gq(3rKe$^F~#Q zA80rJ!Nk7IKTStxK$F##$-`WktQbQ1dvMkk!N%4MmEG7_z*I|Y^BR#?L{eX|>mdvY z)>)s1wlQd8e0Rr3ODh8K`m0w$ev@^#9+ha3Q%=tw%OMgVqZi1ddvWfKaz2jRmYw_f znwCa!Vr+@=xVx&V&d7(`1`mYf8tI*Dg3+i?#k7Ubdd=F}1)KbF3nM02Qe|p^*EdHs zn7hZy&$lgo|9+$R)nX(57Zg!k&wUm?XK&TJNdKrYxo_q7N!cYy3PnEjiShWEIlai~i9J-n3@3*zJ6-En-if;W#ce_K!B<&qB6u3NffWoJVsc>R%$%&fJximHyi14hx@Owe<>}Wn>h; z`E_=3(#FXN14SokGE@yZK$nc=TKlxb_t$;p8`0Z04T(W9-Z zoHr>vC-Mp{F|kIP*Y(^BW!}ChDq=MpZwd@lb>i+p^q6CYi<65yt?{0jYh!-VK5_$# zk9D@qqQ$Q_KZLsO(Zh#@3y+Lc-X+bGiB`lU`ILlx487cmy(VVU{qzbmGcyz^ITGP$ zD^sqBTilrw0RaKcBfpk?UkHh6&SHtEQVE&0EkS!TL2q!ax7HA;+Vjc-1xj|JkRzqM8U zPV24j??V^d9g1R>+e#HPKK~&dS^85d?~GZrYTnyZ;%g?`T9ezf+=8VZEY=U+~nCc%|i{0_x3b1hbPQG8mPaM^(q)$Z!=ip<|<%jW+rMt z$t1Pfm#^tMLQBeS(dJP7>eX+kyH%o@UG43MU|UsJUru$v=jHtM@%?)}TzU7kDi?Pz zFS~b5m%5)nf9`m)v!&(a4_QAvOARGcN}CUl(?v`yvtwqCd)0_@Sp$c)vT~>1XEk64 zR042+hOKX-vMZ8pK1H2qQjpB6@6fg?f~oy!9(E2Ma#n5QpN4{8E3ioUcqW!cfir&K zYN4Lg-n62iz!XDAe<+`z=QQ$GWOU9)%33k{t?%r zM~{y2xJyV#@Z9w9oTwbrDMTgs<@qcd8x4>vM`Tr0{*U4XLV|;T2TI)h zinOs|7fVrBetThaZBciSLr_rn%!)zE%!0lSg2MX9v?MkrqRF}`AYsK{tn^6DfHd~D zheuplPL4g7Q{LR%+|R(Qmc>w5m(gOf2*ZC$H9&jZFfJ~R z%T3Ut`h11%6<0VpL|DUQ@6wrhQ&R@f=*3^7b^aP5 zTC|D72xXfr-ub#Jmyz!i6L0OMTSF4)D=EEh48M-VReH0AnYRJ@6R@b(Gci&5_#`gw z1`^rA5^hoFT`JX8(8PZfLjs83+-gh2p(~Fylkoyo)j%U=7-5%n7Q;FC@0=iBrTrLDZe zb>1SIV8PqOQ;xEA-q`u^CRsDee5kQMbr_*(rwrCAqXQNp#}@M7W_us#AUAFwH84i2 zW7|7AM8(CQmHd#nKCRdmZXP1_>ZkN0T&Ovz+2~_xb{7|yLe1=)35mBSHYajal=Ayy z%}LQzvxPYQ5H;83=Vgtg6cn_U5A+$d<#=*JmY)uiE3wf?$+I%`23@e9A1E3a82$Pc zu{q0*QJR12yWNL?(^5lE)8|3ftMLi*wb8h#w%J~}dVqA`!nLc+e@a6bPpUX(>^$&Xcgkp2*0Gi9*WpuCK38{rIu7gI{!acW3LB=k42$qP5JHu_ZQI z369HVK`~(TNzTNq7N7L00y-@y%E=mvLO-dPhtWE6z(EL{7EbIvlE-%UxW4SkQ2*H@ ziJ#7^pYBQ!g+1R$D5-?WZGe?+a3%~d9OHw>xw5n8jtAf) zx9ehCc}4SKHwPhoynkcvcA?hNtwl~w66=; z9l<*He=mFf{I&+!eM{?()c-Z%+ehl*ovA(g<`!qZ}d~$N~8X})KEAuEp#dwH2 zWI2q8JV8cAgJ}I!?X$={SOAr?Nw1OUq3QjJ=A`0`O-yuBg@Y;I3=WD(N!j0j^vn&Hm?mw+8>kVegpH|+v;@ZEfPf(B~9kCo8~)jc%`^W_WYg$o12!@SO! zOSfTrXlR6GW@e_Qn*H_Hw_q}Q+bCOrqn5RvBQ>`na~0GuSXm-DX^iS*XRX&yAi4m<%>aF+!%>E6PZlf~)X9)CHaAa; zj~B7|NM6LQen1q{3z%0rB{nq$dV71@*5 zOogk_Ij;2e8E|9kKs+hE1%ekx^wfV5zPE4RcD$XdLQX*eLeZ?Xo10seC?{t~9~l|h z+-*6zpaI2@zjq)OZ!O^~$%Z`(e4QTtGp)Q>C82~sD+B~IN~tcd|F(&1YDD4tNRqn5 zn|xQE4LtHJ1o#T#3K}EWv~^$jV6;K@NNY8<7C@^TO@|I05|;3VG@(>npjX>k=R7PR z7Ci-ww5`X^&JM^T{wsh+)Lg5*ehyhR-2L$JBLLmgM@bJhcxQhjEw2g4Uehx(vVl8W z@w$lYLn^)+B>XoFrPjUVi@2F=V?a!>4%o0WGaCUkXZy_aWjDkPViL-Q(K?Abzx0Fz zTUXbNq$Cs2cl7jL0;m;p9$KQ%{7>TZ@ZUrK;b;x>0W}i%ETH@#MP9v{qKAiD|1p|H zm&3uqfu4n>+d;qO$gPdle%*$KhSqKZDq?vP+-~vLUs;)%}U8Q1dj8)F@$eNNfgD=RNuBv1mWZ_dzlX7jva)N45o?p5l{!m?@UH^ zBk(0JUcA66W3jKtpMruy2seAt2XM<(bp7V$=6@Dy#-^sPf5$#1ylHP7a?g=_niMdp{9+XcYeFU3u~52YDLtyykfLT!3_ zyZ4Tb?UcSA+k_Hh=UzQBJTP#Efnggq&N4>zY}^dfr?qO5PA$WXroq9!4(WWB&aS=1Zy^{a&wwMyg}*db@m^fZl)jdi@H63 zr-^TV_l|^$S&K!$x>1Y&{(DVd#by3-MQ-eKh*Ym${TJ5v*Ln$R`32XbM~?zS0J;x^ zW=Y@Wyn0+LcNp4jb9HV@A$Rr??4W;UGTPvmtUCv}MN~p!{N;7U+m+Fep(Kn40XaM* zgoJ@PU*^tI5M~(8&IqaL3ybW)8eFV%SE`7ruiF9#K`Y+K0Y>Y%+cKo+{cM@VfKjyv z(3^`!qnWSVC1()MD=rQzjoCZ%+H?8&`7l1veXoL!C51^&O?7l}Sy)``c54O^8#6L; zk%Pm;$Oxc3KZs$4C|eJCdHFUPrPGmyQnQ8S6%`O9OvgYDXYM3F9^Yjhb%zso?Tcd5e_2z=UBqQ{tr-qWD(xW@cYRWeut(yu)$#aov}2H zM$CjrK!ho9NJvg@T5jXbF%9N%CPW}YR7~0PtYo3?cEG-pa2w+*Ljk)Vxc$>Q)|BvP zLAW`g*KXsurKOWrOEiw-AS$C!C}qqMAgdARx{h8{?37MAFa zy=#LD=B?nm5Vp>9?o{Ys>gp#vAb7!jZKOQf^z9ScZMG*Hj;(wZ;YGN@q3iTpYIw*F zqR5`}w#NxC!spR=zl}ym?*Mhosz`VVDAt!+8B&R8L1E!jW_zE*G}xF-)FafB2R{W3 z^&zIROj_F86*-XE;<*Y0gVW!*D+_hT4p0NU5`?>+K*$L2g$dE8+mE{dWe#2<*#~TJ zK7&Y4zMOrn~o{nj9XJ%5C`U{)_t z&B~fxUS4jAj*hbZ{POzNc!fhZP!XM(vQ639hs4h8-D5dCIt!&$^`9o3${Z9U%L(^? zwfkR$(*UO|GpRCK$miEr2wVLjU_vOfZhBgvn{w$oFs>H(+1pA=4|8*K8yZjw3JNGx zLpkn*tc0j&US1yH{nXUdqsNX}Ro{~Tq2|3fHVTO}L)vFq8NIP@y=ghR@4RX2BXEMB zrn@q^+XOxJsWsDBvn%rlRk;Kc_xH^3L!v49=ZGd{fR1b&^TTFHdh_@AuaYD7jF>? z)Dc@FkmoAwJDm*hhlzp1L!`fC+YIr~tf&&O|Wj$?do&Sb#X-sBjSy!w~z*fps z8F*q=@8wr?f(FA~$;#y9;o)Ir#axO5hWYQ^s50{Z7iXaj2kZ}4wm%0~di7OvdpobJ z?C!?OOs4N?@&UF zj*i;c*t~0Qeu$x`r4<^K0;IF zx_r7IBGTW}vxKR1-oN#rdh`AI^$T(WVCbJpl?=3};BOC*8pM=$Tx5hqMhLyReDE@S z*YjUN<$O;zCgSgC@Xx9EzXp-a#)$HRO6<$pnSYhq0$Sw)O_L1_NKgFvUxo}QoZIP3%_>wb z{~7%FQKcG67%JKIZx3#c)=FN!tTzUEuVsd{6teiuHh;_@WY^$uQc}`F3rwHq-ckhx zIFEfN_|5H&d^V^V?Q8`k`mMrh8du;4;EOLM&`;D zNd6-w%6WWw9Msg*0Pk@)+=&w>0AwUI0szw}DlMIM?vnx}pCN1)wsiMuKmcgdNaW{g z_uS~{=%OOWOa#in&~U?KDh=uY^vjn^fKOnoP*br=5iN6?U(nL83GFcL$w^2!Eh{T4 zB2w|@%^MJWTDAnJ#l*y*5GJ@Z4DfXP=2PFl8yFj3EbD@D?-!=>=RIN)r9^o%JV>oS zuvm(NTh$4a?e~4Qe|ow-dC>ZOLNI0GLh(P*(ALz2w=Wqah?j$5;o+^XTO3apzrdB6 zSGJ9h%feafbX`MGP!QPd@meq5{P8*;K_MX_ppiX^;yJYM?ryJbG#R9; zp^mY z>IT3M99REU0kI;KXJJB@py)yVu%@wS3dpd$!){G|b@#6F!TmwPdoO(=hD!oiZ7%zsV% z?kciP3v)q0Kxfru9GC(idAc)Y%gTkhoLRP2G`ic`Ks(<%hxU4)H$q_!ilYDT5A^eb zH`>_hAA3P1AhitDvGU|J7qD{&arn)mO&A)MH(6YWV0r9$^CoD=?zJH3S}pNl8dZza z$wZVcQ#$JD#pvOU2%{$e(eAeBV{KakT~N}3<8IcWxTB9=(5mP9(ni(lARGgzBQAc) z)rOs00Gvis`@47VKpDF%edHjCo5u>-e2fthbEf8QFEOjgTP+OS-Ptdl6V@T57Y-oA z?Ir-G^E4%kM&W9}jR4lYSY_@q@qJ}@L)*6TKL3sAGsU}gkMr^_cpz}+vrdCQcIy}# z%G9e@&sd|~Csh#L$&I`+GG9M@P@XN*c4Db({bC>QyLX!9Li!qCGdd2jO{Ztuns1GR z$qk%KyyD{CfU{&`PXiGxxn=F0?)B~wg*NlpfeTaPYa_}J#I@NtReh0XDmF>7

lpnjgq5_A3V{#j0ha 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 literal 23156 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