From 940ba0a94bcc43ef69cff29635362939e57941ed Mon Sep 17 00:00:00 2001 From: Max Timkovich Date: Fri, 27 Dec 2024 12:32:43 -0800 Subject: [PATCH 1/6] Create test MLDSA key pairs. --- rom/dev/Makefile | 3 ++- rom/dev/tools/keys.toml | 23 +++++++++++------- .../tools/mldsa_keys/own-mldsa-priv-key.bin | Bin 0 -> 4896 bytes .../tools/mldsa_keys/own-mldsa-pub-key.bin | Bin 0 -> 2592 bytes .../tools/mldsa_keys/vnd-mldsa-priv-key-0.bin | Bin 0 -> 4896 bytes .../tools/mldsa_keys/vnd-mldsa-priv-key-1.bin | Bin 0 -> 4896 bytes .../tools/mldsa_keys/vnd-mldsa-priv-key-2.bin | Bin 0 -> 4896 bytes .../tools/mldsa_keys/vnd-mldsa-priv-key-3.bin | Bin 0 -> 4896 bytes .../tools/mldsa_keys/vnd-mldsa-pub-key-0.bin | Bin 0 -> 2592 bytes .../tools/mldsa_keys/vnd-mldsa-pub-key-1.bin | Bin 0 -> 2592 bytes .../tools/mldsa_keys/vnd-mldsa-pub-key-2.bin | Bin 0 -> 2592 bytes .../tools/mldsa_keys/vnd-mldsa-pub-key-3.bin | Bin 0 -> 2592 bytes rom/dev/tools/scripts/gen_test_certs.sh | 8 ++++++ 13 files changed, 24 insertions(+), 10 deletions(-) create mode 100644 rom/dev/tools/mldsa_keys/own-mldsa-priv-key.bin create mode 100644 rom/dev/tools/mldsa_keys/own-mldsa-pub-key.bin create mode 100644 rom/dev/tools/mldsa_keys/vnd-mldsa-priv-key-0.bin create mode 100644 rom/dev/tools/mldsa_keys/vnd-mldsa-priv-key-1.bin create mode 100644 rom/dev/tools/mldsa_keys/vnd-mldsa-priv-key-2.bin create mode 100644 rom/dev/tools/mldsa_keys/vnd-mldsa-priv-key-3.bin create mode 100644 rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-0.bin create mode 100644 rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-1.bin create mode 100644 rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-2.bin create mode 100644 rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-3.bin diff --git a/rom/dev/Makefile b/rom/dev/Makefile index 9294ddfca3..b2505b1938 100644 --- a/rom/dev/Makefile +++ b/rom/dev/Makefile @@ -16,6 +16,7 @@ TARGET_DIR=../../target/riscv32imc-unknown-none-elf/firmware CURRENT_DIR = $(shell pwd) GIT_REV = $(shell git rev-parse HEAD) EXTRA_CARGO_CONFIG = target.'cfg(all())'.rustflags = [\"-Dwarnings\"] +PQC_KEY_TYPE ?= 2 default: build @@ -68,7 +69,7 @@ build-fw-image: gen-certs build-test-fmc build-test-rt --manifest-path ../../image/app/Cargo.toml \ -- \ create \ - --pqc-key-type 1 \ + --pqc-key-type $(PQC_KEY_TYPE) \ --key-config $(TARGET_DIR)/keys.toml \ --ecc-pk-idx 1 \ --pqc-pk-idx 3 \ diff --git a/rom/dev/tools/keys.toml b/rom/dev/tools/keys.toml index b69dbe6274..901b34366d 100644 --- a/rom/dev/tools/keys.toml +++ b/rom/dev/tools/keys.toml @@ -41,10 +41,6 @@ lms_pub_keys = [ "vnd-lms-pub-key-2.pem", "vnd-lms-pub-key-3.pem", ] - -# [TODO][CAP2] Add MLDSA key files. -mldsa_pub_keys = [] - ecc_priv_keys = [ "vnd-priv-key-0.pem", "vnd-priv-key-1.pem", @@ -85,14 +81,23 @@ lms_priv_keys = [ "vnd-lms-priv-key-2.pem", "vnd-lms-priv-key-3.pem", ] - -mldsa_priv_keys = [] +mldsa_pub_keys = [ + "vnd-mldsa-pub-key-0.bin", + "vnd-mldsa-pub-key-1.bin", + "vnd-mldsa-pub-key-2.bin", + "vnd-mldsa-pub-key-3.bin", +] +mldsa_priv_keys = [ + "vnd-mldsa-priv-key-0.bin", + "vnd-mldsa-priv-key-1.bin", + "vnd-mldsa-priv-key-2.bin", + "vnd-mldsa-priv-key-3.bin", +] [owner] ecc_pub_key = "own-pub-key.pem" ecc_priv_key = "own-priv-key.pem" lms_pub_key = "own-lms-pub-key.pem" lms_priv_key = "own-lms-priv-key.pem" -mldsa_pub_key = "" -mldsa_priv_key = "" - +mldsa_pub_key = "own-mldsa-pub-key.bin" +mldsa_priv_key = "own-mldsa-priv-key.bin" diff --git a/rom/dev/tools/mldsa_keys/own-mldsa-priv-key.bin b/rom/dev/tools/mldsa_keys/own-mldsa-priv-key.bin new file mode 100644 index 0000000000000000000000000000000000000000..d1d1f58ea6b57f2e4b161e88fb8aca0b416de7bb GIT binary patch literal 4896 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 Sy=ZNrW>aU=W|;|jHfC@1&X0ru literal 0 HcmV?d00001 diff --git a/rom/dev/tools/mldsa_keys/own-mldsa-pub-key.bin b/rom/dev/tools/mldsa_keys/own-mldsa-pub-key.bin new file mode 100644 index 0000000000000000000000000000000000000000..36f6697d686459fa25d2baeb03fc2b86d39a5efd GIT binary patch literal 2592 zcmV+*3g7j!7Xg=&bq39^pcywq+kNmYso*J|5{y-5oRXqhj-qS^N`R66KAWmMkdfB- z`d`H3oKLoQ`9Z5#WqJI}uoh6fYv}kxI^EJGK?UeIa!gOBPRs`5-5@RTmK=S`H`Y=C z>*J$Qy2>S9gA9v@+nsKlOtr}I67!2skc@| zwbA>mCLMYYl$-t^ShQ!TUmAmQG|NBX7ZeeCF^;9dA0BJw_8hqjEAeeK-Hk{UyldA@ z_yc;`1m7_?EJ$&FX`GvSKgE!MzZ_uYn&b9Hq~HyF9kkt_yF`?a!!6GNoCy;SQj3&= zxIm&gca3EQMN$~eh@?~DI~*S2rup9b+ZI=QZ)<0=j1N`8*FxAm)N}CPh>FCLm+l>hq6}GD6P)!pEFmf6xFrNUOryr|>FBCI-Wd$R>F-4&%c_ekAvc%R^@+bAb@n z%|oOb!bfJg)G6dpV>5c-ArvxvK6I8#mqw@L7$_3lF8^P-?s{k3d)@VW(X!Wk7J_6U<2ksgajVb9%{mUC82!ZjKz+%4c)};N!IsboJD|Ap5 zgDd(>2pB7=80 zjT1Fz@6!x2Jou#=EpOLW1Ol^2Qb^e|Y;*%yGxp;s*AF0=Kjcs>g&fbO*{3Z@{Eiu{ zs@M@y6G$I~{MO17uo@ww=&&xch@aYT$k3@9Kf@A_KUDU*v}FGh3zJ73$8k9G4s3Tv8XiNv!S9}=?LYrhD@P8?wiWl%?^ndSSa+p zhmcF{Y)>KU+>)2+X3S@RF;>;lfwKP1T){7Dg=pADBkn~E8c6%^SzHE0b?Hp@hIN;h z(}<8%27w)%lM9`NSi#Y2bA@E_6bkO^eQ79{v%Z3bl^^txr0d%Ekdy#V68e`SqCvX)`Q7G5{E8CLWm;&My8ZYT}7#&Wz z;(SgDW(2Tr6&qdKkwWe8s5mQKe11?A{DG?gC%E;|=X|ewo*8vyK;37mw)(~u)ori! z;up+U%G?5is$)1RWzS^3>pswK-mosi&+dMMo;L82!Zl*@Zhb0jzsEnx1AJFvh-K#R z%p;Q{^P|L=wKwvIuC*>YY~2GN^} zo7@Rqj1=ythM_KUNGq1w!$cz{B26^+L9+`n+^a!t=u^8kBaBOl_qQ~FfS(ZkoZh-r z`ZQ;hNn1_+eyG#oo^5Vt!pgYi`VrswF1az4YtI?_qVSj5NXl@V3Y=Y-m3x~^(Ohmz zU5R$vlRzj#8do(%MqzI*XBJ&+$r~HK7;TI^CAUXlLcq1+a7e&`?duba@MdA5`&*l) z&F5n$b3kwCgxVGjZ%Fg2X>lO>Fzims#Ul)daXwyqw;1<-Z3_`U>B#hWRhav+gs+6s z;+|STT6ll1kdyd>fyNmHE1}_+km>15+HK=xQATqYZ2J1USv0{02g5I%>F;YU?vh>b zpS!4_#P&2tUn08^vZHSaS!KcUT6JWRjFXYN#TBLGimAyk#y(B?2HelLG0}Lm#7FN& z5E?)n5{W_`!zQQnytIhcP?K%IE$Oj&&x$#%QRleH>#oBc!u6AA>RfYp#)u>;pq;K7 ztaSL}m$6Ni$%5~S#}~j`?p6l`>I3D0EMEJ0n3@OUC1qqSWhA2!DSD+7Tih*oj3SXi zyifQ%o*vydD^Q$-y1v(P)ni}t_pfft`ts<7rHNyc0|VyS>|a2b=3W=BTf&e>94=>U zFK+KTn}=T!guuzv!7&HA#*y++!5E$vmItA|Z?VTV>K1kK6G*#$C*c@N!dWNg6EYvr zY)mMA5LUjJ?k8GfQo6B9!hljzAw$s3A?NH9`{8HAr6~G&X!7e(HB#Ixol$?JP8R1%71fpWDVek-)!n+EUE|PVbpx!4&$uUhhHX$efGq4wGQZHJM z^8n8tAeYlq{n@_WTW+tl>wYEm@1BnjiH(NsvzXJ7j!l2~TmUGy#1z!l7LouiZhU~Y z=JYqbpqBI~&K|>bOu48&C1~`<+d6lH)1qdBI$(q6xxE$#?BkANy%Vya9MMRu>b~{W CP#jYL literal 0 HcmV?d00001 diff --git a/rom/dev/tools/mldsa_keys/vnd-mldsa-priv-key-0.bin b/rom/dev/tools/mldsa_keys/vnd-mldsa-priv-key-0.bin new file mode 100644 index 0000000000000000000000000000000000000000..55ded45a6ee693b1ef77170b2aa69e0329af4f21 GIT binary patch literal 4896 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 S_sNwbS5EEIN_;Dy)HlBgx{o;k literal 0 HcmV?d00001 diff --git a/rom/dev/tools/mldsa_keys/vnd-mldsa-priv-key-2.bin b/rom/dev/tools/mldsa_keys/vnd-mldsa-priv-key-2.bin new file mode 100644 index 0000000000000000000000000000000000000000..d6dc4a5becfc2d17876d3bc8aa1d2881021f7c7e GIT binary patch literal 4896 zcmV+*6W{E28vhm%yE6bqXl2+6C<>DvQ~-V7>J@7#U?8F_9QR*^!xP6Chv; zAwW^4jDQIe5LsY=ga;B9<4D4Avl=M^07!zSlV!$@l>uM~1Q<*v;Uy9z5)mlVF~Z{! z36d~qvP3BmQNl!ki)?^qLQz2E2nN$cQBWXcNeXQvQG%Md+bqB!B+7BbjW8NX1OX(8 zLJN*eY@*A?q!BocNMwVv)2#6x1LRfsq0xlL<#61et6k zQaH(l86*f$q?9BZjD}MJLX5c}1_?4GX|_rtiGimvl#3DMVipS$f(!&8#=!uRW;hZi z+D)_xw489F2niZC071Y-I0-1KWrG_iByuDyf)l94)e7$N^3Yib!P0WN4BAB#>zsU_y*J5KXBf0N@5vaHv7X;$Sui zw1aHm5fuU$L_~mWgv4>gL?XgBBt?cqksC#vfF>Zaf+04DHW&odYBs|n8FC^j7UT#C zk;a5TBOta3F$`^zB?3YS(@C~cHVh$P4WNOxN{$#UxeSToB#=YELTv&j2^ndiXonj@ zV+;mOFcU3Vg~E)t8E#095Xw;!Z4)At&;%54fe3&=GBpqY6pcs-1c)e^Xc)^$12LvR zfPeu6AjDV}!v;c3mds!iWRnAy%1OBZM&gBuVHXlaL2Wc~u@G$_5x|h70U{-YkVK3c zG6>>A6iOjZ2@xS#1}K37!%dQr6v9OVg(Bnt7%`A82?7$qA~H(G+hK@=!y}PWE<{lR z6GlK%C;^evF|yzwTQM{yMA!^qK`7uRlMogNMq+|sY7ru`B51%#5W;Z^0Vt9tK>)qLs5c?6dDA7!2o4Z43f%|2uesM10szQ zLNgc!OO3-Uwg3i0G6a;EgkhKshM{fbQ5IN&&_$9Zww!SsO~zXQn+gL>n2T{6Z6gCB z9EBJppqwRI1t^dtLWDptmJ4KIf;J+AgiMr4KmrWh5)c!Jh;fz*M2ZPwP7r_?gOSKc z2%8Lvgru7!(FQb$xBw;oJUJ{mf31mnmgJ}4bDrNNmmX4cUG#|g9xx*r&-{IxLV>q% z_b7-PIN(Qs-)A-~Rxz6uB7r(8Y}6OAkH^FJ_gcv{Bst<=NWI###_Izm4eVG9c|^s% z+V~{bFsMyXcgpbbK2L}G$0v`Uh#SD!`W7Dpy5o%!2M0MmsthE%I}v7K{7YGEX7ikg0(ue%Bw3^>u4PJwHYJ zZ03qu>xb_qK17OKQAO$gvVLrB^mqw+QYz*gv9fqfIkN?zk`YsjH2^#K_-X0|f~L!R z-($>8?uNv}N-CSd^Y}#_x-Z@+`%QUzZ2QB35UvzzlweMaPrY0=Mm*`Ej>NZ)ciE0sjQL2kY{y(?=%y z4-;$=T}^ARh3`E@68-* z5CLO8*>})ddIMckx(o2jWlqx?0-!)vC7lq$+lc zkp2~Y;0AJk+?bd%C#}|_|DJmT0+qoxMZ~AU47rc6x4w=qx7egW+y@6JHPu|y zFB^}9^I*FOrhUGveE^%(e~Fd5>L!<1N__I7^X6f^X8;o+cVW0I`o2nXBf#&3W;`f; zhk_1|-gbvsDX8vvE+&G~kks(PH&ND0kZFw_Vxn%3Jt~0Z@~OauDXl=i6ZIz)t3+jA zt_)w;9^{;l?oFepS-~bry99QCU-+cd|5JO{D_jH$S0V@B|589_mFH=qc?vQNeTDI% zHV5Rfb0!YUR|0Lv`)SD8rO#!)q`$^=vLvK79Jtytf_l>~W#KKLwX8MfVR+Rd^)4vZ zwa!|fSGDWm+Nr60!6x4iNe;E)AFCeq7EV(r!JK@cBHnY^=Ohz z%dIWRU@+FRW{DA0qOA{WoUJLP%X*wxiZG{3Qmi-YOnv)7QsU_axVB5}CCc)Vs>XOu zb2*_h6!u3xG(Yj|#;u(n>VTG;=&_7PbNNT3io8YCYj*7vw&3;8JkNHbAs+~ZC|U}N0Im;^EvZaYCVJl zQW^}l&S@U5THzv`2Q`6{LfrP84mq^?^ zLK6MHq`$~Q#^B>(UVFJ(b>-v-W;QP)rFTmt7feNlq|u@dnS17bBkt4CVKW(IDWY{I zRf3<33kv=?IkQ#WisH3j_E7r43&(1Yirqt+cX28J)SJGGNvF(6Y4Uf82tgLDrSr`s z>bz1v2XUkHbF$N3@f=S?BV2myM@>@<*jN$kfWHD{8m{D6a<|w}qWQ}D=0KIq+sJ&o zT<7Ip>4%BvVf#lds;C@a6vulwXgVc@I{@|0R+(N32ur_-dxONT{aO|8j7O}ZQ%h=Z ztKSSTdmFdwenn&KXeH5}rR%vbQ*{rRz8{k=yx1+jc$BV4sVk9oy^wI6{+yI#Kr$C* zLgd?Kd@sw<1p0 z8GpXdUQfiy($_YPw4Qp~DA;aacBa7x_-?N%G03X|?4Ez5N4)ZlHDe{nQ)094F-7Pn z99N(%M>DSKott)(DCq##v(ZfTvY-+|^cLKGV$vrdJ6tj1&g=GCwwP zX7mciYM$YU7QZ=$w8rph9!v`e7A>#MYhB{#<4t-Fx6NC^O9yY;a?{$=4zS#}Eb={~}5?{Q%1qzAXmQom$o3X(zh zj|LZ$_NuLz17b?V;G)$cf?c8c63i(;XDjY-$$Hw*a5fs}Q3!CzVCG?$zl-*;`c#6M z8NNSiWqI46xfxm08Ac7|ia#hv$`h_%C5zHLL=#QX=bxzk|)xE7S@_U$CdM_&c{`@)s z>(&wKA?C!L5{TG;Gvc(^TXlzuq=UevpWLV6T_fZy8U>DtV97;=VGVO$vUZ$taa2iv z-BpPT*3Mi-*G~X#sKKyRnSOYM=U0XLZrqqan&fa$)ueO$ILeC@1KocJ0;5LA49s2C zlfEr5@Zz=1-KIaZOY&wB3Ht43j)9(cY(|ujQN`xj{HM^hqgx-V`F=l@Z-7yyglZ;O z0n>S-Va_0P0z&(5PoO0OSOe}izevw;LM|@$o+p44@lY6%ZQj?H3j)IYKxsz1|{jzPzL95;e)NTIys$^Ty`l5p1-ehR!u!_miIkUJ8r zro@GA=yv}t9L)-A_7^n4J=D{^kC(n0w+Q;>kXX(@Jt-gu!)#kXA*Xw=(JKP72rMNW zPtgk}w|?8QuJ1{{Aff3pEh{J?7B6v|*sh{GN2D^`eyz6HZXeW^aZ+N2ty=MtNJv5= z4bN`CLLNm^c){RkO+Uf~!(kV zZ3>SqfYY&oVSU09ST*iS5RaTJ@H{8z3ynm8@9V2*x7^9VOQ^h)TdzGlb~Aiu1xA;} zOH(1={Zh=`LveK(AaR2TLTM~@O{+V`<+y8{ed?(b)nrp$ZJm2=^XIo~&!gQ;;9&@X zV6|V9$6p+ZkNk>Z%oaaoc}(+kn^`0UXYFtk$s5blZR59`ht_M19)=i72qZwB`8!G@|;+2$^z1REFSk$-p%v;h9wKPiYF!~a270N$ zvEUDLqWml>5gn!%FQ~cWe)473bS}5%V9Pv``n8^fc=s)c@X>{`J;;O40sjmw7tnEO zQGbyf>$+;)A}TA4at)#CLJX~~K)h80YdpJhwIbe8K{5JZveIsIpX_#8N;EcB8G!t_ z)dhl>D|(Qb9DF=fj5nYc)2|i*CPc2gLjWz)n2a#4znok-c0Nb)oF{K(%FWFmW{x-a zq!3R?>6CG8ioe4eS{b^Ob>)9RiB21Cb=fBu1q(`7D12!4phuG#4LiE^U|vMaDI^Q~ zM%x8H0za6N&()StLx`$QCW# z9rCh=SkpQ!co87rWa1s~3=8dA>lH-|%tCuuC^+v&>D(s;T+M**Oadc{_djW*c7eA_ zIRZ8ePiEd@g%f~dqlhao7^CB^xbh6ve1}TV&V^G8-PX(Ags;o1$IPQqlznfCjr;DT z`Erk&2db>|3M2yEJDS}I;XOL!=&Irn276Y_GIn&q_(Mk&;AbtS$c!5A-9 zz?6N~VXa^qjobPNTz%E+(s}2uB*>ULEa*gjzOi0hkj4lW+;E~1B^W{kQ2`*xNo_?E zGSFZW05pO~U}`cE$k{;@5ySwc0|h09Ce$cHFha;M+b}dHK%^{GO*Wf=NdYzuphEy5 zBmg89lPEVam|SoiK!BnE%7vFnL=#fjNC*Qn15H43MA;FEM8u(>m>^5lmbo! z5yZfQ05Uic6yk(ZFfap_i)e^&2pDM8PzI4U0zw3Vq{C_;2#^tx5^6$`fWtvkB0&_k zBvL>OhJz&}2q+1*iiEW?Hex74WDp#Jh$J|Q21_hhDio51BoLNS#1n{I0kXn2+(kkP zHzbHag#?QjQ7#w>5=ab+iG~><+K8wI0|EjXXaWNQhyWpOM8rf3Q8J3fBL+qUBuGgT z0RYT03}li3mI`E?P6inuSPVizGT8u2X*L8l!9he}mmy(@E;v)9*l;)~h?8+6E*3;0 zK>#HtGLnuIL=y@m*@=b_Fp`DHh7ifdAz&s=lNmwOMHWLu8xh0|FqBG+X*NRy%O)mi z6bn!Qg~Gx`0|Ed2uY$rh+GXKk|dZw%y9t#rpQuZL_ol}6M#lx z0D~|9P!yy%&`^URG-F{5N(fvqfk+~46p$!Uk)pyN8jwODL{eZGEr24(LkSdsmjO)} zED;$|B)1U8RDqOCIGIVy00vpMVMzill^_WlEyWTb3V|49h+_~LEhZu}5Rrmy zNdN*{YzRc8f(W2#lFE?GB%lO9S&WDYG?Q#pN(kaZ3Iq^fAdGPlNHqeoQEjpa639VJ zL4@N45@twjMgfG|ZG=ey3Pr*spvZyTBm^5GQE5m_LKjFelbgM=he0TO74ji~`B0B%5V z7FdN`ZOI%mU_lg3l;VI;OfZo~$^ir{0*ox22&5T<3MhgsGEyYKFeu}fAqofxvcM^d zWJ3c0n35PMxF8G=B$QzUkpv@#Mq))o0U+cOVhkimwB(5(AjJS63`M0dl8jAC2*Bio znQ)Xzu^fn*X^>-<5haw2CSd>wX@rZyz-#~oI2mB1QG(K-A#9)y1{9FdVWSWxn~XpW zvWYR!B(|JHnQ9V(1rvb65TN2R2?{WRDC2Nk5yDCm*hHw1n9NELZWbH}2`!`$fRTg@ z5FlU{f0+3-sh_H&7oMu2IkO7I~B?J(p03g5+w&8IkM8OlZ zNG-%_0)Zt800>lsNC1RpNEuKBFv%09(`A5!vO-K+WEUDpz>G9ahzVtqP{>n;gaw!| z7E1^iK{ne33K#?NM4ieFlKw-jVxI>LwW+fOx#AL`~D58Ob3`rwKladq+w4nsznJc0TF4KJiV9%ZlNZm|NA4Q^wgzEaC5<7sCn}?WUm0&2# z4lQl)I>~3s+z|2Jee|bKp1whYaX%<3|aBRuOXOLEb+~J z9hAW_Yu%D&QASjT;ycz`Tt=GG}DcFFt#BEkdc+vff-kFLN=w)?p2e3`|5KBOefgQ^9cIfn3A z8t^%2C{6U0rhZ{jAA{Xdt16{afTT4W$@qUCy$dJz}y6%)3QETE$}yS2kO!jY4rCr{j}ww{BUII?Orm?D??KHFE3l zp<>X{f?LO#I&K|33^ooBS_pfE%DO{Yj!v5T6!>%lRUrG}NmDiT)rS-xP;#ZwLl!?P zGihLO4QH_$5_!kZwf1^#6Z`}*$CzF7X{Z*r;9>yTyKdQ}-99ZY=p}M%4FDa?>WOY{ z5;kW{1O8RM4D=)cJ{X|Lv)AOXPCbvwG@*%gZbPct{sLmm+$m04L>1)rRu zX0BDn%BQtf;H*5IlUmMVc3O}U?A;xk-+rg0+%_eL0k#`Gd8k9r^YZ)wvbzwFi*y-o zgIzkOdPn>78QBNxs+g%MY2(X}1)XHb)+*TMqTGD(n3tk_5;f`3w`8&bw+CF+&wgYC z>iG{aCY&a#h~p^-e-Bb(;c;OKp|<>orwYS^wuy=ba47Xj$R5V}=G5s5l6}HEcIvQR zhs4_%Q6g3pw%12^JT8#M!NCFC6gAiqbv|!{H@tJxnQNk(dPB+x$b+sAW)Je>VrwCKozQ`Vp=5Tq7K9=ZWY8h+H7bBeH5$tJUq zH(Hpk<7fW>?o%KcW#(6kQp0TP7O^PSN9})s1$sw%^0jh5#=u}?;JHeGVE!4>MAjVD zf^`iJi(Of-#GBvXW}|~L$C5p5Z`q(+`xAguM*wb^*9& z)CxfvN6o~SsdyAMQ0pxqPfBWa4IkUY(h1(%0R~~~72cajL1)|*|71q~ULhf?7LO|F z(kWq`DDu`)a7$4Zhyk)>wuYB$M!({p7CRlciwc}%d#5N!0oh|VEV8wfO23mE2Z3*m z8#rM|e5|qQ2@O@miL1>Ch93tF#~wo{MUOv7;d$fK#od6r6?k*13sl?iY!7yM7Fi^G zcr|B$`M^|w3ZTP=Nyoctlz6p7&VErw1Z2;p7|Rpc&vCsCbj`@XN5$_2UET{2tC-zJ zmK`PyZ)DHBxbufin%2vmWKtL0o*?MrS{gDN09i9wqT~IT46X|)C1Rq(j}U#36A^PC zG7FZzp4~TDe~8$kRkm3k4^IKpIOJ{3b!+1~U2m`1!2^hiXs*w~!^jh_J1*s}?-eG< z5>oeK7sGzZw+4t2jn9av`c7-< znnHbZ!o9|NYW(45{7`l_h?i10olS$m1^naCIj{p6}%p_+Wu)O4yLN6NEXw*4lGFO2(+llqY zBjQ!OFeBeVWgF9V959&{Qy|vW=~gcXuvVU2is=Sp%>o)+i-$)8kb`*uDg16Jq=;^3my> zEtTUO@@L}bF`YodvwcN0yRYzaBp zKF2?f&~>uaCrAd6iN>p8ARQ7HApg$kZuFcUr~?dNNOgKWJKEok0<9eFY^Y zR*Y#1k~$4vWl<W^%0jqmQD!RfSx!QD3_R(B~6&<0htLC(gn?$aIIG)ibR0!bo_ zHOofM+AC_^&@s=-(<-(Ig%u+ZiDb#r5OUMriH`H?dOnX(VkEShOrAgSKT4_fv=4@r zgYc0i%PJn7F*ZDj=FaTAKP!G$@&*RAb$`WJ{3f4?*8h&$dhY$tg-(s-L^5o%?${B* z5X*?wnt`gnj0_|gh$=B6pZ#+2KU2hmlnkXvQ<2qQA~n=#1sd#S{V;ZJJH|_nkefsO zm%R@o_Lr#$Wgl}OUXR8Q@x#ZcRmbJL5#=8Gzh_h4 zZy!8i=PE79^_M8_jE65Je5o}eEiPPB)MRcG9m(=mW~NStqMTOdvtVAwk+nvpl0!*d zHc=SiEtN{%6vbtS`HPV9G?laUvkF&}@{sJdlL8D&Ge;)Fb1q-eIq839Vb#7^uR!6Nm15X8e? zMa2EN@cgK$JBI0w>Joy~=}lIMq(l&-uT$O{zcFzueNh8-J+ty_$(GT4wBeA zJM$nUHmZ|adv#e6PurpcKzby-QS`x-NrRWk}|z8`U!ZD8m^Cs&isiG?Gzu zp?#|CyU*XWp!V!2-FDI37el@Dnq2<(YvK`RG=&cBT?T*W9rp++9u@Wj8C7X~wqu0P z!-Sxty2rm>gi!KW0+|APb{1gN0T^A}dL>m4loQr6>u{1d|5G87m=Pq!3TwCePVQ+gTngfUnr@ zO(uOFpTinQDd%XF?Ilrj6R2bW>W?RiFjG2HWs%!;bqqP561=aY-DT}*G@*h0e9Hqi S898r7udwP)|1sxnZSzUeE`fgl literal 0 HcmV?d00001 diff --git a/rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-0.bin b/rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-0.bin new file mode 100644 index 0000000000000000000000000000000000000000..af8819252e06fe7de98b0147b6b1bb0569e4d66f GIT binary patch literal 2592 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 C2k-d+ literal 0 HcmV?d00001 diff --git a/rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-1.bin b/rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-1.bin new file mode 100644 index 0000000000000000000000000000000000000000..42c1263c58503decc1a86bed73fa8f5ef9feaf37 GIT binary patch literal 2592 zcmV+*3g7j9P&4m~8%=;J$)BEkLUK8+D)O5LLVd`kP3fn}YPFws=VFgpAH4mWh3{ zmXmyhO${AiiL|`yvef=El);+uQ^s)m!Lh&AZqO~-=4nU&@KalUejx`lUS~csgCK8S zRo&~4YZGinMEF8S^AQGzUb)ehNDnE zc~LcV)gltjd*Gy0f?Q8f7BsRI+y)z_KghTf<~#U56pfN$^+ZPyimd^j-s}kj=PQji z?%*368osjy?*(~hdEOnA#b~GW7#_e zC7&^S)U^RMBU}1RYB`}@xp_7JtLhHf&B+{$^K*-1a0|&xr#Fg-z+NkDHL%(tWO%bO zqW_mQ`;TBYAY;COS$`Ls&l7}-$bER_b3jb2DwAF~H4}D{98SqoqDs077ZDOvIcMAb zDs3ul*m8ONo6f5C=(KBq?Fbb?uQl6_y1Y9*>aYbfj?8N3WJ39zv$SR8(Z#@ zR^hG{z?T%tRT$Z_7}Z}ceHIaW28{OBM4Cj2*FmZApYBzBhG?YdbEGHy zD;i~3`xMdSx*%OX>Xag}AMOB4L!YFO zYzdanm@nCZWVYr~7l<~vg|m?9qt!rQyG7B}r1`F!OdnU{j$>wLsB;SKI`&lw4yWop zIcATS8krb(Liga2Cz}6@6Y&(GE?HV*);d<6ajlhmk;^pRT3fyd_^(2(c=S&7*5Uo+j9dv~EUqB9l)Gnv9_ zD^YeVB{D;6cPl?$f8uFO3rk2Z4c0Dh=+51eiL+IXN#C?*XVCujF_R#DQ~5(GXIqVw z(x7qYXF~|MP9Z{6tLbZYhH#1+5lRQOd`BeG7*Ww2p#qF6SgQPlTF%}?g?p3Pzb=}Ug zjPG^VWoosTQ=Fr`R-_5xQpe6qih?`&?J;k-emiatEgaVDIRCJ`T10R@BEYzOA<}^j z51LG}eQ5m7JHz^&Gf0wDnOsUHRPmYW@CLjhN(PBVvcB0jD_nW;#m_^yBF1JTef~ll zbelqb5rJ>hhUbnIKw8k^PP0Tz0d=ZpK~abg@UI7=P-%;X5pM*+bGF(QJf$O z1H0##r$H6Ctv}WI3jn-f|*E2gzeCn3&+YQWx z73aaTWdn(ZTbrql)TggHyTxs{I&+Z!ZBiMaZLB8m-s#c_ZfK*1ya43S?!$p8Ktd!Y z??9LGd_!7dqGQT^B8Ntk;Mw#kGZHL1)hWWBy3dt?^mPDjeE(lp>WB2-+gC?>)ml^D zLi@ZWFJ#95@KDH@0Q?|IGgkd@02KES-?ZoNr=lhF^xcc#gheKCrsStxi_8|SUF5X^ zSd#+El(x|4b>$fmEci5xI<_U;_&VBE6`OUKr-8Zd!zm^rT>Nei=wtUZa2dL{fKe|W z;rlVzN2EcFO0o8>1}kFxp9Hju+3LqfVJEiu;TxExXOWjt&(_0J3Hy!$!yF7xE9Jog zaOI{|R@l!YND3D}y)fXH(3gl*te?=6#F7gyhOw?tY*w%Ry+oVN@%L6%Ff|cT0mVS! z-d0PO6S^P*qTjwcFQFA)@q0%$2l|^cQWj{E^q=w%; z?L=Tj#fmcHCiQ*wV_%h#5X}A`IM+C)65qpB$U~4IxU2YG69Wgh`zff9#}M9WdZ2Hin@6_flU#`rGuf*5sEY##+xU<=%-p=?0T-t=@~cyg%3r(_cI*@XcCnh#&_VBJT zQ$5-!X!M^%_0}j&={*!F+yKvorgi!+AFe*Q>nyYUQ6toi)yWP(%aL4vOQcE$;qkgq ziAn+I9}CQ#VC>%H|b2u2oU%Ej5K74dqQ^l5j?iA&`Db1epD4zbDW?$1CL zyE2Du@ssH7$|#hMXlV|~9pWnfkB?SK0zr06^l?Oj4S zpJ_maGyqIx8XO$BPk2e&-MJi}e5_|^FJ0h=Rh;=CA4IU>pv0%X<^_)CPMl1brT(E; zMaN=3!I(^fqKZv&f5A3#wi3{Q%nV8EUsPTIR6)iR-dg+_yTkt)@rHB4)$FX3eh3t< z-Jr%8;wag#b;B)$BCm_ CaT%}x literal 0 HcmV?d00001 diff --git a/rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-2.bin b/rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-2.bin new file mode 100644 index 0000000000000000000000000000000000000000..9ecdf8868f260a402a30e391711209c47a3586ba GIT binary patch literal 2592 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 Cg9B6m literal 0 HcmV?d00001 diff --git a/rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-3.bin b/rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-3.bin new file mode 100644 index 0000000000000000000000000000000000000000..6ee28f2e6fa069893209996be78b78742eb2f701 GIT binary patch literal 2592 zcmV+*3g7h$e)Y=DAmC~)XaTr$4m#m~4DN|WRE2y=;u`*XQa10iMm&c@uQpJy{+LGQ z(f{1--(M=uL<9Ec%#)~^rLmxKR^)Ck!kUu3n4{^_C)w@M+c8 zWn(A<)99!5@XF~6er6eCkH&Y20Wcwj>I&~M1pEWRbJ}!JN>Hjv!$pCyvgai=^u{Fi zW+l`<6TSXkT;GmdWlLY&D5}UA2ne~G0bnShNdwEoJYJ9LVmOyaPcRFIkjATRJf=m{ z6Kmhojs*|3yamlQI|qS5l&?0q5gzut=VtmnP$eQE(SR@;idM9e_I94BY8n6IqrdnE zjqjJcw5C$PWePaFEG0VabL~aIBW|CMEE>u^c5{&!d;Kc*g7 z#%FH#H>#D$gC8_Zra;i7l3qYeK1#fyX;e&l-0c;kiJDqC*U!0l=!9tvd1y?P|nan1e77obd?z z|1Nmv5VL}v)r;S}bOxLRT&9M@L(l9h!Vs=Ut4K%ITHr-eX95=;x62-cHLb`%$dp&X z44ph;kEU6?EL3as3ut9Xe&6UT(!RTPuMjKu8yv4mt((P=Qh+`L-BFq%L9VsVhKR*Z z&i)VOw{yXSq4XRRfxn&`iCw8|1SKv`*jcH>ucBrnc|tnPek{$jvmcG*T)LVptpe!U z$k)O!_QkT>YLT8?Y~)9N8=IwPmuZ1Dols@#zaFk$7LY#I=qOy}MBENK_0=OTR@o}x zvf-+FYMob3E|+`~sH3KUT#Knz*j@x{d9Jm!9HBOI`PtyCzV5tmRa-FKxQo9vK?$zt zQ&lrRu~q9lkgeZeTkDz09Z6o>0Y8k@Ak={!Q6#eN7l_`!*N`5&bD-uRLUmzMs8U2z zRuaOtH&Y1i#fhrISG_v~)?X<&5_*zTt>mi9Z6f+qI3kja)Ekb4YXDZd&cZ%dv=;5zx^uan}9R~Jv z`TDKekmQ)i-RY&M13?xSYdZtbIqOt{eCG>AC5bvbFx+SBP~5m9v>5oL^hGDuTt zjeV+*|FUQCa@|<^or8n!jl7N+i7lS}QXOMF13-J`7vzaA@|X)hqA2P!pMd;Q|V2VJoF#lcW-E*IepFk4@GuK`t_-vIh!dq&MRdmZg>XR;0? zUoWWY{%SE^jbXZ>h`2NtmTA>S_cN&! zM)ExmNc&ya?%J90!HHWSr35b;PMUMdEL^ezF~;+%#1A@r=O0l*-_Tkc zF`~h%50tD*W?CI#EBoL{mBu{8?3Du=zs5*OY5D|+j7 z?eu?l9lq19dl8Zc^h2@_PZWmphq2-ffu(%|;bA1Vq$hUh8}1?EHD>xdHS>6+gIS?w_Ofx?0Hox>BV&pSqA_vy6bh zS8U6iyCo(eJGxI4HhVZNcSM_W^^<95`g<9G45n>E#G@*j8tPC22GK^9($rh4ZbTuq zNwBey@Ca%1O@`J`MVw;`J_)4l9joO04#LOuO$N@>{WWWmE&N2yW@3${Ig#_Y=|Hn$m0)w55ExInQ=~5wru>S} zy#+YHKBKXszTtsf78g2)p#tG9BKCR#$9mw?Fb;d-P-uNxAcmZ;BFmbzj94EmG-+^0 zZQ}hJkl56>EAh@S4sLn&bk%Slbmq#N>O2|THav&SA1|=Iwp8R za}CUEI#Shz?*JkZ86Lc1OluJhcTM^|{7;KVF`aUhn_tC{$j)T8?YR@fd)Tp`j1EH923> z2K<{`096Qcr~FKS1r*zKF?!>6S%qT_4m33Z+`?piH@nxq>j{-)p*6cfI}qOA C_5Yaw literal 0 HcmV?d00001 diff --git a/rom/dev/tools/scripts/gen_test_certs.sh b/rom/dev/tools/scripts/gen_test_certs.sh index 44ecf8d291..4a48e9e44c 100755 --- a/rom/dev/tools/scripts/gen_test_certs.sh +++ b/rom/dev/tools/scripts/gen_test_certs.sh @@ -15,3 +15,11 @@ done openssl ecparam -name secp384r1 -genkey -noout -out $1/own-priv-key.pem openssl ec -in $1/own-priv-key.pem -pubout -out $1/own-pub-key.pem +for value in {0..3} +do + cp tools/mldsa_keys/vnd-mldsa-pub-key-$value.bin $1/ + cp tools/mldsa_keys/vnd-mldsa-priv-key-$value.bin $1/ +done + +cp tools/mldsa_keys/own-mldsa-pub-key.bin $1/ +cp tools/mldsa_keys/own-mldsa-priv-key.bin $1/ From 31e787650b3ac120e8c01ea8164ac5c9723b1372 Mon Sep 17 00:00:00 2001 From: Max Timkovich Date: Mon, 30 Dec 2024 16:12:10 -0800 Subject: [PATCH 2/6] key stuff --- Cargo.lock | 1 + image/gen/src/generator.rs | 11 ++ image/verify/Cargo.toml | 1 + image/verify/src/verifier.rs | 14 ++ sw-emulator/lib/periph/src/ml_dsa87.rs | 203 +++++++++++++++++++++++++ 5 files changed, 230 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 4ab38ea8f6..7f1c2dc48b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -696,6 +696,7 @@ dependencies = [ "caliptra-image-types", "caliptra_common", "memoffset 0.8.0", + "ufmt", "zerocopy", ] diff --git a/image/gen/src/generator.rs b/image/gen/src/generator.rs index 6e8e5805ba..e1ee33e9a6 100644 --- a/image/gen/src/generator.rs +++ b/image/gen/src/generator.rs @@ -221,6 +221,17 @@ impl ImageGenerator { )?; let sig = mldsa_sig.as_bytes(); + + println!("sk"); + let sk = priv_keys.mldsa_priv_keys[pqc_vendor_key_idx as usize]; + for n in sk.0.iter() { + println!("0x{:x}", n); + } + + // println!("sig"); + // for n in sig.iter() { + // println!("0x{:x}", n); + // } vendor_sigs.pqc_sig.0[..sig.len()].copy_from_slice(sig); }; } diff --git a/image/verify/Cargo.toml b/image/verify/Cargo.toml index 36a9864e65..47f3d27a85 100644 --- a/image/verify/Cargo.toml +++ b/image/verify/Cargo.toml @@ -16,6 +16,7 @@ memoffset.workspace = true zerocopy.workspace = true caliptra-cfi-lib = { workspace = true, default-features = false, features = ["cfi", "cfi-counter" ] } caliptra-cfi-derive.workspace = true +ufmt.workspace = true [dev-dependencies] caliptra_common = { path = "../../common", default-features = false } diff --git a/image/verify/src/verifier.rs b/image/verify/src/verifier.rs index a992ef0482..e93b570639 100644 --- a/image/verify/src/verifier.rs +++ b/image/verify/src/verifier.rs @@ -765,6 +765,20 @@ impl ImageVerifier { } PqcKeyInfo::Mldsa(mldsa_pub_key, mldsa_sig) => { if let Some(digest_512) = digest_holder.digest_512 { + // cprintln!("pub_key"); + // for n in mldsa_pub_key.0.iter() { + // cprintln!("0x{:x}", *n); + // } + cprintln!("digest_512"); + for n in digest_512.iter() { + cprintln!("0x{:x}", *n); + } + + // cprintln!("mldsa_sig"); + // for n in mldsa_sig.0.iter().take(8) { + // cprintln!("0x{:x}", *n); + // } + let result = self .env .mldsa87_verify(digest_512, mldsa_pub_key, mldsa_sig) diff --git a/sw-emulator/lib/periph/src/ml_dsa87.rs b/sw-emulator/lib/periph/src/ml_dsa87.rs index 9a66ba6913..547475b979 100644 --- a/sw-emulator/lib/periph/src/ml_dsa87.rs +++ b/sw-emulator/lib/periph/src/ml_dsa87.rs @@ -860,4 +860,207 @@ mod tests { assert_eq!(&public_key, &pk.into_bytes()); } } + + // pub priv digest sig + #[test] + fn test_mtimkovich() { + let pk_bytes = [ + 0x0b, 0x7e, 0xf5, 0xca, 0xcd, 0x20, 0xe0, 0x6a, 0x2e, 0x68, 0x01, 0xb8, 0x73, 0x0e, + 0x3a, 0xe1, 0x7f, 0x0c, 0xee, 0x89, 0x46, 0x54, 0x85, 0x7c, 0x49, 0xe2, 0x1a, 0xfe, + 0x7a, 0x52, 0x36, 0xef, 0xb3, 0x46, 0x3c, 0x87, 0x43, 0xaf, 0x36, 0x50, 0xb0, 0xfe, + 0x98, 0x46, 0xe6, 0xd1, 0xff, 0xdc, 0xed, 0xdf, 0x5f, 0x2a, 0xce, 0x44, 0x03, 0xf6, + 0xe7, 0xcc, 0x93, 0xa8, 0x9a, 0xa5, 0xb1, 0xa0, 0x71, 0x56, 0xe4, 0x82, 0x63, 0xf2, + 0xae, 0xf9, 0xe1, 0xd7, 0xf2, 0x12, 0x6f, 0xef, 0x2c, 0x00, 0x26, 0x84, 0x41, 0xe2, + 0x53, 0x1f, 0x17, 0x49, 0x1d, 0x5b, 0x5e, 0xb3, 0x9c, 0x48, 0x0e, 0x67, 0xad, 0xb7, + 0x87, 0xbd, 0x62, 0xe0, 0x83, 0x3f, 0xa2, 0x3b, 0x1f, 0x1c, 0x3b, 0x77, 0x6f, 0x12, + 0x3a, 0xf4, 0x95, 0xda, 0x0f, 0xce, 0xe3, 0x69, 0xbe, 0x3b, 0x29, 0xf0, 0xe9, 0x55, + 0xc5, 0x7a, 0x8c, 0x38, 0x1c, 0xe7, 0xf9, 0x07, 0x68, 0x5f, 0x57, 0x35, 0xd0, 0x56, + 0x8d, 0x48, 0xf9, 0xd0, 0x23, 0x47, 0x3d, 0x31, 0x21, 0x4e, 0x53, 0x0f, 0xfa, 0x26, + 0x75, 0x37, 0x7c, 0x58, 0xaf, 0xb7, 0x9a, 0x88, 0x5b, 0xa9, 0x48, 0xd5, 0x38, 0x91, + 0xbe, 0x2a, 0x52, 0x64, 0x4e, 0x81, 0x62, 0xf2, 0x85, 0x6b, 0xf0, 0xd6, 0x4b, 0x22, + 0x06, 0x5b, 0x72, 0x27, 0x0c, 0x2c, 0x14, 0xae, 0x5e, 0x8c, 0x0d, 0xf5, 0x96, 0x22, + 0x8b, 0xf0, 0x69, 0xd5, 0xd7, 0x65, 0x63, 0x28, 0x03, 0xd3, 0xe8, 0xa7, 0xf5, 0xf0, + 0xca, 0xe9, 0x0b, 0x7e, 0x66, 0x19, 0x63, 0x8f, 0xc6, 0x77, 0x89, 0x01, 0x30, 0x21, + 0x85, 0xea, 0x0a, 0xef, 0x31, 0x04, 0xfc, 0x03, 0xc1, 0x73, 0xda, 0x74, 0x50, 0x4a, + 0x50, 0xaa, 0x49, 0xc3, 0x45, 0x81, 0xb1, 0xb2, 0xe7, 0x25, 0x35, 0xf4, 0xc6, 0x24, + 0xf6, 0x66, 0x25, 0xd4, 0x3e, 0x13, 0xbd, 0xfe, 0x5e, 0x5c, 0xdf, 0x8e, 0x5c, 0x65, + 0x4b, 0x5f, 0xdc, 0x28, 0xaa, 0xc8, 0x19, 0x08, 0x08, 0xb9, 0x9b, 0x01, 0x60, 0x28, + 0xa1, 0x49, 0x03, 0xcb, 0xc4, 0x3c, 0x5e, 0x8f, 0xea, 0x62, 0x38, 0x97, 0x47, 0x4f, + 0x30, 0x0b, 0x87, 0x90, 0xc6, 0xab, 0x6d, 0x3c, 0xa6, 0x45, 0xd3, 0x13, 0x6b, 0xdf, + 0xd3, 0x8e, 0x05, 0x0f, 0xb5, 0xbc, 0x05, 0xcd, 0x35, 0x3b, 0x07, 0x81, 0x41, 0x94, + 0xaf, 0x36, 0xb9, 0x11, 0x1e, 0xf6, 0xbb, 0xe7, 0x66, 0xfa, 0x3d, 0x50, 0x25, 0x22, + 0x21, 0xd1, 0x80, 0x30, 0x1b, 0x8a, 0x56, 0xb4, 0x92, 0xf6, 0x76, 0x9e, 0xa9, 0x6a, + 0x19, 0xff, 0xe3, 0xa3, 0xbf, 0xf8, 0x07, 0x8d, 0xef, 0x97, 0xbb, 0xb4, 0xa6, 0x52, + 0xc0, 0x65, 0x0a, 0x38, 0xbc, 0x2c, 0x25, 0x3a, 0xed, 0x73, 0xed, 0x45, 0xc0, 0x23, + 0x6e, 0x9f, 0x8f, 0x2c, 0x1a, 0xca, 0x3d, 0x76, 0x73, 0x91, 0x18, 0x7c, 0x08, 0xed, + 0xff, 0x42, 0x1e, 0x59, 0x8d, 0xa0, 0xc6, 0xc7, 0xd3, 0xf4, 0xa8, 0xf5, 0xfb, 0x3a, + 0x30, 0x11, 0x37, 0x7f, 0x60, 0xe4, 0x6c, 0x4b, 0x72, 0xa0, 0xc8, 0xbf, 0xb8, 0xed, + 0x51, 0x8d, 0xe2, 0x1b, 0x30, 0x4a, 0xac, 0xfd, 0xc2, 0xc8, 0x34, 0x9c, 0x9a, 0x4c, + 0x0a, 0x3f, 0x68, 0xe0, 0xf7, 0x34, 0xd0, 0x36, 0xbd, 0xde, 0x50, 0x79, 0xca, 0x4a, + 0x48, 0x21, 0xe9, 0xda, 0x6a, 0xfd, 0x4d, 0x57, 0xe3, 0x9e, 0x8b, 0x4a, 0xd0, 0x22, + 0xf4, 0xb4, 0xac, 0x02, 0x82, 0x34, 0x86, 0x66, 0xcf, 0x81, 0x47, 0xfb, 0x0d, 0x56, + 0x19, 0x98, 0xe4, 0x31, 0x56, 0x2f, 0xaf, 0xc4, 0xfd, 0x64, 0xa7, 0x98, 0x04, 0x09, + 0xb1, 0x47, 0x08, 0xe3, 0x63, 0xd6, 0x1f, 0x5b, 0x74, 0x4a, 0x8e, 0xb0, 0x2b, 0xb1, + 0x18, 0xc8, 0x8a, 0xce, 0x80, 0x2b, 0xb6, 0x17, 0xb9, 0x29, 0x0d, 0x81, 0x78, 0xf1, + 0x04, 0xc5, 0xe3, 0x31, 0xc6, 0xf3, 0x22, 0x16, 0x8c, 0x52, 0x06, 0x73, 0xc5, 0x16, + 0x6d, 0x13, 0xf4, 0x30, 0xdc, 0xc5, 0x0b, 0xf6, 0x5f, 0x09, 0x37, 0x5e, 0x71, 0x37, + 0x16, 0xe2, 0xb2, 0xbe, 0xf1, 0xa4, 0x84, 0x42, 0xac, 0xf9, 0x65, 0x8e, 0xf8, 0xcd, + 0xf2, 0x3f, 0xa6, 0x1e, 0x58, 0xc6, 0x67, 0x6e, 0xf7, 0x37, 0xaa, 0x95, 0xc8, 0x83, + 0x1f, 0x34, 0x4c, 0xa6, 0x40, 0xd0, 0xa4, 0x92, 0x5e, 0x40, 0x4c, 0x3e, 0x4a, 0xbc, + 0xa1, 0x69, 0x54, 0x4c, 0x7a, 0xdc, 0xed, 0x15, 0xa3, 0x89, 0x9a, 0x5a, 0x38, 0xd7, + 0xcf, 0xb9, 0x78, 0xe8, 0x84, 0x6e, 0xeb, 0x6a, 0xba, 0x8c, 0xa7, 0xa8, 0x8a, 0xee, + 0xb8, 0x8b, 0x87, 0xae, 0x9c, 0xcb, 0x8d, 0xd7, 0x50, 0xc7, 0x59, 0xde, 0xce, 0xbf, + 0x59, 0x92, 0x38, 0x9e, 0x22, 0x91, 0xf7, 0x79, 0x19, 0xbe, 0xfb, 0xdf, 0x4e, 0xcd, + 0x6a, 0xe8, 0x49, 0x99, 0xc8, 0xfc, 0xd7, 0xdf, 0x8c, 0x09, 0xd2, 0xa6, 0xe7, 0x22, + 0xfe, 0x8c, 0x1b, 0x10, 0xa2, 0xa5, 0x7b, 0xf5, 0x94, 0x43, 0xc9, 0xa7, 0xd2, 0x09, + 0xd4, 0xb5, 0x45, 0xb9, 0x19, 0x83, 0x72, 0x08, 0xcb, 0x03, 0x6c, 0x34, 0x3d, 0x33, + 0x1a, 0x13, 0x25, 0x15, 0x06, 0xe0, 0x23, 0x82, 0x6a, 0x2a, 0x0a, 0x54, 0x3e, 0x1a, + 0x59, 0xa6, 0x48, 0x88, 0x1b, 0xa4, 0xd2, 0x7d, 0xda, 0x35, 0x80, 0x5f, 0x32, 0xc8, + 0x06, 0xe8, 0x91, 0xa5, 0x20, 0x6b, 0xb8, 0x75, 0x27, 0x17, 0xf2, 0xb1, 0x95, 0x69, + 0xc1, 0x7e, 0x69, 0xff, 0x06, 0xf5, 0x54, 0xdf, 0xaa, 0x47, 0xba, 0x91, 0x6d, 0x09, + 0x36, 0x30, 0x1a, 0xa5, 0x7e, 0x35, 0x48, 0x11, 0x6c, 0xc3, 0x76, 0xc2, 0xaa, 0x6f, + 0xc3, 0xad, 0x3a, 0xf2, 0x0c, 0xed, 0x6a, 0xc4, 0x5c, 0x98, 0x83, 0x30, 0x10, 0x9c, + 0xf1, 0x08, 0xfb, 0xff, 0x2e, 0x78, 0xe7, 0x10, 0xb3, 0x82, 0x9d, 0xd5, 0x8b, 0xdf, + 0xbc, 0x74, 0x06, 0x9c, 0x04, 0x5c, 0xa6, 0x86, 0xc3, 0x43, 0xcf, 0xec, 0x2b, 0xc2, + 0x10, 0xae, 0x47, 0xab, 0x48, 0x47, 0xd6, 0x5a, 0xe0, 0x45, 0x52, 0x67, 0x02, 0x17, + 0x1d, 0xb7, 0xcb, 0x1e, 0x84, 0x35, 0xad, 0xc8, 0x40, 0xc8, 0x94, 0x57, 0xc1, 0x0c, + 0x9d, 0x3c, 0x62, 0x8f, 0xa6, 0x59, 0xbc, 0x2c, 0x54, 0x6b, 0xf4, 0x0b, 0x68, 0x65, + 0x48, 0x7e, 0xdf, 0xe8, 0x2b, 0xd2, 0xbe, 0xbb, 0x76, 0xaf, 0x10, 0x2b, 0xf7, 0x1b, + 0x1c, 0xaf, 0x49, 0xad, 0x9b, 0xc5, 0x90, 0x52, 0x80, 0x3e, 0x04, 0xdd, 0x51, 0x9a, + 0x22, 0x41, 0xae, 0xb5, 0xce, 0x86, 0x88, 0xc5, 0x4e, 0xce, 0xfe, 0x0f, 0xe5, 0xb7, + 0x73, 0xc1, 0x84, 0xa1, 0xf4, 0x1c, 0x13, 0x81, 0xbf, 0x9e, 0x1b, 0x89, 0x5d, 0xa9, + 0x6c, 0x04, 0x25, 0x2e, 0x4e, 0xd8, 0x59, 0xa9, 0xc4, 0xaf, 0xa2, 0x66, 0x23, 0x79, + 0x42, 0x3a, 0xcd, 0x7e, 0x2c, 0xcd, 0xb4, 0xb3, 0x1f, 0x8d, 0xe4, 0x5c, 0xba, 0x9a, + 0x2c, 0xad, 0x02, 0xe8, 0xda, 0xc8, 0xd7, 0xc2, 0x30, 0xf6, 0xc5, 0xb2, 0xdb, 0x6a, + 0x91, 0x9e, 0x5c, 0x6c, 0xe4, 0x47, 0x7e, 0x1b, 0x9b, 0xa5, 0x67, 0x97, 0x69, 0x81, + 0x35, 0x9d, 0x50, 0x65, 0xeb, 0xbf, 0x1e, 0xae, 0x5e, 0x16, 0x90, 0x3e, 0xd7, 0xe8, + 0x28, 0x5c, 0xe5, 0x44, 0xdc, 0x0e, 0x3a, 0xf5, 0xd5, 0x23, 0x2e, 0x56, 0xd9, 0x2a, + 0xe0, 0xb2, 0xe1, 0xaa, 0x7a, 0x6a, 0x9d, 0x57, 0x4e, 0x2e, 0x97, 0x7c, 0x12, 0xa8, + 0xa3, 0xa6, 0x80, 0x5c, 0x8b, 0xa9, 0x56, 0xd8, 0x5e, 0x04, 0x6b, 0x79, 0xae, 0xb5, + 0xb5, 0x1c, 0xa1, 0x36, 0x73, 0xf9, 0xd9, 0xe0, 0xac, 0xbe, 0xee, 0xbc, 0x70, 0x55, + 0x5b, 0x30, 0xdd, 0xb8, 0x8b, 0xbf, 0x35, 0x41, 0x09, 0xae, 0xe8, 0x53, 0x55, 0x33, + 0x3f, 0xb1, 0x55, 0xeb, 0x3c, 0x90, 0xad, 0xdf, 0x5f, 0x5b, 0xeb, 0x99, 0xc9, 0x1d, + 0x49, 0x5e, 0xdb, 0x01, 0x3f, 0x8c, 0xd5, 0x20, 0xd4, 0x81, 0x1d, 0x51, 0x24, 0xb2, + 0xee, 0x17, 0x88, 0xde, 0xbf, 0xd7, 0x90, 0x1e, 0xbb, 0x73, 0xa0, 0xe6, 0x20, 0x42, + 0x75, 0x61, 0x52, 0xa8, 0x52, 0x44, 0x53, 0x56, 0x12, 0xc2, 0xb6, 0x37, 0x53, 0x08, + 0xee, 0xc5, 0x89, 0xaa, 0xc2, 0x57, 0xbd, 0x3b, 0x04, 0xd6, 0x5f, 0x29, 0x38, 0x12, + 0x7a, 0x92, 0x53, 0xad, 0xe4, 0xaa, 0xcb, 0x6f, 0x94, 0xae, 0x72, 0x9c, 0xf8, 0xa7, + 0xdb, 0x63, 0xfd, 0xd8, 0x00, 0x3c, 0xb1, 0x40, 0x8f, 0x21, 0x21, 0x37, 0x22, 0xe8, + 0xaa, 0xb7, 0xc4, 0x84, 0x7e, 0x4f, 0x6d, 0xd0, 0xcf, 0xff, 0x44, 0xb8, 0x2f, 0x90, + 0x0c, 0x66, 0x82, 0x2e, 0x24, 0xa3, 0x24, 0x0f, 0x68, 0x00, 0x03, 0x18, 0x96, 0xf8, + 0xe9, 0x8c, 0xe1, 0x5a, 0x24, 0x97, 0x28, 0x6d, 0x61, 0xbe, 0xed, 0xad, 0xa2, 0x91, + 0x17, 0xc1, 0x96, 0x07, 0x06, 0x24, 0x5f, 0x64, 0x39, 0x66, 0xf1, 0x61, 0x98, 0xb5, + 0xa5, 0xff, 0xce, 0x6b, 0x1e, 0x3d, 0x0b, 0xc1, 0x01, 0x4f, 0x5b, 0xb8, 0xc8, 0xc9, + 0x34, 0xb1, 0x62, 0x96, 0x4b, 0x14, 0x33, 0x19, 0x07, 0x0b, 0x09, 0x9e, 0xe6, 0x2d, + 0x42, 0x65, 0xf7, 0x67, 0x2a, 0xd5, 0xda, 0x77, 0x8a, 0xe4, 0x52, 0xe8, 0xe1, 0xaf, + 0x6b, 0xf4, 0xc1, 0x3a, 0x62, 0x1d, 0x06, 0xf6, 0x74, 0xf9, 0xfa, 0xad, 0xda, 0x90, + 0xe4, 0x98, 0xc8, 0xdd, 0xe9, 0xa5, 0xa8, 0x03, 0x41, 0x16, 0x17, 0x6b, 0x3b, 0x03, + 0xd0, 0x39, 0xeb, 0x54, 0x82, 0x7c, 0xe7, 0x0b, 0x45, 0x25, 0x89, 0x3a, 0x3c, 0x30, + 0xdc, 0x76, 0xe6, 0x7a, 0xfd, 0x45, 0x88, 0x28, 0x71, 0x8a, 0x39, 0x82, 0x3a, 0xf7, + 0xfa, 0x66, 0x41, 0x59, 0x1f, 0x29, 0x97, 0xcc, 0xfa, 0x67, 0xbd, 0x2d, 0x82, 0x91, + 0x26, 0x02, 0x3b, 0x35, 0x25, 0x16, 0x64, 0x79, 0xa9, 0xa3, 0x4e, 0x1a, 0x46, 0x99, + 0x62, 0x49, 0xc6, 0xbb, 0xe1, 0xdd, 0xa8, 0x05, 0x82, 0x16, 0x60, 0x98, 0x90, 0xea, + 0x62, 0x80, 0xdb, 0x11, 0x51, 0x75, 0x1e, 0x11, 0x65, 0x8c, 0x7d, 0x32, 0x48, 0x53, + 0x69, 0x8d, 0x7d, 0xaa, 0x8f, 0xff, 0xb2, 0x67, 0xf1, 0x72, 0xdd, 0x58, 0xfa, 0x9d, + 0x83, 0x83, 0xee, 0x8d, 0xbc, 0x8e, 0x18, 0x89, 0x2d, 0x9e, 0xfd, 0x52, 0x1d, 0x63, + 0x3c, 0x03, 0x40, 0x7b, 0xe6, 0x17, 0xe4, 0x89, 0x2f, 0xf2, 0x98, 0x0b, 0x5d, 0x6c, + 0x26, 0xce, 0x24, 0x02, 0x66, 0x44, 0xad, 0x4c, 0x17, 0x93, 0xc3, 0x37, 0x19, 0x00, + 0xde, 0x18, 0x83, 0x7f, 0x49, 0x8b, 0xec, 0x6e, 0x7d, 0xb7, 0x03, 0x70, 0x79, 0x71, + 0xe9, 0xce, 0x99, 0x0f, 0x3a, 0x41, 0x85, 0xd6, 0x9a, 0x1e, 0x06, 0x6b, 0x82, 0x83, + 0xde, 0xa6, 0xf3, 0xfb, 0xb7, 0x69, 0xae, 0x74, 0xa6, 0xbe, 0xf5, 0xea, 0x0d, 0x80, + 0x35, 0xc0, 0x13, 0x53, 0xd7, 0x2e, 0x51, 0x9d, 0xa2, 0x0d, 0x03, 0xd9, 0x73, 0x62, + 0x05, 0x07, 0x2a, 0x35, 0x5a, 0x7b, 0xfd, 0xe2, 0xc2, 0x07, 0x5d, 0xb0, 0xf9, 0xc5, + 0xc1, 0x50, 0x6f, 0x2e, 0x17, 0xe1, 0x0c, 0x30, 0x5b, 0x5f, 0x7a, 0xaf, 0x01, 0x55, + 0x9e, 0xdf, 0x00, 0xfa, 0x63, 0x7b, 0x46, 0xcd, 0x36, 0x7b, 0x1d, 0xed, 0x6f, 0x67, + 0xb2, 0x0e, 0x24, 0x5f, 0x2f, 0xa8, 0xea, 0xfe, 0x6a, 0x31, 0x5e, 0x8d, 0x61, 0xba, + 0xa1, 0x88, 0xb8, 0x34, 0x17, 0x98, 0x09, 0xd9, 0x51, 0x80, 0xa8, 0x5c, 0x0d, 0xc9, + 0x2f, 0x5e, 0x5e, 0x79, 0xce, 0xab, 0x48, 0x5c, 0x14, 0xc3, 0x33, 0xf2, 0x27, 0x8d, + 0x8b, 0xa1, 0xde, 0x8e, 0x31, 0x25, 0xf1, 0x36, 0xd0, 0x7e, 0xd8, 0x90, 0xd5, 0x69, + 0x39, 0x9c, 0x19, 0x3d, 0x09, 0x11, 0x41, 0xaf, 0x9b, 0x33, 0xb8, 0xe7, 0x4c, 0x71, + 0xf7, 0xf5, 0xaf, 0x94, 0x16, 0x07, 0xb7, 0xd4, 0x34, 0x6c, 0xdd, 0xef, 0xf8, 0x92, + 0x45, 0x5c, 0x46, 0x3c, 0x23, 0x77, 0xf6, 0x25, 0x77, 0x5c, 0x9b, 0xd9, 0xfa, 0xa8, + 0x84, 0xea, 0x6b, 0xd3, 0xf1, 0xf7, 0x33, 0xa9, 0x14, 0x46, 0xf2, 0x3d, 0x0f, 0x48, + 0xfb, 0x5d, 0xfc, 0xab, 0x21, 0x40, 0xef, 0xd6, 0xe1, 0xa1, 0xb6, 0x4a, 0x8e, 0x87, + 0x93, 0xe4, 0x2e, 0x8d, 0xa1, 0x06, 0xa8, 0xe7, 0x67, 0x65, 0x40, 0xc1, 0xdc, 0x3c, + 0x72, 0xe2, 0xd5, 0xcd, 0xe8, 0x76, 0xec, 0xcc, 0x77, 0x66, 0xf7, 0x17, 0xc2, 0x07, + 0x8a, 0x0b, 0x9c, 0x1e, 0x29, 0x71, 0xf6, 0x11, 0x9b, 0x4d, 0x65, 0xe6, 0x5f, 0x3f, + 0xa6, 0x29, 0xa6, 0x03, 0x80, 0xc1, 0x8e, 0x08, 0xa2, 0x11, 0xa9, 0x06, 0xd7, 0x3b, + 0xd2, 0x17, 0xca, 0x6e, 0xac, 0xa9, 0x0b, 0x64, 0xf3, 0xc3, 0x62, 0xb8, 0xa6, 0xb0, + 0x29, 0x64, 0x86, 0x1e, 0xaf, 0x28, 0xc0, 0x4d, 0xe0, 0xf7, 0xd0, 0x1d, 0x9f, 0x60, + 0x9a, 0xc4, 0x28, 0x7f, 0xf2, 0x7a, 0x0c, 0x70, 0xfc, 0xee, 0xc0, 0x31, 0x41, 0xa9, + 0xbf, 0xd8, 0xcc, 0x09, 0xb7, 0xc3, 0xe2, 0xc9, 0x2f, 0x4a, 0xbe, 0xa8, 0x1a, 0x3e, + 0x36, 0x17, 0x05, 0xb9, 0xf8, 0xec, 0x87, 0x3a, 0xc8, 0x0b, 0x35, 0x5a, 0x7a, 0x40, + 0x6f, 0xc4, 0xf6, 0xfc, 0xff, 0x13, 0x0e, 0xf8, 0x22, 0x5c, 0x8d, 0x3c, 0xf8, 0xec, + 0x2f, 0x29, 0xd5, 0xa5, 0xec, 0x51, 0x07, 0xf9, 0x67, 0x17, 0x2f, 0xfb, 0x48, 0x53, + 0x63, 0x0d, 0xb1, 0x4c, 0x91, 0x91, 0x33, 0x50, 0x78, 0x6c, 0x2c, 0xe8, 0xea, 0x72, + 0x8a, 0xaa, 0x4d, 0x18, 0x20, 0xe7, 0x93, 0x4c, 0x90, 0xdd, 0x44, 0xa7, 0x40, 0xad, + 0x11, 0x29, 0x72, 0xfb, 0x84, 0x10, 0x51, 0xb5, 0x81, 0xa9, 0x58, 0xbf, 0xaf, 0x57, + 0x71, 0xd1, 0x75, 0x97, 0x38, 0x6d, 0x60, 0xc3, 0x9d, 0xfc, 0x3d, 0x41, 0x5c, 0xef, + 0xf1, 0xaf, 0x3e, 0xf4, 0xaf, 0x79, 0x19, 0x18, 0x30, 0x19, 0xff, 0x78, 0x2c, 0xbd, + 0x49, 0x31, 0xf3, 0x94, 0x98, 0xa4, 0x27, 0x8e, 0x95, 0x0a, 0x0c, 0xe6, 0x99, 0x85, + 0x4a, 0x48, 0x8e, 0x40, 0xd0, 0xa8, 0x26, 0xab, 0xb2, 0x9f, 0xbe, 0xd0, 0xab, 0x56, + 0x58, 0x4f, 0xf7, 0xc6, 0xc0, 0xee, 0xda, 0x99, 0xf1, 0xc1, 0x89, 0x5b, 0x20, 0xa5, + 0x04, 0x2f, 0x1a, 0x4e, 0x9a, 0x73, 0xca, 0x2c, 0x5c, 0xb2, 0x02, 0x31, 0xc6, 0xf3, + 0xaa, 0xc4, 0x0f, 0x3a, 0x7c, 0xe7, 0x1f, 0x51, 0x42, 0xdf, 0xd0, 0x5a, 0x1b, 0x31, + 0xa2, 0xc1, 0xab, 0x0f, 0x94, 0xac, 0x4a, 0x66, 0x5a, 0x1d, 0x6b, 0xa6, 0xb6, 0x54, + 0xf4, 0x85, 0x08, 0x76, 0xad, 0x2f, 0xc3, 0xac, 0xc1, 0x34, 0x63, 0xa6, 0x49, 0x22, + 0x08, 0x0c, 0xc5, 0x7f, 0xc1, 0xf4, 0xf7, 0xb8, 0x28, 0x3a, 0xdd, 0x6a, 0xa2, 0xf7, + 0xd7, 0xf9, 0x1c, 0xa5, 0x74, 0x7d, 0x0f, 0xc3, 0x1b, 0xd9, 0xea, 0x52, 0x00, 0x8b, + 0x4e, 0xd5, 0x71, 0x37, 0xe9, 0xa4, 0x66, 0x44, 0xb4, 0x68, 0x5a, 0xef, 0x42, 0xce, + 0xc2, 0x25, 0x2a, 0xe9, 0xb1, 0xaa, 0x36, 0xd7, 0xaa, 0xab, 0x99, 0xf6, 0x25, 0x09, + 0x05, 0x62, 0x97, 0x60, 0xa5, 0xfe, 0xb7, 0x5d, 0xe3, 0x73, 0x7e, 0x6f, 0xe7, 0x4d, + 0x86, 0xb1, 0x1b, 0xcd, 0x87, 0x34, 0xa6, 0x77, 0xfe, 0x63, 0x1f, 0xb5, 0x7d, 0x79, + 0xbf, 0x4a, 0xd3, 0xf7, 0x53, 0x21, 0x50, 0xf0, 0x44, 0x8e, 0xe0, 0x7a, 0x7f, 0xed, + 0x94, 0x0b, 0x90, 0xdb, 0x92, 0x44, 0x1c, 0xa8, 0xac, 0x9c, 0x5f, 0xb2, 0x07, 0xb1, + 0x35, 0x0a, 0xbc, 0x2a, 0x87, 0xbd, 0xc6, 0x12, 0x17, 0xdd, 0xfd, 0x2b, 0x7a, 0xeb, + 0x75, 0xed, 0xf4, 0x7f, 0x77, 0x1d, 0xbe, 0xd3, 0xae, 0x7b, 0x11, 0x92, 0x07, 0xf4, + 0x43, 0xb2, 0x0f, 0x4f, 0x14, 0x86, 0xf3, 0x87, 0xb1, 0xe2, 0x0d, 0x81, 0xa5, 0x7d, + 0x03, 0xe1, 0x61, 0x24, 0xb7, 0xa4, 0x27, 0x76, 0xe8, 0x1b, 0xee, 0x21, 0xe2, 0x35, + 0x66, 0xfa, 0x3b, 0x35, 0xf3, 0x78, 0xa4, 0x83, 0x59, 0xa0, 0x61, 0x00, 0x4d, 0x87, + 0x6a, 0xb1, 0xe1, 0xbf, 0xa9, 0x5d, 0x42, 0xc7, 0xfe, 0x31, 0x9a, 0x17, 0x73, 0x99, + 0x6a, 0x6b, 0xd7, 0xb5, 0x54, 0x0b, 0x45, 0x6f, 0x52, 0xa2, 0x17, 0x70, 0xc8, 0x13, + 0xa9, 0xee, 0x9f, 0xa3, 0xf6, 0xba, 0x5a, 0xc8, 0xfe, 0xba, 0x52, 0xa5, 0x3a, 0x9f, + 0xba, 0x90, 0x64, 0xb3, 0x8c, 0x80, 0xbf, 0x57, 0x6c, 0xcb, 0x9c, 0xbb, 0x25, 0x26, + 0x21, 0x3b, 0xba, 0x4f, 0x14, 0x36, 0x7b, 0x38, 0x2d, 0x77, 0x44, 0x9b, 0x73, 0xf5, + 0x93, 0x69, 0x67, 0xfa, 0x7b, 0x19, 0x80, 0x0c, 0xa6, 0x6d, 0x43, 0xc4, 0xa3, 0x2a, + 0x9a, 0x1a, 0xea, 0x50, 0x02, 0x06, 0xd1, 0x46, 0x95, 0xd2, 0xd4, 0x5b, 0xab, 0x6e, + 0x44, 0x21, 0xb5, 0x49, 0xb0, 0xb1, 0x90, 0xf0, 0x08, 0x69, 0xf3, 0x4d, 0x86, 0xd6, + 0x50, 0x45, 0x9c, 0x63, 0x0b, 0x3e, 0x09, 0xa4, 0xed, 0x1d, 0xab, 0xe5, 0x45, 0x3f, + 0x5e, 0xc6, 0xda, 0xb7, 0xe4, 0x07, 0x0c, 0x27, 0xb2, 0x22, 0x1f, 0xcd, 0x66, 0x90, + 0xe6, 0xcc, 0xde, 0xa8, 0x35, 0xfd, 0x7c, 0x73, 0x9a, 0x92, 0xea, 0xaa, 0x67, 0xa1, + 0x18, 0x07, 0x0f, 0x20, 0xf7, 0x55, 0x3d, 0x0e, 0xc2, 0xc7, 0xf4, 0x4d, 0x06, 0xce, + 0xd3, 0xfd, 0x35, 0x6b, 0x91, 0x2d, 0xfc, 0x44, 0xcd, 0x66, 0x62, 0x8d, 0xa5, 0x39, + 0x91, 0xf3, 0xb8, 0xe9, 0x40, 0xb3, 0x62, 0x95, 0x60, 0x73, 0x9b, 0x10, 0x18, 0x4f, + 0xb9, 0x53, 0xa4, 0x2f, 0x13, 0xa6, 0xfc, 0x8a, 0xcf, 0xbd, 0x05, 0x38, 0xc0, 0x3e, + 0xa3, 0xb1, 0xa2, 0xbe, 0xe1, 0x81, 0x5c, 0x16, 0x17, 0x3a, 0x87, 0xa1, 0x02, 0xe1, + 0x2e, 0x22, 0xf6, 0x7a, 0x01, 0xc7, 0x7a, 0xe0, 0xd3, 0x30, 0x0e, 0x7b, 0xe2, 0x50, + 0x68, 0x7d, 0x5a, 0x20, 0x86, 0x9c, 0xaf, 0x22, 0xcb, 0x9a, 0xb4, 0x8c, 0x58, 0x1f, + 0x2c, 0x34, 0x69, 0x70, 0x47, 0x6d, 0xe2, 0xfd, 0x1a, 0x90, 0xd8, 0xd4, 0xb7, 0x2b, + 0xf1, 0xce, 0x30, 0x0e, 0x6e, 0x79, 0xf6, 0x74, 0xd5, 0x70, 0x39, 0xa5, 0x15, 0xc1, + 0x3a, 0xd7, 0xe7, 0x43, 0xa4, 0x52, 0x33, 0x5f, 0xbb, 0x93, 0x9c, 0x70, 0xf3, 0x4a, + 0x51, 0x61, 0xaa, 0x5a, 0xde, 0x60, 0xfd, 0x57, 0x7c, 0x70, 0x5b, 0x3a, 0x26, 0x78, + 0x42, 0x73, 0x0d, 0xcc, 0x6b, 0x3a, 0x52, 0xd5, 0x85, 0xef, 0x00, 0x22, 0x11, 0x19, + 0x1e, 0xbc, 0x62, 0x4c, 0x6b, 0x11, 0x0d, 0x77, 0x4d, 0xfa, 0x3d, 0xfc, 0x4f, 0x8b, + 0x47, 0x31, 0x9d, 0x72, 0x94, 0x9b, 0x5f, 0xc5, 0x90, 0xc9, 0xce, 0x91, 0x44, 0x47, + 0x16, 0x66, 0x93, 0xfa, 0x4b, 0xd0, 0xac, 0xbf, 0x44, 0x71, 0x8b, 0x31, 0x34, 0x11, + 0xea, 0xec, 0xdc, 0x40, 0xed, 0x84, 0x48, 0x68, 0x57, 0x85, 0xf0, 0x42, 0xad, 0xa0, + 0xf9, 0x49, 0x51, 0xc1, 0xa4, 0xa0, 0x4f, 0x5f, 0x71, 0xfd, 0x96, 0x1a, 0x05, 0xcb, + 0x4c, 0x2b, 0x84, 0xd7, 0xbc, 0x5a, 0x8e, 0x6b, 0xc6, 0xf1, 0x18, 0x80, 0x92, 0xa1, + 0xa1, 0x0f, 0xbb, 0x35, 0x39, 0x5f, 0xd2, 0x06, 0xfc, 0x9b, 0x5c, 0x00, 0x55, 0x08, + 0x73, 0xa7, 0xfc, 0x4c, 0x80, 0x05, 0x14, 0xdb, 0x74, 0x31, 0x7a, 0xe3, 0x76, 0x59, + 0xd0, 0x89, 0xd4, 0xeb, 0xc1, 0xbf, 0x8c, 0x0e, 0x34, 0x35, 0x01, 0xdc, 0xc2, 0x64, + 0x7d, 0x37, 0xbb, 0xd7, 0xbe, 0xeb, 0x09, 0x95, 0x64, 0xa1, 0x35, 0xbb, 0x41, 0x3b, + 0x10, 0xde, + ]; + + let digest_512 = [ + 0x83, 0xe5, 0xbc, 0xa0, 0xe0, 0x52, 0xd0, 0x01, 0x3b, 0xa8, 0x9f, 0x5f, 0x33, 0xf4, + 0xb3, 0xea, 0x15, 0x49, 0xfc, 0x2a, 0x99, 0xac, 0x4f, 0xd9, 0x16, 0x5b, 0x78, 0x12, + 0x75, 0xdc, 0x58, 0x39, 0x92, 0x4c, 0x36, 0xa9, 0x5c, 0x6a, 0xe0, 0xdf, 0x68, 0x67, + 0xfa, 0x93, 0xa9, 0x8c, 0x1e, 0xd4, 0x61, 0x0c, 0xbb, 0xa4, 0xd6, 0x71, 0xad, 0x8d, + 0x30, 0x24, 0xa5, 0xca, 0xe3, 0x63, 0xd8, 0x5e, + ]; + + let pk = PublicKey::try_from_bytes(pk_bytes).unwrap(); + } } From 948b7e70a1195b7cbbf5d736339c3ee526878e23 Mon Sep 17 00:00:00 2001 From: Max Timkovich Date: Tue, 31 Dec 2024 12:14:28 -0800 Subject: [PATCH 3/6] key stuff --- Cargo.lock | 1 + image/gen/src/generator.rs | 10 - image/verify/src/verifier.rs | 16 +- .../tools/mldsa_keys/vnd-mldsa-priv-key-3.bin | Bin 4896 -> 4896 bytes .../tools/mldsa_keys/vnd-mldsa-pub-key-3.bin | Bin 2592 -> 2592 bytes sw-emulator/lib/periph/Cargo.toml | 1 + sw-emulator/lib/periph/src/ml_dsa87.rs | 876 ++++++++++++++---- 7 files changed, 679 insertions(+), 225 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7f1c2dc48b..8bc12da5a5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -478,6 +478,7 @@ dependencies = [ "caliptra-emu-derive", "caliptra-emu-types", "caliptra-hw-model-types", + "caliptra-image-types", "caliptra-registers", "fips204", "lazy_static", diff --git a/image/gen/src/generator.rs b/image/gen/src/generator.rs index e1ee33e9a6..61f1404414 100644 --- a/image/gen/src/generator.rs +++ b/image/gen/src/generator.rs @@ -222,16 +222,6 @@ impl ImageGenerator { let sig = mldsa_sig.as_bytes(); - println!("sk"); - let sk = priv_keys.mldsa_priv_keys[pqc_vendor_key_idx as usize]; - for n in sk.0.iter() { - println!("0x{:x}", n); - } - - // println!("sig"); - // for n in sig.iter() { - // println!("0x{:x}", n); - // } vendor_sigs.pqc_sig.0[..sig.len()].copy_from_slice(sig); }; } diff --git a/image/verify/src/verifier.rs b/image/verify/src/verifier.rs index e93b570639..b5cc39e481 100644 --- a/image/verify/src/verifier.rs +++ b/image/verify/src/verifier.rs @@ -636,6 +636,8 @@ impl ImageVerifier { // Verify the PQC (LMS or MLDSA) public key index used to verify header signature is encoded // in the header if cfi_launder(header.vendor_pqc_pub_key_idx) != info.vendor_pqc_pub_key_idx { + cprintln!("cfi idx: {}", cfi_launder(header.vendor_pqc_pub_key_idx)); + cprintln!("info idx: {}", info.vendor_pqc_pub_key_idx); return Err(CaliptraError::IMAGE_VERIFIER_ERR_VENDOR_PQC_PUB_KEY_INDEX_MISMATCH); } else { cfi_assert_eq(header.vendor_pqc_pub_key_idx, info.vendor_pqc_pub_key_idx); @@ -765,20 +767,6 @@ impl ImageVerifier { } PqcKeyInfo::Mldsa(mldsa_pub_key, mldsa_sig) => { if let Some(digest_512) = digest_holder.digest_512 { - // cprintln!("pub_key"); - // for n in mldsa_pub_key.0.iter() { - // cprintln!("0x{:x}", *n); - // } - cprintln!("digest_512"); - for n in digest_512.iter() { - cprintln!("0x{:x}", *n); - } - - // cprintln!("mldsa_sig"); - // for n in mldsa_sig.0.iter().take(8) { - // cprintln!("0x{:x}", *n); - // } - let result = self .env .mldsa87_verify(digest_512, mldsa_pub_key, mldsa_sig) diff --git a/rom/dev/tools/mldsa_keys/vnd-mldsa-priv-key-3.bin b/rom/dev/tools/mldsa_keys/vnd-mldsa-priv-key-3.bin index 14818ad0aae8fe2d3a868795b8cf207cc55d53f5..8678ce5e61961642f375d9dab305fb101e7ed66f 100644 GIT binary patch literal 4896 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 SPD|^L(lrZ0hUsEMA~LkUKB8{` literal 4896 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 S898r7udwP)|1sxnZSzUeE`fgl diff --git a/rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-3.bin b/rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-3.bin index 6ee28f2e6fa069893209996be78b78742eb2f701..c489e177ecc5b1be9a52a89d7c58eeeace581cdd 100644 GIT binary patch literal 2592 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 C_5Yaw diff --git a/sw-emulator/lib/periph/Cargo.toml b/sw-emulator/lib/periph/Cargo.toml index 3c3bfe48cc..5ba2a8607c 100644 --- a/sw-emulator/lib/periph/Cargo.toml +++ b/sw-emulator/lib/periph/Cargo.toml @@ -17,6 +17,7 @@ caliptra-emu-cpu.workspace = true caliptra-emu-crypto.workspace = true caliptra-emu-derive.workspace = true caliptra-emu-types.workspace = true +caliptra-image-types.workspace = true caliptra-hw-model-types.workspace = true caliptra-registers.workspace = true fips204.workspace = true diff --git a/sw-emulator/lib/periph/src/ml_dsa87.rs b/sw-emulator/lib/periph/src/ml_dsa87.rs index 547475b979..b8e4f7d52f 100644 --- a/sw-emulator/lib/periph/src/ml_dsa87.rs +++ b/sw-emulator/lib/periph/src/ml_dsa87.rs @@ -17,6 +17,7 @@ use crate::{KeyUsage, KeyVault}; use caliptra_emu_bus::{ActionHandle, BusError, Clock, ReadOnlyRegister, ReadWriteRegister, Timer}; use caliptra_emu_derive::Bus; use caliptra_emu_types::{RvData, RvSize}; +// use caliptra_image_types::ImageMldsaPubKey; use fips204::ml_dsa_87::{try_keygen_with_rng, PrivateKey, PublicKey, PK_LEN, SIG_LEN, SK_LEN}; use fips204::traits::{SerDes, Signer, Verifier}; use rand::{CryptoRng, Rng, RngCore}; @@ -861,206 +862,679 @@ mod tests { } } + // const MLDSA87_PUB_KEY_BYTE_SIZE: usize = 2592; + // const MLDSA87_PUB_KEY_WORD_SIZE: usize = 648; + // const MLDSA87_PRIV_KEY_BYTE_SIZE: usize = 4896; + // const MLDSA87_PRIV_KEY_WORD_SIZE: usize = 1224; + // const MLDSA87_SIGNATURE_BYTE_SIZE: usize = 4628; + // const MLDSA87_SIGNATURE_WORD_SIZE: usize = 1157; + // const MLDSA87_MSG_BYTE_SIZE: usize = 64; + + // fn from_hw_format(value: &[u32; MLDSA87_PUB_KEY_WORD_SIZE]) -> [u8; MLDSA87_PUB_KEY_BYTE_SIZE] { + // let mut result = [0u8; MLDSA87_PUB_KEY_BYTE_SIZE]; + // for i in 0..value.len() { + // *<&mut [u8; 4]>::try_from(&mut result[i * 4..][..4]).unwrap() = value[i].to_be_bytes(); + // } + // result + // } + // pub priv digest sig - #[test] - fn test_mtimkovich() { - let pk_bytes = [ - 0x0b, 0x7e, 0xf5, 0xca, 0xcd, 0x20, 0xe0, 0x6a, 0x2e, 0x68, 0x01, 0xb8, 0x73, 0x0e, - 0x3a, 0xe1, 0x7f, 0x0c, 0xee, 0x89, 0x46, 0x54, 0x85, 0x7c, 0x49, 0xe2, 0x1a, 0xfe, - 0x7a, 0x52, 0x36, 0xef, 0xb3, 0x46, 0x3c, 0x87, 0x43, 0xaf, 0x36, 0x50, 0xb0, 0xfe, - 0x98, 0x46, 0xe6, 0xd1, 0xff, 0xdc, 0xed, 0xdf, 0x5f, 0x2a, 0xce, 0x44, 0x03, 0xf6, - 0xe7, 0xcc, 0x93, 0xa8, 0x9a, 0xa5, 0xb1, 0xa0, 0x71, 0x56, 0xe4, 0x82, 0x63, 0xf2, - 0xae, 0xf9, 0xe1, 0xd7, 0xf2, 0x12, 0x6f, 0xef, 0x2c, 0x00, 0x26, 0x84, 0x41, 0xe2, - 0x53, 0x1f, 0x17, 0x49, 0x1d, 0x5b, 0x5e, 0xb3, 0x9c, 0x48, 0x0e, 0x67, 0xad, 0xb7, - 0x87, 0xbd, 0x62, 0xe0, 0x83, 0x3f, 0xa2, 0x3b, 0x1f, 0x1c, 0x3b, 0x77, 0x6f, 0x12, - 0x3a, 0xf4, 0x95, 0xda, 0x0f, 0xce, 0xe3, 0x69, 0xbe, 0x3b, 0x29, 0xf0, 0xe9, 0x55, - 0xc5, 0x7a, 0x8c, 0x38, 0x1c, 0xe7, 0xf9, 0x07, 0x68, 0x5f, 0x57, 0x35, 0xd0, 0x56, - 0x8d, 0x48, 0xf9, 0xd0, 0x23, 0x47, 0x3d, 0x31, 0x21, 0x4e, 0x53, 0x0f, 0xfa, 0x26, - 0x75, 0x37, 0x7c, 0x58, 0xaf, 0xb7, 0x9a, 0x88, 0x5b, 0xa9, 0x48, 0xd5, 0x38, 0x91, - 0xbe, 0x2a, 0x52, 0x64, 0x4e, 0x81, 0x62, 0xf2, 0x85, 0x6b, 0xf0, 0xd6, 0x4b, 0x22, - 0x06, 0x5b, 0x72, 0x27, 0x0c, 0x2c, 0x14, 0xae, 0x5e, 0x8c, 0x0d, 0xf5, 0x96, 0x22, - 0x8b, 0xf0, 0x69, 0xd5, 0xd7, 0x65, 0x63, 0x28, 0x03, 0xd3, 0xe8, 0xa7, 0xf5, 0xf0, - 0xca, 0xe9, 0x0b, 0x7e, 0x66, 0x19, 0x63, 0x8f, 0xc6, 0x77, 0x89, 0x01, 0x30, 0x21, - 0x85, 0xea, 0x0a, 0xef, 0x31, 0x04, 0xfc, 0x03, 0xc1, 0x73, 0xda, 0x74, 0x50, 0x4a, - 0x50, 0xaa, 0x49, 0xc3, 0x45, 0x81, 0xb1, 0xb2, 0xe7, 0x25, 0x35, 0xf4, 0xc6, 0x24, - 0xf6, 0x66, 0x25, 0xd4, 0x3e, 0x13, 0xbd, 0xfe, 0x5e, 0x5c, 0xdf, 0x8e, 0x5c, 0x65, - 0x4b, 0x5f, 0xdc, 0x28, 0xaa, 0xc8, 0x19, 0x08, 0x08, 0xb9, 0x9b, 0x01, 0x60, 0x28, - 0xa1, 0x49, 0x03, 0xcb, 0xc4, 0x3c, 0x5e, 0x8f, 0xea, 0x62, 0x38, 0x97, 0x47, 0x4f, - 0x30, 0x0b, 0x87, 0x90, 0xc6, 0xab, 0x6d, 0x3c, 0xa6, 0x45, 0xd3, 0x13, 0x6b, 0xdf, - 0xd3, 0x8e, 0x05, 0x0f, 0xb5, 0xbc, 0x05, 0xcd, 0x35, 0x3b, 0x07, 0x81, 0x41, 0x94, - 0xaf, 0x36, 0xb9, 0x11, 0x1e, 0xf6, 0xbb, 0xe7, 0x66, 0xfa, 0x3d, 0x50, 0x25, 0x22, - 0x21, 0xd1, 0x80, 0x30, 0x1b, 0x8a, 0x56, 0xb4, 0x92, 0xf6, 0x76, 0x9e, 0xa9, 0x6a, - 0x19, 0xff, 0xe3, 0xa3, 0xbf, 0xf8, 0x07, 0x8d, 0xef, 0x97, 0xbb, 0xb4, 0xa6, 0x52, - 0xc0, 0x65, 0x0a, 0x38, 0xbc, 0x2c, 0x25, 0x3a, 0xed, 0x73, 0xed, 0x45, 0xc0, 0x23, - 0x6e, 0x9f, 0x8f, 0x2c, 0x1a, 0xca, 0x3d, 0x76, 0x73, 0x91, 0x18, 0x7c, 0x08, 0xed, - 0xff, 0x42, 0x1e, 0x59, 0x8d, 0xa0, 0xc6, 0xc7, 0xd3, 0xf4, 0xa8, 0xf5, 0xfb, 0x3a, - 0x30, 0x11, 0x37, 0x7f, 0x60, 0xe4, 0x6c, 0x4b, 0x72, 0xa0, 0xc8, 0xbf, 0xb8, 0xed, - 0x51, 0x8d, 0xe2, 0x1b, 0x30, 0x4a, 0xac, 0xfd, 0xc2, 0xc8, 0x34, 0x9c, 0x9a, 0x4c, - 0x0a, 0x3f, 0x68, 0xe0, 0xf7, 0x34, 0xd0, 0x36, 0xbd, 0xde, 0x50, 0x79, 0xca, 0x4a, - 0x48, 0x21, 0xe9, 0xda, 0x6a, 0xfd, 0x4d, 0x57, 0xe3, 0x9e, 0x8b, 0x4a, 0xd0, 0x22, - 0xf4, 0xb4, 0xac, 0x02, 0x82, 0x34, 0x86, 0x66, 0xcf, 0x81, 0x47, 0xfb, 0x0d, 0x56, - 0x19, 0x98, 0xe4, 0x31, 0x56, 0x2f, 0xaf, 0xc4, 0xfd, 0x64, 0xa7, 0x98, 0x04, 0x09, - 0xb1, 0x47, 0x08, 0xe3, 0x63, 0xd6, 0x1f, 0x5b, 0x74, 0x4a, 0x8e, 0xb0, 0x2b, 0xb1, - 0x18, 0xc8, 0x8a, 0xce, 0x80, 0x2b, 0xb6, 0x17, 0xb9, 0x29, 0x0d, 0x81, 0x78, 0xf1, - 0x04, 0xc5, 0xe3, 0x31, 0xc6, 0xf3, 0x22, 0x16, 0x8c, 0x52, 0x06, 0x73, 0xc5, 0x16, - 0x6d, 0x13, 0xf4, 0x30, 0xdc, 0xc5, 0x0b, 0xf6, 0x5f, 0x09, 0x37, 0x5e, 0x71, 0x37, - 0x16, 0xe2, 0xb2, 0xbe, 0xf1, 0xa4, 0x84, 0x42, 0xac, 0xf9, 0x65, 0x8e, 0xf8, 0xcd, - 0xf2, 0x3f, 0xa6, 0x1e, 0x58, 0xc6, 0x67, 0x6e, 0xf7, 0x37, 0xaa, 0x95, 0xc8, 0x83, - 0x1f, 0x34, 0x4c, 0xa6, 0x40, 0xd0, 0xa4, 0x92, 0x5e, 0x40, 0x4c, 0x3e, 0x4a, 0xbc, - 0xa1, 0x69, 0x54, 0x4c, 0x7a, 0xdc, 0xed, 0x15, 0xa3, 0x89, 0x9a, 0x5a, 0x38, 0xd7, - 0xcf, 0xb9, 0x78, 0xe8, 0x84, 0x6e, 0xeb, 0x6a, 0xba, 0x8c, 0xa7, 0xa8, 0x8a, 0xee, - 0xb8, 0x8b, 0x87, 0xae, 0x9c, 0xcb, 0x8d, 0xd7, 0x50, 0xc7, 0x59, 0xde, 0xce, 0xbf, - 0x59, 0x92, 0x38, 0x9e, 0x22, 0x91, 0xf7, 0x79, 0x19, 0xbe, 0xfb, 0xdf, 0x4e, 0xcd, - 0x6a, 0xe8, 0x49, 0x99, 0xc8, 0xfc, 0xd7, 0xdf, 0x8c, 0x09, 0xd2, 0xa6, 0xe7, 0x22, - 0xfe, 0x8c, 0x1b, 0x10, 0xa2, 0xa5, 0x7b, 0xf5, 0x94, 0x43, 0xc9, 0xa7, 0xd2, 0x09, - 0xd4, 0xb5, 0x45, 0xb9, 0x19, 0x83, 0x72, 0x08, 0xcb, 0x03, 0x6c, 0x34, 0x3d, 0x33, - 0x1a, 0x13, 0x25, 0x15, 0x06, 0xe0, 0x23, 0x82, 0x6a, 0x2a, 0x0a, 0x54, 0x3e, 0x1a, - 0x59, 0xa6, 0x48, 0x88, 0x1b, 0xa4, 0xd2, 0x7d, 0xda, 0x35, 0x80, 0x5f, 0x32, 0xc8, - 0x06, 0xe8, 0x91, 0xa5, 0x20, 0x6b, 0xb8, 0x75, 0x27, 0x17, 0xf2, 0xb1, 0x95, 0x69, - 0xc1, 0x7e, 0x69, 0xff, 0x06, 0xf5, 0x54, 0xdf, 0xaa, 0x47, 0xba, 0x91, 0x6d, 0x09, - 0x36, 0x30, 0x1a, 0xa5, 0x7e, 0x35, 0x48, 0x11, 0x6c, 0xc3, 0x76, 0xc2, 0xaa, 0x6f, - 0xc3, 0xad, 0x3a, 0xf2, 0x0c, 0xed, 0x6a, 0xc4, 0x5c, 0x98, 0x83, 0x30, 0x10, 0x9c, - 0xf1, 0x08, 0xfb, 0xff, 0x2e, 0x78, 0xe7, 0x10, 0xb3, 0x82, 0x9d, 0xd5, 0x8b, 0xdf, - 0xbc, 0x74, 0x06, 0x9c, 0x04, 0x5c, 0xa6, 0x86, 0xc3, 0x43, 0xcf, 0xec, 0x2b, 0xc2, - 0x10, 0xae, 0x47, 0xab, 0x48, 0x47, 0xd6, 0x5a, 0xe0, 0x45, 0x52, 0x67, 0x02, 0x17, - 0x1d, 0xb7, 0xcb, 0x1e, 0x84, 0x35, 0xad, 0xc8, 0x40, 0xc8, 0x94, 0x57, 0xc1, 0x0c, - 0x9d, 0x3c, 0x62, 0x8f, 0xa6, 0x59, 0xbc, 0x2c, 0x54, 0x6b, 0xf4, 0x0b, 0x68, 0x65, - 0x48, 0x7e, 0xdf, 0xe8, 0x2b, 0xd2, 0xbe, 0xbb, 0x76, 0xaf, 0x10, 0x2b, 0xf7, 0x1b, - 0x1c, 0xaf, 0x49, 0xad, 0x9b, 0xc5, 0x90, 0x52, 0x80, 0x3e, 0x04, 0xdd, 0x51, 0x9a, - 0x22, 0x41, 0xae, 0xb5, 0xce, 0x86, 0x88, 0xc5, 0x4e, 0xce, 0xfe, 0x0f, 0xe5, 0xb7, - 0x73, 0xc1, 0x84, 0xa1, 0xf4, 0x1c, 0x13, 0x81, 0xbf, 0x9e, 0x1b, 0x89, 0x5d, 0xa9, - 0x6c, 0x04, 0x25, 0x2e, 0x4e, 0xd8, 0x59, 0xa9, 0xc4, 0xaf, 0xa2, 0x66, 0x23, 0x79, - 0x42, 0x3a, 0xcd, 0x7e, 0x2c, 0xcd, 0xb4, 0xb3, 0x1f, 0x8d, 0xe4, 0x5c, 0xba, 0x9a, - 0x2c, 0xad, 0x02, 0xe8, 0xda, 0xc8, 0xd7, 0xc2, 0x30, 0xf6, 0xc5, 0xb2, 0xdb, 0x6a, - 0x91, 0x9e, 0x5c, 0x6c, 0xe4, 0x47, 0x7e, 0x1b, 0x9b, 0xa5, 0x67, 0x97, 0x69, 0x81, - 0x35, 0x9d, 0x50, 0x65, 0xeb, 0xbf, 0x1e, 0xae, 0x5e, 0x16, 0x90, 0x3e, 0xd7, 0xe8, - 0x28, 0x5c, 0xe5, 0x44, 0xdc, 0x0e, 0x3a, 0xf5, 0xd5, 0x23, 0x2e, 0x56, 0xd9, 0x2a, - 0xe0, 0xb2, 0xe1, 0xaa, 0x7a, 0x6a, 0x9d, 0x57, 0x4e, 0x2e, 0x97, 0x7c, 0x12, 0xa8, - 0xa3, 0xa6, 0x80, 0x5c, 0x8b, 0xa9, 0x56, 0xd8, 0x5e, 0x04, 0x6b, 0x79, 0xae, 0xb5, - 0xb5, 0x1c, 0xa1, 0x36, 0x73, 0xf9, 0xd9, 0xe0, 0xac, 0xbe, 0xee, 0xbc, 0x70, 0x55, - 0x5b, 0x30, 0xdd, 0xb8, 0x8b, 0xbf, 0x35, 0x41, 0x09, 0xae, 0xe8, 0x53, 0x55, 0x33, - 0x3f, 0xb1, 0x55, 0xeb, 0x3c, 0x90, 0xad, 0xdf, 0x5f, 0x5b, 0xeb, 0x99, 0xc9, 0x1d, - 0x49, 0x5e, 0xdb, 0x01, 0x3f, 0x8c, 0xd5, 0x20, 0xd4, 0x81, 0x1d, 0x51, 0x24, 0xb2, - 0xee, 0x17, 0x88, 0xde, 0xbf, 0xd7, 0x90, 0x1e, 0xbb, 0x73, 0xa0, 0xe6, 0x20, 0x42, - 0x75, 0x61, 0x52, 0xa8, 0x52, 0x44, 0x53, 0x56, 0x12, 0xc2, 0xb6, 0x37, 0x53, 0x08, - 0xee, 0xc5, 0x89, 0xaa, 0xc2, 0x57, 0xbd, 0x3b, 0x04, 0xd6, 0x5f, 0x29, 0x38, 0x12, - 0x7a, 0x92, 0x53, 0xad, 0xe4, 0xaa, 0xcb, 0x6f, 0x94, 0xae, 0x72, 0x9c, 0xf8, 0xa7, - 0xdb, 0x63, 0xfd, 0xd8, 0x00, 0x3c, 0xb1, 0x40, 0x8f, 0x21, 0x21, 0x37, 0x22, 0xe8, - 0xaa, 0xb7, 0xc4, 0x84, 0x7e, 0x4f, 0x6d, 0xd0, 0xcf, 0xff, 0x44, 0xb8, 0x2f, 0x90, - 0x0c, 0x66, 0x82, 0x2e, 0x24, 0xa3, 0x24, 0x0f, 0x68, 0x00, 0x03, 0x18, 0x96, 0xf8, - 0xe9, 0x8c, 0xe1, 0x5a, 0x24, 0x97, 0x28, 0x6d, 0x61, 0xbe, 0xed, 0xad, 0xa2, 0x91, - 0x17, 0xc1, 0x96, 0x07, 0x06, 0x24, 0x5f, 0x64, 0x39, 0x66, 0xf1, 0x61, 0x98, 0xb5, - 0xa5, 0xff, 0xce, 0x6b, 0x1e, 0x3d, 0x0b, 0xc1, 0x01, 0x4f, 0x5b, 0xb8, 0xc8, 0xc9, - 0x34, 0xb1, 0x62, 0x96, 0x4b, 0x14, 0x33, 0x19, 0x07, 0x0b, 0x09, 0x9e, 0xe6, 0x2d, - 0x42, 0x65, 0xf7, 0x67, 0x2a, 0xd5, 0xda, 0x77, 0x8a, 0xe4, 0x52, 0xe8, 0xe1, 0xaf, - 0x6b, 0xf4, 0xc1, 0x3a, 0x62, 0x1d, 0x06, 0xf6, 0x74, 0xf9, 0xfa, 0xad, 0xda, 0x90, - 0xe4, 0x98, 0xc8, 0xdd, 0xe9, 0xa5, 0xa8, 0x03, 0x41, 0x16, 0x17, 0x6b, 0x3b, 0x03, - 0xd0, 0x39, 0xeb, 0x54, 0x82, 0x7c, 0xe7, 0x0b, 0x45, 0x25, 0x89, 0x3a, 0x3c, 0x30, - 0xdc, 0x76, 0xe6, 0x7a, 0xfd, 0x45, 0x88, 0x28, 0x71, 0x8a, 0x39, 0x82, 0x3a, 0xf7, - 0xfa, 0x66, 0x41, 0x59, 0x1f, 0x29, 0x97, 0xcc, 0xfa, 0x67, 0xbd, 0x2d, 0x82, 0x91, - 0x26, 0x02, 0x3b, 0x35, 0x25, 0x16, 0x64, 0x79, 0xa9, 0xa3, 0x4e, 0x1a, 0x46, 0x99, - 0x62, 0x49, 0xc6, 0xbb, 0xe1, 0xdd, 0xa8, 0x05, 0x82, 0x16, 0x60, 0x98, 0x90, 0xea, - 0x62, 0x80, 0xdb, 0x11, 0x51, 0x75, 0x1e, 0x11, 0x65, 0x8c, 0x7d, 0x32, 0x48, 0x53, - 0x69, 0x8d, 0x7d, 0xaa, 0x8f, 0xff, 0xb2, 0x67, 0xf1, 0x72, 0xdd, 0x58, 0xfa, 0x9d, - 0x83, 0x83, 0xee, 0x8d, 0xbc, 0x8e, 0x18, 0x89, 0x2d, 0x9e, 0xfd, 0x52, 0x1d, 0x63, - 0x3c, 0x03, 0x40, 0x7b, 0xe6, 0x17, 0xe4, 0x89, 0x2f, 0xf2, 0x98, 0x0b, 0x5d, 0x6c, - 0x26, 0xce, 0x24, 0x02, 0x66, 0x44, 0xad, 0x4c, 0x17, 0x93, 0xc3, 0x37, 0x19, 0x00, - 0xde, 0x18, 0x83, 0x7f, 0x49, 0x8b, 0xec, 0x6e, 0x7d, 0xb7, 0x03, 0x70, 0x79, 0x71, - 0xe9, 0xce, 0x99, 0x0f, 0x3a, 0x41, 0x85, 0xd6, 0x9a, 0x1e, 0x06, 0x6b, 0x82, 0x83, - 0xde, 0xa6, 0xf3, 0xfb, 0xb7, 0x69, 0xae, 0x74, 0xa6, 0xbe, 0xf5, 0xea, 0x0d, 0x80, - 0x35, 0xc0, 0x13, 0x53, 0xd7, 0x2e, 0x51, 0x9d, 0xa2, 0x0d, 0x03, 0xd9, 0x73, 0x62, - 0x05, 0x07, 0x2a, 0x35, 0x5a, 0x7b, 0xfd, 0xe2, 0xc2, 0x07, 0x5d, 0xb0, 0xf9, 0xc5, - 0xc1, 0x50, 0x6f, 0x2e, 0x17, 0xe1, 0x0c, 0x30, 0x5b, 0x5f, 0x7a, 0xaf, 0x01, 0x55, - 0x9e, 0xdf, 0x00, 0xfa, 0x63, 0x7b, 0x46, 0xcd, 0x36, 0x7b, 0x1d, 0xed, 0x6f, 0x67, - 0xb2, 0x0e, 0x24, 0x5f, 0x2f, 0xa8, 0xea, 0xfe, 0x6a, 0x31, 0x5e, 0x8d, 0x61, 0xba, - 0xa1, 0x88, 0xb8, 0x34, 0x17, 0x98, 0x09, 0xd9, 0x51, 0x80, 0xa8, 0x5c, 0x0d, 0xc9, - 0x2f, 0x5e, 0x5e, 0x79, 0xce, 0xab, 0x48, 0x5c, 0x14, 0xc3, 0x33, 0xf2, 0x27, 0x8d, - 0x8b, 0xa1, 0xde, 0x8e, 0x31, 0x25, 0xf1, 0x36, 0xd0, 0x7e, 0xd8, 0x90, 0xd5, 0x69, - 0x39, 0x9c, 0x19, 0x3d, 0x09, 0x11, 0x41, 0xaf, 0x9b, 0x33, 0xb8, 0xe7, 0x4c, 0x71, - 0xf7, 0xf5, 0xaf, 0x94, 0x16, 0x07, 0xb7, 0xd4, 0x34, 0x6c, 0xdd, 0xef, 0xf8, 0x92, - 0x45, 0x5c, 0x46, 0x3c, 0x23, 0x77, 0xf6, 0x25, 0x77, 0x5c, 0x9b, 0xd9, 0xfa, 0xa8, - 0x84, 0xea, 0x6b, 0xd3, 0xf1, 0xf7, 0x33, 0xa9, 0x14, 0x46, 0xf2, 0x3d, 0x0f, 0x48, - 0xfb, 0x5d, 0xfc, 0xab, 0x21, 0x40, 0xef, 0xd6, 0xe1, 0xa1, 0xb6, 0x4a, 0x8e, 0x87, - 0x93, 0xe4, 0x2e, 0x8d, 0xa1, 0x06, 0xa8, 0xe7, 0x67, 0x65, 0x40, 0xc1, 0xdc, 0x3c, - 0x72, 0xe2, 0xd5, 0xcd, 0xe8, 0x76, 0xec, 0xcc, 0x77, 0x66, 0xf7, 0x17, 0xc2, 0x07, - 0x8a, 0x0b, 0x9c, 0x1e, 0x29, 0x71, 0xf6, 0x11, 0x9b, 0x4d, 0x65, 0xe6, 0x5f, 0x3f, - 0xa6, 0x29, 0xa6, 0x03, 0x80, 0xc1, 0x8e, 0x08, 0xa2, 0x11, 0xa9, 0x06, 0xd7, 0x3b, - 0xd2, 0x17, 0xca, 0x6e, 0xac, 0xa9, 0x0b, 0x64, 0xf3, 0xc3, 0x62, 0xb8, 0xa6, 0xb0, - 0x29, 0x64, 0x86, 0x1e, 0xaf, 0x28, 0xc0, 0x4d, 0xe0, 0xf7, 0xd0, 0x1d, 0x9f, 0x60, - 0x9a, 0xc4, 0x28, 0x7f, 0xf2, 0x7a, 0x0c, 0x70, 0xfc, 0xee, 0xc0, 0x31, 0x41, 0xa9, - 0xbf, 0xd8, 0xcc, 0x09, 0xb7, 0xc3, 0xe2, 0xc9, 0x2f, 0x4a, 0xbe, 0xa8, 0x1a, 0x3e, - 0x36, 0x17, 0x05, 0xb9, 0xf8, 0xec, 0x87, 0x3a, 0xc8, 0x0b, 0x35, 0x5a, 0x7a, 0x40, - 0x6f, 0xc4, 0xf6, 0xfc, 0xff, 0x13, 0x0e, 0xf8, 0x22, 0x5c, 0x8d, 0x3c, 0xf8, 0xec, - 0x2f, 0x29, 0xd5, 0xa5, 0xec, 0x51, 0x07, 0xf9, 0x67, 0x17, 0x2f, 0xfb, 0x48, 0x53, - 0x63, 0x0d, 0xb1, 0x4c, 0x91, 0x91, 0x33, 0x50, 0x78, 0x6c, 0x2c, 0xe8, 0xea, 0x72, - 0x8a, 0xaa, 0x4d, 0x18, 0x20, 0xe7, 0x93, 0x4c, 0x90, 0xdd, 0x44, 0xa7, 0x40, 0xad, - 0x11, 0x29, 0x72, 0xfb, 0x84, 0x10, 0x51, 0xb5, 0x81, 0xa9, 0x58, 0xbf, 0xaf, 0x57, - 0x71, 0xd1, 0x75, 0x97, 0x38, 0x6d, 0x60, 0xc3, 0x9d, 0xfc, 0x3d, 0x41, 0x5c, 0xef, - 0xf1, 0xaf, 0x3e, 0xf4, 0xaf, 0x79, 0x19, 0x18, 0x30, 0x19, 0xff, 0x78, 0x2c, 0xbd, - 0x49, 0x31, 0xf3, 0x94, 0x98, 0xa4, 0x27, 0x8e, 0x95, 0x0a, 0x0c, 0xe6, 0x99, 0x85, - 0x4a, 0x48, 0x8e, 0x40, 0xd0, 0xa8, 0x26, 0xab, 0xb2, 0x9f, 0xbe, 0xd0, 0xab, 0x56, - 0x58, 0x4f, 0xf7, 0xc6, 0xc0, 0xee, 0xda, 0x99, 0xf1, 0xc1, 0x89, 0x5b, 0x20, 0xa5, - 0x04, 0x2f, 0x1a, 0x4e, 0x9a, 0x73, 0xca, 0x2c, 0x5c, 0xb2, 0x02, 0x31, 0xc6, 0xf3, - 0xaa, 0xc4, 0x0f, 0x3a, 0x7c, 0xe7, 0x1f, 0x51, 0x42, 0xdf, 0xd0, 0x5a, 0x1b, 0x31, - 0xa2, 0xc1, 0xab, 0x0f, 0x94, 0xac, 0x4a, 0x66, 0x5a, 0x1d, 0x6b, 0xa6, 0xb6, 0x54, - 0xf4, 0x85, 0x08, 0x76, 0xad, 0x2f, 0xc3, 0xac, 0xc1, 0x34, 0x63, 0xa6, 0x49, 0x22, - 0x08, 0x0c, 0xc5, 0x7f, 0xc1, 0xf4, 0xf7, 0xb8, 0x28, 0x3a, 0xdd, 0x6a, 0xa2, 0xf7, - 0xd7, 0xf9, 0x1c, 0xa5, 0x74, 0x7d, 0x0f, 0xc3, 0x1b, 0xd9, 0xea, 0x52, 0x00, 0x8b, - 0x4e, 0xd5, 0x71, 0x37, 0xe9, 0xa4, 0x66, 0x44, 0xb4, 0x68, 0x5a, 0xef, 0x42, 0xce, - 0xc2, 0x25, 0x2a, 0xe9, 0xb1, 0xaa, 0x36, 0xd7, 0xaa, 0xab, 0x99, 0xf6, 0x25, 0x09, - 0x05, 0x62, 0x97, 0x60, 0xa5, 0xfe, 0xb7, 0x5d, 0xe3, 0x73, 0x7e, 0x6f, 0xe7, 0x4d, - 0x86, 0xb1, 0x1b, 0xcd, 0x87, 0x34, 0xa6, 0x77, 0xfe, 0x63, 0x1f, 0xb5, 0x7d, 0x79, - 0xbf, 0x4a, 0xd3, 0xf7, 0x53, 0x21, 0x50, 0xf0, 0x44, 0x8e, 0xe0, 0x7a, 0x7f, 0xed, - 0x94, 0x0b, 0x90, 0xdb, 0x92, 0x44, 0x1c, 0xa8, 0xac, 0x9c, 0x5f, 0xb2, 0x07, 0xb1, - 0x35, 0x0a, 0xbc, 0x2a, 0x87, 0xbd, 0xc6, 0x12, 0x17, 0xdd, 0xfd, 0x2b, 0x7a, 0xeb, - 0x75, 0xed, 0xf4, 0x7f, 0x77, 0x1d, 0xbe, 0xd3, 0xae, 0x7b, 0x11, 0x92, 0x07, 0xf4, - 0x43, 0xb2, 0x0f, 0x4f, 0x14, 0x86, 0xf3, 0x87, 0xb1, 0xe2, 0x0d, 0x81, 0xa5, 0x7d, - 0x03, 0xe1, 0x61, 0x24, 0xb7, 0xa4, 0x27, 0x76, 0xe8, 0x1b, 0xee, 0x21, 0xe2, 0x35, - 0x66, 0xfa, 0x3b, 0x35, 0xf3, 0x78, 0xa4, 0x83, 0x59, 0xa0, 0x61, 0x00, 0x4d, 0x87, - 0x6a, 0xb1, 0xe1, 0xbf, 0xa9, 0x5d, 0x42, 0xc7, 0xfe, 0x31, 0x9a, 0x17, 0x73, 0x99, - 0x6a, 0x6b, 0xd7, 0xb5, 0x54, 0x0b, 0x45, 0x6f, 0x52, 0xa2, 0x17, 0x70, 0xc8, 0x13, - 0xa9, 0xee, 0x9f, 0xa3, 0xf6, 0xba, 0x5a, 0xc8, 0xfe, 0xba, 0x52, 0xa5, 0x3a, 0x9f, - 0xba, 0x90, 0x64, 0xb3, 0x8c, 0x80, 0xbf, 0x57, 0x6c, 0xcb, 0x9c, 0xbb, 0x25, 0x26, - 0x21, 0x3b, 0xba, 0x4f, 0x14, 0x36, 0x7b, 0x38, 0x2d, 0x77, 0x44, 0x9b, 0x73, 0xf5, - 0x93, 0x69, 0x67, 0xfa, 0x7b, 0x19, 0x80, 0x0c, 0xa6, 0x6d, 0x43, 0xc4, 0xa3, 0x2a, - 0x9a, 0x1a, 0xea, 0x50, 0x02, 0x06, 0xd1, 0x46, 0x95, 0xd2, 0xd4, 0x5b, 0xab, 0x6e, - 0x44, 0x21, 0xb5, 0x49, 0xb0, 0xb1, 0x90, 0xf0, 0x08, 0x69, 0xf3, 0x4d, 0x86, 0xd6, - 0x50, 0x45, 0x9c, 0x63, 0x0b, 0x3e, 0x09, 0xa4, 0xed, 0x1d, 0xab, 0xe5, 0x45, 0x3f, - 0x5e, 0xc6, 0xda, 0xb7, 0xe4, 0x07, 0x0c, 0x27, 0xb2, 0x22, 0x1f, 0xcd, 0x66, 0x90, - 0xe6, 0xcc, 0xde, 0xa8, 0x35, 0xfd, 0x7c, 0x73, 0x9a, 0x92, 0xea, 0xaa, 0x67, 0xa1, - 0x18, 0x07, 0x0f, 0x20, 0xf7, 0x55, 0x3d, 0x0e, 0xc2, 0xc7, 0xf4, 0x4d, 0x06, 0xce, - 0xd3, 0xfd, 0x35, 0x6b, 0x91, 0x2d, 0xfc, 0x44, 0xcd, 0x66, 0x62, 0x8d, 0xa5, 0x39, - 0x91, 0xf3, 0xb8, 0xe9, 0x40, 0xb3, 0x62, 0x95, 0x60, 0x73, 0x9b, 0x10, 0x18, 0x4f, - 0xb9, 0x53, 0xa4, 0x2f, 0x13, 0xa6, 0xfc, 0x8a, 0xcf, 0xbd, 0x05, 0x38, 0xc0, 0x3e, - 0xa3, 0xb1, 0xa2, 0xbe, 0xe1, 0x81, 0x5c, 0x16, 0x17, 0x3a, 0x87, 0xa1, 0x02, 0xe1, - 0x2e, 0x22, 0xf6, 0x7a, 0x01, 0xc7, 0x7a, 0xe0, 0xd3, 0x30, 0x0e, 0x7b, 0xe2, 0x50, - 0x68, 0x7d, 0x5a, 0x20, 0x86, 0x9c, 0xaf, 0x22, 0xcb, 0x9a, 0xb4, 0x8c, 0x58, 0x1f, - 0x2c, 0x34, 0x69, 0x70, 0x47, 0x6d, 0xe2, 0xfd, 0x1a, 0x90, 0xd8, 0xd4, 0xb7, 0x2b, - 0xf1, 0xce, 0x30, 0x0e, 0x6e, 0x79, 0xf6, 0x74, 0xd5, 0x70, 0x39, 0xa5, 0x15, 0xc1, - 0x3a, 0xd7, 0xe7, 0x43, 0xa4, 0x52, 0x33, 0x5f, 0xbb, 0x93, 0x9c, 0x70, 0xf3, 0x4a, - 0x51, 0x61, 0xaa, 0x5a, 0xde, 0x60, 0xfd, 0x57, 0x7c, 0x70, 0x5b, 0x3a, 0x26, 0x78, - 0x42, 0x73, 0x0d, 0xcc, 0x6b, 0x3a, 0x52, 0xd5, 0x85, 0xef, 0x00, 0x22, 0x11, 0x19, - 0x1e, 0xbc, 0x62, 0x4c, 0x6b, 0x11, 0x0d, 0x77, 0x4d, 0xfa, 0x3d, 0xfc, 0x4f, 0x8b, - 0x47, 0x31, 0x9d, 0x72, 0x94, 0x9b, 0x5f, 0xc5, 0x90, 0xc9, 0xce, 0x91, 0x44, 0x47, - 0x16, 0x66, 0x93, 0xfa, 0x4b, 0xd0, 0xac, 0xbf, 0x44, 0x71, 0x8b, 0x31, 0x34, 0x11, - 0xea, 0xec, 0xdc, 0x40, 0xed, 0x84, 0x48, 0x68, 0x57, 0x85, 0xf0, 0x42, 0xad, 0xa0, - 0xf9, 0x49, 0x51, 0xc1, 0xa4, 0xa0, 0x4f, 0x5f, 0x71, 0xfd, 0x96, 0x1a, 0x05, 0xcb, - 0x4c, 0x2b, 0x84, 0xd7, 0xbc, 0x5a, 0x8e, 0x6b, 0xc6, 0xf1, 0x18, 0x80, 0x92, 0xa1, - 0xa1, 0x0f, 0xbb, 0x35, 0x39, 0x5f, 0xd2, 0x06, 0xfc, 0x9b, 0x5c, 0x00, 0x55, 0x08, - 0x73, 0xa7, 0xfc, 0x4c, 0x80, 0x05, 0x14, 0xdb, 0x74, 0x31, 0x7a, 0xe3, 0x76, 0x59, - 0xd0, 0x89, 0xd4, 0xeb, 0xc1, 0xbf, 0x8c, 0x0e, 0x34, 0x35, 0x01, 0xdc, 0xc2, 0x64, - 0x7d, 0x37, 0xbb, 0xd7, 0xbe, 0xeb, 0x09, 0x95, 0x64, 0xa1, 0x35, 0xbb, 0x41, 0x3b, - 0x10, 0xde, - ]; - - let digest_512 = [ - 0x83, 0xe5, 0xbc, 0xa0, 0xe0, 0x52, 0xd0, 0x01, 0x3b, 0xa8, 0x9f, 0x5f, 0x33, 0xf4, - 0xb3, 0xea, 0x15, 0x49, 0xfc, 0x2a, 0x99, 0xac, 0x4f, 0xd9, 0x16, 0x5b, 0x78, 0x12, - 0x75, 0xdc, 0x58, 0x39, 0x92, 0x4c, 0x36, 0xa9, 0x5c, 0x6a, 0xe0, 0xdf, 0x68, 0x67, - 0xfa, 0x93, 0xa9, 0x8c, 0x1e, 0xd4, 0x61, 0x0c, 0xbb, 0xa4, 0xd6, 0x71, 0xad, 0x8d, - 0x30, 0x24, 0xa5, 0xca, 0xe3, 0x63, 0xd8, 0x5e, - ]; - - let pk = PublicKey::try_from_bytes(pk_bytes).unwrap(); - } + // #[test] + // fn test_mtimkovich() { + // // let pk_bytes = [ + // // 0x0b, 0x7e, 0xf5, 0xca, 0xcd, 0x20, 0xe0, 0x6a, 0x2e, 0x68, 0x01, 0xb8, 0x73, 0x0e, + // // 0x3a, 0xe1, 0x7f, 0x0c, 0xee, 0x89, 0x46, 0x54, 0x85, 0x7c, 0x49, 0xe2, 0x1a, 0xfe, + // // 0x7a, 0x52, 0x36, 0xef, 0xb3, 0x46, 0x3c, 0x87, 0x43, 0xaf, 0x36, 0x50, 0xb0, 0xfe, + // // 0x98, 0x46, 0xe6, 0xd1, 0xff, 0xdc, 0xed, 0xdf, 0x5f, 0x2a, 0xce, 0x44, 0x03, 0xf6, + // // 0xe7, 0xcc, 0x93, 0xa8, 0x9a, 0xa5, 0xb1, 0xa0, 0x71, 0x56, 0xe4, 0x82, 0x63, 0xf2, + // // 0xae, 0xf9, 0xe1, 0xd7, 0xf2, 0x12, 0x6f, 0xef, 0x2c, 0x00, 0x26, 0x84, 0x41, 0xe2, + // // 0x53, 0x1f, 0x17, 0x49, 0x1d, 0x5b, 0x5e, 0xb3, 0x9c, 0x48, 0x0e, 0x67, 0xad, 0xb7, + // // 0x87, 0xbd, 0x62, 0xe0, 0x83, 0x3f, 0xa2, 0x3b, 0x1f, 0x1c, 0x3b, 0x77, 0x6f, 0x12, + // // 0x3a, 0xf4, 0x95, 0xda, 0x0f, 0xce, 0xe3, 0x69, 0xbe, 0x3b, 0x29, 0xf0, 0xe9, 0x55, + // // 0xc5, 0x7a, 0x8c, 0x38, 0x1c, 0xe7, 0xf9, 0x07, 0x68, 0x5f, 0x57, 0x35, 0xd0, 0x56, + // // 0x8d, 0x48, 0xf9, 0xd0, 0x23, 0x47, 0x3d, 0x31, 0x21, 0x4e, 0x53, 0x0f, 0xfa, 0x26, + // // 0x75, 0x37, 0x7c, 0x58, 0xaf, 0xb7, 0x9a, 0x88, 0x5b, 0xa9, 0x48, 0xd5, 0x38, 0x91, + // // 0xbe, 0x2a, 0x52, 0x64, 0x4e, 0x81, 0x62, 0xf2, 0x85, 0x6b, 0xf0, 0xd6, 0x4b, 0x22, + // // 0x06, 0x5b, 0x72, 0x27, 0x0c, 0x2c, 0x14, 0xae, 0x5e, 0x8c, 0x0d, 0xf5, 0x96, 0x22, + // // 0x8b, 0xf0, 0x69, 0xd5, 0xd7, 0x65, 0x63, 0x28, 0x03, 0xd3, 0xe8, 0xa7, 0xf5, 0xf0, + // // 0xca, 0xe9, 0x0b, 0x7e, 0x66, 0x19, 0x63, 0x8f, 0xc6, 0x77, 0x89, 0x01, 0x30, 0x21, + // // 0x85, 0xea, 0x0a, 0xef, 0x31, 0x04, 0xfc, 0x03, 0xc1, 0x73, 0xda, 0x74, 0x50, 0x4a, + // // 0x50, 0xaa, 0x49, 0xc3, 0x45, 0x81, 0xb1, 0xb2, 0xe7, 0x25, 0x35, 0xf4, 0xc6, 0x24, + // // 0xf6, 0x66, 0x25, 0xd4, 0x3e, 0x13, 0xbd, 0xfe, 0x5e, 0x5c, 0xdf, 0x8e, 0x5c, 0x65, + // // 0x4b, 0x5f, 0xdc, 0x28, 0xaa, 0xc8, 0x19, 0x08, 0x08, 0xb9, 0x9b, 0x01, 0x60, 0x28, + // // 0xa1, 0x49, 0x03, 0xcb, 0xc4, 0x3c, 0x5e, 0x8f, 0xea, 0x62, 0x38, 0x97, 0x47, 0x4f, + // // 0x30, 0x0b, 0x87, 0x90, 0xc6, 0xab, 0x6d, 0x3c, 0xa6, 0x45, 0xd3, 0x13, 0x6b, 0xdf, + // // 0xd3, 0x8e, 0x05, 0x0f, 0xb5, 0xbc, 0x05, 0xcd, 0x35, 0x3b, 0x07, 0x81, 0x41, 0x94, + // // 0xaf, 0x36, 0xb9, 0x11, 0x1e, 0xf6, 0xbb, 0xe7, 0x66, 0xfa, 0x3d, 0x50, 0x25, 0x22, + // // 0x21, 0xd1, 0x80, 0x30, 0x1b, 0x8a, 0x56, 0xb4, 0x92, 0xf6, 0x76, 0x9e, 0xa9, 0x6a, + // // 0x19, 0xff, 0xe3, 0xa3, 0xbf, 0xf8, 0x07, 0x8d, 0xef, 0x97, 0xbb, 0xb4, 0xa6, 0x52, + // // 0xc0, 0x65, 0x0a, 0x38, 0xbc, 0x2c, 0x25, 0x3a, 0xed, 0x73, 0xed, 0x45, 0xc0, 0x23, + // // 0x6e, 0x9f, 0x8f, 0x2c, 0x1a, 0xca, 0x3d, 0x76, 0x73, 0x91, 0x18, 0x7c, 0x08, 0xed, + // // 0xff, 0x42, 0x1e, 0x59, 0x8d, 0xa0, 0xc6, 0xc7, 0xd3, 0xf4, 0xa8, 0xf5, 0xfb, 0x3a, + // // 0x30, 0x11, 0x37, 0x7f, 0x60, 0xe4, 0x6c, 0x4b, 0x72, 0xa0, 0xc8, 0xbf, 0xb8, 0xed, + // // 0x51, 0x8d, 0xe2, 0x1b, 0x30, 0x4a, 0xac, 0xfd, 0xc2, 0xc8, 0x34, 0x9c, 0x9a, 0x4c, + // // 0x0a, 0x3f, 0x68, 0xe0, 0xf7, 0x34, 0xd0, 0x36, 0xbd, 0xde, 0x50, 0x79, 0xca, 0x4a, + // // 0x48, 0x21, 0xe9, 0xda, 0x6a, 0xfd, 0x4d, 0x57, 0xe3, 0x9e, 0x8b, 0x4a, 0xd0, 0x22, + // // 0xf4, 0xb4, 0xac, 0x02, 0x82, 0x34, 0x86, 0x66, 0xcf, 0x81, 0x47, 0xfb, 0x0d, 0x56, + // // 0x19, 0x98, 0xe4, 0x31, 0x56, 0x2f, 0xaf, 0xc4, 0xfd, 0x64, 0xa7, 0x98, 0x04, 0x09, + // // 0xb1, 0x47, 0x08, 0xe3, 0x63, 0xd6, 0x1f, 0x5b, 0x74, 0x4a, 0x8e, 0xb0, 0x2b, 0xb1, + // // 0x18, 0xc8, 0x8a, 0xce, 0x80, 0x2b, 0xb6, 0x17, 0xb9, 0x29, 0x0d, 0x81, 0x78, 0xf1, + // // 0x04, 0xc5, 0xe3, 0x31, 0xc6, 0xf3, 0x22, 0x16, 0x8c, 0x52, 0x06, 0x73, 0xc5, 0x16, + // // 0x6d, 0x13, 0xf4, 0x30, 0xdc, 0xc5, 0x0b, 0xf6, 0x5f, 0x09, 0x37, 0x5e, 0x71, 0x37, + // // 0x16, 0xe2, 0xb2, 0xbe, 0xf1, 0xa4, 0x84, 0x42, 0xac, 0xf9, 0x65, 0x8e, 0xf8, 0xcd, + // // 0xf2, 0x3f, 0xa6, 0x1e, 0x58, 0xc6, 0x67, 0x6e, 0xf7, 0x37, 0xaa, 0x95, 0xc8, 0x83, + // // 0x1f, 0x34, 0x4c, 0xa6, 0x40, 0xd0, 0xa4, 0x92, 0x5e, 0x40, 0x4c, 0x3e, 0x4a, 0xbc, + // // 0xa1, 0x69, 0x54, 0x4c, 0x7a, 0xdc, 0xed, 0x15, 0xa3, 0x89, 0x9a, 0x5a, 0x38, 0xd7, + // // 0xcf, 0xb9, 0x78, 0xe8, 0x84, 0x6e, 0xeb, 0x6a, 0xba, 0x8c, 0xa7, 0xa8, 0x8a, 0xee, + // // 0xb8, 0x8b, 0x87, 0xae, 0x9c, 0xcb, 0x8d, 0xd7, 0x50, 0xc7, 0x59, 0xde, 0xce, 0xbf, + // // 0x59, 0x92, 0x38, 0x9e, 0x22, 0x91, 0xf7, 0x79, 0x19, 0xbe, 0xfb, 0xdf, 0x4e, 0xcd, + // // 0x6a, 0xe8, 0x49, 0x99, 0xc8, 0xfc, 0xd7, 0xdf, 0x8c, 0x09, 0xd2, 0xa6, 0xe7, 0x22, + // // 0xfe, 0x8c, 0x1b, 0x10, 0xa2, 0xa5, 0x7b, 0xf5, 0x94, 0x43, 0xc9, 0xa7, 0xd2, 0x09, + // // 0xd4, 0xb5, 0x45, 0xb9, 0x19, 0x83, 0x72, 0x08, 0xcb, 0x03, 0x6c, 0x34, 0x3d, 0x33, + // // 0x1a, 0x13, 0x25, 0x15, 0x06, 0xe0, 0x23, 0x82, 0x6a, 0x2a, 0x0a, 0x54, 0x3e, 0x1a, + // // 0x59, 0xa6, 0x48, 0x88, 0x1b, 0xa4, 0xd2, 0x7d, 0xda, 0x35, 0x80, 0x5f, 0x32, 0xc8, + // // 0x06, 0xe8, 0x91, 0xa5, 0x20, 0x6b, 0xb8, 0x75, 0x27, 0x17, 0xf2, 0xb1, 0x95, 0x69, + // // 0xc1, 0x7e, 0x69, 0xff, 0x06, 0xf5, 0x54, 0xdf, 0xaa, 0x47, 0xba, 0x91, 0x6d, 0x09, + // // 0x36, 0x30, 0x1a, 0xa5, 0x7e, 0x35, 0x48, 0x11, 0x6c, 0xc3, 0x76, 0xc2, 0xaa, 0x6f, + // // 0xc3, 0xad, 0x3a, 0xf2, 0x0c, 0xed, 0x6a, 0xc4, 0x5c, 0x98, 0x83, 0x30, 0x10, 0x9c, + // // 0xf1, 0x08, 0xfb, 0xff, 0x2e, 0x78, 0xe7, 0x10, 0xb3, 0x82, 0x9d, 0xd5, 0x8b, 0xdf, + // // 0xbc, 0x74, 0x06, 0x9c, 0x04, 0x5c, 0xa6, 0x86, 0xc3, 0x43, 0xcf, 0xec, 0x2b, 0xc2, + // // 0x10, 0xae, 0x47, 0xab, 0x48, 0x47, 0xd6, 0x5a, 0xe0, 0x45, 0x52, 0x67, 0x02, 0x17, + // // 0x1d, 0xb7, 0xcb, 0x1e, 0x84, 0x35, 0xad, 0xc8, 0x40, 0xc8, 0x94, 0x57, 0xc1, 0x0c, + // // 0x9d, 0x3c, 0x62, 0x8f, 0xa6, 0x59, 0xbc, 0x2c, 0x54, 0x6b, 0xf4, 0x0b, 0x68, 0x65, + // // 0x48, 0x7e, 0xdf, 0xe8, 0x2b, 0xd2, 0xbe, 0xbb, 0x76, 0xaf, 0x10, 0x2b, 0xf7, 0x1b, + // // 0x1c, 0xaf, 0x49, 0xad, 0x9b, 0xc5, 0x90, 0x52, 0x80, 0x3e, 0x04, 0xdd, 0x51, 0x9a, + // // 0x22, 0x41, 0xae, 0xb5, 0xce, 0x86, 0x88, 0xc5, 0x4e, 0xce, 0xfe, 0x0f, 0xe5, 0xb7, + // // 0x73, 0xc1, 0x84, 0xa1, 0xf4, 0x1c, 0x13, 0x81, 0xbf, 0x9e, 0x1b, 0x89, 0x5d, 0xa9, + // // 0x6c, 0x04, 0x25, 0x2e, 0x4e, 0xd8, 0x59, 0xa9, 0xc4, 0xaf, 0xa2, 0x66, 0x23, 0x79, + // // 0x42, 0x3a, 0xcd, 0x7e, 0x2c, 0xcd, 0xb4, 0xb3, 0x1f, 0x8d, 0xe4, 0x5c, 0xba, 0x9a, + // // 0x2c, 0xad, 0x02, 0xe8, 0xda, 0xc8, 0xd7, 0xc2, 0x30, 0xf6, 0xc5, 0xb2, 0xdb, 0x6a, + // // 0x91, 0x9e, 0x5c, 0x6c, 0xe4, 0x47, 0x7e, 0x1b, 0x9b, 0xa5, 0x67, 0x97, 0x69, 0x81, + // // 0x35, 0x9d, 0x50, 0x65, 0xeb, 0xbf, 0x1e, 0xae, 0x5e, 0x16, 0x90, 0x3e, 0xd7, 0xe8, + // // 0x28, 0x5c, 0xe5, 0x44, 0xdc, 0x0e, 0x3a, 0xf5, 0xd5, 0x23, 0x2e, 0x56, 0xd9, 0x2a, + // // 0xe0, 0xb2, 0xe1, 0xaa, 0x7a, 0x6a, 0x9d, 0x57, 0x4e, 0x2e, 0x97, 0x7c, 0x12, 0xa8, + // // 0xa3, 0xa6, 0x80, 0x5c, 0x8b, 0xa9, 0x56, 0xd8, 0x5e, 0x04, 0x6b, 0x79, 0xae, 0xb5, + // // 0xb5, 0x1c, 0xa1, 0x36, 0x73, 0xf9, 0xd9, 0xe0, 0xac, 0xbe, 0xee, 0xbc, 0x70, 0x55, + // // 0x5b, 0x30, 0xdd, 0xb8, 0x8b, 0xbf, 0x35, 0x41, 0x09, 0xae, 0xe8, 0x53, 0x55, 0x33, + // // 0x3f, 0xb1, 0x55, 0xeb, 0x3c, 0x90, 0xad, 0xdf, 0x5f, 0x5b, 0xeb, 0x99, 0xc9, 0x1d, + // // 0x49, 0x5e, 0xdb, 0x01, 0x3f, 0x8c, 0xd5, 0x20, 0xd4, 0x81, 0x1d, 0x51, 0x24, 0xb2, + // // 0xee, 0x17, 0x88, 0xde, 0xbf, 0xd7, 0x90, 0x1e, 0xbb, 0x73, 0xa0, 0xe6, 0x20, 0x42, + // // 0x75, 0x61, 0x52, 0xa8, 0x52, 0x44, 0x53, 0x56, 0x12, 0xc2, 0xb6, 0x37, 0x53, 0x08, + // // 0xee, 0xc5, 0x89, 0xaa, 0xc2, 0x57, 0xbd, 0x3b, 0x04, 0xd6, 0x5f, 0x29, 0x38, 0x12, + // // 0x7a, 0x92, 0x53, 0xad, 0xe4, 0xaa, 0xcb, 0x6f, 0x94, 0xae, 0x72, 0x9c, 0xf8, 0xa7, + // // 0xdb, 0x63, 0xfd, 0xd8, 0x00, 0x3c, 0xb1, 0x40, 0x8f, 0x21, 0x21, 0x37, 0x22, 0xe8, + // // 0xaa, 0xb7, 0xc4, 0x84, 0x7e, 0x4f, 0x6d, 0xd0, 0xcf, 0xff, 0x44, 0xb8, 0x2f, 0x90, + // // 0x0c, 0x66, 0x82, 0x2e, 0x24, 0xa3, 0x24, 0x0f, 0x68, 0x00, 0x03, 0x18, 0x96, 0xf8, + // // 0xe9, 0x8c, 0xe1, 0x5a, 0x24, 0x97, 0x28, 0x6d, 0x61, 0xbe, 0xed, 0xad, 0xa2, 0x91, + // // 0x17, 0xc1, 0x96, 0x07, 0x06, 0x24, 0x5f, 0x64, 0x39, 0x66, 0xf1, 0x61, 0x98, 0xb5, + // // 0xa5, 0xff, 0xce, 0x6b, 0x1e, 0x3d, 0x0b, 0xc1, 0x01, 0x4f, 0x5b, 0xb8, 0xc8, 0xc9, + // // 0x34, 0xb1, 0x62, 0x96, 0x4b, 0x14, 0x33, 0x19, 0x07, 0x0b, 0x09, 0x9e, 0xe6, 0x2d, + // // 0x42, 0x65, 0xf7, 0x67, 0x2a, 0xd5, 0xda, 0x77, 0x8a, 0xe4, 0x52, 0xe8, 0xe1, 0xaf, + // // 0x6b, 0xf4, 0xc1, 0x3a, 0x62, 0x1d, 0x06, 0xf6, 0x74, 0xf9, 0xfa, 0xad, 0xda, 0x90, + // // 0xe4, 0x98, 0xc8, 0xdd, 0xe9, 0xa5, 0xa8, 0x03, 0x41, 0x16, 0x17, 0x6b, 0x3b, 0x03, + // // 0xd0, 0x39, 0xeb, 0x54, 0x82, 0x7c, 0xe7, 0x0b, 0x45, 0x25, 0x89, 0x3a, 0x3c, 0x30, + // // 0xdc, 0x76, 0xe6, 0x7a, 0xfd, 0x45, 0x88, 0x28, 0x71, 0x8a, 0x39, 0x82, 0x3a, 0xf7, + // // 0xfa, 0x66, 0x41, 0x59, 0x1f, 0x29, 0x97, 0xcc, 0xfa, 0x67, 0xbd, 0x2d, 0x82, 0x91, + // // 0x26, 0x02, 0x3b, 0x35, 0x25, 0x16, 0x64, 0x79, 0xa9, 0xa3, 0x4e, 0x1a, 0x46, 0x99, + // // 0x62, 0x49, 0xc6, 0xbb, 0xe1, 0xdd, 0xa8, 0x05, 0x82, 0x16, 0x60, 0x98, 0x90, 0xea, + // // 0x62, 0x80, 0xdb, 0x11, 0x51, 0x75, 0x1e, 0x11, 0x65, 0x8c, 0x7d, 0x32, 0x48, 0x53, + // // 0x69, 0x8d, 0x7d, 0xaa, 0x8f, 0xff, 0xb2, 0x67, 0xf1, 0x72, 0xdd, 0x58, 0xfa, 0x9d, + // // 0x83, 0x83, 0xee, 0x8d, 0xbc, 0x8e, 0x18, 0x89, 0x2d, 0x9e, 0xfd, 0x52, 0x1d, 0x63, + // // 0x3c, 0x03, 0x40, 0x7b, 0xe6, 0x17, 0xe4, 0x89, 0x2f, 0xf2, 0x98, 0x0b, 0x5d, 0x6c, + // // 0x26, 0xce, 0x24, 0x02, 0x66, 0x44, 0xad, 0x4c, 0x17, 0x93, 0xc3, 0x37, 0x19, 0x00, + // // 0xde, 0x18, 0x83, 0x7f, 0x49, 0x8b, 0xec, 0x6e, 0x7d, 0xb7, 0x03, 0x70, 0x79, 0x71, + // // 0xe9, 0xce, 0x99, 0x0f, 0x3a, 0x41, 0x85, 0xd6, 0x9a, 0x1e, 0x06, 0x6b, 0x82, 0x83, + // // 0xde, 0xa6, 0xf3, 0xfb, 0xb7, 0x69, 0xae, 0x74, 0xa6, 0xbe, 0xf5, 0xea, 0x0d, 0x80, + // // 0x35, 0xc0, 0x13, 0x53, 0xd7, 0x2e, 0x51, 0x9d, 0xa2, 0x0d, 0x03, 0xd9, 0x73, 0x62, + // // 0x05, 0x07, 0x2a, 0x35, 0x5a, 0x7b, 0xfd, 0xe2, 0xc2, 0x07, 0x5d, 0xb0, 0xf9, 0xc5, + // // 0xc1, 0x50, 0x6f, 0x2e, 0x17, 0xe1, 0x0c, 0x30, 0x5b, 0x5f, 0x7a, 0xaf, 0x01, 0x55, + // // 0x9e, 0xdf, 0x00, 0xfa, 0x63, 0x7b, 0x46, 0xcd, 0x36, 0x7b, 0x1d, 0xed, 0x6f, 0x67, + // // 0xb2, 0x0e, 0x24, 0x5f, 0x2f, 0xa8, 0xea, 0xfe, 0x6a, 0x31, 0x5e, 0x8d, 0x61, 0xba, + // // 0xa1, 0x88, 0xb8, 0x34, 0x17, 0x98, 0x09, 0xd9, 0x51, 0x80, 0xa8, 0x5c, 0x0d, 0xc9, + // // 0x2f, 0x5e, 0x5e, 0x79, 0xce, 0xab, 0x48, 0x5c, 0x14, 0xc3, 0x33, 0xf2, 0x27, 0x8d, + // // 0x8b, 0xa1, 0xde, 0x8e, 0x31, 0x25, 0xf1, 0x36, 0xd0, 0x7e, 0xd8, 0x90, 0xd5, 0x69, + // // 0x39, 0x9c, 0x19, 0x3d, 0x09, 0x11, 0x41, 0xaf, 0x9b, 0x33, 0xb8, 0xe7, 0x4c, 0x71, + // // 0xf7, 0xf5, 0xaf, 0x94, 0x16, 0x07, 0xb7, 0xd4, 0x34, 0x6c, 0xdd, 0xef, 0xf8, 0x92, + // // 0x45, 0x5c, 0x46, 0x3c, 0x23, 0x77, 0xf6, 0x25, 0x77, 0x5c, 0x9b, 0xd9, 0xfa, 0xa8, + // // 0x84, 0xea, 0x6b, 0xd3, 0xf1, 0xf7, 0x33, 0xa9, 0x14, 0x46, 0xf2, 0x3d, 0x0f, 0x48, + // // 0xfb, 0x5d, 0xfc, 0xab, 0x21, 0x40, 0xef, 0xd6, 0xe1, 0xa1, 0xb6, 0x4a, 0x8e, 0x87, + // // 0x93, 0xe4, 0x2e, 0x8d, 0xa1, 0x06, 0xa8, 0xe7, 0x67, 0x65, 0x40, 0xc1, 0xdc, 0x3c, + // // 0x72, 0xe2, 0xd5, 0xcd, 0xe8, 0x76, 0xec, 0xcc, 0x77, 0x66, 0xf7, 0x17, 0xc2, 0x07, + // // 0x8a, 0x0b, 0x9c, 0x1e, 0x29, 0x71, 0xf6, 0x11, 0x9b, 0x4d, 0x65, 0xe6, 0x5f, 0x3f, + // // 0xa6, 0x29, 0xa6, 0x03, 0x80, 0xc1, 0x8e, 0x08, 0xa2, 0x11, 0xa9, 0x06, 0xd7, 0x3b, + // // 0xd2, 0x17, 0xca, 0x6e, 0xac, 0xa9, 0x0b, 0x64, 0xf3, 0xc3, 0x62, 0xb8, 0xa6, 0xb0, + // // 0x29, 0x64, 0x86, 0x1e, 0xaf, 0x28, 0xc0, 0x4d, 0xe0, 0xf7, 0xd0, 0x1d, 0x9f, 0x60, + // // 0x9a, 0xc4, 0x28, 0x7f, 0xf2, 0x7a, 0x0c, 0x70, 0xfc, 0xee, 0xc0, 0x31, 0x41, 0xa9, + // // 0xbf, 0xd8, 0xcc, 0x09, 0xb7, 0xc3, 0xe2, 0xc9, 0x2f, 0x4a, 0xbe, 0xa8, 0x1a, 0x3e, + // // 0x36, 0x17, 0x05, 0xb9, 0xf8, 0xec, 0x87, 0x3a, 0xc8, 0x0b, 0x35, 0x5a, 0x7a, 0x40, + // // 0x6f, 0xc4, 0xf6, 0xfc, 0xff, 0x13, 0x0e, 0xf8, 0x22, 0x5c, 0x8d, 0x3c, 0xf8, 0xec, + // // 0x2f, 0x29, 0xd5, 0xa5, 0xec, 0x51, 0x07, 0xf9, 0x67, 0x17, 0x2f, 0xfb, 0x48, 0x53, + // // 0x63, 0x0d, 0xb1, 0x4c, 0x91, 0x91, 0x33, 0x50, 0x78, 0x6c, 0x2c, 0xe8, 0xea, 0x72, + // // 0x8a, 0xaa, 0x4d, 0x18, 0x20, 0xe7, 0x93, 0x4c, 0x90, 0xdd, 0x44, 0xa7, 0x40, 0xad, + // // 0x11, 0x29, 0x72, 0xfb, 0x84, 0x10, 0x51, 0xb5, 0x81, 0xa9, 0x58, 0xbf, 0xaf, 0x57, + // // 0x71, 0xd1, 0x75, 0x97, 0x38, 0x6d, 0x60, 0xc3, 0x9d, 0xfc, 0x3d, 0x41, 0x5c, 0xef, + // // 0xf1, 0xaf, 0x3e, 0xf4, 0xaf, 0x79, 0x19, 0x18, 0x30, 0x19, 0xff, 0x78, 0x2c, 0xbd, + // // 0x49, 0x31, 0xf3, 0x94, 0x98, 0xa4, 0x27, 0x8e, 0x95, 0x0a, 0x0c, 0xe6, 0x99, 0x85, + // // 0x4a, 0x48, 0x8e, 0x40, 0xd0, 0xa8, 0x26, 0xab, 0xb2, 0x9f, 0xbe, 0xd0, 0xab, 0x56, + // // 0x58, 0x4f, 0xf7, 0xc6, 0xc0, 0xee, 0xda, 0x99, 0xf1, 0xc1, 0x89, 0x5b, 0x20, 0xa5, + // // 0x04, 0x2f, 0x1a, 0x4e, 0x9a, 0x73, 0xca, 0x2c, 0x5c, 0xb2, 0x02, 0x31, 0xc6, 0xf3, + // // 0xaa, 0xc4, 0x0f, 0x3a, 0x7c, 0xe7, 0x1f, 0x51, 0x42, 0xdf, 0xd0, 0x5a, 0x1b, 0x31, + // // 0xa2, 0xc1, 0xab, 0x0f, 0x94, 0xac, 0x4a, 0x66, 0x5a, 0x1d, 0x6b, 0xa6, 0xb6, 0x54, + // // 0xf4, 0x85, 0x08, 0x76, 0xad, 0x2f, 0xc3, 0xac, 0xc1, 0x34, 0x63, 0xa6, 0x49, 0x22, + // // 0x08, 0x0c, 0xc5, 0x7f, 0xc1, 0xf4, 0xf7, 0xb8, 0x28, 0x3a, 0xdd, 0x6a, 0xa2, 0xf7, + // // 0xd7, 0xf9, 0x1c, 0xa5, 0x74, 0x7d, 0x0f, 0xc3, 0x1b, 0xd9, 0xea, 0x52, 0x00, 0x8b, + // // 0x4e, 0xd5, 0x71, 0x37, 0xe9, 0xa4, 0x66, 0x44, 0xb4, 0x68, 0x5a, 0xef, 0x42, 0xce, + // // 0xc2, 0x25, 0x2a, 0xe9, 0xb1, 0xaa, 0x36, 0xd7, 0xaa, 0xab, 0x99, 0xf6, 0x25, 0x09, + // // 0x05, 0x62, 0x97, 0x60, 0xa5, 0xfe, 0xb7, 0x5d, 0xe3, 0x73, 0x7e, 0x6f, 0xe7, 0x4d, + // // 0x86, 0xb1, 0x1b, 0xcd, 0x87, 0x34, 0xa6, 0x77, 0xfe, 0x63, 0x1f, 0xb5, 0x7d, 0x79, + // // 0xbf, 0x4a, 0xd3, 0xf7, 0x53, 0x21, 0x50, 0xf0, 0x44, 0x8e, 0xe0, 0x7a, 0x7f, 0xed, + // // 0x94, 0x0b, 0x90, 0xdb, 0x92, 0x44, 0x1c, 0xa8, 0xac, 0x9c, 0x5f, 0xb2, 0x07, 0xb1, + // // 0x35, 0x0a, 0xbc, 0x2a, 0x87, 0xbd, 0xc6, 0x12, 0x17, 0xdd, 0xfd, 0x2b, 0x7a, 0xeb, + // // 0x75, 0xed, 0xf4, 0x7f, 0x77, 0x1d, 0xbe, 0xd3, 0xae, 0x7b, 0x11, 0x92, 0x07, 0xf4, + // // 0x43, 0xb2, 0x0f, 0x4f, 0x14, 0x86, 0xf3, 0x87, 0xb1, 0xe2, 0x0d, 0x81, 0xa5, 0x7d, + // // 0x03, 0xe1, 0x61, 0x24, 0xb7, 0xa4, 0x27, 0x76, 0xe8, 0x1b, 0xee, 0x21, 0xe2, 0x35, + // // 0x66, 0xfa, 0x3b, 0x35, 0xf3, 0x78, 0xa4, 0x83, 0x59, 0xa0, 0x61, 0x00, 0x4d, 0x87, + // // 0x6a, 0xb1, 0xe1, 0xbf, 0xa9, 0x5d, 0x42, 0xc7, 0xfe, 0x31, 0x9a, 0x17, 0x73, 0x99, + // // 0x6a, 0x6b, 0xd7, 0xb5, 0x54, 0x0b, 0x45, 0x6f, 0x52, 0xa2, 0x17, 0x70, 0xc8, 0x13, + // // 0xa9, 0xee, 0x9f, 0xa3, 0xf6, 0xba, 0x5a, 0xc8, 0xfe, 0xba, 0x52, 0xa5, 0x3a, 0x9f, + // // 0xba, 0x90, 0x64, 0xb3, 0x8c, 0x80, 0xbf, 0x57, 0x6c, 0xcb, 0x9c, 0xbb, 0x25, 0x26, + // // 0x21, 0x3b, 0xba, 0x4f, 0x14, 0x36, 0x7b, 0x38, 0x2d, 0x77, 0x44, 0x9b, 0x73, 0xf5, + // // 0x93, 0x69, 0x67, 0xfa, 0x7b, 0x19, 0x80, 0x0c, 0xa6, 0x6d, 0x43, 0xc4, 0xa3, 0x2a, + // // 0x9a, 0x1a, 0xea, 0x50, 0x02, 0x06, 0xd1, 0x46, 0x95, 0xd2, 0xd4, 0x5b, 0xab, 0x6e, + // // 0x44, 0x21, 0xb5, 0x49, 0xb0, 0xb1, 0x90, 0xf0, 0x08, 0x69, 0xf3, 0x4d, 0x86, 0xd6, + // // 0x50, 0x45, 0x9c, 0x63, 0x0b, 0x3e, 0x09, 0xa4, 0xed, 0x1d, 0xab, 0xe5, 0x45, 0x3f, + // // 0x5e, 0xc6, 0xda, 0xb7, 0xe4, 0x07, 0x0c, 0x27, 0xb2, 0x22, 0x1f, 0xcd, 0x66, 0x90, + // // 0xe6, 0xcc, 0xde, 0xa8, 0x35, 0xfd, 0x7c, 0x73, 0x9a, 0x92, 0xea, 0xaa, 0x67, 0xa1, + // // 0x18, 0x07, 0x0f, 0x20, 0xf7, 0x55, 0x3d, 0x0e, 0xc2, 0xc7, 0xf4, 0x4d, 0x06, 0xce, + // // 0xd3, 0xfd, 0x35, 0x6b, 0x91, 0x2d, 0xfc, 0x44, 0xcd, 0x66, 0x62, 0x8d, 0xa5, 0x39, + // // 0x91, 0xf3, 0xb8, 0xe9, 0x40, 0xb3, 0x62, 0x95, 0x60, 0x73, 0x9b, 0x10, 0x18, 0x4f, + // // 0xb9, 0x53, 0xa4, 0x2f, 0x13, 0xa6, 0xfc, 0x8a, 0xcf, 0xbd, 0x05, 0x38, 0xc0, 0x3e, + // // 0xa3, 0xb1, 0xa2, 0xbe, 0xe1, 0x81, 0x5c, 0x16, 0x17, 0x3a, 0x87, 0xa1, 0x02, 0xe1, + // // 0x2e, 0x22, 0xf6, 0x7a, 0x01, 0xc7, 0x7a, 0xe0, 0xd3, 0x30, 0x0e, 0x7b, 0xe2, 0x50, + // // 0x68, 0x7d, 0x5a, 0x20, 0x86, 0x9c, 0xaf, 0x22, 0xcb, 0x9a, 0xb4, 0x8c, 0x58, 0x1f, + // // 0x2c, 0x34, 0x69, 0x70, 0x47, 0x6d, 0xe2, 0xfd, 0x1a, 0x90, 0xd8, 0xd4, 0xb7, 0x2b, + // // 0xf1, 0xce, 0x30, 0x0e, 0x6e, 0x79, 0xf6, 0x74, 0xd5, 0x70, 0x39, 0xa5, 0x15, 0xc1, + // // 0x3a, 0xd7, 0xe7, 0x43, 0xa4, 0x52, 0x33, 0x5f, 0xbb, 0x93, 0x9c, 0x70, 0xf3, 0x4a, + // // 0x51, 0x61, 0xaa, 0x5a, 0xde, 0x60, 0xfd, 0x57, 0x7c, 0x70, 0x5b, 0x3a, 0x26, 0x78, + // // 0x42, 0x73, 0x0d, 0xcc, 0x6b, 0x3a, 0x52, 0xd5, 0x85, 0xef, 0x00, 0x22, 0x11, 0x19, + // // 0x1e, 0xbc, 0x62, 0x4c, 0x6b, 0x11, 0x0d, 0x77, 0x4d, 0xfa, 0x3d, 0xfc, 0x4f, 0x8b, + // // 0x47, 0x31, 0x9d, 0x72, 0x94, 0x9b, 0x5f, 0xc5, 0x90, 0xc9, 0xce, 0x91, 0x44, 0x47, + // // 0x16, 0x66, 0x93, 0xfa, 0x4b, 0xd0, 0xac, 0xbf, 0x44, 0x71, 0x8b, 0x31, 0x34, 0x11, + // // 0xea, 0xec, 0xdc, 0x40, 0xed, 0x84, 0x48, 0x68, 0x57, 0x85, 0xf0, 0x42, 0xad, 0xa0, + // // 0xf9, 0x49, 0x51, 0xc1, 0xa4, 0xa0, 0x4f, 0x5f, 0x71, 0xfd, 0x96, 0x1a, 0x05, 0xcb, + // // 0x4c, 0x2b, 0x84, 0xd7, 0xbc, 0x5a, 0x8e, 0x6b, 0xc6, 0xf1, 0x18, 0x80, 0x92, 0xa1, + // // 0xa1, 0x0f, 0xbb, 0x35, 0x39, 0x5f, 0xd2, 0x06, 0xfc, 0x9b, 0x5c, 0x00, 0x55, 0x08, + // // 0x73, 0xa7, 0xfc, 0x4c, 0x80, 0x05, 0x14, 0xdb, 0x74, 0x31, 0x7a, 0xe3, 0x76, 0x59, + // // 0xd0, 0x89, 0xd4, 0xeb, 0xc1, 0xbf, 0x8c, 0x0e, 0x34, 0x35, 0x01, 0xdc, 0xc2, 0x64, + // // 0x7d, 0x37, 0xbb, 0xd7, 0xbe, 0xeb, 0x09, 0x95, 0x64, 0xa1, 0x35, 0xbb, 0x41, 0x3b, + // // 0x10, 0xde, + // // ]; + + // // let sk_bytes = [ + // // 0x0b, 0x7e, 0xf5, 0xca, 0xcd, 0x20, 0xe0, 0x6a, 0x2e, 0x68, 0x01, 0xb8, 0x73, 0x0e, + // // 0x3a, 0xe1, 0x7f, 0x0c, 0xee, 0x89, 0x46, 0x54, 0x85, 0x7c, 0x49, 0xe2, 0x1a, 0xfe, + // // 0x7a, 0x52, 0x36, 0xef, 0xf2, 0xbb, 0xc4, 0x71, 0xf2, 0x17, 0x2f, 0x44, 0xe2, 0xee, + // // 0xfb, 0x49, 0x0a, 0x9c, 0x4d, 0xb4, 0x95, 0x15, 0xda, 0xb1, 0xa8, 0xdb, 0xb8, 0x6f, + // // 0x88, 0x3e, 0x17, 0x6c, 0x98, 0xff, 0xb6, 0x36, 0xa6, 0x69, 0x46, 0x55, 0xa4, 0xea, + // // 0x26, 0x97, 0xee, 0x39, 0xf7, 0x63, 0x1d, 0x13, 0xf2, 0x72, 0x99, 0x9a, 0xe5, 0xb5, + // // 0x0d, 0x46, 0x29, 0xd4, 0x70, 0x75, 0x25, 0xbe, 0x22, 0xc1, 0x18, 0x2f, 0x55, 0xc0, + // // 0x94, 0x7d, 0xd6, 0x61, 0xad, 0x60, 0x1a, 0x8d, 0xdb, 0xfa, 0x08, 0x5c, 0x7d, 0xd5, + // // 0xeb, 0xd2, 0x79, 0xe7, 0xae, 0x24, 0xc8, 0x98, 0x3a, 0x2c, 0xe8, 0x44, 0x7e, 0xbe, + // // 0xb1, 0x5e, 0x5c, 0x90, 0xc6, 0x08, 0x16, 0xdc, 0x70, 0xa2, 0x11, 0x25, 0x18, 0x42, + // // 0x04, 0x51, 0x01, 0x20, 0xc8, 0x49, 0x6d, 0x45, 0x12, 0x32, 0xd0, 0x60, 0x12, 0x00, + // // 0x34, 0x82, 0x48, 0x60, 0x6a, 0x32, 0x11, 0xc8, 0xd9, 0x41, 0x14, 0x11, 0xc4, 0x00, + // // 0xa5, 0x03, 0x05, 0x25, 0x86, 0x26, 0xd4, 0x28, 0x43, 0x30, 0x42, 0xc8, 0x30, 0xdb, + // // 0x30, 0x34, 0x26, 0x40, 0xa4, 0x2c, 0x54, 0x4d, 0x36, 0x9b, 0x80, 0x49, 0x01, 0x36, + // // 0x0d, 0xa0, 0x43, 0x00, 0x21, 0x24, 0x00, 0x24, 0x16, 0x93, 0x28, 0x37, 0x31, 0x98, + // // 0x5c, 0x70, 0x1c, 0x40, 0x80, 0xa2, 0x00, 0xca, 0x85, 0x97, 0x49, 0x44, 0x13, 0x52, + // // 0xd8, 0x48, 0x08, 0x03, 0x33, 0x03, 0x4d, 0x40, 0x72, 0x44, 0xd9, 0x11, 0x89, 0x44, + // // 0xc4, 0xa1, 0xa0, 0x98, 0x08, 0x96, 0x0c, 0x98, 0xa0, 0x48, 0x04, 0x90, 0x14, 0x4c, + // // 0x86, 0x02, 0x89, 0x16, 0x05, 0x00, 0xa0, 0x29, 0xcc, 0x68, 0x00, 0xdc, 0x26, 0x49, + // // 0x64, 0x92, 0x04, 0xb4, 0x4b, 0x64, 0xcb, 0x4d, 0xb5, 0x1c, 0x86, 0x61, 0x29, 0x96, + // // 0x64, 0xb6, 0x5a, 0x2d, 0x02, 0x62, 0x08, 0x9c, 0x14, 0xc8, 0x42, 0x24, 0x80, 0x90, + // // 0x62, 0x04, 0x04, 0x49, 0x86, 0x0a, 0x30, 0x40, 0x0a, 0x09, 0x88, 0x12, 0xc3, 0x29, + // // 0xe3, 0x25, 0x08, 0x41, 0xb1, 0x18, 0x65, 0x82, 0x6c, 0x81, 0x18, 0x2c, 0xa1, 0x09, + // // 0x46, 0x61, 0x98, 0x09, 0x2e, 0x46, 0x8e, 0x16, 0x1c, 0x68, 0x01, 0x68, 0xa8, 0xcb, + // // 0x34, 0xdb, 0x28, 0xc6, 0x26, 0x22, 0xc3, 0x68, 0x20, 0x48, 0x94, 0xdc, 0x14, 0xa4, + // // 0x92, 0x22, 0x01, 0x94, 0x02, 0x4e, 0x04, 0x11, 0xc4, 0xc0, 0x83, 0x00, 0x32, 0x38, + // // 0x11, 0x14, 0xe2, 0x84, 0x52, 0x30, 0x30, 0x03, 0x96, 0x8b, 0x68, 0x88, 0x70, 0x08, + // // 0x18, 0x68, 0xd4, 0x50, 0x06, 0x91, 0x36, 0x02, 0x42, 0x04, 0x81, 0xa4, 0xc3, 0x6a, + // // 0x20, 0x08, 0x90, 0x11, 0x91, 0x12, 0x6a, 0x42, 0x91, 0x80, 0xc3, 0x41, 0x53, 0x22, + // // 0x41, 0x14, 0xb6, 0x24, 0x52, 0x40, 0x0c, 0x86, 0x83, 0x25, 0x24, 0x08, 0x28, 0x09, + // // 0xb6, 0x8a, 0x84, 0xb5, 0x32, 0x36, 0x62, 0x28, 0x43, 0x64, 0x10, 0x1c, 0x82, 0x88, + // // 0x24, 0x38, 0x8a, 0x06, 0x4b, 0x2c, 0x58, 0x2a, 0x14, 0x92, 0x85, 0x24, 0x10, 0x96, + // // 0x51, 0xc4, 0x13, 0x88, 0x5c, 0x01, 0xb2, 0xc2, 0x36, 0xdc, 0x45, 0x42, 0x0a, 0x37, + // // 0x24, 0x88, 0x40, 0x85, 0x04, 0x8b, 0x18, 0x51, 0x2e, 0x18, 0x09, 0x12, 0x48, 0x0c, + // // 0x8a, 0x89, 0x86, 0x19, 0x20, 0xda, 0x88, 0xa8, 0x06, 0x03, 0x02, 0x02, 0x1a, 0x68, + // // 0x02, 0x03, 0x02, 0x88, 0x00, 0x21, 0x6e, 0x44, 0xc4, 0x44, 0x0b, 0x51, 0x32, 0x8a, + // // 0xc5, 0x23, 0x06, 0x46, 0x04, 0x24, 0x48, 0x49, 0x12, 0x01, 0x00, 0xcc, 0x32, 0x0c, + // // 0x64, 0x92, 0x00, 0x96, 0x0a, 0x64, 0x9c, 0x4e, 0x06, 0x19, 0x20, 0x58, 0x0c, 0x42, + // // 0x41, 0x32, 0xd9, 0x00, 0x4b, 0x69, 0x36, 0x04, 0x36, 0xc1, 0x41, 0x44, 0x61, 0x97, + // // 0x21, 0x61, 0x88, 0x2e, 0x38, 0x53, 0xa4, 0xd8, 0x70, 0x38, 0x28, 0x88, 0x93, 0x71, + // // 0x23, 0x2e, 0x16, 0x44, 0x22, 0x41, 0x00, 0x25, 0x26, 0x32, 0x92, 0x8e, 0x14, 0x44, + // // 0x13, 0x0a, 0x24, 0xd9, 0x89, 0x86, 0x10, 0x30, 0x92, 0x85, 0xc8, 0x86, 0x10, 0xc9, + // // 0xc6, 0x21, 0x60, 0x26, 0x4d, 0x93, 0x19, 0x41, 0xd4, 0x45, 0x16, 0x43, 0x44, 0x1b, + // // 0x11, 0xc4, 0x0c, 0x30, 0x94, 0x4a, 0x8c, 0x69, 0x36, 0x43, 0x04, 0xcb, 0x26, 0x26, + // // 0x69, 0x14, 0x0b, 0x50, 0x00, 0x85, 0xc2, 0xc2, 0x45, 0x03, 0x02, 0x00, 0x44, 0x84, + // // 0x18, 0x6c, 0x83, 0x50, 0xa2, 0x1b, 0x24, 0x90, 0x02, 0x28, 0x06, 0x18, 0xa3, 0x44, + // // 0x02, 0x08, 0x06, 0xc0, 0x87, 0x11, 0x68, 0xc1, 0x0a, 0x26, 0x53, 0x30, 0x49, 0x48, + // // 0x16, 0x9a, 0x32, 0xc8, 0x68, 0xc8, 0x8c, 0x35, 0x19, 0x40, 0x21, 0x29, 0xc4, 0xe4, + // // 0xa4, 0x89, 0x50, 0x08, 0x8a, 0x46, 0x8b, 0x88, 0x11, 0x01, 0x84, 0x23, 0x24, 0xe3, + // // 0x10, 0x95, 0x51, 0x94, 0xd8, 0x2c, 0x0b, 0x2c, 0xa0, 0x50, 0x38, 0xd3, 0x66, 0x39, + // // 0x10, 0x00, 0x49, 0x0a, 0x0a, 0x05, 0x40, 0xc8, 0x98, 0x44, 0x81, 0x99, 0x46, 0x32, + // // 0x62, 0x6d, 0x5c, 0x71, 0x04, 0x19, 0x10, 0x99, 0x31, 0x80, 0x51, 0xc0, 0xc0, 0x28, + // // 0xcb, 0x69, 0x94, 0x5c, 0x34, 0x11, 0x85, 0xa6, 0x4c, 0x40, 0xdc, 0x52, 0x53, 0x61, + // // 0xa6, 0xd4, 0x19, 0x08, 0x49, 0xa2, 0x41, 0x88, 0x5c, 0x0d, 0x22, 0x92, 0x24, 0x98, + // // 0x40, 0xcc, 0x71, 0x01, 0x00, 0xa6, 0xc8, 0x52, 0x61, 0x44, 0x40, 0xc0, 0xb8, 0x13, + // // 0x80, 0x46, 0x61, 0x00, 0x83, 0x30, 0x00, 0x50, 0x14, 0xa4, 0x38, 0xd0, 0x50, 0x83, + // // 0x21, 0x34, 0x63, 0x61, 0x0c, 0x4a, 0x08, 0x5c, 0x30, 0x81, 0x48, 0x22, 0x6d, 0x14, + // // 0x90, 0x28, 0x51, 0x91, 0xa2, 0xc2, 0x20, 0x1a, 0x90, 0x42, 0x20, 0x44, 0x52, 0x60, + // // 0x19, 0x2d, 0x80, 0x22, 0xc8, 0x43, 0x09, 0x14, 0x80, 0x97, 0x01, 0x4d, 0x18, 0x2c, + // // 0x11, 0x1c, 0x23, 0x11, 0x41, 0x84, 0x41, 0x14, 0x0a, 0x32, 0x8c, 0x6c, 0x22, 0x88, + // // 0x38, 0x5a, 0x2c, 0x98, 0x88, 0x46, 0x41, 0x4e, 0x09, 0x2d, 0xc0, 0x04, 0x42, 0x53, + // // 0x81, 0x48, 0x09, 0x99, 0x18, 0x0a, 0x21, 0x49, 0xa0, 0x02, 0xc0, 0xc0, 0x4c, 0x24, + // // 0x82, 0x11, 0x14, 0x60, 0xc8, 0x06, 0x04, 0x93, 0x84, 0x58, 0x86, 0x26, 0x2c, 0x37, + // // 0x03, 0x4c, 0xcb, 0x24, 0xb7, 0x10, 0xc6, 0x54, 0x81, 0x94, 0x4c, 0x38, 0x99, 0x49, + // // 0xcb, 0x00, 0x06, 0x59, 0xb6, 0x61, 0x49, 0x02, 0x2d, 0x95, 0x20, 0x09, 0x1b, 0x2d, + // // 0xc5, 0x12, 0x20, 0x0a, 0x81, 0x18, 0x65, 0x88, 0x63, 0x10, 0x19, 0x2d, 0x26, 0x22, + // // 0x33, 0x10, 0x91, 0x82, 0x6d, 0x49, 0x00, 0x02, 0x5b, 0x6c, 0x08, 0x44, 0xa4, 0x82, + // // 0x08, 0xa0, 0x69, 0x92, 0xca, 0x90, 0xcc, 0x24, 0xa0, 0x04, 0x40, 0x59, 0x8c, 0x88, + // // 0x09, 0x34, 0x93, 0x6c, 0x54, 0x4a, 0x08, 0xe2, 0x43, 0x0a, 0x04, 0x10, 0x60, 0x20, + // // 0x8c, 0x71, 0x11, 0x48, 0x35, 0x02, 0xb2, 0x51, 0x6d, 0xb2, 0x08, 0x12, 0xc8, 0x41, + // // 0x4c, 0x41, 0x84, 0xe3, 0x05, 0x12, 0x66, 0x48, 0x6c, 0x46, 0x01, 0x84, 0xdb, 0x6d, + // // 0x84, 0x49, 0x01, 0x0a, 0x45, 0xc2, 0x24, 0xa0, 0xc8, 0x81, 0xdc, 0x24, 0x04, 0x1b, + // // 0x22, 0x51, 0x69, 0x48, 0x4c, 0x42, 0x1a, 0x6e, 0x20, 0x81, 0xa4, 0x43, 0x26, 0xe4, + // // 0x25, 0xa0, 0x71, 0x38, 0x91, 0x28, 0x23, 0x62, 0x12, 0x59, 0x32, 0xe0, 0x29, 0x35, + // // 0x25, 0x48, 0xe0, 0x65, 0xca, 0x28, 0x24, 0xc2, 0x84, 0x54, 0x70, 0x92, 0x2c, 0x22, + // // 0x9b, 0x0d, 0x18, 0x4a, 0x11, 0x24, 0x46, 0xd2, 0x51, 0x08, 0x41, 0x84, 0x63, 0x6a, + // // 0xa3, 0x8c, 0x94, 0x5b, 0xa8, 0x83, 0x84, 0x24, 0x51, 0x01, 0x12, 0x68, 0x88, 0x8d, + // // 0xa9, 0x01, 0x28, 0x00, 0x6e, 0x40, 0x70, 0x16, 0x58, 0x85, 0x5c, 0x6d, 0xc9, 0x1c, + // // 0x32, 0x60, 0x41, 0x14, 0x4d, 0x94, 0xe2, 0x80, 0x50, 0x4c, 0x30, 0x91, 0x46, 0xca, + // // 0x01, 0x04, 0x2c, 0x02, 0x8c, 0x2c, 0x9c, 0x08, 0xa4, 0x19, 0x83, 0x0a, 0x28, 0x82, + // // 0x2c, 0x32, 0x52, 0x24, 0xc0, 0x30, 0x28, 0xe3, 0x97, 0x21, 0x0a, 0x08, 0x08, 0xb2, + // // 0xc0, 0x29, 0x8a, 0x64, 0x43, 0x03, 0x00, 0x98, 0x92, 0x18, 0x28, 0xb8, 0x20, 0x0c, + // // 0x10, 0x24, 0x94, 0x61, 0x04, 0x91, 0x04, 0x23, 0x86, 0x46, 0x62, 0x45, 0x44, 0x01, + // // 0x20, 0xe4, 0x12, 0x62, 0x0c, 0x24, 0x48, 0xb4, 0xe4, 0x89, 0x20, 0x20, 0xc5, 0x00, + // // 0x20, 0x0c, 0x45, 0xa5, 0x30, 0x92, 0x8c, 0x4d, 0x4a, 0x08, 0xc0, 0xe4, 0x84, 0x99, + // // 0x70, 0x94, 0x49, 0xb1, 0x1c, 0x88, 0x99, 0x69, 0x90, 0x63, 0x96, 0x11, 0x25, 0x94, + // // 0x8c, 0x26, 0x61, 0x00, 0x08, 0x69, 0x84, 0x8b, 0xc2, 0xc0, 0x6c, 0x00, 0x05, 0x38, + // // 0x19, 0x60, 0xa4, 0x51, 0x82, 0xd2, 0xa0, 0x21, 0x6c, 0xa0, 0x0e, 0x06, 0x14, 0x90, + // // 0xd1, 0x61, 0xa3, 0x10, 0x26, 0x9b, 0x8c, 0x40, 0x0d, 0xb2, 0x89, 0x31, 0xd0, 0x24, + // // 0xb6, 0x9c, 0x44, 0x99, 0x6a, 0x12, 0x82, 0x05, 0x13, 0x80, 0xc2, 0x10, 0xa0, 0xe2, + // // 0x32, 0x09, 0x0a, 0x30, 0x82, 0x28, 0xe3, 0x70, 0x5c, 0x11, 0xc2, 0x4a, 0x12, 0xd8, + // // 0x44, 0xa8, 0x90, 0x98, 0xcc, 0x4a, 0x10, 0x6e, 0x16, 0x1c, 0x08, 0x09, 0x2d, 0xa4, + // // 0x10, 0x80, 0x91, 0x84, 0x0c, 0x10, 0x20, 0x60, 0x16, 0x82, 0x44, 0x18, 0x4e, 0x30, + // // 0x00, 0x48, 0x49, 0x51, 0x30, 0x5a, 0x24, 0xc2, 0x42, 0x40, 0x06, 0x02, 0x90, 0x61, + // // 0x42, 0x88, 0xb0, 0x8a, 0x98, 0x9c, 0x66, 0x40, 0x24, 0x90, 0x01, 0x89, 0xe3, 0x25, + // // 0x04, 0x10, 0xa4, 0x00, 0x20, 0xc0, 0x10, 0xb6, 0xe1, 0x71, 0x24, 0x44, 0xc1, 0x13, + // // 0xb4, 0x48, 0x2d, 0xc4, 0x6a, 0x02, 0x81, 0x25, 0x0a, 0x00, 0x08, 0x54, 0x84, 0x48, + // // 0x00, 0x84, 0x66, 0x48, 0x19, 0x50, 0x04, 0x30, 0xc9, 0x13, 0xa6, 0xd3, 0x65, 0x80, + // // 0x84, 0xb2, 0x42, 0x4c, 0x5a, 0x64, 0x17, 0x1a, 0x48, 0xc0, 0x8c, 0x34, 0x4d, 0x88, + // // 0x09, 0x65, 0x92, 0x50, 0xc8, 0x53, 0x86, 0x84, 0x05, 0x98, 0x30, 0x16, 0x4b, 0x08, + // // 0x18, 0x41, 0x36, 0xdb, 0x05, 0x0c, 0x05, 0x08, 0x84, 0x92, 0x5c, 0x26, 0x52, 0x92, + // // 0x15, 0x0c, 0x22, 0x53, 0x6d, 0x40, 0x49, 0x83, 0x20, 0x08, 0x21, 0x10, 0x09, 0x04, + // // 0xa9, 0x20, 0x05, 0xb3, 0x32, 0x44, 0xc2, 0x40, 0xdb, 0x45, 0x40, 0x21, 0x16, 0x03, + // // 0x81, 0x86, 0x2c, 0xa1, 0x0b, 0x64, 0x64, 0x91, 0x40, 0xc4, 0x46, 0x84, 0x62, 0x48, + // // 0x08, 0x82, 0xe2, 0x71, 0xd4, 0x4d, 0x94, 0x88, 0x12, 0x01, 0x08, 0xa6, 0x8d, 0xa2, + // // 0x41, 0x8e, 0x54, 0x64, 0x30, 0x12, 0x19, 0x18, 0x31, 0xb4, 0x70, 0xc0, 0x88, 0x0c, + // // 0xa1, 0x45, 0x44, 0x64, 0x38, 0x80, 0x6e, 0x38, 0x6d, 0xc0, 0x60, 0x0e, 0x24, 0x32, + // // 0x30, 0x5c, 0x17, 0x04, 0x32, 0x06, 0x64, 0x40, 0x91, 0x22, 0xcc, 0x0e, 0x12, 0xd1, + // // 0x92, 0x40, 0x61, 0xc2, 0x65, 0xb8, 0x43, 0x8d, 0x5b, 0x66, 0x25, 0x18, 0x42, 0xc4, + // // 0x64, 0xc8, 0x62, 0x28, 0xa2, 0x81, 0x83, 0x0c, 0x49, 0x23, 0x46, 0xe4, 0x85, 0x48, + // // 0x80, 0xa6, 0x59, 0x02, 0x61, 0x2c, 0xc2, 0x13, 0x10, 0xc9, 0x09, 0xb0, 0x71, 0x09, + // // 0x0c, 0x84, 0x41, 0x12, 0x28, 0xd3, 0x92, 0x93, 0x92, 0x14, 0x0c, 0xb4, 0xa1, 0x04, + // // 0xe2, 0x99, 0x2b, 0xa2, 0x0b, 0x2e, 0xd3, 0x7d, 0x02, 0x60, 0xcf, 0x9e, 0x0b, 0x48, + // // 0xdd, 0x4c, 0x4f, 0x1f, 0x45, 0xa2, 0x88, 0x84, 0xea, 0xfa, 0xa1, 0x12, 0x3b, 0x80, + // // 0x93, 0x9b, 0x87, 0x98, 0x62, 0x95, 0x60, 0x28, 0xcb, 0x0e, 0x2d, 0x6d, 0xf0, 0x3a, + // // 0xc9, 0x67, 0xca, 0xdc, 0x10, 0xf1, 0xde, 0x7d, 0xf4, 0xa7, 0x4f, 0x9e, 0xbe, 0x41, + // // 0x83, 0xe4, 0x29, 0x98, 0x15, 0x5a, 0x9c, 0xee, 0xe9, 0x0e, 0xda, 0xa4, 0x28, 0xfe, + // // 0xdd, 0x95, 0x3d, 0xe0, 0x76, 0xd5, 0x13, 0x15, 0x76, 0xcb, 0x82, 0x4f, 0x5a, 0x3a, + // // 0x83, 0x50, 0x92, 0x3f, 0xdc, 0xf7, 0x8b, 0x07, 0x90, 0xdd, 0x57, 0xf9, 0x34, 0x85, + // // 0xf7, 0xff, 0xfc, 0xa3, 0xa2, 0x37, 0x29, 0x7e, 0xfc, 0xc8, 0xd7, 0x1e, 0xcf, 0xeb, + // // 0xfe, 0x79, 0x90, 0x2b, 0x61, 0xef, 0xb4, 0x5b, 0xd1, 0xd4, 0xfe, 0x06, 0x17, 0xea, + // // 0xaf, 0xf2, 0x66, 0x0c, 0x59, 0xf1, 0xc3, 0xaf, 0x21, 0x98, 0x56, 0x2c, 0xf1, 0xcd, + // // 0x7c, 0x1d, 0x94, 0xc1, 0x31, 0x6b, 0xdd, 0x92, 0x66, 0xe4, 0x54, 0x68, 0x6b, 0x6c, + // // 0x21, 0x08, 0x09, 0x09, 0x2f, 0xd0, 0xad, 0x29, 0x55, 0xb0, 0x25, 0xea, 0x4f, 0xa7, + // // 0xa0, 0x5c, 0xe4, 0x64, 0xec, 0xf9, 0xff, 0x61, 0x0a, 0x34, 0xd3, 0x8d, 0x79, 0x30, + // // 0xb6, 0x35, 0xae, 0x9c, 0x59, 0xae, 0x9b, 0x0c, 0x92, 0xeb, 0x4b, 0xc9, 0xc0, 0x0c, + // // 0xca, 0x9e, 0x78, 0xe5, 0xd5, 0xda, 0xd1, 0x0b, 0xc6, 0x4a, 0xca, 0x2c, 0x42, 0x3b, + // // 0x2d, 0x89, 0x61, 0xb3, 0xf4, 0x85, 0x29, 0x86, 0xa8, 0xc6, 0xbd, 0xd4, 0xb2, 0x79, + // // 0x1b, 0x8f, 0xb9, 0xe9, 0xa5, 0xef, 0xc1, 0xe6, 0xb7, 0xe0, 0xfe, 0xc0, 0xf7, 0x91, + // // 0x0c, 0xc5, 0xa3, 0x99, 0x09, 0x1e, 0x3a, 0x33, 0x1d, 0x14, 0x15, 0x4d, 0x76, 0xb8, + // // 0x72, 0xf5, 0xdb, 0x66, 0x72, 0xf7, 0xb5, 0x47, 0x7b, 0xf7, 0xc8, 0x4f, 0x90, 0x22, + // // 0xc2, 0x03, 0xe8, 0xdb, 0xe6, 0xfe, 0x30, 0x8f, 0xae, 0xc0, 0x4b, 0xb6, 0xfb, 0xb8, + // // 0xeb, 0x7c, 0x99, 0xc5, 0x7e, 0x3e, 0xa4, 0x24, 0xcc, 0x83, 0xaa, 0x05, 0x9d, 0x39, + // // 0x86, 0xf0, 0x59, 0x1a, 0xf0, 0x39, 0x68, 0x28, 0x4d, 0xf4, 0x95, 0xa6, 0x7e, 0x61, + // // 0x51, 0x1f, 0x83, 0xdd, 0x51, 0xab, 0x2a, 0xa5, 0x53, 0x80, 0xa9, 0x22, 0x25, 0x35, + // // 0x63, 0x53, 0x47, 0x5d, 0xbc, 0x7b, 0xde, 0xe8, 0x3a, 0xed, 0x07, 0xff, 0x19, 0xaa, + // // 0xb4, 0x77, 0xfd, 0x35, 0xdd, 0x09, 0xaf, 0xec, 0x61, 0xa1, 0xff, 0x60, 0x0b, 0x9a, + // // 0x7c, 0xf8, 0x0d, 0x0d, 0xa5, 0x18, 0x69, 0x5d, 0xce, 0xb2, 0x9d, 0x3d, 0x62, 0xb2, + // // 0x09, 0xcc, 0xbb, 0x45, 0x40, 0x5a, 0xc5, 0x63, 0x0e, 0x57, 0x36, 0x5b, 0xaa, 0x8d, + // // 0x42, 0x71, 0x20, 0xa7, 0xe3, 0x93, 0x70, 0xb7, 0x6e, 0x59, 0x92, 0x3a, 0xcc, 0x39, + // // 0xef, 0xec, 0xf9, 0xb0, 0xd1, 0x35, 0x72, 0xeb, 0xf0, 0xa1, 0x62, 0xd0, 0xd1, 0x82, + // // 0x5b, 0xc7, 0x99, 0x3a, 0x6e, 0x1d, 0x3d, 0x0c, 0x36, 0x0e, 0x10, 0x5a, 0x08, 0x7b, + // // 0x85, 0xca, 0xba, 0x43, 0x59, 0x8e, 0x4e, 0x9a, 0xfa, 0x14, 0xf8, 0x74, 0x03, 0x55, + // // 0x20, 0xfb, 0xe1, 0x49, 0x53, 0x35, 0xf5, 0xd5, 0x87, 0x14, 0x1f, 0x50, 0x72, 0xa5, + // // 0xd1, 0x43, 0x16, 0x3f, 0x2b, 0x33, 0x69, 0x60, 0x70, 0x0d, 0x67, 0xb1, 0x1a, 0x12, + // // 0x79, 0xc7, 0xcf, 0xb5, 0xf6, 0x7a, 0x6d, 0x13, 0xfc, 0x04, 0x31, 0xc7, 0x98, 0x5d, + // // 0xf3, 0x69, 0xa8, 0x16, 0xb7, 0xe0, 0x62, 0x00, 0xd9, 0xbb, 0x6e, 0xd9, 0xa4, 0xdd, + // // 0x3e, 0x2d, 0x2e, 0xe8, 0x25, 0x72, 0x6b, 0x0d, 0x00, 0x1d, 0xcc, 0xea, 0x89, 0x6e, + // // 0x6e, 0x12, 0x36, 0x67, 0x4c, 0x03, 0xfe, 0x55, 0xbe, 0x0c, 0xf4, 0x24, 0x01, 0x3e, + // // 0x18, 0xa0, 0xc8, 0xb3, 0xd7, 0xe4, 0xb0, 0x4e, 0x41, 0x84, 0x75, 0x13, 0x90, 0x67, + // // 0xb0, 0x45, 0x5c, 0x0c, 0x4c, 0x76, 0x65, 0xa1, 0x3d, 0x09, 0x17, 0x04, 0x87, 0x97, + // // 0x6e, 0x64, 0xef, 0xbe, 0x3f, 0xa6, 0x7c, 0x15, 0x14, 0x6a, 0xf4, 0x4f, 0x9c, 0x82, + // // 0x58, 0xdc, 0xe3, 0xd7, 0x22, 0x17, 0x5f, 0x96, 0xc1, 0xd2, 0xe4, 0x14, 0x59, 0xe1, + // // 0x5c, 0x3c, 0x55, 0xdd, 0xb6, 0xd8, 0x4e, 0xc0, 0xa0, 0x62, 0xbe, 0x7c, 0xaa, 0x4d, + // // 0x28, 0x30, 0xb4, 0x12, 0x8d, 0x27, 0xd5, 0x0f, 0x27, 0xbf, 0xe0, 0x3b, 0x07, 0xd5, + // // 0xbd, 0x21, 0x68, 0xd9, 0xf9, 0x19, 0x86, 0x08, 0xe1, 0x76, 0xa7, 0xff, 0xa5, 0xbf, + // // 0x5a, 0xaf, 0x60, 0x48, 0x42, 0x0b, 0x01, 0xce, 0x56, 0xac, 0x6b, 0x76, 0x35, 0x9c, + // // 0x55, 0x78, 0x8e, 0x94, 0x9e, 0xaa, 0xc2, 0x75, 0x3b, 0xba, 0xe1, 0xd9, 0x15, 0x8b, + // // 0x00, 0x4f, 0x33, 0x37, 0xd1, 0x43, 0x1e, 0x11, 0x23, 0x95, 0x59, 0x59, 0x58, 0x05, + // // 0x9f, 0x9c, 0xa1, 0x66, 0xae, 0x55, 0xc6, 0xca, 0xa7, 0xb5, 0x56, 0xe0, 0xac, 0x3c, + // // 0x9d, 0x93, 0x5a, 0xce, 0x62, 0x76, 0x5a, 0x90, 0x12, 0xec, 0xdd, 0x1d, 0x9b, 0xdf, + // // 0x7e, 0xa7, 0xa4, 0xdc, 0x36, 0x25, 0x87, 0x01, 0xb6, 0x1b, 0x3d, 0x79, 0xa8, 0x43, + // // 0xcf, 0xf3, 0xf2, 0xfc, 0x01, 0xb2, 0xbb, 0x10, 0x90, 0x8b, 0x74, 0x19, 0x6e, 0x83, + // // 0x5d, 0x3a, 0xa7, 0x7a, 0x47, 0xfb, 0xf3, 0x19, 0xd9, 0x07, 0xeb, 0xaa, 0x98, 0xa9, + // // 0x29, 0x69, 0xe3, 0xcb, 0x8f, 0x05, 0x9d, 0x64, 0xc8, 0xd6, 0x2a, 0xd8, 0xe6, 0xa2, + // // 0xdc, 0x7c, 0xf1, 0x98, 0x97, 0xa2, 0x7c, 0x12, 0x35, 0xe9, 0xd1, 0xb7, 0x64, 0xb2, + // // 0x01, 0xb7, 0x07, 0x5c, 0xd5, 0xcf, 0x7e, 0x64, 0x04, 0xea, 0xf9, 0x0f, 0x30, 0x26, + // // 0x9c, 0x26, 0xab, 0x88, 0xe3, 0x29, 0x07, 0x7f, 0x0f, 0x52, 0x62, 0xe1, 0x71, 0x61, + // // 0x0a, 0xa1, 0xb6, 0xfc, 0x87, 0xa7, 0x0a, 0xc3, 0x83, 0xb6, 0x89, 0x8a, 0x05, 0x70, + // // 0x28, 0xf5, 0x49, 0xc8, 0x1e, 0xc6, 0xfa, 0xe6, 0xd4, 0xe9, 0x0a, 0x92, 0x7d, 0xc2, + // // 0x3b, 0x76, 0xea, 0xb0, 0x5e, 0x87, 0xc4, 0xdb, 0x19, 0x51, 0x22, 0x56, 0x14, 0xb6, + // // 0xd7, 0x47, 0x78, 0x3c, 0x2e, 0x90, 0xc5, 0xc1, 0xc1, 0x01, 0xdc, 0x14, 0x35, 0xd8, + // // 0x12, 0x75, 0x3e, 0x6f, 0x83, 0x37, 0xbc, 0x73, 0xd3, 0x99, 0x6b, 0xa2, 0x9b, 0x7a, + // // 0x43, 0xca, 0x08, 0xe5, 0x4a, 0xe6, 0x3f, 0x06, 0xef, 0xbf, 0xef, 0x98, 0x46, 0x5b, + // // 0x29, 0xfd, 0x58, 0xbd, 0xbb, 0x5d, 0xbc, 0xd1, 0x04, 0x72, 0x83, 0x86, 0xd7, 0x04, + // // 0xf9, 0x69, 0x13, 0xdb, 0xc7, 0x73, 0x82, 0x3c, 0x9c, 0xfd, 0x5e, 0xb4, 0xe8, 0xc8, + // // 0x81, 0x53, 0xd6, 0xa0, 0x2a, 0x10, 0xa4, 0x16, 0x49, 0x1e, 0xba, 0x01, 0x48, 0x1a, + // // 0x7e, 0xd4, 0x99, 0x73, 0x8a, 0xb0, 0x56, 0xc9, 0x26, 0xb3, 0x90, 0x37, 0x5a, 0x98, + // // 0xae, 0xe3, 0x67, 0xff, 0x00, 0xee, 0x53, 0x20, 0x19, 0x65, 0xe6, 0x57, 0x8a, 0x52, + // // 0xc3, 0x6c, 0xeb, 0x16, 0xb1, 0x28, 0xd6, 0x47, 0xed, 0x7f, 0x81, 0x05, 0x7a, 0x47, + // // 0x7a, 0xf2, 0xb5, 0x72, 0x3f, 0xc6, 0xc0, 0x60, 0x64, 0xe0, 0xb9, 0x4a, 0x80, 0x60, + // // 0xfe, 0x19, 0xd2, 0x44, 0xd6, 0x1c, 0xd5, 0x82, 0x75, 0x0d, 0x0e, 0x8b, 0x5d, 0x59, + // // 0xaf, 0xc4, 0x9b, 0xdf, 0xe0, 0x66, 0xa3, 0x83, 0x32, 0xc7, 0x92, 0x3d, 0x6d, 0x6f, + // // 0xd9, 0xa0, 0x5c, 0xfb, 0x13, 0x80, 0x53, 0x47, 0x00, 0x6e, 0x98, 0xd7, 0x0b, 0x79, + // // 0x0c, 0xac, 0xbb, 0x83, 0x21, 0xb1, 0x2b, 0xab, 0x42, 0x20, 0x71, 0x9d, 0x04, 0x74, + // // 0xc2, 0x63, 0x65, 0xe8, 0x24, 0x25, 0x29, 0x2d, 0xaa, 0xa3, 0xd7, 0xa9, 0xf5, 0xbe, + // // 0xd4, 0x36, 0x80, 0x94, 0xf9, 0x58, 0x0c, 0x2c, 0x5b, 0xcb, 0xb8, 0x64, 0x1a, 0x79, + // // 0x37, 0x5a, 0x45, 0x5e, 0x5f, 0xa2, 0x7c, 0x14, 0x8d, 0x9f, 0x27, 0x49, 0x5f, 0x8d, + // // 0x75, 0xa7, 0x9b, 0xc8, 0x3c, 0x26, 0xda, 0x56, 0xbc, 0xe3, 0x2e, 0x3b, 0x78, 0xc2, + // // 0x4a, 0xc3, 0x0b, 0xc6, 0xa2, 0xa5, 0x14, 0x26, 0xac, 0x1b, 0xe9, 0x47, 0xa1, 0x3c, + // // 0xce, 0x7c, 0x4c, 0xb4, 0x10, 0x2c, 0x5d, 0x26, 0x2a, 0x2e, 0x45, 0xbf, 0x8b, 0x2f, + // // 0xbe, 0x4f, 0xed, 0xcb, 0xcd, 0x22, 0x59, 0xf0, 0x4b, 0xf1, 0x7c, 0x9f, 0xcd, 0x61, + // // 0xc9, 0x57, 0x15, 0x87, 0xce, 0x02, 0xef, 0x8d, 0x76, 0xd4, 0x0a, 0x41, 0x19, 0x47, + // // 0xcd, 0xc4, 0x97, 0xa9, 0x78, 0x14, 0x35, 0x50, 0xeb, 0x2d, 0x20, 0x4f, 0x4a, 0x6a, + // // 0x75, 0x0d, 0x1f, 0xdb, 0xc4, 0xd2, 0x09, 0xde, 0xdb, 0x01, 0x06, 0x61, 0xeb, 0x15, + // // 0xde, 0x9b, 0x48, 0x41, 0x67, 0xdc, 0x15, 0xff, 0x64, 0x46, 0xfe, 0x5e, 0x21, 0x21, + // // 0xab, 0x16, 0x8f, 0x2a, 0xe9, 0xd2, 0x29, 0x61, 0x9d, 0x28, 0xf2, 0xd6, 0x52, 0x70, + // // 0x4b, 0x51, 0x16, 0x88, 0x01, 0xb2, 0x64, 0xb6, 0x86, 0x97, 0x6b, 0x46, 0xbf, 0xe2, + // // 0x9f, 0x16, 0x3b, 0x1d, 0xb7, 0x8b, 0x0a, 0x9c, 0x64, 0x7b, 0xa7, 0x28, 0x48, 0x01, + // // 0xd9, 0x63, 0x36, 0x2c, 0xb2, 0xb5, 0x94, 0x4a, 0xbf, 0x93, 0x1b, 0x07, 0x81, 0x6f, + // // 0x8d, 0x1b, 0x38, 0x61, 0x48, 0x7c, 0xac, 0xb1, 0xe9, 0x09, 0x0d, 0x55, 0xc4, 0x89, + // // 0xab, 0xcd, 0x09, 0x86, 0x1f, 0x07, 0x0d, 0xc7, 0x1e, 0x43, 0x28, 0x45, 0x8f, 0x3f, + // // 0x48, 0xe1, 0x79, 0xe3, 0xd4, 0xc5, 0xdd, 0x80, 0xbb, 0x15, 0x78, 0x73, 0xaa, 0x0b, + // // 0x54, 0xdb, 0xf0, 0x6c, 0x0f, 0x76, 0x79, 0x16, 0x59, 0x24, 0x7c, 0x78, 0x35, 0x67, + // // 0x80, 0xf9, 0xc0, 0x54, 0x80, 0x0a, 0xa0, 0xc3, 0x86, 0x49, 0xc7, 0xbb, 0x6a, 0x94, + // // 0x78, 0xb5, 0x44, 0xce, 0x7e, 0x51, 0x46, 0x04, 0x64, 0xcf, 0xa5, 0x18, 0xcb, 0x13, + // // 0xd9, 0xcf, 0x71, 0xbd, 0x0d, 0x74, 0xcd, 0xc8, 0xc0, 0x47, 0xc5, 0xef, 0x05, 0x5d, + // // 0xde, 0x0b, 0x10, 0xab, 0x98, 0xdd, 0x46, 0x96, 0x1d, 0x26, 0x0d, 0x6f, 0x64, 0xcf, + // // 0xbc, 0xb8, 0xf3, 0x87, 0x4d, 0x9a, 0xd6, 0xcb, 0x9d, 0x64, 0x52, 0x17, 0xdc, 0x9e, + // // 0x20, 0xe8, 0xe2, 0x5a, 0x1a, 0x32, 0x1b, 0x00, 0x59, 0x33, 0x58, 0xa2, 0xe3, 0xfd, + // // 0x98, 0x0c, 0xae, 0x0b, 0x29, 0x25, 0x62, 0xa2, 0xc3, 0x8f, 0x10, 0x7d, 0x90, 0x13, + // // 0x11, 0x73, 0x1f, 0x32, 0x0b, 0x96, 0xbe, 0x9e, 0xdd, 0x37, 0x59, 0x7f, 0x88, 0xd8, + // // 0xa2, 0x55, 0xb6, 0x59, 0x1e, 0x0f, 0x4f, 0x01, 0xd3, 0x38, 0xe4, 0x6d, 0xcd, 0x75, + // // 0x6b, 0xe3, 0x3a, 0x5d, 0x6f, 0xaf, 0xd9, 0xc1, 0x03, 0x88, 0x89, 0x68, 0xae, 0xcf, + // // 0xc2, 0xc3, 0xc8, 0x13, 0xaf, 0x3b, 0x2e, 0xe5, 0xae, 0xef, 0x15, 0x26, 0xc8, 0x12, + // // 0x52, 0xf7, 0x62, 0x17, 0xc3, 0x7e, 0xef, 0xa5, 0x27, 0xa0, 0xc1, 0x30, 0x1b, 0xf7, + // // 0x21, 0xa1, 0x59, 0xcd, 0x77, 0x0d, 0x5c, 0xac, 0xb7, 0xdc, 0xa0, 0xa5, 0xe2, 0x70, + // // 0xd3, 0xce, 0xd8, 0xa0, 0xda, 0x22, 0x21, 0x9d, 0x4c, 0xdd, 0x7a, 0xc4, 0x0e, 0xa5, + // // 0x34, 0x29, 0xe3, 0x65, 0xfc, 0x92, 0x6d, 0x48, 0x5d, 0x3c, 0xf8, 0x18, 0x4e, 0x2d, + // // 0x16, 0x96, 0xf9, 0xb3, 0xac, 0x4f, 0x24, 0x75, 0x82, 0x62, 0xc7, 0x21, 0x3d, 0x5c, + // // 0x30, 0x2b, 0xef, 0xd9, 0x28, 0x5c, 0x8a, 0xca, 0x51, 0x54, 0xa3, 0x86, 0x72, 0xbe, + // // 0x19, 0x64, 0xca, 0x93, 0x8f, 0xde, 0xbd, 0xa6, 0xb5, 0x39, 0xad, 0x6c, 0xdc, 0x32, + // // 0x70, 0xdd, 0x6d, 0xa1, 0x76, 0x34, 0xc7, 0xfe, 0x43, 0xd5, 0x79, 0xa7, 0xa7, 0x9d, + // // 0x7a, 0xdb, 0xb5, 0xe6, 0xb4, 0x57, 0x49, 0xdd, 0x34, 0x47, 0x13, 0xb2, 0xa7, 0xb2, + // // 0xe9, 0x25, 0x29, 0x58, 0x3b, 0x03, 0x57, 0x2a, 0x32, 0x0a, 0x6f, 0x10, 0xd2, 0x71, + // // 0x90, 0x69, 0x0d, 0xb7, 0x06, 0x88, 0x11, 0x8d, 0xcf, 0x88, 0xa8, 0xfa, 0x4e, 0x6b, + // // 0xe9, 0x9a, 0x42, 0x7d, 0x73, 0xc2, 0xbd, 0xc6, 0x7a, 0x6a, 0xfc, 0xe1, 0x66, 0xfc, + // // 0x50, 0x76, 0x36, 0x88, 0x97, 0x52, 0x38, 0x9d, 0x4d, 0x83, 0xc1, 0x05, 0xcf, 0x22, + // // 0x6e, 0x71, 0x76, 0x35, 0xaa, 0xff, 0xd3, 0xc8, 0xd6, 0xbd, 0x84, 0x9a, 0xfa, 0xbb, + // // 0xec, 0xfd, 0x83, 0x37, 0x57, 0x2f, 0xf6, 0xb7, 0x88, 0xb1, 0xb4, 0xc6, 0x65, 0xc0, + // // 0x61, 0x7c, 0x9e, 0xa4, 0xba, 0x01, 0x0b, 0x4f, 0x98, 0x6f, 0x7d, 0x44, 0x87, 0xfc, + // // 0xec, 0xa9, 0xb7, 0xf4, 0x7f, 0x95, 0x5d, 0x8e, 0xff, 0xfd, 0xc6, 0xcc, 0x24, 0x67, + // // 0x1d, 0xb0, 0xbc, 0xe4, 0x94, 0x42, 0x2f, 0x1a, 0xd7, 0x68, 0xd4, 0x39, 0x63, 0x32, + // // 0x57, 0x81, 0x38, 0xdb, 0x89, 0xf5, 0xc6, 0x23, 0xe2, 0x55, 0xbc, 0x30, 0x23, 0xdf, + // // 0x41, 0x65, 0x1b, 0xd3, 0x75, 0x1c, 0x30, 0x99, 0x16, 0x53, 0x20, 0xd6, 0xd5, 0xe9, + // // 0x56, 0x2f, 0x07, 0xb0, 0x56, 0x9e, 0x5c, 0x8a, 0xe9, 0x06, 0x63, 0xcd, 0x02, 0x1a, + // // 0x5c, 0x8b, 0x87, 0x48, 0xc1, 0x2e, 0xe3, 0x6c, 0x42, 0x61, 0x7d, 0xce, 0x7b, 0x45, + // // 0x14, 0x40, 0x23, 0x04, 0x09, 0x65, 0xfd, 0xe4, 0x58, 0xff, 0xfb, 0xad, 0x01, 0xab, + // // 0x7f, 0x60, 0xa1, 0x56, 0x69, 0x2b, 0x3f, 0xdd, 0x1d, 0x5b, 0xd4, 0x70, 0xb8, 0x8e, + // // 0x80, 0xb3, 0x3d, 0x1f, 0x6d, 0x3a, 0xe5, 0x22, 0xd2, 0x2b, 0x7d, 0x65, 0x1a, 0xae, + // // 0x7a, 0x33, 0x5d, 0x7b, 0xd3, 0xe6, 0x56, 0xc8, 0x82, 0xd1, 0x27, 0x88, 0x88, 0x82, + // // 0x43, 0x0d, 0xa4, 0x3c, 0xab, 0x33, 0x47, 0x71, 0x6d, 0x6b, 0x64, 0xaf, 0xe3, 0x23, + // // 0x05, 0xd7, 0x8e, 0x1a, 0xcd, 0x63, 0x70, 0xd4, 0x37, 0x22, 0xb9, 0x68, 0xdf, 0x9d, + // // 0xa9, 0x47, 0x5d, 0x25, 0xe4, 0xcc, 0x1f, 0xd3, 0xe3, 0x55, 0x43, 0xd8, 0xbe, 0x04, + // // 0x65, 0x13, 0x62, 0xfc, 0x2b, 0xf2, 0xd1, 0xe9, 0x9c, 0x2d, 0x95, 0xe3, 0x1c, 0xf2, + // // 0x67, 0xe2, 0xe7, 0x31, 0x9d, 0x40, 0xc2, 0xb3, 0x7d, 0x45, 0x7d, 0x5a, 0xf0, 0xc6, + // // 0x7b, 0x83, 0xad, 0xc1, 0xae, 0xd3, 0x6c, 0x7c, 0x19, 0x15, 0x4a, 0x22, 0x3f, 0x25, + // // 0x23, 0x39, 0xe6, 0x0f, 0x8c, 0x61, 0xb7, 0x82, 0x1c, 0x20, 0xa4, 0x58, 0xea, 0xcd, + // // 0x33, 0x79, 0x77, 0x0b, 0x5b, 0xe1, 0x0e, 0x6c, 0x66, 0x98, 0x74, 0x3a, 0x81, 0x4a, + // // 0x49, 0x58, 0x50, 0xb5, 0x36, 0xce, 0xf1, 0x3e, 0xa1, 0x48, 0x7d, 0x4e, 0xfb, 0x85, + // // 0xe3, 0x35, 0x36, 0xc8, 0x62, 0x1a, 0x8b, 0x12, 0x56, 0xbc, 0xbc, 0x1f, 0x60, 0xb2, + // // 0xec, 0x10, 0xc5, 0x06, 0xa2, 0xbe, 0x1e, 0xb3, 0xfe, 0x1a, 0x3e, 0x4a, 0xa7, 0x70, + // // 0xe3, 0xcb, 0xf1, 0x44, 0x4e, 0x57, 0x74, 0x26, 0x2b, 0x34, 0x19, 0x99, 0xd5, 0x0d, + // // 0xa9, 0x5b, 0x48, 0x83, 0xd6, 0xb0, 0xfc, 0xb5, 0x36, 0x88, 0x45, 0x2f, 0x9d, 0x6c, + // // 0xf4, 0x36, 0x34, 0x48, 0x37, 0x0b, 0x3f, 0x0b, 0xc1, 0xc8, 0x4a, 0xe8, 0x8b, 0x29, + // // 0x30, 0xed, 0xd5, 0x94, 0x18, 0x9d, 0x0c, 0x2d, 0x9a, 0x28, 0x96, 0x9c, 0x78, 0xd8, + // // 0x5c, 0xae, 0x56, 0x85, 0x7e, 0xf0, 0x20, 0x96, 0xab, 0x56, 0x90, 0x42, 0x51, 0x99, + // // 0x22, 0x67, 0xfc, 0x2f, 0x5b, 0xb9, 0xb8, 0x73, 0xc2, 0x08, 0xd8, 0x56, 0xae, 0x2f, + // // 0xab, 0x0e, 0xfe, 0x72, 0x04, 0x0b, 0x8c, 0xd0, 0xf2, 0x2b, 0xea, 0x2b, 0xaa, 0xae, + // // 0x72, 0xe3, 0xfe, 0x40, 0x02, 0x4f, 0x5d, 0xcf, 0x98, 0xd7, 0xa2, 0x31, 0xeb, 0xd7, + // // 0x68, 0xce, 0x9a, 0x2b, 0x57, 0xe0, 0x1f, 0x5b, 0xab, 0x12, 0xb2, 0x77, 0x4e, 0x40, + // // 0xe9, 0xe2, 0xd5, 0xe7, 0x9a, 0x94, 0xab, 0x98, 0x15, 0x68, 0x88, 0x97, 0xfe, 0x0e, + // // 0x75, 0x2d, 0x0b, 0x49, 0xa6, 0x8e, 0x25, 0x79, 0xd5, 0x15, 0x69, 0xff, 0x9c, 0x6c, + // // 0x09, 0x39, 0xd9, 0x3e, 0xc7, 0x3e, 0x8c, 0x0c, 0xe9, 0xd9, 0x5c, 0x67, 0xf4, 0xd8, + // // 0x61, 0xe1, 0x44, 0x9f, 0x6c, 0xf3, 0xa8, 0xad, 0xb2, 0x6f, 0xbe, 0x86, 0xd6, 0x83, + // // 0x60, 0x65, 0x3d, 0xca, 0x69, 0x04, 0x63, 0x51, 0x71, 0x5a, 0xbb, 0x7e, 0xda, 0xe1, + // // 0x1f, 0x22, 0xee, 0x4b, 0x96, 0xe7, 0x9a, 0x6f, 0xba, 0x5b, 0x00, 0x01, 0xae, 0xf5, + // // 0x99, 0x91, 0x28, 0x1c, 0x42, 0xbe, 0xd8, 0xed, 0xfe, 0xfb, 0x62, 0xaf, 0x8f, 0xc4, + // // 0x5b, 0x79, 0x95, 0x52, 0x3f, 0x9e, 0xfa, 0x89, 0xf6, 0x16, 0x68, 0x19, 0xe7, 0xc8, + // // 0xd4, 0x29, 0x48, 0x77, 0x5a, 0xc6, 0x09, 0x7a, 0x32, 0x4f, 0x83, 0x3f, 0x68, 0x5a, + // // 0x61, 0x9d, 0x41, 0x11, 0x6e, 0x7d, 0x05, 0x25, 0x25, 0x56, 0x8c, 0x69, 0x0a, 0x92, + // // 0x3a, 0x0d, 0x5f, 0x65, 0x51, 0x28, 0x2e, 0xea, 0x8f, 0x6c, 0x6e, 0x8d, 0xef, 0xee, + // // 0xa0, 0xc1, 0xe9, 0xb4, 0x85, 0xc1, 0xdd, 0x37, 0x23, 0x56, 0x77, 0x29, 0x52, 0x8e, + // // 0x27, 0x26, 0xcc, 0x16, 0x54, 0x75, 0xb7, 0xc8, 0x0e, 0xbb, 0xcb, 0x2c, 0x6a, 0x25, + // // 0x55, 0x9e, 0x7c, 0x8e, 0xa6, 0x2f, 0x02, 0x2c, 0xd4, 0xc9, 0xa7, 0x34, 0x18, 0x94, + // // 0x7e, 0x31, 0x1c, 0xa7, 0xfc, 0x6e, 0x00, 0x16, 0x4e, 0xde, 0xb1, 0x44, 0xcb, 0xf3, + // // 0x30, 0x11, 0xad, 0x78, 0x18, 0x8a, 0x8e, 0xe7, 0xaf, 0xd0, 0x06, 0x55, 0xb5, 0x41, + // // 0xce, 0xc6, 0xaf, 0xee, 0xd3, 0x1d, 0xdc, 0x34, 0x4a, 0x68, 0x34, 0x02, 0x49, 0x22, + // // 0x8c, 0x35, 0xcb, 0x46, 0xce, 0xda, 0x2b, 0x6a, 0xdd, 0xd0, 0x31, 0xcf, 0xca, 0xd3, + // // 0x2a, 0xb6, 0x08, 0x85, 0x15, 0x23, 0x10, 0x89, 0x64, 0xc9, 0xd2, 0x10, 0x72, 0xd3, + // // 0xde, 0x89, 0x8e, 0xf3, 0xea, 0x7a, 0x3e, 0x8f, 0x50, 0x62, 0x24, 0xb4, 0x9a, 0x4c, + // // 0x9e, 0x3f, 0xf1, 0x3f, 0x4a, 0xa9, 0xf5, 0xb4, 0x0f, 0x86, 0x95, 0x83, 0xf0, 0x91, + // // 0x26, 0xcb, 0x2a, 0x1e, 0x9d, 0x31, 0x36, 0x3c, 0x89, 0xe6, 0xce, 0xec, 0xbc, 0x3f, + // // 0x2b, 0x7e, 0x57, 0xf2, 0x06, 0x06, 0xb5, 0x75, 0x7f, 0xc5, 0x58, 0xfc, 0x26, 0x9f, + // // 0x89, 0xd6, 0xff, 0x8e, 0xda, 0x7a, 0xee, 0xfd, 0xcf, 0x85, 0x4e, 0x8d, 0xe5, 0x44, + // // 0x32, 0x6c, 0xb3, 0xee, 0xd8, 0x11, 0xc1, 0x10, 0xcb, 0x88, 0xd5, 0x9a, 0x81, 0xaa, + // // 0xbf, 0x8c, 0x0c, 0x24, 0x18, 0x88, 0x2a, 0x31, 0x22, 0x9f, 0xfd, 0x72, 0xf1, 0x3f, + // // 0x53, 0xc4, 0x83, 0x94, 0x0c, 0xa5, 0x48, 0x53, 0x91, 0xd5, 0x5f, 0x22, 0x35, 0xd4, + // // 0x68, 0x05, 0x1a, 0xec, 0x65, 0xfd, 0x30, 0x76, 0x6e, 0x3b, 0xc6, 0x4b, 0x8e, 0x90, + // // 0x9b, 0x43, 0xfd, 0x97, 0xbd, 0x0f, 0x23, 0xf6, 0x97, 0xa9, 0x08, 0x66, 0x40, 0xa2, + // // 0x3e, 0x67, 0xa9, 0x89, 0x2f, 0x09, 0x5b, 0x06, 0x3d, 0x67, 0x1b, 0xcd, 0x88, 0xc9, + // // 0x6c, 0xee, 0x0e, 0x4f, 0x8b, 0x94, 0xec, 0x39, 0xfe, 0xee, 0xf7, 0x81, 0xc3, 0x2e, + // // 0x1b, 0xd2, 0x37, 0x93, 0x6a, 0x56, 0x68, 0x40, 0x4e, 0xac, 0x09, 0x05, 0x6d, 0xf0, + // // 0x5b, 0xd8, 0x67, 0xfd, 0x86, 0x56, 0x69, 0xf0, 0x03, 0x3d, 0x21, 0x10, 0x43, 0x5b, + // // 0xe4, 0xfc, 0x9f, 0xfd, 0x9e, 0xd5, 0x47, 0x4a, 0x19, 0xf7, 0x3f, 0x02, 0xea, 0xd1, + // // 0xdd, 0x50, 0x52, 0x01, 0x7e, 0x6b, 0xd2, 0xfa, 0x1c, 0x78, 0x4a, 0xef, 0x9d, 0xf9, + // // 0xc1, 0x87, 0xf8, 0xbc, 0x8b, 0xb5, 0xbc, 0x89, 0x20, 0x49, 0x51, 0xa4, 0x1f, 0x68, + // // 0x1c, 0xbc, 0xbf, 0x35, 0x6c, 0xec, 0xcf, 0x80, 0xd9, 0x91, 0x58, 0x88, 0xb4, 0xa6, + // // 0x95, 0x35, 0x19, 0x2a, 0x0e, 0xf6, 0xad, 0x13, 0x68, 0xea, 0xe9, 0xbc, 0xdb, 0x5e, + // // 0x8f, 0xc6, 0x10, 0xf1, 0xc3, 0xc7, 0xa8, 0x55, 0xc7, 0xe5, 0xbc, 0x11, 0xe5, 0x1e, + // // 0xfa, 0xbf, 0x67, 0x53, 0xde, 0x6f, 0x1f, 0x3c, 0x61, 0xe7, 0x2a, 0x2d, 0xc9, 0xf5, + // // 0x97, 0x28, 0xee, 0x8c, 0x87, 0x2f, 0x25, 0x7c, 0xa9, 0x35, 0x22, 0x2d, 0x2e, 0x5c, + // // 0x53, 0xd4, 0x64, 0x6e, 0x13, 0x1d, 0xc9, 0xf2, 0x56, 0x66, 0xa6, 0x4e, 0x86, 0xa2, + // // 0x9c, 0x56, 0xe6, 0xb3, 0x60, 0x5e, 0xc7, 0x91, 0xb5, 0x46, 0xa5, 0x92, 0x43, 0x49, + // // 0x5d, 0x36, 0x51, 0x18, 0xe1, 0x2d, 0x95, 0x4a, 0xde, 0x14, 0xc5, 0x65, 0x87, 0xf9, + // // 0x8b, 0x90, 0xf2, 0x34, 0x95, 0xb3, 0xf5, 0xb3, 0x0a, 0x57, 0x93, 0xe4, 0x09, 0xe4, + // // 0xce, 0x75, 0xe6, 0x95, 0x44, 0x3c, 0x90, 0x96, 0x1c, 0xff, 0x05, 0x3f, 0x63, 0x01, + // // 0x67, 0x80, 0x8d, 0x97, 0xd3, 0xa8, 0xc2, 0x65, 0x05, 0x5c, 0x57, 0x67, 0xca, 0x97, + // // 0xc5, 0xa0, 0x23, 0x07, 0xed, 0x73, 0x63, 0x82, 0xe4, 0x35, 0x1b, 0xd7, 0x92, 0xbb, + // // 0xcb, 0xd8, 0x28, 0x0d, 0x94, 0x72, 0x01, 0x19, 0x65, 0x43, 0xbb, 0xe2, 0x84, 0x3c, + // // 0x5d, 0xa4, 0x68, 0xb6, 0xc5, 0x19, 0x01, 0x4a, 0xc0, 0xc4, 0x4e, 0xec, 0x1b, 0xc1, + // // 0x22, 0xf5, 0x7c, 0x10, 0xc4, 0xc3, 0x5e, 0x45, 0xc4, 0xfd, 0xb9, 0xf0, 0xfc, 0xa8, + // // 0xa9, 0x3b, 0x86, 0xe9, 0x8e, 0xea, 0x12, 0x82, 0xd4, 0xe9, 0x4d, 0x56, 0x88, 0xa4, + // // 0x44, 0x10, 0xa3, 0xaf, 0x53, 0xde, 0x1a, 0xbf, 0x31, 0x71, 0x2b, 0x7d, 0x51, 0x03, + // // 0x75, 0x3d, 0xb3, 0xf2, 0x6b, 0xc9, 0x96, 0xd1, 0x7c, 0xb4, 0xe5, 0x3f, 0x00, 0xaa, + // // 0x22, 0x72, 0x20, 0x3b, 0xf3, 0x20, 0x24, 0x36, 0xaa, 0x93, 0x5a, 0x7b, 0x75, 0x59, + // // 0x11, 0x4f, 0xdb, 0xa2, 0x03, 0x40, 0x7a, 0x24, 0xbd, 0x51, 0xf4, 0xc1, 0x94, 0x49, + // // 0x83, 0x97, 0xc9, 0xe3, 0xdb, 0xb7, 0x55, 0xe4, 0xef, 0xc5, 0x59, 0xe6, 0x9d, 0x0e, + // // 0x76, 0x75, 0xc4, 0x61, 0xd4, 0xc0, 0xf9, 0x62, 0x07, 0x23, 0x90, 0xfa, 0x85, 0x82, + // // 0x7d, 0x31, 0x42, 0xf3, 0x01, 0x49, 0x9c, 0xa6, 0x38, 0x70, 0xf9, 0x09, 0x3f, 0x13, + // // 0xfe, 0xd6, 0xfd, 0xd6, 0xdf, 0x9f, 0xc6, 0x0f, 0x8e, 0x42, 0x4d, 0x7b, 0x63, 0xd5, + // // 0x48, 0x2a, 0x60, 0x74, 0x8f, 0x67, 0xf1, 0x8f, 0x6d, 0xa0, 0xa0, 0xfe, 0x74, 0x03, + // // 0x5a, 0xb5, 0x87, 0x0a, 0x27, 0x16, 0xb8, 0x72, 0xe7, 0x5c, 0x41, 0xd8, 0xd9, 0xde, + // // 0x4b, 0x75, 0x0d, 0x11, 0x30, 0x2f, 0x7e, 0x24, 0xcc, 0xa4, 0x2d, 0xbe, 0x1a, 0x05, + // // 0x15, 0xe4, 0x96, 0x2d, 0xe2, 0x5a, 0x66, 0x14, 0x33, 0x6e, 0x98, 0x56, 0x15, 0x04, + // // 0x5d, 0x34, 0xe8, 0x99, 0x25, 0xc4, 0xaa, 0x73, 0x7d, 0x07, 0xd1, 0xda, 0x72, 0x39, + // // 0x82, 0x5a, 0x11, 0x65, 0x76, 0x3f, 0x31, 0x89, 0x9f, 0x07, 0x1c, 0x1e, 0x63, 0xdb, + // // 0x29, 0x4b, 0x98, 0xc0, 0x01, 0x80, 0xda, 0xbb, 0x57, 0xcd, 0xdb, 0x0a, 0x93, 0xc4, + // // 0x56, 0xe0, 0x75, 0x7f, 0x88, 0xac, 0x03, 0x6e, 0x49, 0x91, 0xe7, 0xe9, 0x2f, 0x1b, + // // 0xd5, 0x32, 0xff, 0x28, 0xc3, 0x19, 0x07, 0xaa, 0x73, 0x62, 0x56, 0x34, 0x92, 0x51, + // // 0x75, 0xa1, 0x7d, 0xaa, 0xec, 0xbb, 0xcf, 0xdf, 0xb4, 0xa0, 0xf6, 0xec, 0x28, 0xdd, + // // 0x76, 0xd1, 0xdc, 0x17, 0x43, 0xbd, 0xf4, 0x9a, 0x5c, 0xfe, 0xf7, 0x6b, 0xe2, 0x11, + // // 0x66, 0x34, 0x85, 0x0e, 0xed, 0x5d, 0x06, 0x7f, 0xe7, 0x1d, 0xf7, 0x08, 0x29, 0x1e, + // // 0x15, 0xf6, 0x03, 0x19, 0x55, 0x69, 0x7c, 0xb6, 0x63, 0x84, 0xcf, 0xc3, 0x84, 0xa0, + // // 0xa3, 0xba, 0xc7, 0xbf, 0x5e, 0x84, 0x50, 0xf2, 0x58, 0x02, 0x99, 0x02, 0x7b, 0x76, + // // 0x16, 0x60, 0xd4, 0x01, 0x18, 0x5d, 0xdc, 0x7a, 0x25, 0x55, 0x0f, 0xe4, 0x40, 0xd4, + // // 0x91, 0x58, 0xca, 0x6f, 0xdf, 0x82, 0xf9, 0x33, 0xfb, 0x7e, 0xc6, 0x01, 0x35, 0x08, + // // 0x9c, 0x09, 0x20, 0x1e, 0x2f, 0x63, 0x2c, 0x79, 0xcd, 0x99, 0x39, 0x44, 0x52, 0x73, + // // 0x87, 0x4a, 0xf2, 0x5c, 0x32, 0x26, 0xad, 0x2a, 0x21, 0xe7, 0x1a, 0xf4, 0xe7, 0x03, + // // 0xd0, 0x83, 0xc4, 0x89, 0xde, 0x8e, 0x7e, 0xf7, 0x43, 0xa6, 0xfc, 0x79, 0x9a, 0x24, + // // 0x44, 0xa0, 0x5c, 0x33, 0x56, 0x42, 0xec, 0x0c, 0x35, 0xcc, 0x95, 0xa9, 0x7d, 0x30, + // // 0x22, 0xb5, 0x54, 0x56, 0xe1, 0x94, 0xce, 0x20, 0x2b, 0xd0, 0x77, 0xc4, 0x3f, 0x3c, + // // 0xe9, 0x7c, 0x20, 0xa0, 0xc2, 0x04, 0x2b, 0x74, 0x97, 0x95, 0x00, 0x6b, 0x19, 0xa5, + // // 0x28, 0x09, 0xcf, 0x04, 0x93, 0x06, 0xc7, 0x19, 0x2b, 0x21, 0x5e, 0xa4, 0x10, 0x4f, + // // 0xe0, 0x26, 0xcf, 0xd9, 0x4a, 0xdb, 0x59, 0x1e, 0x2c, 0x80, 0xaf, 0xd8, 0xee, 0x4d, + // // 0x26, 0x7d, 0x1e, 0x9f, 0xc3, 0x1a, 0x47, 0x29, 0xe7, 0x68, 0x95, 0xed, 0x25, 0x51, + // // 0x73, 0x13, 0xa8, 0x64, 0x00, 0xea, 0x8f, 0x27, 0x8a, 0x30, 0x53, 0x3a, 0x53, 0x65, + // // 0x91, 0xdb, 0x75, 0x75, 0x0c, 0x39, 0x9f, 0x12, 0xbc, 0xaf, 0xa3, 0xdd, 0x65, 0xed, + // // 0x69, 0x34, 0xa1, 0x81, 0xfd, 0x7c, 0xcb, 0x03, 0x36, 0x19, 0x39, 0x6f, 0x45, 0xaf, + // // 0xb0, 0xea, 0x4e, 0xff, 0x31, 0xe7, 0x6d, 0x6d, 0xf3, 0x49, + // // ]; + + // // let digest_512 = [ + // // 0x83, 0xe5, 0xbc, 0xa0, 0xe0, 0x52, 0xd0, 0x01, 0x3b, 0xa8, 0x9f, 0x5f, 0x33, 0xf4, + // // 0xb3, 0xea, 0x15, 0x49, 0xfc, 0x2a, 0x99, 0xac, 0x4f, 0xd9, 0x16, 0x5b, 0x78, 0x12, + // // 0x75, 0xdc, 0x58, 0x39, 0x92, 0x4c, 0x36, 0xa9, 0x5c, 0x6a, 0xe0, 0xdf, 0x68, 0x67, + // // 0xfa, 0x93, 0xa9, 0x8c, 0x1e, 0xd4, 0x61, 0x0c, 0xbb, 0xa4, 0xd6, 0x71, 0xad, 0x8d, + // // 0x30, 0x24, 0xa5, 0xca, 0xe3, 0x63, 0xd8, 0x5e, + // // ]; + + // // in hardware format + // let pk_hardware_format = ImageMldsaPubKey([ + // 0xa4c34aad, 0x85990594, 0x3b3099eb, 0x1ecf176c, 0x65de9fd6, 0xd9a79023, 0x8a4aa333, + // 0xd15a8dd4, 0x37a0aa4b, 0x0189a817, 0x6fabfe0e, 0xe492fb02, 0xca3b81bd, 0xb50c58ba, + // 0xfb11dff9, 0x2d477742, 0xd566336c, 0xd1777f86, 0x0bb73cb4, 0x5ec59477, 0x9b29603f, + // 0x132b3c75, 0xcecdce3c, 0x6cf949f0, 0xc4de84ed, 0x070e6a14, 0xc130ede6, 0x9a74116a, + // 0xdaf1de3e, 0x644faa5c, 0x26cc8d01, 0x60631c69, 0xce5f9b28, 0x68668dd7, 0xc48858fd, + // 0x4baaf788, 0xca3433ac, 0x56a9075f, 0x4a1a745d, 0x22aa4649, 0xa9892830, 0xd849f593, + // 0x3199e941, 0x844b76be, 0x5bde507d, 0xe356c318, 0xaf6948be, 0xf724d9e2, 0x0199a2bf, + // 0xcfccd9eb, 0x533ee9ce, 0x34c404fa, 0x4806443c, 0x6efc17d5, 0x30351c61, 0x42dc875f, + // 0x81f53daa, 0x209c95a4, 0x66660dad, 0x3f63c49a, 0x9ae324b1, 0x700520c1, 0x96f1e571, + // 0xaa5133fc, 0xb9b80b01, 0x66ec0775, 0xa087606c, 0x678196ed, 0x7e139b1b, 0x544c2fea, + // 0x3beb95ce, 0xe7c889e9, 0xd4a78996, 0x1180d253, 0xf0611137, 0xa9065c5b, 0x16ad085e, + // 0xec4eb2ba, 0x5115d3d0, 0xa5d9ecc6, 0x48993da9, 0xc9863823, 0x6d696b10, 0xc14bd1aa, + // 0xd5c7002c, 0x59b76ce5, 0x10d66ed6, 0xd99a3012, 0x15e32845, 0x64583adb, 0xf131cb8d, + // 0xa23be8b4, 0x5586c868, 0x0147a4e9, 0x027406d3, 0x38a34707, 0xbb11d35c, 0x999706cc, + // 0xd49b4f2f, 0x3a2bffcd, 0xbb8ea26a, 0x6031a38f, 0xb2b81bb0, 0xdd6ae90c, 0xc52aae9e, + // 0x40c7118b, 0x4f6f69ab, 0xf1b9fb4e, 0xe17eff23, 0xd4196251, 0xabda30b8, 0xcfe73bdf, + // 0x3fd708e8, 0x1dfdc294, 0x91135cf4, 0xce6d3a30, 0xd2d7d0e6, 0xc3bf0052, 0x58489c38, + // 0x20f2346a, 0xfd2fcb6d, 0xa1c107ab, 0xa56d7f4d, 0x4af058e5, 0xcee727f4, 0xf90d042e, + // 0x6e9782dd, 0x3629b653, 0x714e7dad, 0xe4348b69, 0xaa85996d, 0x8aa5f122, 0xf19ab645, + // 0x04caa0b3, 0xacdd0b32, 0xad05675c, 0xffff31eb, 0xa10645f5, 0xa863501a, 0x3911cf31, + // 0x033bce32, 0xb402a4ba, 0xbbc8e37a, 0x473b2032, 0xad0a222c, 0xadd5778a, 0xedef07f2, + // 0x4c704acb, 0x22395a0a, 0x46ed325c, 0x8c241603, 0xc63579f2, 0x5e171cf0, 0xc703cca8, + // 0xf0bf7ced, 0x95947386, 0xd118ea9a, 0xcf4061e9, 0x755fb6d7, 0xd34b8467, 0x4c9e316c, + // 0x8efbaf5c, 0xaf8b6b3e, 0xf28805b5, 0x2738a2f6, 0xc1cc79fa, 0xc2bd26c5, 0xe26b439c, + // 0xed195085, 0xd23091db, 0x9713c325, 0x50f0a173, 0x86a3be0e, 0x4a360d67, 0x934f7b28, + // 0x926678f0, 0x62dc04c5, 0xa976ae51, 0x38491c4f, 0xe607a52b, 0xc8704ef4, 0x8dc70877, + // 0x68acb197, 0xf8893edf, 0x79b754ab, 0x80e99d9a, 0x663d73e0, 0x49c877b5, 0x1f2a439e, + // 0x7fd843e6, 0x97e25f70, 0xee6b2ff3, 0x6b2a5500, 0x4942e97d, 0xc6b07951, 0x669b5e38, + // 0x5ff06273, 0x60272b43, 0x033fb5c0, 0x27259270, 0x171aee38, 0xa7484e7b, 0xc10a5c4e, + // 0xe3b43487, 0x6ddfb66c, 0xc6ef4e62, 0xf9b3589c, 0xc782ae18, 0xf363227d, 0xaa8ac410, + // 0xe17eeb1f, 0xeea4133d, 0xa6dfd292, 0x5f08f536, 0x1fcd05e8, 0xe16efe1a, 0x2e7a455e, + // 0xc72d6064, 0x5295fdb1, 0xb697a865, 0x8bc53087, 0xc08796f2, 0x2f2f6564, 0xb0a20df5, + // 0xdc023426, 0x76987c49, 0x3cce098d, 0x88583c0d, 0x45b0950c, 0x0fe6a2c2, 0x25b2bb09, + // 0xfaf36bbe, 0x2435bf9d, 0xb67048a5, 0x702c0f06, 0x2135a52a, 0x26287b18, 0x78cd8d26, + // 0x6bd42953, 0x726207fa, 0xd2ebcc0e, 0x0cf25057, 0x06526617, 0xbffc320c, 0xd04bb69c, + // 0xc727b133, 0x2432b8e5, 0xd254bf04, 0xb0edaf69, 0x4607caaf, 0xff728989, 0x78b8ce5b, + // 0xc308efb1, 0x5ed64e1c, 0xeeb02dcc, 0xf9eccf33, 0xdfe64533, 0xdaf93cc6, 0x78b73c17, + // 0x9a98cd23, 0x3268ae29, 0x1da48aae, 0xbe5e4261, 0x625797f9, 0xc16400e7, 0x27fe8157, + // 0x338cd9f9, 0xb6e767db, 0x82975ba6, 0x01478a92, 0x8c5cdfec, 0xaf7e993b, 0x7d85b256, + // 0x9fa753df, 0xe9d265fc, 0xea6425d9, 0x998f95ac, 0x72a0b613, 0x195c598d, 0x2a0c41d8, + // 0x5f04c2e9, 0xb46bf7c3, 0x7e6c48e0, 0x0288f1a9, 0xca6cb5f0, 0xe6d7b01d, 0x10c67516, + // 0xaca376b6, 0x40ada0f3, 0x419032f3, 0xc48cfd07, 0xb4fdd654, 0xa7e8db89, 0x370a5b78, + // 0x92787949, 0x63421003, 0x9ff61dbe, 0x41e91ecd, 0xc855adf9, 0x9debafb1, 0x26636426, + // 0xfe80dd85, 0xf9c53bb6, 0xae3c4ddb, 0x188a110c, 0x26cda2b5, 0x9c9917bc, 0x42c0adad, + // 0x2f089433, 0x67d66b50, 0xa794832c, 0x5af545cc, 0x2efa85bd, 0x98da9f58, 0x624e5a19, + // 0xf75ec35b, 0xc676e5a7, 0x2546bf59, 0x4f91107c, 0xb5036c40, 0x70d7794a, 0xceb719a2, + // 0xceafdac4, 0x78673f8b, 0x0d9c3355, 0xea376196, 0x2e3c451f, 0x58fc6789, 0x98843314, + // 0x10e05005, 0xa3ce45f7, 0xdc885fd2, 0x342e5ac2, 0x74e74b43, 0x6162978f, 0x5089904b, + // 0xa4a8f931, 0x35d20a3f, 0x6f20b8be, 0x6d27bf2c, 0xd192dedc, 0x0e9a7c84, 0xbdfcdf99, + // 0x85d98eef, 0xe28da928, 0x52bcfee1, 0x9c47918d, 0xc33cc88d, 0x99c8ebda, 0x5350bb28, + // 0x2fddd04e, 0xc2160cd0, 0xd9648620, 0x618566d2, 0xf4a0bf7f, 0x5912e3b4, 0xa9c23354, + // 0x81cc09c1, 0x7b4b41cc, 0x9bdf60e5, 0xb1adacbe, 0xcdbe6128, 0xa85e60fd, 0x09ec3faf, + // 0x904d4ca7, 0xb84b8e86, 0x763e058d, 0xca8a6df4, 0x4f3ef01e, 0x8a982342, 0xb5a59cbc, + // 0xbc0224f6, 0x3422b3f6, 0xc6ed782b, 0xd74f55c6, 0x38951af4, 0xb21db0fc, 0x99bc099e, + // 0xc6744fbc, 0x3cc0bac3, 0x6e6f28b0, 0x2977d2e4, 0x232359d0, 0x60152363, 0xe75a98f8, + // 0xaf3ffb97, 0x1c969cde, 0xcbc41a17, 0x6665f99c, 0xb7b7c2db, 0x327317cd, 0x3a163243, + // 0x92cfeaa5, 0x042bf3fb, 0x19cec4e4, 0x737a3dec, 0xf22df03f, 0x6c42b10d, 0xf13ebcff, + // 0x3b0bdf77, 0x192d2e1c, 0xe8eb3b74, 0x52584a0d, 0xfabea3ea, 0xb8e02671, 0x3d04b140, + // 0x2b80ee27, 0x734d3032, 0x4c6455c1, 0xc61e84b5, 0x01ad9944, 0x3ec96119, 0x6e5f95cd, + // 0x7352aacd, 0x88d2ac4b, 0x5467169e, 0xd4168a36, 0x1da952aa, 0x2bc0e131, 0x5435ab85, + // 0xc721938c, 0xb604f118, 0x212cd772, 0x576f6f3c, 0x69aa0827, 0xb04954e0, 0x1f257a5b, + // 0x32e882e6, 0xd1b37fcf, 0xde10e082, 0xaa97564f, 0x55210b99, 0x777dde41, 0x65288b28, + // 0x5db9c9c8, 0x5252207e, 0xea63af88, 0xca4e4c70, 0x79148f92, 0xb3b3aea5, 0x1c2a0bd8, + // 0x45badb6b, 0x020090a6, 0x9fea09ba, 0xae4cd583, 0xe7d105eb, 0x59eccce7, 0xcf6a7c88, + // 0x2e5a9b33, 0xdee39d2e, 0xbc686d8c, 0xc7dfdfb7, 0x2462a62a, 0x148ef997, 0x28017beb, + // 0x9da516bc, 0x02f99b56, 0xf1a8bdbd, 0x8450e8bc, 0x5a645fc6, 0x9c4d4c2e, 0xf8a77145, + // 0x80ca80ed, 0x70b7bc63, 0x121b7a47, 0x606e46e2, 0xea4e0fd2, 0xb981091d, 0xfa705cd5, + // 0x6a805fb6, 0xf3ba2475, 0x6a22f4d5, 0xe92c6b32, 0xb27666c1, 0x054b0277, 0x06362955, + // 0x0c8f72e8, 0x21c9eddd, 0x5e8ddb44, 0xd197a71e, 0x1162a17a, 0xd5f1421b, 0x91685dd9, + // 0xe230b73c, 0x9a273985, 0xbec50fb5, 0xb016f4d8, 0x6d5c37fc, 0x25dc6cac, 0xca3d51ae, + // 0x97004d3e, 0x5a194f4f, 0x005d47a0, 0xc7a853e4, 0x452ad686, 0x9114c0c3, 0x65f93218, + // 0x6c2b60e2, 0xac044aeb, 0x2ddfda20, 0x4dd0276e, 0xc61a870e, 0xc95bfc2c, 0xda195076, + // 0x354f97ca, 0x32137480, 0x87fe68b0, 0x6b22b28b, 0x4317ba5c, 0x03ed0d47, 0x97bd480d, + // 0x619de155, 0x366693fe, 0xace200ce, 0x6546161d, 0x825a7e75, 0xd640f113, 0x3775386c, + // 0x6e9c25e5, 0x088a8be4, 0x94b9b7b3, 0x39f1682d, 0x767efd2a, 0xea687310, 0x10352963, + // 0xf6ebb8ed, 0x7a05296a, 0xff5487e7, 0x48509dfc, 0xf39e4cec, 0x8b203189, 0xb0a9570a, + // 0x1691e8bb, 0x610f37ef, 0xc021e846, 0x56f7c080, 0xf7755ab4, 0x07864fa8, 0xe625d050, + // 0x1a81c9fa, 0xd474639e, 0x3f811615, 0x5961f68e, 0xa0f74879, 0x8ab0aafb, 0x5a76cc37, + // 0x69adee7c, 0xcb2bd291, 0x98c16b0e, 0x5f4cf758, 0xade63d79, 0xdeeca28b, 0x0663ae16, + // 0x31a0874d, 0xb9336dbb, 0x198579e2, 0x06b614c2, 0x5338c7b8, 0xd0ab40cc, 0x3fd1d9ca, + // 0x86be3f79, 0xc73ea699, 0x8d76c562, 0x3fb4d865, 0x49fe05d1, 0x19f4d8bf, 0xc37cc553, + // 0x71354e62, 0xf5034b0e, 0xd35120f8, 0xcc745c52, 0x2fc5244c, 0x1a88ac22, 0xbcf8175f, + // 0x36005e32, 0xf9636cdb, 0xa56e213a, 0xa036b783, 0xda369deb, 0x5994b510, 0x9a0c5c1d, + // 0x005985ec, 0x30592bdc, 0xbfba60a5, 0xae4371e8, 0x42d8f5c9, 0x11308268, 0x38ac064a, + // 0xb775f17a, 0x0068d63f, 0xa78cd9c8, 0xe943c524, 0x728c9e63, 0x1999dd1b, 0x04bd23f2, + // 0x2ac632b4, 0x18672908, 0xb7735515, 0x97711e0d, 0xa32a65de, 0xbdc4910c, 0x75575b2e, + // 0xfd4bf85d, 0x9c1494d7, 0x335bc800, 0x239953ae, 0x971fedc6, 0x8563f573, 0xc64adead, + // 0xe022b3cc, 0xb04890d0, 0xc1ca889e, 0x844e0df5, 0x0059ccd6, 0xfa57851b, 0x0b7e4747, + // 0xa0edca48, 0xd24d0309, 0x7bb51774, 0x0c8bb87b, 0xc1c260ce, 0x893359c7, 0xa8afb98c, + // 0xbca6933d, 0x5facc0be, 0xd07dd74e, 0xdd2aabe5, 0xd93c1bfd, 0xd6724ba3, 0xea1c92fd, + // 0x808c0212, 0xc0057e86, 0x18c116e6, 0x95ea19b6, 0x9971f126, 0xefb4c14c, 0x64087ba5, + // 0x6dbe8830, 0xa27661b3, 0xa9837201, 0x4f164171, 0x9108b3d1, 0xf79c865e, 0x541e4696, + // 0x5c4c4977, 0x25fb4114, 0x7cdae73b, 0xace74be7, + // ]); + + // let pk_regular_format_bytes = from_hw_format(&pk_hardware_format.0); + + // let pk = PublicKey::try_from_bytes(pk_regular_format_bytes).unwrap(); + // // let sk = PrivateKey::try_from_bytes(sk_bytes).unwrap(); + + // // let sig = sk.try_sign(&digest_512, &[]).unwrap(); + // // println!("{:x?}", sig); + // // panic!(); + // } } From 4cfd020fc84eb38b590d371c3b7acdf6a4ea39c0 Mon Sep 17 00:00:00 2001 From: Max Timkovich Date: Tue, 31 Dec 2024 12:41:32 -0800 Subject: [PATCH 4/6] fix keys --- Cargo.lock | 2 - image/gen/src/generator.rs | 1 - image/verify/Cargo.toml | 1 - image/verify/src/verifier.rs | 2 - .../tools/mldsa_keys/own-mldsa-priv-key.bin | Bin 4896 -> 4896 bytes .../tools/mldsa_keys/own-mldsa-pub-key.bin | Bin 2592 -> 2592 bytes .../tools/mldsa_keys/vnd-mldsa-priv-key-0.bin | Bin 4896 -> 4896 bytes .../tools/mldsa_keys/vnd-mldsa-priv-key-1.bin | Bin 4896 -> 4896 bytes .../tools/mldsa_keys/vnd-mldsa-priv-key-2.bin | Bin 4896 -> 4896 bytes .../tools/mldsa_keys/vnd-mldsa-priv-key-3.bin | Bin 4896 -> 4896 bytes .../tools/mldsa_keys/vnd-mldsa-pub-key-0.bin | Bin 2592 -> 2592 bytes .../tools/mldsa_keys/vnd-mldsa-pub-key-1.bin | Bin 2592 -> 2592 bytes .../tools/mldsa_keys/vnd-mldsa-pub-key-2.bin | Bin 2592 -> 2592 bytes .../tools/mldsa_keys/vnd-mldsa-pub-key-3.bin | Bin 2592 -> 2592 bytes sw-emulator/lib/periph/Cargo.toml | 1 - sw-emulator/lib/periph/src/ml_dsa87.rs | 677 ------------------ 16 files changed, 684 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8bc12da5a5..4ab38ea8f6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -478,7 +478,6 @@ dependencies = [ "caliptra-emu-derive", "caliptra-emu-types", "caliptra-hw-model-types", - "caliptra-image-types", "caliptra-registers", "fips204", "lazy_static", @@ -697,7 +696,6 @@ dependencies = [ "caliptra-image-types", "caliptra_common", "memoffset 0.8.0", - "ufmt", "zerocopy", ] diff --git a/image/gen/src/generator.rs b/image/gen/src/generator.rs index 61f1404414..6e8e5805ba 100644 --- a/image/gen/src/generator.rs +++ b/image/gen/src/generator.rs @@ -221,7 +221,6 @@ impl ImageGenerator { )?; let sig = mldsa_sig.as_bytes(); - vendor_sigs.pqc_sig.0[..sig.len()].copy_from_slice(sig); }; } diff --git a/image/verify/Cargo.toml b/image/verify/Cargo.toml index 47f3d27a85..36a9864e65 100644 --- a/image/verify/Cargo.toml +++ b/image/verify/Cargo.toml @@ -16,7 +16,6 @@ memoffset.workspace = true zerocopy.workspace = true caliptra-cfi-lib = { workspace = true, default-features = false, features = ["cfi", "cfi-counter" ] } caliptra-cfi-derive.workspace = true -ufmt.workspace = true [dev-dependencies] caliptra_common = { path = "../../common", default-features = false } diff --git a/image/verify/src/verifier.rs b/image/verify/src/verifier.rs index b5cc39e481..a992ef0482 100644 --- a/image/verify/src/verifier.rs +++ b/image/verify/src/verifier.rs @@ -636,8 +636,6 @@ impl ImageVerifier { // Verify the PQC (LMS or MLDSA) public key index used to verify header signature is encoded // in the header if cfi_launder(header.vendor_pqc_pub_key_idx) != info.vendor_pqc_pub_key_idx { - cprintln!("cfi idx: {}", cfi_launder(header.vendor_pqc_pub_key_idx)); - cprintln!("info idx: {}", info.vendor_pqc_pub_key_idx); return Err(CaliptraError::IMAGE_VERIFIER_ERR_VENDOR_PQC_PUB_KEY_INDEX_MISMATCH); } else { cfi_assert_eq(header.vendor_pqc_pub_key_idx, info.vendor_pqc_pub_key_idx); diff --git a/rom/dev/tools/mldsa_keys/own-mldsa-priv-key.bin b/rom/dev/tools/mldsa_keys/own-mldsa-priv-key.bin index d1d1f58ea6b57f2e4b161e88fb8aca0b416de7bb..9dd1e6565326d5e5ce9371543a595ab31b1bb255 100644 GIT binary patch literal 4896 zcmV+*6W{DwME!W?Q4$QGprl)Z-ggonkP74FI#X2j*SK~Dmv)z97-PjiciLttsf}pV z_a^$n%62Qu$uX~y&$p0;djXS(^hqw9(aKV6_EVj9@y1@E*Q zb&S{<8K&+ZIaQ26LRO1hHS?yG0$O!h>V1Wg+Ky`90>^-ltc-~Q49lt$cS;& zm?fH$EF+eQlC~+5595f0b zfG{DpO;8{JQ7DPgh$WnaOvFeoNJtDqq(IApMG&QA95IRFLSR^?XbMCy8c1bg1VWoe zU>Trc$p8+aNDkCSMPb4)gdmO_Cym({NC`DWN)$wdrb)?^Fc1g~W1>yuNDT`yWDA2tOC}E5G%eEx1VI*13^oiB zD1{0YM3X>469W){kSXJ`Kup9%$}mk7HV7P`VVr^t*b;GrHgE}uOqw<@Aq8;(6+i<+ zDwN1b1h633HjG?Ik{N}O2t;uJ1B?NZQ4|D$gEUba6bJy7ky{iF|L220nPDC&g!h|J3qyR%G4GIAWzz~Rx z7)m2YARGmf&;}vW0w@HBk=X9AsNyL#@povNlY)YbJnua8pCXm@Q z1j{HaA`xL6vOo&SNJB<2OoWXPNo33*avK;a8$@vHgI2!%meq>%%{F%u&aATkU|paDV>ED{5Pm>2{h zfgqbUiDN)*k~mBn6ENB~3Y3HlA}5Sc0s_DS1{%d^%0@y8#xN4J5YvK;OF}6Ug(&1S zfPuJW2#7>rG9cWDVBDfbTqp<>kw8l_VaSvLA*FDmHgQUpOe3Ta8^vfD6p{(HWzw=m z0l)Q}ld+6HWZM=wWIdWL#qw@1rxLerk=gjIv^Bm^&QF8Jdx~aNLe@rg83k0Gd@v$5 zYnSCW*;(p~j_qu;N>qdmDXfhO;`$G%E4IukI=>;nf z0MMH`W&n9zy%_QBLYSvVB+}Bi(e2z*;j<{nitBkvV*bGc*7dzryG=hy&K{wB&8DrS z92qwm{yFzdrv-)YU5y;(@}3zn)V8`pAf4~So6F@FXb9J-+fOp{i64-}rwm56t(4AP zSRun)c2dSEKI`>i$)`6GDYi)PEL3dUf};7EhOe~a1Sjcwg@#uG{7ayAK$VApLwM&u zc!Z-2RL~E7LiAfms8`wtj)YX(P61t;E~qF_xJUO~u(;*s!85E#CJ~iC-_!XNXC-LW zySirAB&c1?-d{Dz3)Wq-iN0vx1G4SAbPlEV(O1lV4*0Iq;xveD=#MZzqyeBo-2}kj zNDEIfNq35XV4s6A#Or|ol0Z-V5e+DF=t@t&DI_#al3iW>P$<_l`)=5s=CLFC>;IQF z#&wO117k!1h`o_K;jrbbs}~RSY^RR3aKfOhufpWiuMHv8OgR6Z#Lr9O7Y<#n_4U#n zF(|-VI;11^U(Tm_)}7tt%MsY>yM3jWKxWYj5`I(yLzwA5?W%RP2EL2szjQYK;#v1p z#CSf!BI%|y-Zb}+PuT+Cd*z8ywGrI;qC!?xagfLtgqj)s(z#UmstlOK=BS5k>MZ~8 zgwm6+L%<@#4Xfz9rHd8 z$tBzK?yzWlHDFS!S6TnlI57C05>Qcep8}F~%wK*!l{=4OmMoj>k9belPiozX>wn9M zRxK2IBU}Ce6$MLOJM*bV*SA$tJW&E13aKeDD&pnhz%`s}bFm?|;%cmD1U)T&2jZJl zFIA5F0Ku*z=T-B1>7!H)4ljn%D_K zBr%47yZV5S@!3M8nuIeN&~oKhDHbznASLNJ3rP#?j-joKF@P51-;|tBuTMKLfEUVu zQ2cA;g2jBHtJiXkqXk~S`BKgAs)87Eq&a^rErFeThk+`>cB&7NAhmP$2>CV5H_e0@ z-x^Cx*rM(4g96Zt@ZyDU+Zo~-*_6JW*LxdF8d}F>ULKmb0nV8x1zsYZ8tmkmn*0e> zYGC^wIdDk-1UvuC7k(jIKwZ7weH`A4nC7i6i(~aFDxfDMDfFfNFO*||xZ{Qjyw}Kw zd=4PT)e#=8)Mc836p(6`mGYM#69pjUs9w6fL;f@g^Bt>D&;7e#&(AIzFo2DkZuB?^ zPP9!;i-MVzz#LRsle|?74j{pp51Rb!#9W#YGiQtTX2cM>%wAE(#eb#ixS$u_^rRVf zW{W@;#^YtZhP>v1JZBLS!@OCT`qauZ2o1dZm)#n%os^HO+}TREQm;Ms)CEgp_+>1B zj^)|Ks11O)>FA=OV>qjJM#=#Dpb!saDTBOrqejXo9^zZWcT=R7@Cp%FSv&cU7FON# ze9MIqOR9%5i)IY{X_=%pwU`~vH%5UOCwAP;^9Cd!9@rjg~yGg`7LDcDW zvb+d!6uPlB%Z?KGYc1<>uytV{iCPKl3G2Km3c>gIHsLT}$)*z9Sc&jV>t_LC?=OZA z`ac$xnlts3IB28GYRW`TAXOxXv^3#LZ2s5ekP5;H7=eE<5R}d}4)}&p_+L!}+ta ztp&V4M?Fa;Q~$llC*w8eO;=#`CO$B)LdH3s-rT5n>?~;K4-hq> z04@kJ2uCn=F--m6C*Kfdo8IhCV#HSOG&Hq1Kj5&N&(&4lJFS9v@ z7!xGiRmT$hy&{Me5@BbF>A-&6&NI33+u*{D1Mn>`xAh*L%Lw7qc<-(0^Ab(RVi3I@ zp*&dl95P+)wix6#nYRm*+}Gg-1n|)f=-DlJ{ju&6#&ExR)Rgk2s0Y! zIpG3Z{Vi-O>UFM06qwu(3Tzfxw2OL0i&DYL{FSl5nO&T&j zF`^mkJ}^I_FlSfkH&VT3{r~W)mm&!(&T!fr7||8Qe}du-`9ulVpF}5GB6m(%xPbW9 z`6Zp${6j5w6LGPI58q;|pD*mK{z?LvnR7^}`AES;ePKeC$%u7^qWpUPR_oBLJkPxj z2n6|<#PTK^tD#FIb=cPE$oQ0Be@m9= zZFdKniQjniht44_J;tiBFLu*78e(6MyCVhLu=EXF5Z1#(E{An=y2Afkqk-F1uVq%! zbZBN9J&$#dxp&^v!!fKx<^{Xj;#KD*U-e$BL zwN6s)aV?;eGYpJN3G*1$4B|3TrMbXEOa`j&`D{}Q!c#ke3ygsw(zwdTa^@-0L^53p zz14R^09W956y2%SUn)4JiRSF*h{WE_`K!pBoG{mfti@=MchW$lLV8&v^f%wTi;K6{ z$W+t=c(MzAD?;ELSoPf@OHhXK?lMNnuU+o0sx_lswi+RT^x7d?)t}(U7Gmm%`$NH*7h9k6MrsduHmaytVw~sB5jW?<<5AmguVFa(SNGe+8i**J zE;0-GAe@{ic9&AHJxNVWnMujCh9paUc~y!(pm~V4dSq77<1d-py44%j-WR}8CwLwAB1q?`b;8{;SrOM<7Hwx*w!C81 z1FG-fd_NNlTWldFqF%|fccuOEYKutY?Tt2}HZTo%ao9W|!i*^U;LG@g}$J<5*$c zKEzgs#-KIyz=R)~nb_NqImlH#!%VB6@FTnVo%^BzdSrNCLHl15&}?pF7)mr>0lF(EzZwAMU0r9qk}K6mA4uot4gJLQ)gk zm`Meb4lFVw*UL?Cx{)lYXNu%j@w401m!nBe&@J-XvT`P!i7U$Ql_K8Y7VQ0=lkEwNd@hEQcj+Edb$JUg><5 zDtuk=gCkTA=a44tq5kj_KIjPOQBG?14h)yMe z1gcxr1fMtL?*M(;AJ(o!z;+`TJ7*HEKWhDhUs&65fJkh@J>>S^?%!9JJ|Kzy*b^nf SRa!Ei8CPj`x+G^PP3;I)pR#cP literal 4896 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 Sy=ZNrW>aU=W|;|jHfC@1&X0ru diff --git a/rom/dev/tools/mldsa_keys/own-mldsa-pub-key.bin b/rom/dev/tools/mldsa_keys/own-mldsa-pub-key.bin index 36f6697d686459fa25d2baeb03fc2b86d39a5efd..4356c6ce48b74283bd1db3f080ad3c9e9f489438 100644 GIT binary patch literal 2592 zcmV+*3g7iwME!W?Q4$QGprl)Z-ggonkP74FI#X2j*SK~Dmv)!9-0e>nzm(c|h15=#>4Z)XAbn4r6)_pD*mEv1O% zX3`Fq(y8~r6h;o?m`?bH-0rQjuGhWBD`aCHm6(w_9+q-aSyVkREc?l^1v2-cAq3`? z6-#(PG0qbIi2S&Zn9Afr&@}Eft<48A#>hrw>4{~KTnTU&cxHJkOo?b#m-jD-k{Rnr zAzhM<$7pbwx1Rk~zni$MJ0rRd3CTUoHxXpi&Gg8A=z{E1?O-;8#J3Kkro@K|gfWYz zefC|c3$RM?$M8*;Mtx$t+S`mLv<{kuWILS3(VW=D?6K;lR-ktFH$7aufW1RX>KFCR&n$Kdp7aRJ`J0 z0_LX2-u~r0VYE5{PANTiQNO;#9%!iXIHoUz&*JeTKCyzcv-<8&mexL2;%u&t555)F zr=8%D>93T1^Xn(B-9)`ZZHZ&E4%DYpu$kB|s%ZX=rCyqW$h;=-N9a4Nx+2pkU0&eJyB_hs+*M!H?_ATQ#ZlFS_y(em&?-l|z-E{VO9pBNriG&|FlB->%Eb!L5H)sOsf zzP?z-;xweB3_a)+zlCV*S?V;Tm8QE>Z#u>W4VWm1S`m5$ zgRFqIW{|#o>^^5`0wgGoALF+W=iMS2SCp)Gcq+9iR=*)I_Q>SN{0_##DP*R3#bO`= zHS7_e(8uMlz3wip{nMt?X%i~2e5x1oRHK6^08dkx$4n&X8;Y=rxS@l@nWBd3wvm=b zd7yuC7Lvb9Us~^4pbd zNfRkvxn-+^s3PT>z_@;qWOXFW| zX-hK`oDLLQwYsAx+4GXo?7e1o*ZTppj|uZ0M{=newuE~F8^9y}@2Vm3F?vI$#kt99 zqzIzL%zc;5zLNR6oFD()E`&tjrx9W+l?jX{NZdFafBluS#J&k9&C)x0HjOExBoYWk zV5;7`TO3?Jp&X-qyxYFxAJznDaLc`*3^)tYYM6(G1ADj-4_%EDydh=f=TR`+oS)px zWi;@alR4c}ab$)E?9IPNW+}ozq;=Te(XDaD0~`XSA8hovm-=Zk>u+shx`vx(L6fq7~pX72=ljOPLgMq1`n4Ug08#Lt2trqT21!hkZDMhK-MU z-Lg$m4I{G5@{2lJ48C}+(_@_AmO1X{_CA{)xY>se&!P~X1RIa?btI^Kg(<9>vD)q? zaK2<0$3ehc6kL4y8u?2?R5e&>!{ElJDa?s$SLj@~y{M0ZN}Hm(?d!fp4WPWXJf+Ta ze^T~s^f*lKy&@owHa0E{2oX>=iEV%(s(q$$7Y8n?oFd>$uC#s_=9{QAT!*w{He};A zek@PJ3UXIM|JRTckCPN9=3DTbGQp>j#P?X5Z0rmMSgL@)9neOh} zSZbH7+RiF#R^U;Y=|2|$FCwrsZLP^$#A~h=iSbg{3$Xi1S1!q-Tp1v@eoE+q% zk=k|OrbjvLZH~Z`Uw5wgG8{lY7C|%8iN<6*Dm^WvLRHwFI*Sskr+b`_eqX+X_c>Kb zTm!5#R)GPPYU$S0u{?lRN_p6{-0P{32b_Ova5bT%6*717tweAZjkO6d*1~~KjE}IR z`TkA20?{?M&mXr!xOiLm4e|%i3WGO8U&Pji1Q^e`r_Ka7z!&s=@FkR#SRvLw*bX*7 C-VSpB literal 2592 zcmV+*3g7j!7Xg=&bq39^pcywq+kNmYso*J|5{y-5oRXqhj-qS^N`R66KAWmMkdfB- z`d`H3oKLoQ`9Z5#WqJI}uoh6fYv}kxI^EJGK?UeIa!gOBPRs`5-5@RTmK=S`H`Y=C z>*J$Qy2>S9gA9v@+nsKlOtr}I67!2skc@| zwbA>mCLMYYl$-t^ShQ!TUmAmQG|NBX7ZeeCF^;9dA0BJw_8hqjEAeeK-Hk{UyldA@ z_yc;`1m7_?EJ$&FX`GvSKgE!MzZ_uYn&b9Hq~HyF9kkt_yF`?a!!6GNoCy;SQj3&= zxIm&gca3EQMN$~eh@?~DI~*S2rup9b+ZI=QZ)<0=j1N`8*FxAm)N}CPh>FCLm+l>hq6}GD6P)!pEFmf6xFrNUOryr|>FBCI-Wd$R>F-4&%c_ekAvc%R^@+bAb@n z%|oOb!bfJg)G6dpV>5c-ArvxvK6I8#mqw@L7$_3lF8^P-?s{k3d)@VW(X!Wk7J_6U<2ksgajVb9%{mUC82!ZjKz+%4c)};N!IsboJD|Ap5 zgDd(>2pB7=80 zjT1Fz@6!x2Jou#=EpOLW1Ol^2Qb^e|Y;*%yGxp;s*AF0=Kjcs>g&fbO*{3Z@{Eiu{ zs@M@y6G$I~{MO17uo@ww=&&xch@aYT$k3@9Kf@A_KUDU*v}FGh3zJ73$8k9G4s3Tv8XiNv!S9}=?LYrhD@P8?wiWl%?^ndSSa+p zhmcF{Y)>KU+>)2+X3S@RF;>;lfwKP1T){7Dg=pADBkn~E8c6%^SzHE0b?Hp@hIN;h z(}<8%27w)%lM9`NSi#Y2bA@E_6bkO^eQ79{v%Z3bl^^txr0d%Ekdy#V68e`SqCvX)`Q7G5{E8CLWm;&My8ZYT}7#&Wz z;(SgDW(2Tr6&qdKkwWe8s5mQKe11?A{DG?gC%E;|=X|ewo*8vyK;37mw)(~u)ori! z;up+U%G?5is$)1RWzS^3>pswK-mosi&+dMMo;L82!Zl*@Zhb0jzsEnx1AJFvh-K#R z%p;Q{^P|L=wKwvIuC*>YY~2GN^} zo7@Rqj1=ythM_KUNGq1w!$cz{B26^+L9+`n+^a!t=u^8kBaBOl_qQ~FfS(ZkoZh-r z`ZQ;hNn1_+eyG#oo^5Vt!pgYi`VrswF1az4YtI?_qVSj5NXl@V3Y=Y-m3x~^(Ohmz zU5R$vlRzj#8do(%MqzI*XBJ&+$r~HK7;TI^CAUXlLcq1+a7e&`?duba@MdA5`&*l) z&F5n$b3kwCgxVGjZ%Fg2X>lO>Fzims#Ul)daXwyqw;1<-Z3_`U>B#hWRhav+gs+6s z;+|STT6ll1kdyd>fyNmHE1}_+km>15+HK=xQATqYZ2J1USv0{02g5I%>F;YU?vh>b zpS!4_#P&2tUn08^vZHSaS!KcUT6JWRjFXYN#TBLGimAyk#y(B?2HelLG0}Lm#7FN& z5E?)n5{W_`!zQQnytIhcP?K%IE$Oj&&x$#%QRleH>#oBc!u6AA>RfYp#)u>;pq;K7 ztaSL}m$6Ni$%5~S#}~j`?p6l`>I3D0EMEJ0n3@OUC1qqSWhA2!DSD+7Tih*oj3SXi zyifQ%o*vydD^Q$-y1v(P)ni}t_pfft`ts<7rHNyc0|VyS>|a2b=3W=BTf&e>94=>U zFK+KTn}=T!guuzv!7&HA#*y++!5E$vmItA|Z?VTV>K1kK6G*#$C*c@N!dWNg6EYvr zY)mMA5LUjJ?k8GfQo6B9!hljzAw$s3A?NH9`{8HAr6~G&X!7e(HB#Ixol$?JP8R1%71fpWDVek-)!n+EUE|PVbpx!4&$uUhhHX$efGq4wGQZHJM z^8n8tAeYlq{n@_WTW+tl>wYEm@1BnjiH(NsvzXJ7j!l2~TmUGy#1z!l7LouiZhU~Y z=JYqbpqBI~&K|>bOu48&C1~`<+d6lH)1qdBI$(q6xxE$#?BkANy%Vya9MMRu>b~{W CP#jYL diff --git a/rom/dev/tools/mldsa_keys/vnd-mldsa-priv-key-0.bin b/rom/dev/tools/mldsa_keys/vnd-mldsa-priv-key-0.bin index 55ded45a6ee693b1ef77170b2aa69e0329af4f21..1090442eb08148bc0dffe756ceb09d0106e1bdfe 100644 GIT binary patch literal 4896 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ಷN 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 S_sNwbS5EEIN_;Dy)HlBgx{o;k diff --git a/rom/dev/tools/mldsa_keys/vnd-mldsa-priv-key-2.bin b/rom/dev/tools/mldsa_keys/vnd-mldsa-priv-key-2.bin index d6dc4a5becfc2d17876d3bc8aa1d2881021f7c7e..8ab136a2f806a186ce0bec59d305e19ac453672d 100644 GIT binary patch literal 4896 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 SPD|^L(lrZ0hUsEMA~LkUKB8{` diff --git a/rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-0.bin b/rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-0.bin index af8819252e06fe7de98b0147b6b1bb0569e4d66f..a98577447591977a4b6b9f5029c0be7d08e3b9ec 100644 GIT binary patch literal 2592 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 C2k-d+ diff --git a/rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-1.bin b/rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-1.bin index 42c1263c58503decc1a86bed73fa8f5ef9feaf37..ea91116ab781b978c944703713ac89bb6e4d65db 100644 GIT binary patch literal 2592 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 CaT%}x diff --git a/rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-2.bin b/rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-2.bin index 9ecdf8868f260a402a30e391711209c47a3586ba..e8bc1116883d1ee51ac00b8eb806ac82bfe29a15 100644 GIT binary patch literal 2592 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 CZ4Ouf literal 2592 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 Cg9B6m diff --git a/rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-3.bin b/rom/dev/tools/mldsa_keys/vnd-mldsa-pub-key-3.bin index c489e177ecc5b1be9a52a89d7c58eeeace581cdd..09e79cab644623066094be20b9fbed5f900b610f 100644 GIT binary patch literal 2592 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 [u8; MLDSA87_PUB_KEY_BYTE_SIZE] { - // let mut result = [0u8; MLDSA87_PUB_KEY_BYTE_SIZE]; - // for i in 0..value.len() { - // *<&mut [u8; 4]>::try_from(&mut result[i * 4..][..4]).unwrap() = value[i].to_be_bytes(); - // } - // result - // } - - // pub priv digest sig - // #[test] - // fn test_mtimkovich() { - // // let pk_bytes = [ - // // 0x0b, 0x7e, 0xf5, 0xca, 0xcd, 0x20, 0xe0, 0x6a, 0x2e, 0x68, 0x01, 0xb8, 0x73, 0x0e, - // // 0x3a, 0xe1, 0x7f, 0x0c, 0xee, 0x89, 0x46, 0x54, 0x85, 0x7c, 0x49, 0xe2, 0x1a, 0xfe, - // // 0x7a, 0x52, 0x36, 0xef, 0xb3, 0x46, 0x3c, 0x87, 0x43, 0xaf, 0x36, 0x50, 0xb0, 0xfe, - // // 0x98, 0x46, 0xe6, 0xd1, 0xff, 0xdc, 0xed, 0xdf, 0x5f, 0x2a, 0xce, 0x44, 0x03, 0xf6, - // // 0xe7, 0xcc, 0x93, 0xa8, 0x9a, 0xa5, 0xb1, 0xa0, 0x71, 0x56, 0xe4, 0x82, 0x63, 0xf2, - // // 0xae, 0xf9, 0xe1, 0xd7, 0xf2, 0x12, 0x6f, 0xef, 0x2c, 0x00, 0x26, 0x84, 0x41, 0xe2, - // // 0x53, 0x1f, 0x17, 0x49, 0x1d, 0x5b, 0x5e, 0xb3, 0x9c, 0x48, 0x0e, 0x67, 0xad, 0xb7, - // // 0x87, 0xbd, 0x62, 0xe0, 0x83, 0x3f, 0xa2, 0x3b, 0x1f, 0x1c, 0x3b, 0x77, 0x6f, 0x12, - // // 0x3a, 0xf4, 0x95, 0xda, 0x0f, 0xce, 0xe3, 0x69, 0xbe, 0x3b, 0x29, 0xf0, 0xe9, 0x55, - // // 0xc5, 0x7a, 0x8c, 0x38, 0x1c, 0xe7, 0xf9, 0x07, 0x68, 0x5f, 0x57, 0x35, 0xd0, 0x56, - // // 0x8d, 0x48, 0xf9, 0xd0, 0x23, 0x47, 0x3d, 0x31, 0x21, 0x4e, 0x53, 0x0f, 0xfa, 0x26, - // // 0x75, 0x37, 0x7c, 0x58, 0xaf, 0xb7, 0x9a, 0x88, 0x5b, 0xa9, 0x48, 0xd5, 0x38, 0x91, - // // 0xbe, 0x2a, 0x52, 0x64, 0x4e, 0x81, 0x62, 0xf2, 0x85, 0x6b, 0xf0, 0xd6, 0x4b, 0x22, - // // 0x06, 0x5b, 0x72, 0x27, 0x0c, 0x2c, 0x14, 0xae, 0x5e, 0x8c, 0x0d, 0xf5, 0x96, 0x22, - // // 0x8b, 0xf0, 0x69, 0xd5, 0xd7, 0x65, 0x63, 0x28, 0x03, 0xd3, 0xe8, 0xa7, 0xf5, 0xf0, - // // 0xca, 0xe9, 0x0b, 0x7e, 0x66, 0x19, 0x63, 0x8f, 0xc6, 0x77, 0x89, 0x01, 0x30, 0x21, - // // 0x85, 0xea, 0x0a, 0xef, 0x31, 0x04, 0xfc, 0x03, 0xc1, 0x73, 0xda, 0x74, 0x50, 0x4a, - // // 0x50, 0xaa, 0x49, 0xc3, 0x45, 0x81, 0xb1, 0xb2, 0xe7, 0x25, 0x35, 0xf4, 0xc6, 0x24, - // // 0xf6, 0x66, 0x25, 0xd4, 0x3e, 0x13, 0xbd, 0xfe, 0x5e, 0x5c, 0xdf, 0x8e, 0x5c, 0x65, - // // 0x4b, 0x5f, 0xdc, 0x28, 0xaa, 0xc8, 0x19, 0x08, 0x08, 0xb9, 0x9b, 0x01, 0x60, 0x28, - // // 0xa1, 0x49, 0x03, 0xcb, 0xc4, 0x3c, 0x5e, 0x8f, 0xea, 0x62, 0x38, 0x97, 0x47, 0x4f, - // // 0x30, 0x0b, 0x87, 0x90, 0xc6, 0xab, 0x6d, 0x3c, 0xa6, 0x45, 0xd3, 0x13, 0x6b, 0xdf, - // // 0xd3, 0x8e, 0x05, 0x0f, 0xb5, 0xbc, 0x05, 0xcd, 0x35, 0x3b, 0x07, 0x81, 0x41, 0x94, - // // 0xaf, 0x36, 0xb9, 0x11, 0x1e, 0xf6, 0xbb, 0xe7, 0x66, 0xfa, 0x3d, 0x50, 0x25, 0x22, - // // 0x21, 0xd1, 0x80, 0x30, 0x1b, 0x8a, 0x56, 0xb4, 0x92, 0xf6, 0x76, 0x9e, 0xa9, 0x6a, - // // 0x19, 0xff, 0xe3, 0xa3, 0xbf, 0xf8, 0x07, 0x8d, 0xef, 0x97, 0xbb, 0xb4, 0xa6, 0x52, - // // 0xc0, 0x65, 0x0a, 0x38, 0xbc, 0x2c, 0x25, 0x3a, 0xed, 0x73, 0xed, 0x45, 0xc0, 0x23, - // // 0x6e, 0x9f, 0x8f, 0x2c, 0x1a, 0xca, 0x3d, 0x76, 0x73, 0x91, 0x18, 0x7c, 0x08, 0xed, - // // 0xff, 0x42, 0x1e, 0x59, 0x8d, 0xa0, 0xc6, 0xc7, 0xd3, 0xf4, 0xa8, 0xf5, 0xfb, 0x3a, - // // 0x30, 0x11, 0x37, 0x7f, 0x60, 0xe4, 0x6c, 0x4b, 0x72, 0xa0, 0xc8, 0xbf, 0xb8, 0xed, - // // 0x51, 0x8d, 0xe2, 0x1b, 0x30, 0x4a, 0xac, 0xfd, 0xc2, 0xc8, 0x34, 0x9c, 0x9a, 0x4c, - // // 0x0a, 0x3f, 0x68, 0xe0, 0xf7, 0x34, 0xd0, 0x36, 0xbd, 0xde, 0x50, 0x79, 0xca, 0x4a, - // // 0x48, 0x21, 0xe9, 0xda, 0x6a, 0xfd, 0x4d, 0x57, 0xe3, 0x9e, 0x8b, 0x4a, 0xd0, 0x22, - // // 0xf4, 0xb4, 0xac, 0x02, 0x82, 0x34, 0x86, 0x66, 0xcf, 0x81, 0x47, 0xfb, 0x0d, 0x56, - // // 0x19, 0x98, 0xe4, 0x31, 0x56, 0x2f, 0xaf, 0xc4, 0xfd, 0x64, 0xa7, 0x98, 0x04, 0x09, - // // 0xb1, 0x47, 0x08, 0xe3, 0x63, 0xd6, 0x1f, 0x5b, 0x74, 0x4a, 0x8e, 0xb0, 0x2b, 0xb1, - // // 0x18, 0xc8, 0x8a, 0xce, 0x80, 0x2b, 0xb6, 0x17, 0xb9, 0x29, 0x0d, 0x81, 0x78, 0xf1, - // // 0x04, 0xc5, 0xe3, 0x31, 0xc6, 0xf3, 0x22, 0x16, 0x8c, 0x52, 0x06, 0x73, 0xc5, 0x16, - // // 0x6d, 0x13, 0xf4, 0x30, 0xdc, 0xc5, 0x0b, 0xf6, 0x5f, 0x09, 0x37, 0x5e, 0x71, 0x37, - // // 0x16, 0xe2, 0xb2, 0xbe, 0xf1, 0xa4, 0x84, 0x42, 0xac, 0xf9, 0x65, 0x8e, 0xf8, 0xcd, - // // 0xf2, 0x3f, 0xa6, 0x1e, 0x58, 0xc6, 0x67, 0x6e, 0xf7, 0x37, 0xaa, 0x95, 0xc8, 0x83, - // // 0x1f, 0x34, 0x4c, 0xa6, 0x40, 0xd0, 0xa4, 0x92, 0x5e, 0x40, 0x4c, 0x3e, 0x4a, 0xbc, - // // 0xa1, 0x69, 0x54, 0x4c, 0x7a, 0xdc, 0xed, 0x15, 0xa3, 0x89, 0x9a, 0x5a, 0x38, 0xd7, - // // 0xcf, 0xb9, 0x78, 0xe8, 0x84, 0x6e, 0xeb, 0x6a, 0xba, 0x8c, 0xa7, 0xa8, 0x8a, 0xee, - // // 0xb8, 0x8b, 0x87, 0xae, 0x9c, 0xcb, 0x8d, 0xd7, 0x50, 0xc7, 0x59, 0xde, 0xce, 0xbf, - // // 0x59, 0x92, 0x38, 0x9e, 0x22, 0x91, 0xf7, 0x79, 0x19, 0xbe, 0xfb, 0xdf, 0x4e, 0xcd, - // // 0x6a, 0xe8, 0x49, 0x99, 0xc8, 0xfc, 0xd7, 0xdf, 0x8c, 0x09, 0xd2, 0xa6, 0xe7, 0x22, - // // 0xfe, 0x8c, 0x1b, 0x10, 0xa2, 0xa5, 0x7b, 0xf5, 0x94, 0x43, 0xc9, 0xa7, 0xd2, 0x09, - // // 0xd4, 0xb5, 0x45, 0xb9, 0x19, 0x83, 0x72, 0x08, 0xcb, 0x03, 0x6c, 0x34, 0x3d, 0x33, - // // 0x1a, 0x13, 0x25, 0x15, 0x06, 0xe0, 0x23, 0x82, 0x6a, 0x2a, 0x0a, 0x54, 0x3e, 0x1a, - // // 0x59, 0xa6, 0x48, 0x88, 0x1b, 0xa4, 0xd2, 0x7d, 0xda, 0x35, 0x80, 0x5f, 0x32, 0xc8, - // // 0x06, 0xe8, 0x91, 0xa5, 0x20, 0x6b, 0xb8, 0x75, 0x27, 0x17, 0xf2, 0xb1, 0x95, 0x69, - // // 0xc1, 0x7e, 0x69, 0xff, 0x06, 0xf5, 0x54, 0xdf, 0xaa, 0x47, 0xba, 0x91, 0x6d, 0x09, - // // 0x36, 0x30, 0x1a, 0xa5, 0x7e, 0x35, 0x48, 0x11, 0x6c, 0xc3, 0x76, 0xc2, 0xaa, 0x6f, - // // 0xc3, 0xad, 0x3a, 0xf2, 0x0c, 0xed, 0x6a, 0xc4, 0x5c, 0x98, 0x83, 0x30, 0x10, 0x9c, - // // 0xf1, 0x08, 0xfb, 0xff, 0x2e, 0x78, 0xe7, 0x10, 0xb3, 0x82, 0x9d, 0xd5, 0x8b, 0xdf, - // // 0xbc, 0x74, 0x06, 0x9c, 0x04, 0x5c, 0xa6, 0x86, 0xc3, 0x43, 0xcf, 0xec, 0x2b, 0xc2, - // // 0x10, 0xae, 0x47, 0xab, 0x48, 0x47, 0xd6, 0x5a, 0xe0, 0x45, 0x52, 0x67, 0x02, 0x17, - // // 0x1d, 0xb7, 0xcb, 0x1e, 0x84, 0x35, 0xad, 0xc8, 0x40, 0xc8, 0x94, 0x57, 0xc1, 0x0c, - // // 0x9d, 0x3c, 0x62, 0x8f, 0xa6, 0x59, 0xbc, 0x2c, 0x54, 0x6b, 0xf4, 0x0b, 0x68, 0x65, - // // 0x48, 0x7e, 0xdf, 0xe8, 0x2b, 0xd2, 0xbe, 0xbb, 0x76, 0xaf, 0x10, 0x2b, 0xf7, 0x1b, - // // 0x1c, 0xaf, 0x49, 0xad, 0x9b, 0xc5, 0x90, 0x52, 0x80, 0x3e, 0x04, 0xdd, 0x51, 0x9a, - // // 0x22, 0x41, 0xae, 0xb5, 0xce, 0x86, 0x88, 0xc5, 0x4e, 0xce, 0xfe, 0x0f, 0xe5, 0xb7, - // // 0x73, 0xc1, 0x84, 0xa1, 0xf4, 0x1c, 0x13, 0x81, 0xbf, 0x9e, 0x1b, 0x89, 0x5d, 0xa9, - // // 0x6c, 0x04, 0x25, 0x2e, 0x4e, 0xd8, 0x59, 0xa9, 0xc4, 0xaf, 0xa2, 0x66, 0x23, 0x79, - // // 0x42, 0x3a, 0xcd, 0x7e, 0x2c, 0xcd, 0xb4, 0xb3, 0x1f, 0x8d, 0xe4, 0x5c, 0xba, 0x9a, - // // 0x2c, 0xad, 0x02, 0xe8, 0xda, 0xc8, 0xd7, 0xc2, 0x30, 0xf6, 0xc5, 0xb2, 0xdb, 0x6a, - // // 0x91, 0x9e, 0x5c, 0x6c, 0xe4, 0x47, 0x7e, 0x1b, 0x9b, 0xa5, 0x67, 0x97, 0x69, 0x81, - // // 0x35, 0x9d, 0x50, 0x65, 0xeb, 0xbf, 0x1e, 0xae, 0x5e, 0x16, 0x90, 0x3e, 0xd7, 0xe8, - // // 0x28, 0x5c, 0xe5, 0x44, 0xdc, 0x0e, 0x3a, 0xf5, 0xd5, 0x23, 0x2e, 0x56, 0xd9, 0x2a, - // // 0xe0, 0xb2, 0xe1, 0xaa, 0x7a, 0x6a, 0x9d, 0x57, 0x4e, 0x2e, 0x97, 0x7c, 0x12, 0xa8, - // // 0xa3, 0xa6, 0x80, 0x5c, 0x8b, 0xa9, 0x56, 0xd8, 0x5e, 0x04, 0x6b, 0x79, 0xae, 0xb5, - // // 0xb5, 0x1c, 0xa1, 0x36, 0x73, 0xf9, 0xd9, 0xe0, 0xac, 0xbe, 0xee, 0xbc, 0x70, 0x55, - // // 0x5b, 0x30, 0xdd, 0xb8, 0x8b, 0xbf, 0x35, 0x41, 0x09, 0xae, 0xe8, 0x53, 0x55, 0x33, - // // 0x3f, 0xb1, 0x55, 0xeb, 0x3c, 0x90, 0xad, 0xdf, 0x5f, 0x5b, 0xeb, 0x99, 0xc9, 0x1d, - // // 0x49, 0x5e, 0xdb, 0x01, 0x3f, 0x8c, 0xd5, 0x20, 0xd4, 0x81, 0x1d, 0x51, 0x24, 0xb2, - // // 0xee, 0x17, 0x88, 0xde, 0xbf, 0xd7, 0x90, 0x1e, 0xbb, 0x73, 0xa0, 0xe6, 0x20, 0x42, - // // 0x75, 0x61, 0x52, 0xa8, 0x52, 0x44, 0x53, 0x56, 0x12, 0xc2, 0xb6, 0x37, 0x53, 0x08, - // // 0xee, 0xc5, 0x89, 0xaa, 0xc2, 0x57, 0xbd, 0x3b, 0x04, 0xd6, 0x5f, 0x29, 0x38, 0x12, - // // 0x7a, 0x92, 0x53, 0xad, 0xe4, 0xaa, 0xcb, 0x6f, 0x94, 0xae, 0x72, 0x9c, 0xf8, 0xa7, - // // 0xdb, 0x63, 0xfd, 0xd8, 0x00, 0x3c, 0xb1, 0x40, 0x8f, 0x21, 0x21, 0x37, 0x22, 0xe8, - // // 0xaa, 0xb7, 0xc4, 0x84, 0x7e, 0x4f, 0x6d, 0xd0, 0xcf, 0xff, 0x44, 0xb8, 0x2f, 0x90, - // // 0x0c, 0x66, 0x82, 0x2e, 0x24, 0xa3, 0x24, 0x0f, 0x68, 0x00, 0x03, 0x18, 0x96, 0xf8, - // // 0xe9, 0x8c, 0xe1, 0x5a, 0x24, 0x97, 0x28, 0x6d, 0x61, 0xbe, 0xed, 0xad, 0xa2, 0x91, - // // 0x17, 0xc1, 0x96, 0x07, 0x06, 0x24, 0x5f, 0x64, 0x39, 0x66, 0xf1, 0x61, 0x98, 0xb5, - // // 0xa5, 0xff, 0xce, 0x6b, 0x1e, 0x3d, 0x0b, 0xc1, 0x01, 0x4f, 0x5b, 0xb8, 0xc8, 0xc9, - // // 0x34, 0xb1, 0x62, 0x96, 0x4b, 0x14, 0x33, 0x19, 0x07, 0x0b, 0x09, 0x9e, 0xe6, 0x2d, - // // 0x42, 0x65, 0xf7, 0x67, 0x2a, 0xd5, 0xda, 0x77, 0x8a, 0xe4, 0x52, 0xe8, 0xe1, 0xaf, - // // 0x6b, 0xf4, 0xc1, 0x3a, 0x62, 0x1d, 0x06, 0xf6, 0x74, 0xf9, 0xfa, 0xad, 0xda, 0x90, - // // 0xe4, 0x98, 0xc8, 0xdd, 0xe9, 0xa5, 0xa8, 0x03, 0x41, 0x16, 0x17, 0x6b, 0x3b, 0x03, - // // 0xd0, 0x39, 0xeb, 0x54, 0x82, 0x7c, 0xe7, 0x0b, 0x45, 0x25, 0x89, 0x3a, 0x3c, 0x30, - // // 0xdc, 0x76, 0xe6, 0x7a, 0xfd, 0x45, 0x88, 0x28, 0x71, 0x8a, 0x39, 0x82, 0x3a, 0xf7, - // // 0xfa, 0x66, 0x41, 0x59, 0x1f, 0x29, 0x97, 0xcc, 0xfa, 0x67, 0xbd, 0x2d, 0x82, 0x91, - // // 0x26, 0x02, 0x3b, 0x35, 0x25, 0x16, 0x64, 0x79, 0xa9, 0xa3, 0x4e, 0x1a, 0x46, 0x99, - // // 0x62, 0x49, 0xc6, 0xbb, 0xe1, 0xdd, 0xa8, 0x05, 0x82, 0x16, 0x60, 0x98, 0x90, 0xea, - // // 0x62, 0x80, 0xdb, 0x11, 0x51, 0x75, 0x1e, 0x11, 0x65, 0x8c, 0x7d, 0x32, 0x48, 0x53, - // // 0x69, 0x8d, 0x7d, 0xaa, 0x8f, 0xff, 0xb2, 0x67, 0xf1, 0x72, 0xdd, 0x58, 0xfa, 0x9d, - // // 0x83, 0x83, 0xee, 0x8d, 0xbc, 0x8e, 0x18, 0x89, 0x2d, 0x9e, 0xfd, 0x52, 0x1d, 0x63, - // // 0x3c, 0x03, 0x40, 0x7b, 0xe6, 0x17, 0xe4, 0x89, 0x2f, 0xf2, 0x98, 0x0b, 0x5d, 0x6c, - // // 0x26, 0xce, 0x24, 0x02, 0x66, 0x44, 0xad, 0x4c, 0x17, 0x93, 0xc3, 0x37, 0x19, 0x00, - // // 0xde, 0x18, 0x83, 0x7f, 0x49, 0x8b, 0xec, 0x6e, 0x7d, 0xb7, 0x03, 0x70, 0x79, 0x71, - // // 0xe9, 0xce, 0x99, 0x0f, 0x3a, 0x41, 0x85, 0xd6, 0x9a, 0x1e, 0x06, 0x6b, 0x82, 0x83, - // // 0xde, 0xa6, 0xf3, 0xfb, 0xb7, 0x69, 0xae, 0x74, 0xa6, 0xbe, 0xf5, 0xea, 0x0d, 0x80, - // // 0x35, 0xc0, 0x13, 0x53, 0xd7, 0x2e, 0x51, 0x9d, 0xa2, 0x0d, 0x03, 0xd9, 0x73, 0x62, - // // 0x05, 0x07, 0x2a, 0x35, 0x5a, 0x7b, 0xfd, 0xe2, 0xc2, 0x07, 0x5d, 0xb0, 0xf9, 0xc5, - // // 0xc1, 0x50, 0x6f, 0x2e, 0x17, 0xe1, 0x0c, 0x30, 0x5b, 0x5f, 0x7a, 0xaf, 0x01, 0x55, - // // 0x9e, 0xdf, 0x00, 0xfa, 0x63, 0x7b, 0x46, 0xcd, 0x36, 0x7b, 0x1d, 0xed, 0x6f, 0x67, - // // 0xb2, 0x0e, 0x24, 0x5f, 0x2f, 0xa8, 0xea, 0xfe, 0x6a, 0x31, 0x5e, 0x8d, 0x61, 0xba, - // // 0xa1, 0x88, 0xb8, 0x34, 0x17, 0x98, 0x09, 0xd9, 0x51, 0x80, 0xa8, 0x5c, 0x0d, 0xc9, - // // 0x2f, 0x5e, 0x5e, 0x79, 0xce, 0xab, 0x48, 0x5c, 0x14, 0xc3, 0x33, 0xf2, 0x27, 0x8d, - // // 0x8b, 0xa1, 0xde, 0x8e, 0x31, 0x25, 0xf1, 0x36, 0xd0, 0x7e, 0xd8, 0x90, 0xd5, 0x69, - // // 0x39, 0x9c, 0x19, 0x3d, 0x09, 0x11, 0x41, 0xaf, 0x9b, 0x33, 0xb8, 0xe7, 0x4c, 0x71, - // // 0xf7, 0xf5, 0xaf, 0x94, 0x16, 0x07, 0xb7, 0xd4, 0x34, 0x6c, 0xdd, 0xef, 0xf8, 0x92, - // // 0x45, 0x5c, 0x46, 0x3c, 0x23, 0x77, 0xf6, 0x25, 0x77, 0x5c, 0x9b, 0xd9, 0xfa, 0xa8, - // // 0x84, 0xea, 0x6b, 0xd3, 0xf1, 0xf7, 0x33, 0xa9, 0x14, 0x46, 0xf2, 0x3d, 0x0f, 0x48, - // // 0xfb, 0x5d, 0xfc, 0xab, 0x21, 0x40, 0xef, 0xd6, 0xe1, 0xa1, 0xb6, 0x4a, 0x8e, 0x87, - // // 0x93, 0xe4, 0x2e, 0x8d, 0xa1, 0x06, 0xa8, 0xe7, 0x67, 0x65, 0x40, 0xc1, 0xdc, 0x3c, - // // 0x72, 0xe2, 0xd5, 0xcd, 0xe8, 0x76, 0xec, 0xcc, 0x77, 0x66, 0xf7, 0x17, 0xc2, 0x07, - // // 0x8a, 0x0b, 0x9c, 0x1e, 0x29, 0x71, 0xf6, 0x11, 0x9b, 0x4d, 0x65, 0xe6, 0x5f, 0x3f, - // // 0xa6, 0x29, 0xa6, 0x03, 0x80, 0xc1, 0x8e, 0x08, 0xa2, 0x11, 0xa9, 0x06, 0xd7, 0x3b, - // // 0xd2, 0x17, 0xca, 0x6e, 0xac, 0xa9, 0x0b, 0x64, 0xf3, 0xc3, 0x62, 0xb8, 0xa6, 0xb0, - // // 0x29, 0x64, 0x86, 0x1e, 0xaf, 0x28, 0xc0, 0x4d, 0xe0, 0xf7, 0xd0, 0x1d, 0x9f, 0x60, - // // 0x9a, 0xc4, 0x28, 0x7f, 0xf2, 0x7a, 0x0c, 0x70, 0xfc, 0xee, 0xc0, 0x31, 0x41, 0xa9, - // // 0xbf, 0xd8, 0xcc, 0x09, 0xb7, 0xc3, 0xe2, 0xc9, 0x2f, 0x4a, 0xbe, 0xa8, 0x1a, 0x3e, - // // 0x36, 0x17, 0x05, 0xb9, 0xf8, 0xec, 0x87, 0x3a, 0xc8, 0x0b, 0x35, 0x5a, 0x7a, 0x40, - // // 0x6f, 0xc4, 0xf6, 0xfc, 0xff, 0x13, 0x0e, 0xf8, 0x22, 0x5c, 0x8d, 0x3c, 0xf8, 0xec, - // // 0x2f, 0x29, 0xd5, 0xa5, 0xec, 0x51, 0x07, 0xf9, 0x67, 0x17, 0x2f, 0xfb, 0x48, 0x53, - // // 0x63, 0x0d, 0xb1, 0x4c, 0x91, 0x91, 0x33, 0x50, 0x78, 0x6c, 0x2c, 0xe8, 0xea, 0x72, - // // 0x8a, 0xaa, 0x4d, 0x18, 0x20, 0xe7, 0x93, 0x4c, 0x90, 0xdd, 0x44, 0xa7, 0x40, 0xad, - // // 0x11, 0x29, 0x72, 0xfb, 0x84, 0x10, 0x51, 0xb5, 0x81, 0xa9, 0x58, 0xbf, 0xaf, 0x57, - // // 0x71, 0xd1, 0x75, 0x97, 0x38, 0x6d, 0x60, 0xc3, 0x9d, 0xfc, 0x3d, 0x41, 0x5c, 0xef, - // // 0xf1, 0xaf, 0x3e, 0xf4, 0xaf, 0x79, 0x19, 0x18, 0x30, 0x19, 0xff, 0x78, 0x2c, 0xbd, - // // 0x49, 0x31, 0xf3, 0x94, 0x98, 0xa4, 0x27, 0x8e, 0x95, 0x0a, 0x0c, 0xe6, 0x99, 0x85, - // // 0x4a, 0x48, 0x8e, 0x40, 0xd0, 0xa8, 0x26, 0xab, 0xb2, 0x9f, 0xbe, 0xd0, 0xab, 0x56, - // // 0x58, 0x4f, 0xf7, 0xc6, 0xc0, 0xee, 0xda, 0x99, 0xf1, 0xc1, 0x89, 0x5b, 0x20, 0xa5, - // // 0x04, 0x2f, 0x1a, 0x4e, 0x9a, 0x73, 0xca, 0x2c, 0x5c, 0xb2, 0x02, 0x31, 0xc6, 0xf3, - // // 0xaa, 0xc4, 0x0f, 0x3a, 0x7c, 0xe7, 0x1f, 0x51, 0x42, 0xdf, 0xd0, 0x5a, 0x1b, 0x31, - // // 0xa2, 0xc1, 0xab, 0x0f, 0x94, 0xac, 0x4a, 0x66, 0x5a, 0x1d, 0x6b, 0xa6, 0xb6, 0x54, - // // 0xf4, 0x85, 0x08, 0x76, 0xad, 0x2f, 0xc3, 0xac, 0xc1, 0x34, 0x63, 0xa6, 0x49, 0x22, - // // 0x08, 0x0c, 0xc5, 0x7f, 0xc1, 0xf4, 0xf7, 0xb8, 0x28, 0x3a, 0xdd, 0x6a, 0xa2, 0xf7, - // // 0xd7, 0xf9, 0x1c, 0xa5, 0x74, 0x7d, 0x0f, 0xc3, 0x1b, 0xd9, 0xea, 0x52, 0x00, 0x8b, - // // 0x4e, 0xd5, 0x71, 0x37, 0xe9, 0xa4, 0x66, 0x44, 0xb4, 0x68, 0x5a, 0xef, 0x42, 0xce, - // // 0xc2, 0x25, 0x2a, 0xe9, 0xb1, 0xaa, 0x36, 0xd7, 0xaa, 0xab, 0x99, 0xf6, 0x25, 0x09, - // // 0x05, 0x62, 0x97, 0x60, 0xa5, 0xfe, 0xb7, 0x5d, 0xe3, 0x73, 0x7e, 0x6f, 0xe7, 0x4d, - // // 0x86, 0xb1, 0x1b, 0xcd, 0x87, 0x34, 0xa6, 0x77, 0xfe, 0x63, 0x1f, 0xb5, 0x7d, 0x79, - // // 0xbf, 0x4a, 0xd3, 0xf7, 0x53, 0x21, 0x50, 0xf0, 0x44, 0x8e, 0xe0, 0x7a, 0x7f, 0xed, - // // 0x94, 0x0b, 0x90, 0xdb, 0x92, 0x44, 0x1c, 0xa8, 0xac, 0x9c, 0x5f, 0xb2, 0x07, 0xb1, - // // 0x35, 0x0a, 0xbc, 0x2a, 0x87, 0xbd, 0xc6, 0x12, 0x17, 0xdd, 0xfd, 0x2b, 0x7a, 0xeb, - // // 0x75, 0xed, 0xf4, 0x7f, 0x77, 0x1d, 0xbe, 0xd3, 0xae, 0x7b, 0x11, 0x92, 0x07, 0xf4, - // // 0x43, 0xb2, 0x0f, 0x4f, 0x14, 0x86, 0xf3, 0x87, 0xb1, 0xe2, 0x0d, 0x81, 0xa5, 0x7d, - // // 0x03, 0xe1, 0x61, 0x24, 0xb7, 0xa4, 0x27, 0x76, 0xe8, 0x1b, 0xee, 0x21, 0xe2, 0x35, - // // 0x66, 0xfa, 0x3b, 0x35, 0xf3, 0x78, 0xa4, 0x83, 0x59, 0xa0, 0x61, 0x00, 0x4d, 0x87, - // // 0x6a, 0xb1, 0xe1, 0xbf, 0xa9, 0x5d, 0x42, 0xc7, 0xfe, 0x31, 0x9a, 0x17, 0x73, 0x99, - // // 0x6a, 0x6b, 0xd7, 0xb5, 0x54, 0x0b, 0x45, 0x6f, 0x52, 0xa2, 0x17, 0x70, 0xc8, 0x13, - // // 0xa9, 0xee, 0x9f, 0xa3, 0xf6, 0xba, 0x5a, 0xc8, 0xfe, 0xba, 0x52, 0xa5, 0x3a, 0x9f, - // // 0xba, 0x90, 0x64, 0xb3, 0x8c, 0x80, 0xbf, 0x57, 0x6c, 0xcb, 0x9c, 0xbb, 0x25, 0x26, - // // 0x21, 0x3b, 0xba, 0x4f, 0x14, 0x36, 0x7b, 0x38, 0x2d, 0x77, 0x44, 0x9b, 0x73, 0xf5, - // // 0x93, 0x69, 0x67, 0xfa, 0x7b, 0x19, 0x80, 0x0c, 0xa6, 0x6d, 0x43, 0xc4, 0xa3, 0x2a, - // // 0x9a, 0x1a, 0xea, 0x50, 0x02, 0x06, 0xd1, 0x46, 0x95, 0xd2, 0xd4, 0x5b, 0xab, 0x6e, - // // 0x44, 0x21, 0xb5, 0x49, 0xb0, 0xb1, 0x90, 0xf0, 0x08, 0x69, 0xf3, 0x4d, 0x86, 0xd6, - // // 0x50, 0x45, 0x9c, 0x63, 0x0b, 0x3e, 0x09, 0xa4, 0xed, 0x1d, 0xab, 0xe5, 0x45, 0x3f, - // // 0x5e, 0xc6, 0xda, 0xb7, 0xe4, 0x07, 0x0c, 0x27, 0xb2, 0x22, 0x1f, 0xcd, 0x66, 0x90, - // // 0xe6, 0xcc, 0xde, 0xa8, 0x35, 0xfd, 0x7c, 0x73, 0x9a, 0x92, 0xea, 0xaa, 0x67, 0xa1, - // // 0x18, 0x07, 0x0f, 0x20, 0xf7, 0x55, 0x3d, 0x0e, 0xc2, 0xc7, 0xf4, 0x4d, 0x06, 0xce, - // // 0xd3, 0xfd, 0x35, 0x6b, 0x91, 0x2d, 0xfc, 0x44, 0xcd, 0x66, 0x62, 0x8d, 0xa5, 0x39, - // // 0x91, 0xf3, 0xb8, 0xe9, 0x40, 0xb3, 0x62, 0x95, 0x60, 0x73, 0x9b, 0x10, 0x18, 0x4f, - // // 0xb9, 0x53, 0xa4, 0x2f, 0x13, 0xa6, 0xfc, 0x8a, 0xcf, 0xbd, 0x05, 0x38, 0xc0, 0x3e, - // // 0xa3, 0xb1, 0xa2, 0xbe, 0xe1, 0x81, 0x5c, 0x16, 0x17, 0x3a, 0x87, 0xa1, 0x02, 0xe1, - // // 0x2e, 0x22, 0xf6, 0x7a, 0x01, 0xc7, 0x7a, 0xe0, 0xd3, 0x30, 0x0e, 0x7b, 0xe2, 0x50, - // // 0x68, 0x7d, 0x5a, 0x20, 0x86, 0x9c, 0xaf, 0x22, 0xcb, 0x9a, 0xb4, 0x8c, 0x58, 0x1f, - // // 0x2c, 0x34, 0x69, 0x70, 0x47, 0x6d, 0xe2, 0xfd, 0x1a, 0x90, 0xd8, 0xd4, 0xb7, 0x2b, - // // 0xf1, 0xce, 0x30, 0x0e, 0x6e, 0x79, 0xf6, 0x74, 0xd5, 0x70, 0x39, 0xa5, 0x15, 0xc1, - // // 0x3a, 0xd7, 0xe7, 0x43, 0xa4, 0x52, 0x33, 0x5f, 0xbb, 0x93, 0x9c, 0x70, 0xf3, 0x4a, - // // 0x51, 0x61, 0xaa, 0x5a, 0xde, 0x60, 0xfd, 0x57, 0x7c, 0x70, 0x5b, 0x3a, 0x26, 0x78, - // // 0x42, 0x73, 0x0d, 0xcc, 0x6b, 0x3a, 0x52, 0xd5, 0x85, 0xef, 0x00, 0x22, 0x11, 0x19, - // // 0x1e, 0xbc, 0x62, 0x4c, 0x6b, 0x11, 0x0d, 0x77, 0x4d, 0xfa, 0x3d, 0xfc, 0x4f, 0x8b, - // // 0x47, 0x31, 0x9d, 0x72, 0x94, 0x9b, 0x5f, 0xc5, 0x90, 0xc9, 0xce, 0x91, 0x44, 0x47, - // // 0x16, 0x66, 0x93, 0xfa, 0x4b, 0xd0, 0xac, 0xbf, 0x44, 0x71, 0x8b, 0x31, 0x34, 0x11, - // // 0xea, 0xec, 0xdc, 0x40, 0xed, 0x84, 0x48, 0x68, 0x57, 0x85, 0xf0, 0x42, 0xad, 0xa0, - // // 0xf9, 0x49, 0x51, 0xc1, 0xa4, 0xa0, 0x4f, 0x5f, 0x71, 0xfd, 0x96, 0x1a, 0x05, 0xcb, - // // 0x4c, 0x2b, 0x84, 0xd7, 0xbc, 0x5a, 0x8e, 0x6b, 0xc6, 0xf1, 0x18, 0x80, 0x92, 0xa1, - // // 0xa1, 0x0f, 0xbb, 0x35, 0x39, 0x5f, 0xd2, 0x06, 0xfc, 0x9b, 0x5c, 0x00, 0x55, 0x08, - // // 0x73, 0xa7, 0xfc, 0x4c, 0x80, 0x05, 0x14, 0xdb, 0x74, 0x31, 0x7a, 0xe3, 0x76, 0x59, - // // 0xd0, 0x89, 0xd4, 0xeb, 0xc1, 0xbf, 0x8c, 0x0e, 0x34, 0x35, 0x01, 0xdc, 0xc2, 0x64, - // // 0x7d, 0x37, 0xbb, 0xd7, 0xbe, 0xeb, 0x09, 0x95, 0x64, 0xa1, 0x35, 0xbb, 0x41, 0x3b, - // // 0x10, 0xde, - // // ]; - - // // let sk_bytes = [ - // // 0x0b, 0x7e, 0xf5, 0xca, 0xcd, 0x20, 0xe0, 0x6a, 0x2e, 0x68, 0x01, 0xb8, 0x73, 0x0e, - // // 0x3a, 0xe1, 0x7f, 0x0c, 0xee, 0x89, 0x46, 0x54, 0x85, 0x7c, 0x49, 0xe2, 0x1a, 0xfe, - // // 0x7a, 0x52, 0x36, 0xef, 0xf2, 0xbb, 0xc4, 0x71, 0xf2, 0x17, 0x2f, 0x44, 0xe2, 0xee, - // // 0xfb, 0x49, 0x0a, 0x9c, 0x4d, 0xb4, 0x95, 0x15, 0xda, 0xb1, 0xa8, 0xdb, 0xb8, 0x6f, - // // 0x88, 0x3e, 0x17, 0x6c, 0x98, 0xff, 0xb6, 0x36, 0xa6, 0x69, 0x46, 0x55, 0xa4, 0xea, - // // 0x26, 0x97, 0xee, 0x39, 0xf7, 0x63, 0x1d, 0x13, 0xf2, 0x72, 0x99, 0x9a, 0xe5, 0xb5, - // // 0x0d, 0x46, 0x29, 0xd4, 0x70, 0x75, 0x25, 0xbe, 0x22, 0xc1, 0x18, 0x2f, 0x55, 0xc0, - // // 0x94, 0x7d, 0xd6, 0x61, 0xad, 0x60, 0x1a, 0x8d, 0xdb, 0xfa, 0x08, 0x5c, 0x7d, 0xd5, - // // 0xeb, 0xd2, 0x79, 0xe7, 0xae, 0x24, 0xc8, 0x98, 0x3a, 0x2c, 0xe8, 0x44, 0x7e, 0xbe, - // // 0xb1, 0x5e, 0x5c, 0x90, 0xc6, 0x08, 0x16, 0xdc, 0x70, 0xa2, 0x11, 0x25, 0x18, 0x42, - // // 0x04, 0x51, 0x01, 0x20, 0xc8, 0x49, 0x6d, 0x45, 0x12, 0x32, 0xd0, 0x60, 0x12, 0x00, - // // 0x34, 0x82, 0x48, 0x60, 0x6a, 0x32, 0x11, 0xc8, 0xd9, 0x41, 0x14, 0x11, 0xc4, 0x00, - // // 0xa5, 0x03, 0x05, 0x25, 0x86, 0x26, 0xd4, 0x28, 0x43, 0x30, 0x42, 0xc8, 0x30, 0xdb, - // // 0x30, 0x34, 0x26, 0x40, 0xa4, 0x2c, 0x54, 0x4d, 0x36, 0x9b, 0x80, 0x49, 0x01, 0x36, - // // 0x0d, 0xa0, 0x43, 0x00, 0x21, 0x24, 0x00, 0x24, 0x16, 0x93, 0x28, 0x37, 0x31, 0x98, - // // 0x5c, 0x70, 0x1c, 0x40, 0x80, 0xa2, 0x00, 0xca, 0x85, 0x97, 0x49, 0x44, 0x13, 0x52, - // // 0xd8, 0x48, 0x08, 0x03, 0x33, 0x03, 0x4d, 0x40, 0x72, 0x44, 0xd9, 0x11, 0x89, 0x44, - // // 0xc4, 0xa1, 0xa0, 0x98, 0x08, 0x96, 0x0c, 0x98, 0xa0, 0x48, 0x04, 0x90, 0x14, 0x4c, - // // 0x86, 0x02, 0x89, 0x16, 0x05, 0x00, 0xa0, 0x29, 0xcc, 0x68, 0x00, 0xdc, 0x26, 0x49, - // // 0x64, 0x92, 0x04, 0xb4, 0x4b, 0x64, 0xcb, 0x4d, 0xb5, 0x1c, 0x86, 0x61, 0x29, 0x96, - // // 0x64, 0xb6, 0x5a, 0x2d, 0x02, 0x62, 0x08, 0x9c, 0x14, 0xc8, 0x42, 0x24, 0x80, 0x90, - // // 0x62, 0x04, 0x04, 0x49, 0x86, 0x0a, 0x30, 0x40, 0x0a, 0x09, 0x88, 0x12, 0xc3, 0x29, - // // 0xe3, 0x25, 0x08, 0x41, 0xb1, 0x18, 0x65, 0x82, 0x6c, 0x81, 0x18, 0x2c, 0xa1, 0x09, - // // 0x46, 0x61, 0x98, 0x09, 0x2e, 0x46, 0x8e, 0x16, 0x1c, 0x68, 0x01, 0x68, 0xa8, 0xcb, - // // 0x34, 0xdb, 0x28, 0xc6, 0x26, 0x22, 0xc3, 0x68, 0x20, 0x48, 0x94, 0xdc, 0x14, 0xa4, - // // 0x92, 0x22, 0x01, 0x94, 0x02, 0x4e, 0x04, 0x11, 0xc4, 0xc0, 0x83, 0x00, 0x32, 0x38, - // // 0x11, 0x14, 0xe2, 0x84, 0x52, 0x30, 0x30, 0x03, 0x96, 0x8b, 0x68, 0x88, 0x70, 0x08, - // // 0x18, 0x68, 0xd4, 0x50, 0x06, 0x91, 0x36, 0x02, 0x42, 0x04, 0x81, 0xa4, 0xc3, 0x6a, - // // 0x20, 0x08, 0x90, 0x11, 0x91, 0x12, 0x6a, 0x42, 0x91, 0x80, 0xc3, 0x41, 0x53, 0x22, - // // 0x41, 0x14, 0xb6, 0x24, 0x52, 0x40, 0x0c, 0x86, 0x83, 0x25, 0x24, 0x08, 0x28, 0x09, - // // 0xb6, 0x8a, 0x84, 0xb5, 0x32, 0x36, 0x62, 0x28, 0x43, 0x64, 0x10, 0x1c, 0x82, 0x88, - // // 0x24, 0x38, 0x8a, 0x06, 0x4b, 0x2c, 0x58, 0x2a, 0x14, 0x92, 0x85, 0x24, 0x10, 0x96, - // // 0x51, 0xc4, 0x13, 0x88, 0x5c, 0x01, 0xb2, 0xc2, 0x36, 0xdc, 0x45, 0x42, 0x0a, 0x37, - // // 0x24, 0x88, 0x40, 0x85, 0x04, 0x8b, 0x18, 0x51, 0x2e, 0x18, 0x09, 0x12, 0x48, 0x0c, - // // 0x8a, 0x89, 0x86, 0x19, 0x20, 0xda, 0x88, 0xa8, 0x06, 0x03, 0x02, 0x02, 0x1a, 0x68, - // // 0x02, 0x03, 0x02, 0x88, 0x00, 0x21, 0x6e, 0x44, 0xc4, 0x44, 0x0b, 0x51, 0x32, 0x8a, - // // 0xc5, 0x23, 0x06, 0x46, 0x04, 0x24, 0x48, 0x49, 0x12, 0x01, 0x00, 0xcc, 0x32, 0x0c, - // // 0x64, 0x92, 0x00, 0x96, 0x0a, 0x64, 0x9c, 0x4e, 0x06, 0x19, 0x20, 0x58, 0x0c, 0x42, - // // 0x41, 0x32, 0xd9, 0x00, 0x4b, 0x69, 0x36, 0x04, 0x36, 0xc1, 0x41, 0x44, 0x61, 0x97, - // // 0x21, 0x61, 0x88, 0x2e, 0x38, 0x53, 0xa4, 0xd8, 0x70, 0x38, 0x28, 0x88, 0x93, 0x71, - // // 0x23, 0x2e, 0x16, 0x44, 0x22, 0x41, 0x00, 0x25, 0x26, 0x32, 0x92, 0x8e, 0x14, 0x44, - // // 0x13, 0x0a, 0x24, 0xd9, 0x89, 0x86, 0x10, 0x30, 0x92, 0x85, 0xc8, 0x86, 0x10, 0xc9, - // // 0xc6, 0x21, 0x60, 0x26, 0x4d, 0x93, 0x19, 0x41, 0xd4, 0x45, 0x16, 0x43, 0x44, 0x1b, - // // 0x11, 0xc4, 0x0c, 0x30, 0x94, 0x4a, 0x8c, 0x69, 0x36, 0x43, 0x04, 0xcb, 0x26, 0x26, - // // 0x69, 0x14, 0x0b, 0x50, 0x00, 0x85, 0xc2, 0xc2, 0x45, 0x03, 0x02, 0x00, 0x44, 0x84, - // // 0x18, 0x6c, 0x83, 0x50, 0xa2, 0x1b, 0x24, 0x90, 0x02, 0x28, 0x06, 0x18, 0xa3, 0x44, - // // 0x02, 0x08, 0x06, 0xc0, 0x87, 0x11, 0x68, 0xc1, 0x0a, 0x26, 0x53, 0x30, 0x49, 0x48, - // // 0x16, 0x9a, 0x32, 0xc8, 0x68, 0xc8, 0x8c, 0x35, 0x19, 0x40, 0x21, 0x29, 0xc4, 0xe4, - // // 0xa4, 0x89, 0x50, 0x08, 0x8a, 0x46, 0x8b, 0x88, 0x11, 0x01, 0x84, 0x23, 0x24, 0xe3, - // // 0x10, 0x95, 0x51, 0x94, 0xd8, 0x2c, 0x0b, 0x2c, 0xa0, 0x50, 0x38, 0xd3, 0x66, 0x39, - // // 0x10, 0x00, 0x49, 0x0a, 0x0a, 0x05, 0x40, 0xc8, 0x98, 0x44, 0x81, 0x99, 0x46, 0x32, - // // 0x62, 0x6d, 0x5c, 0x71, 0x04, 0x19, 0x10, 0x99, 0x31, 0x80, 0x51, 0xc0, 0xc0, 0x28, - // // 0xcb, 0x69, 0x94, 0x5c, 0x34, 0x11, 0x85, 0xa6, 0x4c, 0x40, 0xdc, 0x52, 0x53, 0x61, - // // 0xa6, 0xd4, 0x19, 0x08, 0x49, 0xa2, 0x41, 0x88, 0x5c, 0x0d, 0x22, 0x92, 0x24, 0x98, - // // 0x40, 0xcc, 0x71, 0x01, 0x00, 0xa6, 0xc8, 0x52, 0x61, 0x44, 0x40, 0xc0, 0xb8, 0x13, - // // 0x80, 0x46, 0x61, 0x00, 0x83, 0x30, 0x00, 0x50, 0x14, 0xa4, 0x38, 0xd0, 0x50, 0x83, - // // 0x21, 0x34, 0x63, 0x61, 0x0c, 0x4a, 0x08, 0x5c, 0x30, 0x81, 0x48, 0x22, 0x6d, 0x14, - // // 0x90, 0x28, 0x51, 0x91, 0xa2, 0xc2, 0x20, 0x1a, 0x90, 0x42, 0x20, 0x44, 0x52, 0x60, - // // 0x19, 0x2d, 0x80, 0x22, 0xc8, 0x43, 0x09, 0x14, 0x80, 0x97, 0x01, 0x4d, 0x18, 0x2c, - // // 0x11, 0x1c, 0x23, 0x11, 0x41, 0x84, 0x41, 0x14, 0x0a, 0x32, 0x8c, 0x6c, 0x22, 0x88, - // // 0x38, 0x5a, 0x2c, 0x98, 0x88, 0x46, 0x41, 0x4e, 0x09, 0x2d, 0xc0, 0x04, 0x42, 0x53, - // // 0x81, 0x48, 0x09, 0x99, 0x18, 0x0a, 0x21, 0x49, 0xa0, 0x02, 0xc0, 0xc0, 0x4c, 0x24, - // // 0x82, 0x11, 0x14, 0x60, 0xc8, 0x06, 0x04, 0x93, 0x84, 0x58, 0x86, 0x26, 0x2c, 0x37, - // // 0x03, 0x4c, 0xcb, 0x24, 0xb7, 0x10, 0xc6, 0x54, 0x81, 0x94, 0x4c, 0x38, 0x99, 0x49, - // // 0xcb, 0x00, 0x06, 0x59, 0xb6, 0x61, 0x49, 0x02, 0x2d, 0x95, 0x20, 0x09, 0x1b, 0x2d, - // // 0xc5, 0x12, 0x20, 0x0a, 0x81, 0x18, 0x65, 0x88, 0x63, 0x10, 0x19, 0x2d, 0x26, 0x22, - // // 0x33, 0x10, 0x91, 0x82, 0x6d, 0x49, 0x00, 0x02, 0x5b, 0x6c, 0x08, 0x44, 0xa4, 0x82, - // // 0x08, 0xa0, 0x69, 0x92, 0xca, 0x90, 0xcc, 0x24, 0xa0, 0x04, 0x40, 0x59, 0x8c, 0x88, - // // 0x09, 0x34, 0x93, 0x6c, 0x54, 0x4a, 0x08, 0xe2, 0x43, 0x0a, 0x04, 0x10, 0x60, 0x20, - // // 0x8c, 0x71, 0x11, 0x48, 0x35, 0x02, 0xb2, 0x51, 0x6d, 0xb2, 0x08, 0x12, 0xc8, 0x41, - // // 0x4c, 0x41, 0x84, 0xe3, 0x05, 0x12, 0x66, 0x48, 0x6c, 0x46, 0x01, 0x84, 0xdb, 0x6d, - // // 0x84, 0x49, 0x01, 0x0a, 0x45, 0xc2, 0x24, 0xa0, 0xc8, 0x81, 0xdc, 0x24, 0x04, 0x1b, - // // 0x22, 0x51, 0x69, 0x48, 0x4c, 0x42, 0x1a, 0x6e, 0x20, 0x81, 0xa4, 0x43, 0x26, 0xe4, - // // 0x25, 0xa0, 0x71, 0x38, 0x91, 0x28, 0x23, 0x62, 0x12, 0x59, 0x32, 0xe0, 0x29, 0x35, - // // 0x25, 0x48, 0xe0, 0x65, 0xca, 0x28, 0x24, 0xc2, 0x84, 0x54, 0x70, 0x92, 0x2c, 0x22, - // // 0x9b, 0x0d, 0x18, 0x4a, 0x11, 0x24, 0x46, 0xd2, 0x51, 0x08, 0x41, 0x84, 0x63, 0x6a, - // // 0xa3, 0x8c, 0x94, 0x5b, 0xa8, 0x83, 0x84, 0x24, 0x51, 0x01, 0x12, 0x68, 0x88, 0x8d, - // // 0xa9, 0x01, 0x28, 0x00, 0x6e, 0x40, 0x70, 0x16, 0x58, 0x85, 0x5c, 0x6d, 0xc9, 0x1c, - // // 0x32, 0x60, 0x41, 0x14, 0x4d, 0x94, 0xe2, 0x80, 0x50, 0x4c, 0x30, 0x91, 0x46, 0xca, - // // 0x01, 0x04, 0x2c, 0x02, 0x8c, 0x2c, 0x9c, 0x08, 0xa4, 0x19, 0x83, 0x0a, 0x28, 0x82, - // // 0x2c, 0x32, 0x52, 0x24, 0xc0, 0x30, 0x28, 0xe3, 0x97, 0x21, 0x0a, 0x08, 0x08, 0xb2, - // // 0xc0, 0x29, 0x8a, 0x64, 0x43, 0x03, 0x00, 0x98, 0x92, 0x18, 0x28, 0xb8, 0x20, 0x0c, - // // 0x10, 0x24, 0x94, 0x61, 0x04, 0x91, 0x04, 0x23, 0x86, 0x46, 0x62, 0x45, 0x44, 0x01, - // // 0x20, 0xe4, 0x12, 0x62, 0x0c, 0x24, 0x48, 0xb4, 0xe4, 0x89, 0x20, 0x20, 0xc5, 0x00, - // // 0x20, 0x0c, 0x45, 0xa5, 0x30, 0x92, 0x8c, 0x4d, 0x4a, 0x08, 0xc0, 0xe4, 0x84, 0x99, - // // 0x70, 0x94, 0x49, 0xb1, 0x1c, 0x88, 0x99, 0x69, 0x90, 0x63, 0x96, 0x11, 0x25, 0x94, - // // 0x8c, 0x26, 0x61, 0x00, 0x08, 0x69, 0x84, 0x8b, 0xc2, 0xc0, 0x6c, 0x00, 0x05, 0x38, - // // 0x19, 0x60, 0xa4, 0x51, 0x82, 0xd2, 0xa0, 0x21, 0x6c, 0xa0, 0x0e, 0x06, 0x14, 0x90, - // // 0xd1, 0x61, 0xa3, 0x10, 0x26, 0x9b, 0x8c, 0x40, 0x0d, 0xb2, 0x89, 0x31, 0xd0, 0x24, - // // 0xb6, 0x9c, 0x44, 0x99, 0x6a, 0x12, 0x82, 0x05, 0x13, 0x80, 0xc2, 0x10, 0xa0, 0xe2, - // // 0x32, 0x09, 0x0a, 0x30, 0x82, 0x28, 0xe3, 0x70, 0x5c, 0x11, 0xc2, 0x4a, 0x12, 0xd8, - // // 0x44, 0xa8, 0x90, 0x98, 0xcc, 0x4a, 0x10, 0x6e, 0x16, 0x1c, 0x08, 0x09, 0x2d, 0xa4, - // // 0x10, 0x80, 0x91, 0x84, 0x0c, 0x10, 0x20, 0x60, 0x16, 0x82, 0x44, 0x18, 0x4e, 0x30, - // // 0x00, 0x48, 0x49, 0x51, 0x30, 0x5a, 0x24, 0xc2, 0x42, 0x40, 0x06, 0x02, 0x90, 0x61, - // // 0x42, 0x88, 0xb0, 0x8a, 0x98, 0x9c, 0x66, 0x40, 0x24, 0x90, 0x01, 0x89, 0xe3, 0x25, - // // 0x04, 0x10, 0xa4, 0x00, 0x20, 0xc0, 0x10, 0xb6, 0xe1, 0x71, 0x24, 0x44, 0xc1, 0x13, - // // 0xb4, 0x48, 0x2d, 0xc4, 0x6a, 0x02, 0x81, 0x25, 0x0a, 0x00, 0x08, 0x54, 0x84, 0x48, - // // 0x00, 0x84, 0x66, 0x48, 0x19, 0x50, 0x04, 0x30, 0xc9, 0x13, 0xa6, 0xd3, 0x65, 0x80, - // // 0x84, 0xb2, 0x42, 0x4c, 0x5a, 0x64, 0x17, 0x1a, 0x48, 0xc0, 0x8c, 0x34, 0x4d, 0x88, - // // 0x09, 0x65, 0x92, 0x50, 0xc8, 0x53, 0x86, 0x84, 0x05, 0x98, 0x30, 0x16, 0x4b, 0x08, - // // 0x18, 0x41, 0x36, 0xdb, 0x05, 0x0c, 0x05, 0x08, 0x84, 0x92, 0x5c, 0x26, 0x52, 0x92, - // // 0x15, 0x0c, 0x22, 0x53, 0x6d, 0x40, 0x49, 0x83, 0x20, 0x08, 0x21, 0x10, 0x09, 0x04, - // // 0xa9, 0x20, 0x05, 0xb3, 0x32, 0x44, 0xc2, 0x40, 0xdb, 0x45, 0x40, 0x21, 0x16, 0x03, - // // 0x81, 0x86, 0x2c, 0xa1, 0x0b, 0x64, 0x64, 0x91, 0x40, 0xc4, 0x46, 0x84, 0x62, 0x48, - // // 0x08, 0x82, 0xe2, 0x71, 0xd4, 0x4d, 0x94, 0x88, 0x12, 0x01, 0x08, 0xa6, 0x8d, 0xa2, - // // 0x41, 0x8e, 0x54, 0x64, 0x30, 0x12, 0x19, 0x18, 0x31, 0xb4, 0x70, 0xc0, 0x88, 0x0c, - // // 0xa1, 0x45, 0x44, 0x64, 0x38, 0x80, 0x6e, 0x38, 0x6d, 0xc0, 0x60, 0x0e, 0x24, 0x32, - // // 0x30, 0x5c, 0x17, 0x04, 0x32, 0x06, 0x64, 0x40, 0x91, 0x22, 0xcc, 0x0e, 0x12, 0xd1, - // // 0x92, 0x40, 0x61, 0xc2, 0x65, 0xb8, 0x43, 0x8d, 0x5b, 0x66, 0x25, 0x18, 0x42, 0xc4, - // // 0x64, 0xc8, 0x62, 0x28, 0xa2, 0x81, 0x83, 0x0c, 0x49, 0x23, 0x46, 0xe4, 0x85, 0x48, - // // 0x80, 0xa6, 0x59, 0x02, 0x61, 0x2c, 0xc2, 0x13, 0x10, 0xc9, 0x09, 0xb0, 0x71, 0x09, - // // 0x0c, 0x84, 0x41, 0x12, 0x28, 0xd3, 0x92, 0x93, 0x92, 0x14, 0x0c, 0xb4, 0xa1, 0x04, - // // 0xe2, 0x99, 0x2b, 0xa2, 0x0b, 0x2e, 0xd3, 0x7d, 0x02, 0x60, 0xcf, 0x9e, 0x0b, 0x48, - // // 0xdd, 0x4c, 0x4f, 0x1f, 0x45, 0xa2, 0x88, 0x84, 0xea, 0xfa, 0xa1, 0x12, 0x3b, 0x80, - // // 0x93, 0x9b, 0x87, 0x98, 0x62, 0x95, 0x60, 0x28, 0xcb, 0x0e, 0x2d, 0x6d, 0xf0, 0x3a, - // // 0xc9, 0x67, 0xca, 0xdc, 0x10, 0xf1, 0xde, 0x7d, 0xf4, 0xa7, 0x4f, 0x9e, 0xbe, 0x41, - // // 0x83, 0xe4, 0x29, 0x98, 0x15, 0x5a, 0x9c, 0xee, 0xe9, 0x0e, 0xda, 0xa4, 0x28, 0xfe, - // // 0xdd, 0x95, 0x3d, 0xe0, 0x76, 0xd5, 0x13, 0x15, 0x76, 0xcb, 0x82, 0x4f, 0x5a, 0x3a, - // // 0x83, 0x50, 0x92, 0x3f, 0xdc, 0xf7, 0x8b, 0x07, 0x90, 0xdd, 0x57, 0xf9, 0x34, 0x85, - // // 0xf7, 0xff, 0xfc, 0xa3, 0xa2, 0x37, 0x29, 0x7e, 0xfc, 0xc8, 0xd7, 0x1e, 0xcf, 0xeb, - // // 0xfe, 0x79, 0x90, 0x2b, 0x61, 0xef, 0xb4, 0x5b, 0xd1, 0xd4, 0xfe, 0x06, 0x17, 0xea, - // // 0xaf, 0xf2, 0x66, 0x0c, 0x59, 0xf1, 0xc3, 0xaf, 0x21, 0x98, 0x56, 0x2c, 0xf1, 0xcd, - // // 0x7c, 0x1d, 0x94, 0xc1, 0x31, 0x6b, 0xdd, 0x92, 0x66, 0xe4, 0x54, 0x68, 0x6b, 0x6c, - // // 0x21, 0x08, 0x09, 0x09, 0x2f, 0xd0, 0xad, 0x29, 0x55, 0xb0, 0x25, 0xea, 0x4f, 0xa7, - // // 0xa0, 0x5c, 0xe4, 0x64, 0xec, 0xf9, 0xff, 0x61, 0x0a, 0x34, 0xd3, 0x8d, 0x79, 0x30, - // // 0xb6, 0x35, 0xae, 0x9c, 0x59, 0xae, 0x9b, 0x0c, 0x92, 0xeb, 0x4b, 0xc9, 0xc0, 0x0c, - // // 0xca, 0x9e, 0x78, 0xe5, 0xd5, 0xda, 0xd1, 0x0b, 0xc6, 0x4a, 0xca, 0x2c, 0x42, 0x3b, - // // 0x2d, 0x89, 0x61, 0xb3, 0xf4, 0x85, 0x29, 0x86, 0xa8, 0xc6, 0xbd, 0xd4, 0xb2, 0x79, - // // 0x1b, 0x8f, 0xb9, 0xe9, 0xa5, 0xef, 0xc1, 0xe6, 0xb7, 0xe0, 0xfe, 0xc0, 0xf7, 0x91, - // // 0x0c, 0xc5, 0xa3, 0x99, 0x09, 0x1e, 0x3a, 0x33, 0x1d, 0x14, 0x15, 0x4d, 0x76, 0xb8, - // // 0x72, 0xf5, 0xdb, 0x66, 0x72, 0xf7, 0xb5, 0x47, 0x7b, 0xf7, 0xc8, 0x4f, 0x90, 0x22, - // // 0xc2, 0x03, 0xe8, 0xdb, 0xe6, 0xfe, 0x30, 0x8f, 0xae, 0xc0, 0x4b, 0xb6, 0xfb, 0xb8, - // // 0xeb, 0x7c, 0x99, 0xc5, 0x7e, 0x3e, 0xa4, 0x24, 0xcc, 0x83, 0xaa, 0x05, 0x9d, 0x39, - // // 0x86, 0xf0, 0x59, 0x1a, 0xf0, 0x39, 0x68, 0x28, 0x4d, 0xf4, 0x95, 0xa6, 0x7e, 0x61, - // // 0x51, 0x1f, 0x83, 0xdd, 0x51, 0xab, 0x2a, 0xa5, 0x53, 0x80, 0xa9, 0x22, 0x25, 0x35, - // // 0x63, 0x53, 0x47, 0x5d, 0xbc, 0x7b, 0xde, 0xe8, 0x3a, 0xed, 0x07, 0xff, 0x19, 0xaa, - // // 0xb4, 0x77, 0xfd, 0x35, 0xdd, 0x09, 0xaf, 0xec, 0x61, 0xa1, 0xff, 0x60, 0x0b, 0x9a, - // // 0x7c, 0xf8, 0x0d, 0x0d, 0xa5, 0x18, 0x69, 0x5d, 0xce, 0xb2, 0x9d, 0x3d, 0x62, 0xb2, - // // 0x09, 0xcc, 0xbb, 0x45, 0x40, 0x5a, 0xc5, 0x63, 0x0e, 0x57, 0x36, 0x5b, 0xaa, 0x8d, - // // 0x42, 0x71, 0x20, 0xa7, 0xe3, 0x93, 0x70, 0xb7, 0x6e, 0x59, 0x92, 0x3a, 0xcc, 0x39, - // // 0xef, 0xec, 0xf9, 0xb0, 0xd1, 0x35, 0x72, 0xeb, 0xf0, 0xa1, 0x62, 0xd0, 0xd1, 0x82, - // // 0x5b, 0xc7, 0x99, 0x3a, 0x6e, 0x1d, 0x3d, 0x0c, 0x36, 0x0e, 0x10, 0x5a, 0x08, 0x7b, - // // 0x85, 0xca, 0xba, 0x43, 0x59, 0x8e, 0x4e, 0x9a, 0xfa, 0x14, 0xf8, 0x74, 0x03, 0x55, - // // 0x20, 0xfb, 0xe1, 0x49, 0x53, 0x35, 0xf5, 0xd5, 0x87, 0x14, 0x1f, 0x50, 0x72, 0xa5, - // // 0xd1, 0x43, 0x16, 0x3f, 0x2b, 0x33, 0x69, 0x60, 0x70, 0x0d, 0x67, 0xb1, 0x1a, 0x12, - // // 0x79, 0xc7, 0xcf, 0xb5, 0xf6, 0x7a, 0x6d, 0x13, 0xfc, 0x04, 0x31, 0xc7, 0x98, 0x5d, - // // 0xf3, 0x69, 0xa8, 0x16, 0xb7, 0xe0, 0x62, 0x00, 0xd9, 0xbb, 0x6e, 0xd9, 0xa4, 0xdd, - // // 0x3e, 0x2d, 0x2e, 0xe8, 0x25, 0x72, 0x6b, 0x0d, 0x00, 0x1d, 0xcc, 0xea, 0x89, 0x6e, - // // 0x6e, 0x12, 0x36, 0x67, 0x4c, 0x03, 0xfe, 0x55, 0xbe, 0x0c, 0xf4, 0x24, 0x01, 0x3e, - // // 0x18, 0xa0, 0xc8, 0xb3, 0xd7, 0xe4, 0xb0, 0x4e, 0x41, 0x84, 0x75, 0x13, 0x90, 0x67, - // // 0xb0, 0x45, 0x5c, 0x0c, 0x4c, 0x76, 0x65, 0xa1, 0x3d, 0x09, 0x17, 0x04, 0x87, 0x97, - // // 0x6e, 0x64, 0xef, 0xbe, 0x3f, 0xa6, 0x7c, 0x15, 0x14, 0x6a, 0xf4, 0x4f, 0x9c, 0x82, - // // 0x58, 0xdc, 0xe3, 0xd7, 0x22, 0x17, 0x5f, 0x96, 0xc1, 0xd2, 0xe4, 0x14, 0x59, 0xe1, - // // 0x5c, 0x3c, 0x55, 0xdd, 0xb6, 0xd8, 0x4e, 0xc0, 0xa0, 0x62, 0xbe, 0x7c, 0xaa, 0x4d, - // // 0x28, 0x30, 0xb4, 0x12, 0x8d, 0x27, 0xd5, 0x0f, 0x27, 0xbf, 0xe0, 0x3b, 0x07, 0xd5, - // // 0xbd, 0x21, 0x68, 0xd9, 0xf9, 0x19, 0x86, 0x08, 0xe1, 0x76, 0xa7, 0xff, 0xa5, 0xbf, - // // 0x5a, 0xaf, 0x60, 0x48, 0x42, 0x0b, 0x01, 0xce, 0x56, 0xac, 0x6b, 0x76, 0x35, 0x9c, - // // 0x55, 0x78, 0x8e, 0x94, 0x9e, 0xaa, 0xc2, 0x75, 0x3b, 0xba, 0xe1, 0xd9, 0x15, 0x8b, - // // 0x00, 0x4f, 0x33, 0x37, 0xd1, 0x43, 0x1e, 0x11, 0x23, 0x95, 0x59, 0x59, 0x58, 0x05, - // // 0x9f, 0x9c, 0xa1, 0x66, 0xae, 0x55, 0xc6, 0xca, 0xa7, 0xb5, 0x56, 0xe0, 0xac, 0x3c, - // // 0x9d, 0x93, 0x5a, 0xce, 0x62, 0x76, 0x5a, 0x90, 0x12, 0xec, 0xdd, 0x1d, 0x9b, 0xdf, - // // 0x7e, 0xa7, 0xa4, 0xdc, 0x36, 0x25, 0x87, 0x01, 0xb6, 0x1b, 0x3d, 0x79, 0xa8, 0x43, - // // 0xcf, 0xf3, 0xf2, 0xfc, 0x01, 0xb2, 0xbb, 0x10, 0x90, 0x8b, 0x74, 0x19, 0x6e, 0x83, - // // 0x5d, 0x3a, 0xa7, 0x7a, 0x47, 0xfb, 0xf3, 0x19, 0xd9, 0x07, 0xeb, 0xaa, 0x98, 0xa9, - // // 0x29, 0x69, 0xe3, 0xcb, 0x8f, 0x05, 0x9d, 0x64, 0xc8, 0xd6, 0x2a, 0xd8, 0xe6, 0xa2, - // // 0xdc, 0x7c, 0xf1, 0x98, 0x97, 0xa2, 0x7c, 0x12, 0x35, 0xe9, 0xd1, 0xb7, 0x64, 0xb2, - // // 0x01, 0xb7, 0x07, 0x5c, 0xd5, 0xcf, 0x7e, 0x64, 0x04, 0xea, 0xf9, 0x0f, 0x30, 0x26, - // // 0x9c, 0x26, 0xab, 0x88, 0xe3, 0x29, 0x07, 0x7f, 0x0f, 0x52, 0x62, 0xe1, 0x71, 0x61, - // // 0x0a, 0xa1, 0xb6, 0xfc, 0x87, 0xa7, 0x0a, 0xc3, 0x83, 0xb6, 0x89, 0x8a, 0x05, 0x70, - // // 0x28, 0xf5, 0x49, 0xc8, 0x1e, 0xc6, 0xfa, 0xe6, 0xd4, 0xe9, 0x0a, 0x92, 0x7d, 0xc2, - // // 0x3b, 0x76, 0xea, 0xb0, 0x5e, 0x87, 0xc4, 0xdb, 0x19, 0x51, 0x22, 0x56, 0x14, 0xb6, - // // 0xd7, 0x47, 0x78, 0x3c, 0x2e, 0x90, 0xc5, 0xc1, 0xc1, 0x01, 0xdc, 0x14, 0x35, 0xd8, - // // 0x12, 0x75, 0x3e, 0x6f, 0x83, 0x37, 0xbc, 0x73, 0xd3, 0x99, 0x6b, 0xa2, 0x9b, 0x7a, - // // 0x43, 0xca, 0x08, 0xe5, 0x4a, 0xe6, 0x3f, 0x06, 0xef, 0xbf, 0xef, 0x98, 0x46, 0x5b, - // // 0x29, 0xfd, 0x58, 0xbd, 0xbb, 0x5d, 0xbc, 0xd1, 0x04, 0x72, 0x83, 0x86, 0xd7, 0x04, - // // 0xf9, 0x69, 0x13, 0xdb, 0xc7, 0x73, 0x82, 0x3c, 0x9c, 0xfd, 0x5e, 0xb4, 0xe8, 0xc8, - // // 0x81, 0x53, 0xd6, 0xa0, 0x2a, 0x10, 0xa4, 0x16, 0x49, 0x1e, 0xba, 0x01, 0x48, 0x1a, - // // 0x7e, 0xd4, 0x99, 0x73, 0x8a, 0xb0, 0x56, 0xc9, 0x26, 0xb3, 0x90, 0x37, 0x5a, 0x98, - // // 0xae, 0xe3, 0x67, 0xff, 0x00, 0xee, 0x53, 0x20, 0x19, 0x65, 0xe6, 0x57, 0x8a, 0x52, - // // 0xc3, 0x6c, 0xeb, 0x16, 0xb1, 0x28, 0xd6, 0x47, 0xed, 0x7f, 0x81, 0x05, 0x7a, 0x47, - // // 0x7a, 0xf2, 0xb5, 0x72, 0x3f, 0xc6, 0xc0, 0x60, 0x64, 0xe0, 0xb9, 0x4a, 0x80, 0x60, - // // 0xfe, 0x19, 0xd2, 0x44, 0xd6, 0x1c, 0xd5, 0x82, 0x75, 0x0d, 0x0e, 0x8b, 0x5d, 0x59, - // // 0xaf, 0xc4, 0x9b, 0xdf, 0xe0, 0x66, 0xa3, 0x83, 0x32, 0xc7, 0x92, 0x3d, 0x6d, 0x6f, - // // 0xd9, 0xa0, 0x5c, 0xfb, 0x13, 0x80, 0x53, 0x47, 0x00, 0x6e, 0x98, 0xd7, 0x0b, 0x79, - // // 0x0c, 0xac, 0xbb, 0x83, 0x21, 0xb1, 0x2b, 0xab, 0x42, 0x20, 0x71, 0x9d, 0x04, 0x74, - // // 0xc2, 0x63, 0x65, 0xe8, 0x24, 0x25, 0x29, 0x2d, 0xaa, 0xa3, 0xd7, 0xa9, 0xf5, 0xbe, - // // 0xd4, 0x36, 0x80, 0x94, 0xf9, 0x58, 0x0c, 0x2c, 0x5b, 0xcb, 0xb8, 0x64, 0x1a, 0x79, - // // 0x37, 0x5a, 0x45, 0x5e, 0x5f, 0xa2, 0x7c, 0x14, 0x8d, 0x9f, 0x27, 0x49, 0x5f, 0x8d, - // // 0x75, 0xa7, 0x9b, 0xc8, 0x3c, 0x26, 0xda, 0x56, 0xbc, 0xe3, 0x2e, 0x3b, 0x78, 0xc2, - // // 0x4a, 0xc3, 0x0b, 0xc6, 0xa2, 0xa5, 0x14, 0x26, 0xac, 0x1b, 0xe9, 0x47, 0xa1, 0x3c, - // // 0xce, 0x7c, 0x4c, 0xb4, 0x10, 0x2c, 0x5d, 0x26, 0x2a, 0x2e, 0x45, 0xbf, 0x8b, 0x2f, - // // 0xbe, 0x4f, 0xed, 0xcb, 0xcd, 0x22, 0x59, 0xf0, 0x4b, 0xf1, 0x7c, 0x9f, 0xcd, 0x61, - // // 0xc9, 0x57, 0x15, 0x87, 0xce, 0x02, 0xef, 0x8d, 0x76, 0xd4, 0x0a, 0x41, 0x19, 0x47, - // // 0xcd, 0xc4, 0x97, 0xa9, 0x78, 0x14, 0x35, 0x50, 0xeb, 0x2d, 0x20, 0x4f, 0x4a, 0x6a, - // // 0x75, 0x0d, 0x1f, 0xdb, 0xc4, 0xd2, 0x09, 0xde, 0xdb, 0x01, 0x06, 0x61, 0xeb, 0x15, - // // 0xde, 0x9b, 0x48, 0x41, 0x67, 0xdc, 0x15, 0xff, 0x64, 0x46, 0xfe, 0x5e, 0x21, 0x21, - // // 0xab, 0x16, 0x8f, 0x2a, 0xe9, 0xd2, 0x29, 0x61, 0x9d, 0x28, 0xf2, 0xd6, 0x52, 0x70, - // // 0x4b, 0x51, 0x16, 0x88, 0x01, 0xb2, 0x64, 0xb6, 0x86, 0x97, 0x6b, 0x46, 0xbf, 0xe2, - // // 0x9f, 0x16, 0x3b, 0x1d, 0xb7, 0x8b, 0x0a, 0x9c, 0x64, 0x7b, 0xa7, 0x28, 0x48, 0x01, - // // 0xd9, 0x63, 0x36, 0x2c, 0xb2, 0xb5, 0x94, 0x4a, 0xbf, 0x93, 0x1b, 0x07, 0x81, 0x6f, - // // 0x8d, 0x1b, 0x38, 0x61, 0x48, 0x7c, 0xac, 0xb1, 0xe9, 0x09, 0x0d, 0x55, 0xc4, 0x89, - // // 0xab, 0xcd, 0x09, 0x86, 0x1f, 0x07, 0x0d, 0xc7, 0x1e, 0x43, 0x28, 0x45, 0x8f, 0x3f, - // // 0x48, 0xe1, 0x79, 0xe3, 0xd4, 0xc5, 0xdd, 0x80, 0xbb, 0x15, 0x78, 0x73, 0xaa, 0x0b, - // // 0x54, 0xdb, 0xf0, 0x6c, 0x0f, 0x76, 0x79, 0x16, 0x59, 0x24, 0x7c, 0x78, 0x35, 0x67, - // // 0x80, 0xf9, 0xc0, 0x54, 0x80, 0x0a, 0xa0, 0xc3, 0x86, 0x49, 0xc7, 0xbb, 0x6a, 0x94, - // // 0x78, 0xb5, 0x44, 0xce, 0x7e, 0x51, 0x46, 0x04, 0x64, 0xcf, 0xa5, 0x18, 0xcb, 0x13, - // // 0xd9, 0xcf, 0x71, 0xbd, 0x0d, 0x74, 0xcd, 0xc8, 0xc0, 0x47, 0xc5, 0xef, 0x05, 0x5d, - // // 0xde, 0x0b, 0x10, 0xab, 0x98, 0xdd, 0x46, 0x96, 0x1d, 0x26, 0x0d, 0x6f, 0x64, 0xcf, - // // 0xbc, 0xb8, 0xf3, 0x87, 0x4d, 0x9a, 0xd6, 0xcb, 0x9d, 0x64, 0x52, 0x17, 0xdc, 0x9e, - // // 0x20, 0xe8, 0xe2, 0x5a, 0x1a, 0x32, 0x1b, 0x00, 0x59, 0x33, 0x58, 0xa2, 0xe3, 0xfd, - // // 0x98, 0x0c, 0xae, 0x0b, 0x29, 0x25, 0x62, 0xa2, 0xc3, 0x8f, 0x10, 0x7d, 0x90, 0x13, - // // 0x11, 0x73, 0x1f, 0x32, 0x0b, 0x96, 0xbe, 0x9e, 0xdd, 0x37, 0x59, 0x7f, 0x88, 0xd8, - // // 0xa2, 0x55, 0xb6, 0x59, 0x1e, 0x0f, 0x4f, 0x01, 0xd3, 0x38, 0xe4, 0x6d, 0xcd, 0x75, - // // 0x6b, 0xe3, 0x3a, 0x5d, 0x6f, 0xaf, 0xd9, 0xc1, 0x03, 0x88, 0x89, 0x68, 0xae, 0xcf, - // // 0xc2, 0xc3, 0xc8, 0x13, 0xaf, 0x3b, 0x2e, 0xe5, 0xae, 0xef, 0x15, 0x26, 0xc8, 0x12, - // // 0x52, 0xf7, 0x62, 0x17, 0xc3, 0x7e, 0xef, 0xa5, 0x27, 0xa0, 0xc1, 0x30, 0x1b, 0xf7, - // // 0x21, 0xa1, 0x59, 0xcd, 0x77, 0x0d, 0x5c, 0xac, 0xb7, 0xdc, 0xa0, 0xa5, 0xe2, 0x70, - // // 0xd3, 0xce, 0xd8, 0xa0, 0xda, 0x22, 0x21, 0x9d, 0x4c, 0xdd, 0x7a, 0xc4, 0x0e, 0xa5, - // // 0x34, 0x29, 0xe3, 0x65, 0xfc, 0x92, 0x6d, 0x48, 0x5d, 0x3c, 0xf8, 0x18, 0x4e, 0x2d, - // // 0x16, 0x96, 0xf9, 0xb3, 0xac, 0x4f, 0x24, 0x75, 0x82, 0x62, 0xc7, 0x21, 0x3d, 0x5c, - // // 0x30, 0x2b, 0xef, 0xd9, 0x28, 0x5c, 0x8a, 0xca, 0x51, 0x54, 0xa3, 0x86, 0x72, 0xbe, - // // 0x19, 0x64, 0xca, 0x93, 0x8f, 0xde, 0xbd, 0xa6, 0xb5, 0x39, 0xad, 0x6c, 0xdc, 0x32, - // // 0x70, 0xdd, 0x6d, 0xa1, 0x76, 0x34, 0xc7, 0xfe, 0x43, 0xd5, 0x79, 0xa7, 0xa7, 0x9d, - // // 0x7a, 0xdb, 0xb5, 0xe6, 0xb4, 0x57, 0x49, 0xdd, 0x34, 0x47, 0x13, 0xb2, 0xa7, 0xb2, - // // 0xe9, 0x25, 0x29, 0x58, 0x3b, 0x03, 0x57, 0x2a, 0x32, 0x0a, 0x6f, 0x10, 0xd2, 0x71, - // // 0x90, 0x69, 0x0d, 0xb7, 0x06, 0x88, 0x11, 0x8d, 0xcf, 0x88, 0xa8, 0xfa, 0x4e, 0x6b, - // // 0xe9, 0x9a, 0x42, 0x7d, 0x73, 0xc2, 0xbd, 0xc6, 0x7a, 0x6a, 0xfc, 0xe1, 0x66, 0xfc, - // // 0x50, 0x76, 0x36, 0x88, 0x97, 0x52, 0x38, 0x9d, 0x4d, 0x83, 0xc1, 0x05, 0xcf, 0x22, - // // 0x6e, 0x71, 0x76, 0x35, 0xaa, 0xff, 0xd3, 0xc8, 0xd6, 0xbd, 0x84, 0x9a, 0xfa, 0xbb, - // // 0xec, 0xfd, 0x83, 0x37, 0x57, 0x2f, 0xf6, 0xb7, 0x88, 0xb1, 0xb4, 0xc6, 0x65, 0xc0, - // // 0x61, 0x7c, 0x9e, 0xa4, 0xba, 0x01, 0x0b, 0x4f, 0x98, 0x6f, 0x7d, 0x44, 0x87, 0xfc, - // // 0xec, 0xa9, 0xb7, 0xf4, 0x7f, 0x95, 0x5d, 0x8e, 0xff, 0xfd, 0xc6, 0xcc, 0x24, 0x67, - // // 0x1d, 0xb0, 0xbc, 0xe4, 0x94, 0x42, 0x2f, 0x1a, 0xd7, 0x68, 0xd4, 0x39, 0x63, 0x32, - // // 0x57, 0x81, 0x38, 0xdb, 0x89, 0xf5, 0xc6, 0x23, 0xe2, 0x55, 0xbc, 0x30, 0x23, 0xdf, - // // 0x41, 0x65, 0x1b, 0xd3, 0x75, 0x1c, 0x30, 0x99, 0x16, 0x53, 0x20, 0xd6, 0xd5, 0xe9, - // // 0x56, 0x2f, 0x07, 0xb0, 0x56, 0x9e, 0x5c, 0x8a, 0xe9, 0x06, 0x63, 0xcd, 0x02, 0x1a, - // // 0x5c, 0x8b, 0x87, 0x48, 0xc1, 0x2e, 0xe3, 0x6c, 0x42, 0x61, 0x7d, 0xce, 0x7b, 0x45, - // // 0x14, 0x40, 0x23, 0x04, 0x09, 0x65, 0xfd, 0xe4, 0x58, 0xff, 0xfb, 0xad, 0x01, 0xab, - // // 0x7f, 0x60, 0xa1, 0x56, 0x69, 0x2b, 0x3f, 0xdd, 0x1d, 0x5b, 0xd4, 0x70, 0xb8, 0x8e, - // // 0x80, 0xb3, 0x3d, 0x1f, 0x6d, 0x3a, 0xe5, 0x22, 0xd2, 0x2b, 0x7d, 0x65, 0x1a, 0xae, - // // 0x7a, 0x33, 0x5d, 0x7b, 0xd3, 0xe6, 0x56, 0xc8, 0x82, 0xd1, 0x27, 0x88, 0x88, 0x82, - // // 0x43, 0x0d, 0xa4, 0x3c, 0xab, 0x33, 0x47, 0x71, 0x6d, 0x6b, 0x64, 0xaf, 0xe3, 0x23, - // // 0x05, 0xd7, 0x8e, 0x1a, 0xcd, 0x63, 0x70, 0xd4, 0x37, 0x22, 0xb9, 0x68, 0xdf, 0x9d, - // // 0xa9, 0x47, 0x5d, 0x25, 0xe4, 0xcc, 0x1f, 0xd3, 0xe3, 0x55, 0x43, 0xd8, 0xbe, 0x04, - // // 0x65, 0x13, 0x62, 0xfc, 0x2b, 0xf2, 0xd1, 0xe9, 0x9c, 0x2d, 0x95, 0xe3, 0x1c, 0xf2, - // // 0x67, 0xe2, 0xe7, 0x31, 0x9d, 0x40, 0xc2, 0xb3, 0x7d, 0x45, 0x7d, 0x5a, 0xf0, 0xc6, - // // 0x7b, 0x83, 0xad, 0xc1, 0xae, 0xd3, 0x6c, 0x7c, 0x19, 0x15, 0x4a, 0x22, 0x3f, 0x25, - // // 0x23, 0x39, 0xe6, 0x0f, 0x8c, 0x61, 0xb7, 0x82, 0x1c, 0x20, 0xa4, 0x58, 0xea, 0xcd, - // // 0x33, 0x79, 0x77, 0x0b, 0x5b, 0xe1, 0x0e, 0x6c, 0x66, 0x98, 0x74, 0x3a, 0x81, 0x4a, - // // 0x49, 0x58, 0x50, 0xb5, 0x36, 0xce, 0xf1, 0x3e, 0xa1, 0x48, 0x7d, 0x4e, 0xfb, 0x85, - // // 0xe3, 0x35, 0x36, 0xc8, 0x62, 0x1a, 0x8b, 0x12, 0x56, 0xbc, 0xbc, 0x1f, 0x60, 0xb2, - // // 0xec, 0x10, 0xc5, 0x06, 0xa2, 0xbe, 0x1e, 0xb3, 0xfe, 0x1a, 0x3e, 0x4a, 0xa7, 0x70, - // // 0xe3, 0xcb, 0xf1, 0x44, 0x4e, 0x57, 0x74, 0x26, 0x2b, 0x34, 0x19, 0x99, 0xd5, 0x0d, - // // 0xa9, 0x5b, 0x48, 0x83, 0xd6, 0xb0, 0xfc, 0xb5, 0x36, 0x88, 0x45, 0x2f, 0x9d, 0x6c, - // // 0xf4, 0x36, 0x34, 0x48, 0x37, 0x0b, 0x3f, 0x0b, 0xc1, 0xc8, 0x4a, 0xe8, 0x8b, 0x29, - // // 0x30, 0xed, 0xd5, 0x94, 0x18, 0x9d, 0x0c, 0x2d, 0x9a, 0x28, 0x96, 0x9c, 0x78, 0xd8, - // // 0x5c, 0xae, 0x56, 0x85, 0x7e, 0xf0, 0x20, 0x96, 0xab, 0x56, 0x90, 0x42, 0x51, 0x99, - // // 0x22, 0x67, 0xfc, 0x2f, 0x5b, 0xb9, 0xb8, 0x73, 0xc2, 0x08, 0xd8, 0x56, 0xae, 0x2f, - // // 0xab, 0x0e, 0xfe, 0x72, 0x04, 0x0b, 0x8c, 0xd0, 0xf2, 0x2b, 0xea, 0x2b, 0xaa, 0xae, - // // 0x72, 0xe3, 0xfe, 0x40, 0x02, 0x4f, 0x5d, 0xcf, 0x98, 0xd7, 0xa2, 0x31, 0xeb, 0xd7, - // // 0x68, 0xce, 0x9a, 0x2b, 0x57, 0xe0, 0x1f, 0x5b, 0xab, 0x12, 0xb2, 0x77, 0x4e, 0x40, - // // 0xe9, 0xe2, 0xd5, 0xe7, 0x9a, 0x94, 0xab, 0x98, 0x15, 0x68, 0x88, 0x97, 0xfe, 0x0e, - // // 0x75, 0x2d, 0x0b, 0x49, 0xa6, 0x8e, 0x25, 0x79, 0xd5, 0x15, 0x69, 0xff, 0x9c, 0x6c, - // // 0x09, 0x39, 0xd9, 0x3e, 0xc7, 0x3e, 0x8c, 0x0c, 0xe9, 0xd9, 0x5c, 0x67, 0xf4, 0xd8, - // // 0x61, 0xe1, 0x44, 0x9f, 0x6c, 0xf3, 0xa8, 0xad, 0xb2, 0x6f, 0xbe, 0x86, 0xd6, 0x83, - // // 0x60, 0x65, 0x3d, 0xca, 0x69, 0x04, 0x63, 0x51, 0x71, 0x5a, 0xbb, 0x7e, 0xda, 0xe1, - // // 0x1f, 0x22, 0xee, 0x4b, 0x96, 0xe7, 0x9a, 0x6f, 0xba, 0x5b, 0x00, 0x01, 0xae, 0xf5, - // // 0x99, 0x91, 0x28, 0x1c, 0x42, 0xbe, 0xd8, 0xed, 0xfe, 0xfb, 0x62, 0xaf, 0x8f, 0xc4, - // // 0x5b, 0x79, 0x95, 0x52, 0x3f, 0x9e, 0xfa, 0x89, 0xf6, 0x16, 0x68, 0x19, 0xe7, 0xc8, - // // 0xd4, 0x29, 0x48, 0x77, 0x5a, 0xc6, 0x09, 0x7a, 0x32, 0x4f, 0x83, 0x3f, 0x68, 0x5a, - // // 0x61, 0x9d, 0x41, 0x11, 0x6e, 0x7d, 0x05, 0x25, 0x25, 0x56, 0x8c, 0x69, 0x0a, 0x92, - // // 0x3a, 0x0d, 0x5f, 0x65, 0x51, 0x28, 0x2e, 0xea, 0x8f, 0x6c, 0x6e, 0x8d, 0xef, 0xee, - // // 0xa0, 0xc1, 0xe9, 0xb4, 0x85, 0xc1, 0xdd, 0x37, 0x23, 0x56, 0x77, 0x29, 0x52, 0x8e, - // // 0x27, 0x26, 0xcc, 0x16, 0x54, 0x75, 0xb7, 0xc8, 0x0e, 0xbb, 0xcb, 0x2c, 0x6a, 0x25, - // // 0x55, 0x9e, 0x7c, 0x8e, 0xa6, 0x2f, 0x02, 0x2c, 0xd4, 0xc9, 0xa7, 0x34, 0x18, 0x94, - // // 0x7e, 0x31, 0x1c, 0xa7, 0xfc, 0x6e, 0x00, 0x16, 0x4e, 0xde, 0xb1, 0x44, 0xcb, 0xf3, - // // 0x30, 0x11, 0xad, 0x78, 0x18, 0x8a, 0x8e, 0xe7, 0xaf, 0xd0, 0x06, 0x55, 0xb5, 0x41, - // // 0xce, 0xc6, 0xaf, 0xee, 0xd3, 0x1d, 0xdc, 0x34, 0x4a, 0x68, 0x34, 0x02, 0x49, 0x22, - // // 0x8c, 0x35, 0xcb, 0x46, 0xce, 0xda, 0x2b, 0x6a, 0xdd, 0xd0, 0x31, 0xcf, 0xca, 0xd3, - // // 0x2a, 0xb6, 0x08, 0x85, 0x15, 0x23, 0x10, 0x89, 0x64, 0xc9, 0xd2, 0x10, 0x72, 0xd3, - // // 0xde, 0x89, 0x8e, 0xf3, 0xea, 0x7a, 0x3e, 0x8f, 0x50, 0x62, 0x24, 0xb4, 0x9a, 0x4c, - // // 0x9e, 0x3f, 0xf1, 0x3f, 0x4a, 0xa9, 0xf5, 0xb4, 0x0f, 0x86, 0x95, 0x83, 0xf0, 0x91, - // // 0x26, 0xcb, 0x2a, 0x1e, 0x9d, 0x31, 0x36, 0x3c, 0x89, 0xe6, 0xce, 0xec, 0xbc, 0x3f, - // // 0x2b, 0x7e, 0x57, 0xf2, 0x06, 0x06, 0xb5, 0x75, 0x7f, 0xc5, 0x58, 0xfc, 0x26, 0x9f, - // // 0x89, 0xd6, 0xff, 0x8e, 0xda, 0x7a, 0xee, 0xfd, 0xcf, 0x85, 0x4e, 0x8d, 0xe5, 0x44, - // // 0x32, 0x6c, 0xb3, 0xee, 0xd8, 0x11, 0xc1, 0x10, 0xcb, 0x88, 0xd5, 0x9a, 0x81, 0xaa, - // // 0xbf, 0x8c, 0x0c, 0x24, 0x18, 0x88, 0x2a, 0x31, 0x22, 0x9f, 0xfd, 0x72, 0xf1, 0x3f, - // // 0x53, 0xc4, 0x83, 0x94, 0x0c, 0xa5, 0x48, 0x53, 0x91, 0xd5, 0x5f, 0x22, 0x35, 0xd4, - // // 0x68, 0x05, 0x1a, 0xec, 0x65, 0xfd, 0x30, 0x76, 0x6e, 0x3b, 0xc6, 0x4b, 0x8e, 0x90, - // // 0x9b, 0x43, 0xfd, 0x97, 0xbd, 0x0f, 0x23, 0xf6, 0x97, 0xa9, 0x08, 0x66, 0x40, 0xa2, - // // 0x3e, 0x67, 0xa9, 0x89, 0x2f, 0x09, 0x5b, 0x06, 0x3d, 0x67, 0x1b, 0xcd, 0x88, 0xc9, - // // 0x6c, 0xee, 0x0e, 0x4f, 0x8b, 0x94, 0xec, 0x39, 0xfe, 0xee, 0xf7, 0x81, 0xc3, 0x2e, - // // 0x1b, 0xd2, 0x37, 0x93, 0x6a, 0x56, 0x68, 0x40, 0x4e, 0xac, 0x09, 0x05, 0x6d, 0xf0, - // // 0x5b, 0xd8, 0x67, 0xfd, 0x86, 0x56, 0x69, 0xf0, 0x03, 0x3d, 0x21, 0x10, 0x43, 0x5b, - // // 0xe4, 0xfc, 0x9f, 0xfd, 0x9e, 0xd5, 0x47, 0x4a, 0x19, 0xf7, 0x3f, 0x02, 0xea, 0xd1, - // // 0xdd, 0x50, 0x52, 0x01, 0x7e, 0x6b, 0xd2, 0xfa, 0x1c, 0x78, 0x4a, 0xef, 0x9d, 0xf9, - // // 0xc1, 0x87, 0xf8, 0xbc, 0x8b, 0xb5, 0xbc, 0x89, 0x20, 0x49, 0x51, 0xa4, 0x1f, 0x68, - // // 0x1c, 0xbc, 0xbf, 0x35, 0x6c, 0xec, 0xcf, 0x80, 0xd9, 0x91, 0x58, 0x88, 0xb4, 0xa6, - // // 0x95, 0x35, 0x19, 0x2a, 0x0e, 0xf6, 0xad, 0x13, 0x68, 0xea, 0xe9, 0xbc, 0xdb, 0x5e, - // // 0x8f, 0xc6, 0x10, 0xf1, 0xc3, 0xc7, 0xa8, 0x55, 0xc7, 0xe5, 0xbc, 0x11, 0xe5, 0x1e, - // // 0xfa, 0xbf, 0x67, 0x53, 0xde, 0x6f, 0x1f, 0x3c, 0x61, 0xe7, 0x2a, 0x2d, 0xc9, 0xf5, - // // 0x97, 0x28, 0xee, 0x8c, 0x87, 0x2f, 0x25, 0x7c, 0xa9, 0x35, 0x22, 0x2d, 0x2e, 0x5c, - // // 0x53, 0xd4, 0x64, 0x6e, 0x13, 0x1d, 0xc9, 0xf2, 0x56, 0x66, 0xa6, 0x4e, 0x86, 0xa2, - // // 0x9c, 0x56, 0xe6, 0xb3, 0x60, 0x5e, 0xc7, 0x91, 0xb5, 0x46, 0xa5, 0x92, 0x43, 0x49, - // // 0x5d, 0x36, 0x51, 0x18, 0xe1, 0x2d, 0x95, 0x4a, 0xde, 0x14, 0xc5, 0x65, 0x87, 0xf9, - // // 0x8b, 0x90, 0xf2, 0x34, 0x95, 0xb3, 0xf5, 0xb3, 0x0a, 0x57, 0x93, 0xe4, 0x09, 0xe4, - // // 0xce, 0x75, 0xe6, 0x95, 0x44, 0x3c, 0x90, 0x96, 0x1c, 0xff, 0x05, 0x3f, 0x63, 0x01, - // // 0x67, 0x80, 0x8d, 0x97, 0xd3, 0xa8, 0xc2, 0x65, 0x05, 0x5c, 0x57, 0x67, 0xca, 0x97, - // // 0xc5, 0xa0, 0x23, 0x07, 0xed, 0x73, 0x63, 0x82, 0xe4, 0x35, 0x1b, 0xd7, 0x92, 0xbb, - // // 0xcb, 0xd8, 0x28, 0x0d, 0x94, 0x72, 0x01, 0x19, 0x65, 0x43, 0xbb, 0xe2, 0x84, 0x3c, - // // 0x5d, 0xa4, 0x68, 0xb6, 0xc5, 0x19, 0x01, 0x4a, 0xc0, 0xc4, 0x4e, 0xec, 0x1b, 0xc1, - // // 0x22, 0xf5, 0x7c, 0x10, 0xc4, 0xc3, 0x5e, 0x45, 0xc4, 0xfd, 0xb9, 0xf0, 0xfc, 0xa8, - // // 0xa9, 0x3b, 0x86, 0xe9, 0x8e, 0xea, 0x12, 0x82, 0xd4, 0xe9, 0x4d, 0x56, 0x88, 0xa4, - // // 0x44, 0x10, 0xa3, 0xaf, 0x53, 0xde, 0x1a, 0xbf, 0x31, 0x71, 0x2b, 0x7d, 0x51, 0x03, - // // 0x75, 0x3d, 0xb3, 0xf2, 0x6b, 0xc9, 0x96, 0xd1, 0x7c, 0xb4, 0xe5, 0x3f, 0x00, 0xaa, - // // 0x22, 0x72, 0x20, 0x3b, 0xf3, 0x20, 0x24, 0x36, 0xaa, 0x93, 0x5a, 0x7b, 0x75, 0x59, - // // 0x11, 0x4f, 0xdb, 0xa2, 0x03, 0x40, 0x7a, 0x24, 0xbd, 0x51, 0xf4, 0xc1, 0x94, 0x49, - // // 0x83, 0x97, 0xc9, 0xe3, 0xdb, 0xb7, 0x55, 0xe4, 0xef, 0xc5, 0x59, 0xe6, 0x9d, 0x0e, - // // 0x76, 0x75, 0xc4, 0x61, 0xd4, 0xc0, 0xf9, 0x62, 0x07, 0x23, 0x90, 0xfa, 0x85, 0x82, - // // 0x7d, 0x31, 0x42, 0xf3, 0x01, 0x49, 0x9c, 0xa6, 0x38, 0x70, 0xf9, 0x09, 0x3f, 0x13, - // // 0xfe, 0xd6, 0xfd, 0xd6, 0xdf, 0x9f, 0xc6, 0x0f, 0x8e, 0x42, 0x4d, 0x7b, 0x63, 0xd5, - // // 0x48, 0x2a, 0x60, 0x74, 0x8f, 0x67, 0xf1, 0x8f, 0x6d, 0xa0, 0xa0, 0xfe, 0x74, 0x03, - // // 0x5a, 0xb5, 0x87, 0x0a, 0x27, 0x16, 0xb8, 0x72, 0xe7, 0x5c, 0x41, 0xd8, 0xd9, 0xde, - // // 0x4b, 0x75, 0x0d, 0x11, 0x30, 0x2f, 0x7e, 0x24, 0xcc, 0xa4, 0x2d, 0xbe, 0x1a, 0x05, - // // 0x15, 0xe4, 0x96, 0x2d, 0xe2, 0x5a, 0x66, 0x14, 0x33, 0x6e, 0x98, 0x56, 0x15, 0x04, - // // 0x5d, 0x34, 0xe8, 0x99, 0x25, 0xc4, 0xaa, 0x73, 0x7d, 0x07, 0xd1, 0xda, 0x72, 0x39, - // // 0x82, 0x5a, 0x11, 0x65, 0x76, 0x3f, 0x31, 0x89, 0x9f, 0x07, 0x1c, 0x1e, 0x63, 0xdb, - // // 0x29, 0x4b, 0x98, 0xc0, 0x01, 0x80, 0xda, 0xbb, 0x57, 0xcd, 0xdb, 0x0a, 0x93, 0xc4, - // // 0x56, 0xe0, 0x75, 0x7f, 0x88, 0xac, 0x03, 0x6e, 0x49, 0x91, 0xe7, 0xe9, 0x2f, 0x1b, - // // 0xd5, 0x32, 0xff, 0x28, 0xc3, 0x19, 0x07, 0xaa, 0x73, 0x62, 0x56, 0x34, 0x92, 0x51, - // // 0x75, 0xa1, 0x7d, 0xaa, 0xec, 0xbb, 0xcf, 0xdf, 0xb4, 0xa0, 0xf6, 0xec, 0x28, 0xdd, - // // 0x76, 0xd1, 0xdc, 0x17, 0x43, 0xbd, 0xf4, 0x9a, 0x5c, 0xfe, 0xf7, 0x6b, 0xe2, 0x11, - // // 0x66, 0x34, 0x85, 0x0e, 0xed, 0x5d, 0x06, 0x7f, 0xe7, 0x1d, 0xf7, 0x08, 0x29, 0x1e, - // // 0x15, 0xf6, 0x03, 0x19, 0x55, 0x69, 0x7c, 0xb6, 0x63, 0x84, 0xcf, 0xc3, 0x84, 0xa0, - // // 0xa3, 0xba, 0xc7, 0xbf, 0x5e, 0x84, 0x50, 0xf2, 0x58, 0x02, 0x99, 0x02, 0x7b, 0x76, - // // 0x16, 0x60, 0xd4, 0x01, 0x18, 0x5d, 0xdc, 0x7a, 0x25, 0x55, 0x0f, 0xe4, 0x40, 0xd4, - // // 0x91, 0x58, 0xca, 0x6f, 0xdf, 0x82, 0xf9, 0x33, 0xfb, 0x7e, 0xc6, 0x01, 0x35, 0x08, - // // 0x9c, 0x09, 0x20, 0x1e, 0x2f, 0x63, 0x2c, 0x79, 0xcd, 0x99, 0x39, 0x44, 0x52, 0x73, - // // 0x87, 0x4a, 0xf2, 0x5c, 0x32, 0x26, 0xad, 0x2a, 0x21, 0xe7, 0x1a, 0xf4, 0xe7, 0x03, - // // 0xd0, 0x83, 0xc4, 0x89, 0xde, 0x8e, 0x7e, 0xf7, 0x43, 0xa6, 0xfc, 0x79, 0x9a, 0x24, - // // 0x44, 0xa0, 0x5c, 0x33, 0x56, 0x42, 0xec, 0x0c, 0x35, 0xcc, 0x95, 0xa9, 0x7d, 0x30, - // // 0x22, 0xb5, 0x54, 0x56, 0xe1, 0x94, 0xce, 0x20, 0x2b, 0xd0, 0x77, 0xc4, 0x3f, 0x3c, - // // 0xe9, 0x7c, 0x20, 0xa0, 0xc2, 0x04, 0x2b, 0x74, 0x97, 0x95, 0x00, 0x6b, 0x19, 0xa5, - // // 0x28, 0x09, 0xcf, 0x04, 0x93, 0x06, 0xc7, 0x19, 0x2b, 0x21, 0x5e, 0xa4, 0x10, 0x4f, - // // 0xe0, 0x26, 0xcf, 0xd9, 0x4a, 0xdb, 0x59, 0x1e, 0x2c, 0x80, 0xaf, 0xd8, 0xee, 0x4d, - // // 0x26, 0x7d, 0x1e, 0x9f, 0xc3, 0x1a, 0x47, 0x29, 0xe7, 0x68, 0x95, 0xed, 0x25, 0x51, - // // 0x73, 0x13, 0xa8, 0x64, 0x00, 0xea, 0x8f, 0x27, 0x8a, 0x30, 0x53, 0x3a, 0x53, 0x65, - // // 0x91, 0xdb, 0x75, 0x75, 0x0c, 0x39, 0x9f, 0x12, 0xbc, 0xaf, 0xa3, 0xdd, 0x65, 0xed, - // // 0x69, 0x34, 0xa1, 0x81, 0xfd, 0x7c, 0xcb, 0x03, 0x36, 0x19, 0x39, 0x6f, 0x45, 0xaf, - // // 0xb0, 0xea, 0x4e, 0xff, 0x31, 0xe7, 0x6d, 0x6d, 0xf3, 0x49, - // // ]; - - // // let digest_512 = [ - // // 0x83, 0xe5, 0xbc, 0xa0, 0xe0, 0x52, 0xd0, 0x01, 0x3b, 0xa8, 0x9f, 0x5f, 0x33, 0xf4, - // // 0xb3, 0xea, 0x15, 0x49, 0xfc, 0x2a, 0x99, 0xac, 0x4f, 0xd9, 0x16, 0x5b, 0x78, 0x12, - // // 0x75, 0xdc, 0x58, 0x39, 0x92, 0x4c, 0x36, 0xa9, 0x5c, 0x6a, 0xe0, 0xdf, 0x68, 0x67, - // // 0xfa, 0x93, 0xa9, 0x8c, 0x1e, 0xd4, 0x61, 0x0c, 0xbb, 0xa4, 0xd6, 0x71, 0xad, 0x8d, - // // 0x30, 0x24, 0xa5, 0xca, 0xe3, 0x63, 0xd8, 0x5e, - // // ]; - - // // in hardware format - // let pk_hardware_format = ImageMldsaPubKey([ - // 0xa4c34aad, 0x85990594, 0x3b3099eb, 0x1ecf176c, 0x65de9fd6, 0xd9a79023, 0x8a4aa333, - // 0xd15a8dd4, 0x37a0aa4b, 0x0189a817, 0x6fabfe0e, 0xe492fb02, 0xca3b81bd, 0xb50c58ba, - // 0xfb11dff9, 0x2d477742, 0xd566336c, 0xd1777f86, 0x0bb73cb4, 0x5ec59477, 0x9b29603f, - // 0x132b3c75, 0xcecdce3c, 0x6cf949f0, 0xc4de84ed, 0x070e6a14, 0xc130ede6, 0x9a74116a, - // 0xdaf1de3e, 0x644faa5c, 0x26cc8d01, 0x60631c69, 0xce5f9b28, 0x68668dd7, 0xc48858fd, - // 0x4baaf788, 0xca3433ac, 0x56a9075f, 0x4a1a745d, 0x22aa4649, 0xa9892830, 0xd849f593, - // 0x3199e941, 0x844b76be, 0x5bde507d, 0xe356c318, 0xaf6948be, 0xf724d9e2, 0x0199a2bf, - // 0xcfccd9eb, 0x533ee9ce, 0x34c404fa, 0x4806443c, 0x6efc17d5, 0x30351c61, 0x42dc875f, - // 0x81f53daa, 0x209c95a4, 0x66660dad, 0x3f63c49a, 0x9ae324b1, 0x700520c1, 0x96f1e571, - // 0xaa5133fc, 0xb9b80b01, 0x66ec0775, 0xa087606c, 0x678196ed, 0x7e139b1b, 0x544c2fea, - // 0x3beb95ce, 0xe7c889e9, 0xd4a78996, 0x1180d253, 0xf0611137, 0xa9065c5b, 0x16ad085e, - // 0xec4eb2ba, 0x5115d3d0, 0xa5d9ecc6, 0x48993da9, 0xc9863823, 0x6d696b10, 0xc14bd1aa, - // 0xd5c7002c, 0x59b76ce5, 0x10d66ed6, 0xd99a3012, 0x15e32845, 0x64583adb, 0xf131cb8d, - // 0xa23be8b4, 0x5586c868, 0x0147a4e9, 0x027406d3, 0x38a34707, 0xbb11d35c, 0x999706cc, - // 0xd49b4f2f, 0x3a2bffcd, 0xbb8ea26a, 0x6031a38f, 0xb2b81bb0, 0xdd6ae90c, 0xc52aae9e, - // 0x40c7118b, 0x4f6f69ab, 0xf1b9fb4e, 0xe17eff23, 0xd4196251, 0xabda30b8, 0xcfe73bdf, - // 0x3fd708e8, 0x1dfdc294, 0x91135cf4, 0xce6d3a30, 0xd2d7d0e6, 0xc3bf0052, 0x58489c38, - // 0x20f2346a, 0xfd2fcb6d, 0xa1c107ab, 0xa56d7f4d, 0x4af058e5, 0xcee727f4, 0xf90d042e, - // 0x6e9782dd, 0x3629b653, 0x714e7dad, 0xe4348b69, 0xaa85996d, 0x8aa5f122, 0xf19ab645, - // 0x04caa0b3, 0xacdd0b32, 0xad05675c, 0xffff31eb, 0xa10645f5, 0xa863501a, 0x3911cf31, - // 0x033bce32, 0xb402a4ba, 0xbbc8e37a, 0x473b2032, 0xad0a222c, 0xadd5778a, 0xedef07f2, - // 0x4c704acb, 0x22395a0a, 0x46ed325c, 0x8c241603, 0xc63579f2, 0x5e171cf0, 0xc703cca8, - // 0xf0bf7ced, 0x95947386, 0xd118ea9a, 0xcf4061e9, 0x755fb6d7, 0xd34b8467, 0x4c9e316c, - // 0x8efbaf5c, 0xaf8b6b3e, 0xf28805b5, 0x2738a2f6, 0xc1cc79fa, 0xc2bd26c5, 0xe26b439c, - // 0xed195085, 0xd23091db, 0x9713c325, 0x50f0a173, 0x86a3be0e, 0x4a360d67, 0x934f7b28, - // 0x926678f0, 0x62dc04c5, 0xa976ae51, 0x38491c4f, 0xe607a52b, 0xc8704ef4, 0x8dc70877, - // 0x68acb197, 0xf8893edf, 0x79b754ab, 0x80e99d9a, 0x663d73e0, 0x49c877b5, 0x1f2a439e, - // 0x7fd843e6, 0x97e25f70, 0xee6b2ff3, 0x6b2a5500, 0x4942e97d, 0xc6b07951, 0x669b5e38, - // 0x5ff06273, 0x60272b43, 0x033fb5c0, 0x27259270, 0x171aee38, 0xa7484e7b, 0xc10a5c4e, - // 0xe3b43487, 0x6ddfb66c, 0xc6ef4e62, 0xf9b3589c, 0xc782ae18, 0xf363227d, 0xaa8ac410, - // 0xe17eeb1f, 0xeea4133d, 0xa6dfd292, 0x5f08f536, 0x1fcd05e8, 0xe16efe1a, 0x2e7a455e, - // 0xc72d6064, 0x5295fdb1, 0xb697a865, 0x8bc53087, 0xc08796f2, 0x2f2f6564, 0xb0a20df5, - // 0xdc023426, 0x76987c49, 0x3cce098d, 0x88583c0d, 0x45b0950c, 0x0fe6a2c2, 0x25b2bb09, - // 0xfaf36bbe, 0x2435bf9d, 0xb67048a5, 0x702c0f06, 0x2135a52a, 0x26287b18, 0x78cd8d26, - // 0x6bd42953, 0x726207fa, 0xd2ebcc0e, 0x0cf25057, 0x06526617, 0xbffc320c, 0xd04bb69c, - // 0xc727b133, 0x2432b8e5, 0xd254bf04, 0xb0edaf69, 0x4607caaf, 0xff728989, 0x78b8ce5b, - // 0xc308efb1, 0x5ed64e1c, 0xeeb02dcc, 0xf9eccf33, 0xdfe64533, 0xdaf93cc6, 0x78b73c17, - // 0x9a98cd23, 0x3268ae29, 0x1da48aae, 0xbe5e4261, 0x625797f9, 0xc16400e7, 0x27fe8157, - // 0x338cd9f9, 0xb6e767db, 0x82975ba6, 0x01478a92, 0x8c5cdfec, 0xaf7e993b, 0x7d85b256, - // 0x9fa753df, 0xe9d265fc, 0xea6425d9, 0x998f95ac, 0x72a0b613, 0x195c598d, 0x2a0c41d8, - // 0x5f04c2e9, 0xb46bf7c3, 0x7e6c48e0, 0x0288f1a9, 0xca6cb5f0, 0xe6d7b01d, 0x10c67516, - // 0xaca376b6, 0x40ada0f3, 0x419032f3, 0xc48cfd07, 0xb4fdd654, 0xa7e8db89, 0x370a5b78, - // 0x92787949, 0x63421003, 0x9ff61dbe, 0x41e91ecd, 0xc855adf9, 0x9debafb1, 0x26636426, - // 0xfe80dd85, 0xf9c53bb6, 0xae3c4ddb, 0x188a110c, 0x26cda2b5, 0x9c9917bc, 0x42c0adad, - // 0x2f089433, 0x67d66b50, 0xa794832c, 0x5af545cc, 0x2efa85bd, 0x98da9f58, 0x624e5a19, - // 0xf75ec35b, 0xc676e5a7, 0x2546bf59, 0x4f91107c, 0xb5036c40, 0x70d7794a, 0xceb719a2, - // 0xceafdac4, 0x78673f8b, 0x0d9c3355, 0xea376196, 0x2e3c451f, 0x58fc6789, 0x98843314, - // 0x10e05005, 0xa3ce45f7, 0xdc885fd2, 0x342e5ac2, 0x74e74b43, 0x6162978f, 0x5089904b, - // 0xa4a8f931, 0x35d20a3f, 0x6f20b8be, 0x6d27bf2c, 0xd192dedc, 0x0e9a7c84, 0xbdfcdf99, - // 0x85d98eef, 0xe28da928, 0x52bcfee1, 0x9c47918d, 0xc33cc88d, 0x99c8ebda, 0x5350bb28, - // 0x2fddd04e, 0xc2160cd0, 0xd9648620, 0x618566d2, 0xf4a0bf7f, 0x5912e3b4, 0xa9c23354, - // 0x81cc09c1, 0x7b4b41cc, 0x9bdf60e5, 0xb1adacbe, 0xcdbe6128, 0xa85e60fd, 0x09ec3faf, - // 0x904d4ca7, 0xb84b8e86, 0x763e058d, 0xca8a6df4, 0x4f3ef01e, 0x8a982342, 0xb5a59cbc, - // 0xbc0224f6, 0x3422b3f6, 0xc6ed782b, 0xd74f55c6, 0x38951af4, 0xb21db0fc, 0x99bc099e, - // 0xc6744fbc, 0x3cc0bac3, 0x6e6f28b0, 0x2977d2e4, 0x232359d0, 0x60152363, 0xe75a98f8, - // 0xaf3ffb97, 0x1c969cde, 0xcbc41a17, 0x6665f99c, 0xb7b7c2db, 0x327317cd, 0x3a163243, - // 0x92cfeaa5, 0x042bf3fb, 0x19cec4e4, 0x737a3dec, 0xf22df03f, 0x6c42b10d, 0xf13ebcff, - // 0x3b0bdf77, 0x192d2e1c, 0xe8eb3b74, 0x52584a0d, 0xfabea3ea, 0xb8e02671, 0x3d04b140, - // 0x2b80ee27, 0x734d3032, 0x4c6455c1, 0xc61e84b5, 0x01ad9944, 0x3ec96119, 0x6e5f95cd, - // 0x7352aacd, 0x88d2ac4b, 0x5467169e, 0xd4168a36, 0x1da952aa, 0x2bc0e131, 0x5435ab85, - // 0xc721938c, 0xb604f118, 0x212cd772, 0x576f6f3c, 0x69aa0827, 0xb04954e0, 0x1f257a5b, - // 0x32e882e6, 0xd1b37fcf, 0xde10e082, 0xaa97564f, 0x55210b99, 0x777dde41, 0x65288b28, - // 0x5db9c9c8, 0x5252207e, 0xea63af88, 0xca4e4c70, 0x79148f92, 0xb3b3aea5, 0x1c2a0bd8, - // 0x45badb6b, 0x020090a6, 0x9fea09ba, 0xae4cd583, 0xe7d105eb, 0x59eccce7, 0xcf6a7c88, - // 0x2e5a9b33, 0xdee39d2e, 0xbc686d8c, 0xc7dfdfb7, 0x2462a62a, 0x148ef997, 0x28017beb, - // 0x9da516bc, 0x02f99b56, 0xf1a8bdbd, 0x8450e8bc, 0x5a645fc6, 0x9c4d4c2e, 0xf8a77145, - // 0x80ca80ed, 0x70b7bc63, 0x121b7a47, 0x606e46e2, 0xea4e0fd2, 0xb981091d, 0xfa705cd5, - // 0x6a805fb6, 0xf3ba2475, 0x6a22f4d5, 0xe92c6b32, 0xb27666c1, 0x054b0277, 0x06362955, - // 0x0c8f72e8, 0x21c9eddd, 0x5e8ddb44, 0xd197a71e, 0x1162a17a, 0xd5f1421b, 0x91685dd9, - // 0xe230b73c, 0x9a273985, 0xbec50fb5, 0xb016f4d8, 0x6d5c37fc, 0x25dc6cac, 0xca3d51ae, - // 0x97004d3e, 0x5a194f4f, 0x005d47a0, 0xc7a853e4, 0x452ad686, 0x9114c0c3, 0x65f93218, - // 0x6c2b60e2, 0xac044aeb, 0x2ddfda20, 0x4dd0276e, 0xc61a870e, 0xc95bfc2c, 0xda195076, - // 0x354f97ca, 0x32137480, 0x87fe68b0, 0x6b22b28b, 0x4317ba5c, 0x03ed0d47, 0x97bd480d, - // 0x619de155, 0x366693fe, 0xace200ce, 0x6546161d, 0x825a7e75, 0xd640f113, 0x3775386c, - // 0x6e9c25e5, 0x088a8be4, 0x94b9b7b3, 0x39f1682d, 0x767efd2a, 0xea687310, 0x10352963, - // 0xf6ebb8ed, 0x7a05296a, 0xff5487e7, 0x48509dfc, 0xf39e4cec, 0x8b203189, 0xb0a9570a, - // 0x1691e8bb, 0x610f37ef, 0xc021e846, 0x56f7c080, 0xf7755ab4, 0x07864fa8, 0xe625d050, - // 0x1a81c9fa, 0xd474639e, 0x3f811615, 0x5961f68e, 0xa0f74879, 0x8ab0aafb, 0x5a76cc37, - // 0x69adee7c, 0xcb2bd291, 0x98c16b0e, 0x5f4cf758, 0xade63d79, 0xdeeca28b, 0x0663ae16, - // 0x31a0874d, 0xb9336dbb, 0x198579e2, 0x06b614c2, 0x5338c7b8, 0xd0ab40cc, 0x3fd1d9ca, - // 0x86be3f79, 0xc73ea699, 0x8d76c562, 0x3fb4d865, 0x49fe05d1, 0x19f4d8bf, 0xc37cc553, - // 0x71354e62, 0xf5034b0e, 0xd35120f8, 0xcc745c52, 0x2fc5244c, 0x1a88ac22, 0xbcf8175f, - // 0x36005e32, 0xf9636cdb, 0xa56e213a, 0xa036b783, 0xda369deb, 0x5994b510, 0x9a0c5c1d, - // 0x005985ec, 0x30592bdc, 0xbfba60a5, 0xae4371e8, 0x42d8f5c9, 0x11308268, 0x38ac064a, - // 0xb775f17a, 0x0068d63f, 0xa78cd9c8, 0xe943c524, 0x728c9e63, 0x1999dd1b, 0x04bd23f2, - // 0x2ac632b4, 0x18672908, 0xb7735515, 0x97711e0d, 0xa32a65de, 0xbdc4910c, 0x75575b2e, - // 0xfd4bf85d, 0x9c1494d7, 0x335bc800, 0x239953ae, 0x971fedc6, 0x8563f573, 0xc64adead, - // 0xe022b3cc, 0xb04890d0, 0xc1ca889e, 0x844e0df5, 0x0059ccd6, 0xfa57851b, 0x0b7e4747, - // 0xa0edca48, 0xd24d0309, 0x7bb51774, 0x0c8bb87b, 0xc1c260ce, 0x893359c7, 0xa8afb98c, - // 0xbca6933d, 0x5facc0be, 0xd07dd74e, 0xdd2aabe5, 0xd93c1bfd, 0xd6724ba3, 0xea1c92fd, - // 0x808c0212, 0xc0057e86, 0x18c116e6, 0x95ea19b6, 0x9971f126, 0xefb4c14c, 0x64087ba5, - // 0x6dbe8830, 0xa27661b3, 0xa9837201, 0x4f164171, 0x9108b3d1, 0xf79c865e, 0x541e4696, - // 0x5c4c4977, 0x25fb4114, 0x7cdae73b, 0xace74be7, - // ]); - - // let pk_regular_format_bytes = from_hw_format(&pk_hardware_format.0); - - // let pk = PublicKey::try_from_bytes(pk_regular_format_bytes).unwrap(); - // // let sk = PrivateKey::try_from_bytes(sk_bytes).unwrap(); - - // // let sig = sk.try_sign(&digest_512, &[]).unwrap(); - // // println!("{:x?}", sig); - // // panic!(); - // } } From b1bfbf4b2fb20c51a4e2f6f81664aba7326f6687 Mon Sep 17 00:00:00 2001 From: Max Timkovich Date: Tue, 31 Dec 2024 13:24:26 -0800 Subject: [PATCH 5/6] idx 0 --- rom/dev/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rom/dev/Makefile b/rom/dev/Makefile index b2505b1938..5084ad2e43 100644 --- a/rom/dev/Makefile +++ b/rom/dev/Makefile @@ -72,7 +72,7 @@ build-fw-image: gen-certs build-test-fmc build-test-rt --pqc-key-type $(PQC_KEY_TYPE) \ --key-config $(TARGET_DIR)/keys.toml \ --ecc-pk-idx 1 \ - --pqc-pk-idx 3 \ + --pqc-pk-idx 0 \ --fmc $(TARGET_DIR)/caliptra-rom-test-fmc \ --fmc-version 0 \ --fmc-svn 0 \ From 0399cf2ac15bace9d395f1f4558733cd576065b4 Mon Sep 17 00:00:00 2001 From: Max Timkovich Date: Tue, 31 Dec 2024 13:36:48 -0800 Subject: [PATCH 6/6] add documentation comment --- rom/dev/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/rom/dev/Makefile b/rom/dev/Makefile index 5084ad2e43..361dffc212 100644 --- a/rom/dev/Makefile +++ b/rom/dev/Makefile @@ -16,6 +16,7 @@ TARGET_DIR=../../target/riscv32imc-unknown-none-elf/firmware CURRENT_DIR = $(shell pwd) GIT_REV = $(shell git rev-parse HEAD) EXTRA_CARGO_CONFIG = target.'cfg(all())'.rustflags = [\"-Dwarnings\"] +# Default to MLDSA key type. PQC_KEY_TYPE ?= 2 default: build